@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.
Files changed (265) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/README.md +20 -3
  3. package/dist/_virtual/leaflet.markercluster-src.cjs +30 -7
  4. package/dist/_virtual/leaflet.markercluster-src.cjs.map +1 -1
  5. package/dist/_virtual/leaflet.markercluster-src.js +28 -5
  6. package/dist/_virtual/leaflet.markercluster-src.js.map +1 -1
  7. package/dist/_virtual/{leaflet.markercluster-src2.cjs → leaflet2.markercluster-src.cjs} +1 -1
  8. package/dist/_virtual/leaflet2.markercluster-src.cjs.map +1 -0
  9. package/dist/_virtual/{leaflet.markercluster-src2.js → leaflet2.markercluster-src.js} +1 -1
  10. package/dist/_virtual/leaflet2.markercluster-src.js.map +1 -0
  11. package/dist/adapters/connector.js +1 -1
  12. package/dist/components/ActionGroupRenderer.js +1 -1
  13. package/dist/components/ActionRenderer.js +1 -1
  14. package/dist/components/AgentCard.js +1 -1
  15. package/dist/components/AgentHandoff.js +1 -1
  16. package/dist/components/ArtifactRenderer.js +1 -1
  17. package/dist/components/AutocompleteDropdown.cjs +1 -2
  18. package/dist/components/AutocompleteDropdown.cjs.map +1 -1
  19. package/dist/components/AutocompleteDropdown.js +2 -3
  20. package/dist/components/AutocompleteFormField.cjs +1 -2
  21. package/dist/components/AutocompleteFormField.cjs.map +1 -1
  22. package/dist/components/AutocompleteFormField.js +2 -3
  23. package/dist/components/BriefingDiff.js +1 -1
  24. package/dist/components/CarouselRenderer.js +1 -1
  25. package/dist/components/ChartJSRenderer.js +1 -1
  26. package/dist/components/ChatPrompt.js +1 -1
  27. package/dist/components/CodeBlockRenderer.js +1 -1
  28. package/dist/components/ComponentToolbar.js +1 -1
  29. package/dist/components/DataPreviewSection.js +1 -1
  30. package/dist/components/DegradedFallback.cjs.map +1 -1
  31. package/dist/components/DegradedFallback.d.ts +1 -1
  32. package/dist/components/DegradedFallback.js +1 -1
  33. package/dist/components/DegradedFallback.js.map +1 -1
  34. package/dist/components/DraggableGridItem.cjs +1 -2
  35. package/dist/components/DraggableGridItem.cjs.map +1 -1
  36. package/dist/components/DraggableGridItem.js +2 -3
  37. package/dist/components/EditableUIResourceRenderer.cjs +1 -2
  38. package/dist/components/EditableUIResourceRenderer.cjs.map +1 -1
  39. package/dist/components/EditableUIResourceRenderer.js +2 -3
  40. package/dist/components/ExpandableWrapper.js +2 -2
  41. package/dist/components/FeedbackInline.js +1 -1
  42. package/dist/components/FooterRenderer.js +1 -1
  43. package/dist/components/FormFieldRenderer.js +1 -1
  44. package/dist/components/FormRenderer.js +1 -1
  45. package/dist/components/GenerativeUIErrorBoundary.js +1 -1
  46. package/dist/components/GhostText.cjs +1 -2
  47. package/dist/components/GhostText.cjs.map +1 -1
  48. package/dist/components/GhostText.js +2 -3
  49. package/dist/components/GraphRenderer.cjs +2 -19
  50. package/dist/components/GraphRenderer.cjs.map +1 -1
  51. package/dist/components/GraphRenderer.d.ts.map +1 -1
  52. package/dist/components/GraphRenderer.js +2 -19
  53. package/dist/components/GraphRenderer.js.map +1 -1
  54. package/dist/components/GridRenderer.cjs +1 -2
  55. package/dist/components/GridRenderer.cjs.map +1 -1
  56. package/dist/components/GridRenderer.js +2 -3
  57. package/dist/components/ImageGalleryRenderer.js +1 -1
  58. package/dist/components/LightboxOverlay.js +1 -1
  59. package/dist/components/MapRenderer.cjs +10 -11
  60. package/dist/components/MapRenderer.cjs.map +1 -1
  61. package/dist/components/MapRenderer.d.ts +6 -1
  62. package/dist/components/MapRenderer.d.ts.map +1 -1
  63. package/dist/components/MapRenderer.js +7 -8
  64. package/dist/components/MapRenderer.js.map +1 -1
  65. package/dist/components/ModalRenderer.js +1 -1
  66. package/dist/components/PortalDropdownMenu.js +1 -1
  67. package/dist/components/PresentationFeedback.js +1 -1
  68. package/dist/components/RenderContext.js +1 -1
  69. package/dist/components/ResizeHandle.cjs +1 -2
  70. package/dist/components/ResizeHandle.cjs.map +1 -1
  71. package/dist/components/ResizeHandle.js +2 -3
  72. package/dist/components/ScratchpadPanel.js +1 -1
  73. package/dist/components/SplitStepper.js +1 -1
  74. package/dist/components/StreamingUIRenderer.js +1 -1
  75. package/dist/components/UIResourceRenderer.cjs +12 -1
  76. package/dist/components/UIResourceRenderer.cjs.map +1 -1
  77. package/dist/components/UIResourceRenderer.d.ts.map +1 -1
  78. package/dist/components/UIResourceRenderer.js +13 -2
  79. package/dist/components/UIResourceRenderer.js.map +1 -1
  80. package/dist/components/VerifiedText.js +1 -1
  81. package/dist/components/VideoRenderer.js +1 -1
  82. package/dist/components/index.d.ts.map +1 -1
  83. package/dist/index.d.cts +1 -1
  84. package/dist/index.d.ts +1 -1
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/core/component.cjs +1 -1
  87. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/core/component.js +1 -1
  88. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/axis.cjs +1 -1
  89. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/axis.js +1 -1
  90. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/constant.cjs +1 -1
  91. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/constant.js +1 -1
  92. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/grid.cjs +2 -2
  93. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/grid.js +2 -2
  94. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/labels.cjs +6 -6
  95. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/labels.js +6 -6
  96. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/line.cjs +1 -1
  97. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/line.js +1 -1
  98. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/ticks.cjs +2 -2
  99. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/ticks.js +2 -2
  100. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/title.cjs +1 -1
  101. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/title.js +1 -1
  102. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/utils.cjs +1 -1
  103. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/axis/guides/utils.js +1 -1
  104. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/grid/index.cjs +3 -3
  105. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/grid/index.js +3 -3
  106. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/indicator/indicator.cjs +4 -4
  107. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/indicator/indicator.js +4 -4
  108. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/legend/category/item.cjs +5 -5
  109. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/legend/category/item.js +5 -5
  110. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/legend/category/items.cjs +5 -5
  111. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/legend/category/items.js +5 -5
  112. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/legend/category.cjs +2 -2
  113. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/legend/category.js +2 -2
  114. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/legend/continuous/handle.cjs +1 -1
  115. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/legend/continuous/handle.js +1 -1
  116. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/legend/title/index.cjs +3 -3
  117. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/legend/title/index.js +3 -3
  118. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/marker/utils.cjs +1 -1
  119. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/marker/utils.js +1 -1
  120. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/navigator/index.cjs +5 -5
  121. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/navigator/index.js +5 -5
  122. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/poptip/index.cjs +2 -2
  123. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/poptip/index.js +2 -2
  124. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/select/option.cjs +2 -2
  125. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/select/option.js +2 -2
  126. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/select/select.cjs +2 -2
  127. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/select/select.js +2 -2
  128. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/slider/handle.cjs +2 -2
  129. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/slider/handle.js +2 -2
  130. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/slider/index.cjs +4 -4
  131. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/slider/index.js +4 -4
  132. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/sparkline/columns.cjs +1 -1
  133. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/sparkline/columns.js +1 -1
  134. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/sparkline/index.cjs +2 -2
  135. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/sparkline/index.js +2 -2
  136. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/sparkline/lines.cjs +1 -1
  137. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/sparkline/lines.js +1 -1
  138. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/sparkline/utils.cjs +2 -2
  139. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/sparkline/utils.js +2 -2
  140. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/timebar/controller.cjs +2 -2
  141. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/timebar/controller.js +2 -2
  142. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/timebar/handle.cjs +1 -1
  143. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/timebar/handle.js +1 -1
  144. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/timebar/icons.cjs +4 -4
  145. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/timebar/icons.js +4 -4
  146. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/timebar/timebar.cjs +3 -3
  147. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/timebar/timebar.js +3 -3
  148. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/tooltip/index.cjs +1 -1
  149. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/ui/tooltip/index.js +1 -1
  150. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/util/selection.cjs +1 -1
  151. package/dist/node_modules/.pnpm/@antv_component@2.1.11/node_modules/@antv/component/esm/util/selection.js +1 -1
  152. package/dist/node_modules/.pnpm/@antv_g-lite@2.7.0/node_modules/@antv/g-lite/dist/index.esm.js +1 -1
  153. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/behaviors/scroll-canvas.cjs +1 -1
  154. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/behaviors/scroll-canvas.js +1 -1
  155. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/elements/combos/base-combo.cjs +1 -1
  156. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/elements/combos/base-combo.js +1 -1
  157. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/elements/edges/base-edge.cjs +1 -1
  158. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/elements/edges/base-edge.js +1 -1
  159. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/index.cjs +58 -58
  160. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/plugins/legend.cjs +1 -1
  161. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/plugins/legend.js +1 -1
  162. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/plugins/minimap/index.cjs +1 -1
  163. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/plugins/minimap/index.js +1 -1
  164. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/plugins/snapline/index.cjs +1 -1
  165. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/plugins/snapline/index.js +1 -1
  166. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/plugins/tooltip.cjs +1 -1
  167. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/plugins/tooltip.js +1 -1
  168. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/registry/build-in.cjs +1 -1
  169. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/registry/build-in.js +1 -1
  170. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/runtime/data.cjs +1 -1
  171. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/runtime/data.js +1 -1
  172. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/runtime/element.cjs +1 -1
  173. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/runtime/element.js +1 -1
  174. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/runtime/graph.cjs +1 -1
  175. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/runtime/graph.js +1 -1
  176. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/runtime/layout.cjs +2 -2
  177. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/runtime/layout.js +2 -2
  178. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/runtime/viewport.cjs +1 -1
  179. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/runtime/viewport.js +1 -1
  180. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/utils/element.cjs +1 -1
  181. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/utils/element.js +1 -1
  182. package/dist/node_modules/.pnpm/@antv_g6@5.1.0/node_modules/@antv/g6/esm/utils/point.js +1 -1
  183. package/dist/node_modules/.pnpm/@antv_layout@2.0.0/node_modules/@antv/layout/lib/algorithm/antv-dagre/rank/index.js +1 -1
  184. package/dist/node_modules/.pnpm/@antv_layout@2.0.0/node_modules/@antv/layout/lib/algorithm/concentric/index.js +1 -1
  185. package/dist/node_modules/.pnpm/@antv_scale@0.4.16/node_modules/@antv/scale/esm/scales/continuous.cjs +1 -1
  186. package/dist/node_modules/.pnpm/@antv_scale@0.4.16/node_modules/@antv/scale/esm/scales/continuous.js +1 -1
  187. 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
  188. 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
  189. 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
  190. 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
  191. package/dist/node_modules/.pnpm/@tanstack_virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/index.cjs +64 -0
  192. package/dist/node_modules/.pnpm/@tanstack_virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/index.cjs.map +1 -1
  193. package/dist/node_modules/.pnpm/@tanstack_virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/index.js +66 -2
  194. package/dist/node_modules/.pnpm/@tanstack_virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/index.js.map +1 -1
  195. package/dist/node_modules/.pnpm/@tanstack_virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/utils.cjs +1 -1
  196. package/dist/node_modules/.pnpm/@tanstack_virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/utils.cjs.map +1 -1
  197. package/dist/node_modules/.pnpm/@tanstack_virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/utils.js +1 -1
  198. package/dist/node_modules/.pnpm/@tanstack_virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/utils.js.map +1 -1
  199. package/dist/node_modules/.pnpm/color-string@1.9.1/node_modules/color-string/index.cjs +6 -6
  200. package/dist/node_modules/.pnpm/{dompurify@3.4.1 → dompurify@3.4.13}/node_modules/dompurify/dist/purify.es.cjs +671 -233
  201. package/dist/node_modules/.pnpm/dompurify@3.4.13/node_modules/dompurify/dist/purify.es.cjs.map +1 -0
  202. package/dist/node_modules/.pnpm/{dompurify@3.4.1 → dompurify@3.4.13}/node_modules/dompurify/dist/purify.es.js +671 -233
  203. package/dist/node_modules/.pnpm/dompurify@3.4.13/node_modules/dompurify/dist/purify.es.js.map +1 -0
  204. 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
  205. 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
  206. 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
  207. 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
  208. package/dist/node_modules/.pnpm/leaflet@1.9.4/node_modules/leaflet/dist/leaflet-src.cjs +83 -83
  209. package/dist/node_modules/.pnpm/leaflet@1.9.4/node_modules/leaflet/dist/leaflet-src.cjs.map +1 -1
  210. package/dist/node_modules/.pnpm/leaflet@1.9.4/node_modules/leaflet/dist/leaflet-src.js +83 -83
  211. package/dist/node_modules/.pnpm/leaflet@1.9.4/node_modules/leaflet/dist/leaflet-src.js.map +1 -1
  212. package/dist/plugins/groq.cjs +1 -2
  213. package/dist/plugins/groq.cjs.map +1 -1
  214. package/dist/plugins/groq.js +1 -2
  215. package/dist/plugins/rest.cjs +1 -2
  216. package/dist/plugins/rest.cjs.map +1 -1
  217. package/dist/plugins/rest.js +1 -2
  218. package/dist/plugins/supabase.cjs +1 -2
  219. package/dist/plugins/supabase.cjs.map +1 -1
  220. package/dist/plugins/supabase.js +1 -2
  221. package/dist/services/component-registry.cjs +223 -7
  222. package/dist/services/component-registry.cjs.map +1 -1
  223. package/dist/services/component-registry.d.ts +0 -3
  224. package/dist/services/component-registry.d.ts.map +1 -1
  225. package/dist/services/component-registry.js +223 -7
  226. package/dist/services/component-registry.js.map +1 -1
  227. package/dist/services/validation.cjs +1 -23
  228. package/dist/services/validation.cjs.map +1 -1
  229. package/dist/services/validation.d.ts.map +1 -1
  230. package/dist/services/validation.js +2 -24
  231. package/dist/services/validation.js.map +1 -1
  232. package/dist/types/index.d.ts +12 -6
  233. package/dist/types/index.d.ts.map +1 -1
  234. package/dist/types.d.cts +12 -6
  235. package/dist/types.d.ts +12 -6
  236. package/dist/utils/escape-html.cjs +10 -0
  237. package/dist/utils/escape-html.cjs.map +1 -0
  238. package/dist/utils/escape-html.d.ts +13 -0
  239. package/dist/utils/escape-html.d.ts.map +1 -0
  240. package/dist/utils/escape-html.js +10 -0
  241. package/dist/utils/escape-html.js.map +1 -0
  242. package/docs/briefs/BRIEF-graph-component-g6.md +10 -0
  243. package/package.json +2 -2
  244. package/src/components/DegradedFallback.tsx +1 -1
  245. package/src/components/GraphRenderer.tsx +1 -19
  246. package/src/components/MapRenderer.security.test.ts +55 -2
  247. package/src/components/MapRenderer.tsx +15 -13
  248. package/src/components/UIResourceRenderer.tsx +8 -0
  249. package/src/components/UnsupportedComponent.test.tsx +28 -1
  250. package/src/components/index.ts +3 -0
  251. package/src/hooks/useStreamingUI.test.ts +194 -0
  252. package/src/index.ts +1 -0
  253. package/src/services/component-registry.test.ts +104 -2
  254. package/src/services/component-registry.ts +236 -7
  255. package/src/services/validation.test.ts +26 -0
  256. package/src/services/validation.ts +12 -24
  257. package/src/types/index.ts +12 -26
  258. package/src/types/map-types.test.ts +20 -0
  259. package/src/utils/escape-html.test.ts +30 -0
  260. package/src/utils/escape-html.ts +24 -0
  261. package/tsconfig.tsbuildinfo +1 -1
  262. package/dist/_virtual/leaflet.markercluster-src2.cjs.map +0 -1
  263. package/dist/_virtual/leaflet.markercluster-src2.js.map +0 -1
  264. package/dist/node_modules/.pnpm/dompurify@3.4.1/node_modules/dompurify/dist/purify.es.cjs.map +0 -1
  265. package/dist/node_modules/.pnpm/dompurify@3.4.1/node_modules/dompurify/dist/purify.es.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,74 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [6.17.0] - 2026-08-06
