@mastra/playground-ui 60.1.0-alpha.0 → 60.1.0-alpha.1

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 (127) hide show
  1. package/dist/{code-editor-IR5UX112.js → code-editor-28chVxHw.js} +6 -4
  2. package/dist/code-editor-28chVxHw.js.map +1 -0
  3. package/dist/{code-editor-DzQEzQJh.cjs → code-editor-B_wPmKPf.cjs} +6 -4
  4. package/dist/code-editor-B_wPmKPf.cjs.map +1 -0
  5. package/dist/components/CodeEditor.cjs.js +1 -1
  6. package/dist/components/CodeEditor.es.js +1 -1
  7. package/dist/components/EnvironmentVariablesEditor.cjs.js +4 -4
  8. package/dist/components/EnvironmentVariablesEditor.cjs.js.map +1 -1
  9. package/dist/components/EnvironmentVariablesEditor.es.js +4 -4
  10. package/dist/components/EnvironmentVariablesEditor.es.js.map +1 -1
  11. package/dist/components/LogsDataList.cjs.js +2 -0
  12. package/dist/components/LogsDataList.cjs.js.map +1 -1
  13. package/dist/components/LogsDataList.es.js +2 -0
  14. package/dist/components/LogsDataList.es.js.map +1 -1
  15. package/dist/components/Workflow.cjs.js +3 -3
  16. package/dist/components/Workflow.es.js +3 -3
  17. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +1 -1
  18. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +1 -1
  19. package/dist/domains/chat/messages/dataset-save-action.cjs.js +1 -1
  20. package/dist/domains/chat/messages/dataset-save-action.es.js +1 -1
  21. package/dist/domains/chat/messages/message-row.cjs.js +1 -1
  22. package/dist/domains/chat/messages/message-row.es.js +1 -1
  23. package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
  24. package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
  25. package/dist/domains/chat/tools/badges/agent-badge.cjs.js +2 -2
  26. package/dist/domains/chat/tools/badges/agent-badge.es.js +2 -2
  27. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +1 -1
  28. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +1 -1
  29. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +1 -1
  30. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +1 -1
  31. package/dist/domains/chat/tools/badges/tool-badge.cjs.js +1 -1
  32. package/dist/domains/chat/tools/badges/tool-badge.es.js +1 -1
  33. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +3 -2
  34. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js.map +1 -1
  35. package/dist/domains/chat/tools/badges/workflow-badge.es.js +3 -2
  36. package/dist/domains/chat/tools/badges/workflow-badge.es.js.map +1 -1
  37. package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
  38. package/dist/domains/chat/tools/tool-card.es.js +1 -1
  39. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +1 -1
  40. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +1 -1
  41. package/dist/domains/metrics/drilldown.cjs.js +0 -1
  42. package/dist/domains/metrics/drilldown.cjs.js.map +1 -1
  43. package/dist/domains/metrics/drilldown.es.js +0 -1
  44. package/dist/domains/metrics/drilldown.es.js.map +1 -1
  45. package/dist/domains/metrics/metrics-filters.cjs.js +0 -2
  46. package/dist/domains/metrics/metrics-filters.cjs.js.map +1 -1
  47. package/dist/domains/metrics/metrics-filters.es.js +0 -2
  48. package/dist/domains/metrics/metrics-filters.es.js.map +1 -1
  49. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js +1 -1
  50. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js +1 -1
  51. package/dist/domains/scores/components/trace-scores-tab.cjs.js +1 -0
  52. package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
  53. package/dist/domains/scores/components/trace-scores-tab.es.js +1 -0
  54. package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
  55. package/dist/domains/traces/components/thread-view-by-trace.cjs.js +1 -0
  56. package/dist/domains/traces/components/thread-view-by-trace.cjs.js.map +1 -1
  57. package/dist/domains/traces/components/thread-view-by-trace.es.js +1 -0
  58. package/dist/domains/traces/components/thread-view-by-trace.es.js.map +1 -1
  59. package/dist/domains/traces/components/trace-data-panel.cjs.js +2 -0
  60. package/dist/domains/traces/components/trace-data-panel.cjs.js.map +1 -1
  61. package/dist/domains/traces/components/trace-data-panel.es.js +2 -0
  62. package/dist/domains/traces/components/trace-data-panel.es.js.map +1 -1
  63. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +2 -0
  64. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  65. package/dist/domains/traces/components/traces-page-skeleton.es.js +2 -0
  66. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  67. package/dist/domains/workflows/components/workflow-step-detail.cjs.js +1 -1
  68. package/dist/domains/workflows/components/workflow-step-detail.es.js +1 -1
  69. package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
  70. package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
  71. package/dist/domains/workflows/workflow/data/workflow-data-inspector.cjs.js +1 -1
  72. package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +1 -1
  73. package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +1 -1
  74. package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +1 -1
  75. package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
  76. package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
  77. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +0 -1
  78. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js.map +1 -1
  79. package/dist/domains/workflows/workflow/workflow-input-data.es.js +0 -1
  80. package/dist/domains/workflows/workflow/workflow-input-data.es.js.map +1 -1
  81. package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +1 -1
  82. package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +1 -1
  83. package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +1 -1
  84. package/dist/domains/workflows/workflow/workflow-run-data.es.js +1 -1
  85. package/dist/domains/workflows/workflow/workflow-status.cjs.js +1 -1
  86. package/dist/domains/workflows/workflow/workflow-status.es.js +1 -1
  87. package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +1 -1
  88. package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +1 -1
  89. package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +1 -1
  90. package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +1 -1
  91. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +1 -1
  92. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +1 -1
  93. package/dist/ee/signals/components/entity-index-list.cjs.js +2 -0
  94. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  95. package/dist/ee/signals/components/entity-index-list.es.js +2 -0
  96. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  97. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +1 -0
  98. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  99. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +1 -0
  100. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  101. package/dist/hooks/use-environment-variables-editor.cjs.js +6 -1
  102. package/dist/hooks/use-environment-variables-editor.cjs.js.map +1 -1
  103. package/dist/hooks/use-environment-variables-editor.es.js +6 -1
  104. package/dist/hooks/use-environment-variables-editor.es.js.map +1 -1
  105. package/dist/src/domains/metrics/hooks/use-metrics-filters.d.ts +0 -1
  106. package/dist/src/domains/metrics/metrics-filters.d.ts +0 -2
  107. package/dist/src/ds/components/CodeEditor/variable-autocomplete-extension.d.ts +6 -0
  108. package/dist/src/hooks/use-environment-variables-editor.d.ts +1 -1
  109. package/dist/{tool-card-DPrShK-9.js → tool-card-C_K5PwrK.js} +2 -2
  110. package/dist/{tool-card-DPrShK-9.js.map → tool-card-C_K5PwrK.js.map} +1 -1
  111. package/dist/{tool-card-BfMA9tub.cjs → tool-card-rxo27sve.cjs} +2 -2
  112. package/dist/{tool-card-BfMA9tub.cjs.map → tool-card-rxo27sve.cjs.map} +1 -1
  113. package/dist/{workflow-code-dialog-content-COlaHWtW.cjs → workflow-code-dialog-content-BFm2IWDl.cjs} +2 -2
  114. package/dist/{workflow-code-dialog-content-COlaHWtW.cjs.map → workflow-code-dialog-content-BFm2IWDl.cjs.map} +1 -1
  115. package/dist/{workflow-code-dialog-content-BQBHzRfZ.js → workflow-code-dialog-content-BM4ZnrUr.js} +2 -2
  116. package/dist/{workflow-code-dialog-content-BQBHzRfZ.js.map → workflow-code-dialog-content-BM4ZnrUr.js.map} +1 -1
  117. package/dist/{workflow-data-edge-view-BvhW_gux.cjs → workflow-data-edge-view-7f8O6pVW.cjs} +2 -2
  118. package/dist/{workflow-data-edge-view-BvhW_gux.cjs.map → workflow-data-edge-view-7f8O6pVW.cjs.map} +1 -1
  119. package/dist/{workflow-data-edge-view-BjfKYysc.js → workflow-data-edge-view-BpGLV-at.js} +2 -2
  120. package/dist/{workflow-data-edge-view-BjfKYysc.js.map → workflow-data-edge-view-BpGLV-at.js.map} +1 -1
  121. package/dist/{workflow-edge-data-button-BTsPGDpk.cjs → workflow-edge-data-button-BOVRo4xO.cjs} +2 -2
  122. package/dist/{workflow-edge-data-button-BTsPGDpk.cjs.map → workflow-edge-data-button-BOVRo4xO.cjs.map} +1 -1
  123. package/dist/{workflow-edge-data-button-CIP46GJE.js → workflow-edge-data-button-C6eyWbcG.js} +2 -2
  124. package/dist/{workflow-edge-data-button-CIP46GJE.js.map → workflow-edge-data-button-C6eyWbcG.js.map} +1 -1
  125. package/package.json +10 -10
  126. package/dist/code-editor-DzQEzQJh.cjs.map +0 -1
  127. package/dist/code-editor-IR5UX112.js.map +0 -1
