polen 0.10.0-next.21 → 0.10.0-next.22

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 (82) hide show
  1. package/build/api/config/configurator.d.ts +62 -11
  2. package/build/api/config/configurator.d.ts.map +1 -1
  3. package/build/api/config/configurator.js +9 -0
  4. package/build/api/config/configurator.js.map +1 -1
  5. package/build/api/vite/plugins/core.d.ts.map +1 -1
  6. package/build/api/vite/plugins/core.js +1 -0
  7. package/build/api/vite/plugins/core.js.map +1 -1
  8. package/build/project-data.d.ts +1 -0
  9. package/build/project-data.d.ts.map +1 -1
  10. package/build/sandbox.js +40 -17
  11. package/build/sandbox.js.map +1 -1
  12. package/build/template/components/CodeBlock.d.ts.map +1 -1
  13. package/build/template/components/CodeBlock.js +3 -5
  14. package/build/template/components/CodeBlock.js.map +1 -1
  15. package/build/template/components/Field.js +1 -1
  16. package/build/template/components/Field.js.map +1 -1
  17. package/build/template/components/GraphQLInteractive/GraphQLInteractive.d.ts +31 -0
  18. package/build/template/components/GraphQLInteractive/GraphQLInteractive.d.ts.map +1 -0
  19. package/build/template/components/GraphQLInteractive/GraphQLInteractive.js +275 -0
  20. package/build/template/components/GraphQLInteractive/GraphQLInteractive.js.map +1 -0
  21. package/build/template/components/GraphQLInteractive/components/GraphQLErrorBoundary.d.ts +39 -0
  22. package/build/template/components/GraphQLInteractive/components/GraphQLErrorBoundary.d.ts.map +1 -0
  23. package/build/template/components/GraphQLInteractive/components/GraphQLErrorBoundary.js +51 -0
  24. package/build/template/components/GraphQLInteractive/components/GraphQLErrorBoundary.js.map +1 -0
  25. package/build/template/components/GraphQLInteractive/components/GraphQLTokenPopover.d.ts +33 -0
  26. package/build/template/components/GraphQLInteractive/components/GraphQLTokenPopover.d.ts.map +1 -0
  27. package/build/template/components/GraphQLInteractive/components/GraphQLTokenPopover.js +242 -0
  28. package/build/template/components/GraphQLInteractive/components/GraphQLTokenPopover.js.map +1 -0
  29. package/build/template/components/GraphQLInteractive/hooks/use-popover-state.d.ts +45 -0
  30. package/build/template/components/GraphQLInteractive/hooks/use-popover-state.d.ts.map +1 -0
  31. package/build/template/components/GraphQLInteractive/hooks/use-popover-state.js +176 -0
  32. package/build/template/components/GraphQLInteractive/hooks/use-popover-state.js.map +1 -0
  33. package/build/template/components/GraphQLInteractive/index.d.ts +2 -0
  34. package/build/template/components/GraphQLInteractive/index.d.ts.map +1 -0
  35. package/build/template/components/GraphQLInteractive/index.js +2 -0
  36. package/build/template/components/GraphQLInteractive/index.js.map +1 -0
  37. package/build/template/components/GraphQLInteractive/lib/graphql-node-types.d.ts +52 -0
  38. package/build/template/components/GraphQLInteractive/lib/graphql-node-types.d.ts.map +1 -0
  39. package/build/template/components/GraphQLInteractive/lib/graphql-node-types.js +34 -0
  40. package/build/template/components/GraphQLInteractive/lib/graphql-node-types.js.map +1 -0
  41. package/build/template/components/GraphQLInteractive/lib/parser.d.ts +71 -0
  42. package/build/template/components/GraphQLInteractive/lib/parser.d.ts.map +1 -0
  43. package/build/template/components/GraphQLInteractive/lib/parser.js +836 -0
  44. package/build/template/components/GraphQLInteractive/lib/parser.js.map +1 -0
  45. package/build/template/components/GraphQLInteractive/lib/semantic-nodes.d.ts +98 -0
  46. package/build/template/components/GraphQLInteractive/lib/semantic-nodes.d.ts.map +1 -0
  47. package/build/template/components/GraphQLInteractive/lib/semantic-nodes.js +31 -0
  48. package/build/template/components/GraphQLInteractive/lib/semantic-nodes.js.map +1 -0
  49. package/build/template/components/content/$$.d.ts +0 -1
  50. package/build/template/components/content/$$.d.ts.map +1 -1
  51. package/build/template/components/content/$$.js +0 -1
  52. package/build/template/components/content/$$.js.map +1 -1
  53. package/package.json +5 -21
  54. package/src/api/config/configurator.ts +72 -11
  55. package/src/api/vite/plugins/core.ts +1 -0
  56. package/src/lib/kit-temp.test.ts +9 -9
  57. package/src/project-data.ts +1 -0
  58. package/src/sandbox.ts +40 -17
  59. package/src/template/components/CodeBlock.tsx +6 -9
  60. package/src/template/components/Field.tsx +1 -1
  61. package/src/template/components/GraphQLInteractive/GraphQLInteractive.tsx +464 -0
  62. package/src/template/components/GraphQLInteractive/components/GraphQLErrorBoundary.tsx +96 -0
  63. package/src/template/components/GraphQLInteractive/components/GraphQLTokenPopover.tsx +492 -0
  64. package/src/template/components/GraphQLInteractive/hooks/use-popover-state.ts +244 -0
  65. package/src/template/components/GraphQLInteractive/index.ts +1 -0
  66. package/src/template/components/GraphQLInteractive/lib/graphql-node-types.ts +217 -0
  67. package/src/template/components/GraphQLInteractive/lib/parser.ts +1075 -0
  68. package/src/template/components/GraphQLInteractive/lib/semantic-nodes.ts +154 -0
  69. package/src/template/components/GraphQLInteractive/tests/parser-comment.test.ts +33 -0
  70. package/src/template/components/GraphQLInteractive/tests/parser-error-hint.test.ts +102 -0
  71. package/src/template/components/GraphQLInteractive/tests/parser.test.ts +131 -0
  72. package/src/template/components/content/$$.ts +0 -1
  73. package/build/template/components/content/GraphQLDocumentWithSchema.d.ts +0 -8
  74. package/build/template/components/content/GraphQLDocumentWithSchema.d.ts.map +0 -1
  75. package/build/template/components/content/GraphQLDocumentWithSchema.js +0 -13
  76. package/build/template/components/content/GraphQLDocumentWithSchema.js.map +0 -1
  77. package/build/template/components/content/GraphQLDocumentWrapper.d.ts +0 -7
  78. package/build/template/components/content/GraphQLDocumentWrapper.d.ts.map +0 -1
  79. package/build/template/components/content/GraphQLDocumentWrapper.js +0 -48
  80. package/build/template/components/content/GraphQLDocumentWrapper.js.map +0 -1
  81. package/src/template/components/content/GraphQLDocumentWithSchema.tsx +0 -13
  82. package/src/template/components/content/GraphQLDocumentWrapper.tsx +0 -72