9
+
10
+ Map contract parity across the spec, Solid public types, LLM-facing registry,
11
+ and GeoJSON popup trust boundary.
12
+
13
+ ### Added
14
+
15
+ - Re-export the spec's `LatLngPoint` type from the package root and `/types`
16
+ entry points. `MapComponentParams.center` and `MapMarker.position` now accept
17
+ both `[lat, lng]` tuples and `{ lat, lng }` objects, matching the runtime
18
+ schema without breaking existing tuple payloads.
19
+ - Expand `MapRegistry.schema` to every field accepted by
20
+ `MapComponentParamsSchema`, including GeoJSON styling and popups, named
21
+ layers, marker clustering and PMTiles. The registry explicitly states that
22
+ map coordinates must already be resolved; the renderer does not geocode.
23
+ - Add spec-registry parity, public type parity and GeoJSON popup trust-boundary
24
+ regression tests.
25
+
26
+ ### Fixed / security
27
+
28
+ - Forward the host-only `allowHtmlPopups` opt-in through top-level and named
29
+ GeoJSON layers. The default untrusted path remains unchanged: popup template
30
+ markup is ignored and feature values are escaped. Even on the trusted path,
31
+ substituted feature values remain escaped.
32
+
33
+ ### Non-breaking
34
+
35
+ - All type and registry changes are additive. Existing marker-only maps and
36
+ tuple coordinates continue to work, and no payload can enable trusted HTML.
37
+
38
+ ## [6.16.0] - 2026-07-03
39
+
40
+ Post-audit polish pass (global multi-agent analysis follow-up): spec↔solid
41
+ type-drift fix, XSS-escaper consolidation, dead-code removal, and the first
42
+ behavioral coverage of the SSE streaming engine.
43
+
44
+ ### Fixed
45
+
46
+ - `composite` is a valid `ComponentTypeSchema` member but had drifted out of
47
+ solid's hand-maintained `ComponentType` union **and** its
48
+ `KNOWN_COMPONENT_TYPES` set, so a `composite` component was flagged
49
+ `UNKNOWN_COMPONENT_TYPE` despite the pass-through docstrings claiming
50
+ otherwise. `ComponentType` is now re-exported from `@seed-ship/mcp-ui-spec`
51
+ and `KNOWN_COMPONENT_TYPES` is derived from `ComponentTypeSchema.options`, so
52
+ the enum has a single source of truth and cannot drift again. A `spec↔solid`
53
+ drift-guard test locks this in.
54
+ - Because `composite` now passes the validation gate, a `composite` nested as a
55
+ `components[]` entry (or streamed) — which has no leaf render branch — would
56
+ have rendered a silent blank. `ComponentRenderer` now surfaces the visible
57
+ "Unsupported component type" notice for it, preserving audit P1.6's guarantee.
58
+ - `MapRenderer` and `GraphRenderer` carried two divergent private `escapeHtml`
59
+ copies — the map one did **not** escape the single quote. Both now import one
60
+ canonical escaper (`utils/escape-html.ts`, escapes `& < > " '`).
61
+
62
+ ### Added
63
+
64
+ - `hooks/useStreamingUI.test.ts` — first behavioral coverage of the 469-line SSE
65
+ streaming engine: progressive accumulation, out-of-order buffering / reorder,
66
+ terminal (non-recoverable) error, and recoverable-error reconnect with
67
+ backoff. (The hook reads an SSE body via `fetch` + `getReader()`, not
68
+ `EventSource`.)
69
+
70
+ ### Docs
71
+
72
+ - Fixed a `DegradedFallback` docstring that named a non-existent
73
+ `component:error` telemetry event (callers emit `render:error`) and a stale
74
+ `SPEC_VALIDATORS` "14/17 types" count.
75
+
8
76
  ## [6.15.0] - 2026-05-31
9
77
 
10
78
  Unknown component types never render a silent blank (audit P1.6).