@@ -136,11 +136,13 @@ function createVariableCompletionSource(variables) {
136
136
  detail: variable.type,
137
137
  info: variable.description,
138
138
  apply: (view, completion, from, to) => {
139
- const afterCursor = view.state.sliceDoc(to, to + 2);
140
- const hasClosingBraces = afterCursor === "}}";
139
+ const rest = view.state.sliceDoc(to);
140
+ const identifierEnd = to + (rest.match(/^[a-zA-Z0-9_.\[\]]*/)?.[0].length ?? 0);
141
+ const hasClosingBraces = view.state.sliceDoc(identifierEnd, identifierEnd + 2) === "}}";
142
+ const end = hasClosingBraces ? identifierEnd : to;
141
143
  const insertText = hasClosingBraces ? completion.label : `${completion.label}}}`;
142
144
  view.dispatch({
143
- changes: { from, to, insert: insertText },
145
+ changes: { from, to: end, insert: insertText },
144
146
  selection: { anchor: from + insertText.length }
145
147
  });
146
148
  }
@@ -484,4 +486,4 @@ const CodeEditor = forwardRef(
484
486
  );
485
487
 
486
488
  export { CodeEditor as C, VARIABLE_PATTERN as V, createVariableAutocomplete as a, codeLanguages as c, flattenSchemaToVariables as f, useCodemirrorTheme as u, variableHighlight as v };
487
- //# sourceMappingURL=code-editor-IR5UX112.js.map
489
+ //# sourceMappingURL=code-editor-28chVxHw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-editor-28chVxHw.js","sources":["../src/ds/components/CodeEditor/code-languages.ts","../src/ds/components/CodeEditor/schema-to-variables.ts","../src/ds/components/CodeEditor/variable-autocomplete-extension.ts","../src/ds/components/CodeEditor/variable-highlight-extension.ts","../src/ds/components/CodeEditor/code-editor.tsx"],"sourcesContent":["import { LanguageDescription, LanguageSupport, StreamLanguage } from '@codemirror/language';\n\nfunction legacy(parser: Parameters<typeof StreamLanguage.define>[0]) {\n return new LanguageSupport(StreamLanguage.define(parser));\n}\n\n/**\n * A minimal subset of CodeMirror language descriptions used for fenced code\n * blocks inside markdown. Mirrors the relevant entries from\n * `@codemirror/language-data` but only the languages we actually support, so\n * bundlers don't have to emit a chunk for every known language.\n */\nexport const codeLanguages = [\n LanguageDescription.of({\n name: 'JavaScript',\n alias: ['ecmascript', 'js', 'node'],\n extensions: ['js', 'mjs', 'cjs'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript());\n },\n }),\n LanguageDescription.of({\n name: 'JSON',\n alias: ['json5'],\n extensions: ['json', 'map'],\n load() {\n return import('@codemirror/lang-json').then(m => m.json());\n },\n }),\n LanguageDescription.of({\n name: 'JSX',\n extensions: ['jsx'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ jsx: true }));\n },\n }),\n LanguageDescription.of({\n name: 'Markdown',\n extensions: ['md', 'markdown', 'mkd'],\n load() {\n return import('@codemirror/lang-markdown').then(m => m.markdown());\n },\n }),\n LanguageDescription.of({\n name: 'TSX',\n extensions: ['tsx'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ jsx: true, typescript: true }));\n },\n }),\n LanguageDescription.of({\n name: 'TypeScript',\n alias: ['ts'],\n extensions: ['ts', 'mts', 'cts'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ typescript: true }));\n },\n }),\n LanguageDescription.of({\n name: 'Shell',\n alias: ['bash', 'sh', 'zsh'],\n extensions: ['sh', 'ksh', 'bash'],\n filename: /^PKGBUILD$/,\n load() {\n return import('@codemirror/legacy-modes/mode/shell').then(m => legacy(m.shell));\n },\n }),\n];\n","import type { JsonSchema, JsonSchemaProperty } from '@/lib/json-schema';\n\n/**\n * Represents a variable completion option derived from a schema\n */\nexport interface VariableCompletion {\n /** The dot-notation path (e.g., \"user.name\") */\n path: string;\n /** Display label for the autocomplete */\n label: string;\n /** Description from the schema, if available */\n description?: string;\n /** The type of the property */\n type?: string;\n}\n\n/**\n * Flattens a JSON Schema into a list of variable completions for autocomplete.\n * Recursively extracts property paths using dot-notation.\n *\n * @param schema - The JSON Schema to flatten\n * @param maxDepth - Maximum recursion depth (default: 5)\n * @returns Array of variable completions\n *\n * @example\n * ```ts\n * const schema = {\n * type: 'object',\n * properties: {\n * user: {\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * email: { type: 'string' }\n * }\n * }\n * }\n * };\n *\n * flattenSchemaToVariables(schema);\n * // Returns:\n * // [\n * // { path: 'user', label: 'user', type: 'object' },\n * // { path: 'user.name', label: 'user.name', type: 'string' },\n * // { path: 'user.email', label: 'user.email', type: 'string' }\n * // ]\n * ```\n */\nexport function flattenSchemaToVariables(schema: JsonSchema | undefined, maxDepth = 5): VariableCompletion[] {\n if (!schema?.properties) {\n return [];\n }\n\n const results: VariableCompletion[] = [];\n\n function processProperty(property: JsonSchemaProperty, path: string, depth: number): void {\n if (depth > maxDepth) {\n return;\n }\n\n const type = Array.isArray(property.type) ? property.type.join(' | ') : property.type;\n\n results.push({\n path,\n label: path,\n description: property.description ?? property.title,\n type,\n });\n\n // Recurse into nested object properties\n if (property.properties) {\n for (const [key, nestedProperty] of Object.entries(property.properties)) {\n processProperty(nestedProperty, `${path}.${key}`, depth + 1);\n }\n }\n\n // Handle array items if they have properties (array of objects)\n if (property.items?.properties) {\n // Add a placeholder for array item access (e.g., items[0].name)\n for (const [key, itemProperty] of Object.entries(property.items.properties)) {\n processProperty(itemProperty, `${path}[].${key}`, depth + 1);\n }\n }\n }\n\n for (const [key, property] of Object.entries(schema.properties)) {\n processProperty(property, key, 1);\n }\n\n return results;\n}\n","import { autocompletion } from '@codemirror/autocomplete';\nimport type { Completion, CompletionContext, CompletionResult } from '@codemirror/autocomplete';\nimport type { Extension } from '@codemirror/state';\nimport { flattenSchemaToVariables } from './schema-to-variables';\nimport type { VariableCompletion } from './schema-to-variables';\nimport type { JsonSchema } from '@/lib/json-schema';\n\n/**\n * Creates a CodeMirror autocomplete extension for {{variable}} placeholders.\n * Triggers when the user types `{{` and shows suggestions derived from the schema.\n *\n * @param schema - JSON Schema to derive variable suggestions from\n * @returns CodeMirror Extension that provides variable autocomplete\n *\n * @example\n * ```tsx\n * const schema = {\n * type: 'object',\n * properties: {\n * user: { type: 'object', properties: { name: { type: 'string' } } }\n * }\n * };\n *\n * <CodeMirror extensions={[createVariableAutocomplete(schema)]} />\n * // Typing \"{{\" will show: user, user.name\n * ```\n */\nexport function createVariableAutocomplete(schema: JsonSchema | undefined): Extension {\n const variables = flattenSchemaToVariables(schema);\n\n return autocompletion({\n override: [createVariableCompletionSource(variables)],\n defaultKeymap: true,\n closeOnBlur: true,\n icons: false,\n });\n}\n\n/**\n * Creates a completion source function for CodeMirror's autocompletion.\n */\nexport function createVariableCompletionSource(\n variables: VariableCompletion[],\n): (context: CompletionContext) => CompletionResult | null {\n return (context: CompletionContext): CompletionResult | null => {\n // Look for {{ pattern before cursor\n const beforeCursor = context.state.sliceDoc(Math.max(0, context.pos - 50), context.pos);\n const match = beforeCursor.match(/\\{\\{([a-zA-Z0-9_.\\[\\]]*)?$/);\n\n if (!match) {\n return null;\n }\n\n // The text after {{ that we're matching against\n const prefix = match[1] ?? '';\n const startPos = context.pos - prefix.length;\n\n // Filter variables based on what the user has typed\n const filteredVariables = prefix\n ? variables.filter(v => v.path.toLowerCase().startsWith(prefix.toLowerCase()))\n : variables;\n\n if (filteredVariables.length === 0) {\n return null;\n }\n\n const completions: Completion[] = filteredVariables.map(variable => ({\n label: variable.path,\n displayLabel: variable.path,\n detail: variable.type,\n info: variable.description,\n apply: (view, completion, from, to) => {\n // Inside an existing placeholder, replace the rest of the identifier and reuse its closing }}\n const rest = view.state.sliceDoc(to);\n const identifierEnd = to + (rest.match(/^[a-zA-Z0-9_.\\[\\]]*/)?.[0].length ?? 0);\n const hasClosingBraces = view.state.sliceDoc(identifierEnd, identifierEnd + 2) === '}}';\n const end = hasClosingBraces ? identifierEnd : to;\n\n const insertText = hasClosingBraces ? completion.label : `${completion.label}}}`;\n\n view.dispatch({\n changes: { from, to: end, insert: insertText },\n selection: { anchor: from + insertText.length },\n });\n },\n }));\n\n return {\n from: startPos,\n options: completions,\n validFor: /^[a-zA-Z0-9_.\\[\\]]*$/,\n };\n };\n}\n","import type { DecorationSet, EditorView, ViewUpdate } from '@codemirror/view';\nimport { Decoration, MatchDecorator, ViewPlugin } from '@codemirror/view';\n\n/**\n * Regex pattern to match variable placeholders like {{variableName}} or {{user.name}}\n * Matches: {{ followed by a valid identifier path (with optional dot notation), then }}\n */\nexport const VARIABLE_PATTERN = /\\{\\{([a-zA-Z_][a-zA-Z0-9_]*(?:\\.[a-zA-Z_][a-zA-Z0-9_]*)*)\\}\\}/g;\n\nconst variableDecoration = Decoration.mark({\n class: 'cm-variable-highlight',\n});\n\nconst variableMatcher = new MatchDecorator({\n regexp: VARIABLE_PATTERN,\n decoration: () => variableDecoration,\n});\n\nconst variableHighlightPlugin = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = variableMatcher.createDeco(view);\n }\n\n update(update: ViewUpdate) {\n this.decorations = variableMatcher.updateDeco(update, this.decorations);\n }\n },\n {\n decorations: v => v.decorations,\n },\n);\n\n/**\n * CodeMirror extension that highlights {{variableName}} patterns\n * with orange color and semibold weight\n */\nexport const variableHighlight = variableHighlightPlugin;\n","import { jsonLanguage } from '@codemirror/lang-json';\nimport { markdown, markdownLanguage } from '@codemirror/lang-markdown';\nimport { HighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { EditorState, Prec } from '@codemirror/state';\nimport type { Extension } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { tags as t } from '@lezer/highlight';\nimport { draculaInit } from '@uiw/codemirror-theme-dracula';\nimport CodeMirror from '@uiw/react-codemirror';\nimport type { ReactCodeMirrorRef } from '@uiw/react-codemirror';\nimport { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport { forwardRef, useMemo } from 'react';\nimport type { HTMLAttributes } from 'react';\nimport { codeLanguages } from './code-languages';\nimport { createVariableAutocomplete } from './variable-autocomplete-extension';\nimport { variableHighlight } from './variable-highlight-extension';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { useTheme } from '@/ds/components/ThemeProvider';\nimport { fieldErrorRimWithin, inputSurfaceAndFocusWithinStyle } from '@/ds/primitives/form-element';\nimport type { JsonSchema } from '@/lib/json-schema';\nimport { cn } from '@/lib/utils';\n\nexport type CodeEditorLanguage = 'json' | 'markdown';\n\n/** Original dark theme — draculaInit + custom overrides. Unchanged from before light mode work. */\nfunction buildDarkTheme(): Extension {\n const baseTheme = draculaInit({\n settings: {\n fontFamily: 'var(--font-mono)',\n fontSize: 'var(--text-body-sm)',\n lineHighlight: 'transparent',\n gutterBackground: 'transparent',\n gutterForeground: 'var(--placeholder)',\n background: 'transparent',\n foreground: 'var(--foreground)',\n caret: 'var(--foreground)',\n },\n styles: [\n { tag: [t.className, t.propertyName], color: 'var(--foreground)' },\n { tag: t.heading, color: 'var(--info-indicator)', fontWeight: 'bold' },\n {\n tag: [t.heading1, t.heading2, t.heading3, t.heading4, t.heading5, t.heading6],\n color: 'var(--info-indicator)',\n fontWeight: 'bold',\n },\n { tag: t.emphasis, fontStyle: 'italic', color: 'var(--foreground)' },\n { tag: t.strong, fontWeight: 'bold', color: 'var(--foreground)' },\n { tag: t.link, color: 'var(--info-indicator)', textDecoration: 'underline' },\n { tag: t.url, color: 'var(--info-indicator)' },\n { tag: t.monospace, color: 'var(--foreground)' },\n { tag: t.strikethrough, textDecoration: 'line-through' },\n { tag: t.quote, fontStyle: 'italic', color: 'var(--placeholder)' },\n ],\n });\n\n const customLineNumberTheme = EditorView.theme({\n '.cm-editor': {\n backgroundColor: 'transparent',\n },\n '.cm-content': {\n color: 'var(--foreground)',\n caretColor: 'var(--foreground)',\n },\n '.cm-lineNumbers .cm-gutterElement': {\n color: 'var(--placeholder)',\n },\n '.cm-activeLineGutter': {\n color: 'var(--muted-foreground)',\n },\n '.cm-cursor': {\n borderLeftColor: 'var(--foreground)',\n },\n '.cm-selectionBackground, .cm-content ::selection': {\n backgroundColor: 'var(--info-subtle)',\n },\n '.cm-tooltip-autocomplete': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n borderRadius: '6px',\n boxShadow: 'var(--elevation-overlay)',\n },\n '.cm-tooltip-autocomplete > ul': {\n fontFamily: 'var(--font-mono)',\n },\n '.cm-completionLabel': {\n color: 'var(--foreground)',\n },\n '.cm-completionDetail': {\n color: 'var(--muted-foreground)',\n fontSize: 'var(--text-caption)',\n marginLeft: 'auto',\n paddingLeft: '12px',\n },\n '.cm-completionInfo': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n color: 'var(--muted-foreground)',\n padding: '8px 12px',\n },\n '.cm-completionIcon': {\n display: 'none',\n },\n 'ul.cm-completionList li[aria-selected]': {\n backgroundColor: 'var(--fill-hover)',\n color: 'var(--foreground)',\n },\n '.cm-line .cm-variable-highlight': {\n color: 'var(--warning-foreground) !important',\n fontWeight: '500',\n },\n });\n\n return [baseTheme, customLineNumberTheme];\n}\n\nfunction buildLightTheme(): Extension {\n const editorTheme = EditorView.theme({\n '&': {\n backgroundColor: 'transparent',\n color: 'var(--foreground)',\n fontSize: 'var(--text-body-sm)',\n },\n '&.cm-editor .cm-scroller': {\n fontFamily: 'var(--font-mono)',\n },\n '.cm-gutters': {\n backgroundColor: 'transparent',\n color: 'var(--placeholder)',\n borderRight: 'none',\n },\n '.cm-content': {\n color: 'var(--foreground)',\n caretColor: 'var(--foreground)',\n },\n '.cm-activeLine': {\n backgroundColor: 'transparent',\n },\n '.cm-lineNumbers .cm-gutterElement': {\n color: 'var(--placeholder)',\n },\n '.cm-activeLineGutter': {\n backgroundColor: 'transparent',\n color: 'var(--muted-foreground)',\n },\n '.cm-cursor, .cm-dropCursor': {\n borderLeftColor: 'var(--foreground)',\n },\n '&.cm-focused .cm-selectionBackground, & .cm-line::selection, & .cm-selectionLayer .cm-selectionBackground, .cm-content ::selection':\n {\n background: 'var(--info-edge) !important',\n },\n '.cm-tooltip-autocomplete': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n borderRadius: '6px',\n boxShadow: 'var(--elevation-overlay)',\n },\n '.cm-tooltip-autocomplete > ul': {\n fontFamily: 'var(--font-mono)',\n },\n '.cm-completionLabel': {\n color: 'var(--foreground)',\n },\n '.cm-completionDetail': {\n color: 'var(--muted-foreground)',\n fontSize: 'var(--text-caption)',\n marginLeft: 'auto',\n paddingLeft: '12px',\n },\n '.cm-completionInfo': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n color: 'var(--muted-foreground)',\n padding: '8px 12px',\n },\n '.cm-completionIcon': {\n display: 'none',\n },\n 'ul.cm-completionList li[aria-selected]': {\n backgroundColor: 'var(--fill-hover)',\n color: 'var(--foreground)',\n },\n '.cm-line .cm-variable-highlight': {\n color: 'var(--warning-foreground) !important',\n fontWeight: '500',\n },\n });\n\n const highlightStyle = HighlightStyle.define([\n { tag: [t.comment, t.bracket], color: 'var(--placeholder)' },\n { tag: [t.string, t.meta, t.regexp], color: 'var(--syntax-string)' },\n { tag: [t.atom, t.bool, t.special(t.variableName)], color: 'var(--syntax-literal)' },\n { tag: [t.keyword, t.operator, t.tagName], color: 'var(--syntax-keyword)' },\n { tag: [t.function(t.propertyName), t.propertyName], color: 'var(--syntax-name)' },\n {\n tag: [t.definition(t.variableName), t.function(t.variableName), t.className, t.attributeName],\n color: 'var(--syntax-link)',\n },\n { tag: [t.variableName, t.number], color: 'var(--syntax-name)' },\n { tag: [t.name, t.quote], color: 'var(--syntax-string)' },\n { tag: t.heading, color: 'var(--syntax-link)', fontWeight: 'bold' },\n {\n tag: [t.heading1, t.heading2, t.heading3, t.heading4, t.heading5, t.heading6],\n color: 'var(--syntax-link)',\n fontWeight: 'bold',\n },\n { tag: [t.emphasis], fontStyle: 'italic', color: 'var(--foreground)' },\n { tag: [t.strong], fontWeight: 'bold', color: 'var(--foreground)' },\n { tag: t.link, color: 'var(--syntax-link)', textDecoration: 'underline' },\n { tag: t.url, color: 'var(--syntax-link)' },\n { tag: t.monospace, color: 'var(--foreground)' },\n { tag: t.strikethrough, textDecoration: 'line-through' },\n { tag: [t.deleted], color: 'var(--syntax-keyword)' },\n { tag: t.invalid, color: 'var(--destructive-foreground)' },\n { tag: [t.standard(t.tagName)], color: 'var(--syntax-string)' },\n ]);\n\n return [editorTheme, syntaxHighlighting(highlightStyle)];\n}\n\n// eslint-disable-next-line react-refresh/only-export-components -- shared hook intentionally co-located with the editor it themes\nexport const useCodemirrorTheme = (): Extension => {\n const isDark = useTheme().resolvedTheme === 'dark';\n return useMemo(() => (isDark ? buildDarkTheme() : buildLightTheme()), [isDark]);\n};\n\nconst codeEditorVariants = cva(\n cn(\n 'relative overflow-hidden font-mono outline-hidden focus-within:outline-hidden focus:outline-hidden',\n 'transition-colors duration-normal ease-out-custom',\n ),\n {\n variants: {\n variant: {\n default: cn(inputSurfaceAndFocusWithinStyle, 'rounded-md p-1', fieldErrorRimWithin),\n embedded: 'rounded-none border-none bg-transparent p-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nconst editorFocusAttributes = Prec.highest(\n EditorView.editorAttributes.of({\n style: 'outline: none',\n }),\n);\n\nconst editorFocusTheme = Prec.highest(\n EditorView.theme({\n '&': {\n outline: 'none',\n },\n '&.cm-focused': {\n outline: 'none',\n },\n '.cm-scroller': {\n outline: 'none',\n },\n '.cm-content': {\n outline: 'none',\n },\n '.cm-content:focus': {\n outline: 'none',\n },\n }),\n);\n\nconst editorFocusExtensions: Extension[] = [editorFocusAttributes, editorFocusTheme];\n\ntype CodeEditorContentAttributes = {\n 'aria-label': string;\n id?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: string;\n};\n\nexport type CodeEditorProps = {\n data?: Record<string, unknown> | Array<Record<string, unknown>>;\n value?: string;\n onChange?: (value: string) => void;\n showCopyButton?: boolean;\n className?: string;\n highlightVariables?: boolean;\n language?: CodeEditorLanguage;\n placeholder?: string;\n /** JSON Schema to enable variable autocomplete for {{variable}} placeholders (markdown only) */\n schema?: JsonSchema;\n autoFocus?: boolean;\n /** Show line numbers in the gutter (default: true) */\n lineNumbers?: boolean;\n /** Wrap long lines within the editor viewport (default: true) */\n lineWrapping?: boolean;\n /** When false, makes the editor read-only */\n editable?: boolean;\n} & VariantProps<typeof codeEditorVariants> &\n Omit<HTMLAttributes<HTMLDivElement>, 'onChange'>;\n\nexport const CodeEditor = forwardRef<ReactCodeMirrorRef, CodeEditorProps>(\n (\n {\n data,\n value,\n onChange,\n showCopyButton = true,\n className,\n language = 'json',\n highlightVariables = false,\n placeholder,\n schema,\n autoFocus,\n lineNumbers = true,\n lineWrapping = true,\n editable,\n variant,\n id,\n 'aria-label': ariaLabel = 'Code editor',\n 'aria-describedby': ariaDescribedBy,\n 'aria-invalid': ariaInvalid,\n ...props\n },\n ref,\n ) => {\n const theme = useCodemirrorTheme();\n const formattedCode = data ? JSON.stringify(data, null, 2) : (value ?? '');\n\n const extensions = useMemo(() => {\n const contentAttributes: CodeEditorContentAttributes = { 'aria-label': ariaLabel };\n if (id) contentAttributes.id = id;\n if (ariaDescribedBy) contentAttributes['aria-describedby'] = ariaDescribedBy;\n if (ariaInvalid !== undefined) contentAttributes['aria-invalid'] = String(ariaInvalid);\n\n const exts: Extension[] = [...editorFocusExtensions, EditorView.contentAttributes.of(contentAttributes)];\n\n if (lineWrapping) {\n exts.push(EditorView.lineWrapping);\n }\n\n if (language === 'json') {\n exts.push(jsonLanguage);\n } else if (language === 'markdown') {\n exts.push(markdown({ base: markdownLanguage, codeLanguages }));\n }\n\n if (highlightVariables && language === 'markdown') {\n exts.push(variableHighlight);\n }\n\n if (schema && language === 'markdown') {\n exts.push(createVariableAutocomplete(schema));\n }\n\n if (editable === false) {\n exts.push(EditorState.readOnly.of(true));\n }\n\n return exts;\n }, [language, highlightVariables, schema, editable, lineWrapping, id, ariaLabel, ariaDescribedBy, ariaInvalid]);\n\n return (\n <div className={cn(codeEditorVariants({ variant }), className)} {...props}>\n {showCopyButton && <CopyButton content={formattedCode} className=\"absolute top-2 right-2 z-20\" />}\n <CodeMirror\n ref={ref}\n value={formattedCode}\n theme={theme}\n extensions={extensions}\n onChange={onChange}\n editable={editable}\n aria-label={ariaLabel}\n placeholder={placeholder}\n height=\"100%\"\n style={{ height: '100%' }}\n autoFocus={autoFocus}\n basicSetup={{ lineNumbers }}\n />\n </div>\n );\n },\n);\n"],"names":["t"],"mappings":"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"}
@@ -138,11 +138,13 @@ function createVariableCompletionSource(variables) {
138
138
  detail: variable.type,
139
139
  info: variable.description,
140
140
  apply: (view, completion, from, to) => {
141
- const afterCursor = view.state.sliceDoc(to, to + 2);
142
- const hasClosingBraces = afterCursor === "}}";
141
+ const rest = view.state.sliceDoc(to);
142
+ const identifierEnd = to + (rest.match(/^[a-zA-Z0-9_.\[\]]*/)?.[0].length ?? 0);
143
+ const hasClosingBraces = view.state.sliceDoc(identifierEnd, identifierEnd + 2) === "}}";
144
+ const end = hasClosingBraces ? identifierEnd : to;
143
145
  const insertText = hasClosingBraces ? completion.label : `${completion.label}}}`;
144
146
  view.dispatch({
145
- changes: { from, to, insert: insertText },
147
+ changes: { from, to: end, insert: insertText },
146
148
  selection: { anchor: from + insertText.length }
147
149
  });
148
150
  }
@@ -492,4 +494,4 @@ exports.createVariableAutocomplete = createVariableAutocomplete;
492
494
  exports.flattenSchemaToVariables = flattenSchemaToVariables;
493
495
  exports.useCodemirrorTheme = useCodemirrorTheme;
494
496
  exports.variableHighlight = variableHighlight;
495
- //# sourceMappingURL=code-editor-DzQEzQJh.cjs.map
497
+ //# sourceMappingURL=code-editor-B_wPmKPf.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-editor-B_wPmKPf.cjs","sources":["../src/ds/components/CodeEditor/code-languages.ts","../src/ds/components/CodeEditor/schema-to-variables.ts","../src/ds/components/CodeEditor/variable-autocomplete-extension.ts","../src/ds/components/CodeEditor/variable-highlight-extension.ts","../src/ds/components/CodeEditor/code-editor.tsx"],"sourcesContent":["import { LanguageDescription, LanguageSupport, StreamLanguage } from '@codemirror/language';\n\nfunction legacy(parser: Parameters<typeof StreamLanguage.define>[0]) {\n return new LanguageSupport(StreamLanguage.define(parser));\n}\n\n/**\n * A minimal subset of CodeMirror language descriptions used for fenced code\n * blocks inside markdown. Mirrors the relevant entries from\n * `@codemirror/language-data` but only the languages we actually support, so\n * bundlers don't have to emit a chunk for every known language.\n */\nexport const codeLanguages = [\n LanguageDescription.of({\n name: 'JavaScript',\n alias: ['ecmascript', 'js', 'node'],\n extensions: ['js', 'mjs', 'cjs'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript());\n },\n }),\n LanguageDescription.of({\n name: 'JSON',\n alias: ['json5'],\n extensions: ['json', 'map'],\n load() {\n return import('@codemirror/lang-json').then(m => m.json());\n },\n }),\n LanguageDescription.of({\n name: 'JSX',\n extensions: ['jsx'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ jsx: true }));\n },\n }),\n LanguageDescription.of({\n name: 'Markdown',\n extensions: ['md', 'markdown', 'mkd'],\n load() {\n return import('@codemirror/lang-markdown').then(m => m.markdown());\n },\n }),\n LanguageDescription.of({\n name: 'TSX',\n extensions: ['tsx'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ jsx: true, typescript: true }));\n },\n }),\n LanguageDescription.of({\n name: 'TypeScript',\n alias: ['ts'],\n extensions: ['ts', 'mts', 'cts'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ typescript: true }));\n },\n }),\n LanguageDescription.of({\n name: 'Shell',\n alias: ['bash', 'sh', 'zsh'],\n extensions: ['sh', 'ksh', 'bash'],\n filename: /^PKGBUILD$/,\n load() {\n return import('@codemirror/legacy-modes/mode/shell').then(m => legacy(m.shell));\n },\n }),\n];\n","import type { JsonSchema, JsonSchemaProperty } from '@/lib/json-schema';\n\n/**\n * Represents a variable completion option derived from a schema\n */\nexport interface VariableCompletion {\n /** The dot-notation path (e.g., \"user.name\") */\n path: string;\n /** Display label for the autocomplete */\n label: string;\n /** Description from the schema, if available */\n description?: string;\n /** The type of the property */\n type?: string;\n}\n\n/**\n * Flattens a JSON Schema into a list of variable completions for autocomplete.\n * Recursively extracts property paths using dot-notation.\n *\n * @param schema - The JSON Schema to flatten\n * @param maxDepth - Maximum recursion depth (default: 5)\n * @returns Array of variable completions\n *\n * @example\n * ```ts\n * const schema = {\n * type: 'object',\n * properties: {\n * user: {\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * email: { type: 'string' }\n * }\n * }\n * }\n * };\n *\n * flattenSchemaToVariables(schema);\n * // Returns:\n * // [\n * // { path: 'user', label: 'user', type: 'object' },\n * // { path: 'user.name', label: 'user.name', type: 'string' },\n * // { path: 'user.email', label: 'user.email', type: 'string' }\n * // ]\n * ```\n */\nexport function flattenSchemaToVariables(schema: JsonSchema | undefined, maxDepth = 5): VariableCompletion[] {\n if (!schema?.properties) {\n return [];\n }\n\n const results: VariableCompletion[] = [];\n\n function processProperty(property: JsonSchemaProperty, path: string, depth: number): void {\n if (depth > maxDepth) {\n return;\n }\n\n const type = Array.isArray(property.type) ? property.type.join(' | ') : property.type;\n\n results.push({\n path,\n label: path,\n description: property.description ?? property.title,\n type,\n });\n\n // Recurse into nested object properties\n if (property.properties) {\n for (const [key, nestedProperty] of Object.entries(property.properties)) {\n processProperty(nestedProperty, `${path}.${key}`, depth + 1);\n }\n }\n\n // Handle array items if they have properties (array of objects)\n if (property.items?.properties) {\n // Add a placeholder for array item access (e.g., items[0].name)\n for (const [key, itemProperty] of Object.entries(property.items.properties)) {\n processProperty(itemProperty, `${path}[].${key}`, depth + 1);\n }\n }\n }\n\n for (const [key, property] of Object.entries(schema.properties)) {\n processProperty(property, key, 1);\n }\n\n return results;\n}\n","import { autocompletion } from '@codemirror/autocomplete';\nimport type { Completion, CompletionContext, CompletionResult } from '@codemirror/autocomplete';\nimport type { Extension } from '@codemirror/state';\nimport { flattenSchemaToVariables } from './schema-to-variables';\nimport type { VariableCompletion } from './schema-to-variables';\nimport type { JsonSchema } from '@/lib/json-schema';\n\n/**\n * Creates a CodeMirror autocomplete extension for {{variable}} placeholders.\n * Triggers when the user types `{{` and shows suggestions derived from the schema.\n *\n * @param schema - JSON Schema to derive variable suggestions from\n * @returns CodeMirror Extension that provides variable autocomplete\n *\n * @example\n * ```tsx\n * const schema = {\n * type: 'object',\n * properties: {\n * user: { type: 'object', properties: { name: { type: 'string' } } }\n * }\n * };\n *\n * <CodeMirror extensions={[createVariableAutocomplete(schema)]} />\n * // Typing \"{{\" will show: user, user.name\n * ```\n */\nexport function createVariableAutocomplete(schema: JsonSchema | undefined): Extension {\n const variables = flattenSchemaToVariables(schema);\n\n return autocompletion({\n override: [createVariableCompletionSource(variables)],\n defaultKeymap: true,\n closeOnBlur: true,\n icons: false,\n });\n}\n\n/**\n * Creates a completion source function for CodeMirror's autocompletion.\n */\nexport function createVariableCompletionSource(\n variables: VariableCompletion[],\n): (context: CompletionContext) => CompletionResult | null {\n return (context: CompletionContext): CompletionResult | null => {\n // Look for {{ pattern before cursor\n const beforeCursor = context.state.sliceDoc(Math.max(0, context.pos - 50), context.pos);\n const match = beforeCursor.match(/\\{\\{([a-zA-Z0-9_.\\[\\]]*)?$/);\n\n if (!match) {\n return null;\n }\n\n // The text after {{ that we're matching against\n const prefix = match[1] ?? '';\n const startPos = context.pos - prefix.length;\n\n // Filter variables based on what the user has typed\n const filteredVariables = prefix\n ? variables.filter(v => v.path.toLowerCase().startsWith(prefix.toLowerCase()))\n : variables;\n\n if (filteredVariables.length === 0) {\n return null;\n }\n\n const completions: Completion[] = filteredVariables.map(variable => ({\n label: variable.path,\n displayLabel: variable.path,\n detail: variable.type,\n info: variable.description,\n apply: (view, completion, from, to) => {\n // Inside an existing placeholder, replace the rest of the identifier and reuse its closing }}\n const rest = view.state.sliceDoc(to);\n const identifierEnd = to + (rest.match(/^[a-zA-Z0-9_.\\[\\]]*/)?.[0].length ?? 0);\n const hasClosingBraces = view.state.sliceDoc(identifierEnd, identifierEnd + 2) === '}}';\n const end = hasClosingBraces ? identifierEnd : to;\n\n const insertText = hasClosingBraces ? completion.label : `${completion.label}}}`;\n\n view.dispatch({\n changes: { from, to: end, insert: insertText },\n selection: { anchor: from + insertText.length },\n });\n },\n }));\n\n return {\n from: startPos,\n options: completions,\n validFor: /^[a-zA-Z0-9_.\\[\\]]*$/,\n };\n };\n}\n","import type { DecorationSet, EditorView, ViewUpdate } from '@codemirror/view';\nimport { Decoration, MatchDecorator, ViewPlugin } from '@codemirror/view';\n\n/**\n * Regex pattern to match variable placeholders like {{variableName}} or {{user.name}}\n * Matches: {{ followed by a valid identifier path (with optional dot notation), then }}\n */\nexport const VARIABLE_PATTERN = /\\{\\{([a-zA-Z_][a-zA-Z0-9_]*(?:\\.[a-zA-Z_][a-zA-Z0-9_]*)*)\\}\\}/g;\n\nconst variableDecoration = Decoration.mark({\n class: 'cm-variable-highlight',\n});\n\nconst variableMatcher = new MatchDecorator({\n regexp: VARIABLE_PATTERN,\n decoration: () => variableDecoration,\n});\n\nconst variableHighlightPlugin = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = variableMatcher.createDeco(view);\n }\n\n update(update: ViewUpdate) {\n this.decorations = variableMatcher.updateDeco(update, this.decorations);\n }\n },\n {\n decorations: v => v.decorations,\n },\n);\n\n/**\n * CodeMirror extension that highlights {{variableName}} patterns\n * with orange color and semibold weight\n */\nexport const variableHighlight = variableHighlightPlugin;\n","import { jsonLanguage } from '@codemirror/lang-json';\nimport { markdown, markdownLanguage } from '@codemirror/lang-markdown';\nimport { HighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { EditorState, Prec } from '@codemirror/state';\nimport type { Extension } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { tags as t } from '@lezer/highlight';\nimport { draculaInit } from '@uiw/codemirror-theme-dracula';\nimport CodeMirror from '@uiw/react-codemirror';\nimport type { ReactCodeMirrorRef } from '@uiw/react-codemirror';\nimport { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport { forwardRef, useMemo } from 'react';\nimport type { HTMLAttributes } from 'react';\nimport { codeLanguages } from './code-languages';\nimport { createVariableAutocomplete } from './variable-autocomplete-extension';\nimport { variableHighlight } from './variable-highlight-extension';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { useTheme } from '@/ds/components/ThemeProvider';\nimport { fieldErrorRimWithin, inputSurfaceAndFocusWithinStyle } from '@/ds/primitives/form-element';\nimport type { JsonSchema } from '@/lib/json-schema';\nimport { cn } from '@/lib/utils';\n\nexport type CodeEditorLanguage = 'json' | 'markdown';\n\n/** Original dark theme — draculaInit + custom overrides. Unchanged from before light mode work. */\nfunction buildDarkTheme(): Extension {\n const baseTheme = draculaInit({\n settings: {\n fontFamily: 'var(--font-mono)',\n fontSize: 'var(--text-body-sm)',\n lineHighlight: 'transparent',\n gutterBackground: 'transparent',\n gutterForeground: 'var(--placeholder)',\n background: 'transparent',\n foreground: 'var(--foreground)',\n caret: 'var(--foreground)',\n },\n styles: [\n { tag: [t.className, t.propertyName], color: 'var(--foreground)' },\n { tag: t.heading, color: 'var(--info-indicator)', fontWeight: 'bold' },\n {\n tag: [t.heading1, t.heading2, t.heading3, t.heading4, t.heading5, t.heading6],\n color: 'var(--info-indicator)',\n fontWeight: 'bold',\n },\n { tag: t.emphasis, fontStyle: 'italic', color: 'var(--foreground)' },\n { tag: t.strong, fontWeight: 'bold', color: 'var(--foreground)' },\n { tag: t.link, color: 'var(--info-indicator)', textDecoration: 'underline' },\n { tag: t.url, color: 'var(--info-indicator)' },\n { tag: t.monospace, color: 'var(--foreground)' },\n { tag: t.strikethrough, textDecoration: 'line-through' },\n { tag: t.quote, fontStyle: 'italic', color: 'var(--placeholder)' },\n ],\n });\n\n const customLineNumberTheme = EditorView.theme({\n '.cm-editor': {\n backgroundColor: 'transparent',\n },\n '.cm-content': {\n color: 'var(--foreground)',\n caretColor: 'var(--foreground)',\n },\n '.cm-lineNumbers .cm-gutterElement': {\n color: 'var(--placeholder)',\n },\n '.cm-activeLineGutter': {\n color: 'var(--muted-foreground)',\n },\n '.cm-cursor': {\n borderLeftColor: 'var(--foreground)',\n },\n '.cm-selectionBackground, .cm-content ::selection': {\n backgroundColor: 'var(--info-subtle)',\n },\n '.cm-tooltip-autocomplete': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n borderRadius: '6px',\n boxShadow: 'var(--elevation-overlay)',\n },\n '.cm-tooltip-autocomplete > ul': {\n fontFamily: 'var(--font-mono)',\n },\n '.cm-completionLabel': {\n color: 'var(--foreground)',\n },\n '.cm-completionDetail': {\n color: 'var(--muted-foreground)',\n fontSize: 'var(--text-caption)',\n marginLeft: 'auto',\n paddingLeft: '12px',\n },\n '.cm-completionInfo': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n color: 'var(--muted-foreground)',\n padding: '8px 12px',\n },\n '.cm-completionIcon': {\n display: 'none',\n },\n 'ul.cm-completionList li[aria-selected]': {\n backgroundColor: 'var(--fill-hover)',\n color: 'var(--foreground)',\n },\n '.cm-line .cm-variable-highlight': {\n color: 'var(--warning-foreground) !important',\n fontWeight: '500',\n },\n });\n\n return [baseTheme, customLineNumberTheme];\n}\n\nfunction buildLightTheme(): Extension {\n const editorTheme = EditorView.theme({\n '&': {\n backgroundColor: 'transparent',\n color: 'var(--foreground)',\n fontSize: 'var(--text-body-sm)',\n },\n '&.cm-editor .cm-scroller': {\n fontFamily: 'var(--font-mono)',\n },\n '.cm-gutters': {\n backgroundColor: 'transparent',\n color: 'var(--placeholder)',\n borderRight: 'none',\n },\n '.cm-content': {\n color: 'var(--foreground)',\n caretColor: 'var(--foreground)',\n },\n '.cm-activeLine': {\n backgroundColor: 'transparent',\n },\n '.cm-lineNumbers .cm-gutterElement': {\n color: 'var(--placeholder)',\n },\n '.cm-activeLineGutter': {\n backgroundColor: 'transparent',\n color: 'var(--muted-foreground)',\n },\n '.cm-cursor, .cm-dropCursor': {\n borderLeftColor: 'var(--foreground)',\n },\n '&.cm-focused .cm-selectionBackground, & .cm-line::selection, & .cm-selectionLayer .cm-selectionBackground, .cm-content ::selection':\n {\n background: 'var(--info-edge) !important',\n },\n '.cm-tooltip-autocomplete': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n borderRadius: '6px',\n boxShadow: 'var(--elevation-overlay)',\n },\n '.cm-tooltip-autocomplete > ul': {\n fontFamily: 'var(--font-mono)',\n },\n '.cm-completionLabel': {\n color: 'var(--foreground)',\n },\n '.cm-completionDetail': {\n color: 'var(--muted-foreground)',\n fontSize: 'var(--text-caption)',\n marginLeft: 'auto',\n paddingLeft: '12px',\n },\n '.cm-completionInfo': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n color: 'var(--muted-foreground)',\n padding: '8px 12px',\n },\n '.cm-completionIcon': {\n display: 'none',\n },\n 'ul.cm-completionList li[aria-selected]': {\n backgroundColor: 'var(--fill-hover)',\n color: 'var(--foreground)',\n },\n '.cm-line .cm-variable-highlight': {\n color: 'var(--warning-foreground) !important',\n fontWeight: '500',\n },\n });\n\n const highlightStyle = HighlightStyle.define([\n { tag: [t.comment, t.bracket], color: 'var(--placeholder)' },\n { tag: [t.string, t.meta, t.regexp], color: 'var(--syntax-string)' },\n { tag: [t.atom, t.bool, t.special(t.variableName)], color: 'var(--syntax-literal)' },\n { tag: [t.keyword, t.operator, t.tagName], color: 'var(--syntax-keyword)' },\n { tag: [t.function(t.propertyName), t.propertyName], color: 'var(--syntax-name)' },\n {\n tag: [t.definition(t.variableName), t.function(t.variableName), t.className, t.attributeName],\n color: 'var(--syntax-link)',\n },\n { tag: [t.variableName, t.number], color: 'var(--syntax-name)' },\n { tag: [t.name, t.quote], color: 'var(--syntax-string)' },\n { tag: t.heading, color: 'var(--syntax-link)', fontWeight: 'bold' },\n {\n tag: [t.heading1, t.heading2, t.heading3, t.heading4, t.heading5, t.heading6],\n color: 'var(--syntax-link)',\n fontWeight: 'bold',\n },\n { tag: [t.emphasis], fontStyle: 'italic', color: 'var(--foreground)' },\n { tag: [t.strong], fontWeight: 'bold', color: 'var(--foreground)' },\n { tag: t.link, color: 'var(--syntax-link)', textDecoration: 'underline' },\n { tag: t.url, color: 'var(--syntax-link)' },\n { tag: t.monospace, color: 'var(--foreground)' },\n { tag: t.strikethrough, textDecoration: 'line-through' },\n { tag: [t.deleted], color: 'var(--syntax-keyword)' },\n { tag: t.invalid, color: 'var(--destructive-foreground)' },\n { tag: [t.standard(t.tagName)], color: 'var(--syntax-string)' },\n ]);\n\n return [editorTheme, syntaxHighlighting(highlightStyle)];\n}\n\n// eslint-disable-next-line react-refresh/only-export-components -- shared hook intentionally co-located with the editor it themes\nexport const useCodemirrorTheme = (): Extension => {\n const isDark = useTheme().resolvedTheme === 'dark';\n return useMemo(() => (isDark ? buildDarkTheme() : buildLightTheme()), [isDark]);\n};\n\nconst codeEditorVariants = cva(\n cn(\n 'relative overflow-hidden font-mono outline-hidden focus-within:outline-hidden focus:outline-hidden',\n 'transition-colors duration-normal ease-out-custom',\n ),\n {\n variants: {\n variant: {\n default: cn(inputSurfaceAndFocusWithinStyle, 'rounded-md p-1', fieldErrorRimWithin),\n embedded: 'rounded-none border-none bg-transparent p-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nconst editorFocusAttributes = Prec.highest(\n EditorView.editorAttributes.of({\n style: 'outline: none',\n }),\n);\n\nconst editorFocusTheme = Prec.highest(\n EditorView.theme({\n '&': {\n outline: 'none',\n },\n '&.cm-focused': {\n outline: 'none',\n },\n '.cm-scroller': {\n outline: 'none',\n },\n '.cm-content': {\n outline: 'none',\n },\n '.cm-content:focus': {\n outline: 'none',\n },\n }),\n);\n\nconst editorFocusExtensions: Extension[] = [editorFocusAttributes, editorFocusTheme];\n\ntype CodeEditorContentAttributes = {\n 'aria-label': string;\n id?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: string;\n};\n\nexport type CodeEditorProps = {\n data?: Record<string, unknown> | Array<Record<string, unknown>>;\n value?: string;\n onChange?: (value: string) => void;\n showCopyButton?: boolean;\n className?: string;\n highlightVariables?: boolean;\n language?: CodeEditorLanguage;\n placeholder?: string;\n /** JSON Schema to enable variable autocomplete for {{variable}} placeholders (markdown only) */\n schema?: JsonSchema;\n autoFocus?: boolean;\n /** Show line numbers in the gutter (default: true) */\n lineNumbers?: boolean;\n /** Wrap long lines within the editor viewport (default: true) */\n lineWrapping?: boolean;\n /** When false, makes the editor read-only */\n editable?: boolean;\n} & VariantProps<typeof codeEditorVariants> &\n Omit<HTMLAttributes<HTMLDivElement>, 'onChange'>;\n\nexport const CodeEditor = forwardRef<ReactCodeMirrorRef, CodeEditorProps>(\n (\n {\n data,\n value,\n onChange,\n showCopyButton = true,\n className,\n language = 'json',\n highlightVariables = false,\n placeholder,\n schema,\n autoFocus,\n lineNumbers = true,\n lineWrapping = true,\n editable,\n variant,\n id,\n 'aria-label': ariaLabel = 'Code editor',\n 'aria-describedby': ariaDescribedBy,\n 'aria-invalid': ariaInvalid,\n ...props\n },\n ref,\n ) => {\n const theme = useCodemirrorTheme();\n const formattedCode = data ? JSON.stringify(data, null, 2) : (value ?? '');\n\n const extensions = useMemo(() => {\n const contentAttributes: CodeEditorContentAttributes = { 'aria-label': ariaLabel };\n if (id) contentAttributes.id = id;\n if (ariaDescribedBy) contentAttributes['aria-describedby'] = ariaDescribedBy;\n if (ariaInvalid !== undefined) contentAttributes['aria-invalid'] = String(ariaInvalid);\n\n const exts: Extension[] = [...editorFocusExtensions, EditorView.contentAttributes.of(contentAttributes)];\n\n if (lineWrapping) {\n exts.push(EditorView.lineWrapping);\n }\n\n if (language === 'json') {\n exts.push(jsonLanguage);\n } else if (language === 'markdown') {\n exts.push(markdown({ base: markdownLanguage, codeLanguages }));\n }\n\n if (highlightVariables && language === 'markdown') {\n exts.push(variableHighlight);\n }\n\n if (schema && language === 'markdown') {\n exts.push(createVariableAutocomplete(schema));\n }\n\n if (editable === false) {\n exts.push(EditorState.readOnly.of(true));\n }\n\n return exts;\n }, [language, highlightVariables, schema, editable, lineWrapping, id, ariaLabel, ariaDescribedBy, ariaInvalid]);\n\n return (\n <div className={cn(codeEditorVariants({ variant }), className)} {...props}>\n {showCopyButton && <CopyButton content={formattedCode} className=\"absolute top-2 right-2 z-20\" />}\n <CodeMirror\n ref={ref}\n value={formattedCode}\n theme={theme}\n extensions={extensions}\n onChange={onChange}\n editable={editable}\n aria-label={ariaLabel}\n placeholder={placeholder}\n height=\"100%\"\n style={{ height: '100%' }}\n autoFocus={autoFocus}\n basicSetup={{ lineNumbers }}\n />\n </div>\n );\n },\n);\n"],"names":["LanguageSupport","StreamLanguage","LanguageDescription","autocompletion","Decoration","MatchDecorator","ViewPlugin","draculaInit","t","EditorView","HighlightStyle","syntaxHighlighting","useTheme","useMemo","cva","cn","inputSurfaceAndFocusWithinStyle","fieldErrorRimWithin","Prec","forwardRef","jsonLanguage","markdown","markdownLanguage","EditorState","jsxs","jsx","CopyButton"],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
- const codeEditor = require('../code-editor-DzQEzQJh.cjs');
5
+ const codeEditor = require('../code-editor-B_wPmKPf.cjs');
6
6
  const highlight = require('../highlight-DK1dn-Fh.cjs');
7
7
 
8
8
 
@@ -1,3 +1,3 @@
1
- export { C as CodeEditor, V as VARIABLE_PATTERN, c as codeLanguages, a as createVariableAutocomplete, f as flattenSchemaToVariables, u as useCodemirrorTheme, v as variableHighlight } from '../code-editor-IR5UX112.js';
1
+ export { C as CodeEditor, V as VARIABLE_PATTERN, c as codeLanguages, a as createVariableAutocomplete, f as flattenSchemaToVariables, u as useCodemirrorTheme, v as variableHighlight } from '../code-editor-28chVxHw.js';
2
2
  export { h as highlight, l as languageForPath } from '../highlight-BmpoELR4.js';
3
3
  //# sourceMappingURL=CodeEditor.es.js.map
@@ -296,8 +296,8 @@ function EnvironmentVariablesEditorRow({
296
296
  const valueInputId = `input-${valueFieldName}`;
297
297
  const revealValueLabel = editor.isValueRevealed(index) ? "Hide value" : "Show value";
298
298
  const removeRowLabel = `Remove environment variable ${row.key.trim() || index + 1}`;
299
- function handlePaste(text) {
300
- return editor.handlePaste(index, text);
299
+ function handlePaste(text, field) {
300
+ return editor.handlePaste(index, text, field);
301
301
  }
302
302
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils_cn.cn("flex flex-col items-stretch gap-2 sm:flex-row sm:items-start", className), ...props, children: [
303
303
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(fieldBlock.FieldBlock.Layout, { children: /* @__PURE__ */ jsxRuntime.jsxs(fieldBlock.FieldBlock.Column, { children: [
@@ -314,7 +314,7 @@ function EnvironmentVariablesEditorRow({
314
314
  "aria-describedby": keyError ? fieldErrorId.fieldErrorId(keyFieldName) : void 0,
315
315
  onChange: (event) => editor.updateRow(index, { key: event.target.value }),
316
316
  onPaste: (event) => {
317
- if (handlePaste(event.clipboardData.getData("text"))) {
317
+ if (handlePaste(event.clipboardData.getData("text"), "key")) {
318
318
  event.preventDefault();
319
319
  }
320
320
  }
@@ -338,7 +338,7 @@ function EnvironmentVariablesEditorRow({
338
338
  "aria-describedby": valueError ? fieldErrorId.fieldErrorId(valueFieldName) : void 0,
339
339
  onChange: (event) => editor.updateRow(index, { value: event.target.value }),
340
340
  onPaste: (event) => {
341
- if (handlePaste(event.clipboardData.getData("text"))) {
341
+ if (handlePaste(event.clipboardData.getData("text"), "value")) {
342
342
  event.preventDefault();
343
343
  }
344
344
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EnvironmentVariablesEditor.cjs.js","sources":["../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-actions.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-context.ts","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-add-button.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-messages.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-duplicate-keys-error.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-paste-hint.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-read-only-empty.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-read-only-header.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-read-only-item.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-read-only-list.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-root.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-row.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-rows.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-upload-button.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-upload.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-upload-error.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor.tsx"],"sourcesContent":["import type { EnvironmentVariablesEditorActionsProps } from './environment-variables-editor.types';\nimport { cn } from '@/lib/utils';\n\nexport function EnvironmentVariablesEditorActions({ className, ...props }: EnvironmentVariablesEditorActionsProps) {\n return <div className={cn('flex flex-wrap items-center gap-2', className)} {...props} />;\n}\n","import { createContext, use } from 'react';\n\nimport type { EnvironmentVariablesEditorRowErrors } from './environment-variables-editor.types';\nimport type { EnvironmentVariablesEditorController } from '@/hooks/use-environment-variables-editor';\nimport type { EnvironmentVariableEntry } from '@/lib/env-file';\n\ntype EnvironmentVariablesEditorRenderController = Pick<\n EnvironmentVariablesEditorController<EnvironmentVariableEntry>,\n | 'rows'\n | 'uploadError'\n | 'fileInputRef'\n | 'hasDuplicateKeys'\n | 'updateRow'\n | 'removeRow'\n | 'handleFileUpload'\n | 'handlePaste'\n | 'getRowId'\n | 'isValueRevealed'\n | 'toggleValueVisibility'\n | 'rowHasDuplicateKey'\n> & {\n appendRow: () => void;\n};\n\nexport interface EnvironmentVariablesEditorContextValue {\n editor: EnvironmentVariablesEditorRenderController;\n disabled: boolean;\n readOnly: boolean;\n rowErrors?: EnvironmentVariablesEditorRowErrors;\n}\n\nexport const EnvironmentVariablesEditorContext = createContext<EnvironmentVariablesEditorContextValue | null>(null);\n\nexport const EnvironmentVariablesEditorReadOnlyListContext = createContext({\n showIcon: false,\n});\n\nexport function useEnvironmentVariablesEditorContext(componentName: string) {\n const context = use(EnvironmentVariablesEditorContext);\n\n if (!context) {\n throw new Error(`${componentName} must be used within EnvironmentVariablesEditor.Root`);\n }\n\n return context;\n}\n","import { PlusIcon } from 'lucide-react';\n\nimport { useEnvironmentVariablesEditorContext } from './environment-variables-editor-context';\nimport type { EnvironmentVariablesEditorAddButtonProps } from './environment-variables-editor.types';\nimport { Button } from '@/ds/components/Button';\nimport { cn } from '@/lib/utils';\n\nexport function EnvironmentVariablesEditorAddButton({\n className,\n children,\n ...props\n}: EnvironmentVariablesEditorAddButtonProps) {\n const { editor, disabled, readOnly } = useEnvironmentVariablesEditorContext('EnvironmentVariablesEditor.AddButton');\n\n if (readOnly) return null;\n\n return (\n <div className={cn('flex items-center gap-2', className)} {...props}>\n <span aria-hidden=\"true\" className=\"h-px flex-1 bg-border\" />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n disabled={disabled}\n onClick={() => editor.appendRow()}\n icon={<PlusIcon />}\n >\n {children ?? 'Add Variable'}\n </Button>\n <span aria-hidden=\"true\" className=\"h-px flex-1 bg-border\" />\n </div>\n );\n}\n","import type { EnvironmentVariablesEditorMessagesProps } from './environment-variables-editor.types';\nimport { Notice } from '@/ds/components/Notice';\n\nexport function EnvironmentVariablesEditorMessages({\n error,\n children,\n variant = 'destructive',\n ...props\n}: EnvironmentVariablesEditorMessagesProps) {\n const message = children ?? error;\n\n if (!message) return null;\n\n return (\n <Notice variant={variant} {...props}>\n <Notice.Message>{message}</Notice.Message>\n </Notice>\n );\n}\n","import { useEnvironmentVariablesEditorContext } from './environment-variables-editor-context';\nimport { EnvironmentVariablesEditorMessages } from './environment-variables-editor-messages';\nimport type { EnvironmentVariablesEditorDuplicateKeysErrorProps } from './environment-variables-editor.types';\nimport { DUPLICATE_ENVIRONMENT_VARIABLE_MESSAGE } from '@/lib/env-file';\n\nexport function EnvironmentVariablesEditorDuplicateKeysError({\n message = DUPLICATE_ENVIRONMENT_VARIABLE_MESSAGE,\n ...props\n}: EnvironmentVariablesEditorDuplicateKeysErrorProps) {\n const { editor } = useEnvironmentVariablesEditorContext('EnvironmentVariablesEditor.DuplicateKeysError');\n\n if (!editor.hasDuplicateKeys) return null;\n\n return <EnvironmentVariablesEditorMessages error={message} {...props} />;\n}\n","import { useEnvironmentVariablesEditorContext } from './environment-variables-editor-context';\nimport type { EnvironmentVariablesEditorPasteHintProps } from './environment-variables-editor.types';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport const DEFAULT_ENVIRONMENT_VARIABLE_PASTE_HINT = 'Tip: paste a .env file into any field to import it';\n\nexport function EnvironmentVariablesEditorPasteHint({\n className,\n children,\n ...props\n}: EnvironmentVariablesEditorPasteHintProps) {\n const { readOnly } = useEnvironmentVariablesEditorContext('EnvironmentVariablesEditor.PasteHint');\n\n if (readOnly) return null;\n\n return (\n <Txt as=\"p\" variant=\"meta\" tone=\"muted\" className={cn('text-right', className)} {...props}>\n {children ?? DEFAULT_ENVIRONMENT_VARIABLE_PASTE_HINT}\n </Txt>\n );\n}\n","import type { EnvironmentVariablesEditorReadOnlyEmptyProps } from './environment-variables-editor.types';\nimport { DataList } from '@/ds/components/DataList/data-list';\n\nexport function EnvironmentVariablesEditorReadOnlyEmpty({\n message = 'No environment variables found',\n ...props\n}: EnvironmentVariablesEditorReadOnlyEmptyProps) {\n return <DataList.NoMatch message={message} {...props} />;\n}\n","import { use } from 'react';\n\nimport { EnvironmentVariablesEditorReadOnlyListContext } from './environment-variables-editor-context';\nimport type { EnvironmentVariablesEditorReadOnlyHeaderProps } from './environment-variables-editor.types';\nimport { DataList } from '@/ds/components/DataList/data-list';\n\nexport function EnvironmentVariablesEditorReadOnlyHeader({\n className,\n nameLabel = 'Key',\n valueLabel = 'Value',\n updatedAtLabel = 'Last Updated',\n ...props\n}: EnvironmentVariablesEditorReadOnlyHeaderProps) {\n const { showIcon } = use(EnvironmentVariablesEditorReadOnlyListContext);\n\n return (\n <DataList.Top className={className} {...props}>\n {showIcon && (\n <DataList.TopCell aria-hidden=\"true\" className=\"justify-center\">\n <span />\n </DataList.TopCell>\n )}\n <DataList.TopCell>{nameLabel}</DataList.TopCell>\n <DataList.TopCell>{valueLabel}</DataList.TopCell>\n <DataList.TopCell className=\"justify-end\">{updatedAtLabel}</DataList.TopCell>\n </DataList.Top>\n );\n}\n","import { CheckIcon, Code2Icon, CopyIcon, EyeIcon, EyeOffIcon } from 'lucide-react';\nimport { use, useState } from 'react';\nimport type { ReactNode } from 'react';\n\nimport { EnvironmentVariablesEditorReadOnlyListContext } from './environment-variables-editor-context';\nimport type { EnvironmentVariablesEditorReadOnlyItemProps } from './environment-variables-editor.types';\nimport { Button } from '@/ds/components/Button';\nimport { DataList } from '@/ds/components/DataList/data-list';\nimport { Txt } from '@/ds/components/Txt';\nimport { useCopyToClipboard } from '@/hooks/use-copy-to-clipboard';\nimport { cn } from '@/lib/utils';\n\nexport function EnvironmentVariablesEditorReadOnlyItem({\n className,\n name,\n value,\n copyValue,\n copyLabel = 'Copy value',\n updatedAt,\n revealed,\n defaultRevealed,\n onRevealedChange,\n actor,\n icon,\n ...props\n}: EnvironmentVariablesEditorReadOnlyItemProps) {\n const { showIcon } = use(EnvironmentVariablesEditorReadOnlyListContext);\n const [uncontrolledRevealed, setUncontrolledRevealed] = useState(defaultRevealed ?? false);\n const { isCopied, copyToClipboard } = useCopyToClipboard({ copiedDuration: 1500, showToast: false });\n const isRevealed = revealed ?? uncontrolledRevealed;\n const displayedValue = isRevealed ? value : '************';\n const leadingIcon = icon ?? <Code2Icon />;\n const resolvedCopyValue = copyValue ?? getCopyableReadOnlyValue(value);\n const canCopyValue = isRevealed && Boolean(resolvedCopyValue);\n\n function toggleRevealed() {\n const nextRevealed = !isRevealed;\n\n if (revealed === undefined) {\n setUncontrolledRevealed(nextRevealed);\n }\n\n onRevealedChange?.(nextRevealed);\n }\n\n function handleCopyValue() {\n if (!resolvedCopyValue) return;\n\n copyToClipboard(resolvedCopyValue);\n }\n\n return (\n <DataList.RowStatic className={cn('min-h-14', className)} {...props}>\n {showIcon && (\n <DataList.Cell className=\"justify-items-center overflow-visible\">\n <span className=\"flex size-7 items-center justify-center rounded-full border border-border text-muted-foreground [&>svg]:size-3.5\">\n {leadingIcon}\n </span>\n </DataList.Cell>\n )}\n\n <DataList.TextCell font=\"mono\" className=\"text-caption text-foreground\">\n {name}\n </DataList.TextCell>\n\n <DataList.Cell className=\"min-w-0\">\n {value !== undefined && (\n <span className=\"flex min-w-0 items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label={isRevealed ? 'Hide value' : 'Show value'}\n onClick={toggleRevealed}\n >\n {isRevealed ? <EyeOffIcon aria-hidden /> : <EyeIcon aria-hidden />}\n </Button>\n <span className=\"group relative flex min-w-0 flex-1 items-center\">\n <Txt\n as=\"span\"\n variant=\"meta\"\n tone=\"muted\"\n font=\"mono\"\n className={cn('block min-w-0 flex-1 truncate', canCopyValue && 'pr-7')}\n >\n {displayedValue}\n </Txt>\n {canCopyValue && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label={isCopied ? 'Copied value' : copyLabel}\n tooltip={isCopied ? 'Copied' : copyLabel}\n className=\"absolute right-0 opacity-0 transition-opacity group-hover:opacity-100 focus:opacity-100 focus-visible:opacity-100\"\n onClick={handleCopyValue}\n >\n {isCopied ? <CheckIcon aria-hidden /> : <CopyIcon aria-hidden />}\n </Button>\n )}\n </span>\n </span>\n )}\n </DataList.Cell>\n\n <DataList.Cell className=\"min-w-0 justify-items-end text-meta text-muted-foreground\">\n {(updatedAt || actor) && (\n <span className=\"flex min-w-0 items-center gap-2\">\n <span className=\"truncate\">{updatedAt}</span>\n {actor}\n </span>\n )}\n </DataList.Cell>\n </DataList.RowStatic>\n );\n}\n\nfunction getCopyableReadOnlyValue(value: ReactNode) {\n if (typeof value === 'string' || typeof value === 'number') {\n return String(value);\n }\n\n return undefined;\n}\n","import { useMemo } from 'react';\n\nimport { EnvironmentVariablesEditorReadOnlyListContext } from './environment-variables-editor-context';\nimport { EnvironmentVariablesEditorReadOnlyHeader } from './environment-variables-editor-read-only-header';\nimport type { EnvironmentVariablesEditorReadOnlyListProps } from './environment-variables-editor.types';\nimport { DataList } from '@/ds/components/DataList/data-list';\nimport { cn } from '@/lib/utils';\n\nconst READ_ONLY_COLUMNS = 'minmax(12rem,1.4fr) minmax(8rem,0.9fr) minmax(8rem,auto)';\nconst READ_ONLY_COLUMNS_WITH_ICON = `auto ${READ_ONLY_COLUMNS}`;\n\nexport function EnvironmentVariablesEditorReadOnlyList({\n className,\n children,\n columns,\n header,\n showHeader = true,\n showIcon = false,\n nameLabel,\n valueLabel,\n updatedAtLabel,\n scrollRef,\n ...props\n}: EnvironmentVariablesEditorReadOnlyListProps) {\n const resolvedColumns = columns ?? (showIcon ? READ_ONLY_COLUMNS_WITH_ICON : READ_ONLY_COLUMNS);\n const contextValue = useMemo(() => ({ showIcon }), [showIcon]);\n\n return (\n <EnvironmentVariablesEditorReadOnlyListContext.Provider value={contextValue}>\n <DataList columns={resolvedColumns} scrollRef={scrollRef} className={cn('min-h-0', className)} {...props}>\n {showHeader &&\n (header ?? (\n <EnvironmentVariablesEditorReadOnlyHeader\n nameLabel={nameLabel}\n valueLabel={valueLabel}\n updatedAtLabel={updatedAtLabel}\n />\n ))}\n {children}\n </DataList>\n </EnvironmentVariablesEditorReadOnlyListContext.Provider>\n );\n}\n","import { useMemo } from 'react';\n\nimport { EnvironmentVariablesEditorContext } from './environment-variables-editor-context';\nimport type { EnvironmentVariablesEditorContextValue } from './environment-variables-editor-context';\nimport { EnvironmentVariablesEditorPasteHint } from './environment-variables-editor-paste-hint';\nimport type { EnvironmentVariablesEditorRootProps } from './environment-variables-editor.types';\nimport type { EnvironmentVariableEntry } from '@/lib/env-file';\n\nexport function EnvironmentVariablesEditorRoot<TRow extends EnvironmentVariableEntry = EnvironmentVariableEntry>({\n editor,\n className,\n children,\n disabled,\n readOnly,\n rowErrors,\n hidePasteHint,\n ...props\n}: EnvironmentVariablesEditorRootProps<TRow>) {\n const contextValue = useMemo<EnvironmentVariablesEditorContextValue>(\n () => ({\n editor: {\n rows: editor.rows,\n uploadError: editor.uploadError,\n fileInputRef: editor.fileInputRef,\n hasDuplicateKeys: editor.hasDuplicateKeys,\n updateRow: editor.updateRow,\n removeRow: editor.removeRow,\n handleFileUpload: editor.handleFileUpload,\n handlePaste: editor.handlePaste,\n getRowId: editor.getRowId,\n isValueRevealed: editor.isValueRevealed,\n toggleValueVisibility: editor.toggleValueVisibility,\n rowHasDuplicateKey: editor.rowHasDuplicateKey,\n appendRow: () => editor.appendRow(),\n },\n disabled: Boolean(disabled),\n readOnly: Boolean(readOnly),\n rowErrors,\n }),\n [editor, disabled, readOnly, rowErrors],\n );\n\n return (\n <EnvironmentVariablesEditorContext.Provider value={contextValue}>\n <div className={className} {...props}>\n {children}\n {!readOnly && !hidePasteHint && <EnvironmentVariablesEditorPasteHint />}\n </div>\n </EnvironmentVariablesEditorContext.Provider>\n );\n}\n","import { EyeIcon, EyeOffIcon, TrashIcon } from 'lucide-react';\n\nimport { useEnvironmentVariablesEditorContext } from './environment-variables-editor-context';\nimport type { EnvironmentVariablesEditorRowProps } from './environment-variables-editor.types';\nimport { Button } from '@/ds/components/Button';\nimport { FieldBlock, fieldErrorId } from '@/ds/components/FormFieldBlocks';\nimport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from '@/ds/components/InputGroup';\nimport { DUPLICATE_ENVIRONMENT_VARIABLE_MESSAGE } from '@/lib/env-file';\nimport { cn } from '@/lib/utils';\n\nexport function EnvironmentVariablesEditorRow({\n row,\n index,\n rowErrors,\n keyLabel = 'Key',\n valueLabel = 'Value',\n keyPlaceholder = 'e.g: OPEN_AI_KEY',\n valuePlaceholder = 'e.g: sk-xxxxxxxx',\n duplicateKeyMessage = DUPLICATE_ENVIRONMENT_VARIABLE_MESSAGE,\n className,\n ...props\n}: EnvironmentVariablesEditorRowProps) {\n const {\n editor,\n disabled,\n readOnly,\n rowErrors: contextRowErrors,\n } = useEnvironmentVariablesEditorContext('EnvironmentVariablesEditor.Row');\n const isDisabled = disabled || readOnly;\n const resolvedRowErrors = rowErrors ?? contextRowErrors;\n const keyError = resolvedRowErrors?.[index]?.key ?? (editor.rowHasDuplicateKey(index) ? duplicateKeyMessage : null);\n const valueError = resolvedRowErrors?.[index]?.value;\n const keyFieldName = `env-key-${index}`;\n const valueFieldName = `env-value-${index}`;\n const keyInputId = `input-${keyFieldName}`;\n const valueInputId = `input-${valueFieldName}`;\n const revealValueLabel = editor.isValueRevealed(index) ? 'Hide value' : 'Show value';\n const removeRowLabel = `Remove environment variable ${row.key.trim() || index + 1}`;\n\n function handlePaste(text: string) {\n return editor.handlePaste(index, text);\n }\n\n return (\n <div className={cn('flex flex-col items-stretch gap-2 sm:flex-row sm:items-start', className)} {...props}>\n <div className=\"flex-1\">\n <FieldBlock.Layout>\n <FieldBlock.Column>\n <FieldBlock.Label name={keyFieldName}>{keyLabel}</FieldBlock.Label>\n <InputGroup className=\"w-full\">\n <InputGroupInput\n id={keyInputId}\n placeholder={keyPlaceholder}\n className=\"font-mono\"\n value={row.key}\n disabled={isDisabled}\n error={Boolean(keyError)}\n aria-describedby={keyError ? fieldErrorId(keyFieldName) : undefined}\n onChange={event => editor.updateRow(index, { key: event.target.value })}\n onPaste={event => {\n if (handlePaste(event.clipboardData.getData('text'))) {\n event.preventDefault();\n }\n }}\n />\n </InputGroup>\n {keyError && <FieldBlock.ErrorMsg name={keyFieldName}>{keyError}</FieldBlock.ErrorMsg>}\n </FieldBlock.Column>\n </FieldBlock.Layout>\n </div>\n\n <div className=\"flex-1\">\n <FieldBlock.Layout>\n <FieldBlock.Column>\n <FieldBlock.Label name={valueFieldName}>{valueLabel}</FieldBlock.Label>\n <InputGroup className=\"w-full\">\n <InputGroupInput\n id={valueInputId}\n placeholder={valuePlaceholder}\n className=\"font-mono\"\n type={editor.isValueRevealed(index) ? 'text' : 'password'}\n value={row.value}\n disabled={isDisabled}\n error={Boolean(valueError)}\n aria-describedby={valueError ? fieldErrorId(valueFieldName) : undefined}\n onChange={event => editor.updateRow(index, { value: event.target.value })}\n onPaste={event => {\n if (handlePaste(event.clipboardData.getData('text'))) {\n event.preventDefault();\n }\n }}\n />\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n disabled={isDisabled}\n aria-label={revealValueLabel}\n tooltip={revealValueLabel}\n onClick={() => editor.toggleValueVisibility(index)}\n >\n {editor.isValueRevealed(index) ? <EyeOffIcon aria-hidden /> : <EyeIcon aria-hidden />}\n </InputGroupButton>\n </InputGroupAddon>\n </InputGroup>\n {valueError && <FieldBlock.ErrorMsg name={valueFieldName}>{valueError}</FieldBlock.ErrorMsg>}\n </FieldBlock.Column>\n </FieldBlock.Layout>\n </div>\n\n {!readOnly && (\n <div className=\"flex items-center gap-2 self-end sm:self-auto sm:pt-7\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-md\"\n disabled={disabled}\n aria-label={removeRowLabel}\n tooltip=\"Remove variable\"\n onClick={() => editor.removeRow(index)}\n >\n <TrashIcon />\n </Button>\n </div>\n )}\n </div>\n );\n}\n","import { useEnvironmentVariablesEditorContext } from './environment-variables-editor-context';\nimport { EnvironmentVariablesEditorRow } from './environment-variables-editor-row';\nimport type { EnvironmentVariablesEditorRowsProps } from './environment-variables-editor.types';\nimport { cn } from '@/lib/utils';\n\nexport function EnvironmentVariablesEditorRows({\n className,\n rowErrors,\n keyLabel,\n valueLabel,\n keyPlaceholder,\n valuePlaceholder,\n duplicateKeyMessage,\n ...props\n}: EnvironmentVariablesEditorRowsProps) {\n const { editor, rowErrors: contextRowErrors } = useEnvironmentVariablesEditorContext(\n 'EnvironmentVariablesEditor.Rows',\n );\n const resolvedRowErrors = rowErrors ?? contextRowErrors;\n\n return (\n <div className={cn('space-y-2', className)} {...props}>\n {editor.rows.map((row, index) => (\n <EnvironmentVariablesEditorRow\n key={editor.getRowId(index)}\n row={row}\n index={index}\n rowErrors={resolvedRowErrors}\n keyLabel={keyLabel}\n valueLabel={valueLabel}\n keyPlaceholder={keyPlaceholder}\n valuePlaceholder={valuePlaceholder}\n duplicateKeyMessage={duplicateKeyMessage}\n />\n ))}\n </div>\n );\n}\n","import { UploadIcon } from 'lucide-react';\n\nimport { useEnvironmentVariablesEditorContext } from './environment-variables-editor-context';\nimport type { EnvironmentVariablesEditorUploadButtonProps } from './environment-variables-editor.types';\nimport { Button } from '@/ds/components/Button';\n\nexport function EnvironmentVariablesEditorUploadButton({\n children = 'Import .env',\n inputLabel = 'Import .env file',\n disabled,\n onClick,\n type = 'button',\n variant = 'ghost',\n size = 'sm',\n ...props\n}: EnvironmentVariablesEditorUploadButtonProps) {\n const {\n editor,\n disabled: contextDisabled,\n readOnly,\n } = useEnvironmentVariablesEditorContext('EnvironmentVariablesEditor.UploadButton');\n const isDisabled = contextDisabled || disabled;\n\n if (readOnly) return null;\n\n return (\n <>\n <input\n ref={editor.fileInputRef}\n type=\"file\"\n accept=\".env,text/plain\"\n aria-label={inputLabel}\n className=\"hidden\"\n disabled={isDisabled}\n onChange={editor.handleFileUpload}\n />\n <Button\n type={type}\n variant={variant}\n size={size}\n disabled={isDisabled}\n onClick={event => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n editor.fileInputRef.current?.click();\n }\n }}\n icon={<UploadIcon />}\n {...props}\n >\n {children}\n </Button>\n </>\n );\n}\n","import { useEnvironmentVariablesEditorContext } from './environment-variables-editor-context';\nimport { EnvironmentVariablesEditorUploadButton } from './environment-variables-editor-upload-button';\nimport type { EnvironmentVariablesEditorUploadProps } from './environment-variables-editor.types';\nimport { cn } from '@/lib/utils';\n\nexport function EnvironmentVariablesEditorUpload({\n className,\n children,\n ...props\n}: EnvironmentVariablesEditorUploadProps) {\n const { readOnly } = useEnvironmentVariablesEditorContext('EnvironmentVariablesEditor.Upload');\n\n if (readOnly) return null;\n\n return (\n <div className={cn('flex flex-wrap items-center justify-end gap-2', className)} {...props}>\n {children ?? <EnvironmentVariablesEditorUploadButton />}\n </div>\n );\n}\n","import { useEnvironmentVariablesEditorContext } from './environment-variables-editor-context';\nimport { EnvironmentVariablesEditorMessages } from './environment-variables-editor-messages';\nimport type { EnvironmentVariablesEditorUploadErrorProps } from './environment-variables-editor.types';\n\nexport function EnvironmentVariablesEditorUploadError(props: EnvironmentVariablesEditorUploadErrorProps) {\n const { editor } = useEnvironmentVariablesEditorContext('EnvironmentVariablesEditor.UploadError');\n\n if (!editor.uploadError) return null;\n\n return <EnvironmentVariablesEditorMessages error={editor.uploadError} {...props} />;\n}\n","import { EnvironmentVariablesEditorActions } from './environment-variables-editor-actions';\nimport { EnvironmentVariablesEditorAddButton } from './environment-variables-editor-add-button';\nimport { EnvironmentVariablesEditorDuplicateKeysError } from './environment-variables-editor-duplicate-keys-error';\nimport { EnvironmentVariablesEditorMessages } from './environment-variables-editor-messages';\nimport { EnvironmentVariablesEditorPasteHint } from './environment-variables-editor-paste-hint';\nimport { EnvironmentVariablesEditorReadOnlyEmpty } from './environment-variables-editor-read-only-empty';\nimport { EnvironmentVariablesEditorReadOnlyHeader } from './environment-variables-editor-read-only-header';\nimport { EnvironmentVariablesEditorReadOnlyItem } from './environment-variables-editor-read-only-item';\nimport { EnvironmentVariablesEditorReadOnlyList } from './environment-variables-editor-read-only-list';\nimport { EnvironmentVariablesEditorRoot } from './environment-variables-editor-root';\nimport { EnvironmentVariablesEditorRow } from './environment-variables-editor-row';\nimport { EnvironmentVariablesEditorRows } from './environment-variables-editor-rows';\nimport { EnvironmentVariablesEditorUpload } from './environment-variables-editor-upload';\nimport { EnvironmentVariablesEditorUploadButton } from './environment-variables-editor-upload-button';\nimport { EnvironmentVariablesEditorUploadError } from './environment-variables-editor-upload-error';\nimport type { EnvironmentVariablesEditorProps } from './environment-variables-editor.types';\nimport type { EnvironmentVariableEntry } from '@/lib/env-file';\nimport { DUPLICATE_ENVIRONMENT_VARIABLE_MESSAGE } from '@/lib/env-file';\nimport { cn } from '@/lib/utils';\n\nconst renderEnvironmentVariablesEditor = <TRow extends EnvironmentVariableEntry = EnvironmentVariableEntry>({\n className,\n children,\n addLabel = 'Add Variable',\n keyLabel = 'Key',\n valueLabel = 'Value',\n keyPlaceholder = 'e.g: OPEN_AI_KEY',\n valuePlaceholder = 'e.g: sk-xxxxxxxx',\n duplicateKeyMessage = DUPLICATE_ENVIRONMENT_VARIABLE_MESSAGE,\n rowErrors,\n error,\n actions,\n ...props\n}: EnvironmentVariablesEditorProps<TRow>) => {\n return (\n <EnvironmentVariablesEditorRoot\n className={cn(!children && 'space-y-3', className)}\n rowErrors={rowErrors}\n {...props}\n >\n {children ?? (\n <>\n <EnvironmentVariablesEditorUpload>\n <EnvironmentVariablesEditorUploadButton />\n </EnvironmentVariablesEditorUpload>\n <EnvironmentVariablesEditorUploadError />\n <EnvironmentVariablesEditorRows\n rowErrors={rowErrors}\n keyLabel={keyLabel}\n valueLabel={valueLabel}\n keyPlaceholder={keyPlaceholder}\n valuePlaceholder={valuePlaceholder}\n duplicateKeyMessage={duplicateKeyMessage}\n />\n <EnvironmentVariablesEditorAddButton>{addLabel}</EnvironmentVariablesEditorAddButton>\n <EnvironmentVariablesEditorDuplicateKeysError message={duplicateKeyMessage} />\n <EnvironmentVariablesEditorMessages error={error} />\n {actions && <EnvironmentVariablesEditorActions>{actions}</EnvironmentVariablesEditorActions>}\n </>\n )}\n </EnvironmentVariablesEditorRoot>\n );\n};\n\nexport const EnvironmentVariablesEditor = Object.assign(renderEnvironmentVariablesEditor, {\n Root: EnvironmentVariablesEditorRoot,\n Upload: EnvironmentVariablesEditorUpload,\n UploadButton: EnvironmentVariablesEditorUploadButton,\n UploadError: EnvironmentVariablesEditorUploadError,\n Rows: EnvironmentVariablesEditorRows,\n Row: EnvironmentVariablesEditorRow,\n AddButton: EnvironmentVariablesEditorAddButton,\n PasteHint: EnvironmentVariablesEditorPasteHint,\n Messages: EnvironmentVariablesEditorMessages,\n DuplicateKeysError: EnvironmentVariablesEditorDuplicateKeysError,\n Actions: EnvironmentVariablesEditorActions,\n ReadOnlyList: EnvironmentVariablesEditorReadOnlyList,\n ReadOnlyHeader: EnvironmentVariablesEditorReadOnlyHeader,\n ReadOnlyEmpty: EnvironmentVariablesEditorReadOnlyEmpty,\n ReadOnlyItem: EnvironmentVariablesEditorReadOnlyItem,\n});\n\nexport type {\n EnvironmentVariablesEditorActionsProps,\n EnvironmentVariablesEditorAddButtonProps,\n EnvironmentVariablesEditorDuplicateKeysErrorProps,\n EnvironmentVariablesEditorMessagesProps,\n EnvironmentVariablesEditorPasteHintProps,\n EnvironmentVariablesEditorProps,\n EnvironmentVariablesEditorReadOnlyEmptyProps,\n EnvironmentVariablesEditorReadOnlyHeaderProps,\n EnvironmentVariablesEditorReadOnlyItemProps,\n EnvironmentVariablesEditorReadOnlyListProps,\n EnvironmentVariablesEditorRootProps,\n EnvironmentVariablesEditorRowErrors,\n EnvironmentVariablesEditorRowProps,\n EnvironmentVariablesEditorRowsProps,\n EnvironmentVariablesEditorUploadButtonProps,\n EnvironmentVariablesEditorUploadErrorProps,\n EnvironmentVariablesEditorUploadProps,\n} from './environment-variables-editor.types';\n"],"names":["jsx","cn","createContext","use","jsxs","Button","PlusIcon","Notice","DUPLICATE_ENVIRONMENT_VARIABLE_MESSAGE","Txt","DataList","useState","useCopyToClipboard","Code2Icon","EyeOffIcon","EyeIcon","CheckIcon","CopyIcon","useMemo","FieldBlock","InputGroup","InputGroupInput","fieldErrorId","InputGroupAddon","InputGroupButton","TrashIcon","Fragment","UploadIcon"],"mappings":"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"}
1
+ {"version":3,"file":"EnvironmentVariablesEditor.cjs.js","sources":["../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-actions.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-context.ts","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-add-button.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-messages.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-duplicate-keys-error.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-paste-hint.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-read-only-empty.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-read-only-header.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-read-only-item.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-read-only-list.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-root.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-row.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-rows.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-upload-button.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-upload.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-upload-error.tsx","../../src/ds/components/EnvironmentVariablesEditor/environment-variables-editor.tsx"],"sourcesContent":["import type { EnvironmentVariablesEditorActionsProps } from './environment-variables-editor.types';\nimport { cn } from '@/lib/utils';\n\nexport function EnvironmentVariablesEditorActions({ className, ...props }: EnvironmentVariablesEditorActionsProps) {\n return <div className={cn('flex flex-wrap items-center gap-2', className)} {...props} />;\n}\n","import { createContext, use } from 'react';\n\nimport type { EnvironmentVariablesEditorRowErrors } from './environment-variables-editor.types';\nimport type { EnvironmentVariablesEditorController } from '@/hooks/use-environment-variables-editor';\nimport type { EnvironmentVariableEntry } from '@/lib/env-file';\n\ntype EnvironmentVariablesEditorRenderController = Pick<\n EnvironmentVariablesEditorController<EnvironmentVariableEntry>,\n | 'rows'\n | 'uploadError'\n | 'fileInputRef'\n | 'hasDuplicateKeys'\n | 'updateRow'\n | 'removeRow'\n | 'handleFileUpload'\n | 'handlePaste'\n | 'getRowId'\n | 'isValueRevealed'\n | 'toggleValueVisibility'\n | 'rowHasDuplicateKey'\n> & {\n appendRow: () => void;\n};\n\nexport interface EnvironmentVariablesEditorContextValue {\n editor: EnvironmentVariablesEditorRenderController;\n disabled: boolean;\n readOnly: boolean;\n rowErrors?: EnvironmentVariablesEditorRowErrors;\n}\n\nexport const EnvironmentVariablesEditorContext = createContext<EnvironmentVariablesEditorContextValue | null>(null);\n\nexport const EnvironmentVariablesEditorReadOnlyListContext = createContext({\n showIcon: false,\n});\n\nexport function useEnvironmentVariablesEditorContext(componentName: string) {\n const context = use(EnvironmentVariablesEditorContext);\n\n if (!context) {\n throw new Error(`${componentName} must be used within EnvironmentVariablesEditor.Root`);\n }\n\n return context;\n}\n","import { PlusIcon } from 'lucide-react';\n\nimport { useEnvironmentVariablesEditorContext } from './environment-variables-editor-context';\nimport type { EnvironmentVariablesEditorAddButtonProps } from './environment-variables-editor.types';\nimport { Button } from '@/ds/components/Button';\nimport { cn } from '@/lib/utils';\n\nexport function EnvironmentVariablesEditorAddButton({\n className,\n children,\n ...props\n}: EnvironmentVariablesEditorAddButtonProps) {\n const { editor, disabled, readOnly } = useEnvironmentVariablesEditorContext('EnvironmentVariablesEditor.AddButton');\n\n if (readOnly) return null;\n\n return (\n <div className={cn('flex items-center gap-2', className)} {...props}>\n <span aria-hidden=\"true\" className=\"h-px flex-1 bg-border\" />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n disabled={disabled}\n onClick={() => editor.appendRow()}\n icon={<PlusIcon />}\n >\n {children ?? 'Add Variable'}\n </Button>\n <span aria-hidden=\"true\" className=\"h-px flex-1 bg-border\" />\n </div>\n );\n}\n","import type { EnvironmentVariablesEditorMessagesProps } from './environment-variables-editor.types';\nimport { Notice } from '@/ds/components/Notice';\n\nexport function EnvironmentVariablesEditorMessages({\n error,\n children,\n variant = 'destructive',\n ...props\n}: EnvironmentVariablesEditorMessagesProps) {\n const message = children ?? error;\n\n if (!message) return null;\n\n return (\n <Notice variant={variant} {...props}>\n <Notice.Message>{message}</Notice.Message>\n </Notice>\n );\n}\n","import { useEnvironmentVariablesEditorContext } from './environment-variables-editor-context';\nimport { EnvironmentVariablesEditorMessages } from './environment-variables-editor-messages';\nimport type { EnvironmentVariablesEditorDuplicateKeysErrorProps } from './environment-variables-editor.types';\nimport { DUPLICATE_ENVIRONMENT_VARIABLE_MESSAGE } from '@/lib/env-file';\n\nexport function EnvironmentVariablesEditorDuplicateKeysError({\n message = DUPLICATE_ENVIRONMENT_VARIABLE_MESSAGE,\n ...props\n}: EnvironmentVariablesEditorDuplicateKeysErrorProps) {\n const { editor } = useEnvironmentVariablesEditorContext('EnvironmentVariablesEditor.DuplicateKeysError');\n\n if (!editor.hasDuplicateKeys) return null;\n\n return <EnvironmentVariablesEditorMessages error={message} {...props} />;\n}\n","import { useEnvironmentVariablesEditorContext } from './environment-variables-editor-context';\nimport type { EnvironmentVariablesEditorPasteHintProps } from './environment-variables-editor.types';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport const DEFAULT_ENVIRONMENT_VARIABLE_PASTE_HINT = 'Tip: paste a .env file into any field to import it';\n\nexport function EnvironmentVariablesEditorPasteHint({\n className,\n children,\n ...props\n}: EnvironmentVariablesEditorPasteHintProps) {\n const { readOnly } = useEnvironmentVariablesEditorContext('EnvironmentVariablesEditor.PasteHint');\n\n if (readOnly) return null;\n\n return (\n <Txt as=\"p\" variant=\"meta\" tone=\"muted\" className={cn('text-right', className)} {...props}>\n {children ?? DEFAULT_ENVIRONMENT_VARIABLE_PASTE_HINT}\n </Txt>\n );\n}\n","import type { EnvironmentVariablesEditorReadOnlyEmptyProps } from './environment-variables-editor.types';\nimport { DataList } from '@/ds/components/DataList/data-list';\n\nexport function EnvironmentVariablesEditorReadOnlyEmpty({\n message = 'No environment variables found',\n ...props\n}: EnvironmentVariablesEditorReadOnlyEmptyProps) {\n return <DataList.NoMatch message={message} {...props} />;\n}\n","import { use } from 'react';\n\nimport { EnvironmentVariablesEditorReadOnlyListContext } from './environment-variables-editor-context';\nimport type { EnvironmentVariablesEditorReadOnlyHeaderProps } from './environment-variables-editor.types';\nimport { DataList } from '@/ds/components/DataList/data-list';\n\nexport function EnvironmentVariablesEditorReadOnlyHeader({\n className,\n nameLabel = 'Key',\n valueLabel = 'Value',\n updatedAtLabel = 'Last Updated',\n ...props\n}: EnvironmentVariablesEditorReadOnlyHeaderProps) {\n const { showIcon } = use(EnvironmentVariablesEditorReadOnlyListContext);\n\n return (\n <DataList.Top className={className} {...props}>\n {showIcon && (\n <DataList.TopCell aria-hidden=\"true\" className=\"justify-center\">\n <span />\n </DataList.TopCell>\n )}\n <DataList.TopCell>{nameLabel}</DataList.TopCell>\n <DataList.TopCell>{valueLabel}</DataList.TopCell>\n <DataList.TopCell className=\"justify-end\">{updatedAtLabel}</DataList.TopCell>\n </DataList.Top>\n );\n}\n","import { CheckIcon, Code2Icon, CopyIcon, EyeIcon, EyeOffIcon } from 'lucide-react';\nimport { use, useState } from 'react';\nimport type { ReactNode } from 'react';\n\nimport { EnvironmentVariablesEditorReadOnlyListContext } from './environment-variables-editor-context';\nimport type { EnvironmentVariablesEditorReadOnlyItemProps } from './environment-variables-editor.types';\nimport { Button } from '@/ds/components/Button';\nimport { DataList } from '@/ds/components/DataList/data-list';\nimport { Txt } from '@/ds/components/Txt';\nimport { useCopyToClipboard } from '@/hooks/use-copy-to-clipboard';\nimport { cn } from '@/lib/utils';\n\nexport function EnvironmentVariablesEditorReadOnlyItem({\n className,\n name,\n value,\n copyValue,\n copyLabel = 'Copy value',\n updatedAt,\n revealed,\n defaultRevealed,\n onRevealedChange,\n actor,\n icon,\n ...props\n}: EnvironmentVariablesEditorReadOnlyItemProps) {\n const { showIcon } = use(EnvironmentVariablesEditorReadOnlyListContext);\n const [uncontrolledRevealed, setUncontrolledRevealed] = useState(defaultRevealed ?? false);\n const { isCopied, copyToClipboard } = useCopyToClipboard({ copiedDuration: 1500, showToast: false });\n const isRevealed = revealed ?? uncontrolledRevealed;\n const displayedValue = isRevealed ? value : '************';\n const leadingIcon = icon ?? <Code2Icon />;\n const resolvedCopyValue = copyValue ?? getCopyableReadOnlyValue(value);\n const canCopyValue = isRevealed && Boolean(resolvedCopyValue);\n\n function toggleRevealed() {\n const nextRevealed = !isRevealed;\n\n if (revealed === undefined) {\n setUncontrolledRevealed(nextRevealed);\n }\n\n onRevealedChange?.(nextRevealed);\n }\n\n function handleCopyValue() {\n if (!resolvedCopyValue) return;\n\n copyToClipboard(resolvedCopyValue);\n }\n\n return (\n <DataList.RowStatic className={cn('min-h-14', className)} {...props}>\n {showIcon && (\n <DataList.Cell className=\"justify-items-center overflow-visible\">\n <span className=\"flex size-7 items-center justify-center rounded-full border border-border text-muted-foreground [&>svg]:size-3.5\">\n {leadingIcon}\n </span>\n </DataList.Cell>\n )}\n\n <DataList.TextCell font=\"mono\" className=\"text-caption text-foreground\">\n {name}\n </DataList.TextCell>\n\n <DataList.Cell className=\"min-w-0\">\n {value !== undefined && (\n <span className=\"flex min-w-0 items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label={isRevealed ? 'Hide value' : 'Show value'}\n onClick={toggleRevealed}\n >\n {isRevealed ? <EyeOffIcon aria-hidden /> : <EyeIcon aria-hidden />}\n </Button>\n <span className=\"group relative flex min-w-0 flex-1 items-center\">\n <Txt\n as=\"span\"\n variant=\"meta\"\n tone=\"muted\"\n font=\"mono\"\n className={cn('block min-w-0 flex-1 truncate', canCopyValue && 'pr-7')}\n >\n {displayedValue}\n </Txt>\n {canCopyValue && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label={isCopied ? 'Copied value' : copyLabel}\n tooltip={isCopied ? 'Copied' : copyLabel}\n className=\"absolute right-0 opacity-0 transition-opacity group-hover:opacity-100 focus:opacity-100 focus-visible:opacity-100\"\n onClick={handleCopyValue}\n >\n {isCopied ? <CheckIcon aria-hidden /> : <CopyIcon aria-hidden />}\n </Button>\n )}\n </span>\n </span>\n )}\n </DataList.Cell>\n\n <DataList.Cell className=\"min-w-0 justify-items-end text-meta text-muted-foreground\">\n {(updatedAt || actor) && (\n <span className=\"flex min-w-0 items-center gap-2\">\n <span className=\"truncate\">{updatedAt}</span>\n {actor}\n </span>\n )}\n </DataList.Cell>\n </DataList.RowStatic>\n );\n}\n\nfunction getCopyableReadOnlyValue(value: ReactNode) {\n if (typeof value === 'string' || typeof value === 'number') {\n return String(value);\n }\n\n return undefined;\n}\n","import { useMemo } from 'react';\n\nimport { EnvironmentVariablesEditorReadOnlyListContext } from './environment-variables-editor-context';\nimport { EnvironmentVariablesEditorReadOnlyHeader } from './environment-variables-editor-read-only-header';\nimport type { EnvironmentVariablesEditorReadOnlyListProps } from './environment-variables-editor.types';\nimport { DataList } from '@/ds/components/DataList/data-list';\nimport { cn } from '@/lib/utils';\n\nconst READ_ONLY_COLUMNS = 'minmax(12rem,1.4fr) minmax(8rem,0.9fr) minmax(8rem,auto)';\nconst READ_ONLY_COLUMNS_WITH_ICON = `auto ${READ_ONLY_COLUMNS}`;\n\nexport function EnvironmentVariablesEditorReadOnlyList({\n className,\n children,\n columns,\n header,\n showHeader = true,\n showIcon = false,\n nameLabel,\n valueLabel,\n updatedAtLabel,\n scrollRef,\n ...props\n}: EnvironmentVariablesEditorReadOnlyListProps) {\n const resolvedColumns = columns ?? (showIcon ? READ_ONLY_COLUMNS_WITH_ICON : READ_ONLY_COLUMNS);\n const contextValue = useMemo(() => ({ showIcon }), [showIcon]);\n\n return (\n <EnvironmentVariablesEditorReadOnlyListContext.Provider value={contextValue}>\n <DataList columns={resolvedColumns} scrollRef={scrollRef} className={cn('min-h-0', className)} {...props}>\n {showHeader &&\n (header ?? (\n <EnvironmentVariablesEditorReadOnlyHeader\n nameLabel={nameLabel}\n valueLabel={valueLabel}\n updatedAtLabel={updatedAtLabel}\n />\n ))}\n {children}\n </DataList>\n </EnvironmentVariablesEditorReadOnlyListContext.Provider>\n );\n}\n","import { useMemo } from 'react';\n\nimport { EnvironmentVariablesEditorContext } from './environment-variables-editor-context';\nimport type { EnvironmentVariablesEditorContextValue } from './environment-variables-editor-context';\nimport { EnvironmentVariablesEditorPasteHint } from './environment-variables-editor-paste-hint';\nimport type { EnvironmentVariablesEditorRootProps } from './environment-variables-editor.types';\nimport type { EnvironmentVariableEntry } from '@/lib/env-file';\n\nexport function EnvironmentVariablesEditorRoot<TRow extends EnvironmentVariableEntry = EnvironmentVariableEntry>({\n editor,\n className,\n children,\n disabled,\n readOnly,\n rowErrors,\n hidePasteHint,\n ...props\n}: EnvironmentVariablesEditorRootProps<TRow>) {\n const contextValue = useMemo<EnvironmentVariablesEditorContextValue>(\n () => ({\n editor: {\n rows: editor.rows,\n uploadError: editor.uploadError,\n fileInputRef: editor.fileInputRef,\n hasDuplicateKeys: editor.hasDuplicateKeys,\n updateRow: editor.updateRow,\n removeRow: editor.removeRow,\n handleFileUpload: editor.handleFileUpload,\n handlePaste: editor.handlePaste,\n getRowId: editor.getRowId,\n isValueRevealed: editor.isValueRevealed,\n toggleValueVisibility: editor.toggleValueVisibility,\n rowHasDuplicateKey: editor.rowHasDuplicateKey,\n appendRow: () => editor.appendRow(),\n },\n disabled: Boolean(disabled),\n readOnly: Boolean(readOnly),\n rowErrors,\n }),\n [editor, disabled, readOnly, rowErrors],\n );\n\n return (\n <EnvironmentVariablesEditorContext.Provider value={contextValue}>\n <div className={className} {...props}>\n {children}\n {!readOnly && !hidePasteHint && <EnvironmentVariablesEditorPasteHint />}\n </div>\n </EnvironmentVariablesEditorContext.Provider>\n );\n}\n","import { EyeIcon, EyeOffIcon, TrashIcon } from 'lucide-react';\n\nimport { useEnvironmentVariablesEditorContext } from './environment-variables-editor-context';\nimport type { EnvironmentVariablesEditorRowProps } from './environment-variables-editor.types';\nimport { Button } from '@/ds/components/Button';\nimport { FieldBlock, fieldErrorId } from '@/ds/components/FormFieldBlocks';\nimport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from '@/ds/components/InputGroup';\nimport { DUPLICATE_ENVIRONMENT_VARIABLE_MESSAGE } from '@/lib/env-file';\nimport { cn } from '@/lib/utils';\n\nexport function EnvironmentVariablesEditorRow({\n row,\n index,\n rowErrors,\n keyLabel = 'Key',\n valueLabel = 'Value',\n keyPlaceholder = 'e.g: OPEN_AI_KEY',\n valuePlaceholder = 'e.g: sk-xxxxxxxx',\n duplicateKeyMessage = DUPLICATE_ENVIRONMENT_VARIABLE_MESSAGE,\n className,\n ...props\n}: EnvironmentVariablesEditorRowProps) {\n const {\n editor,\n disabled,\n readOnly,\n rowErrors: contextRowErrors,\n } = useEnvironmentVariablesEditorContext('EnvironmentVariablesEditor.Row');\n const isDisabled = disabled || readOnly;\n const resolvedRowErrors = rowErrors ?? contextRowErrors;\n const keyError = resolvedRowErrors?.[index]?.key ?? (editor.rowHasDuplicateKey(index) ? duplicateKeyMessage : null);\n const valueError = resolvedRowErrors?.[index]?.value;\n const keyFieldName = `env-key-${index}`;\n const valueFieldName = `env-value-${index}`;\n const keyInputId = `input-${keyFieldName}`;\n const valueInputId = `input-${valueFieldName}`;\n const revealValueLabel = editor.isValueRevealed(index) ? 'Hide value' : 'Show value';\n const removeRowLabel = `Remove environment variable ${row.key.trim() || index + 1}`;\n\n function handlePaste(text: string, field: 'key' | 'value') {\n return editor.handlePaste(index, text, field);\n }\n\n return (\n <div className={cn('flex flex-col items-stretch gap-2 sm:flex-row sm:items-start', className)} {...props}>\n <div className=\"flex-1\">\n <FieldBlock.Layout>\n <FieldBlock.Column>\n <FieldBlock.Label name={keyFieldName}>{keyLabel}</FieldBlock.Label>\n <InputGroup className=\"w-full\">\n <InputGroupInput\n id={keyInputId}\n placeholder={keyPlaceholder}\n className=\"font-mono\"\n value={row.key}\n disabled={isDisabled}\n error={Boolean(keyError)}\n aria-describedby={keyError ? fieldErrorId(keyFieldName) : undefined}\n onChange={event => editor.updateRow(index, { key: event.target.value })}\n onPaste={event => {\n if (handlePaste(event.clipboardData.getData('text'), 'key')) {\n event.preventDefault();\n }\n }}\n />\n </InputGroup>\n {keyError && <FieldBlock.ErrorMsg name={keyFieldName}>{keyError}</FieldBlock.ErrorMsg>}\n </FieldBlock.Column>\n </FieldBlock.Layout>\n </div>\n\n <div className=\"flex-1\">\n <FieldBlock.Layout>\n <FieldBlock.Column>\n <FieldBlock.Label name={valueFieldName}>{valueLabel}</FieldBlock.Label>\n <InputGroup className=\"w-full\">\n <InputGroupInput\n id={valueInputId}\n placeholder={valuePlaceholder}\n className=\"font-mono\"\n type={editor.isValueRevealed(index) ? 'text' : 'password'}\n value={row.value}\n disabled={isDisabled}\n error={Boolean(valueError)}\n aria-describedby={valueError ? fieldErrorId(valueFieldName) : undefined}\n onChange={event => editor.updateRow(index, { value: event.target.value })}\n onPaste={event => {\n if (handlePaste(event.clipboardData.getData('text'), 'value')) {\n event.preventDefault();\n }\n }}\n />\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n disabled={isDisabled}\n aria-label={revealValueLabel}\n tooltip={revealValueLabel}\n onClick={() => editor.toggleValueVisibility(index)}\n >\n {editor.isValueRevealed(index) ? <EyeOffIcon aria-hidden /> : <EyeIcon aria-hidden />}\n </InputGroupButton>\n </InputGroupAddon>\n </InputGroup>\n {valueError && <FieldBlock.ErrorMsg name={valueFieldName}>{valueError}</FieldBlock.ErrorMsg>}\n </FieldBlock.Column>\n </FieldBlock.Layout>\n </div>\n\n {!readOnly && (\n <div className=\"flex items-center gap-2 self-end sm:self-auto sm:pt-7\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-md\"\n disabled={disabled}\n aria-label={removeRowLabel}\n tooltip=\"Remove variable\"\n onClick={() => editor.removeRow(index)}\n >\n <TrashIcon />\n </Button>\n </div>\n )}\n </div>\n );\n}\n","import { useEnvironmentVariablesEditorContext } from './environment-variables-editor-context';\nimport { EnvironmentVariablesEditorRow } from './environment-variables-editor-row';\nimport type { EnvironmentVariablesEditorRowsProps } from './environment-variables-editor.types';\nimport { cn } from '@/lib/utils';\n\nexport function EnvironmentVariablesEditorRows({\n className,\n rowErrors,\n keyLabel,\n valueLabel,\n keyPlaceholder,\n valuePlaceholder,\n duplicateKeyMessage,\n ...props\n}: EnvironmentVariablesEditorRowsProps) {\n const { editor, rowErrors: contextRowErrors } = useEnvironmentVariablesEditorContext(\n 'EnvironmentVariablesEditor.Rows',\n );\n const resolvedRowErrors = rowErrors ?? contextRowErrors;\n\n return (\n <div className={cn('space-y-2', className)} {...props}>\n {editor.rows.map((row, index) => (\n <EnvironmentVariablesEditorRow\n key={editor.getRowId(index)}\n row={row}\n index={index}\n rowErrors={resolvedRowErrors}\n keyLabel={keyLabel}\n valueLabel={valueLabel}\n keyPlaceholder={keyPlaceholder}\n valuePlaceholder={valuePlaceholder}\n duplicateKeyMessage={duplicateKeyMessage}\n />\n ))}\n </div>\n );\n}\n","import { UploadIcon } from 'lucide-react';\n\nimport { useEnvironmentVariablesEditorContext } from './environment-variables-editor-context';\nimport type { EnvironmentVariablesEditorUploadButtonProps } from './environment-variables-editor.types';\nimport { Button } from '@/ds/components/Button';\n\nexport function EnvironmentVariablesEditorUploadButton({\n children = 'Import .env',\n inputLabel = 'Import .env file',\n disabled,\n onClick,\n type = 'button',\n variant = 'ghost',\n size = 'sm',\n ...props\n}: EnvironmentVariablesEditorUploadButtonProps) {\n const {\n editor,\n disabled: contextDisabled,\n readOnly,\n } = useEnvironmentVariablesEditorContext('EnvironmentVariablesEditor.UploadButton');\n const isDisabled = contextDisabled || disabled;\n\n if (readOnly) return null;\n\n return (\n <>\n <input\n ref={editor.fileInputRef}\n type=\"file\"\n accept=\".env,text/plain\"\n aria-label={inputLabel}\n className=\"hidden\"\n disabled={isDisabled}\n onChange={editor.handleFileUpload}\n />\n <Button\n type={type}\n variant={variant}\n size={size}\n disabled={isDisabled}\n onClick={event => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n editor.fileInputRef.current?.click();\n }\n }}\n icon={<UploadIcon />}\n {...props}\n >\n {children}\n </Button>\n </>\n );\n}\n","import { useEnvironmentVariablesEditorContext } from './environment-variables-editor-context';\nimport { EnvironmentVariablesEditorUploadButton } from './environment-variables-editor-upload-button';\nimport type { EnvironmentVariablesEditorUploadProps } from './environment-variables-editor.types';\nimport { cn } from '@/lib/utils';\n\nexport function EnvironmentVariablesEditorUpload({\n className,\n children,\n ...props\n}: EnvironmentVariablesEditorUploadProps) {\n const { readOnly } = useEnvironmentVariablesEditorContext('EnvironmentVariablesEditor.Upload');\n\n if (readOnly) return null;\n\n return (\n <div className={cn('flex flex-wrap items-center justify-end gap-2', className)} {...props}>\n {children ?? <EnvironmentVariablesEditorUploadButton />}\n </div>\n );\n}\n","import { useEnvironmentVariablesEditorContext } from './environment-variables-editor-context';\nimport { EnvironmentVariablesEditorMessages } from './environment-variables-editor-messages';\nimport type { EnvironmentVariablesEditorUploadErrorProps } from './environment-variables-editor.types';\n\nexport function EnvironmentVariablesEditorUploadError(props: EnvironmentVariablesEditorUploadErrorProps) {\n const { editor } = useEnvironmentVariablesEditorContext('EnvironmentVariablesEditor.UploadError');\n\n if (!editor.uploadError) return null;\n\n return <EnvironmentVariablesEditorMessages error={editor.uploadError} {...props} />;\n}\n","import { EnvironmentVariablesEditorActions } from './environment-variables-editor-actions';\nimport { EnvironmentVariablesEditorAddButton } from './environment-variables-editor-add-button';\nimport { EnvironmentVariablesEditorDuplicateKeysError } from './environment-variables-editor-duplicate-keys-error';\nimport { EnvironmentVariablesEditorMessages } from './environment-variables-editor-messages';\nimport { EnvironmentVariablesEditorPasteHint } from './environment-variables-editor-paste-hint';\nimport { EnvironmentVariablesEditorReadOnlyEmpty } from './environment-variables-editor-read-only-empty';\nimport { EnvironmentVariablesEditorReadOnlyHeader } from './environment-variables-editor-read-only-header';\nimport { EnvironmentVariablesEditorReadOnlyItem } from './environment-variables-editor-read-only-item';\nimport { EnvironmentVariablesEditorReadOnlyList } from './environment-variables-editor-read-only-list';\nimport { EnvironmentVariablesEditorRoot } from './environment-variables-editor-root';\nimport { EnvironmentVariablesEditorRow } from './environment-variables-editor-row';\nimport { EnvironmentVariablesEditorRows } from './environment-variables-editor-rows';\nimport { EnvironmentVariablesEditorUpload } from './environment-variables-editor-upload';\nimport { EnvironmentVariablesEditorUploadButton } from './environment-variables-editor-upload-button';\nimport { EnvironmentVariablesEditorUploadError } from './environment-variables-editor-upload-error';\nimport type { EnvironmentVariablesEditorProps } from './environment-variables-editor.types';\nimport type { EnvironmentVariableEntry } from '@/lib/env-file';\nimport { DUPLICATE_ENVIRONMENT_VARIABLE_MESSAGE } from '@/lib/env-file';\nimport { cn } from '@/lib/utils';\n\nconst renderEnvironmentVariablesEditor = <TRow extends EnvironmentVariableEntry = EnvironmentVariableEntry>({\n className,\n children,\n addLabel = 'Add Variable',\n keyLabel = 'Key',\n valueLabel = 'Value',\n keyPlaceholder = 'e.g: OPEN_AI_KEY',\n valuePlaceholder = 'e.g: sk-xxxxxxxx',\n duplicateKeyMessage = DUPLICATE_ENVIRONMENT_VARIABLE_MESSAGE,\n rowErrors,\n error,\n actions,\n ...props\n}: EnvironmentVariablesEditorProps<TRow>) => {\n return (\n <EnvironmentVariablesEditorRoot\n className={cn(!children && 'space-y-3', className)}\n rowErrors={rowErrors}\n {...props}\n >\n {children ?? (\n <>\n <EnvironmentVariablesEditorUpload>\n <EnvironmentVariablesEditorUploadButton />\n </EnvironmentVariablesEditorUpload>\n <EnvironmentVariablesEditorUploadError />\n <EnvironmentVariablesEditorRows\n rowErrors={rowErrors}\n keyLabel={keyLabel}\n valueLabel={valueLabel}\n keyPlaceholder={keyPlaceholder}\n valuePlaceholder={valuePlaceholder}\n duplicateKeyMessage={duplicateKeyMessage}\n />\n <EnvironmentVariablesEditorAddButton>{addLabel}</EnvironmentVariablesEditorAddButton>\n <EnvironmentVariablesEditorDuplicateKeysError message={duplicateKeyMessage} />\n <EnvironmentVariablesEditorMessages error={error} />\n {actions && <EnvironmentVariablesEditorActions>{actions}</EnvironmentVariablesEditorActions>}\n </>\n )}\n </EnvironmentVariablesEditorRoot>\n );\n};\n\nexport const EnvironmentVariablesEditor = Object.assign(renderEnvironmentVariablesEditor, {\n Root: EnvironmentVariablesEditorRoot,\n Upload: EnvironmentVariablesEditorUpload,\n UploadButton: EnvironmentVariablesEditorUploadButton,\n UploadError: EnvironmentVariablesEditorUploadError,\n Rows: EnvironmentVariablesEditorRows,\n Row: EnvironmentVariablesEditorRow,\n AddButton: EnvironmentVariablesEditorAddButton,\n PasteHint: EnvironmentVariablesEditorPasteHint,\n Messages: EnvironmentVariablesEditorMessages,\n DuplicateKeysError: EnvironmentVariablesEditorDuplicateKeysError,\n Actions: EnvironmentVariablesEditorActions,\n ReadOnlyList: EnvironmentVariablesEditorReadOnlyList,\n ReadOnlyHeader: EnvironmentVariablesEditorReadOnlyHeader,\n ReadOnlyEmpty: EnvironmentVariablesEditorReadOnlyEmpty,\n ReadOnlyItem: EnvironmentVariablesEditorReadOnlyItem,\n});\n\nexport type {\n EnvironmentVariablesEditorActionsProps,\n EnvironmentVariablesEditorAddButtonProps,\n EnvironmentVariablesEditorDuplicateKeysErrorProps,\n EnvironmentVariablesEditorMessagesProps,\n EnvironmentVariablesEditorPasteHintProps,\n EnvironmentVariablesEditorProps,\n EnvironmentVariablesEditorReadOnlyEmptyProps,\n EnvironmentVariablesEditorReadOnlyHeaderProps,\n EnvironmentVariablesEditorReadOnlyItemProps,\n EnvironmentVariablesEditorReadOnlyListProps,\n EnvironmentVariablesEditorRootProps,\n EnvironmentVariablesEditorRowErrors,\n EnvironmentVariablesEditorRowProps,\n EnvironmentVariablesEditorRowsProps,\n EnvironmentVariablesEditorUploadButtonProps,\n EnvironmentVariablesEditorUploadErrorProps,\n EnvironmentVariablesEditorUploadProps,\n} from './environment-variables-editor.types';\n"],"names":["jsx","cn","createContext","use","jsxs","Button","PlusIcon","Notice","DUPLICATE_ENVIRONMENT_VARIABLE_MESSAGE","Txt","DataList","useState","useCopyToClipboard","Code2Icon","EyeOffIcon","EyeIcon","CheckIcon","CopyIcon","useMemo","FieldBlock","InputGroup","InputGroupInput","fieldErrorId","InputGroupAddon","InputGroupButton","TrashIcon","Fragment","UploadIcon"],"mappings":"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"}
@@ -292,8 +292,8 @@ function EnvironmentVariablesEditorRow({
292
292
  const valueInputId = `input-${valueFieldName}`;
293
293
  const revealValueLabel = editor.isValueRevealed(index) ? "Hide value" : "Show value";
294
294
  const removeRowLabel = `Remove environment variable ${row.key.trim() || index + 1}`;
295
- function handlePaste(text) {
296
- return editor.handlePaste(index, text);
295
+ function handlePaste(text, field) {
296
+ return editor.handlePaste(index, text, field);
297
297
  }
298
298
  return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col items-stretch gap-2 sm:flex-row sm:items-start", className), ...props, children: [
299
299
  /* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsx(FieldBlock.Layout, { children: /* @__PURE__ */ jsxs(FieldBlock.Column, { children: [
@@ -310,7 +310,7 @@ function EnvironmentVariablesEditorRow({
310
310
  "aria-describedby": keyError ? fieldErrorId(keyFieldName) : void 0,
311
311
  onChange: (event) => editor.updateRow(index, { key: event.target.value }),
312
312
  onPaste: (event) => {
313
- if (handlePaste(event.clipboardData.getData("text"))) {
313
+ if (handlePaste(event.clipboardData.getData("text"), "key")) {
314
314
  event.preventDefault();
315
315
  }
316
316
  }
@@ -334,7 +334,7 @@ function EnvironmentVariablesEditorRow({
334
334
  "aria-describedby": valueError ? fieldErrorId(valueFieldName) : void 0,
335
335
  onChange: (event) => editor.updateRow(index, { value: event.target.value }),
336
336
  onPaste: (event) => {
337
- if (handlePaste(event.clipboardData.getData("text"))) {
337
+ if (handlePaste(event.clipboardData.getData("text"), "value")) {
338
338
  event.preventDefault();
339
339
  }
340
340
  }