polen 0.10.0-next.11 → 0.10.0-next.13

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 (340) hide show
  1. package/build/api/builder/builder.js +1 -1
  2. package/build/api/builder/builder.js.map +1 -1
  3. package/build/api/config/load.js +1 -1
  4. package/build/api/config/load.js.map +1 -1
  5. package/build/api/vite/plugins/build.js +1 -1
  6. package/build/api/vite/plugins/build.js.map +1 -1
  7. package/build/api/vite/plugins/core.d.ts.map +1 -1
  8. package/build/api/vite/plugins/core.js +0 -2
  9. package/build/api/vite/plugins/core.js.map +1 -1
  10. package/build/api/vite/plugins/pages.js +1 -1
  11. package/build/api/vite/plugins/pages.js.map +1 -1
  12. package/build/exports/components.d.ts +4 -1
  13. package/build/exports/components.d.ts.map +1 -1
  14. package/build/exports/components.js +4 -1
  15. package/build/exports/components.js.map +1 -1
  16. package/build/lib/demos/config-schema.d.ts +6 -6
  17. package/build/lib/github-actions/runner.js +2 -2
  18. package/build/lib/github-actions/runner.js.map +1 -1
  19. package/build/lib/graphql-document/$$.d.ts +5 -0
  20. package/build/lib/graphql-document/$$.d.ts.map +1 -0
  21. package/build/lib/graphql-document/$$.js +5 -0
  22. package/build/lib/graphql-document/$$.js.map +1 -0
  23. package/build/lib/graphql-document/$.d.ts +2 -0
  24. package/build/lib/graphql-document/$.d.ts.map +1 -0
  25. package/build/lib/graphql-document/$.js +2 -0
  26. package/build/lib/graphql-document/$.js.map +1 -0
  27. package/build/lib/graphql-document/analysis.d.ts +44 -0
  28. package/build/lib/graphql-document/analysis.d.ts.map +1 -0
  29. package/build/lib/graphql-document/analysis.js +361 -0
  30. package/build/lib/graphql-document/analysis.js.map +1 -0
  31. package/build/lib/graphql-document/components/CopyButton.d.ts +19 -0
  32. package/build/lib/graphql-document/components/CopyButton.d.ts.map +1 -0
  33. package/build/lib/graphql-document/components/CopyButton.js +43 -0
  34. package/build/lib/graphql-document/components/CopyButton.js.map +1 -0
  35. package/build/lib/graphql-document/components/GraphQLDocument.d.ts +38 -0
  36. package/build/lib/graphql-document/components/GraphQLDocument.d.ts.map +1 -0
  37. package/build/lib/graphql-document/components/GraphQLDocument.js +130 -0
  38. package/build/lib/graphql-document/components/GraphQLDocument.js.map +1 -0
  39. package/build/lib/graphql-document/components/GraphQLDocumentWithSchema.d.ts +7 -0
  40. package/build/lib/graphql-document/components/GraphQLDocumentWithSchema.d.ts.map +1 -0
  41. package/build/lib/graphql-document/components/GraphQLDocumentWithSchema.js +45 -0
  42. package/build/lib/graphql-document/components/GraphQLDocumentWithSchema.js.map +1 -0
  43. package/build/lib/graphql-document/components/GraphQLIdentifierPopover.d.ts +33 -0
  44. package/build/lib/graphql-document/components/GraphQLIdentifierPopover.d.ts.map +1 -0
  45. package/build/lib/graphql-document/components/GraphQLIdentifierPopover.js +48 -0
  46. package/build/lib/graphql-document/components/GraphQLIdentifierPopover.js.map +1 -0
  47. package/build/lib/graphql-document/components/IdentifierLink.d.ts +39 -0
  48. package/build/lib/graphql-document/components/IdentifierLink.d.ts.map +1 -0
  49. package/build/lib/graphql-document/components/IdentifierLink.js +75 -0
  50. package/build/lib/graphql-document/components/IdentifierLink.js.map +1 -0
  51. package/build/lib/graphql-document/components/graphql-document-styles.d.ts +5 -0
  52. package/build/lib/graphql-document/components/graphql-document-styles.d.ts.map +1 -0
  53. package/build/lib/graphql-document/components/graphql-document-styles.js +167 -0
  54. package/build/lib/graphql-document/components/graphql-document-styles.js.map +1 -0
  55. package/build/lib/graphql-document/components/index.d.ts +6 -0
  56. package/build/lib/graphql-document/components/index.d.ts.map +1 -0
  57. package/build/lib/graphql-document/components/index.js +6 -0
  58. package/build/lib/graphql-document/components/index.js.map +1 -0
  59. package/build/lib/graphql-document/example.d.ts +25 -0
  60. package/build/lib/graphql-document/example.d.ts.map +1 -0
  61. package/build/lib/graphql-document/example.js +140 -0
  62. package/build/lib/graphql-document/example.js.map +1 -0
  63. package/build/lib/graphql-document/graphql-document.d.ts +35 -0
  64. package/build/lib/graphql-document/graphql-document.d.ts.map +1 -0
  65. package/build/lib/graphql-document/graphql-document.js +36 -0
  66. package/build/lib/graphql-document/graphql-document.js.map +1 -0
  67. package/build/lib/graphql-document/hooks/use-tooltip-state.d.ts +43 -0
  68. package/build/lib/graphql-document/hooks/use-tooltip-state.d.ts.map +1 -0
  69. package/build/lib/graphql-document/hooks/use-tooltip-state.js +132 -0
  70. package/build/lib/graphql-document/hooks/use-tooltip-state.js.map +1 -0
  71. package/build/lib/graphql-document/positioning-simple.d.ts +68 -0
  72. package/build/lib/graphql-document/positioning-simple.d.ts.map +1 -0
  73. package/build/lib/graphql-document/positioning-simple.js +197 -0
  74. package/build/lib/graphql-document/positioning-simple.js.map +1 -0
  75. package/build/lib/graphql-document/schema-context.d.ts +8 -0
  76. package/build/lib/graphql-document/schema-context.d.ts.map +1 -0
  77. package/build/lib/graphql-document/schema-context.js +11 -0
  78. package/build/lib/graphql-document/schema-context.js.map +1 -0
  79. package/build/lib/graphql-document/schema-integration-example.d.ts +27 -0
  80. package/build/lib/graphql-document/schema-integration-example.d.ts.map +1 -0
  81. package/build/lib/graphql-document/schema-integration-example.js +297 -0
  82. package/build/lib/graphql-document/schema-integration-example.js.map +1 -0
  83. package/build/lib/graphql-document/schema-integration.d.ts +135 -0
  84. package/build/lib/graphql-document/schema-integration.d.ts.map +1 -0
  85. package/build/lib/graphql-document/schema-integration.js +328 -0
  86. package/build/lib/graphql-document/schema-integration.js.map +1 -0
  87. package/build/lib/graphql-document/types.d.ts +117 -0
  88. package/build/lib/graphql-document/types.d.ts.map +1 -0
  89. package/build/lib/graphql-document/types.js +2 -0
  90. package/build/lib/graphql-document/types.js.map +1 -0
  91. package/build/template/components/ArgumentAnnotation.js +10 -0
  92. package/build/template/components/ArgumentAnnotation.js.map +1 -0
  93. package/build/template/components/ArgumentList.js +9 -0
  94. package/build/template/components/ArgumentList.js.map +1 -0
  95. package/build/template/components/ArgumentListAnnotation.js +15 -0
  96. package/build/template/components/ArgumentListAnnotation.js.map +1 -0
  97. package/build/template/components/Changelog.js +44 -0
  98. package/build/template/components/Changelog.js.map +1 -0
  99. package/build/template/components/{CodeBlock.jsx → CodeBlock.js} +4 -5
  100. package/build/template/components/{CodeBlock.jsx.map → CodeBlock.js.map} +1 -1
  101. package/build/template/components/{CodeBlockEnhancer.jsx → CodeBlockEnhancer.js} +4 -4
  102. package/build/template/components/CodeBlockEnhancer.js.map +1 -0
  103. package/build/template/components/DeprecationReason.js +9 -0
  104. package/build/template/components/DeprecationReason.js.map +1 -0
  105. package/build/template/components/Description.js +9 -0
  106. package/build/template/components/Description.js.map +1 -0
  107. package/build/template/components/Field.js +14 -0
  108. package/build/template/components/Field.js.map +1 -0
  109. package/build/template/components/{FieldList.jsx → FieldList.js} +4 -5
  110. package/build/template/components/FieldList.js.map +1 -0
  111. package/build/template/components/{FieldListSection.jsx → FieldListSection.js} +4 -6
  112. package/build/template/components/FieldListSection.js.map +1 -0
  113. package/build/template/components/HamburgerMenu.js +30 -0
  114. package/build/template/components/HamburgerMenu.js.map +1 -0
  115. package/build/template/components/Link.d.ts +1 -1
  116. package/build/template/components/{Link.jsx → Link.js} +4 -5
  117. package/build/template/components/Link.js.map +1 -0
  118. package/build/template/components/Logo.js +20 -0
  119. package/build/template/components/Logo.js.map +1 -0
  120. package/build/template/components/MDXComponents.d.ts +11 -0
  121. package/build/template/components/MDXComponents.d.ts.map +1 -0
  122. package/build/template/components/MDXComponents.js +70 -0
  123. package/build/template/components/MDXComponents.js.map +1 -0
  124. package/build/template/components/{Markdown.jsx → Markdown.js} +3 -2
  125. package/build/template/components/Markdown.js.map +1 -0
  126. package/build/template/components/MissingSchema.d.ts +1 -1
  127. package/build/template/components/MissingSchema.d.ts.map +1 -1
  128. package/build/template/components/MissingSchema.js +5 -0
  129. package/build/template/components/MissingSchema.js.map +1 -0
  130. package/build/template/components/NamedType.js +12 -0
  131. package/build/template/components/NamedType.js.map +1 -0
  132. package/build/template/components/NotFound.js +7 -0
  133. package/build/template/components/NotFound.js.map +1 -0
  134. package/build/template/components/{RadixLink.jsx → RadixLink.js} +1 -1
  135. package/build/template/components/RadixLink.js.map +1 -0
  136. package/build/template/components/TestComponent.d.ts +5 -0
  137. package/build/template/components/TestComponent.d.ts.map +1 -0
  138. package/build/template/components/TestComponent.js +7 -0
  139. package/build/template/components/TestComponent.js.map +1 -0
  140. package/build/template/components/Texts/{MinorHeading.jsx → MinorHeading.js} +4 -3
  141. package/build/template/components/Texts/MinorHeading.js.map +1 -0
  142. package/build/template/components/Texts/texts.js +1 -1
  143. package/build/template/components/Texts/texts.js.map +1 -1
  144. package/build/template/components/ThemeToggle.js +9 -0
  145. package/build/template/components/ThemeToggle.js.map +1 -0
  146. package/build/template/components/{TypeAnnotation.jsx → TypeAnnotation.js} +8 -18
  147. package/build/template/components/TypeAnnotation.js.map +1 -0
  148. package/build/template/components/TypeFieldsLinkList.js +9 -0
  149. package/build/template/components/TypeFieldsLinkList.js.map +1 -0
  150. package/build/template/components/TypeIndex.js +17 -0
  151. package/build/template/components/TypeIndex.js.map +1 -0
  152. package/build/template/components/content/$$.d.ts +1 -0
  153. package/build/template/components/content/$$.d.ts.map +1 -1
  154. package/build/template/components/content/$$.js +1 -0
  155. package/build/template/components/content/$$.js.map +1 -1
  156. package/build/template/components/content/GraphQLDocumentWithSchema.d.ts +8 -0
  157. package/build/template/components/content/GraphQLDocumentWithSchema.d.ts.map +1 -0
  158. package/build/template/components/content/GraphQLDocumentWithSchema.js +16 -0
  159. package/build/template/components/content/GraphQLDocumentWithSchema.js.map +1 -0
  160. package/build/template/components/content/GraphQLDocumentWrapper.d.ts +7 -0
  161. package/build/template/components/content/GraphQLDocumentWrapper.d.ts.map +1 -0
  162. package/build/template/components/content/GraphQLDocumentWrapper.js +62 -0
  163. package/build/template/components/content/GraphQLDocumentWrapper.js.map +1 -0
  164. package/build/template/components/graphql/graphql.d.ts +2 -2
  165. package/build/template/components/graphql/graphql.js +3 -0
  166. package/build/template/components/graphql/graphql.js.map +1 -0
  167. package/build/template/components/graphql/index.d.ts +1 -1
  168. package/build/template/components/graphql/index.js +1 -1
  169. package/build/template/components/graphql/index.js.map +1 -1
  170. package/build/template/components/graphql/{type-kind-icon.jsx → type-kind-icon.js} +3 -2
  171. package/build/template/components/graphql/type-kind-icon.js.map +1 -0
  172. package/build/template/components/graphql/type-link.js +11 -0
  173. package/build/template/components/graphql/type-link.js.map +1 -0
  174. package/build/template/components/sidebar/Sidebar.d.ts +1 -1
  175. package/build/template/components/sidebar/Sidebar.d.ts.map +1 -1
  176. package/build/template/components/sidebar/Sidebar.js +11 -0
  177. package/build/template/components/sidebar/Sidebar.js.map +1 -0
  178. package/build/template/components/sidebar/{SidebarItem.jsx → SidebarItem.js} +15 -32
  179. package/build/template/components/sidebar/SidebarItem.js.map +1 -0
  180. package/build/template/components/sidebar/ToggleButton.d.ts +1 -1
  181. package/build/template/components/sidebar/ToggleButton.d.ts.map +1 -1
  182. package/build/template/components/sidebar/ToggleButton.js +5 -0
  183. package/build/template/components/sidebar/ToggleButton.js.map +1 -0
  184. package/build/template/contexts/{ThemeContext.jsx → ThemeContext.js} +3 -4
  185. package/build/template/contexts/{ThemeContext.jsx.map → ThemeContext.js.map} +1 -1
  186. package/build/template/entry.client.d.ts +1 -0
  187. package/build/template/entry.client.d.ts.map +1 -1
  188. package/build/template/{entry.client.jsx → entry.client.js} +5 -6
  189. package/build/template/entry.client.js.map +1 -0
  190. package/build/template/routes/changelog.d.ts +1 -1
  191. package/build/template/routes/{changelog.jsx → changelog.js} +5 -4
  192. package/build/template/routes/changelog.js.map +1 -0
  193. package/build/template/routes/{index.jsx → index.js} +3 -2
  194. package/build/template/routes/index.js.map +1 -0
  195. package/build/template/routes/reference.$type.$field.d.ts +1 -1
  196. package/build/template/routes/{reference.$type.$field.jsx → reference.$type.$field.js} +6 -5
  197. package/build/template/routes/reference.$type.$field.js.map +1 -0
  198. package/build/template/routes/reference.$type.d.ts +1 -1
  199. package/build/template/routes/{reference.$type.jsx → reference.$type.js} +6 -5
  200. package/build/template/routes/reference.$type.js.map +1 -0
  201. package/build/template/routes/reference.d.ts +2 -2
  202. package/build/template/routes/{reference.jsx → reference.js} +6 -7
  203. package/build/template/routes/reference.js.map +1 -0
  204. package/build/template/routes/root.d.ts +2 -2
  205. package/build/template/routes/root.d.ts.map +1 -1
  206. package/build/template/routes/{root.jsx → root.js} +46 -88
  207. package/build/template/routes/root.js.map +1 -0
  208. package/build/template/routes.js +5 -0
  209. package/build/template/routes.js.map +1 -0
  210. package/build/template/server/app.js +1 -1
  211. package/build/template/server/app.js.map +1 -1
  212. package/build/template/server/{render-page.jsx → render-page.js} +3 -4
  213. package/build/template/server/render-page.js.map +1 -0
  214. package/build/template/server/ssg/generate.js +1 -1
  215. package/build/template/server/ssg/generate.js.map +1 -1
  216. package/build/template/server/ssg/get-route-paths.js +1 -1
  217. package/build/template/server/ssg/get-route-paths.js.map +1 -1
  218. package/build/template/server/view.js +1 -1
  219. package/build/template/server/view.js.map +1 -1
  220. package/package.json +57 -8
  221. package/src/api/vite/plugins/core.ts +0 -3
  222. package/src/api/vite/plugins/pages.ts +1 -1
  223. package/src/exports/components.ts +4 -1
  224. package/src/lib/graphql-document/$$.ts +4 -0
  225. package/src/lib/graphql-document/$.test.ts +132 -0
  226. package/src/lib/graphql-document/$.ts +1 -0
  227. package/src/lib/graphql-document/README.md +102 -0
  228. package/src/lib/graphql-document/analysis.ts +415 -0
  229. package/src/lib/graphql-document/components/CopyButton.tsx +76 -0
  230. package/src/lib/graphql-document/components/GraphQLDocument.tsx +250 -0
  231. package/src/lib/graphql-document/components/GraphQLDocument.unit.test.ts +188 -0
  232. package/src/lib/graphql-document/components/GraphQLDocumentWithSchema.tsx +70 -0
  233. package/src/lib/graphql-document/components/GraphQLIdentifierPopover.tsx +197 -0
  234. package/src/lib/graphql-document/components/IdentifierLink.tsx +160 -0
  235. package/src/lib/graphql-document/components/graphql-document-styles.ts +167 -0
  236. package/src/lib/graphql-document/components/index.ts +5 -0
  237. package/src/lib/graphql-document/demo.md +155 -0
  238. package/src/lib/graphql-document/example.ts +163 -0
  239. package/src/lib/graphql-document/graphql-document.ts +37 -0
  240. package/src/lib/graphql-document/hooks/use-tooltip-state.test.ts +76 -0
  241. package/src/lib/graphql-document/hooks/use-tooltip-state.ts +191 -0
  242. package/src/lib/graphql-document/positioning-simple.test.ts +252 -0
  243. package/src/lib/graphql-document/positioning-simple.ts +271 -0
  244. package/src/lib/graphql-document/schema-context.tsx +20 -0
  245. package/src/lib/graphql-document/schema-integration-example.ts +341 -0
  246. package/src/lib/graphql-document/schema-integration.test.ts +365 -0
  247. package/src/lib/graphql-document/schema-integration.ts +497 -0
  248. package/src/lib/graphql-document/types.ts +129 -0
  249. package/src/template/components/ArgumentAnnotation.tsx +1 -1
  250. package/src/template/components/ArgumentList.tsx +1 -1
  251. package/src/template/components/ArgumentListAnnotation.tsx +2 -2
  252. package/src/template/components/CodeBlockEnhancer.tsx +21 -21
  253. package/src/template/components/DeprecationReason.tsx +1 -1
  254. package/src/template/components/Description.tsx +1 -1
  255. package/src/template/components/Field.tsx +4 -4
  256. package/src/template/components/FieldList.tsx +1 -1
  257. package/src/template/components/FieldListSection.tsx +1 -1
  258. package/src/template/components/Link.tsx +2 -2
  259. package/src/template/components/MDXComponents.tsx +101 -0
  260. package/src/template/components/NamedType.tsx +2 -2
  261. package/src/template/components/TestComponent.tsx +6 -0
  262. package/src/template/components/TypeAnnotation.tsx +1 -1
  263. package/src/template/components/TypeFieldsLinkList.tsx +1 -1
  264. package/src/template/components/TypeIndex.tsx +1 -1
  265. package/src/template/components/content/$$.ts +1 -0
  266. package/src/template/components/content/GraphQLDocumentWithSchema.tsx +18 -0
  267. package/src/template/components/content/GraphQLDocumentWrapper.tsx +82 -0
  268. package/src/template/components/graphql/graphql.tsx +2 -2
  269. package/src/template/components/graphql/index.ts +1 -1
  270. package/src/template/components/graphql/type-link.tsx +2 -2
  271. package/src/template/entry.client.tsx +2 -2
  272. package/src/template/routes/changelog.tsx +1 -1
  273. package/src/template/routes/reference.$type.$field.tsx +3 -3
  274. package/src/template/routes/reference.$type.tsx +3 -3
  275. package/src/template/routes/reference.tsx +3 -3
  276. package/src/template/routes/root.tsx +36 -25
  277. package/src/template/routes.tsx +1 -1
  278. package/src/template/server/app.ts +1 -1
  279. package/src/template/server/ssg/generate.ts +1 -1
  280. package/src/template/server/ssg/get-route-paths.ts +1 -1
  281. package/src/template/server/view.ts +1 -1
  282. package/src/template/styles/code-block.css +32 -0
  283. package/build/template/components/ArgumentAnnotation.jsx +0 -16
  284. package/build/template/components/ArgumentAnnotation.jsx.map +0 -1
  285. package/build/template/components/ArgumentList.jsx +0 -16
  286. package/build/template/components/ArgumentList.jsx.map +0 -1
  287. package/build/template/components/ArgumentListAnnotation.jsx +0 -23
  288. package/build/template/components/ArgumentListAnnotation.jsx.map +0 -1
  289. package/build/template/components/Changelog.jsx +0 -68
  290. package/build/template/components/Changelog.jsx.map +0 -1
  291. package/build/template/components/CodeBlockEnhancer.jsx.map +0 -1
  292. package/build/template/components/DeprecationReason.jsx +0 -10
  293. package/build/template/components/DeprecationReason.jsx.map +0 -1
  294. package/build/template/components/Description.jsx +0 -10
  295. package/build/template/components/Description.jsx.map +0 -1
  296. package/build/template/components/Field.jsx +0 -22
  297. package/build/template/components/Field.jsx.map +0 -1
  298. package/build/template/components/FieldList.jsx.map +0 -1
  299. package/build/template/components/FieldListSection.jsx.map +0 -1
  300. package/build/template/components/HamburgerMenu.jsx +0 -53
  301. package/build/template/components/HamburgerMenu.jsx.map +0 -1
  302. package/build/template/components/Link.jsx.map +0 -1
  303. package/build/template/components/Logo.jsx +0 -29
  304. package/build/template/components/Logo.jsx.map +0 -1
  305. package/build/template/components/Markdown.jsx.map +0 -1
  306. package/build/template/components/MissingSchema.jsx +0 -4
  307. package/build/template/components/MissingSchema.jsx.map +0 -1
  308. package/build/template/components/NamedType.jsx +0 -17
  309. package/build/template/components/NamedType.jsx.map +0 -1
  310. package/build/template/components/NotFound.jsx +0 -26
  311. package/build/template/components/NotFound.jsx.map +0 -1
  312. package/build/template/components/RadixLink.jsx.map +0 -1
  313. package/build/template/components/Texts/MinorHeading.jsx.map +0 -1
  314. package/build/template/components/ThemeToggle.jsx +0 -10
  315. package/build/template/components/ThemeToggle.jsx.map +0 -1
  316. package/build/template/components/TypeAnnotation.jsx.map +0 -1
  317. package/build/template/components/TypeFieldsLinkList.jsx +0 -17
  318. package/build/template/components/TypeFieldsLinkList.jsx.map +0 -1
  319. package/build/template/components/TypeIndex.jsx +0 -27
  320. package/build/template/components/TypeIndex.jsx.map +0 -1
  321. package/build/template/components/graphql/graphql.jsx +0 -3
  322. package/build/template/components/graphql/graphql.jsx.map +0 -1
  323. package/build/template/components/graphql/type-kind-icon.jsx.map +0 -1
  324. package/build/template/components/graphql/type-link.jsx +0 -16
  325. package/build/template/components/graphql/type-link.jsx.map +0 -1
  326. package/build/template/components/sidebar/Sidebar.jsx +0 -15
  327. package/build/template/components/sidebar/Sidebar.jsx.map +0 -1
  328. package/build/template/components/sidebar/SidebarItem.jsx.map +0 -1
  329. package/build/template/components/sidebar/ToggleButton.jsx +0 -6
  330. package/build/template/components/sidebar/ToggleButton.jsx.map +0 -1
  331. package/build/template/entry.client.jsx.map +0 -1
  332. package/build/template/routes/changelog.jsx.map +0 -1
  333. package/build/template/routes/index.jsx.map +0 -1
  334. package/build/template/routes/reference.$type.$field.jsx.map +0 -1
  335. package/build/template/routes/reference.$type.jsx.map +0 -1
  336. package/build/template/routes/reference.jsx.map +0 -1
  337. package/build/template/routes/root.jsx.map +0 -1
  338. package/build/template/routes.jsx +0 -5
  339. package/build/template/routes.jsx.map +0 -1
  340. package/build/template/server/render-page.jsx.map +0 -1
