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.
- package/build/api/builder/builder.js +1 -1
- package/build/api/builder/builder.js.map +1 -1
- package/build/api/config/load.js +1 -1
- package/build/api/config/load.js.map +1 -1
- package/build/api/vite/plugins/build.js +1 -1
- package/build/api/vite/plugins/build.js.map +1 -1
- package/build/api/vite/plugins/core.d.ts.map +1 -1
- package/build/api/vite/plugins/core.js +0 -2
- package/build/api/vite/plugins/core.js.map +1 -1
- package/build/api/vite/plugins/pages.js +1 -1
- package/build/api/vite/plugins/pages.js.map +1 -1
- package/build/exports/components.d.ts +4 -1
- package/build/exports/components.d.ts.map +1 -1
- package/build/exports/components.js +4 -1
- package/build/exports/components.js.map +1 -1
- package/build/lib/demos/config-schema.d.ts +6 -6
- package/build/lib/github-actions/runner.js +2 -2
- package/build/lib/github-actions/runner.js.map +1 -1
- package/build/lib/graphql-document/$$.d.ts +5 -0
- package/build/lib/graphql-document/$$.d.ts.map +1 -0
- package/build/lib/graphql-document/$$.js +5 -0
- package/build/lib/graphql-document/$$.js.map +1 -0
- package/build/lib/graphql-document/$.d.ts +2 -0
- package/build/lib/graphql-document/$.d.ts.map +1 -0
- package/build/lib/graphql-document/$.js +2 -0
- package/build/lib/graphql-document/$.js.map +1 -0
- package/build/lib/graphql-document/analysis.d.ts +44 -0
- package/build/lib/graphql-document/analysis.d.ts.map +1 -0
- package/build/lib/graphql-document/analysis.js +361 -0
- package/build/lib/graphql-document/analysis.js.map +1 -0
- package/build/lib/graphql-document/components/CopyButton.d.ts +19 -0
- package/build/lib/graphql-document/components/CopyButton.d.ts.map +1 -0
- package/build/lib/graphql-document/components/CopyButton.js +43 -0
- package/build/lib/graphql-document/components/CopyButton.js.map +1 -0
- package/build/lib/graphql-document/components/GraphQLDocument.d.ts +38 -0
- package/build/lib/graphql-document/components/GraphQLDocument.d.ts.map +1 -0
- package/build/lib/graphql-document/components/GraphQLDocument.js +130 -0
- package/build/lib/graphql-document/components/GraphQLDocument.js.map +1 -0
- package/build/lib/graphql-document/components/GraphQLDocumentWithSchema.d.ts +7 -0
- package/build/lib/graphql-document/components/GraphQLDocumentWithSchema.d.ts.map +1 -0
- package/build/lib/graphql-document/components/GraphQLDocumentWithSchema.js +45 -0
- package/build/lib/graphql-document/components/GraphQLDocumentWithSchema.js.map +1 -0
- package/build/lib/graphql-document/components/GraphQLIdentifierPopover.d.ts +33 -0
- package/build/lib/graphql-document/components/GraphQLIdentifierPopover.d.ts.map +1 -0
- package/build/lib/graphql-document/components/GraphQLIdentifierPopover.js +48 -0
- package/build/lib/graphql-document/components/GraphQLIdentifierPopover.js.map +1 -0
- package/build/lib/graphql-document/components/IdentifierLink.d.ts +39 -0
- package/build/lib/graphql-document/components/IdentifierLink.d.ts.map +1 -0
- package/build/lib/graphql-document/components/IdentifierLink.js +75 -0
- package/build/lib/graphql-document/components/IdentifierLink.js.map +1 -0
- package/build/lib/graphql-document/components/graphql-document-styles.d.ts +5 -0
- package/build/lib/graphql-document/components/graphql-document-styles.d.ts.map +1 -0
- package/build/lib/graphql-document/components/graphql-document-styles.js +167 -0
- package/build/lib/graphql-document/components/graphql-document-styles.js.map +1 -0
- package/build/lib/graphql-document/components/index.d.ts +6 -0
- package/build/lib/graphql-document/components/index.d.ts.map +1 -0
- package/build/lib/graphql-document/components/index.js +6 -0
- package/build/lib/graphql-document/components/index.js.map +1 -0
- package/build/lib/graphql-document/example.d.ts +25 -0
- package/build/lib/graphql-document/example.d.ts.map +1 -0
- package/build/lib/graphql-document/example.js +140 -0
- package/build/lib/graphql-document/example.js.map +1 -0
- package/build/lib/graphql-document/graphql-document.d.ts +35 -0
- package/build/lib/graphql-document/graphql-document.d.ts.map +1 -0
- package/build/lib/graphql-document/graphql-document.js +36 -0
- package/build/lib/graphql-document/graphql-document.js.map +1 -0
- package/build/lib/graphql-document/hooks/use-tooltip-state.d.ts +43 -0
- package/build/lib/graphql-document/hooks/use-tooltip-state.d.ts.map +1 -0
- package/build/lib/graphql-document/hooks/use-tooltip-state.js +132 -0
- package/build/lib/graphql-document/hooks/use-tooltip-state.js.map +1 -0
- package/build/lib/graphql-document/positioning-simple.d.ts +68 -0
- package/build/lib/graphql-document/positioning-simple.d.ts.map +1 -0
- package/build/lib/graphql-document/positioning-simple.js +197 -0
- package/build/lib/graphql-document/positioning-simple.js.map +1 -0
- package/build/lib/graphql-document/schema-context.d.ts +8 -0
- package/build/lib/graphql-document/schema-context.d.ts.map +1 -0
- package/build/lib/graphql-document/schema-context.js +11 -0
- package/build/lib/graphql-document/schema-context.js.map +1 -0
- package/build/lib/graphql-document/schema-integration-example.d.ts +27 -0
- package/build/lib/graphql-document/schema-integration-example.d.ts.map +1 -0
- package/build/lib/graphql-document/schema-integration-example.js +297 -0
- package/build/lib/graphql-document/schema-integration-example.js.map +1 -0
- package/build/lib/graphql-document/schema-integration.d.ts +135 -0
- package/build/lib/graphql-document/schema-integration.d.ts.map +1 -0
- package/build/lib/graphql-document/schema-integration.js +328 -0
- package/build/lib/graphql-document/schema-integration.js.map +1 -0
- package/build/lib/graphql-document/types.d.ts +117 -0
- package/build/lib/graphql-document/types.d.ts.map +1 -0
- package/build/lib/graphql-document/types.js +2 -0
- package/build/lib/graphql-document/types.js.map +1 -0
- package/build/template/components/ArgumentAnnotation.js +10 -0
- package/build/template/components/ArgumentAnnotation.js.map +1 -0
- package/build/template/components/ArgumentList.js +9 -0
- package/build/template/components/ArgumentList.js.map +1 -0
- package/build/template/components/ArgumentListAnnotation.js +15 -0
- package/build/template/components/ArgumentListAnnotation.js.map +1 -0
- package/build/template/components/Changelog.js +44 -0
- package/build/template/components/Changelog.js.map +1 -0
- package/build/template/components/{CodeBlock.jsx → CodeBlock.js} +4 -5
- package/build/template/components/{CodeBlock.jsx.map → CodeBlock.js.map} +1 -1
- package/build/template/components/{CodeBlockEnhancer.jsx → CodeBlockEnhancer.js} +4 -4
- package/build/template/components/CodeBlockEnhancer.js.map +1 -0
- package/build/template/components/DeprecationReason.js +9 -0
- package/build/template/components/DeprecationReason.js.map +1 -0
- package/build/template/components/Description.js +9 -0
- package/build/template/components/Description.js.map +1 -0
- package/build/template/components/Field.js +14 -0
- package/build/template/components/Field.js.map +1 -0
- package/build/template/components/{FieldList.jsx → FieldList.js} +4 -5
- package/build/template/components/FieldList.js.map +1 -0
- package/build/template/components/{FieldListSection.jsx → FieldListSection.js} +4 -6
- package/build/template/components/FieldListSection.js.map +1 -0
- package/build/template/components/HamburgerMenu.js +30 -0
- package/build/template/components/HamburgerMenu.js.map +1 -0
- package/build/template/components/Link.d.ts +1 -1
- package/build/template/components/{Link.jsx → Link.js} +4 -5
- package/build/template/components/Link.js.map +1 -0
- package/build/template/components/Logo.js +20 -0
- package/build/template/components/Logo.js.map +1 -0
- package/build/template/components/MDXComponents.d.ts +11 -0
- package/build/template/components/MDXComponents.d.ts.map +1 -0
- package/build/template/components/MDXComponents.js +70 -0
- package/build/template/components/MDXComponents.js.map +1 -0
- package/build/template/components/{Markdown.jsx → Markdown.js} +3 -2
- package/build/template/components/Markdown.js.map +1 -0
- package/build/template/components/MissingSchema.d.ts +1 -1
- package/build/template/components/MissingSchema.d.ts.map +1 -1
- package/build/template/components/MissingSchema.js +5 -0
- package/build/template/components/MissingSchema.js.map +1 -0
- package/build/template/components/NamedType.js +12 -0
- package/build/template/components/NamedType.js.map +1 -0
- package/build/template/components/NotFound.js +7 -0
- package/build/template/components/NotFound.js.map +1 -0
- package/build/template/components/{RadixLink.jsx → RadixLink.js} +1 -1
- package/build/template/components/RadixLink.js.map +1 -0
- package/build/template/components/TestComponent.d.ts +5 -0
- package/build/template/components/TestComponent.d.ts.map +1 -0
- package/build/template/components/TestComponent.js +7 -0
- package/build/template/components/TestComponent.js.map +1 -0
- package/build/template/components/Texts/{MinorHeading.jsx → MinorHeading.js} +4 -3
- package/build/template/components/Texts/MinorHeading.js.map +1 -0
- package/build/template/components/Texts/texts.js +1 -1
- package/build/template/components/Texts/texts.js.map +1 -1
- package/build/template/components/ThemeToggle.js +9 -0
- package/build/template/components/ThemeToggle.js.map +1 -0
- package/build/template/components/{TypeAnnotation.jsx → TypeAnnotation.js} +8 -18
- package/build/template/components/TypeAnnotation.js.map +1 -0
- package/build/template/components/TypeFieldsLinkList.js +9 -0
- package/build/template/components/TypeFieldsLinkList.js.map +1 -0
- package/build/template/components/TypeIndex.js +17 -0
- package/build/template/components/TypeIndex.js.map +1 -0
- package/build/template/components/content/$$.d.ts +1 -0
- package/build/template/components/content/$$.d.ts.map +1 -1
- package/build/template/components/content/$$.js +1 -0
- package/build/template/components/content/$$.js.map +1 -1
- package/build/template/components/content/GraphQLDocumentWithSchema.d.ts +8 -0
- package/build/template/components/content/GraphQLDocumentWithSchema.d.ts.map +1 -0
- package/build/template/components/content/GraphQLDocumentWithSchema.js +16 -0
- package/build/template/components/content/GraphQLDocumentWithSchema.js.map +1 -0
- package/build/template/components/content/GraphQLDocumentWrapper.d.ts +7 -0
- package/build/template/components/content/GraphQLDocumentWrapper.d.ts.map +1 -0
- package/build/template/components/content/GraphQLDocumentWrapper.js +62 -0
- package/build/template/components/content/GraphQLDocumentWrapper.js.map +1 -0
- package/build/template/components/graphql/graphql.d.ts +2 -2
- package/build/template/components/graphql/graphql.js +3 -0
- package/build/template/components/graphql/graphql.js.map +1 -0
- package/build/template/components/graphql/index.d.ts +1 -1
- package/build/template/components/graphql/index.js +1 -1
- package/build/template/components/graphql/index.js.map +1 -1
- package/build/template/components/graphql/{type-kind-icon.jsx → type-kind-icon.js} +3 -2
- package/build/template/components/graphql/type-kind-icon.js.map +1 -0
- package/build/template/components/graphql/type-link.js +11 -0
- package/build/template/components/graphql/type-link.js.map +1 -0
- package/build/template/components/sidebar/Sidebar.d.ts +1 -1
- package/build/template/components/sidebar/Sidebar.d.ts.map +1 -1
- package/build/template/components/sidebar/Sidebar.js +11 -0
- package/build/template/components/sidebar/Sidebar.js.map +1 -0
- package/build/template/components/sidebar/{SidebarItem.jsx → SidebarItem.js} +15 -32
- package/build/template/components/sidebar/SidebarItem.js.map +1 -0
- package/build/template/components/sidebar/ToggleButton.d.ts +1 -1
- package/build/template/components/sidebar/ToggleButton.d.ts.map +1 -1
- package/build/template/components/sidebar/ToggleButton.js +5 -0
- package/build/template/components/sidebar/ToggleButton.js.map +1 -0
- package/build/template/contexts/{ThemeContext.jsx → ThemeContext.js} +3 -4
- package/build/template/contexts/{ThemeContext.jsx.map → ThemeContext.js.map} +1 -1
- package/build/template/entry.client.d.ts +1 -0
- package/build/template/entry.client.d.ts.map +1 -1
- package/build/template/{entry.client.jsx → entry.client.js} +5 -6
- package/build/template/entry.client.js.map +1 -0
- package/build/template/routes/changelog.d.ts +1 -1
- package/build/template/routes/{changelog.jsx → changelog.js} +5 -4
- package/build/template/routes/changelog.js.map +1 -0
- package/build/template/routes/{index.jsx → index.js} +3 -2
- package/build/template/routes/index.js.map +1 -0
- package/build/template/routes/reference.$type.$field.d.ts +1 -1
- package/build/template/routes/{reference.$type.$field.jsx → reference.$type.$field.js} +6 -5
- package/build/template/routes/reference.$type.$field.js.map +1 -0
- package/build/template/routes/reference.$type.d.ts +1 -1
- package/build/template/routes/{reference.$type.jsx → reference.$type.js} +6 -5
- package/build/template/routes/reference.$type.js.map +1 -0
- package/build/template/routes/reference.d.ts +2 -2
- package/build/template/routes/{reference.jsx → reference.js} +6 -7
- package/build/template/routes/reference.js.map +1 -0
- package/build/template/routes/root.d.ts +2 -2
- package/build/template/routes/root.d.ts.map +1 -1
- package/build/template/routes/{root.jsx → root.js} +46 -88
- package/build/template/routes/root.js.map +1 -0
- package/build/template/routes.js +5 -0
- package/build/template/routes.js.map +1 -0
- package/build/template/server/app.js +1 -1
- package/build/template/server/app.js.map +1 -1
- package/build/template/server/{render-page.jsx → render-page.js} +3 -4
- package/build/template/server/render-page.js.map +1 -0
- package/build/template/server/ssg/generate.js +1 -1
- package/build/template/server/ssg/generate.js.map +1 -1
- package/build/template/server/ssg/get-route-paths.js +1 -1
- package/build/template/server/ssg/get-route-paths.js.map +1 -1
- package/build/template/server/view.js +1 -1
- package/build/template/server/view.js.map +1 -1
- package/package.json +57 -8
- package/src/api/vite/plugins/core.ts +0 -3
- package/src/api/vite/plugins/pages.ts +1 -1
- package/src/exports/components.ts +4 -1
- package/src/lib/graphql-document/$$.ts +4 -0
- package/src/lib/graphql-document/$.test.ts +132 -0
- package/src/lib/graphql-document/$.ts +1 -0
- package/src/lib/graphql-document/README.md +102 -0
- package/src/lib/graphql-document/analysis.ts +415 -0
- package/src/lib/graphql-document/components/CopyButton.tsx +76 -0
- package/src/lib/graphql-document/components/GraphQLDocument.tsx +250 -0
- package/src/lib/graphql-document/components/GraphQLDocument.unit.test.ts +188 -0
- package/src/lib/graphql-document/components/GraphQLDocumentWithSchema.tsx +70 -0
- package/src/lib/graphql-document/components/GraphQLIdentifierPopover.tsx +197 -0
- package/src/lib/graphql-document/components/IdentifierLink.tsx +160 -0
- package/src/lib/graphql-document/components/graphql-document-styles.ts +167 -0
- package/src/lib/graphql-document/components/index.ts +5 -0
- package/src/lib/graphql-document/demo.md +155 -0
- package/src/lib/graphql-document/example.ts +163 -0
- package/src/lib/graphql-document/graphql-document.ts +37 -0
- package/src/lib/graphql-document/hooks/use-tooltip-state.test.ts +76 -0
- package/src/lib/graphql-document/hooks/use-tooltip-state.ts +191 -0
- package/src/lib/graphql-document/positioning-simple.test.ts +252 -0
- package/src/lib/graphql-document/positioning-simple.ts +271 -0
- package/src/lib/graphql-document/schema-context.tsx +20 -0
- package/src/lib/graphql-document/schema-integration-example.ts +341 -0
- package/src/lib/graphql-document/schema-integration.test.ts +365 -0
- package/src/lib/graphql-document/schema-integration.ts +497 -0
- package/src/lib/graphql-document/types.ts +129 -0
- package/src/template/components/ArgumentAnnotation.tsx +1 -1
- package/src/template/components/ArgumentList.tsx +1 -1
- package/src/template/components/ArgumentListAnnotation.tsx +2 -2
- package/src/template/components/CodeBlockEnhancer.tsx +21 -21
- package/src/template/components/DeprecationReason.tsx +1 -1
- package/src/template/components/Description.tsx +1 -1
- package/src/template/components/Field.tsx +4 -4
- package/src/template/components/FieldList.tsx +1 -1
- package/src/template/components/FieldListSection.tsx +1 -1
- package/src/template/components/Link.tsx +2 -2
- package/src/template/components/MDXComponents.tsx +101 -0
- package/src/template/components/NamedType.tsx +2 -2
- package/src/template/components/TestComponent.tsx +6 -0
- package/src/template/components/TypeAnnotation.tsx +1 -1
- package/src/template/components/TypeFieldsLinkList.tsx +1 -1
- package/src/template/components/TypeIndex.tsx +1 -1
- package/src/template/components/content/$$.ts +1 -0
- package/src/template/components/content/GraphQLDocumentWithSchema.tsx +18 -0
- package/src/template/components/content/GraphQLDocumentWrapper.tsx +82 -0
- package/src/template/components/graphql/graphql.tsx +2 -2
- package/src/template/components/graphql/index.ts +1 -1
- package/src/template/components/graphql/type-link.tsx +2 -2
- package/src/template/entry.client.tsx +2 -2
- package/src/template/routes/changelog.tsx +1 -1
- package/src/template/routes/reference.$type.$field.tsx +3 -3
- package/src/template/routes/reference.$type.tsx +3 -3
- package/src/template/routes/reference.tsx +3 -3
- package/src/template/routes/root.tsx +36 -25
- package/src/template/routes.tsx +1 -1
- package/src/template/server/app.ts +1 -1
- package/src/template/server/ssg/generate.ts +1 -1
- package/src/template/server/ssg/get-route-paths.ts +1 -1
- package/src/template/server/view.ts +1 -1
- package/src/template/styles/code-block.css +32 -0
- package/build/template/components/ArgumentAnnotation.jsx +0 -16
- package/build/template/components/ArgumentAnnotation.jsx.map +0 -1
- package/build/template/components/ArgumentList.jsx +0 -16
- package/build/template/components/ArgumentList.jsx.map +0 -1
- package/build/template/components/ArgumentListAnnotation.jsx +0 -23
- package/build/template/components/ArgumentListAnnotation.jsx.map +0 -1
- package/build/template/components/Changelog.jsx +0 -68
- package/build/template/components/Changelog.jsx.map +0 -1
- package/build/template/components/CodeBlockEnhancer.jsx.map +0 -1
- package/build/template/components/DeprecationReason.jsx +0 -10
- package/build/template/components/DeprecationReason.jsx.map +0 -1
- package/build/template/components/Description.jsx +0 -10
- package/build/template/components/Description.jsx.map +0 -1
- package/build/template/components/Field.jsx +0 -22
- package/build/template/components/Field.jsx.map +0 -1
- package/build/template/components/FieldList.jsx.map +0 -1
- package/build/template/components/FieldListSection.jsx.map +0 -1
- package/build/template/components/HamburgerMenu.jsx +0 -53
- package/build/template/components/HamburgerMenu.jsx.map +0 -1
- package/build/template/components/Link.jsx.map +0 -1
- package/build/template/components/Logo.jsx +0 -29
- package/build/template/components/Logo.jsx.map +0 -1
- package/build/template/components/Markdown.jsx.map +0 -1
- package/build/template/components/MissingSchema.jsx +0 -4
- package/build/template/components/MissingSchema.jsx.map +0 -1
- package/build/template/components/NamedType.jsx +0 -17
- package/build/template/components/NamedType.jsx.map +0 -1
- package/build/template/components/NotFound.jsx +0 -26
- package/build/template/components/NotFound.jsx.map +0 -1
- package/build/template/components/RadixLink.jsx.map +0 -1
- package/build/template/components/Texts/MinorHeading.jsx.map +0 -1
- package/build/template/components/ThemeToggle.jsx +0 -10
- package/build/template/components/ThemeToggle.jsx.map +0 -1
- package/build/template/components/TypeAnnotation.jsx.map +0 -1
- package/build/template/components/TypeFieldsLinkList.jsx +0 -17
- package/build/template/components/TypeFieldsLinkList.jsx.map +0 -1
- package/build/template/components/TypeIndex.jsx +0 -27
- package/build/template/components/TypeIndex.jsx.map +0 -1
- package/build/template/components/graphql/graphql.jsx +0 -3
- package/build/template/components/graphql/graphql.jsx.map +0 -1
- package/build/template/components/graphql/type-kind-icon.jsx.map +0 -1
- package/build/template/components/graphql/type-link.jsx +0 -16
- package/build/template/components/graphql/type-link.jsx.map +0 -1
- package/build/template/components/sidebar/Sidebar.jsx +0 -15
- package/build/template/components/sidebar/Sidebar.jsx.map +0 -1
- package/build/template/components/sidebar/SidebarItem.jsx.map +0 -1
- package/build/template/components/sidebar/ToggleButton.jsx +0 -6
- package/build/template/components/sidebar/ToggleButton.jsx.map +0 -1
- package/build/template/entry.client.jsx.map +0 -1
- package/build/template/routes/changelog.jsx.map +0 -1
- package/build/template/routes/index.jsx.map +0 -1
- package/build/template/routes/reference.$type.$field.jsx.map +0 -1
- package/build/template/routes/reference.$type.jsx.map +0 -1
- package/build/template/routes/reference.jsx.map +0 -1
- package/build/template/routes/root.jsx.map +0 -1
- package/build/template/routes.jsx +0 -5
- package/build/template/routes.jsx.map +0 -1
- package/build/template/server/render-page.jsx.map +0 -1
@@ -0,0 +1,140 @@
|
|
1
|
+
/**
|
2
|
+
* Example usage of the GraphQL Document Analysis library
|
3
|
+
*
|
4
|
+
* This demonstrates how to use the foundational layer for extracting
|
5
|
+
* identifiers and context from GraphQL documents - the building block
|
6
|
+
* for the interactive GraphQL Document Component.
|
7
|
+
*/
|
8
|
+
import { GraphQLDocument } from "./$.js";
|
9
|
+
// Example GraphQL query with various constructs
|
10
|
+
const exampleQuery = `
|
11
|
+
query GetPokemonWithAbilities($id: ID!, $limit: Int = 10) {
|
12
|
+
pokemon(id: $id) {
|
13
|
+
name
|
14
|
+
abilities(first: $limit) {
|
15
|
+
name
|
16
|
+
isHidden
|
17
|
+
pokemon {
|
18
|
+
name
|
19
|
+
}
|
20
|
+
}
|
21
|
+
... on ElectricPokemon {
|
22
|
+
voltage
|
23
|
+
}
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
fragment PokemonBasics on Pokemon {
|
28
|
+
name
|
29
|
+
type
|
30
|
+
level
|
31
|
+
}
|
32
|
+
`;
|
33
|
+
/**
|
34
|
+
* Demonstrate basic analysis
|
35
|
+
*/
|
36
|
+
export const analyzeExample = () => {
|
37
|
+
console.log('🔍 Analyzing GraphQL Document...\n');
|
38
|
+
const result = GraphQLDocument.analyze(exampleQuery);
|
39
|
+
console.log(`✅ Valid: ${result.isValid}`);
|
40
|
+
console.log(`📊 Total identifiers: ${result.identifiers.all.length}`);
|
41
|
+
console.log(`🚨 Errors: ${result.errors.length}\n`);
|
42
|
+
// Show identifiers by kind
|
43
|
+
for (const [kind, identifiers] of result.identifiers.byKind) {
|
44
|
+
console.log(`${getKindEmoji(kind)} ${kind} (${identifiers.length}):`);
|
45
|
+
for (const identifier of identifiers) {
|
46
|
+
const pos = `${identifier.position.line}:${identifier.position.column}`;
|
47
|
+
const path = identifier.schemaPath.join(' → ');
|
48
|
+
const parent = identifier.parentType ? ` (in ${identifier.parentType})` : '';
|
49
|
+
console.log(` • ${identifier.name}${parent} → ${path} @ ${pos}`);
|
50
|
+
}
|
51
|
+
console.log();
|
52
|
+
}
|
53
|
+
return result;
|
54
|
+
};
|
55
|
+
/**
|
56
|
+
* Demonstrate identifier lookup by position
|
57
|
+
*/
|
58
|
+
export const demonstratePositionLookup = () => {
|
59
|
+
console.log('📍 Position-based Identifier Lookup...\n');
|
60
|
+
const identifiers = GraphQLDocument.extractIdentifiers(exampleQuery);
|
61
|
+
// Find identifier at a specific position (e.g., cursor position in an editor)
|
62
|
+
const targetPosition = 180; // Approximate position of "abilities" field
|
63
|
+
// Find the closest identifier to this position
|
64
|
+
let closestIdentifier = null;
|
65
|
+
let closestDistance = Infinity;
|
66
|
+
for (const identifier of identifiers.all) {
|
67
|
+
const distance = Math.abs(identifier.position.start - targetPosition);
|
68
|
+
if (distance < closestDistance) {
|
69
|
+
closestDistance = distance;
|
70
|
+
closestIdentifier = identifier;
|
71
|
+
}
|
72
|
+
}
|
73
|
+
if (closestIdentifier) {
|
74
|
+
console.log(`🎯 Identifier near position ${targetPosition}:`);
|
75
|
+
console.log(` Name: ${closestIdentifier.name}`);
|
76
|
+
console.log(` Kind: ${closestIdentifier.kind}`);
|
77
|
+
console.log(` Schema Path: ${closestIdentifier.schemaPath.join(' → ')}`);
|
78
|
+
console.log(` Context: ${JSON.stringify(closestIdentifier.context, null, 2)}`);
|
79
|
+
}
|
80
|
+
};
|
81
|
+
/**
|
82
|
+
* Demonstrate how this enables hyperlink generation
|
83
|
+
*/
|
84
|
+
export const demonstrateHyperlinkGeneration = () => {
|
85
|
+
console.log('🔗 Hyperlink Generation Preview...\n');
|
86
|
+
const identifiers = GraphQLDocument.extractIdentifiers(exampleQuery);
|
87
|
+
// Show how each identifier could become a hyperlink
|
88
|
+
const typeIdentifiers = identifiers.byKind.get('Type') || [];
|
89
|
+
const fieldIdentifiers = identifiers.byKind.get('Field') || [];
|
90
|
+
console.log('📝 Type References → Schema Links:');
|
91
|
+
for (const identifier of typeIdentifiers) {
|
92
|
+
const referenceUrl = `/reference/${identifier.name}`;
|
93
|
+
console.log(` ${identifier.name} → ${referenceUrl}`);
|
94
|
+
}
|
95
|
+
console.log('\n📝 Field References → Schema Links:');
|
96
|
+
for (const identifier of fieldIdentifiers.slice(0, 5)) { // Show first 5
|
97
|
+
const referenceUrl = identifier.parentType
|
98
|
+
? `/reference/${identifier.parentType}#${identifier.name}`
|
99
|
+
: `/reference/${identifier.name}`;
|
100
|
+
console.log(` ${identifier.name} → ${referenceUrl}`);
|
101
|
+
}
|
102
|
+
};
|
103
|
+
/**
|
104
|
+
* Show the foundation for hover tooltips
|
105
|
+
*/
|
106
|
+
export const demonstrateTooltipFoundation = () => {
|
107
|
+
console.log('💬 Tooltip Foundation...\n');
|
108
|
+
const identifiers = GraphQLDocument.extractIdentifiers(exampleQuery);
|
109
|
+
// Show context information that would be displayed in tooltips
|
110
|
+
const fieldIdentifiers = identifiers.byKind.get('Field') || [];
|
111
|
+
for (const identifier of fieldIdentifiers.slice(0, 3)) { // Show first 3
|
112
|
+
console.log(`🏷️ ${identifier.name}:`);
|
113
|
+
console.log(` Position: Line ${identifier.position.line}, Column ${identifier.position.column}`);
|
114
|
+
console.log(` Schema Path: ${identifier.schemaPath.join(' → ')}`);
|
115
|
+
console.log(` Parent Type: ${identifier.parentType || 'Root'}`);
|
116
|
+
console.log(` Operation: ${identifier.context.operationType || 'None'}`);
|
117
|
+
console.log(` Selection Path: ${identifier.context.selectionPath.join(' → ')}`);
|
118
|
+
console.log();
|
119
|
+
}
|
120
|
+
};
|
121
|
+
// Helper function
|
122
|
+
function getKindEmoji(kind) {
|
123
|
+
const emojis = {
|
124
|
+
'Type': '🏷️',
|
125
|
+
'Field': '📋',
|
126
|
+
'Argument': '⚙️',
|
127
|
+
'Variable': '💰',
|
128
|
+
'Directive': '🎯',
|
129
|
+
'Fragment': '🧩',
|
130
|
+
};
|
131
|
+
return emojis[kind] || '❓';
|
132
|
+
}
|
133
|
+
// Run example if executed directly
|
134
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
135
|
+
analyzeExample();
|
136
|
+
demonstratePositionLookup();
|
137
|
+
demonstrateHyperlinkGeneration();
|
138
|
+
demonstrateTooltipFoundation();
|
139
|
+
}
|
140
|
+
//# sourceMappingURL=example.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"example.js","sourceRoot":"","sources":["../../../src/lib/graphql-document/example.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
/**
|
2
|
+
* GraphQL Document Component Library
|
3
|
+
*
|
4
|
+
* Transform static GraphQL code blocks into interactive documentation with
|
5
|
+
* hyperlinks, tooltips, and schema validation.
|
6
|
+
*
|
7
|
+
* ## Features
|
8
|
+
* - Hyperlinked identifiers that navigate to reference documentation
|
9
|
+
* - Hover tooltips showing type information and descriptions
|
10
|
+
* - Schema validation with error highlighting
|
11
|
+
* - Build-time GraphQL validation
|
12
|
+
* - Support for all GraphQL operations (queries, mutations, subscriptions, fragments)
|
13
|
+
*
|
14
|
+
* ## Usage
|
15
|
+
* ```typescript
|
16
|
+
* import { GraphQLDocument } from 'polen/lib/graphql-document'
|
17
|
+
*
|
18
|
+
* <GraphQLDocument schema={schema}>
|
19
|
+
* {`query { user { name } }`}
|
20
|
+
* </GraphQLDocument>
|
21
|
+
* ```
|
22
|
+
*
|
23
|
+
* @see {@link GraphQLDocumentWithSchema} for MDX integration
|
24
|
+
* @see {@link GraphQLDocument} for the main React component
|
25
|
+
*/
|
26
|
+
export * from './analysis.ts';
|
27
|
+
export * from './components/index.ts';
|
28
|
+
export * from './positioning-simple.ts';
|
29
|
+
export * from './schema-integration.ts';
|
30
|
+
export * from './types.ts';
|
31
|
+
export { analyze, analyzer, extractIdentifiers } from './analysis.ts';
|
32
|
+
export { GraphQLDocument } from './components/GraphQLDocument.tsx';
|
33
|
+
export { createSimpleOverlay, createSimplePositionCalculator } from './positioning-simple.ts';
|
34
|
+
export { analyzeWithSchema, createPolenSchemaResolver } from './schema-integration.ts';
|
35
|
+
//# sourceMappingURL=graphql-document.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"graphql-document.d.ts","sourceRoot":"","sources":["../../../src/lib/graphql-document/graphql-document.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,YAAY,CAAA;AAG1B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAClE,OAAO,EAAE,mBAAmB,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAA;AAC7F,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA"}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
/**
|
2
|
+
* GraphQL Document Component Library
|
3
|
+
*
|
4
|
+
* Transform static GraphQL code blocks into interactive documentation with
|
5
|
+
* hyperlinks, tooltips, and schema validation.
|
6
|
+
*
|
7
|
+
* ## Features
|
8
|
+
* - Hyperlinked identifiers that navigate to reference documentation
|
9
|
+
* - Hover tooltips showing type information and descriptions
|
10
|
+
* - Schema validation with error highlighting
|
11
|
+
* - Build-time GraphQL validation
|
12
|
+
* - Support for all GraphQL operations (queries, mutations, subscriptions, fragments)
|
13
|
+
*
|
14
|
+
* ## Usage
|
15
|
+
* ```typescript
|
16
|
+
* import { GraphQLDocument } from 'polen/lib/graphql-document'
|
17
|
+
*
|
18
|
+
* <GraphQLDocument schema={schema}>
|
19
|
+
* {`query { user { name } }`}
|
20
|
+
* </GraphQLDocument>
|
21
|
+
* ```
|
22
|
+
*
|
23
|
+
* @see {@link GraphQLDocumentWithSchema} for MDX integration
|
24
|
+
* @see {@link GraphQLDocument} for the main React component
|
25
|
+
*/
|
26
|
+
export * from "./analysis.js";
|
27
|
+
export * from "./components/index.js";
|
28
|
+
export * from "./positioning-simple.js";
|
29
|
+
export * from "./schema-integration.js";
|
30
|
+
export * from "./types.js";
|
31
|
+
// Re-export key functions for convenience
|
32
|
+
export { analyze, analyzer, extractIdentifiers } from "./analysis.js";
|
33
|
+
export { GraphQLDocument } from "./components/GraphQLDocument.js";
|
34
|
+
export { createSimpleOverlay, createSimplePositionCalculator } from "./positioning-simple.js";
|
35
|
+
export { analyzeWithSchema, createPolenSchemaResolver } from "./schema-integration.js";
|
36
|
+
//# sourceMappingURL=graphql-document.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"graphql-document.js","sourceRoot":"","sources":["../../../src/lib/graphql-document/graphql-document.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,YAAY,CAAA;AAE1B,0CAA0C;AAC1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAkC,CAAA;AAClE,OAAO,EAAE,mBAAmB,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAA;AAC7F,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA"}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
/**
|
2
|
+
* State management for GraphQL document tooltips
|
3
|
+
*
|
4
|
+
* Handles hover delays, pinning, and multiple tooltip coordination
|
5
|
+
*/
|
6
|
+
export interface TooltipState {
|
7
|
+
/** Currently visible tooltip (via hover) */
|
8
|
+
hoveredId: string | null;
|
9
|
+
/** Set of pinned tooltip IDs */
|
10
|
+
pinnedIds: Set<string>;
|
11
|
+
/** ID pending show (waiting for delay) */
|
12
|
+
pendingShowId: string | null;
|
13
|
+
/** ID pending hide (waiting for grace period) */
|
14
|
+
pendingHideId: string | null;
|
15
|
+
}
|
16
|
+
export interface UseTooltipStateOptions {
|
17
|
+
/** Delay before showing tooltip on hover (ms) */
|
18
|
+
showDelay?: number;
|
19
|
+
/** Delay before hiding tooltip on mouse leave (ms) */
|
20
|
+
hideDelay?: number;
|
21
|
+
/** Whether to allow multiple pinned tooltips */
|
22
|
+
allowMultiplePins?: boolean;
|
23
|
+
}
|
24
|
+
export interface UseTooltipStateReturn {
|
25
|
+
/** Check if a tooltip should be visible */
|
26
|
+
isOpen: (id: string) => boolean;
|
27
|
+
/** Check if a tooltip is pinned */
|
28
|
+
isPinned: (id: string) => boolean;
|
29
|
+
/** Handle hover start */
|
30
|
+
onHoverStart: (id: string) => void;
|
31
|
+
/** Handle hover end */
|
32
|
+
onHoverEnd: (id: string) => void;
|
33
|
+
/** Handle click (toggle pin) */
|
34
|
+
onTogglePin: (id: string) => void;
|
35
|
+
/** Handle tooltip content hover (cancels hide) */
|
36
|
+
onTooltipHover: (id: string) => void;
|
37
|
+
/** Unpin a specific tooltip */
|
38
|
+
unpin: (id: string) => void;
|
39
|
+
/** Unpin all tooltips */
|
40
|
+
unpinAll: () => void;
|
41
|
+
}
|
42
|
+
export declare const useTooltipState: (options?: UseTooltipStateOptions) => UseTooltipStateReturn;
|
43
|
+
//# sourceMappingURL=use-tooltip-state.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"use-tooltip-state.d.ts","sourceRoot":"","sources":["../../../../src/lib/graphql-document/hooks/use-tooltip-state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,gCAAgC;IAChC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACtB,0CAA0C;IAC1C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,iDAAiD;IACjD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gDAAgD;IAChD,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAA;IAC/B,mCAAmC;IACnC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAA;IACjC,yBAAyB;IACzB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,uBAAuB;IACvB,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,gCAAgC;IAChC,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,kDAAkD;IAClD,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,+BAA+B;IAC/B,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3B,yBAAyB;IACzB,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB;AAED,eAAO,MAAM,eAAe,GAAI,UAAS,sBAA2B,KAAG,qBA+ItE,CAAA"}
|
@@ -0,0 +1,132 @@
|
|
1
|
+
/**
|
2
|
+
* State management for GraphQL document tooltips
|
3
|
+
*
|
4
|
+
* Handles hover delays, pinning, and multiple tooltip coordination
|
5
|
+
*/
|
6
|
+
import { React } from '#dep/react/index';
|
7
|
+
export const useTooltipState = (options = {}) => {
|
8
|
+
const { showDelay = 300, hideDelay = 200, allowMultiplePins = true, } = options;
|
9
|
+
const [hoveredId, setHoveredId] = React.useState(null);
|
10
|
+
const [pinnedIds, setPinnedIds] = React.useState(new Set());
|
11
|
+
const [pendingShowId, setPendingShowId] = React.useState(null);
|
12
|
+
const [pendingHideId, setPendingHideId] = React.useState(null);
|
13
|
+
// Timer refs
|
14
|
+
const showTimerRef = React.useRef(null);
|
15
|
+
const hideTimerRef = React.useRef(null);
|
16
|
+
// Clear any pending timers
|
17
|
+
const clearTimers = React.useCallback(() => {
|
18
|
+
if (showTimerRef.current) {
|
19
|
+
clearTimeout(showTimerRef.current);
|
20
|
+
showTimerRef.current = null;
|
21
|
+
}
|
22
|
+
if (hideTimerRef.current) {
|
23
|
+
clearTimeout(hideTimerRef.current);
|
24
|
+
hideTimerRef.current = null;
|
25
|
+
}
|
26
|
+
setPendingShowId(null);
|
27
|
+
setPendingHideId(null);
|
28
|
+
}, []);
|
29
|
+
// Check if tooltip should be visible
|
30
|
+
const isOpen = React.useCallback((id) => {
|
31
|
+
return hoveredId === id || pinnedIds.has(id);
|
32
|
+
}, [hoveredId, pinnedIds]);
|
33
|
+
// Check if tooltip is pinned
|
34
|
+
const isPinned = React.useCallback((id) => {
|
35
|
+
return pinnedIds.has(id);
|
36
|
+
}, [pinnedIds]);
|
37
|
+
// Handle hover start
|
38
|
+
const onHoverStart = React.useCallback((id) => {
|
39
|
+
// Don't show if already pinned
|
40
|
+
if (pinnedIds.has(id))
|
41
|
+
return;
|
42
|
+
// Cancel any pending hide for this ID
|
43
|
+
if (pendingHideId === id) {
|
44
|
+
clearTimeout(hideTimerRef.current);
|
45
|
+
hideTimerRef.current = null;
|
46
|
+
setPendingHideId(null);
|
47
|
+
return;
|
48
|
+
}
|
49
|
+
// Clear any other pending operations
|
50
|
+
clearTimers();
|
51
|
+
// Schedule show
|
52
|
+
setPendingShowId(id);
|
53
|
+
showTimerRef.current = setTimeout(() => {
|
54
|
+
setHoveredId(id);
|
55
|
+
setPendingShowId(null);
|
56
|
+
}, showDelay);
|
57
|
+
}, [pinnedIds, pendingHideId, clearTimers, showDelay]);
|
58
|
+
// Handle hover end
|
59
|
+
const onHoverEnd = React.useCallback((id) => {
|
60
|
+
// Don't hide if pinned
|
61
|
+
if (pinnedIds.has(id))
|
62
|
+
return;
|
63
|
+
// Cancel pending show if still waiting
|
64
|
+
if (pendingShowId === id) {
|
65
|
+
clearTimeout(showTimerRef.current);
|
66
|
+
showTimerRef.current = null;
|
67
|
+
setPendingShowId(null);
|
68
|
+
return;
|
69
|
+
}
|
70
|
+
// Only hide if currently showing this tooltip
|
71
|
+
if (hoveredId === id) {
|
72
|
+
setPendingHideId(id);
|
73
|
+
hideTimerRef.current = setTimeout(() => {
|
74
|
+
// First set hovered to null to trigger close animation
|
75
|
+
setHoveredId(null);
|
76
|
+
setPendingHideId(null);
|
77
|
+
}, hideDelay);
|
78
|
+
}
|
79
|
+
}, [pinnedIds, pendingShowId, hoveredId, hideDelay]);
|
80
|
+
// Handle tooltip content hover (cancels hide)
|
81
|
+
const onTooltipHover = React.useCallback((id) => {
|
82
|
+
if (pendingHideId === id) {
|
83
|
+
clearTimeout(hideTimerRef.current);
|
84
|
+
hideTimerRef.current = null;
|
85
|
+
setPendingHideId(null);
|
86
|
+
}
|
87
|
+
}, [pendingHideId]);
|
88
|
+
// Toggle pin state
|
89
|
+
const onTogglePin = React.useCallback((id) => {
|
90
|
+
clearTimers();
|
91
|
+
setPinnedIds((prev) => {
|
92
|
+
const next = new Set(prev);
|
93
|
+
if (next.has(id)) {
|
94
|
+
// Unpin
|
95
|
+
next.delete(id);
|
96
|
+
setHoveredId(null); // Also clear hover state
|
97
|
+
}
|
98
|
+
else {
|
99
|
+
// Pin
|
100
|
+
if (!allowMultiplePins) {
|
101
|
+
next.clear(); // Clear other pins
|
102
|
+
}
|
103
|
+
next.add(id);
|
104
|
+
setHoveredId(null); // Clear hover state since it's now pinned
|
105
|
+
}
|
106
|
+
return next;
|
107
|
+
});
|
108
|
+
}, [clearTimers, allowMultiplePins]);
|
109
|
+
// Unpin specific tooltip
|
110
|
+
const unpin = React.useCallback((id) => {
|
111
|
+
setPinnedIds((prev) => {
|
112
|
+
const next = new Set(prev);
|
113
|
+
next.delete(id);
|
114
|
+
return next;
|
115
|
+
});
|
116
|
+
}, []);
|
117
|
+
// Unpin all tooltips
|
118
|
+
const unpinAll = React.useCallback(() => {
|
119
|
+
setPinnedIds(new Set());
|
120
|
+
}, []);
|
121
|
+
return {
|
122
|
+
isOpen,
|
123
|
+
isPinned,
|
124
|
+
onHoverStart,
|
125
|
+
onHoverEnd,
|
126
|
+
onTogglePin,
|
127
|
+
onTooltipHover,
|
128
|
+
unpin,
|
129
|
+
unpinAll,
|
130
|
+
};
|
131
|
+
};
|
132
|
+
//# sourceMappingURL=use-tooltip-state.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"use-tooltip-state.js","sourceRoot":"","sources":["../../../../src/lib/graphql-document/hooks/use-tooltip-state.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,68 @@
|
|
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
|
+
import type { Identifier } from './types.ts';
|
8
|
+
/**
|
9
|
+
* DOM position for rendering overlays
|
10
|
+
*/
|
11
|
+
export interface DOMPosition {
|
12
|
+
/** Distance from top of container in pixels */
|
13
|
+
top: number;
|
14
|
+
/** Distance from left of container in pixels */
|
15
|
+
left: number;
|
16
|
+
/** Width of the identifier in pixels */
|
17
|
+
width: number;
|
18
|
+
/** Height of the identifier in pixels */
|
19
|
+
height: number;
|
20
|
+
}
|
21
|
+
/**
|
22
|
+
* Position calculation result
|
23
|
+
*/
|
24
|
+
export interface PositionResult {
|
25
|
+
/** The calculated DOM position */
|
26
|
+
position: DOMPosition;
|
27
|
+
/** The identifier this position is for */
|
28
|
+
identifier: Identifier;
|
29
|
+
}
|
30
|
+
/**
|
31
|
+
* Simplified position calculator for Shiki-rendered code
|
32
|
+
*
|
33
|
+
* This version uses a more straightforward approach:
|
34
|
+
* 1. Find the line element by line number
|
35
|
+
* 2. Search for the identifier text within that line
|
36
|
+
* 3. Create a span around the identifier for positioning
|
37
|
+
*
|
38
|
+
* This approach modifies the DOM but is more reliable for testing
|
39
|
+
* and works well with React's reconciliation.
|
40
|
+
*/
|
41
|
+
export declare class SimplePositionCalculator {
|
42
|
+
/**
|
43
|
+
* Prepare a code block for positioning by wrapping identifiers in spans
|
44
|
+
*/
|
45
|
+
prepareCodeBlock(containerElement: Element, identifiers: Identifier[]): void;
|
46
|
+
/**
|
47
|
+
* Get positions of all wrapped identifiers
|
48
|
+
*/
|
49
|
+
getIdentifierPositions(containerElement: Element, relativeToElement?: Element): Map<string, PositionResult>;
|
50
|
+
/**
|
51
|
+
* Wrap an identifier in a span for positioning
|
52
|
+
* Returns true if the identifier was successfully wrapped
|
53
|
+
*/
|
54
|
+
private wrapIdentifier;
|
55
|
+
}
|
56
|
+
/**
|
57
|
+
* Create invisible overlay for a position
|
58
|
+
*/
|
59
|
+
export declare const createSimpleOverlay: (position: DOMPosition, identifier: Identifier, options?: {
|
60
|
+
onClick?: (identifier: Identifier) => void;
|
61
|
+
onHover?: (identifier: Identifier, event: MouseEvent) => void;
|
62
|
+
className?: string;
|
63
|
+
}) => HTMLElement;
|
64
|
+
/**
|
65
|
+
* Factory function for position calculator
|
66
|
+
*/
|
67
|
+
export declare const createSimplePositionCalculator: () => SimplePositionCalculator;
|
68
|
+
//# sourceMappingURL=positioning-simple.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"positioning-simple.d.ts","sourceRoot":"","sources":["../../../src/lib/graphql-document/positioning-simple.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,+CAA+C;IAC/C,GAAG,EAAE,MAAM,CAAA;IACX,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAA;IACZ,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAA;IACb,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,kCAAkC;IAClC,QAAQ,EAAE,WAAW,CAAA;IACrB,0CAA0C;IAC1C,UAAU,EAAE,UAAU,CAAA;CACvB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,wBAAwB;IACnC;;OAEG;IACH,gBAAgB,CACd,gBAAgB,EAAE,OAAO,EACzB,WAAW,EAAE,UAAU,EAAE,GACxB,IAAI;IAmBP;;OAEG;IACH,sBAAsB,CACpB,gBAAgB,EAAE,OAAO,EACzB,iBAAiB,CAAC,EAAE,OAAO,GAC1B,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IA4C9B;;;OAGG;IACH,OAAO,CAAC,cAAc;CAyFvB;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC9B,UAAU,WAAW,EACrB,YAAY,UAAU,EACtB,UAAU;IACR,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAA;IAC1C,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,KACA,WAqCF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,8BAA8B,QAAO,wBAEjD,CAAA"}
|