package/README.md CHANGED
@@ -5,6 +5,18 @@ SolidJS components + chat toolkit for MCP-generated UI. Part of the [MCP UI ecos
5
5
  [![npm version](https://img.shields.io/npm/v/@seed-ship/mcp-ui-solid.svg)](https://www.npmjs.com/package/@seed-ship/mcp-ui-solid)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
7
 
8
+ ## What's New in v6.17.0
9
+
10
+ - **Map type parity** — `center` and marker `position` now use the spec's
11
+ exported `LatLngPoint` type, accepting both `[lat, lng]` tuples and
12
+ `{ lat, lng }` objects.
13
+ - **Complete map registry contract** — LLM-facing metadata now covers GeoJSON,
14
+ named layers, clustering, PMTiles and every display option accepted by the
15
+ runtime schema. MCP UI renders coordinates; it does not geocode place names.
16
+ - **Trusted GeoJSON popup templates** — the host-only `allowHtmlPopups` opt-in
17
+ is forwarded to GeoJSON layers. The default remains safe: template markup is
18
+ ignored and all feature values are HTML-escaped.
19
+
8
20
  ## What's New in v6.6.0
9
21
 
10
22
  Sprint OpenData / macros — `docs/briefs/ROADMAP-opendata-macro-mcpui.md`.
@@ -263,7 +275,12 @@ import { DataPreviewSection } from '@seed-ship/mcp-ui-solid'
263
275
  }} />
264
276
  ```
265
277
 
266
- ## GeoJSON Maps (v4.0.0)
278
+ ## GeoJSON Maps
279
+
280
+ Map coordinates accept either `[lat, lng]` or `{ lat, lng }`. This package does
281
+ not geocode addresses or place names; resolve them before building the map
282
+ payload. The default base tiles come from OpenStreetMap; Leaflet is the internal
283
+ rendering engine.
267
284
 
268
285
  ### GeoJSON + Choropleth + Popups
269
286
 
@@ -658,7 +675,7 @@ const { state, pinned, close } = useScratchpadState()
658
675
  | `metric` | KPI cards with trends and sparklines |
659
676
  | `text` | Markdown via marked.js |
660
677
  | `code` | Syntax highlighting (highlight.js), line numbers, word wrap |
661
- | `map` | Leaflet: markers, clustering, GeoJSON, choropleth, popups, multi-layer, PMTiles |
678
+ | `map` | OpenStreetMap base tiles via Leaflet: markers, clustering, GeoJSON, choropleth, popups, multi-layer, PMTiles |
662
679
  | `form` | 18 field types, conditional fields, persistence, tool call submit |
663
680
  | `modal` | Portal overlay, sizes sm-full, Escape/backdrop close |
664
681
  | `image-gallery` | Grid layout, lightbox, keyboard nav |
@@ -719,7 +736,7 @@ import {
719
736
  import type {
720
737
  DataValidation, HallucinatedNumber, DataValidationOptions,
721
738
  VerifiedTextContent, DataPreviewContent, MapSectionContent,
722
- MapGeoJSONStyle, MapPopupConfig, MapLayer, MapPMTilesConfig,
739
+ LatLngPoint, MapGeoJSONStyle, MapPopupConfig, MapLayer, MapPMTilesConfig,
723
740
  ChatBus, ChatEvents, ChatCommands,
724
741
  ScratchpadState, ScratchpadSection, ScratchpadEvent,
725
742
  UIComponent, UILayout, ComponentType,
@@ -1,9 +1,32 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const leaflet_markerclusterSrc$1 = require("../node_modules/.pnpm/leaflet.markercluster@1.5.3_leaflet@1.9.4/node_modules/leaflet.markercluster/dist/leaflet.markercluster-src.cjs");
4
- leaflet_markerclusterSrc$1.__require();
5
- const leaflet_markerclusterSrc = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
6
- __proto__: null
7
- }, Symbol.toStringTag, { value: "Module" }));
8
- exports.leaflet_markerclusterSrc = leaflet_markerclusterSrc;
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const _commonjsHelpers = require("./_commonjsHelpers.cjs");
4
+ const leaflet_markerclusterSrc$2 = require("../node_modules/.pnpm/leaflet.markercluster@1.5.3_leaflet@1.9.4/node_modules/leaflet.markercluster/dist/leaflet.markercluster-src.cjs");
5
+ function _mergeNamespaces(n, m) {
6
+ for (var i = 0; i < m.length; i++) {
7
+ const e = m[i];
8
+ if (typeof e !== "string" && !Array.isArray(e)) {
9
+ for (const k in e) {
10
+ if (k !== "default" && !(k in n)) {
11
+ const d = Object.getOwnPropertyDescriptor(e, k);
12
+ if (d) {
13
+ Object.defineProperty(n, k, d.get ? d : {
14
+ enumerable: true,
15
+ get: () => e[k]
16
+ });
17
+ }
18
+ }
19
+ }
20
+ }
21
+ }
22
+ return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { value: "Module" }));
23
+ }
24
+ var leaflet_markerclusterSrcExports = leaflet_markerclusterSrc$2.__require();
25
+ const leaflet_markerclusterSrc = /* @__PURE__ */ _commonjsHelpers.getDefaultExportFromCjs(leaflet_markerclusterSrcExports);
26
+ const leaflet_markerclusterSrc$1 = /* @__PURE__ */ _mergeNamespaces({
27
+ __proto__: null,
28
+ default: leaflet_markerclusterSrc
29
+ }, [leaflet_markerclusterSrcExports]);
30
+ exports.default = leaflet_markerclusterSrc;
31
+ exports.leaflet_markerclusterSrc = leaflet_markerclusterSrc$1;
9
32
  //# sourceMappingURL=leaflet.markercluster-src.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"leaflet.markercluster-src.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
1
+ {"version":3,"file":"leaflet.markercluster-src.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,9 +1,32 @@
1
+ import { getDefaultExportFromCjs } from "./_commonjsHelpers.js";
1
2
  import { __require as requireLeaflet_markerclusterSrc } from "../node_modules/.pnpm/leaflet.markercluster@1.5.3_leaflet@1.9.4/node_modules/leaflet.markercluster/dist/leaflet.markercluster-src.js";
2
- requireLeaflet_markerclusterSrc();
3
- const leaflet_markerclusterSrc = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4
- __proto__: null
5
- }, Symbol.toStringTag, { value: "Module" }));
3
+ function _mergeNamespaces(n, m) {
4
+ for (var i = 0; i < m.length; i++) {
5
+ const e = m[i];
6
+ if (typeof e !== "string" && !Array.isArray(e)) {
7
+ for (const k in e) {
8
+ if (k !== "default" && !(k in n)) {
9
+ const d = Object.getOwnPropertyDescriptor(e, k);
10
+ if (d) {
11
+ Object.defineProperty(n, k, d.get ? d : {
12
+ enumerable: true,
13
+ get: () => e[k]
14
+ });
15
+ }
16
+ }
17
+ }
18
+ }
19
+ }
20
+ return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { value: "Module" }));
21
+ }
22
+ var leaflet_markerclusterSrcExports = requireLeaflet_markerclusterSrc();
23
+ const leaflet_markerclusterSrc = /* @__PURE__ */ getDefaultExportFromCjs(leaflet_markerclusterSrcExports);
24
+ const leaflet_markerclusterSrc$1 = /* @__PURE__ */ _mergeNamespaces({
25
+ __proto__: null,
26
+ default: leaflet_markerclusterSrc
27
+ }, [leaflet_markerclusterSrcExports]);
6
28
  export {
7
- leaflet_markerclusterSrc as l
29
+ leaflet_markerclusterSrc as default,
30
+ leaflet_markerclusterSrc$1 as l
8
31
  };
9
32
  //# sourceMappingURL=leaflet.markercluster-src.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"leaflet.markercluster-src.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
1
+ {"version":3,"file":"leaflet.markercluster-src.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -2,4 +2,4 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  var leaflet_markerclusterSrc = { exports: {} };
4
4
  exports.__module = leaflet_markerclusterSrc;
5
- //# sourceMappingURL=leaflet.markercluster-src2.cjs.map
5
+ //# sourceMappingURL=leaflet2.markercluster-src.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaflet2.markercluster-src.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -2,4 +2,4 @@ var leaflet_markerclusterSrc = { exports: {} };
2
2
  export {
3
3
  leaflet_markerclusterSrc as __module
4
4
  };
5
- //# sourceMappingURL=leaflet.markercluster-src2.js.map
5
+ //# sourceMappingURL=leaflet2.markercluster-src.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaflet2.markercluster-src.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1,5 +1,5 @@
1
1
  import { ConnectorDynamicResultV1Schema, CONNECTOR_DYNAMIC_RESULT_V1 } from "../mcp-ui-spec/dist/schemas.js";
2
- import { object as objectType, array as arrayType, record as recordType, string as stringType, unknown as unknownType } from "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js";
2
+ import { object as objectType, array as arrayType, record as recordType, unknown as unknownType, string as stringType } from "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js";
3
3
  function connectorActionsToActionGroup(actions, options = {}) {
4
4
  return {
5
5
  id: options.id ?? "connector-actions",
@@ -1,4 +1,4 @@
1
- import { delegateEvents, getNextElement, template, insert, createComponent, effect, className, setAttribute, getNextMarker, memo, setProperty, runHydrationEvents } from "solid-js/web";
1
+ import { delegateEvents, getNextElement, insert, createComponent, effect, className, setAttribute, template, getNextMarker, memo, setProperty, runHydrationEvents } from "solid-js/web";
2
2
  import { For, Show } from "solid-js";
3
3
  import { useAction } from "../hooks/useAction.js";
4
4
  var _tmpl$ = /* @__PURE__ */ template(`<span class=text-current>`), _tmpl$2 = /* @__PURE__ */ template(`<a target=_blank rel="noopener noreferrer"><!$><!/><!$><!/>`), _tmpl$3 = /* @__PURE__ */ template(`<span class="animate-spin h-4 w-4 border-2 border-current border-t-transparent rounded-full">`), _tmpl$4 = /* @__PURE__ */ template(`<button type=button><!$><!/><!$><!/><!$><!/>`), _tmpl$5 = /* @__PURE__ */ template(`<div role=group>`);
@@ -1,4 +1,4 @@
1
- import { delegateEvents, getNextElement, template, insert, effect, setProperty, className, runHydrationEvents } from "solid-js/web";
1
+ import { delegateEvents, getNextElement, insert, effect, setProperty, className, runHydrationEvents, template } from "solid-js/web";
2
2
  var _tmpl$ = /* @__PURE__ */ template(`<button>`);
3
3
  const ActionRenderer = (props) => {
4
4
  const handleClick = async () => {
@@ -1,4 +1,4 @@
1
- import { getNextElement, template, getNextMarker, insert, createComponent, memo, effect, className, setAttribute } from "solid-js/web";
1
+ import { getNextElement, getNextMarker, insert, createComponent, memo, effect, className, setAttribute, template } from "solid-js/web";
2
2
  import { Show, For } from "solid-js";
3
3
  var _tmpl$ = /* @__PURE__ */ template(`<span class="text-xs text-gray-400 dark:text-gray-500">`), _tmpl$2 = /* @__PURE__ */ template(`<div class="flex flex-wrap gap-1 mt-1.5">`), _tmpl$3 = /* @__PURE__ */ template(`<div class="mt-1.5 flex items-center gap-1.5 text-xs text-blue-600 dark:text-blue-400"><div class="w-3 h-3 border-2 border-blue-500 border-t-transparent rounded-full animate-spin"></div><!$><!/>`), _tmpl$4 = /* @__PURE__ */ template(`<div class="flex items-start gap-3 p-3 rounded-lg bg-gradient-to-r from-gray-50 to-transparent dark:from-gray-800/50"><div class="flex-shrink-0 w-10 h-10 rounded-full bg-gray-100 dark:bg-gray-700 flex items-center justify-center text-xl"></div><div class="flex-1 min-w-0"><div class="flex items-center gap-2"><span class="font-medium text-sm text-gray-900 dark:text-white truncate"></span><span></span><span class="text-xs text-gray-500 dark:text-gray-400"></span></div><!$><!/><!$><!/><!$><!/>`), _tmpl$5 = /* @__PURE__ */ template(`<span class="px-1.5 py-0.5 text-[10px] rounded bg-blue-50 dark:bg-blue-900/20 text-blue-700 dark:text-blue-300">`), _tmpl$6 = /* @__PURE__ */ template(`<span class="inline-flex items-center gap-1.5 text-xs"><span></span><span class="text-gray-600 dark:text-gray-300"></span><span class="text-gray-400 dark:text-gray-500">`);
4
4
  const AVATAR_MAP = {
@@ -1,4 +1,4 @@
1
- import { getNextElement, template, getNextMarker, insert, createComponent } from "solid-js/web";
1
+ import { getNextElement, getNextMarker, insert, createComponent, template } from "solid-js/web";
2
2
  import { Show } from "solid-js";
3
3
  var _tmpl$ = /* @__PURE__ */ template(`<span class="text-[10px] text-gray-500 dark:text-gray-400 text-center">`), _tmpl$2 = /* @__PURE__ */ template(`<div class="flex items-center gap-3 p-3 rounded-lg bg-gradient-to-r from-blue-50 via-transparent to-purple-50 dark:from-blue-900/10 dark:via-transparent dark:to-purple-900/10 border border-gray-200 dark:border-gray-700"><div class="flex items-center gap-1.5 flex-shrink-0"><span class=text-lg></span><span class="text-sm font-medium text-gray-700 dark:text-gray-300"></span></div><div class="flex-1 flex flex-col items-center gap-0.5"><div class="flex items-center gap-1 text-gray-400 dark:text-gray-500"><div class="h-px flex-1 bg-gray-300 dark:bg-gray-600 min-w-[20px]"></div><span class=text-xs>&rarr;</span><div class="h-px flex-1 bg-gray-300 dark:bg-gray-600 min-w-[20px]"></div></div><!$><!/></div><div class="flex items-center gap-1.5 flex-shrink-0"><span class=text-lg></span><span class="text-sm font-medium text-gray-700 dark:text-gray-300">`);
4
4
  const AVATAR_MAP = {
@@ -1,4 +1,4 @@
1
- import { getNextElement, template, getNextMarker, insert, effect, setAttribute } from "solid-js/web";
1
+ import { getNextElement, getNextMarker, insert, effect, setAttribute, template } from "solid-js/web";
2
2
  var _tmpl$ = /* @__PURE__ */ template(`<div class="flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-800/50 border border-gray-200 dark:border-gray-700 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors"><div class="flex items-center gap-3"><div class="w-10 h-10 flex items-center justify-center bg-white dark:bg-gray-700 rounded-md shadow-sm text-xl"></div><div><h4 class="text-sm font-medium text-gray-900 dark:text-white truncate max-w-[200px]"></h4><p class="text-xs text-gray-500 dark:text-gray-400"><!$><!/> • <!$><!/></p></div></div><a class="px-3 py-1.5 text-sm font-medium text-blue-600 dark:text-blue-400 bg-blue-50 dark:bg-blue-900/20 hover:bg-blue-100 dark:hover:bg-blue-900/40 rounded-md transition-colors flex items-center gap-1"><svg class="w-4 h-4"fill=none viewBox="0 0 24 24"stroke=currentColor><path stroke-linecap=round stroke-linejoin=round stroke-width=2 d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"></path></svg>Download`);
3
3
  const ArtifactRenderer = (props) => {
4
4
  const getIcon = () => {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const web = require("solid-js/web");
4
4
  const solidJs = require("solid-js");
5
5
  var _tmpl$ = /* @__PURE__ */ web.template(`<strong class=mcp-autocomplete-highlight>`), _tmpl$2 = /* @__PURE__ */ web.template(`<span class=mcp-autocomplete-option-icon>`), _tmpl$3 = /* @__PURE__ */ web.template(`<span class=mcp-autocomplete-option-description>`), _tmpl$4 = /* @__PURE__ */ web.template(`<div class=mcp-autocomplete-option-content><!$><!/><div class=mcp-autocomplete-option-text><span class=mcp-autocomplete-option-label></span><!$><!/>`), _tmpl$5 = /* @__PURE__ */ web.template(`<div class=mcp-autocomplete-loading style="padding:12px 16px;color:#6b7280;font-size:0.875rem;display:flex;align-items:center;gap:8px"><span style="display:inline-block;width:14px;height:14px;border:2px solid #e5e7eb;border-top-color:#3b82f6;border-radius:50%;animation:mcp-spin 0.6s linear infinite"></span><!$><!/>`), _tmpl$6 = /* @__PURE__ */ web.template(`<div class=mcp-autocomplete-empty style="padding:12px 16px;color:#9ca3af;font-size:0.875rem;text-align:center">`), _tmpl$7 = /* @__PURE__ */ web.template(`<ul class=mcp-autocomplete-options style="margin:0;padding:4px 0;list-style:none">`), _tmpl$8 = /* @__PURE__ */ web.template(`<div class=mcp-autocomplete-footer style="padding:6px 12px;border-top:1px solid #e5e7eb;background-color:#f9fafb;font-size:0.75rem;color:#6b7280"><kbd style="background-color:#e5e7eb;padding:1px 4px;border-radius:2px;font-family:inherit;font-size:0.7rem">↑</kbd> <kbd style="background-color:#e5e7eb;padding:1px 4px;border-radius:2px;font-family:inherit;font-size:0.7rem">↓</kbd> to navigate, <kbd style="background-color:#e5e7eb;padding:1px 4px;border-radius:2px;font-family:inherit;font-size:0.7rem">Enter</kbd> to select, <kbd style="background-color:#e5e7eb;padding:1px 4px;border-radius:2px;font-family:inherit;font-size:0.7rem">Esc</kbd> to dismiss`), _tmpl$9 = /* @__PURE__ */ web.template(`<div role=listbox aria-label=Suggestions><!$><!/><!$><!/><!$><!/><!$><!/>`), _tmpl$0 = /* @__PURE__ */ web.template(`<li role=option style="padding:8px 16px;font-size:0.875rem;transition:background-color 150ms ease">`);
@@ -197,5 +197,4 @@ const AutocompleteDropdown = (props) => {
197
197
  };
198
198
  web.delegateEvents(["click"]);
199
199
  exports.AutocompleteDropdown = AutocompleteDropdown;
200
- exports.default = AutocompleteDropdown;
201
200
  //# sourceMappingURL=AutocompleteDropdown.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"AutocompleteDropdown.cjs","sources":["../../src/components/AutocompleteDropdown.tsx"],"sourcesContent":["/**\n * AutocompleteDropdown Component\n * Displays data-driven dropdown suggestions\n *\n * Sprint Autocomplete Feature\n */\n\nimport { Component, For, Show, createMemo, JSX } from 'solid-js'\nimport type { AutocompleteOption } from '../types'\n\n/**\n * Props for AutocompleteDropdown\n */\nexport interface AutocompleteDropdownProps {\n /**\n * Options to display\n */\n options: AutocompleteOption[]\n\n /**\n * Currently selected index\n */\n selectedIndex: number\n\n /**\n * Whether dropdown is visible\n */\n isOpen: boolean\n\n /**\n * Callback when option is selected\n */\n onSelect: (option: AutocompleteOption) => void\n\n /**\n * Callback when option is hovered\n */\n onHover?: (index: number) => void\n\n /**\n * Whether loading\n */\n isLoading?: boolean\n\n /**\n * Custom class\n */\n class?: string\n\n /**\n * Max height\n */\n maxHeight?: string\n\n /**\n * Empty state message\n */\n emptyMessage?: string\n\n /**\n * Loading message\n */\n loadingMessage?: string\n\n /**\n * Highlight matching text in options\n */\n highlightMatch?: string\n\n /**\n * Position (default: 'bottom')\n */\n position?: 'top' | 'bottom'\n\n /**\n * Custom option renderer\n */\n renderOption?: (option: AutocompleteOption, isSelected: boolean) => JSX.Element\n}\n\n/**\n * Highlight matching text\n */\nfunction highlightText(text: string, match?: string): JSX.Element {\n if (!match || !text) {\n return <>{text}</>\n }\n\n const lowerText = text.toLowerCase()\n const lowerMatch = match.toLowerCase()\n const startIndex = lowerText.indexOf(lowerMatch)\n\n if (startIndex === -1) {\n return <>{text}</>\n }\n\n const before = text.slice(0, startIndex)\n const matched = text.slice(startIndex, startIndex + match.length)\n const after = text.slice(startIndex + match.length)\n\n return (\n <>\n {before}\n <strong class=\"mcp-autocomplete-highlight\">{matched}</strong>\n {after}\n </>\n )\n}\n\n/**\n * Default option renderer\n */\nconst DefaultOptionRenderer: Component<{\n option: AutocompleteOption\n isSelected: boolean\n highlightMatch?: string\n}> = (props) => {\n const displayLabel = createMemo(() =>\n props.option.label || props.option.value\n )\n\n return (\n <div class=\"mcp-autocomplete-option-content\">\n <Show when={props.option.icon}>\n <span class=\"mcp-autocomplete-option-icon\">{props.option.icon}</span>\n </Show>\n <div class=\"mcp-autocomplete-option-text\">\n <span class=\"mcp-autocomplete-option-label\">\n {highlightText(displayLabel(), props.highlightMatch)}\n </span>\n <Show when={props.option.description}>\n <span class=\"mcp-autocomplete-option-description\">\n {props.option.description}\n </span>\n </Show>\n </div>\n </div>\n )\n}\n\n/**\n * AutocompleteDropdown Component\n */\nexport const AutocompleteDropdown: Component<AutocompleteDropdownProps> = (props) => {\n const positionStyles = createMemo((): JSX.CSSProperties => {\n if (props.position === 'top') {\n return {\n bottom: '100%',\n 'margin-bottom': '4px'\n }\n }\n return {\n top: '100%',\n 'margin-top': '4px'\n }\n })\n\n const containerStyles = createMemo((): JSX.CSSProperties => ({\n position: 'absolute',\n left: '0',\n right: '0',\n 'z-index': '50',\n 'background-color': '#ffffff',\n border: '1px solid #e5e7eb',\n 'border-radius': '6px',\n 'box-shadow': '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n 'max-height': props.maxHeight || '240px',\n overflow: 'auto',\n ...positionStyles()\n }))\n\n return (\n <Show when={props.isOpen}>\n <div\n class={`mcp-autocomplete-dropdown ${props.class || ''}`}\n style={containerStyles()}\n role=\"listbox\"\n aria-label=\"Suggestions\"\n >\n {/* Loading state */}\n <Show when={props.isLoading}>\n <div\n class=\"mcp-autocomplete-loading\"\n style={{\n padding: '12px 16px',\n color: '#6b7280',\n 'font-size': '0.875rem',\n display: 'flex',\n 'align-items': 'center',\n gap: '8px'\n }}\n >\n <span\n style={{\n display: 'inline-block',\n width: '14px',\n height: '14px',\n border: '2px solid #e5e7eb',\n 'border-top-color': '#3b82f6',\n 'border-radius': '50%',\n animation: 'mcp-spin 0.6s linear infinite'\n }}\n />\n {props.loadingMessage || 'Loading...'}\n </div>\n </Show>\n\n {/* Empty state */}\n <Show when={!props.isLoading && props.options.length === 0}>\n <div\n class=\"mcp-autocomplete-empty\"\n style={{\n padding: '12px 16px',\n color: '#9ca3af',\n 'font-size': '0.875rem',\n 'text-align': 'center'\n }}\n >\n {props.emptyMessage || 'No suggestions found'}\n </div>\n </Show>\n\n {/* Options list */}\n <Show when={!props.isLoading && props.options.length > 0}>\n <ul\n class=\"mcp-autocomplete-options\"\n style={{ margin: '0', padding: '4px 0', 'list-style': 'none' }}\n >\n <For each={props.options}>\n {(option, index) => {\n const isSelected = () => index() === props.selectedIndex\n const isDisabled = () => option.disabled\n\n return (\n <li\n role=\"option\"\n aria-selected={isSelected()}\n aria-disabled={isDisabled()}\n class={`mcp-autocomplete-option ${isSelected() ? 'mcp-autocomplete-option-selected' : ''} ${isDisabled() ? 'mcp-autocomplete-option-disabled' : ''}`}\n style={{\n padding: '8px 16px',\n cursor: isDisabled() ? 'not-allowed' : 'pointer',\n 'background-color': isSelected() ? '#eff6ff' : 'transparent',\n color: isDisabled() ? '#9ca3af' : '#374151',\n 'font-size': '0.875rem',\n transition: 'background-color 150ms ease'\n }}\n onClick={() => {\n if (!isDisabled()) {\n props.onSelect(option)\n }\n }}\n onMouseEnter={() => {\n if (!isDisabled()) {\n props.onHover?.(index())\n }\n }}\n >\n <Show\n when={props.renderOption}\n fallback={\n <DefaultOptionRenderer\n option={option}\n isSelected={isSelected()}\n highlightMatch={props.highlightMatch}\n />\n }\n >\n {props.renderOption!(option, isSelected())}\n </Show>\n </li>\n )\n }}\n </For>\n </ul>\n </Show>\n\n {/* Footer hint */}\n <Show when={!props.isLoading && props.options.length > 0}>\n <div\n class=\"mcp-autocomplete-footer\"\n style={{\n padding: '6px 12px',\n 'border-top': '1px solid #e5e7eb',\n 'background-color': '#f9fafb',\n 'font-size': '0.75rem',\n color: '#6b7280'\n }}\n >\n <kbd style={{\n 'background-color': '#e5e7eb',\n padding: '1px 4px',\n 'border-radius': '2px',\n 'font-family': 'inherit',\n 'font-size': '0.7rem'\n }}>↑</kbd>\n {' '}\n <kbd style={{\n 'background-color': '#e5e7eb',\n padding: '1px 4px',\n 'border-radius': '2px',\n 'font-family': 'inherit',\n 'font-size': '0.7rem'\n }}>↓</kbd>\n {' to navigate, '}\n <kbd style={{\n 'background-color': '#e5e7eb',\n padding: '1px 4px',\n 'border-radius': '2px',\n 'font-family': 'inherit',\n 'font-size': '0.7rem'\n }}>Enter</kbd>\n {' to select, '}\n <kbd style={{\n 'background-color': '#e5e7eb',\n padding: '1px 4px',\n 'border-radius': '2px',\n 'font-family': 'inherit',\n 'font-size': '0.7rem'\n }}>Esc</kbd>\n {' to dismiss'}\n </div>\n </Show>\n </div>\n </Show>\n )\n}\n\nexport default AutocompleteDropdown\n"],"names":["highlightText","text","match","lowerText","toLowerCase","lowerMatch","startIndex","indexOf","before","slice","matched","length","after","_el$","_$getNextElement","_tmpl$","_$insert","DefaultOptionRenderer","props","displayLabel","createMemo","option","label","value","_el$2","_tmpl$4","_el$9","firstChild","_el$0","_co$2","_$getNextMarker","nextSibling","_el$4","_el$5","_el$7","_el$8","_co$","_$createComponent","Show","when","icon","children","_el$3","_tmpl$2","highlightMatch","description","_el$6","_tmpl$3","AutocompleteDropdown","positionStyles","position","bottom","top","containerStyles","left","right","border","maxHeight","overflow","isOpen","_el$1","_tmpl$9","_el$24","_el$25","_co$4","_el$26","_el$27","_co$5","_el$28","_el$29","_co$6","_el$30","_el$31","_co$7","isLoading","_el$10","_tmpl$5","_el$11","_el$12","_el$13","_co$3","loadingMessage","_$memo","options","_el$14","_tmpl$6","emptyMessage","_el$15","_tmpl$7","For","each","index","isSelected","selectedIndex","isDisabled","disabled","_el$32","_tmpl$0","addEventListener","onHover","$$click","onSelect","renderOption","fallback","_$effect","_p$","_v$3","_v$4","_v$5","_v$6","_v$7","_v$8","e","_$setAttribute","t","a","_$className","o","_$setStyleProperty","i","n","undefined","_$runHydrationEvents","_el$16","_tmpl$8","_el$17","_el$18","_el$19","_el$20","_el$21","_el$22","_v$","class","_v$2","_$style","_$delegateEvents"],"mappings":"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"}
1
+ {"version":3,"file":"AutocompleteDropdown.cjs","sources":["../../src/components/AutocompleteDropdown.tsx"],"sourcesContent":["/**\n * AutocompleteDropdown Component\n * Displays data-driven dropdown suggestions\n *\n * Sprint Autocomplete Feature\n */\n\nimport { Component, For, Show, createMemo, JSX } from 'solid-js'\nimport type { AutocompleteOption } from '../types'\n\n/**\n * Props for AutocompleteDropdown\n */\nexport interface AutocompleteDropdownProps {\n /**\n * Options to display\n */\n options: AutocompleteOption[]\n\n /**\n * Currently selected index\n */\n selectedIndex: number\n\n /**\n * Whether dropdown is visible\n */\n isOpen: boolean\n\n /**\n * Callback when option is selected\n */\n onSelect: (option: AutocompleteOption) => void\n\n /**\n * Callback when option is hovered\n */\n onHover?: (index: number) => void\n\n /**\n * Whether loading\n */\n isLoading?: boolean\n\n /**\n * Custom class\n */\n class?: string\n\n /**\n * Max height\n */\n maxHeight?: string\n\n /**\n * Empty state message\n */\n emptyMessage?: string\n\n /**\n * Loading message\n */\n loadingMessage?: string\n\n /**\n * Highlight matching text in options\n */\n highlightMatch?: string\n\n /**\n * Position (default: 'bottom')\n */\n position?: 'top' | 'bottom'\n\n /**\n * Custom option renderer\n */\n renderOption?: (option: AutocompleteOption, isSelected: boolean) => JSX.Element\n}\n\n/**\n * Highlight matching text\n */\nfunction highlightText(text: string, match?: string): JSX.Element {\n if (!match || !text) {\n return <>{text}</>\n }\n\n const lowerText = text.toLowerCase()\n const lowerMatch = match.toLowerCase()\n const startIndex = lowerText.indexOf(lowerMatch)\n\n if (startIndex === -1) {\n return <>{text}</>\n }\n\n const before = text.slice(0, startIndex)\n const matched = text.slice(startIndex, startIndex + match.length)\n const after = text.slice(startIndex + match.length)\n\n return (\n <>\n {before}\n <strong class=\"mcp-autocomplete-highlight\">{matched}</strong>\n {after}\n </>\n )\n}\n\n/**\n * Default option renderer\n */\nconst DefaultOptionRenderer: Component<{\n option: AutocompleteOption\n isSelected: boolean\n highlightMatch?: string\n}> = (props) => {\n const displayLabel = createMemo(() =>\n props.option.label || props.option.value\n )\n\n return (\n <div class=\"mcp-autocomplete-option-content\">\n <Show when={props.option.icon}>\n <span class=\"mcp-autocomplete-option-icon\">{props.option.icon}</span>\n </Show>\n <div class=\"mcp-autocomplete-option-text\">\n <span class=\"mcp-autocomplete-option-label\">\n {highlightText(displayLabel(), props.highlightMatch)}\n </span>\n <Show when={props.option.description}>\n <span class=\"mcp-autocomplete-option-description\">\n {props.option.description}\n </span>\n </Show>\n </div>\n </div>\n )\n}\n\n/**\n * AutocompleteDropdown Component\n */\nexport const AutocompleteDropdown: Component<AutocompleteDropdownProps> = (props) => {\n const positionStyles = createMemo((): JSX.CSSProperties => {\n if (props.position === 'top') {\n return {\n bottom: '100%',\n 'margin-bottom': '4px'\n }\n }\n return {\n top: '100%',\n 'margin-top': '4px'\n }\n })\n\n const containerStyles = createMemo((): JSX.CSSProperties => ({\n position: 'absolute',\n left: '0',\n right: '0',\n 'z-index': '50',\n 'background-color': '#ffffff',\n border: '1px solid #e5e7eb',\n 'border-radius': '6px',\n 'box-shadow': '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n 'max-height': props.maxHeight || '240px',\n overflow: 'auto',\n ...positionStyles()\n }))\n\n return (\n <Show when={props.isOpen}>\n <div\n class={`mcp-autocomplete-dropdown ${props.class || ''}`}\n style={containerStyles()}\n role=\"listbox\"\n aria-label=\"Suggestions\"\n >\n {/* Loading state */}\n <Show when={props.isLoading}>\n <div\n class=\"mcp-autocomplete-loading\"\n style={{\n padding: '12px 16px',\n color: '#6b7280',\n 'font-size': '0.875rem',\n display: 'flex',\n 'align-items': 'center',\n gap: '8px'\n }}\n >\n <span\n style={{\n display: 'inline-block',\n width: '14px',\n height: '14px',\n border: '2px solid #e5e7eb',\n 'border-top-color': '#3b82f6',\n 'border-radius': '50%',\n animation: 'mcp-spin 0.6s linear infinite'\n }}\n />\n {props.loadingMessage || 'Loading...'}\n </div>\n </Show>\n\n {/* Empty state */}\n <Show when={!props.isLoading && props.options.length === 0}>\n <div\n class=\"mcp-autocomplete-empty\"\n style={{\n padding: '12px 16px',\n color: '#9ca3af',\n 'font-size': '0.875rem',\n 'text-align': 'center'\n }}\n >\n {props.emptyMessage || 'No suggestions found'}\n </div>\n </Show>\n\n {/* Options list */}\n <Show when={!props.isLoading && props.options.length > 0}>\n <ul\n class=\"mcp-autocomplete-options\"\n style={{ margin: '0', padding: '4px 0', 'list-style': 'none' }}\n >\n <For each={props.options}>\n {(option, index) => {\n const isSelected = () => index() === props.selectedIndex\n const isDisabled = () => option.disabled\n\n return (\n <li\n role=\"option\"\n aria-selected={isSelected()}\n aria-disabled={isDisabled()}\n class={`mcp-autocomplete-option ${isSelected() ? 'mcp-autocomplete-option-selected' : ''} ${isDisabled() ? 'mcp-autocomplete-option-disabled' : ''}`}\n style={{\n padding: '8px 16px',\n cursor: isDisabled() ? 'not-allowed' : 'pointer',\n 'background-color': isSelected() ? '#eff6ff' : 'transparent',\n color: isDisabled() ? '#9ca3af' : '#374151',\n 'font-size': '0.875rem',\n transition: 'background-color 150ms ease'\n }}\n onClick={() => {\n if (!isDisabled()) {\n props.onSelect(option)\n }\n }}\n onMouseEnter={() => {\n if (!isDisabled()) {\n props.onHover?.(index())\n }\n }}\n >\n <Show\n when={props.renderOption}\n fallback={\n <DefaultOptionRenderer\n option={option}\n isSelected={isSelected()}\n highlightMatch={props.highlightMatch}\n />\n }\n >\n {props.renderOption!(option, isSelected())}\n </Show>\n </li>\n )\n }}\n </For>\n </ul>\n </Show>\n\n {/* Footer hint */}\n <Show when={!props.isLoading && props.options.length > 0}>\n <div\n class=\"mcp-autocomplete-footer\"\n style={{\n padding: '6px 12px',\n 'border-top': '1px solid #e5e7eb',\n 'background-color': '#f9fafb',\n 'font-size': '0.75rem',\n color: '#6b7280'\n }}\n >\n <kbd style={{\n 'background-color': '#e5e7eb',\n padding: '1px 4px',\n 'border-radius': '2px',\n 'font-family': 'inherit',\n 'font-size': '0.7rem'\n }}>↑</kbd>\n {' '}\n <kbd style={{\n 'background-color': '#e5e7eb',\n padding: '1px 4px',\n 'border-radius': '2px',\n 'font-family': 'inherit',\n 'font-size': '0.7rem'\n }}>↓</kbd>\n {' to navigate, '}\n <kbd style={{\n 'background-color': '#e5e7eb',\n padding: '1px 4px',\n 'border-radius': '2px',\n 'font-family': 'inherit',\n 'font-size': '0.7rem'\n }}>Enter</kbd>\n {' to select, '}\n <kbd style={{\n 'background-color': '#e5e7eb',\n padding: '1px 4px',\n 'border-radius': '2px',\n 'font-family': 'inherit',\n 'font-size': '0.7rem'\n }}>Esc</kbd>\n {' to dismiss'}\n </div>\n </Show>\n </div>\n </Show>\n )\n}\n\nexport default AutocompleteDropdown\n"],"names":["highlightText","text","match","lowerText","toLowerCase","lowerMatch","startIndex","indexOf","before","slice","matched","length","after","_el$","_$getNextElement","_tmpl$","_$insert","DefaultOptionRenderer","props","displayLabel","createMemo","option","label","value","_el$2","_tmpl$4","_el$9","firstChild","_el$0","_co$2","_$getNextMarker","nextSibling","_el$4","_el$5","_el$7","_el$8","_co$","_$createComponent","Show","when","icon","children","_el$3","_tmpl$2","highlightMatch","description","_el$6","_tmpl$3","AutocompleteDropdown","positionStyles","position","bottom","top","containerStyles","left","right","border","maxHeight","overflow","isOpen","_el$1","_tmpl$9","_el$24","_el$25","_co$4","_el$26","_el$27","_co$5","_el$28","_el$29","_co$6","_el$30","_el$31","_co$7","isLoading","_el$10","_tmpl$5","_el$11","_el$12","_el$13","_co$3","loadingMessage","_$memo","options","_el$14","_tmpl$6","emptyMessage","_el$15","_tmpl$7","For","each","index","isSelected","selectedIndex","isDisabled","disabled","_el$32","_tmpl$0","addEventListener","onHover","$$click","onSelect","renderOption","fallback","_$effect","_p$","_v$3","_v$4","_v$5","_v$6","_v$7","_v$8","e","_$setAttribute","t","a","_$className","o","_$setStyleProperty","i","n","undefined","_$runHydrationEvents","_el$16","_tmpl$8","_el$17","_el$18","_el$19","_el$20","_el$21","_el$22","_v$","class","_v$2","_$style","_$delegateEvents"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { delegateEvents, createComponent, getNextElement, template, getNextMarker, insert, memo, effect, setAttribute, className, setStyleProperty, runHydrationEvents, style } from "solid-js/web";
1
+ import { delegateEvents, createComponent, getNextElement, getNextMarker, insert, memo, effect, setAttribute, className, setStyleProperty, runHydrationEvents, style, template } from "solid-js/web";
2
2
  import { createMemo, Show, For } from "solid-js";
3
3
  var _tmpl$ = /* @__PURE__ */ template(`<strong class=mcp-autocomplete-highlight>`), _tmpl$2 = /* @__PURE__ */ template(`<span class=mcp-autocomplete-option-icon>`), _tmpl$3 = /* @__PURE__ */ template(`<span class=mcp-autocomplete-option-description>`), _tmpl$4 = /* @__PURE__ */ template(`<div class=mcp-autocomplete-option-content><!$><!/><div class=mcp-autocomplete-option-text><span class=mcp-autocomplete-option-label></span><!$><!/>`), _tmpl$5 = /* @__PURE__ */ template(`<div class=mcp-autocomplete-loading style="padding:12px 16px;color:#6b7280;font-size:0.875rem;display:flex;align-items:center;gap:8px"><span style="display:inline-block;width:14px;height:14px;border:2px solid #e5e7eb;border-top-color:#3b82f6;border-radius:50%;animation:mcp-spin 0.6s linear infinite"></span><!$><!/>`), _tmpl$6 = /* @__PURE__ */ template(`<div class=mcp-autocomplete-empty style="padding:12px 16px;color:#9ca3af;font-size:0.875rem;text-align:center">`), _tmpl$7 = /* @__PURE__ */ template(`<ul class=mcp-autocomplete-options style="margin:0;padding:4px 0;list-style:none">`), _tmpl$8 = /* @__PURE__ */ template(`<div class=mcp-autocomplete-footer style="padding:6px 12px;border-top:1px solid #e5e7eb;background-color:#f9fafb;font-size:0.75rem;color:#6b7280"><kbd style="background-color:#e5e7eb;padding:1px 4px;border-radius:2px;font-family:inherit;font-size:0.7rem">↑</kbd> <kbd style="background-color:#e5e7eb;padding:1px 4px;border-radius:2px;font-family:inherit;font-size:0.7rem">↓</kbd> to navigate, <kbd style="background-color:#e5e7eb;padding:1px 4px;border-radius:2px;font-family:inherit;font-size:0.7rem">Enter</kbd> to select, <kbd style="background-color:#e5e7eb;padding:1px 4px;border-radius:2px;font-family:inherit;font-size:0.7rem">Esc</kbd> to dismiss`), _tmpl$9 = /* @__PURE__ */ template(`<div role=listbox aria-label=Suggestions><!$><!/><!$><!/><!$><!/><!$><!/>`), _tmpl$0 = /* @__PURE__ */ template(`<li role=option style="padding:8px 16px;font-size:0.875rem;transition:background-color 150ms ease">`);
4
4
  function highlightText(text, match) {
@@ -195,7 +195,6 @@ const AutocompleteDropdown = (props) => {
195
195
  };
196
196
  delegateEvents(["click"]);
197
197
  export {
198
- AutocompleteDropdown,
199
- AutocompleteDropdown as default
198
+ AutocompleteDropdown
200
199
  };
201
200
  //# sourceMappingURL=AutocompleteDropdown.js.map
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const web = require("solid-js/web");
4
4
  const solidJs = require("solid-js");
5
5
  const useConditionalField = require("../hooks/useConditionalField.cjs");
@@ -285,5 +285,4 @@ const AutocompleteFormField = (props) => {
285
285
  };
286
286
  web.delegateEvents(["input", "keydown"]);
287
287
  exports.AutocompleteFormField = AutocompleteFormField;
288
- exports.default = AutocompleteFormField;
289
288
  //# sourceMappingURL=AutocompleteFormField.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"AutocompleteFormField.cjs","sources":["../../src/components/AutocompleteFormField.tsx"],"sourcesContent":["/**\n * AutocompleteFormField Component\n * Form field with integrated autocomplete support\n *\n * Sprint Autocomplete Feature\n */\n\nimport { Component, Show, createSignal, createMemo, Accessor, createEffect, on } from 'solid-js'\nimport type { FormFieldParams, FieldAutocompleteConfig, AutocompleteContext } from '../types'\nimport { useConditionalField } from '../hooks/useConditionalField'\nimport { useAutocomplete } from '../hooks/useAutocomplete'\nimport { useAutocompleteContextSafe } from '../context/AutocompleteContext'\nimport { GhostText } from './GhostText'\nimport { AutocompleteDropdown } from './AutocompleteDropdown'\n\n/**\n * Extended FormFieldParams with autocomplete config\n */\nexport interface AutocompleteFormFieldParams extends FormFieldParams {\n /**\n * Autocomplete configuration for this field\n */\n autocomplete?: FieldAutocompleteConfig\n}\n\n/**\n * Props for AutocompleteFormField\n */\nexport interface AutocompleteFormFieldProps {\n /**\n * Field configuration\n */\n field: AutocompleteFormFieldParams\n\n /**\n * Current field value\n */\n value: any\n\n /**\n * Error message\n */\n error?: string\n\n /**\n * Change handler\n */\n onChange: (value: any) => void\n\n /**\n * Whether field is disabled\n */\n disabled?: boolean\n\n /**\n * Form data accessor for conditional visibility and context\n */\n formData?: Accessor<Record<string, any>>\n}\n\n/**\n * AutocompleteFormField Component\n */\nexport const AutocompleteFormField: Component<AutocompleteFormFieldProps> = (props) => {\n // Check if autocomplete context is available\n const autocompleteCtx = useAutocompleteContextSafe()\n\n // Conditional visibility\n const { isVisible } = useConditionalField({\n condition: props.field.showWhen,\n formData: props.formData || (() => ({}))\n })\n\n // Local input value for autocomplete (may differ during suggestion)\n const [localValue, setLocalValue] = createSignal(String(props.value || ''))\n\n // Sync external value changes\n createEffect(on(() => props.value, (newValue) => {\n setLocalValue(String(newValue || ''))\n }))\n\n // Build autocomplete context\n const autocompleteContext = createMemo((): AutocompleteContext | undefined => {\n const formData = props.formData?.()\n const config = props.field.autocomplete\n\n if (!config?.contextFields?.length && !formData) {\n return { fieldName: props.field.name }\n }\n\n const contextData: Record<string, any> = {}\n if (config?.contextFields && formData) {\n config.contextFields.forEach(field => {\n if (formData[field] !== undefined) {\n contextData[field] = formData[field]\n }\n })\n }\n\n return {\n fieldName: props.field.name,\n formData: contextData\n }\n })\n\n // Initialize autocomplete hook\n const autocomplete = useAutocomplete({\n inputValue: localValue,\n pluginId: props.field.autocomplete?.plugin,\n fieldConfig: props.field.autocomplete,\n context: () => autocompleteContext() || { fieldName: props.field.name },\n enabled: !!(props.field.autocomplete?.enabled && autocompleteCtx),\n minChars: props.field.autocomplete?.minChars,\n debounceMs: props.field.autocomplete?.debounceMs,\n onInputChange: (value) => {\n setLocalValue(value)\n props.onChange(value)\n }\n })\n\n // Handle input change\n const handleInput = (value: string) => {\n setLocalValue(value)\n props.onChange(value)\n }\n\n // Handle key down\n const handleKeyDown = (e: KeyboardEvent) => {\n if (autocomplete.handleKeyDown(e)) {\n return\n }\n }\n\n // Base input class\n const baseInputClass = () => `\n w-full px-3 py-2 border rounded-md\n focus:ring-2 focus:ring-blue-500 focus:border-blue-500\n disabled:bg-gray-100 disabled:cursor-not-allowed\n ${props.error\n ? 'border-red-500 focus:ring-red-500'\n : 'border-gray-300 dark:border-gray-600'}\n dark:bg-gray-700 dark:text-white\n `\n\n const fieldId = () => `field-${props.field.name}`\n const errorId = () => `${props.field.name}-error`\n\n // Check if field supports autocomplete (text-based fields only)\n const supportsAutocomplete = createMemo(() =>\n ['text', 'email'].includes(props.field.type)\n )\n\n // Whether to show autocomplete features\n const showAutocomplete = createMemo(() =>\n supportsAutocomplete() &&\n props.field.autocomplete?.enabled &&\n autocompleteCtx !== undefined\n )\n\n return (\n <Show when={isVisible()}>\n <div class=\"space-y-1\">\n {/* Label */}\n <Show when={props.field.label}>\n <label\n for={fieldId()}\n class=\"block text-sm font-medium text-gray-700 dark:text-gray-300\"\n >\n {props.field.label}\n <Show when={props.field.required}>\n <span class=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>\n </Show>\n </label>\n </Show>\n\n {/* Input with autocomplete */}\n <div class=\"relative\">\n <Show\n when={showAutocomplete()}\n fallback={\n /* Standard input without autocomplete */\n <input\n id={fieldId()}\n type={props.field.type}\n name={props.field.name}\n value={props.value || ''}\n onInput={(e) => props.onChange(e.currentTarget.value)}\n placeholder={props.field.placeholder}\n disabled={props.disabled}\n required={props.field.required}\n minLength={props.field.minLength}\n maxLength={props.field.maxLength}\n pattern={props.field.pattern}\n aria-invalid={!!props.error}\n aria-describedby={props.error ? errorId() : undefined}\n class={baseInputClass()}\n />\n }\n >\n {/* Autocomplete-enabled input */}\n <div class=\"relative\">\n {/* Ghost text overlay (for completion type) */}\n <Show when={autocomplete.resultType() === 'completion'}>\n <GhostText\n inputValue={localValue()}\n ghostText={autocomplete.ghostText()}\n visible={autocomplete.isOpen()}\n hintText={autocomplete.ghostText() ? 'Tab to accept' : undefined}\n isLoading={autocomplete.isLoading()}\n />\n </Show>\n\n <input\n id={fieldId()}\n type={props.field.type}\n name={props.field.name}\n value={localValue()}\n onInput={(e) => handleInput(e.currentTarget.value)}\n onKeyDown={handleKeyDown}\n onBlur={() => {\n // Delay dismiss to allow click on dropdown\n setTimeout(() => autocomplete.dismiss(), 150)\n }}\n onFocus={() => {\n if (localValue().length >= (props.field.autocomplete?.minChars || 1)) {\n autocomplete.open()\n }\n }}\n placeholder={props.field.placeholder}\n disabled={props.disabled}\n required={props.field.required}\n minLength={props.field.minLength}\n maxLength={props.field.maxLength}\n pattern={props.field.pattern}\n aria-invalid={!!props.error}\n aria-describedby={props.error ? errorId() : undefined}\n aria-autocomplete=\"list\"\n aria-expanded={autocomplete.isOpen()}\n aria-haspopup=\"listbox\"\n class={`${baseInputClass()} ${autocomplete.resultType() === 'completion' ? 'bg-transparent' : ''}`}\n style={{\n position: 'relative',\n 'z-index': '2'\n }}\n autocomplete=\"off\"\n />\n\n {/* Dropdown (for options type) */}\n <Show when={autocomplete.resultType() === 'options'}>\n <AutocompleteDropdown\n options={autocomplete.options()}\n selectedIndex={autocomplete.selectedIndex()}\n isOpen={autocomplete.isOpen()}\n isLoading={autocomplete.isLoading()}\n onSelect={(option) => {\n handleInput(option.value)\n autocomplete.dismiss()\n }}\n onHover={(_index) => {\n // Could add hover selection here\n }}\n highlightMatch={localValue()}\n loadingMessage={props.field.autocomplete?.loadingPlaceholder}\n />\n </Show>\n </div>\n </Show>\n </div>\n\n {/* Help text */}\n <Show when={props.field.helpText && !props.error}>\n <p class=\"text-xs text-gray-500 dark:text-gray-400\">\n {props.field.helpText}\n </p>\n </Show>\n\n {/* Error message */}\n <Show when={props.error}>\n <p id={errorId()} role=\"alert\" class=\"text-xs text-red-600 dark:text-red-400\">\n {props.error}\n </p>\n </Show>\n </div>\n </Show>\n )\n}\n\nexport default AutocompleteFormField\n"],"names":["AutocompleteFormField","props","autocompleteCtx","useAutocompleteContextSafe","isVisible","useConditionalField","condition","field","showWhen","formData","localValue","setLocalValue","createSignal","String","value","createEffect","on","newValue","autocompleteContext","createMemo","config","autocomplete","contextFields","length","fieldName","name","contextData","forEach","undefined","useAutocomplete","inputValue","pluginId","plugin","fieldConfig","context","enabled","minChars","debounceMs","onInputChange","onChange","handleInput","handleKeyDown","e","baseInputClass","error","fieldId","errorId","supportsAutocomplete","includes","type","showAutocomplete","_$createComponent","Show","when","children","_el$","_$getNextElement","_tmpl$6","_el$15","firstChild","_el$16","_co$5","_$getNextMarker","nextSibling","_el$8","_el$17","_el$18","_co$6","_el$19","_el$20","_co$7","_$insert","label","_el$2","_tmpl$2","_el$4","_el$5","_co$","_el$6","_el$7","_co$2","required","_tmpl$","_$effect","_$setAttribute","fallback","_el$21","_tmpl$7","$$input","currentTarget","_p$","_v$12","_v$13","_v$14","_v$15","placeholder","_v$16","disabled","_v$17","_v$18","minLength","_v$19","maxLength","_v$20","pattern","_v$21","_v$22","_v$23","t","a","o","i","_$setProperty","n","s","h","r","d","l","u","_$className","_$runHydrationEvents","_el$9","_tmpl$3","_el$1","_el$10","_co$3","_el$0","_el$11","_el$12","_co$4","resultType","GhostText","ghostText","visible","isOpen","hintText","isLoading","addEventListener","open","setTimeout","dismiss","$$keydown","AutocompleteDropdown","options","selectedIndex","onSelect","option","onHover","_index","highlightMatch","loadingMessage","loadingPlaceholder","_v$","_v$2","_v$3","_v$4","_v$5","_v$6","_v$7","_v$8","_v$9","_v$0","_v$1","_v$10","_v$11","c","_$memo","helpText","_el$13","_tmpl$4","_el$14","_tmpl$5","_$delegateEvents"],"mappings":"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"}
1
+ {"version":3,"file":"AutocompleteFormField.cjs","sources":["../../src/components/AutocompleteFormField.tsx"],"sourcesContent":["/**\n * AutocompleteFormField Component\n * Form field with integrated autocomplete support\n *\n * Sprint Autocomplete Feature\n */\n\nimport { Component, Show, createSignal, createMemo, Accessor, createEffect, on } from 'solid-js'\nimport type { FormFieldParams, FieldAutocompleteConfig, AutocompleteContext } from '../types'\nimport { useConditionalField } from '../hooks/useConditionalField'\nimport { useAutocomplete } from '../hooks/useAutocomplete'\nimport { useAutocompleteContextSafe } from '../context/AutocompleteContext'\nimport { GhostText } from './GhostText'\nimport { AutocompleteDropdown } from './AutocompleteDropdown'\n\n/**\n * Extended FormFieldParams with autocomplete config\n */\nexport interface AutocompleteFormFieldParams extends FormFieldParams {\n /**\n * Autocomplete configuration for this field\n */\n autocomplete?: FieldAutocompleteConfig\n}\n\n/**\n * Props for AutocompleteFormField\n */\nexport interface AutocompleteFormFieldProps {\n /**\n * Field configuration\n */\n field: AutocompleteFormFieldParams\n\n /**\n * Current field value\n */\n value: any\n\n /**\n * Error message\n */\n error?: string\n\n /**\n * Change handler\n */\n onChange: (value: any) => void\n\n /**\n * Whether field is disabled\n */\n disabled?: boolean\n\n /**\n * Form data accessor for conditional visibility and context\n */\n formData?: Accessor<Record<string, any>>\n}\n\n/**\n * AutocompleteFormField Component\n */\nexport const AutocompleteFormField: Component<AutocompleteFormFieldProps> = (props) => {\n // Check if autocomplete context is available\n const autocompleteCtx = useAutocompleteContextSafe()\n\n // Conditional visibility\n const { isVisible } = useConditionalField({\n condition: props.field.showWhen,\n formData: props.formData || (() => ({}))\n })\n\n // Local input value for autocomplete (may differ during suggestion)\n const [localValue, setLocalValue] = createSignal(String(props.value || ''))\n\n // Sync external value changes\n createEffect(on(() => props.value, (newValue) => {\n setLocalValue(String(newValue || ''))\n }))\n\n // Build autocomplete context\n const autocompleteContext = createMemo((): AutocompleteContext | undefined => {\n const formData = props.formData?.()\n const config = props.field.autocomplete\n\n if (!config?.contextFields?.length && !formData) {\n return { fieldName: props.field.name }\n }\n\n const contextData: Record<string, any> = {}\n if (config?.contextFields && formData) {\n config.contextFields.forEach(field => {\n if (formData[field] !== undefined) {\n contextData[field] = formData[field]\n }\n })\n }\n\n return {\n fieldName: props.field.name,\n formData: contextData\n }\n })\n\n // Initialize autocomplete hook\n const autocomplete = useAutocomplete({\n inputValue: localValue,\n pluginId: props.field.autocomplete?.plugin,\n fieldConfig: props.field.autocomplete,\n context: () => autocompleteContext() || { fieldName: props.field.name },\n enabled: !!(props.field.autocomplete?.enabled && autocompleteCtx),\n minChars: props.field.autocomplete?.minChars,\n debounceMs: props.field.autocomplete?.debounceMs,\n onInputChange: (value) => {\n setLocalValue(value)\n props.onChange(value)\n }\n })\n\n // Handle input change\n const handleInput = (value: string) => {\n setLocalValue(value)\n props.onChange(value)\n }\n\n // Handle key down\n const handleKeyDown = (e: KeyboardEvent) => {\n if (autocomplete.handleKeyDown(e)) {\n return\n }\n }\n\n // Base input class\n const baseInputClass = () => `\n w-full px-3 py-2 border rounded-md\n focus:ring-2 focus:ring-blue-500 focus:border-blue-500\n disabled:bg-gray-100 disabled:cursor-not-allowed\n ${props.error\n ? 'border-red-500 focus:ring-red-500'\n : 'border-gray-300 dark:border-gray-600'}\n dark:bg-gray-700 dark:text-white\n `\n\n const fieldId = () => `field-${props.field.name}`\n const errorId = () => `${props.field.name}-error`\n\n // Check if field supports autocomplete (text-based fields only)\n const supportsAutocomplete = createMemo(() =>\n ['text', 'email'].includes(props.field.type)\n )\n\n // Whether to show autocomplete features\n const showAutocomplete = createMemo(() =>\n supportsAutocomplete() &&\n props.field.autocomplete?.enabled &&\n autocompleteCtx !== undefined\n )\n\n return (\n <Show when={isVisible()}>\n <div class=\"space-y-1\">\n {/* Label */}\n <Show when={props.field.label}>\n <label\n for={fieldId()}\n class=\"block text-sm font-medium text-gray-700 dark:text-gray-300\"\n >\n {props.field.label}\n <Show when={props.field.required}>\n <span class=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>\n </Show>\n </label>\n </Show>\n\n {/* Input with autocomplete */}\n <div class=\"relative\">\n <Show\n when={showAutocomplete()}\n fallback={\n /* Standard input without autocomplete */\n <input\n id={fieldId()}\n type={props.field.type}\n name={props.field.name}\n value={props.value || ''}\n onInput={(e) => props.onChange(e.currentTarget.value)}\n placeholder={props.field.placeholder}\n disabled={props.disabled}\n required={props.field.required}\n minLength={props.field.minLength}\n maxLength={props.field.maxLength}\n pattern={props.field.pattern}\n aria-invalid={!!props.error}\n aria-describedby={props.error ? errorId() : undefined}\n class={baseInputClass()}\n />\n }\n >\n {/* Autocomplete-enabled input */}\n <div class=\"relative\">\n {/* Ghost text overlay (for completion type) */}\n <Show when={autocomplete.resultType() === 'completion'}>\n <GhostText\n inputValue={localValue()}\n ghostText={autocomplete.ghostText()}\n visible={autocomplete.isOpen()}\n hintText={autocomplete.ghostText() ? 'Tab to accept' : undefined}\n isLoading={autocomplete.isLoading()}\n />\n </Show>\n\n <input\n id={fieldId()}\n type={props.field.type}\n name={props.field.name}\n value={localValue()}\n onInput={(e) => handleInput(e.currentTarget.value)}\n onKeyDown={handleKeyDown}\n onBlur={() => {\n // Delay dismiss to allow click on dropdown\n setTimeout(() => autocomplete.dismiss(), 150)\n }}\n onFocus={() => {\n if (localValue().length >= (props.field.autocomplete?.minChars || 1)) {\n autocomplete.open()\n }\n }}\n placeholder={props.field.placeholder}\n disabled={props.disabled}\n required={props.field.required}\n minLength={props.field.minLength}\n maxLength={props.field.maxLength}\n pattern={props.field.pattern}\n aria-invalid={!!props.error}\n aria-describedby={props.error ? errorId() : undefined}\n aria-autocomplete=\"list\"\n aria-expanded={autocomplete.isOpen()}\n aria-haspopup=\"listbox\"\n class={`${baseInputClass()} ${autocomplete.resultType() === 'completion' ? 'bg-transparent' : ''}`}\n style={{\n position: 'relative',\n 'z-index': '2'\n }}\n autocomplete=\"off\"\n />\n\n {/* Dropdown (for options type) */}\n <Show when={autocomplete.resultType() === 'options'}>\n <AutocompleteDropdown\n options={autocomplete.options()}\n selectedIndex={autocomplete.selectedIndex()}\n isOpen={autocomplete.isOpen()}\n isLoading={autocomplete.isLoading()}\n onSelect={(option) => {\n handleInput(option.value)\n autocomplete.dismiss()\n }}\n onHover={(_index) => {\n // Could add hover selection here\n }}\n highlightMatch={localValue()}\n loadingMessage={props.field.autocomplete?.loadingPlaceholder}\n />\n </Show>\n </div>\n </Show>\n </div>\n\n {/* Help text */}\n <Show when={props.field.helpText && !props.error}>\n <p class=\"text-xs text-gray-500 dark:text-gray-400\">\n {props.field.helpText}\n </p>\n </Show>\n\n {/* Error message */}\n <Show when={props.error}>\n <p id={errorId()} role=\"alert\" class=\"text-xs text-red-600 dark:text-red-400\">\n {props.error}\n </p>\n </Show>\n </div>\n </Show>\n )\n}\n\nexport default AutocompleteFormField\n"],"names":["AutocompleteFormField","props","autocompleteCtx","useAutocompleteContextSafe","isVisible","useConditionalField","condition","field","showWhen","formData","localValue","setLocalValue","createSignal","String","value","createEffect","on","newValue","autocompleteContext","createMemo","config","autocomplete","contextFields","length","fieldName","name","contextData","forEach","undefined","useAutocomplete","inputValue","pluginId","plugin","fieldConfig","context","enabled","minChars","debounceMs","onInputChange","onChange","handleInput","handleKeyDown","e","baseInputClass","error","fieldId","errorId","supportsAutocomplete","includes","type","showAutocomplete","_$createComponent","Show","when","children","_el$","_$getNextElement","_tmpl$6","_el$15","firstChild","_el$16","_co$5","_$getNextMarker","nextSibling","_el$8","_el$17","_el$18","_co$6","_el$19","_el$20","_co$7","_$insert","label","_el$2","_tmpl$2","_el$4","_el$5","_co$","_el$6","_el$7","_co$2","required","_tmpl$","_$effect","_$setAttribute","fallback","_el$21","_tmpl$7","$$input","currentTarget","_p$","_v$12","_v$13","_v$14","_v$15","placeholder","_v$16","disabled","_v$17","_v$18","minLength","_v$19","maxLength","_v$20","pattern","_v$21","_v$22","_v$23","t","a","o","i","_$setProperty","n","s","h","r","d","l","u","_$className","_$runHydrationEvents","_el$9","_tmpl$3","_el$1","_el$10","_co$3","_el$0","_el$11","_el$12","_co$4","resultType","GhostText","ghostText","visible","isOpen","hintText","isLoading","addEventListener","open","setTimeout","dismiss","$$keydown","AutocompleteDropdown","options","selectedIndex","onSelect","option","onHover","_index","highlightMatch","loadingMessage","loadingPlaceholder","_v$","_v$2","_v$3","_v$4","_v$5","_v$6","_v$7","_v$8","_v$9","_v$0","_v$1","_v$10","_v$11","c","_$memo","helpText","_el$13","_tmpl$4","_el$14","_tmpl$5","_$delegateEvents"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { delegateEvents, createComponent, getNextElement, template, getNextMarker, insert, effect, setAttribute, setProperty, className, runHydrationEvents, memo } from "solid-js/web";
1
+ import { delegateEvents, createComponent, getNextElement, getNextMarker, insert, effect, setAttribute, setProperty, className, runHydrationEvents, memo, template } from "solid-js/web";
2
2
  import { createSignal, createEffect, on, createMemo, Show } from "solid-js";
3
3
  import { useConditionalField } from "../hooks/useConditionalField.js";
4
4
  import { useAutocomplete } from "../hooks/useAutocomplete.js";
@@ -283,7 +283,6 @@ const AutocompleteFormField = (props) => {
283
283
  };
284
284
  delegateEvents(["input", "keydown"]);
285
285
  export {
286
- AutocompleteFormField,
287
- AutocompleteFormField as default
286
+ AutocompleteFormField
288
287
  };
289
288
  //# sourceMappingURL=AutocompleteFormField.js.map
@@ -1,4 +1,4 @@
1
- import { getNextElement, template, getNextMarker, insert, createComponent, memo, effect, className } from "solid-js/web";
1
+ import { getNextElement, getNextMarker, insert, createComponent, memo, effect, className, template } from "solid-js/web";
2
2
  import { Show, For } from "solid-js";
3
3
  var _tmpl$ = /* @__PURE__ */ template(`<span class=font-medium>`), _tmpl$2 = /* @__PURE__ */ template(`<span><!$><!/> &rarr; <!$><!/>`), _tmpl$3 = /* @__PURE__ */ template(`<div class="flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"><!$><!/><!$><!/>`), _tmpl$4 = /* @__PURE__ */ template(`<div class="briefing-diff space-y-2"><!$><!/><!$><!/><div class=space-y-1>`), _tmpl$5 = /* @__PURE__ */ template(`<span class="text-green-600 dark:text-green-400">+<!$><!/> added`), _tmpl$6 = /* @__PURE__ */ template(`<span class="text-red-600 dark:text-red-400"><!$><!/> removed`), _tmpl$7 = /* @__PURE__ */ template(`<span class="text-amber-600 dark:text-amber-400"><!$><!/> changed`), _tmpl$8 = /* @__PURE__ */ template(`<div class="flex items-center gap-3 text-xs"><!$><!/><!$><!/><!$><!/>`), _tmpl$9 = /* @__PURE__ */ template(`<div class="mt-0.5 text-xs"><span class="text-red-500 line-through"></span><span class="mx-1 text-gray-400">&rarr;</span><span class="text-green-600 dark:text-green-400">`), _tmpl$0 = /* @__PURE__ */ template(`<div class="mt-0.5 text-xs text-gray-600 dark:text-gray-400">`), _tmpl$1 = /* @__PURE__ */ template(`<div class="mt-0.5 text-xs text-gray-500 line-through">`), _tmpl$10 = /* @__PURE__ */ template(`<div><span></span><div class="flex-1 min-w-0"><span></span><!$><!/><!$><!/><!$><!/>`);
4
4
  const CHANGE_CONFIG = {
@@ -1,4 +1,4 @@
1
- import { delegateEvents, createComponent, getNextElement, template, insert, effect, className, runHydrationEvents, isServer, use } from "solid-js/web";
1
+ import { delegateEvents, createComponent, getNextElement, insert, effect, className, runHydrationEvents, template, isServer, use } from "solid-js/web";
2
2
  import { createSignal, For } from "solid-js";
3
3
  import { useRenderContext } from "./RenderContext.js";
4
4
  import { useExpanded, ExpandableWrapper } from "./ExpandableWrapper.js";
@@ -1,4 +1,4 @@
1
- import { delegateEvents, createComponent, getNextElement, template, getNextMarker, insert, runHydrationEvents, mergeProps, effect, className, style, use } from "solid-js/web";
1
+ import { delegateEvents, createComponent, getNextElement, getNextMarker, insert, runHydrationEvents, mergeProps, effect, className, style, template, use } from "solid-js/web";
2
2
  import { createSignal, createEffect, onCleanup, Show } from "solid-js";
3
3
  import { useExpanded, ExpandableWrapper } from "./ExpandableWrapper.js";
4
4
  import { DegradedFallback } from "./DegradedFallback.js";
@@ -1,4 +1,4 @@
1
- import { delegateEvents, getNextElement, template, insert, createComponent, effect, setAttribute, className, runHydrationEvents, memo, getNextMarker, addEventListener, setProperty } from "solid-js/web";
1
+ import { delegateEvents, getNextElement, insert, createComponent, effect, setAttribute, className, runHydrationEvents, template, memo, getNextMarker, addEventListener, setProperty } from "solid-js/web";
2
2
  import { Show, Switch, Match, For, createSignal, createEffect, onCleanup } from "solid-js";
3
3
  import { FormFieldRenderer } from "./FormFieldRenderer.js";
4
4
  var _tmpl$ = /* @__PURE__ */ template(`<div class="w-full max-w-2xl mx-auto mb-2 bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 shadow-lg overflow-visible"role=dialog style="animation:chat-prompt-slide-up 0.2s ease-out"><div class="flex items-center justify-between px-4 py-2.5 border-b border-gray-100 dark:border-gray-700"><p class="text-sm font-medium text-gray-900 dark:text-white"></p><button></button></div><div class="px-4 py-3"></div><style>