@@ -0,0 +1,271 @@
1
+ /**
2
+ * Layer 3: Simplified Positioning & Layout Engine
3
+ *
4
+ * Maps GraphQL AST positions to DOM coordinates for overlay placement.
5
+ * This simplified version focuses on working with Polen's existing infrastructure.
6
+ */
7
+
8
+ import type { Identifier } from './types.ts'
9
+
10
+ /**
11
+ * DOM position for rendering overlays
12
+ */
13
+ export interface DOMPosition {
14
+ /** Distance from top of container in pixels */
15
+ top: number
16
+ /** Distance from left of container in pixels */
17
+ left: number
18
+ /** Width of the identifier in pixels */
19
+ width: number
20
+ /** Height of the identifier in pixels */
21
+ height: number
22
+ }
23
+
24
+ /**
25
+ * Position calculation result
26
+ */
27
+ export interface PositionResult {
28
+ /** The calculated DOM position */
29
+ position: DOMPosition
30
+ /** The identifier this position is for */
31
+ identifier: Identifier
32
+ }
33
+
34
+ /**
35
+ * Simplified position calculator for Shiki-rendered code
36
+ *
37
+ * This version uses a more straightforward approach:
38
+ * 1. Find the line element by line number
39
+ * 2. Search for the identifier text within that line
40
+ * 3. Create a span around the identifier for positioning
41
+ *
42
+ * This approach modifies the DOM but is more reliable for testing
43
+ * and works well with React's reconciliation.
44
+ */
45
+ export class SimplePositionCalculator {
46
+ /**
47
+ * Prepare a code block for positioning by wrapping identifiers in spans
48
+ */
49
+ prepareCodeBlock(
50
+ containerElement: Element,
51
+ identifiers: Identifier[],
52
+ ): void {
53
+ // Sort all identifiers by position (right to left, bottom to top)
54
+ const sortedIdentifiers = [...identifiers].sort((a, b) => {
55
+ // Sort by line first (bottom to top)
56
+ if (a.position.line !== b.position.line) {
57
+ return b.position.line - a.position.line
58
+ }
59
+ // Then by column (right to left)
60
+ return b.position.column - a.position.column
61
+ })
62
+
63
+ // Process all identifiers
64
+ let wrappedCount = 0
65
+ for (const identifier of sortedIdentifiers) {
66
+ const wrapped = this.wrapIdentifier(containerElement, identifier)
67
+ if (wrapped) wrappedCount++
68
+ }
69
+ }
70
+
71
+ /**
72
+ * Get positions of all wrapped identifiers
73
+ */
74
+ getIdentifierPositions(
75
+ containerElement: Element,
76
+ relativeToElement?: Element,
77
+ ): Map<string, PositionResult> {
78
+ const results = new Map<string, PositionResult>()
79
+
80
+ // Find all wrapped identifiers
81
+ const wrappedIdentifiers = containerElement.querySelectorAll('[data-graphql-id]')
82
+
83
+ // Use the provided element for relative positioning, or the container itself
84
+ const referenceElement = relativeToElement || containerElement
85
+
86
+ for (const element of wrappedIdentifiers) {
87
+ const id = element.getAttribute('data-graphql-id')
88
+ if (!id) continue
89
+
90
+ // Get position relative to the reference element
91
+ const referenceRect = referenceElement.getBoundingClientRect()
92
+ const elementRect = element.getBoundingClientRect()
93
+
94
+ const position: DOMPosition = {
95
+ top: elementRect.top - referenceRect.top,
96
+ left: elementRect.left - referenceRect.left,
97
+ width: elementRect.width,
98
+ height: elementRect.height,
99
+ }
100
+
101
+ // Reconstruct identifier from data attributes
102
+ const identifier: Identifier = {
103
+ name: element.getAttribute('data-graphql-name') || '',
104
+ kind: (element.getAttribute('data-graphql-kind') || 'Field') as Identifier['kind'],
105
+ position: {
106
+ start: parseInt(element.getAttribute('data-graphql-start') || '0'),
107
+ end: parseInt(element.getAttribute('data-graphql-end') || '0'),
108
+ line: parseInt(element.getAttribute('data-graphql-line') || '1'),
109
+ column: parseInt(element.getAttribute('data-graphql-column') || '1'),
110
+ },
111
+ schemaPath: (element.getAttribute('data-graphql-path') || '').split(',').filter(Boolean),
112
+ context: { selectionPath: [] },
113
+ }
114
+
115
+ results.set(id, { position, identifier })
116
+ }
117
+
118
+ return results
119
+ }
120
+
121
+ /**
122
+ * Wrap an identifier in a span for positioning
123
+ * Returns true if the identifier was successfully wrapped
124
+ */
125
+ private wrapIdentifier(containerElement: Element, identifier: Identifier): boolean {
126
+ const walker = document.createTreeWalker(
127
+ containerElement,
128
+ NodeFilter.SHOW_TEXT,
129
+ null,
130
+ )
131
+
132
+ let currentLine = 1
133
+ let currentColumn = 1
134
+ let node: Node | null
135
+
136
+ while (node = walker.nextNode()) {
137
+ const textNode = node as Text
138
+ const text = textNode.textContent || ''
139
+
140
+ // Check if already wrapped
141
+ if (textNode.parentElement?.hasAttribute('data-graphql-id')) {
142
+ // Update position tracking and continue
143
+ for (const char of text) {
144
+ if (char === '\n') {
145
+ currentLine++
146
+ currentColumn = 1
147
+ } else {
148
+ currentColumn++
149
+ }
150
+ }
151
+ continue
152
+ }
153
+
154
+ // Track position in the text
155
+ let textIndex = 0
156
+ while (textIndex < text.length) {
157
+ // Check if we're at the identifier's position
158
+ if (
159
+ currentLine === identifier.position.line
160
+ && currentColumn === identifier.position.column
161
+ ) {
162
+ // Verify it's actually our identifier
163
+ const remainingText = text.substring(textIndex)
164
+ if (remainingText.startsWith(identifier.name)) {
165
+ // Create a unique ID for this identifier
166
+ const id = `${identifier.position.start}-${identifier.name}-${identifier.kind}`
167
+
168
+ // Split the text node and wrap the identifier
169
+ const before = text.substring(0, textIndex)
170
+ const after = text.substring(textIndex + identifier.name.length)
171
+
172
+ const span = document.createElement('span')
173
+ span.setAttribute('data-graphql-id', id)
174
+ span.setAttribute('data-graphql-name', identifier.name)
175
+ span.setAttribute('data-graphql-kind', identifier.kind)
176
+ span.setAttribute('data-graphql-start', String(identifier.position.start))
177
+ span.setAttribute('data-graphql-end', String(identifier.position.end))
178
+ span.setAttribute('data-graphql-line', String(identifier.position.line))
179
+ span.setAttribute('data-graphql-column', String(identifier.position.column))
180
+ span.setAttribute('data-graphql-path', identifier.schemaPath.join(','))
181
+ span.textContent = identifier.name
182
+
183
+ const parent = textNode.parentNode!
184
+
185
+ if (before) {
186
+ parent.insertBefore(document.createTextNode(before), textNode)
187
+ }
188
+
189
+ parent.insertBefore(span, textNode)
190
+
191
+ if (after) {
192
+ parent.insertBefore(document.createTextNode(after), textNode)
193
+ }
194
+
195
+ parent.removeChild(textNode)
196
+ return true
197
+ }
198
+ }
199
+
200
+ // Update position tracking
201
+ const char = text[textIndex]
202
+ if (char === '\n') {
203
+ currentLine++
204
+ currentColumn = 1
205
+ } else {
206
+ currentColumn++
207
+ }
208
+ textIndex++
209
+ }
210
+ }
211
+
212
+ return false // Identifier not found
213
+ }
214
+ }
215
+
216
+ /**
217
+ * Create invisible overlay for a position
218
+ */
219
+ export const createSimpleOverlay = (
220
+ position: DOMPosition,
221
+ identifier: Identifier,
222
+ options?: {
223
+ onClick?: (identifier: Identifier) => void
224
+ onHover?: (identifier: Identifier, event: MouseEvent) => void
225
+ className?: string
226
+ },
227
+ ): HTMLElement => {
228
+ const overlay = document.createElement('div')
229
+
230
+ // Base styles for positioning
231
+ overlay.style.position = 'absolute'
232
+ overlay.style.top = `${position.top}px`
233
+ overlay.style.left = `${position.left}px`
234
+ overlay.style.width = `${position.width}px`
235
+ overlay.style.height = `${position.height}px`
236
+ overlay.style.cursor = 'pointer'
237
+ overlay.style.zIndex = '10'
238
+
239
+ // Add custom class if provided
240
+ if (options?.className) {
241
+ overlay.className = options.className
242
+ }
243
+
244
+ // Data attributes
245
+ overlay.setAttribute('data-graphql-overlay', 'true')
246
+ overlay.setAttribute('data-graphql-name', identifier.name)
247
+ overlay.setAttribute('data-graphql-kind', identifier.kind)
248
+
249
+ // Event handlers
250
+ if (options?.onClick) {
251
+ overlay.addEventListener('click', (e) => {
252
+ e.preventDefault()
253
+ options.onClick!(identifier)
254
+ })
255
+ }
256
+
257
+ if (options?.onHover) {
258
+ overlay.addEventListener('mouseenter', (e) => {
259
+ options.onHover!(identifier, e)
260
+ })
261
+ }
262
+
263
+ return overlay
264
+ }
265
+
266
+ /**
267
+ * Factory function for position calculator
268
+ */
269
+ export const createSimplePositionCalculator = (): SimplePositionCalculator => {
270
+ return new SimplePositionCalculator()
271
+ }
@@ -0,0 +1,20 @@
1
+ import type { GraphQLSchema } from 'graphql'
2
+ import React from 'react'
3
+
4
+ export const GraphQLSchemaContext = React.createContext<GraphQLSchema | null>(null)
5
+
6
+ export const useGraphQLSchema = () => {
7
+ const schema = React.useContext(GraphQLSchemaContext)
8
+ return schema
9
+ }
10
+
11
+ export const GraphQLSchemaProvider: React.FC<React.PropsWithChildren<{ schema: GraphQLSchema | null }>> = ({
12
+ children,
13
+ schema,
14
+ }) => {
15
+ return (
16
+ <GraphQLSchemaContext.Provider value={schema}>
17
+ {children}
18
+ </GraphQLSchemaContext.Provider>
19
+ )
20
+ }
@@ -0,0 +1,341 @@
1
+ /**
2
+ * Example usage of Schema Integration (Layer 2)
3
+ *
4
+ * Demonstrates how the schema integration layer resolves GraphQL identifiers
5
+ * against actual schemas, extracts documentation, and generates reference URLs.
6
+ */
7
+
8
+ import { buildSchema } from 'graphql'
9
+ import { analyzeWithSchema, createPolenSchemaResolver } from './schema-integration.ts'
10
+
11
+ // Example schema - typical GraphQL API
12
+ const pokemonSchema = buildSchema(`
13
+ """
14
+ A PokƩmon character
15
+ """
16
+ type Pokemon {
17
+ """
18
+ The PokƩmon's unique identifier
19
+ """
20
+ id: ID!
21
+
22
+ """
23
+ The PokƩmon's name
24
+ """
25
+ name: String!
26
+
27
+ """
28
+ The PokƩmon's type (e.g., Electric, Fire, Water)
29
+ """
30
+ type: String!
31
+
32
+ """
33
+ The PokƩmon's abilities
34
+ """
35
+ abilities(
36
+ """
37
+ Maximum number of abilities to return
38
+ """
39
+ first: Int = 5
40
+ ): [Ability!]!
41
+
42
+ """
43
+ @deprecated Use evolutionChain instead
44
+ """
45
+ evolutions: [Pokemon!] @deprecated(reason: "Use evolutionChain instead")
46
+ }
47
+
48
+ """
49
+ A special ability that PokƩmon can have
50
+ """
51
+ type Ability {
52
+ id: ID!
53
+ name: String!
54
+ description: String
55
+ isHidden: Boolean!
56
+ }
57
+
58
+ type Query {
59
+ """
60
+ Get a PokƩmon by ID
61
+ """
62
+ pokemon(id: ID!): Pokemon
63
+
64
+ """
65
+ Search for PokƩmon by name
66
+ """
67
+ searchPokemon(query: String!): [Pokemon!]!
68
+ }
69
+ `)
70
+
71
+ // Example GraphQL query with various constructs
72
+ const exampleQuery = `
73
+ query GetPokemonDetails($pokemonId: ID!, $abilityLimit: Int = 3) {
74
+ pokemon(id: $pokemonId) {
75
+ id
76
+ name
77
+ type
78
+ abilities(first: $abilityLimit) {
79
+ name
80
+ description
81
+ isHidden
82
+ }
83
+ evolutions # This field is deprecated
84
+ invalidField # This field doesn't exist
85
+ }
86
+ }
87
+ `
88
+
89
+ /**
90
+ * Demonstrate basic schema resolution
91
+ */
92
+ export const demonstrateSchemaResolution = () => {
93
+ console.log('šŸ”— Schema Integration Demo\n')
94
+
95
+ const resolver = createPolenSchemaResolver(pokemonSchema)
96
+
97
+ // Example identifiers (normally extracted from AST)
98
+ const testIdentifiers = [
99
+ {
100
+ name: 'Pokemon',
101
+ kind: 'Type' as const,
102
+ position: { start: 50, end: 57, line: 3, column: 5 },
103
+ schemaPath: ['Pokemon'],
104
+ context: { selectionPath: [] },
105
+ },
106
+ {
107
+ name: 'name',
108
+ kind: 'Field' as const,
109
+ position: { start: 75, end: 79, line: 4, column: 7 },
110
+ parentType: 'Pokemon',
111
+ schemaPath: ['Pokemon', 'name'],
112
+ context: { selectionPath: ['pokemon', 'name'] },
113
+ },
114
+ {
115
+ name: 'evolutions',
116
+ kind: 'Field' as const,
117
+ position: { start: 150, end: 160, line: 9, column: 7 },
118
+ parentType: 'Pokemon',
119
+ schemaPath: ['Pokemon', 'evolutions'],
120
+ context: { selectionPath: ['pokemon', 'evolutions'] },
121
+ },
122
+ {
123
+ name: 'first',
124
+ kind: 'Argument' as const,
125
+ position: { start: 120, end: 125, line: 6, column: 20 },
126
+ parentType: 'Pokemon',
127
+ schemaPath: ['Pokemon', 'abilities', 'first'],
128
+ context: { selectionPath: ['pokemon', 'abilities'] },
129
+ },
130
+ ]
131
+
132
+ console.log('šŸ“‹ Identifier Resolutions:\n')
133
+
134
+ for (const identifier of testIdentifiers) {
135
+ const resolution = resolver.resolveIdentifier(identifier)
136
+ if (!resolution) continue
137
+
138
+ console.log(`šŸ·ļø ${identifier.kind}: ${identifier.name}`)
139
+ console.log(` āœ… Exists: ${resolution.exists}`)
140
+ console.log(` šŸ”— URL: ${resolution.referenceUrl}`)
141
+
142
+ if (resolution.documentation) {
143
+ console.log(` šŸ“ Type: ${resolution.documentation.typeInfo}`)
144
+ if (resolution.documentation.description) {
145
+ console.log(` šŸ’¬ Description: ${resolution.documentation.description}`)
146
+ }
147
+ if (resolution.documentation.defaultValue) {
148
+ console.log(` šŸŽÆ Default: ${resolution.documentation.defaultValue}`)
149
+ }
150
+ }
151
+
152
+ if (resolution.deprecated) {
153
+ console.log(` āš ļø DEPRECATED: ${resolution.deprecated.reason}`)
154
+ }
155
+
156
+ console.log()
157
+ }
158
+ }
159
+
160
+ /**
161
+ * Demonstrate full schema-aware analysis
162
+ */
163
+ export const demonstrateSchemaAwareAnalysis = () => {
164
+ console.log('šŸ” Schema-Aware Analysis\n')
165
+
166
+ const result = analyzeWithSchema(exampleQuery, pokemonSchema)
167
+
168
+ console.log(`šŸ“Š Analysis Summary:`)
169
+ console.log(` • Valid GraphQL: ${result.analysis.isValid}`)
170
+ console.log(` • Total identifiers: ${result.analysis.identifiers.all.length}`)
171
+ console.log(` • Schema resolutions: ${result.resolutions.size}`)
172
+ console.log(` • Schema errors: ${result.schemaErrors.length}\n`)
173
+
174
+ // Show validation errors
175
+ if (result.schemaErrors.length > 0) {
176
+ console.log('🚨 Schema Validation Issues:\n')
177
+ for (const error of result.schemaErrors) {
178
+ const emoji = error.severity === 'error' ? 'āŒ' : 'āš ļø'
179
+ const pos = `${error.identifier.position.line}:${error.identifier.position.column}`
180
+ console.log(` ${emoji} ${error.message} @ ${pos}`)
181
+ }
182
+ console.log()
183
+ }
184
+
185
+ // Show successful resolutions with hyperlink potential
186
+ console.log('šŸ”— Generated Hyperlinks:\n')
187
+ let linkCount = 0
188
+
189
+ for (const [key, resolution] of result.resolutions) {
190
+ if (resolution.exists && linkCount < 8) { // Show first 8 successful resolutions
191
+ const identifier = result.analysis.identifiers.all.find(id =>
192
+ key.startsWith(`${id.position.start}-${id.name}-${id.kind}`)
193
+ )
194
+
195
+ if (identifier) {
196
+ const pos = `${identifier.position.line}:${identifier.position.column}`
197
+ console.log(` šŸ“ ${identifier.name} (${identifier.kind}) → ${resolution.referenceUrl}`)
198
+
199
+ if (resolution.documentation?.description) {
200
+ const shortDesc = resolution.documentation.description.length > 50
201
+ ? resolution.documentation.description.substring(0, 50) + '...'
202
+ : resolution.documentation.description
203
+ console.log(` šŸ’¬ "${shortDesc}"`)
204
+ }
205
+
206
+ linkCount++
207
+ }
208
+ }
209
+ }
210
+ }
211
+
212
+ /**
213
+ * Demonstrate tooltip data extraction
214
+ */
215
+ export const demonstrateTooltipData = () => {
216
+ console.log('\nšŸ’¬ Tooltip Data Extraction\n')
217
+
218
+ const resolver = createPolenSchemaResolver(pokemonSchema)
219
+
220
+ // Simulate tooltip hover scenarios
221
+ const tooltipExamples = [
222
+ ['Pokemon'],
223
+ ['Pokemon', 'name'],
224
+ ['Pokemon', 'abilities'],
225
+ ['Pokemon', 'abilities', 'first'],
226
+ ['Ability', 'isHidden'],
227
+ ]
228
+
229
+ for (const schemaPath of tooltipExamples) {
230
+ const docs = resolver.getDocumentation(schemaPath)
231
+ if (docs) {
232
+ const pathStr = schemaPath.join(' → ')
233
+ console.log(`šŸ·ļø ${pathStr}`)
234
+ console.log(` šŸ“‹ Type: ${docs.typeInfo}`)
235
+
236
+ if (docs.description) {
237
+ console.log(` šŸ’¬ Description: ${docs.description}`)
238
+ }
239
+
240
+ if (docs.defaultValue) {
241
+ console.log(` šŸŽÆ Default: ${docs.defaultValue}`)
242
+ }
243
+
244
+ if (docs.deprecated) {
245
+ console.log(` āš ļø DEPRECATED: ${docs.deprecated.reason}`)
246
+ }
247
+
248
+ console.log()
249
+ }
250
+ }
251
+ }
252
+
253
+ /**
254
+ * Demonstrate URL generation customization
255
+ */
256
+ export const demonstrateCustomURLGeneration = () => {
257
+ console.log('šŸ› ļø Custom URL Generation\n')
258
+
259
+ // Different resolver configurations
260
+ const configurations = [
261
+ { name: 'Default', config: {} },
262
+ { name: 'Custom Base Path', config: { basePath: '/docs/api' } },
263
+ { name: 'No Fragments', config: { includeFragments: false } },
264
+ { name: 'Custom + No Fragments', config: { basePath: '/schema', includeFragments: false } },
265
+ ]
266
+
267
+ const testPaths = [
268
+ ['Pokemon'],
269
+ ['Pokemon', 'name'],
270
+ ['Pokemon', 'abilities', 'first'],
271
+ ]
272
+
273
+ for (const { name, config } of configurations) {
274
+ console.log(`šŸ“‹ ${name}:`)
275
+ const resolver = createPolenSchemaResolver(pokemonSchema, config)
276
+
277
+ for (const path of testPaths) {
278
+ const url = resolver.generateReferenceLink(path)
279
+ console.log(` ${path.join(' → ')} → ${url}`)
280
+ }
281
+ console.log()
282
+ }
283
+ }
284
+
285
+ /**
286
+ * Show integration with Polen's reference system
287
+ */
288
+ export const demonstratePolenIntegration = () => {
289
+ console.log('šŸ—ļø Polen Integration Preview\n')
290
+
291
+ // This demonstrates how the schema integration connects with Polen's existing systems
292
+ const result = analyzeWithSchema(exampleQuery, pokemonSchema, {
293
+ basePath: '/reference', // Polen's reference page base
294
+ includeFragments: true, // Enable field anchors
295
+ })
296
+
297
+ console.log('šŸ”„ How this integrates with Polen:\n')
298
+
299
+ console.log('1. šŸ“‹ Schema Loading:')
300
+ console.log(" • Uses PROJECT_DATA.schema from Polen's build system")
301
+ console.log(' • Leverages existing schema processing pipeline')
302
+ console.log()
303
+
304
+ console.log('2. šŸ”— Reference Links:')
305
+ console.log(" • Generates URLs matching Polen's /reference/* structure")
306
+ console.log(' • Works with existing TypeIndex and sidebar system')
307
+ console.log()
308
+
309
+ console.log('3. šŸ’¬ Documentation:')
310
+ console.log(' • Extracts descriptions for hover tooltips')
311
+ console.log(' • Provides type signatures for context')
312
+ console.log(' • Detects deprecation warnings')
313
+ console.log()
314
+
315
+ console.log('4. āœ… Validation:')
316
+ console.log(' • Build-time validation against actual schema')
317
+ console.log(' • Catches typos and invalid references')
318
+ console.log(' • Reports deprecation usage')
319
+ console.log()
320
+
321
+ // Show some example integrations
322
+ const validFields = Array.from(result.resolutions.values())
323
+ .filter(r => r.exists)
324
+ .slice(0, 3)
325
+
326
+ if (validFields.length > 0) {
327
+ console.log('šŸ“‹ Example Reference Links:')
328
+ for (const resolution of validFields) {
329
+ console.log(` • ${resolution.referenceUrl}`)
330
+ }
331
+ }
332
+ }
333
+
334
+ // Run examples if executed directly
335
+ if (import.meta.url === `file://${process.argv[1]}`) {
336
+ demonstrateSchemaResolution()
337
+ demonstrateSchemaAwareAnalysis()
338
+ demonstrateTooltipData()
339
+ demonstrateCustomURLGeneration()
340
+ demonstratePolenIntegration()
341
+ }