@seed-ship/mcp-ui-solid 6.15.0 → 6.17.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.
- package/CHANGELOG.md +68 -0
- package/README.md +20 -3
- package/dist/_virtual/leaflet.markercluster-src.cjs +30 -7
- package/dist/_virtual/leaflet.markercluster-src.cjs.map +1 -1
- package/dist/_virtual/leaflet.markercluster-src.js +28 -5
- package/dist/_virtual/leaflet.markercluster-src.js.map +1 -1
- package/dist/_virtual/{leaflet.markercluster-src2.cjs → leaflet2.markercluster-src.cjs} +1 -1
- package/dist/_virtual/leaflet2.markercluster-src.cjs.map +1 -0
- package/dist/_virtual/{leaflet.markercluster-src2.js → leaflet2.markercluster-src.js} +1 -1
- package/dist/_virtual/leaflet2.markercluster-src.js.map +1 -0
- package/dist/adapters/connector.js +1 -1
- package/dist/components/ActionGroupRenderer.js +1 -1
- package/dist/components/ActionRenderer.js +1 -1
- package/dist/components/AgentCard.js +1 -1
- package/dist/components/AgentHandoff.js +1 -1
- package/dist/components/ArtifactRenderer.js +1 -1
- package/dist/components/AutocompleteDropdown.cjs +1 -2
- package/dist/components/AutocompleteDropdown.cjs.map +1 -1
- package/dist/components/AutocompleteDropdown.js +2 -3
- package/dist/components/AutocompleteFormField.cjs +1 -2
- package/dist/components/AutocompleteFormField.cjs.map +1 -1
- package/dist/components/AutocompleteFormField.js +2 -3
- package/dist/components/BriefingDiff.js +1 -1
- package/dist/components/CarouselRenderer.js +1 -1
- package/dist/components/ChartJSRenderer.js +1 -1
- package/dist/components/ChatPrompt.js +1 -1
- package/dist/components/CodeBlockRenderer.js +1 -1
- package/dist/components/ComponentToolbar.js +1 -1
- package/dist/components/DataPreviewSection.js +1 -1
- package/dist/components/DegradedFallback.cjs.map +1 -1
- package/dist/components/DegradedFallback.d.ts +1 -1
- package/dist/components/DegradedFallback.js +1 -1
- package/dist/components/DegradedFallback.js.map +1 -1
- package/dist/components/DraggableGridItem.cjs +1 -2
- package/dist/components/DraggableGridItem.cjs.map +1 -1
- package/dist/components/DraggableGridItem.js +2 -3
- package/dist/components/EditableUIResourceRenderer.cjs +1 -2
- package/dist/components/EditableUIResourceRenderer.cjs.map +1 -1
- package/dist/components/EditableUIResourceRenderer.js +2 -3
- package/dist/components/ExpandableWrapper.js +2 -2
- package/dist/components/FeedbackInline.js +1 -1
- package/dist/components/FooterRenderer.js +1 -1
- package/dist/components/FormFieldRenderer.js +1 -1
- package/dist/components/FormRenderer.js +1 -1
- package/dist/components/GenerativeUIErrorBoundary.js +1 -1
- package/dist/components/GhostText.cjs +1 -2
- package/dist/components/GhostText.cjs.map +1 -1
- package/dist/components/GhostText.js +2 -3
- package/dist/components/GraphRenderer.cjs +2 -19
- package/dist/components/GraphRenderer.cjs.map +1 -1
- package/dist/components/GraphRenderer.d.ts.map +1 -1
- package/dist/components/GraphRenderer.js +2 -19
- package/dist/components/GraphRenderer.js.map +1 -1
- package/dist/components/GridRenderer.cjs +1 -2
- package/dist/components/GridRenderer.cjs.map +1 -1
- package/dist/components/GridRenderer.js +2 -3
- package/dist/components/ImageGalleryRenderer.js +1 -1
- package/dist/components/LightboxOverlay.js +1 -1
- package/dist/components/MapRenderer.cjs +10 -11
- package/dist/components/MapRenderer.cjs.map +1 -1
- package/dist/components/MapRenderer.d.ts +6 -1
- package/dist/components/MapRenderer.d.ts.map +1 -1
- package/dist/components/MapRenderer.js +7 -8
- package/dist/components/MapRenderer.js.map +1 -1
- package/dist/components/ModalRenderer.js +1 -1
- package/dist/components/PortalDropdownMenu.js +1 -1
- package/dist/components/PresentationFeedback.js +1 -1
- package/dist/components/RenderContext.js +1 -1
- package/dist/components/ResizeHandle.cjs +1 -2
- package/dist/components/ResizeHandle.cjs.map +1 -1
- package/dist/components/ResizeHandle.js +2 -3
- package/dist/components/ScratchpadPanel.js +1 -1
- package/dist/components/SplitStepper.js +1 -1
- package/dist/components/StreamingUIRenderer.js +1 -1
- package/dist/components/UIResourceRenderer.cjs +12 -1
- package/dist/components/UIResourceRenderer.cjs.map +1 -1
- package/dist/components/UIResourceRenderer.d.ts.map +1 -1
- package/dist/components/UIResourceRenderer.js +13 -2
- package/dist/components/UIResourceRenderer.js.map +1 -1
- package/dist/components/VerifiedText.js +1 -1
- package/dist/components/VideoRenderer.js +1 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/core/component.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/core/component.js +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/axis.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/axis.js +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/constant.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/constant.js +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/grid.cjs +2 -2
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/grid.js +2 -2
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/labels.cjs +6 -6
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/labels.js +6 -6
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/line.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/line.js +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/ticks.cjs +2 -2
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/ticks.js +2 -2
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/title.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/title.js +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/utils.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/utils.js +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/grid/index.cjs +3 -3
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/grid/index.js +3 -3
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/indicator/indicator.cjs +4 -4
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/indicator/indicator.js +4 -4
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/legend/category/item.cjs +5 -5
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/legend/category/item.js +5 -5
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/legend/category/items.cjs +5 -5
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/legend/category/items.js +5 -5
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/legend/category.cjs +2 -2
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/legend/category.js +2 -2
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/legend/continuous/handle.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/legend/continuous/handle.js +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/legend/title/index.cjs +3 -3
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/legend/title/index.js +3 -3
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/marker/utils.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/marker/utils.js +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/navigator/index.cjs +5 -5
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/navigator/index.js +5 -5
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/poptip/index.cjs +2 -2
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/poptip/index.js +2 -2
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/select/option.cjs +2 -2
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/select/option.js +2 -2
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/select/select.cjs +2 -2
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/select/select.js +2 -2
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/slider/handle.cjs +2 -2
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/slider/handle.js +2 -2
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/slider/index.cjs +4 -4
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/slider/index.js +4 -4
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/sparkline/columns.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/sparkline/columns.js +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/sparkline/index.cjs +2 -2
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/sparkline/index.js +2 -2
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/sparkline/lines.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/sparkline/lines.js +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/sparkline/utils.cjs +2 -2
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/sparkline/utils.js +2 -2
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/timebar/controller.cjs +2 -2
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/timebar/controller.js +2 -2
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/timebar/handle.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/timebar/handle.js +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/timebar/icons.cjs +4 -4
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/timebar/icons.js +4 -4
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/timebar/timebar.cjs +3 -3
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/timebar/timebar.js +3 -3
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/tooltip/index.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/tooltip/index.js +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/util/selection.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/util/selection.js +1 -1
- package/dist/node_modules/.pnpm/@antv_g-lite@2.7.0/node_modules/@antv/g-lite/dist/index.esm.js +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/behaviors/scroll-canvas.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/behaviors/scroll-canvas.js +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/elements/combos/base-combo.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/elements/combos/base-combo.js +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/elements/edges/base-edge.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/elements/edges/base-edge.js +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/index.cjs +58 -58
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/plugins/legend.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/plugins/legend.js +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/plugins/minimap/index.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/plugins/minimap/index.js +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/plugins/snapline/index.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/plugins/snapline/index.js +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/plugins/tooltip.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/plugins/tooltip.js +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/registry/build-in.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/registry/build-in.js +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/runtime/data.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/runtime/data.js +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/runtime/element.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/runtime/element.js +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/runtime/graph.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/runtime/graph.js +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/runtime/layout.cjs +2 -2
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/runtime/layout.js +2 -2
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/runtime/viewport.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/runtime/viewport.js +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/utils/element.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/utils/element.js +1 -1
- package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/utils/point.js +1 -1
- package/dist/node_modules/.pnpm/@antv_layout@2.0.0/node_modules/@antv/layout/lib/algorithm/antv-dagre/rank/index.js +1 -1
- package/dist/node_modules/.pnpm/@antv_layout@2.0.0/node_modules/@antv/layout/lib/algorithm/concentric/index.js +1 -1
- package/dist/node_modules/.pnpm/@antv_scale@0.4.16/node_modules/@antv/scale/esm/scales/continuous.cjs +1 -1
- package/dist/node_modules/.pnpm/@antv_scale@0.4.16/node_modules/@antv/scale/esm/scales/continuous.js +1 -1
- package/dist/node_modules/.pnpm/@tanstack_solid-virtual@3.13.18_solid-js@1.9.11/node_modules/@tanstack/solid-virtual/dist/esm/index.cjs +13 -0
- package/dist/node_modules/.pnpm/@tanstack_solid-virtual@3.13.18_solid-js@1.9.11/node_modules/@tanstack/solid-virtual/dist/esm/index.cjs.map +1 -1
- package/dist/node_modules/.pnpm/@tanstack_solid-virtual@3.13.18_solid-js@1.9.11/node_modules/@tanstack/solid-virtual/dist/esm/index.js +15 -2
- package/dist/node_modules/.pnpm/@tanstack_solid-virtual@3.13.18_solid-js@1.9.11/node_modules/@tanstack/solid-virtual/dist/esm/index.js.map +1 -1
- package/dist/node_modules/.pnpm/@tanstack_virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/index.cjs +64 -0
- package/dist/node_modules/.pnpm/@tanstack_virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/index.cjs.map +1 -1
- package/dist/node_modules/.pnpm/@tanstack_virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/index.js +66 -2
- package/dist/node_modules/.pnpm/@tanstack_virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/index.js.map +1 -1
- package/dist/node_modules/.pnpm/@tanstack_virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/utils.cjs +1 -1
- package/dist/node_modules/.pnpm/@tanstack_virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/utils.cjs.map +1 -1
- package/dist/node_modules/.pnpm/@tanstack_virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/utils.js +1 -1
- package/dist/node_modules/.pnpm/@tanstack_virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/utils.js.map +1 -1
- package/dist/node_modules/.pnpm/color-string@1.9.1/node_modules/color-string/index.cjs +6 -6
- package/dist/node_modules/.pnpm/{dompurify@3.4.1 → dompurify@3.4.13}/node_modules/dompurify/dist/purify.es.cjs +671 -233
- package/dist/node_modules/.pnpm/dompurify@3.4.13/node_modules/dompurify/dist/purify.es.cjs.map +1 -0
- package/dist/node_modules/.pnpm/{dompurify@3.4.1 → dompurify@3.4.13}/node_modules/dompurify/dist/purify.es.js +671 -233
- package/dist/node_modules/.pnpm/dompurify@3.4.13/node_modules/dompurify/dist/purify.es.js.map +1 -0
- package/dist/node_modules/.pnpm/leaflet.markercluster@1.5.3_leaflet@1.9.4/node_modules/leaflet.markercluster/dist/leaflet.markercluster-src.cjs +7 -7
- package/dist/node_modules/.pnpm/leaflet.markercluster@1.5.3_leaflet@1.9.4/node_modules/leaflet.markercluster/dist/leaflet.markercluster-src.cjs.map +1 -1
- package/dist/node_modules/.pnpm/leaflet.markercluster@1.5.3_leaflet@1.9.4/node_modules/leaflet.markercluster/dist/leaflet.markercluster-src.js +7 -7
- package/dist/node_modules/.pnpm/leaflet.markercluster@1.5.3_leaflet@1.9.4/node_modules/leaflet.markercluster/dist/leaflet.markercluster-src.js.map +1 -1
- package/dist/node_modules/.pnpm/leaflet@1.9.4/node_modules/leaflet/dist/leaflet-src.cjs +83 -83
- package/dist/node_modules/.pnpm/leaflet@1.9.4/node_modules/leaflet/dist/leaflet-src.cjs.map +1 -1
- package/dist/node_modules/.pnpm/leaflet@1.9.4/node_modules/leaflet/dist/leaflet-src.js +83 -83
- package/dist/node_modules/.pnpm/leaflet@1.9.4/node_modules/leaflet/dist/leaflet-src.js.map +1 -1
- package/dist/plugins/groq.cjs +1 -2
- package/dist/plugins/groq.cjs.map +1 -1
- package/dist/plugins/groq.js +1 -2
- package/dist/plugins/rest.cjs +1 -2
- package/dist/plugins/rest.cjs.map +1 -1
- package/dist/plugins/rest.js +1 -2
- package/dist/plugins/supabase.cjs +1 -2
- package/dist/plugins/supabase.cjs.map +1 -1
- package/dist/plugins/supabase.js +1 -2
- package/dist/services/component-registry.cjs +223 -7
- package/dist/services/component-registry.cjs.map +1 -1
- package/dist/services/component-registry.d.ts +0 -3
- package/dist/services/component-registry.d.ts.map +1 -1
- package/dist/services/component-registry.js +223 -7
- package/dist/services/component-registry.js.map +1 -1
- package/dist/services/validation.cjs +1 -23
- package/dist/services/validation.cjs.map +1 -1
- package/dist/services/validation.d.ts.map +1 -1
- package/dist/services/validation.js +2 -24
- package/dist/services/validation.js.map +1 -1
- package/dist/types/index.d.ts +12 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types.d.cts +12 -6
- package/dist/types.d.ts +12 -6
- package/dist/utils/escape-html.cjs +10 -0
- package/dist/utils/escape-html.cjs.map +1 -0
- package/dist/utils/escape-html.d.ts +13 -0
- package/dist/utils/escape-html.d.ts.map +1 -0
- package/dist/utils/escape-html.js +10 -0
- package/dist/utils/escape-html.js.map +1 -0
- package/docs/briefs/BRIEF-graph-component-g6.md +10 -0
- package/package.json +2 -2
- package/src/components/DegradedFallback.tsx +1 -1
- package/src/components/GraphRenderer.tsx +1 -19
- package/src/components/MapRenderer.security.test.ts +55 -2
- package/src/components/MapRenderer.tsx +15 -13
- package/src/components/UIResourceRenderer.tsx +8 -0
- package/src/components/UnsupportedComponent.test.tsx +28 -1
- package/src/components/index.ts +3 -0
- package/src/hooks/useStreamingUI.test.ts +194 -0
- package/src/index.ts +1 -0
- package/src/services/component-registry.test.ts +104 -2
- package/src/services/component-registry.ts +236 -7
- package/src/services/validation.test.ts +26 -0
- package/src/services/validation.ts +12 -24
- package/src/types/index.ts +12 -26
- package/src/types/map-types.test.ts +20 -0
- package/src/utils/escape-html.test.ts +30 -0
- package/src/utils/escape-html.ts +24 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/_virtual/leaflet.markercluster-src2.cjs.map +0 -1
- package/dist/_virtual/leaflet.markercluster-src2.js.map +0 -1
- package/dist/node_modules/.pnpm/dompurify@3.4.1/node_modules/dompurify/dist/purify.es.cjs.map +0 -1
- package/dist/node_modules/.pnpm/dompurify@3.4.1/node_modules/dompurify/dist/purify.es.js.map +0 -1
package/dist/plugins/groq.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const DEFAULT_SYSTEM_PROMPT = `You are an autocomplete assistant. Given the user's partial input, provide a natural completion.
|
|
4
4
|
Rules:
|
|
5
5
|
- Complete the text naturally and concisely
|
|
@@ -93,5 +93,4 @@ ${userPrompt}`;
|
|
|
93
93
|
};
|
|
94
94
|
}
|
|
95
95
|
exports.createGroqPlugin = createGroqPlugin;
|
|
96
|
-
exports.default = createGroqPlugin;
|
|
97
96
|
//# sourceMappingURL=groq.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groq.cjs","sources":["../../src/plugins/groq.ts"],"sourcesContent":["/**\n * Groq LLM Autocomplete Plugin\n * Provides LLM-powered text completion suggestions using Groq API\n *\n * Sprint Autocomplete Feature\n */\n\nimport type {\n AutocompletePlugin,\n AutocompleteResult,\n AutocompleteContext,\n GroqPluginConfig\n} from '../types'\n\n/**\n * Default system prompt for completion\n */\nconst DEFAULT_SYSTEM_PROMPT = `You are an autocomplete assistant. Given the user's partial input, provide a natural completion.\nRules:\n- Complete the text naturally and concisely\n- Return ONLY the completed text (including the original input)\n- Do not add quotes, explanations, or additional text\n- If unsure, return the original input unchanged`\n\n/**\n * Create a Groq LLM autocomplete plugin\n */\nexport function createGroqPlugin(config: GroqPluginConfig): AutocompletePlugin {\n const {\n apiKey,\n model = 'mixtral-8x7b-32768',\n systemPrompt = DEFAULT_SYSTEM_PROMPT,\n maxTokens = 50,\n temperature = 0.3\n } = config\n\n let isConfigured = !!apiKey\n\n return {\n id: 'groq',\n name: 'Groq LLM',\n\n configure(newConfig: Record<string, any>) {\n if (newConfig.apiKey) {\n isConfigured = true\n }\n },\n\n isReady() {\n return isConfigured\n },\n\n async getSuggestions(\n input: string,\n context?: AutocompleteContext\n ): Promise<AutocompleteResult> {\n if (!isConfigured) {\n console.warn('[Groq Plugin] API key not configured')\n return { type: 'completion', completion: input }\n }\n\n if (!input.trim()) {\n return { type: 'completion', completion: '' }\n }\n\n try {\n // Build context-aware prompt\n let userPrompt = `Complete this text: \"${input}\"`\n\n if (context?.fieldName) {\n userPrompt = `Field: ${context.fieldName}\\nComplete this text: \"${input}\"`\n }\n\n if (context?.formData && Object.keys(context.formData).length > 0) {\n const formContext = Object.entries(context.formData)\n .filter(([key, value]) => value && key !== context.fieldName)\n .map(([key, value]) => `${key}: ${value}`)\n .join(', ')\n\n if (formContext) {\n userPrompt = `Form context: ${formContext}\\n${userPrompt}`\n }\n }\n\n const response = await fetch('https://api.groq.com/openai/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`\n },\n body: JSON.stringify({\n model,\n messages: [\n { role: 'system', content: systemPrompt },\n { role: 'user', content: userPrompt }\n ],\n max_tokens: maxTokens,\n temperature,\n stream: false\n })\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n console.error('[Groq Plugin] API error:', response.status, errorText)\n return { type: 'completion', completion: input }\n }\n\n const data = await response.json()\n const completion = data.choices?.[0]?.message?.content?.trim() || input\n\n // Clean up the completion (remove quotes if present)\n let cleanCompletion = completion\n if (cleanCompletion.startsWith('\"') && cleanCompletion.endsWith('\"')) {\n cleanCompletion = cleanCompletion.slice(1, -1)\n }\n if (cleanCompletion.startsWith(\"'\") && cleanCompletion.endsWith(\"'\")) {\n cleanCompletion = cleanCompletion.slice(1, -1)\n }\n\n return {\n type: 'completion',\n completion: cleanCompletion\n }\n } catch (error) {\n console.error('[Groq Plugin] Error:', error)\n return { type: 'completion', completion: input }\n }\n },\n\n dispose() {\n // No cleanup needed\n }\n }\n}\n\nexport default createGroqPlugin\n"],"names":[],"mappings":";;AAiBA,MAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAUvB,SAAS,iBAAiB,QAA8C;AAC7E,QAAM;AAAA,IACJ;AAAA,IACA,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,cAAc;AAAA,EAAA,IACZ;AAEJ,MAAI,eAAe,CAAC,CAAC;AAErB,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IAEN,UAAU,WAAgC;AACxC,UAAI,UAAU,QAAQ;AACpB,uBAAe;AAAA,MACjB;AAAA,IACF;AAAA,IAEA,UAAU;AACR,aAAO;AAAA,IACT;AAAA,IAEA,MAAM,eACJ,OACA,SAC6B;;AAC7B,UAAI,CAAC,cAAc;AACjB,gBAAQ,KAAK,sCAAsC;AACnD,eAAO,EAAE,MAAM,cAAc,YAAY,MAAA;AAAA,MAC3C;AAEA,UAAI,CAAC,MAAM,QAAQ;AACjB,eAAO,EAAE,MAAM,cAAc,YAAY,GAAA;AAAA,MAC3C;AAEA,UAAI;AAEF,YAAI,aAAa,wBAAwB,KAAK;AAE9C,YAAI,mCAAS,WAAW;AACtB,uBAAa,UAAU,QAAQ,SAAS;AAAA,uBAA0B,KAAK;AAAA,QACzE;AAEA,aAAI,mCAAS,aAAY,OAAO,KAAK,QAAQ,QAAQ,EAAE,SAAS,GAAG;AACjE,gBAAM,cAAc,OAAO,QAAQ,QAAQ,QAAQ,EAChD,OAAO,CAAC,CAAC,KAAK,KAAK,MAAM,SAAS,QAAQ,QAAQ,SAAS,EAC3D,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,GAAG,KAAK,KAAK,EAAE,EACxC,KAAK,IAAI;AAEZ,cAAI,aAAa;AACf,yBAAa,iBAAiB,WAAW;AAAA,EAAK,UAAU;AAAA,UAC1D;AAAA,QACF;AAEA,cAAM,WAAW,MAAM,MAAM,mDAAmD;AAAA,UAC9E,QAAQ;AAAA,UACR,SAAS;AAAA,YACP,gBAAgB;AAAA,YAChB,iBAAiB,UAAU,MAAM;AAAA,UAAA;AAAA,UAEnC,MAAM,KAAK,UAAU;AAAA,YACnB;AAAA,YACA,UAAU;AAAA,cACR,EAAE,MAAM,UAAU,SAAS,aAAA;AAAA,cAC3B,EAAE,MAAM,QAAQ,SAAS,WAAA;AAAA,YAAW;AAAA,YAEtC,YAAY;AAAA,YACZ;AAAA,YACA,QAAQ;AAAA,UAAA,CACT;AAAA,QAAA,CACF;AAED,YAAI,CAAC,SAAS,IAAI;AAChB,gBAAM,YAAY,MAAM,SAAS,KAAA;AACjC,kBAAQ,MAAM,4BAA4B,SAAS,QAAQ,SAAS;AACpE,iBAAO,EAAE,MAAM,cAAc,YAAY,MAAA;AAAA,QAC3C;AAEA,cAAM,OAAO,MAAM,SAAS,KAAA;AAC5B,cAAM,eAAa,4BAAK,YAAL,mBAAe,OAAf,mBAAmB,YAAnB,mBAA4B,YAA5B,mBAAqC,WAAU;AAGlE,YAAI,kBAAkB;AACtB,YAAI,gBAAgB,WAAW,GAAG,KAAK,gBAAgB,SAAS,GAAG,GAAG;AACpE,4BAAkB,gBAAgB,MAAM,GAAG,EAAE;AAAA,QAC/C;AACA,YAAI,gBAAgB,WAAW,GAAG,KAAK,gBAAgB,SAAS,GAAG,GAAG;AACpE,4BAAkB,gBAAgB,MAAM,GAAG,EAAE;AAAA,QAC/C;AAEA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,YAAY;AAAA,QAAA;AAAA,MAEhB,SAAS,OAAO;AACd,gBAAQ,MAAM,wBAAwB,KAAK;AAC3C,eAAO,EAAE,MAAM,cAAc,YAAY,MAAA;AAAA,MAC3C;AAAA,IACF;AAAA,IAEA,UAAU;AAAA,IAEV;AAAA,EAAA;AAEJ
|
|
1
|
+
{"version":3,"file":"groq.cjs","sources":["../../src/plugins/groq.ts"],"sourcesContent":["/**\n * Groq LLM Autocomplete Plugin\n * Provides LLM-powered text completion suggestions using Groq API\n *\n * Sprint Autocomplete Feature\n */\n\nimport type {\n AutocompletePlugin,\n AutocompleteResult,\n AutocompleteContext,\n GroqPluginConfig\n} from '../types'\n\n/**\n * Default system prompt for completion\n */\nconst DEFAULT_SYSTEM_PROMPT = `You are an autocomplete assistant. Given the user's partial input, provide a natural completion.\nRules:\n- Complete the text naturally and concisely\n- Return ONLY the completed text (including the original input)\n- Do not add quotes, explanations, or additional text\n- If unsure, return the original input unchanged`\n\n/**\n * Create a Groq LLM autocomplete plugin\n */\nexport function createGroqPlugin(config: GroqPluginConfig): AutocompletePlugin {\n const {\n apiKey,\n model = 'mixtral-8x7b-32768',\n systemPrompt = DEFAULT_SYSTEM_PROMPT,\n maxTokens = 50,\n temperature = 0.3\n } = config\n\n let isConfigured = !!apiKey\n\n return {\n id: 'groq',\n name: 'Groq LLM',\n\n configure(newConfig: Record<string, any>) {\n if (newConfig.apiKey) {\n isConfigured = true\n }\n },\n\n isReady() {\n return isConfigured\n },\n\n async getSuggestions(\n input: string,\n context?: AutocompleteContext\n ): Promise<AutocompleteResult> {\n if (!isConfigured) {\n console.warn('[Groq Plugin] API key not configured')\n return { type: 'completion', completion: input }\n }\n\n if (!input.trim()) {\n return { type: 'completion', completion: '' }\n }\n\n try {\n // Build context-aware prompt\n let userPrompt = `Complete this text: \"${input}\"`\n\n if (context?.fieldName) {\n userPrompt = `Field: ${context.fieldName}\\nComplete this text: \"${input}\"`\n }\n\n if (context?.formData && Object.keys(context.formData).length > 0) {\n const formContext = Object.entries(context.formData)\n .filter(([key, value]) => value && key !== context.fieldName)\n .map(([key, value]) => `${key}: ${value}`)\n .join(', ')\n\n if (formContext) {\n userPrompt = `Form context: ${formContext}\\n${userPrompt}`\n }\n }\n\n const response = await fetch('https://api.groq.com/openai/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`\n },\n body: JSON.stringify({\n model,\n messages: [\n { role: 'system', content: systemPrompt },\n { role: 'user', content: userPrompt }\n ],\n max_tokens: maxTokens,\n temperature,\n stream: false\n })\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n console.error('[Groq Plugin] API error:', response.status, errorText)\n return { type: 'completion', completion: input }\n }\n\n const data = await response.json()\n const completion = data.choices?.[0]?.message?.content?.trim() || input\n\n // Clean up the completion (remove quotes if present)\n let cleanCompletion = completion\n if (cleanCompletion.startsWith('\"') && cleanCompletion.endsWith('\"')) {\n cleanCompletion = cleanCompletion.slice(1, -1)\n }\n if (cleanCompletion.startsWith(\"'\") && cleanCompletion.endsWith(\"'\")) {\n cleanCompletion = cleanCompletion.slice(1, -1)\n }\n\n return {\n type: 'completion',\n completion: cleanCompletion\n }\n } catch (error) {\n console.error('[Groq Plugin] Error:', error)\n return { type: 'completion', completion: input }\n }\n },\n\n dispose() {\n // No cleanup needed\n }\n }\n}\n\nexport default createGroqPlugin\n"],"names":[],"mappings":";;AAiBA,MAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAUvB,SAAS,iBAAiB,QAA8C;AAC7E,QAAM;AAAA,IACJ;AAAA,IACA,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,cAAc;AAAA,EAAA,IACZ;AAEJ,MAAI,eAAe,CAAC,CAAC;AAErB,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IAEN,UAAU,WAAgC;AACxC,UAAI,UAAU,QAAQ;AACpB,uBAAe;AAAA,MACjB;AAAA,IACF;AAAA,IAEA,UAAU;AACR,aAAO;AAAA,IACT;AAAA,IAEA,MAAM,eACJ,OACA,SAC6B;;AAC7B,UAAI,CAAC,cAAc;AACjB,gBAAQ,KAAK,sCAAsC;AACnD,eAAO,EAAE,MAAM,cAAc,YAAY,MAAA;AAAA,MAC3C;AAEA,UAAI,CAAC,MAAM,QAAQ;AACjB,eAAO,EAAE,MAAM,cAAc,YAAY,GAAA;AAAA,MAC3C;AAEA,UAAI;AAEF,YAAI,aAAa,wBAAwB,KAAK;AAE9C,YAAI,mCAAS,WAAW;AACtB,uBAAa,UAAU,QAAQ,SAAS;AAAA,uBAA0B,KAAK;AAAA,QACzE;AAEA,aAAI,mCAAS,aAAY,OAAO,KAAK,QAAQ,QAAQ,EAAE,SAAS,GAAG;AACjE,gBAAM,cAAc,OAAO,QAAQ,QAAQ,QAAQ,EAChD,OAAO,CAAC,CAAC,KAAK,KAAK,MAAM,SAAS,QAAQ,QAAQ,SAAS,EAC3D,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,GAAG,KAAK,KAAK,EAAE,EACxC,KAAK,IAAI;AAEZ,cAAI,aAAa;AACf,yBAAa,iBAAiB,WAAW;AAAA,EAAK,UAAU;AAAA,UAC1D;AAAA,QACF;AAEA,cAAM,WAAW,MAAM,MAAM,mDAAmD;AAAA,UAC9E,QAAQ;AAAA,UACR,SAAS;AAAA,YACP,gBAAgB;AAAA,YAChB,iBAAiB,UAAU,MAAM;AAAA,UAAA;AAAA,UAEnC,MAAM,KAAK,UAAU;AAAA,YACnB;AAAA,YACA,UAAU;AAAA,cACR,EAAE,MAAM,UAAU,SAAS,aAAA;AAAA,cAC3B,EAAE,MAAM,QAAQ,SAAS,WAAA;AAAA,YAAW;AAAA,YAEtC,YAAY;AAAA,YACZ;AAAA,YACA,QAAQ;AAAA,UAAA,CACT;AAAA,QAAA,CACF;AAED,YAAI,CAAC,SAAS,IAAI;AAChB,gBAAM,YAAY,MAAM,SAAS,KAAA;AACjC,kBAAQ,MAAM,4BAA4B,SAAS,QAAQ,SAAS;AACpE,iBAAO,EAAE,MAAM,cAAc,YAAY,MAAA;AAAA,QAC3C;AAEA,cAAM,OAAO,MAAM,SAAS,KAAA;AAC5B,cAAM,eAAa,4BAAK,YAAL,mBAAe,OAAf,mBAAmB,YAAnB,mBAA4B,YAA5B,mBAAqC,WAAU;AAGlE,YAAI,kBAAkB;AACtB,YAAI,gBAAgB,WAAW,GAAG,KAAK,gBAAgB,SAAS,GAAG,GAAG;AACpE,4BAAkB,gBAAgB,MAAM,GAAG,EAAE;AAAA,QAC/C;AACA,YAAI,gBAAgB,WAAW,GAAG,KAAK,gBAAgB,SAAS,GAAG,GAAG;AACpE,4BAAkB,gBAAgB,MAAM,GAAG,EAAE;AAAA,QAC/C;AAEA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,YAAY;AAAA,QAAA;AAAA,MAEhB,SAAS,OAAO;AACd,gBAAQ,MAAM,wBAAwB,KAAK;AAC3C,eAAO,EAAE,MAAM,cAAc,YAAY,MAAA;AAAA,MAC3C;AAAA,IACF;AAAA,IAEA,UAAU;AAAA,IAEV;AAAA,EAAA;AAEJ;;"}
|
package/dist/plugins/groq.js
CHANGED
package/dist/plugins/rest.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
function getByPath(obj, path) {
|
|
4
4
|
return path.split(".").reduce((current, key) => current == null ? void 0 : current[key], obj);
|
|
5
5
|
}
|
|
@@ -88,5 +88,4 @@ function createRestPlugin(config) {
|
|
|
88
88
|
};
|
|
89
89
|
}
|
|
90
90
|
exports.createRestPlugin = createRestPlugin;
|
|
91
|
-
exports.default = createRestPlugin;
|
|
92
91
|
//# sourceMappingURL=rest.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rest.cjs","sources":["../../src/plugins/rest.ts"],"sourcesContent":["/**\n * REST API Autocomplete Plugin\n * Provides suggestions from any REST API endpoint\n *\n * Sprint Autocomplete Feature\n */\n\nimport type {\n AutocompletePlugin,\n AutocompleteResult,\n AutocompleteContext,\n AutocompleteOption,\n RestPluginConfig\n} from '../types'\n\n/**\n * Get value at path (e.g., \"data.results\" -> obj.data.results)\n */\nfunction getByPath(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => current?.[key], obj)\n}\n\n/**\n * Default transform function\n */\nfunction defaultTransform(\n data: any[],\n valueField: string,\n labelField: string\n): AutocompleteOption[] {\n return data.map(item => ({\n value: String(item[valueField] ?? item.value ?? item.id ?? ''),\n label: String(item[labelField] ?? item.label ?? item.name ?? item[valueField] ?? ''),\n metadata: item\n }))\n}\n\n/**\n * Create a REST API autocomplete plugin\n */\nexport function createRestPlugin(config: RestPluginConfig): AutocompletePlugin {\n const {\n endpoint,\n method = 'GET',\n headers = {},\n bodyTemplate,\n transform,\n resultPath,\n valueField = 'value',\n labelField = 'label'\n } = config\n\n return {\n id: 'rest',\n name: 'REST API',\n\n configure(newConfig: Record<string, any>) {\n Object.assign(config, newConfig)\n },\n\n isReady() {\n return !!endpoint\n },\n\n async getSuggestions(\n input: string,\n _context?: AutocompleteContext\n ): Promise<AutocompleteResult> {\n if (!endpoint) {\n console.warn('[REST Plugin] Endpoint not configured')\n return { type: 'options', options: [] }\n }\n\n if (!input.trim()) {\n return { type: 'options', options: [] }\n }\n\n try {\n // Build URL with search placeholder\n const url = endpoint.replace(/\\{search\\}/g, encodeURIComponent(input))\n\n // Build request options\n const requestOptions: RequestInit = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headers\n }\n }\n\n // Add body for POST requests\n if (method === 'POST' && bodyTemplate) {\n const body = bodyTemplate.replace(/\\{search\\}/g, input)\n requestOptions.body = body\n } else if (method === 'POST') {\n requestOptions.body = JSON.stringify({ search: input })\n }\n\n const response = await fetch(url, requestOptions)\n\n if (!response.ok) {\n const errorText = await response.text()\n console.error('[REST Plugin] API error:', response.status, errorText)\n return { type: 'options', options: [] }\n }\n\n const data = await response.json()\n\n // Extract results from path if specified\n let results = resultPath ? getByPath(data, resultPath) : data\n\n // Ensure results is an array\n if (!Array.isArray(results)) {\n if (results && typeof results === 'object') {\n // Try common result structures\n results = results.data || results.results || results.items || [results]\n } else {\n results = []\n }\n }\n\n // Transform results to options\n let options: AutocompleteOption[]\n\n if (transform) {\n options = transform(results)\n } else {\n options = defaultTransform(results, valueField, labelField)\n }\n\n return {\n type: 'options',\n options\n }\n } catch (error) {\n console.error('[REST Plugin] Error:', error)\n return { type: 'options', options: [] }\n }\n },\n\n dispose() {\n // No cleanup needed\n }\n }\n}\n\nexport default createRestPlugin\n"],"names":[],"mappings":";;AAkBA,SAAS,UAAU,KAAU,MAAmB;AAC9C,SAAO,KAAK,MAAM,GAAG,EAAE,OAAO,CAAC,SAAS,QAAQ,mCAAU,MAAM,GAAG;AACrE;AAKA,SAAS,iBACP,MACA,YACA,YACsB;AACtB,SAAO,KAAK,IAAI,CAAA,UAAS;AAAA,IACvB,OAAO,OAAO,KAAK,UAAU,KAAK,KAAK,SAAS,KAAK,MAAM,EAAE;AAAA,IAC7D,OAAO,OAAO,KAAK,UAAU,KAAK,KAAK,SAAS,KAAK,QAAQ,KAAK,UAAU,KAAK,EAAE;AAAA,IACnF,UAAU;AAAA,EAAA,EACV;AACJ;AAKO,SAAS,iBAAiB,QAA8C;AAC7E,QAAM;AAAA,IACJ;AAAA,IACA,SAAS;AAAA,IACT,UAAU,CAAA;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,aAAa;AAAA,EAAA,IACX;AAEJ,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IAEN,UAAU,WAAgC;AACxC,aAAO,OAAO,QAAQ,SAAS;AAAA,IACjC;AAAA,IAEA,UAAU;AACR,aAAO,CAAC,CAAC;AAAA,IACX;AAAA,IAEA,MAAM,eACJ,OACA,UAC6B;AAC7B,UAAI,CAAC,UAAU;AACb,gBAAQ,KAAK,uCAAuC;AACpD,eAAO,EAAE,MAAM,WAAW,SAAS,CAAA,EAAC;AAAA,MACtC;AAEA,UAAI,CAAC,MAAM,QAAQ;AACjB,eAAO,EAAE,MAAM,WAAW,SAAS,CAAA,EAAC;AAAA,MACtC;AAEA,UAAI;AAEF,cAAM,MAAM,SAAS,QAAQ,eAAe,mBAAmB,KAAK,CAAC;AAGrE,cAAM,iBAA8B;AAAA,UAClC;AAAA,UACA,SAAS;AAAA,YACP,gBAAgB;AAAA,YAChB,GAAG;AAAA,UAAA;AAAA,QACL;AAIF,YAAI,WAAW,UAAU,cAAc;AACrC,gBAAM,OAAO,aAAa,QAAQ,eAAe,KAAK;AACtD,yBAAe,OAAO;AAAA,QACxB,WAAW,WAAW,QAAQ;AAC5B,yBAAe,OAAO,KAAK,UAAU,EAAE,QAAQ,OAAO;AAAA,QACxD;AAEA,cAAM,WAAW,MAAM,MAAM,KAAK,cAAc;AAEhD,YAAI,CAAC,SAAS,IAAI;AAChB,gBAAM,YAAY,MAAM,SAAS,KAAA;AACjC,kBAAQ,MAAM,4BAA4B,SAAS,QAAQ,SAAS;AACpE,iBAAO,EAAE,MAAM,WAAW,SAAS,CAAA,EAAC;AAAA,QACtC;AAEA,cAAM,OAAO,MAAM,SAAS,KAAA;AAG5B,YAAI,UAAU,aAAa,UAAU,MAAM,UAAU,IAAI;AAGzD,YAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AAC3B,cAAI,WAAW,OAAO,YAAY,UAAU;AAE1C,sBAAU,QAAQ,QAAQ,QAAQ,WAAW,QAAQ,SAAS,CAAC,OAAO;AAAA,UACxE,OAAO;AACL,sBAAU,CAAA;AAAA,UACZ;AAAA,QACF;AAGA,YAAI;AAEJ,YAAI,WAAW;AACb,oBAAU,UAAU,OAAO;AAAA,QAC7B,OAAO;AACL,oBAAU,iBAAiB,SAAS,YAAY,UAAU;AAAA,QAC5D;AAEA,eAAO;AAAA,UACL,MAAM;AAAA,UACN;AAAA,QAAA;AAAA,MAEJ,SAAS,OAAO;AACd,gBAAQ,MAAM,wBAAwB,KAAK;AAC3C,eAAO,EAAE,MAAM,WAAW,SAAS,CAAA,EAAC;AAAA,MACtC;AAAA,IACF;AAAA,IAEA,UAAU;AAAA,IAEV;AAAA,EAAA;AAEJ
|
|
1
|
+
{"version":3,"file":"rest.cjs","sources":["../../src/plugins/rest.ts"],"sourcesContent":["/**\n * REST API Autocomplete Plugin\n * Provides suggestions from any REST API endpoint\n *\n * Sprint Autocomplete Feature\n */\n\nimport type {\n AutocompletePlugin,\n AutocompleteResult,\n AutocompleteContext,\n AutocompleteOption,\n RestPluginConfig\n} from '../types'\n\n/**\n * Get value at path (e.g., \"data.results\" -> obj.data.results)\n */\nfunction getByPath(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => current?.[key], obj)\n}\n\n/**\n * Default transform function\n */\nfunction defaultTransform(\n data: any[],\n valueField: string,\n labelField: string\n): AutocompleteOption[] {\n return data.map(item => ({\n value: String(item[valueField] ?? item.value ?? item.id ?? ''),\n label: String(item[labelField] ?? item.label ?? item.name ?? item[valueField] ?? ''),\n metadata: item\n }))\n}\n\n/**\n * Create a REST API autocomplete plugin\n */\nexport function createRestPlugin(config: RestPluginConfig): AutocompletePlugin {\n const {\n endpoint,\n method = 'GET',\n headers = {},\n bodyTemplate,\n transform,\n resultPath,\n valueField = 'value',\n labelField = 'label'\n } = config\n\n return {\n id: 'rest',\n name: 'REST API',\n\n configure(newConfig: Record<string, any>) {\n Object.assign(config, newConfig)\n },\n\n isReady() {\n return !!endpoint\n },\n\n async getSuggestions(\n input: string,\n _context?: AutocompleteContext\n ): Promise<AutocompleteResult> {\n if (!endpoint) {\n console.warn('[REST Plugin] Endpoint not configured')\n return { type: 'options', options: [] }\n }\n\n if (!input.trim()) {\n return { type: 'options', options: [] }\n }\n\n try {\n // Build URL with search placeholder\n const url = endpoint.replace(/\\{search\\}/g, encodeURIComponent(input))\n\n // Build request options\n const requestOptions: RequestInit = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headers\n }\n }\n\n // Add body for POST requests\n if (method === 'POST' && bodyTemplate) {\n const body = bodyTemplate.replace(/\\{search\\}/g, input)\n requestOptions.body = body\n } else if (method === 'POST') {\n requestOptions.body = JSON.stringify({ search: input })\n }\n\n const response = await fetch(url, requestOptions)\n\n if (!response.ok) {\n const errorText = await response.text()\n console.error('[REST Plugin] API error:', response.status, errorText)\n return { type: 'options', options: [] }\n }\n\n const data = await response.json()\n\n // Extract results from path if specified\n let results = resultPath ? getByPath(data, resultPath) : data\n\n // Ensure results is an array\n if (!Array.isArray(results)) {\n if (results && typeof results === 'object') {\n // Try common result structures\n results = results.data || results.results || results.items || [results]\n } else {\n results = []\n }\n }\n\n // Transform results to options\n let options: AutocompleteOption[]\n\n if (transform) {\n options = transform(results)\n } else {\n options = defaultTransform(results, valueField, labelField)\n }\n\n return {\n type: 'options',\n options\n }\n } catch (error) {\n console.error('[REST Plugin] Error:', error)\n return { type: 'options', options: [] }\n }\n },\n\n dispose() {\n // No cleanup needed\n }\n }\n}\n\nexport default createRestPlugin\n"],"names":[],"mappings":";;AAkBA,SAAS,UAAU,KAAU,MAAmB;AAC9C,SAAO,KAAK,MAAM,GAAG,EAAE,OAAO,CAAC,SAAS,QAAQ,mCAAU,MAAM,GAAG;AACrE;AAKA,SAAS,iBACP,MACA,YACA,YACsB;AACtB,SAAO,KAAK,IAAI,CAAA,UAAS;AAAA,IACvB,OAAO,OAAO,KAAK,UAAU,KAAK,KAAK,SAAS,KAAK,MAAM,EAAE;AAAA,IAC7D,OAAO,OAAO,KAAK,UAAU,KAAK,KAAK,SAAS,KAAK,QAAQ,KAAK,UAAU,KAAK,EAAE;AAAA,IACnF,UAAU;AAAA,EAAA,EACV;AACJ;AAKO,SAAS,iBAAiB,QAA8C;AAC7E,QAAM;AAAA,IACJ;AAAA,IACA,SAAS;AAAA,IACT,UAAU,CAAA;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,aAAa;AAAA,EAAA,IACX;AAEJ,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IAEN,UAAU,WAAgC;AACxC,aAAO,OAAO,QAAQ,SAAS;AAAA,IACjC;AAAA,IAEA,UAAU;AACR,aAAO,CAAC,CAAC;AAAA,IACX;AAAA,IAEA,MAAM,eACJ,OACA,UAC6B;AAC7B,UAAI,CAAC,UAAU;AACb,gBAAQ,KAAK,uCAAuC;AACpD,eAAO,EAAE,MAAM,WAAW,SAAS,CAAA,EAAC;AAAA,MACtC;AAEA,UAAI,CAAC,MAAM,QAAQ;AACjB,eAAO,EAAE,MAAM,WAAW,SAAS,CAAA,EAAC;AAAA,MACtC;AAEA,UAAI;AAEF,cAAM,MAAM,SAAS,QAAQ,eAAe,mBAAmB,KAAK,CAAC;AAGrE,cAAM,iBAA8B;AAAA,UAClC;AAAA,UACA,SAAS;AAAA,YACP,gBAAgB;AAAA,YAChB,GAAG;AAAA,UAAA;AAAA,QACL;AAIF,YAAI,WAAW,UAAU,cAAc;AACrC,gBAAM,OAAO,aAAa,QAAQ,eAAe,KAAK;AACtD,yBAAe,OAAO;AAAA,QACxB,WAAW,WAAW,QAAQ;AAC5B,yBAAe,OAAO,KAAK,UAAU,EAAE,QAAQ,OAAO;AAAA,QACxD;AAEA,cAAM,WAAW,MAAM,MAAM,KAAK,cAAc;AAEhD,YAAI,CAAC,SAAS,IAAI;AAChB,gBAAM,YAAY,MAAM,SAAS,KAAA;AACjC,kBAAQ,MAAM,4BAA4B,SAAS,QAAQ,SAAS;AACpE,iBAAO,EAAE,MAAM,WAAW,SAAS,CAAA,EAAC;AAAA,QACtC;AAEA,cAAM,OAAO,MAAM,SAAS,KAAA;AAG5B,YAAI,UAAU,aAAa,UAAU,MAAM,UAAU,IAAI;AAGzD,YAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AAC3B,cAAI,WAAW,OAAO,YAAY,UAAU;AAE1C,sBAAU,QAAQ,QAAQ,QAAQ,WAAW,QAAQ,SAAS,CAAC,OAAO;AAAA,UACxE,OAAO;AACL,sBAAU,CAAA;AAAA,UACZ;AAAA,QACF;AAGA,YAAI;AAEJ,YAAI,WAAW;AACb,oBAAU,UAAU,OAAO;AAAA,QAC7B,OAAO;AACL,oBAAU,iBAAiB,SAAS,YAAY,UAAU;AAAA,QAC5D;AAEA,eAAO;AAAA,UACL,MAAM;AAAA,UACN;AAAA,QAAA;AAAA,MAEJ,SAAS,OAAO;AACd,gBAAQ,MAAM,wBAAwB,KAAK;AAC3C,eAAO,EAAE,MAAM,WAAW,SAAS,CAAA,EAAC;AAAA,MACtC;AAAA,IACF;AAAA,IAEA,UAAU;AAAA,IAEV;AAAA,EAAA;AAEJ;;"}
|
package/dist/plugins/rest.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
function createSupabasePlugin(config) {
|
|
4
4
|
const {
|
|
5
5
|
url,
|
|
@@ -75,5 +75,4 @@ function createSupabasePlugin(config) {
|
|
|
75
75
|
};
|
|
76
76
|
}
|
|
77
77
|
exports.createSupabasePlugin = createSupabasePlugin;
|
|
78
|
-
exports.default = createSupabasePlugin;
|
|
79
78
|
//# sourceMappingURL=supabase.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supabase.cjs","sources":["../../src/plugins/supabase.ts"],"sourcesContent":["/**\n * Supabase Autocomplete Plugin\n * Provides data-driven suggestions from a Supabase table\n *\n * Sprint Autocomplete Feature\n */\n\nimport type {\n AutocompletePlugin,\n AutocompleteResult,\n AutocompleteContext,\n AutocompleteOption,\n SupabasePluginConfig\n} from '../types'\n\n/**\n * Create a Supabase autocomplete plugin\n */\nexport function createSupabasePlugin(config: SupabasePluginConfig): AutocompletePlugin {\n const {\n url,\n anonKey,\n table,\n column,\n searchColumn,\n labelColumn,\n limit = 10,\n filter\n } = config\n\n const isConfigured = !!(url && anonKey && table && column)\n const effectiveSearchColumn = searchColumn || column\n const effectiveLabelColumn = labelColumn || column\n\n return {\n id: 'supabase',\n name: 'Supabase',\n\n configure(newConfig: Record<string, any>) {\n // Allow runtime reconfiguration\n Object.assign(config, newConfig)\n },\n\n isReady() {\n return isConfigured\n },\n\n async getSuggestions(\n input: string,\n _context?: AutocompleteContext\n ): Promise<AutocompleteResult> {\n if (!isConfigured) {\n console.warn('[Supabase Plugin] Not properly configured')\n return { type: 'options', options: [] }\n }\n\n if (!input.trim()) {\n return { type: 'options', options: [] }\n }\n\n try {\n // Build query URL\n let queryUrl = `${url}/rest/v1/${table}?select=${column}`\n\n if (column !== effectiveLabelColumn) {\n queryUrl += `,${effectiveLabelColumn}`\n }\n\n // Add ILIKE filter for search\n queryUrl += `&${effectiveSearchColumn}=ilike.${encodeURIComponent(input)}%`\n\n // Add limit\n queryUrl += `&limit=${limit}`\n\n // Add custom filters\n if (filter) {\n Object.entries(filter).forEach(([key, value]) => {\n queryUrl += `&${key}=eq.${encodeURIComponent(String(value))}`\n })\n }\n\n const response = await fetch(queryUrl, {\n headers: {\n 'apikey': anonKey,\n 'Authorization': `Bearer ${anonKey}`,\n 'Content-Type': 'application/json'\n }\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n console.error('[Supabase Plugin] API error:', response.status, errorText)\n return { type: 'options', options: [] }\n }\n\n const data = await response.json()\n\n const options: AutocompleteOption[] = data.map((row: Record<string, any>) => ({\n value: String(row[column]),\n label: String(row[effectiveLabelColumn]),\n metadata: row\n }))\n\n return {\n type: 'options',\n options\n }\n } catch (error) {\n console.error('[Supabase Plugin] Error:', error)\n return { type: 'options', options: [] }\n }\n },\n\n dispose() {\n // No cleanup needed\n }\n }\n}\n\nexport default createSupabasePlugin\n"],"names":[],"mappings":";;AAkBO,SAAS,qBAAqB,QAAkD;AACrF,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,EAAA,IACE;AAEJ,QAAM,eAAe,CAAC,EAAE,OAAO,WAAW,SAAS;AACnD,QAAM,wBAAwB,gBAAgB;AAC9C,QAAM,uBAAuB,eAAe;AAE5C,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IAEN,UAAU,WAAgC;AAExC,aAAO,OAAO,QAAQ,SAAS;AAAA,IACjC;AAAA,IAEA,UAAU;AACR,aAAO;AAAA,IACT;AAAA,IAEA,MAAM,eACJ,OACA,UAC6B;AAC7B,UAAI,CAAC,cAAc;AACjB,gBAAQ,KAAK,2CAA2C;AACxD,eAAO,EAAE,MAAM,WAAW,SAAS,CAAA,EAAC;AAAA,MACtC;AAEA,UAAI,CAAC,MAAM,QAAQ;AACjB,eAAO,EAAE,MAAM,WAAW,SAAS,CAAA,EAAC;AAAA,MACtC;AAEA,UAAI;AAEF,YAAI,WAAW,GAAG,GAAG,YAAY,KAAK,WAAW,MAAM;AAEvD,YAAI,WAAW,sBAAsB;AACnC,sBAAY,IAAI,oBAAoB;AAAA,QACtC;AAGA,oBAAY,IAAI,qBAAqB,UAAU,mBAAmB,KAAK,CAAC;AAGxE,oBAAY,UAAU,KAAK;AAG3B,YAAI,QAAQ;AACV,iBAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC/C,wBAAY,IAAI,GAAG,OAAO,mBAAmB,OAAO,KAAK,CAAC,CAAC;AAAA,UAC7D,CAAC;AAAA,QACH;AAEA,cAAM,WAAW,MAAM,MAAM,UAAU;AAAA,UACrC,SAAS;AAAA,YACP,UAAU;AAAA,YACV,iBAAiB,UAAU,OAAO;AAAA,YAClC,gBAAgB;AAAA,UAAA;AAAA,QAClB,CACD;AAED,YAAI,CAAC,SAAS,IAAI;AAChB,gBAAM,YAAY,MAAM,SAAS,KAAA;AACjC,kBAAQ,MAAM,gCAAgC,SAAS,QAAQ,SAAS;AACxE,iBAAO,EAAE,MAAM,WAAW,SAAS,CAAA,EAAC;AAAA,QACtC;AAEA,cAAM,OAAO,MAAM,SAAS,KAAA;AAE5B,cAAM,UAAgC,KAAK,IAAI,CAAC,SAA8B;AAAA,UAC5E,OAAO,OAAO,IAAI,MAAM,CAAC;AAAA,UACzB,OAAO,OAAO,IAAI,oBAAoB,CAAC;AAAA,UACvC,UAAU;AAAA,QAAA,EACV;AAEF,eAAO;AAAA,UACL,MAAM;AAAA,UACN;AAAA,QAAA;AAAA,MAEJ,SAAS,OAAO;AACd,gBAAQ,MAAM,4BAA4B,KAAK;AAC/C,eAAO,EAAE,MAAM,WAAW,SAAS,CAAA,EAAC;AAAA,MACtC;AAAA,IACF;AAAA,IAEA,UAAU;AAAA,IAEV;AAAA,EAAA;AAEJ
|
|
1
|
+
{"version":3,"file":"supabase.cjs","sources":["../../src/plugins/supabase.ts"],"sourcesContent":["/**\n * Supabase Autocomplete Plugin\n * Provides data-driven suggestions from a Supabase table\n *\n * Sprint Autocomplete Feature\n */\n\nimport type {\n AutocompletePlugin,\n AutocompleteResult,\n AutocompleteContext,\n AutocompleteOption,\n SupabasePluginConfig\n} from '../types'\n\n/**\n * Create a Supabase autocomplete plugin\n */\nexport function createSupabasePlugin(config: SupabasePluginConfig): AutocompletePlugin {\n const {\n url,\n anonKey,\n table,\n column,\n searchColumn,\n labelColumn,\n limit = 10,\n filter\n } = config\n\n const isConfigured = !!(url && anonKey && table && column)\n const effectiveSearchColumn = searchColumn || column\n const effectiveLabelColumn = labelColumn || column\n\n return {\n id: 'supabase',\n name: 'Supabase',\n\n configure(newConfig: Record<string, any>) {\n // Allow runtime reconfiguration\n Object.assign(config, newConfig)\n },\n\n isReady() {\n return isConfigured\n },\n\n async getSuggestions(\n input: string,\n _context?: AutocompleteContext\n ): Promise<AutocompleteResult> {\n if (!isConfigured) {\n console.warn('[Supabase Plugin] Not properly configured')\n return { type: 'options', options: [] }\n }\n\n if (!input.trim()) {\n return { type: 'options', options: [] }\n }\n\n try {\n // Build query URL\n let queryUrl = `${url}/rest/v1/${table}?select=${column}`\n\n if (column !== effectiveLabelColumn) {\n queryUrl += `,${effectiveLabelColumn}`\n }\n\n // Add ILIKE filter for search\n queryUrl += `&${effectiveSearchColumn}=ilike.${encodeURIComponent(input)}%`\n\n // Add limit\n queryUrl += `&limit=${limit}`\n\n // Add custom filters\n if (filter) {\n Object.entries(filter).forEach(([key, value]) => {\n queryUrl += `&${key}=eq.${encodeURIComponent(String(value))}`\n })\n }\n\n const response = await fetch(queryUrl, {\n headers: {\n 'apikey': anonKey,\n 'Authorization': `Bearer ${anonKey}`,\n 'Content-Type': 'application/json'\n }\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n console.error('[Supabase Plugin] API error:', response.status, errorText)\n return { type: 'options', options: [] }\n }\n\n const data = await response.json()\n\n const options: AutocompleteOption[] = data.map((row: Record<string, any>) => ({\n value: String(row[column]),\n label: String(row[effectiveLabelColumn]),\n metadata: row\n }))\n\n return {\n type: 'options',\n options\n }\n } catch (error) {\n console.error('[Supabase Plugin] Error:', error)\n return { type: 'options', options: [] }\n }\n },\n\n dispose() {\n // No cleanup needed\n }\n }\n}\n\nexport default createSupabasePlugin\n"],"names":[],"mappings":";;AAkBO,SAAS,qBAAqB,QAAkD;AACrF,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,EAAA,IACE;AAEJ,QAAM,eAAe,CAAC,EAAE,OAAO,WAAW,SAAS;AACnD,QAAM,wBAAwB,gBAAgB;AAC9C,QAAM,uBAAuB,eAAe;AAE5C,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IAEN,UAAU,WAAgC;AAExC,aAAO,OAAO,QAAQ,SAAS;AAAA,IACjC;AAAA,IAEA,UAAU;AACR,aAAO;AAAA,IACT;AAAA,IAEA,MAAM,eACJ,OACA,UAC6B;AAC7B,UAAI,CAAC,cAAc;AACjB,gBAAQ,KAAK,2CAA2C;AACxD,eAAO,EAAE,MAAM,WAAW,SAAS,CAAA,EAAC;AAAA,MACtC;AAEA,UAAI,CAAC,MAAM,QAAQ;AACjB,eAAO,EAAE,MAAM,WAAW,SAAS,CAAA,EAAC;AAAA,MACtC;AAEA,UAAI;AAEF,YAAI,WAAW,GAAG,GAAG,YAAY,KAAK,WAAW,MAAM;AAEvD,YAAI,WAAW,sBAAsB;AACnC,sBAAY,IAAI,oBAAoB;AAAA,QACtC;AAGA,oBAAY,IAAI,qBAAqB,UAAU,mBAAmB,KAAK,CAAC;AAGxE,oBAAY,UAAU,KAAK;AAG3B,YAAI,QAAQ;AACV,iBAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC/C,wBAAY,IAAI,GAAG,OAAO,mBAAmB,OAAO,KAAK,CAAC,CAAC;AAAA,UAC7D,CAAC;AAAA,QACH;AAEA,cAAM,WAAW,MAAM,MAAM,UAAU;AAAA,UACrC,SAAS;AAAA,YACP,UAAU;AAAA,YACV,iBAAiB,UAAU,OAAO;AAAA,YAClC,gBAAgB;AAAA,UAAA;AAAA,QAClB,CACD;AAED,YAAI,CAAC,SAAS,IAAI;AAChB,gBAAM,YAAY,MAAM,SAAS,KAAA;AACjC,kBAAQ,MAAM,gCAAgC,SAAS,QAAQ,SAAS;AACxE,iBAAO,EAAE,MAAM,WAAW,SAAS,CAAA,EAAC;AAAA,QACtC;AAEA,cAAM,OAAO,MAAM,SAAS,KAAA;AAE5B,cAAM,UAAgC,KAAK,IAAI,CAAC,SAA8B;AAAA,UAC5E,OAAO,OAAO,IAAI,MAAM,CAAC;AAAA,UACzB,OAAO,OAAO,IAAI,oBAAoB,CAAC;AAAA,UACvC,UAAU;AAAA,QAAA,EACV;AAEF,eAAO;AAAA,UACL,MAAM;AAAA,UACN;AAAA,QAAA;AAAA,MAEJ,SAAS,OAAO;AACd,gBAAQ,MAAM,4BAA4B,KAAK;AAC/C,eAAO,EAAE,MAAM,WAAW,SAAS,CAAA,EAAC;AAAA,MACtC;AAAA,IACF;AAAA,IAEA,UAAU;AAAA,IAEV;AAAA,EAAA;AAEJ;;"}
|
package/dist/plugins/supabase.js
CHANGED
|
@@ -514,30 +514,246 @@ const CodeRegistry = {
|
|
|
514
514
|
],
|
|
515
515
|
limits: validation.DEFAULT_RESOURCE_LIMITS
|
|
516
516
|
};
|
|
517
|
+
const MAP_LAT_LNG_POINT_SCHEMA = {
|
|
518
|
+
oneOf: [
|
|
519
|
+
{
|
|
520
|
+
type: "array",
|
|
521
|
+
items: { type: "number" },
|
|
522
|
+
minItems: 2,
|
|
523
|
+
maxItems: 2,
|
|
524
|
+
description: "[latitude, longitude] tuple"
|
|
525
|
+
},
|
|
526
|
+
{
|
|
527
|
+
type: "object",
|
|
528
|
+
properties: {
|
|
529
|
+
lat: { type: "number" },
|
|
530
|
+
lng: { type: "number" }
|
|
531
|
+
},
|
|
532
|
+
required: ["lat", "lng"],
|
|
533
|
+
description: "{ lat, lng } object"
|
|
534
|
+
}
|
|
535
|
+
]
|
|
536
|
+
};
|
|
537
|
+
const MAP_GEOJSON_POSITION_SCHEMA = {
|
|
538
|
+
type: "array",
|
|
539
|
+
items: { type: "number" },
|
|
540
|
+
minItems: 2
|
|
541
|
+
};
|
|
542
|
+
const MAP_GEOJSON_COORDINATES_SCHEMA = {
|
|
543
|
+
anyOf: [
|
|
544
|
+
MAP_GEOJSON_POSITION_SCHEMA,
|
|
545
|
+
{ type: "array", items: MAP_GEOJSON_POSITION_SCHEMA },
|
|
546
|
+
{ type: "array", items: { type: "array", items: MAP_GEOJSON_POSITION_SCHEMA } },
|
|
547
|
+
{
|
|
548
|
+
type: "array",
|
|
549
|
+
items: {
|
|
550
|
+
type: "array",
|
|
551
|
+
items: { type: "array", items: MAP_GEOJSON_POSITION_SCHEMA }
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
]
|
|
555
|
+
};
|
|
556
|
+
const MAP_GEOJSON_BBOX_SCHEMA = {
|
|
557
|
+
type: "array",
|
|
558
|
+
items: { type: "number" }
|
|
559
|
+
};
|
|
560
|
+
const MAP_GEOJSON_GEOMETRY_TYPE_SCHEMA = {
|
|
561
|
+
type: "string",
|
|
562
|
+
enum: [
|
|
563
|
+
"Point",
|
|
564
|
+
"MultiPoint",
|
|
565
|
+
"LineString",
|
|
566
|
+
"MultiLineString",
|
|
567
|
+
"Polygon",
|
|
568
|
+
"MultiPolygon",
|
|
569
|
+
"GeometryCollection"
|
|
570
|
+
]
|
|
571
|
+
};
|
|
572
|
+
const MAP_GEOJSON_SIMPLE_GEOMETRY_SCHEMA = {
|
|
573
|
+
type: "object",
|
|
574
|
+
properties: {
|
|
575
|
+
type: MAP_GEOJSON_GEOMETRY_TYPE_SCHEMA,
|
|
576
|
+
coordinates: MAP_GEOJSON_COORDINATES_SCHEMA,
|
|
577
|
+
bbox: MAP_GEOJSON_BBOX_SCHEMA
|
|
578
|
+
},
|
|
579
|
+
required: ["type"]
|
|
580
|
+
};
|
|
581
|
+
const MAP_GEOJSON_GEOMETRY_SCHEMA = {
|
|
582
|
+
type: "object",
|
|
583
|
+
properties: {
|
|
584
|
+
type: MAP_GEOJSON_GEOMETRY_TYPE_SCHEMA,
|
|
585
|
+
coordinates: MAP_GEOJSON_COORDINATES_SCHEMA,
|
|
586
|
+
geometries: { type: "array", items: MAP_GEOJSON_SIMPLE_GEOMETRY_SCHEMA },
|
|
587
|
+
bbox: MAP_GEOJSON_BBOX_SCHEMA
|
|
588
|
+
},
|
|
589
|
+
required: ["type"]
|
|
590
|
+
};
|
|
591
|
+
const MAP_GEOJSON_FEATURE_SCHEMA = {
|
|
592
|
+
type: "object",
|
|
593
|
+
properties: {
|
|
594
|
+
type: { type: "string", enum: ["Feature"] },
|
|
595
|
+
geometry: { oneOf: [MAP_GEOJSON_GEOMETRY_SCHEMA, { type: "null" }] },
|
|
596
|
+
properties: { oneOf: [{ type: "object" }, { type: "null" }] },
|
|
597
|
+
id: { oneOf: [{ type: "string" }, { type: "number" }] },
|
|
598
|
+
bbox: MAP_GEOJSON_BBOX_SCHEMA
|
|
599
|
+
},
|
|
600
|
+
required: ["type", "geometry"]
|
|
601
|
+
};
|
|
602
|
+
const MAP_GEOJSON_FEATURE_COLLECTION_SCHEMA = {
|
|
603
|
+
type: "object",
|
|
604
|
+
properties: {
|
|
605
|
+
type: { type: "string", enum: ["FeatureCollection"] },
|
|
606
|
+
features: { type: "array", items: MAP_GEOJSON_FEATURE_SCHEMA },
|
|
607
|
+
bbox: MAP_GEOJSON_BBOX_SCHEMA
|
|
608
|
+
},
|
|
609
|
+
required: ["type", "features"]
|
|
610
|
+
};
|
|
611
|
+
const MAP_GEOJSON_SCHEMA = {
|
|
612
|
+
oneOf: [
|
|
613
|
+
MAP_GEOJSON_FEATURE_COLLECTION_SCHEMA,
|
|
614
|
+
MAP_GEOJSON_FEATURE_SCHEMA,
|
|
615
|
+
MAP_GEOJSON_GEOMETRY_SCHEMA
|
|
616
|
+
],
|
|
617
|
+
description: "GeoJSON FeatureCollection, Feature, or Geometry"
|
|
618
|
+
};
|
|
619
|
+
const MAP_GEOJSON_STYLE_SCHEMA = {
|
|
620
|
+
type: "object",
|
|
621
|
+
properties: {
|
|
622
|
+
fillColor: { type: "string" },
|
|
623
|
+
fillOpacity: { type: "number" },
|
|
624
|
+
strokeColor: { type: "string" },
|
|
625
|
+
strokeWeight: { type: "number" },
|
|
626
|
+
strokeOpacity: { type: "number" },
|
|
627
|
+
choroplethField: { type: "string" },
|
|
628
|
+
choroplethScale: {
|
|
629
|
+
type: "array",
|
|
630
|
+
items: {
|
|
631
|
+
type: "array",
|
|
632
|
+
items: [{ type: "number" }, { type: "string" }],
|
|
633
|
+
additionalItems: false,
|
|
634
|
+
minItems: 2,
|
|
635
|
+
maxItems: 2
|
|
636
|
+
}
|
|
637
|
+
},
|
|
638
|
+
choroplethFallback: { type: "string" }
|
|
639
|
+
}
|
|
640
|
+
};
|
|
641
|
+
const MAP_POPUP_SCHEMA = {
|
|
642
|
+
type: "object",
|
|
643
|
+
properties: {
|
|
644
|
+
titleField: { type: "string" },
|
|
645
|
+
fields: { type: "array", items: { type: "string" } },
|
|
646
|
+
template: {
|
|
647
|
+
type: "string",
|
|
648
|
+
description: "Trusted-host HTML template; ignored on the default untrusted renderer path"
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
};
|
|
517
652
|
const MapRegistry = {
|
|
518
653
|
type: "map",
|
|
519
654
|
name: "InteractiveMap",
|
|
520
|
-
description: "Render interactive maps
|
|
655
|
+
description: "Render interactive maps on the default OpenStreetMap base layer (using Leaflet internally) from already-resolved markers, GeoJSON, named layers, clustering, or PMTiles. The renderer does not geocode place names.",
|
|
521
656
|
schema: {
|
|
522
657
|
type: "object",
|
|
523
658
|
properties: {
|
|
524
|
-
center: {
|
|
525
|
-
|
|
659
|
+
center: {
|
|
660
|
+
...MAP_LAT_LNG_POINT_SCHEMA,
|
|
661
|
+
description: "Initial map center as [lat, lng] or { lat, lng }"
|
|
662
|
+
},
|
|
663
|
+
zoom: { type: "number", description: "Initial zoom level (default: 13)" },
|
|
526
664
|
markers: {
|
|
527
665
|
type: "array",
|
|
528
666
|
items: {
|
|
529
667
|
type: "object",
|
|
530
668
|
properties: {
|
|
531
|
-
position:
|
|
532
|
-
|
|
669
|
+
position: MAP_LAT_LNG_POINT_SCHEMA,
|
|
670
|
+
tooltip: { type: "string" },
|
|
533
671
|
popup: { type: "string" }
|
|
534
672
|
},
|
|
535
673
|
required: ["position"]
|
|
536
674
|
}
|
|
537
675
|
},
|
|
538
676
|
height: { type: "string", description: "CSS height (default: 400px)" },
|
|
539
|
-
fitBounds: { type: "boolean", description: "Auto-fit to
|
|
540
|
-
|
|
677
|
+
fitBounds: { type: "boolean", description: "Auto-fit to rendered markers and features" },
|
|
678
|
+
zoomControl: { type: "boolean", description: "Show Leaflet zoom controls" },
|
|
679
|
+
scrollWheelZoom: { type: "boolean", description: "Allow scroll-wheel zoom" },
|
|
680
|
+
tileLayer: {
|
|
681
|
+
type: "string",
|
|
682
|
+
description: "Optional base tile URL template (defaults to OpenStreetMap); the host remains responsible for network policy"
|
|
683
|
+
},
|
|
684
|
+
attribution: { type: "string", description: "Base-map attribution" },
|
|
685
|
+
className: { type: "string", description: "Custom CSS class" },
|
|
686
|
+
geojson: MAP_GEOJSON_SCHEMA,
|
|
687
|
+
geojsonStyle: MAP_GEOJSON_STYLE_SCHEMA,
|
|
688
|
+
popup: MAP_POPUP_SCHEMA,
|
|
689
|
+
layers: {
|
|
690
|
+
type: "array",
|
|
691
|
+
description: "Named GeoJSON overlays",
|
|
692
|
+
items: {
|
|
693
|
+
type: "object",
|
|
694
|
+
properties: {
|
|
695
|
+
name: { type: "string", minLength: 1 },
|
|
696
|
+
visible: { type: "boolean" },
|
|
697
|
+
geojson: MAP_GEOJSON_SCHEMA,
|
|
698
|
+
style: MAP_GEOJSON_STYLE_SCHEMA,
|
|
699
|
+
popup: MAP_POPUP_SCHEMA
|
|
700
|
+
},
|
|
701
|
+
required: ["name", "geojson"]
|
|
702
|
+
}
|
|
703
|
+
},
|
|
704
|
+
clustering: {
|
|
705
|
+
oneOf: [
|
|
706
|
+
{ type: "boolean" },
|
|
707
|
+
{
|
|
708
|
+
type: "object",
|
|
709
|
+
properties: {
|
|
710
|
+
maxClusterRadius: { type: "number" },
|
|
711
|
+
spiderfyOnMaxZoom: { type: "boolean" },
|
|
712
|
+
showCoverageOnHover: { type: "boolean" },
|
|
713
|
+
disableClusteringAtZoom: { type: "number" },
|
|
714
|
+
animateAddingMarkers: { type: "boolean" }
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
],
|
|
718
|
+
description: "Enable marker clustering or provide cluster options"
|
|
719
|
+
},
|
|
720
|
+
pmtiles: {
|
|
721
|
+
type: "object",
|
|
722
|
+
description: "PMTiles vector-tile overlay (requires the optional protomaps-leaflet peer)",
|
|
723
|
+
properties: {
|
|
724
|
+
url: { type: "string" },
|
|
725
|
+
attribution: { type: "string" },
|
|
726
|
+
paintRules: {
|
|
727
|
+
type: "array",
|
|
728
|
+
items: {
|
|
729
|
+
type: "object",
|
|
730
|
+
properties: {
|
|
731
|
+
dataLayer: { type: "string" },
|
|
732
|
+
symbolizer: { type: "string", enum: ["polygon", "line", "circle"] },
|
|
733
|
+
color: { type: "string" },
|
|
734
|
+
width: { type: "number" },
|
|
735
|
+
opacity: { type: "number" }
|
|
736
|
+
},
|
|
737
|
+
required: ["dataLayer", "symbolizer"]
|
|
738
|
+
}
|
|
739
|
+
},
|
|
740
|
+
labelRules: {
|
|
741
|
+
type: "array",
|
|
742
|
+
items: {
|
|
743
|
+
type: "object",
|
|
744
|
+
properties: {
|
|
745
|
+
dataLayer: { type: "string" },
|
|
746
|
+
textField: { type: "string" },
|
|
747
|
+
fontSize: { type: "number" }
|
|
748
|
+
},
|
|
749
|
+
required: ["dataLayer", "textField"]
|
|
750
|
+
}
|
|
751
|
+
},
|
|
752
|
+
maxZoom: { type: "number" },
|
|
753
|
+
minZoom: { type: "number" }
|
|
754
|
+
},
|
|
755
|
+
required: ["url"]
|
|
756
|
+
}
|
|
541
757
|
},
|
|
542
758
|
required: []
|
|
543
759
|
},
|