@@ -0,0 +1,242 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Cross1Icon } from '@radix-ui/react-icons';
3
+ import { Button, Popover } from '@radix-ui/themes';
4
+ import { isArgument, isFragment, isInputField, isInvalidField, isOperation, isOutputField, } from '../lib/semantic-nodes.js';
5
+ /**
6
+ * Get rich content for a token popover
7
+ */
8
+ function getPopoverContent(token) {
9
+ const semantic = token.semantic;
10
+ if (!semantic)
11
+ return null;
12
+ if (isInvalidField(semantic)) {
13
+ // Get available fields from the parent type
14
+ const availableFields = Object.keys(semantic.parentType.getFields()).sort();
15
+ // TODO: In the future, check other schema versions to see if the field existed previously
16
+ // This would help identify renamed or removed fields across schema evolution
17
+ return {
18
+ title: `Field "${semantic.fieldName}" does not exist`,
19
+ description: `Type ${semantic.parentType.name} does not have a field named "${semantic.fieldName}".`,
20
+ typeName: semantic.parentType.name,
21
+ typeUrl: `/reference/${semantic.parentType.name}`,
22
+ fieldName: semantic.fieldName,
23
+ invalid: true,
24
+ availableFields,
25
+ };
26
+ }
27
+ if (isOutputField(semantic)) {
28
+ const fieldType = semantic.fieldDef.type.toString();
29
+ return {
30
+ title: semantic.fieldDef.name,
31
+ path: [
32
+ { name: semantic.parentType.name, url: `/reference/${semantic.parentType.name}` },
33
+ { name: semantic.fieldDef.name, url: `/reference/${semantic.parentType.name}#${semantic.fieldDef.name}` },
34
+ ],
35
+ description: semantic.fieldDef.description || undefined,
36
+ type: `${fieldType}`,
37
+ };
38
+ }
39
+ if (isInputField(semantic)) {
40
+ const fieldType = semantic.fieldDef.type.toString();
41
+ return {
42
+ title: semantic.fieldDef.name,
43
+ path: [
44
+ { name: semantic.parentType.name, url: `/reference/${semantic.parentType.name}` },
45
+ { name: semantic.fieldDef.name, url: `/reference/${semantic.parentType.name}#${semantic.fieldDef.name}` },
46
+ ],
47
+ description: semantic.fieldDef.description || undefined,
48
+ type: `${fieldType}`,
49
+ };
50
+ }
51
+ if (isArgument(semantic)) {
52
+ const argType = semantic.argumentDef.type.toString();
53
+ return {
54
+ title: semantic.argumentDef.name,
55
+ path: [
56
+ { name: semantic.parentType.name, url: `/reference/${semantic.parentType.name}` },
57
+ { name: semantic.parentField.name, url: `/reference/${semantic.parentType.name}#${semantic.parentField.name}` },
58
+ {
59
+ name: semantic.argumentDef.name,
60
+ url: `/reference/${semantic.parentType.name}#${semantic.parentField.name}__${semantic.argumentDef.name}`,
61
+ },
62
+ ],
63
+ description: semantic.argumentDef.description || undefined,
64
+ type: `${argType}`,
65
+ };
66
+ }
67
+ if (isOperation(semantic)) {
68
+ return {
69
+ title: semantic.name || `${semantic.type} operation`,
70
+ path: [
71
+ { name: semantic.name || semantic.type, url: null },
72
+ ],
73
+ description: 'GraphQL Operation',
74
+ type: semantic.type.charAt(0).toUpperCase() + semantic.type.slice(1),
75
+ };
76
+ }
77
+ if (isFragment(semantic)) {
78
+ return {
79
+ title: semantic.name,
80
+ path: [
81
+ { name: 'fragment', url: null },
82
+ { name: semantic.name, url: null },
83
+ ],
84
+ description: 'GraphQL Fragment',
85
+ type: `Fragment on ${semantic.onType?.name || 'Unknown'}`,
86
+ };
87
+ }
88
+ if ('name' in semantic && semantic.name) {
89
+ // Type reference
90
+ return {
91
+ title: semantic.name,
92
+ path: [
93
+ { name: semantic.name, url: `/reference/${semantic.name}` },
94
+ ],
95
+ description: ('description' in semantic && typeof semantic.description === 'string')
96
+ ? semantic.description
97
+ : undefined,
98
+ type: 'GraphQL Type',
99
+ };
100
+ }
101
+ return null;
102
+ }
103
+ export const GraphQLTokenPopover = ({ token, children, open, pinned, onTriggerHover, onTriggerLeave, onTriggerClick, onContentHover, onContentLeave, onClose, }) => {
104
+ const content = getPopoverContent(token);
105
+ // If no content, just render children without popover
106
+ if (!content) {
107
+ return _jsx(_Fragment, { children: children });
108
+ }
109
+ const popoverContent = (_jsxs("div", { style: {
110
+ padding: 'var(--space-1)',
111
+ minWidth: '200px',
112
+ maxWidth: '400px',
113
+ position: 'relative',
114
+ }, onMouseEnter: onContentHover, onMouseLeave: onContentLeave, children: [_jsxs("div", { style: {
115
+ display: 'flex',
116
+ justifyContent: 'space-between',
117
+ alignItems: 'flex-start',
118
+ marginBottom: '6px',
119
+ }, children: [_jsxs("div", { style: { flex: 1 }, children: [content.path && !content.invalid && (_jsx("div", { style: {
120
+ fontSize: 'var(--font-size-2)',
121
+ color: 'var(--gray-12)',
122
+ marginBottom: 'var(--space-1)',
123
+ }, children: content.path.map((segment, index) => (_jsxs("span", { children: [index > 0 && _jsx("span", { style: { color: 'var(--gray-11)', margin: '0 var(--space-1)' }, children: "." }), segment.url
124
+ ? (_jsx("a", { href: segment.url, style: {
125
+ color: '#0969da',
126
+ textDecoration: 'none',
127
+ cursor: 'pointer',
128
+ }, onMouseEnter: (e) => {
129
+ e.currentTarget.style.textDecoration = 'underline';
130
+ }, onMouseLeave: (e) => {
131
+ e.currentTarget.style.textDecoration = 'none';
132
+ }, onClick: (e) => {
133
+ e.preventDefault();
134
+ if (segment.url) {
135
+ window.location.href = segment.url;
136
+ }
137
+ }, children: segment.name }))
138
+ : (_jsx("span", { style: { color: '#24292e' }, children: segment.name }))] }, index))) })), content.type && !content.invalid && (_jsx("div", { style: {
139
+ fontSize: '12px',
140
+ color: '#6a737d',
141
+ fontFamily: 'monospace',
142
+ opacity: 0.8,
143
+ }, children: content.type })), content.invalid && (_jsxs("div", { style: {
144
+ fontSize: '14px',
145
+ color: '#d73a49',
146
+ marginBottom: '4px',
147
+ }, children: [_jsx("span", { style: { fontWeight: 'bold' }, children: "Error:" }), " Type", ' ', _jsx("a", { href: content.typeUrl, style: {
148
+ color: '#0969da',
149
+ textDecoration: 'none',
150
+ cursor: 'pointer',
151
+ }, onMouseEnter: (e) => {
152
+ e.currentTarget.style.textDecoration = 'underline';
153
+ }, onMouseLeave: (e) => {
154
+ e.currentTarget.style.textDecoration = 'none';
155
+ }, onClick: (e) => {
156
+ e.preventDefault();
157
+ if (content.typeUrl) {
158
+ window.location.href = content.typeUrl;
159
+ }
160
+ }, children: content.typeName }), ' ', "does not have a field named \"", content.fieldName, "\"."] }))] }), pinned && !content.invalid && (_jsx(Button, { variant: 'ghost', size: '1', onClick: onClose, style: {
161
+ marginLeft: '8px',
162
+ padding: '2px',
163
+ minWidth: 'auto',
164
+ height: 'auto',
165
+ }, children: _jsx(Cross1Icon, { width: '12', height: '12' }) }))] }), content.description && !content.invalid && (_jsx("div", { style: {
166
+ fontSize: '13px',
167
+ color: '#24292e',
168
+ lineHeight: '1.4',
169
+ opacity: 0.9,
170
+ }, children: content.description })), content.invalid && content.availableFields && (_jsxs("div", { style: {
171
+ marginTop: '8px',
172
+ backgroundColor: '#f6f8fa',
173
+ border: '1px solid #e1e4e8',
174
+ borderRadius: '4px',
175
+ fontSize: '12px',
176
+ fontFamily: 'monospace',
177
+ lineHeight: '1.5',
178
+ overflow: 'hidden',
179
+ }, children: [_jsxs("div", { style: { padding: '10px 10px 0 10px' }, children: [_jsx("span", { style: { color: '#d73a49' }, children: "type" }), ' ', _jsx("a", { href: content.typeUrl, style: {
180
+ color: '#005cc5',
181
+ fontWeight: 500,
182
+ textDecoration: 'none',
183
+ }, onMouseEnter: (e) => {
184
+ e.currentTarget.style.textDecoration = 'underline';
185
+ }, onMouseLeave: (e) => {
186
+ e.currentTarget.style.textDecoration = 'none';
187
+ }, children: content.typeName }), ' ', _jsx("span", { style: { color: '#24292e' }, children: '{' })] }), _jsx("div", { style: {
188
+ maxHeight: '200px',
189
+ overflowY: 'auto',
190
+ padding: '0 10px',
191
+ marginRight: '2px', // Account for scrollbar
192
+ }, children: (() => {
193
+ // Insert the invalid field in alphabetical position
194
+ const invalidFieldName = content.fieldName || '';
195
+ const allFields = [...content.availableFields];
196
+ const insertIndex = allFields.findIndex(f => f.localeCompare(invalidFieldName) > 0);
197
+ // Create the full list with invalid field inserted
198
+ const fieldsWithInvalid = insertIndex === -1
199
+ ? [...allFields, invalidFieldName]
200
+ : [...allFields.slice(0, insertIndex), invalidFieldName, ...allFields.slice(insertIndex)];
201
+ return fieldsWithInvalid.map((field) => {
202
+ const isInvalidField = field === invalidFieldName;
203
+ return (_jsxs("div", { style: {
204
+ paddingLeft: isInvalidField ? '26px' : '16px',
205
+ color: isInvalidField ? '#d73a49' : '#6f42c1',
206
+ display: 'flex',
207
+ alignItems: 'center',
208
+ backgroundColor: isInvalidField ? 'var(--red-a2)' : 'transparent',
209
+ marginLeft: isInvalidField ? '-10px' : '0',
210
+ marginRight: isInvalidField ? '-10px' : '0',
211
+ paddingTop: isInvalidField ? '2px' : '0',
212
+ paddingBottom: isInvalidField ? '2px' : '0',
213
+ }, children: [isInvalidField
214
+ ? (_jsx("span", { style: { textDecoration: 'line-through' }, children: field }))
215
+ : (_jsx("a", { href: `/reference/${content.typeName}#${field}`, style: {
216
+ color: '#6f42c1',
217
+ textDecoration: 'none',
218
+ }, onMouseEnter: (e) => {
219
+ e.currentTarget.style.textDecoration = 'underline';
220
+ }, onMouseLeave: (e) => {
221
+ e.currentTarget.style.textDecoration = 'none';
222
+ }, children: field })), isInvalidField && (_jsx("span", { style: {
223
+ marginLeft: '12px',
224
+ color: '#d73a49',
225
+ fontSize: '11px',
226
+ display: 'flex',
227
+ alignItems: 'center',
228
+ gap: '4px',
229
+ }, children: "\u2190 No such field" }))] }, field));
230
+ });
231
+ })() }), _jsx("div", { style: { padding: '0 10px 10px 10px', color: '#24292e' }, children: '}' })] }))] }));
232
+ return (_jsxs(Popover.Root, { open: open, children: [_jsx(Popover.Trigger, { children: _jsx("span", { style: { cursor: token.polen.isInteractive() ? 'pointer' : 'default' }, onMouseEnter: onTriggerHover, onMouseLeave: onTriggerLeave, onClick: onTriggerClick, children: children }) }), _jsx(Popover.Content, { side: 'top', align: 'start', sideOffset: 4, style: {
233
+ padding: 'var(--space-2)',
234
+ background: content.invalid ? 'var(--red-1)' : 'var(--color-background)',
235
+ border: content.invalid ? '2px solid var(--red-7)' : '1px solid var(--gray-6)',
236
+ borderRadius: 'var(--radius-1)',
237
+ boxShadow: 'none',
238
+ zIndex: 1000,
239
+ maxWidth: '450px',
240
+ }, children: popoverContent })] }));
241
+ };
242
+ //# sourceMappingURL=GraphQLTokenPopover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphQLTokenPopover.js","sourceRoot":"","sources":["../../../../../src/template/components/GraphQLInteractive/components/GraphQLTokenPopover.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * State management for GraphQL token popovers
3
+ *
4
+ * Handles hover delays, pinning, and multiple popover coordination
5
+ */
6
+ export interface PopoverState {
7
+ /** Currently visible popover (via hover) */
8
+ hoveredId: string | null;
9
+ /** Set of pinned popover 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 UsePopoverStateOptions {
17
+ /** Delay before showing popover on hover (ms) */
18
+ showDelay?: number;
19
+ /** Delay before hiding popover on mouse leave (ms) */
20
+ hideDelay?: number;
21
+ /** Whether to allow multiple pinned popovers */
22
+ allowMultiplePins?: boolean;
23
+ }
24
+ export interface UsePopoverStateReturn {
25
+ /** Check if a popover should be visible */
26
+ isOpen: (id: string) => boolean;
27
+ /** Check if a popover 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 popover content hover (cancels hide) */
36
+ onPopoverHover: (id: string) => void;
37
+ /** Handle popover content leave (starts hide timer) */
38
+ onPopoverLeave: (id: string) => void;
39
+ /** Unpin a specific popover */
40
+ unpin: (id: string) => void;
41
+ /** Unpin all popovers */
42
+ unpinAll: () => void;
43
+ }
44
+ export declare const usePopoverState: (options?: UsePopoverStateOptions) => UsePopoverStateReturn;
45
+ //# sourceMappingURL=use-popover-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-popover-state.d.ts","sourceRoot":"","sources":["../../../../../src/template/components/GraphQLInteractive/hooks/use-popover-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,uDAAuD;IACvD,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,qBAkMtE,CAAA"}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * State management for GraphQL token popovers
3
+ *
4
+ * Handles hover delays, pinning, and multiple popover coordination
5
+ */
6
+ import { React as ReactHooks } from '#dep/react/index';
7
+ export const usePopoverState = (options = {}) => {
8
+ const { showDelay = 300, hideDelay = 200, allowMultiplePins = true, } = options;
9
+ const [hoveredId, setHoveredId] = ReactHooks.useState(null);
10
+ const [pinnedIds, setPinnedIds] = ReactHooks.useState(new Set());
11
+ const [pendingShowId, setPendingShowId] = ReactHooks.useState(null);
12
+ const [pendingHideId, setPendingHideId] = ReactHooks.useState(null);
13
+ // Timer refs
14
+ const showTimerRef = ReactHooks.useRef(null);
15
+ const hideTimerRef = ReactHooks.useRef(null);
16
+ // Clear any pending timers
17
+ const clearTimers = ReactHooks.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 popover should be visible
30
+ const isOpen = ReactHooks.useCallback((id) => {
31
+ return hoveredId === id || pinnedIds.has(id);
32
+ }, [hoveredId, pinnedIds]);
33
+ // Check if popover is pinned
34
+ const isPinned = ReactHooks.useCallback((id) => {
35
+ return pinnedIds.has(id);
36
+ }, [pinnedIds]);
37
+ // Handle hover start
38
+ const onHoverStart = ReactHooks.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 existing timers
50
+ clearTimers();
51
+ // Set pending show
52
+ setPendingShowId(id);
53
+ // Start show timer
54
+ showTimerRef.current = setTimeout(() => {
55
+ setHoveredId(id);
56
+ setPendingShowId(null);
57
+ showTimerRef.current = null;
58
+ }, showDelay);
59
+ }, [pinnedIds, pendingHideId, clearTimers, showDelay]);
60
+ // Handle hover end
61
+ const onHoverEnd = ReactHooks.useCallback((id) => {
62
+ // Don't hide if pinned
63
+ if (pinnedIds.has(id))
64
+ return;
65
+ // Cancel any pending show
66
+ if (pendingShowId === id) {
67
+ clearTimeout(showTimerRef.current);
68
+ showTimerRef.current = null;
69
+ setPendingShowId(null);
70
+ return;
71
+ }
72
+ // Only hide if currently hovered
73
+ if (hoveredId === id) {
74
+ setPendingHideId(id);
75
+ hideTimerRef.current = setTimeout(() => {
76
+ setHoveredId(null);
77
+ setPendingHideId(null);
78
+ hideTimerRef.current = null;
79
+ }, hideDelay);
80
+ }
81
+ }, [pinnedIds, pendingShowId, hoveredId, hideDelay]);
82
+ // Handle popover content hover (cancels hide)
83
+ const onPopoverHover = ReactHooks.useCallback((id) => {
84
+ if (pendingHideId === id) {
85
+ clearTimeout(hideTimerRef.current);
86
+ hideTimerRef.current = null;
87
+ setPendingHideId(null);
88
+ }
89
+ }, [pendingHideId]);
90
+ // Handle popover content leave (starts hide timer)
91
+ const onPopoverLeave = ReactHooks.useCallback((id) => {
92
+ // Don't hide if pinned
93
+ if (pinnedIds.has(id))
94
+ return;
95
+ // Only hide if currently hovered
96
+ if (hoveredId === id) {
97
+ setPendingHideId(id);
98
+ hideTimerRef.current = setTimeout(() => {
99
+ setHoveredId(null);
100
+ setPendingHideId(null);
101
+ hideTimerRef.current = null;
102
+ }, hideDelay);
103
+ }
104
+ }, [pinnedIds, hoveredId, hideDelay]);
105
+ // Toggle pin state
106
+ const onTogglePin = ReactHooks.useCallback((id) => {
107
+ setPinnedIds(prev => {
108
+ const next = new Set(prev);
109
+ if (next.has(id)) {
110
+ // Unpin
111
+ next.delete(id);
112
+ }
113
+ else {
114
+ // Pin
115
+ if (!allowMultiplePins) {
116
+ // Clear other pins if multiple not allowed
117
+ next.clear();
118
+ }
119
+ next.add(id);
120
+ // Clear any hover state for this ID
121
+ if (hoveredId === id) {
122
+ setHoveredId(null);
123
+ }
124
+ // Clear any pending operations
125
+ if (pendingShowId === id) {
126
+ clearTimeout(showTimerRef.current);
127
+ showTimerRef.current = null;
128
+ setPendingShowId(null);
129
+ }
130
+ if (pendingHideId === id) {
131
+ clearTimeout(hideTimerRef.current);
132
+ hideTimerRef.current = null;
133
+ setPendingHideId(null);
134
+ }
135
+ }
136
+ return next;
137
+ });
138
+ }, [allowMultiplePins, hoveredId, pendingShowId, pendingHideId]);
139
+ // Unpin specific popover
140
+ const unpin = ReactHooks.useCallback((id) => {
141
+ setPinnedIds(prev => {
142
+ const next = new Set(prev);
143
+ next.delete(id);
144
+ return next;
145
+ });
146
+ }, []);
147
+ // Unpin all popovers
148
+ const unpinAll = ReactHooks.useCallback(() => {
149
+ setPinnedIds(new Set());
150
+ }, []);
151
+ // Cleanup timers on unmount and when dependencies change
152
+ ReactHooks.useEffect(() => {
153
+ return () => {
154
+ if (showTimerRef.current)
155
+ clearTimeout(showTimerRef.current);
156
+ if (hideTimerRef.current)
157
+ clearTimeout(hideTimerRef.current);
158
+ };
159
+ }, []);
160
+ // Clear timers when delay options change to prevent stale timers
161
+ ReactHooks.useEffect(() => {
162
+ clearTimers();
163
+ }, [showDelay, hideDelay, clearTimers]);
164
+ return {
165
+ isOpen,
166
+ isPinned,
167
+ onHoverStart,
168
+ onHoverEnd,
169
+ onTogglePin,
170
+ onPopoverHover,
171
+ onPopoverLeave,
172
+ unpin,
173
+ unpinAll,
174
+ };
175
+ };
176
+ //# sourceMappingURL=use-popover-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-popover-state.js","sourceRoot":"","sources":["../../../../../src/template/components/GraphQLInteractive/hooks/use-popover-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { GraphQLInteractive } from './GraphQLInteractive.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/template/components/GraphQLInteractive/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { GraphQLInteractive } from './GraphQLInteractive.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/template/components/GraphQLInteractive/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Tree-sitter GraphQL Grammar Node Types
3
+ *
4
+ * This file defines all possible node types from the tree-sitter-graphql grammar.
5
+ * These types are used by the tree-sitter parser when parsing GraphQL documents.
6
+ *
7
+ * Source: https://github.com/bkegley/tree-sitter-graphql
8
+ *
9
+ * Having these as a TypeScript union type enables:
10
+ * - Type-safe node.type checking
11
+ * - IntelliSense/autocomplete in IDEs
12
+ * - Compile-time verification of node type strings
13
+ * - Better code maintainability and refactoring
14
+ */
15
+ /**
16
+ * All possible node types that can be returned by tree-sitter-graphql
17
+ * when parsing GraphQL documents.
18
+ */
19
+ export type TreeSitterGraphQLNodeType = 'document' | 'definition' | 'executable_definition' | 'type_system_definition' | 'type_system_extension' | 'source_file' | 'operation_definition' | 'selection_set' | 'selection' | 'field' | 'alias' | 'fragment_definition' | 'fragment_spread' | 'inline_fragment' | 'fragment_name' | 'type_condition' | 'arguments' | 'argument' | 'variable' | 'variable_definition' | 'variable_definitions' | 'default_value' | 'type' | 'named_type' | 'list_type' | 'non_null_type' | 'type_definition' | 'scalar_type_definition' | 'object_type_definition' | 'interface_type_definition' | 'union_type_definition' | 'enum_type_definition' | 'input_object_type_definition' | 'type_extension' | 'scalar_type_extension' | 'object_type_extension' | 'interface_type_extension' | 'union_type_extension' | 'enum_type_extension' | 'input_object_type_extension' | 'schema_definition' | 'schema_extension' | 'root_operation_type_definition' | 'fields_definition' | 'field_definition' | 'arguments_definition' | 'input_value_definition' | 'input_fields_definition' | 'directives' | 'directive' | 'directive_definition' | 'directive_locations' | 'directive_location' | 'enum_values_definition' | 'enum_value_definition' | 'enum_value' | 'implements_interfaces' | 'union_member_types' | 'description' | 'value' | 'string_value' | 'int_value' | 'float_value' | 'boolean_value' | 'null_value' | 'list_value' | 'object_value' | 'object_field' | 'name' | 'comment' | 'comma' | '{' | '}' | '(' | ')' | '[' | ']' | ':' | '=' | ',' | '!' | '|' | '&' | '@' | '...' | '$' | 'query' | 'mutation' | 'subscription' | 'fragment' | 'on' | 'type' | 'interface' | 'enum' | 'scalar' | 'union' | 'input' | 'schema' | 'directive' | 'implements' | 'extend' | 'true' | 'false' | 'null' | 'error_hint' | 'whitespace';
20
+ /**
21
+ * Subset of node types that are interactive in Polen's GraphQL viewer
22
+ */
23
+ export type InteractiveNodeParentType = 'named_type' | 'field';
24
+ /**
25
+ * Subset of node types that are non-interactive user-defined names
26
+ */
27
+ export type NonInteractiveNodeParentType = 'operation_definition' | 'fragment_definition' | 'variable_definition' | 'argument';
28
+ /**
29
+ * Node types that represent keywords in GraphQL
30
+ */
31
+ export type KeywordNodeType = 'query' | 'mutation' | 'subscription' | 'fragment' | 'on';
32
+ /**
33
+ * Node types that represent literal values
34
+ */
35
+ export type LiteralNodeType = 'string_value' | 'int_value' | 'float_value' | 'boolean_value' | 'null_value' | 'enum_value';
36
+ /**
37
+ * Node types that represent punctuation
38
+ */
39
+ export type PunctuationNodeType = '{' | '}' | '(' | ')' | '[' | ']' | ':' | '=' | ',' | '!' | '|' | '&' | '@' | '...' | '$';
40
+ /**
41
+ * Helper function to check if a node type is a keyword
42
+ */
43
+ export declare function isKeywordNodeType(type: string): type is KeywordNodeType;
44
+ /**
45
+ * Helper function to check if a node type is a literal
46
+ */
47
+ export declare function isLiteralNodeType(type: string): type is LiteralNodeType;
48
+ /**
49
+ * Helper function to check if a node type is punctuation
50
+ */
51
+ export declare function isPunctuationNodeType(type: string): type is PunctuationNodeType;
52
+ //# sourceMappingURL=graphql-node-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-node-types.d.ts","sourceRoot":"","sources":["../../../../../src/template/components/GraphQLInteractive/lib/graphql-node-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAEjC,UAAU,GACV,YAAY,GACZ,uBAAuB,GACvB,wBAAwB,GACxB,uBAAuB,GACvB,aAAa,GAEb,sBAAsB,GACtB,eAAe,GACf,WAAW,GACX,OAAO,GACP,OAAO,GAEP,qBAAqB,GACrB,iBAAiB,GACjB,iBAAiB,GACjB,eAAe,GACf,gBAAgB,GAEhB,WAAW,GACX,UAAU,GACV,UAAU,GACV,qBAAqB,GACrB,sBAAsB,GACtB,eAAe,GAEf,MAAM,GACN,YAAY,GACZ,WAAW,GACX,eAAe,GAEf,iBAAiB,GACjB,wBAAwB,GACxB,wBAAwB,GACxB,2BAA2B,GAC3B,uBAAuB,GACvB,sBAAsB,GACtB,8BAA8B,GAE9B,gBAAgB,GAChB,uBAAuB,GACvB,uBAAuB,GACvB,0BAA0B,GAC1B,sBAAsB,GACtB,qBAAqB,GACrB,6BAA6B,GAE7B,mBAAmB,GACnB,kBAAkB,GAClB,gCAAgC,GAEhC,mBAAmB,GACnB,kBAAkB,GAClB,sBAAsB,GACtB,wBAAwB,GACxB,yBAAyB,GAEzB,YAAY,GACZ,WAAW,GACX,sBAAsB,GACtB,qBAAqB,GACrB,oBAAoB,GAEpB,wBAAwB,GACxB,uBAAuB,GACvB,YAAY,GAEZ,uBAAuB,GACvB,oBAAoB,GACpB,aAAa,GAEb,OAAO,GACP,cAAc,GACd,WAAW,GACX,aAAa,GACb,eAAe,GACf,YAAY,GACZ,YAAY,GACZ,cAAc,GACd,cAAc,GAEd,MAAM,GACN,SAAS,GACT,OAAO,GAEP,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,KAAK,GACL,GAAG,GAEH,OAAO,GACP,UAAU,GACV,cAAc,GACd,UAAU,GACV,IAAI,GACJ,MAAM,GACN,WAAW,GACX,MAAM,GACN,QAAQ,GACR,OAAO,GACP,OAAO,GACP,QAAQ,GACR,WAAW,GACX,YAAY,GACZ,QAAQ,GACR,MAAM,GACN,OAAO,GACP,MAAM,GAEN,YAAY,GACZ,YAAY,CAAA;AAEhB;;GAEG;AACH,MAAM,MAAM,yBAAyB,GACjC,YAAY,GACZ,OAAO,CAAA;AAEX;;GAEG;AACH,MAAM,MAAM,4BAA4B,GACpC,sBAAsB,GACtB,qBAAqB,GACrB,qBAAqB,GACrB,UAAU,CAAA;AAEd;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,IAAI,CAAA;AAEvF;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,cAAc,GACd,WAAW,GACX,aAAa,GACb,eAAe,GACf,YAAY,GACZ,YAAY,CAAA;AAEhB;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAC3B,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,KAAK,GACL,GAAG,CAAA;AAEP;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,eAAe,CAEvE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,eAAe,CAGvE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,mBAAmB,CAE/E"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Tree-sitter GraphQL Grammar Node Types
3
+ *
4
+ * This file defines all possible node types from the tree-sitter-graphql grammar.
5
+ * These types are used by the tree-sitter parser when parsing GraphQL documents.
6
+ *
7
+ * Source: https://github.com/bkegley/tree-sitter-graphql
8
+ *
9
+ * Having these as a TypeScript union type enables:
10
+ * - Type-safe node.type checking
11
+ * - IntelliSense/autocomplete in IDEs
12
+ * - Compile-time verification of node type strings
13
+ * - Better code maintainability and refactoring
14
+ */
15
+ /**
16
+ * Helper function to check if a node type is a keyword
17
+ */
18
+ export function isKeywordNodeType(type) {
19
+ return type === 'query' || type === 'mutation' || type === 'subscription' || type === 'fragment' || type === 'on';
20
+ }
21
+ /**
22
+ * Helper function to check if a node type is a literal
23
+ */
24
+ export function isLiteralNodeType(type) {
25
+ return type === 'string_value' || type === 'int_value' || type === 'float_value'
26
+ || type === 'boolean_value' || type === 'null_value' || type === 'enum_value';
27
+ }
28
+ /**
29
+ * Helper function to check if a node type is punctuation
30
+ */
31
+ export function isPunctuationNodeType(type) {
32
+ return ['{', '}', '(', ')', '[', ']', ':', '=', ',', '!', '|', '&', '@', '...', '$'].includes(type);
33
+ }
34
+ //# sourceMappingURL=graphql-node-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-node-types.js","sourceRoot":"","sources":["../../../../../src/template/components/GraphQLInteractive/lib/graphql-node-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAuLH;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,IAAI,CAAA;AACnH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,aAAa;WAC3E,IAAI,KAAK,eAAe,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,YAAY,CAAA;AACjF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;AACrG,CAAC"}