@e-llm-studio/instant-learning 1.3.3 → 1.3.5

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 (62) hide show
  1. package/dist/ILMarketplaceWrapper.js +3 -0
  2. package/dist/ILMarketplaceWrapper.js.map +1 -1
  3. package/dist/cjs/ILMarketplaceWrapper.js +3 -0
  4. package/dist/cjs/ILMarketplaceWrapper.js.map +1 -1
  5. package/dist/cjs/features/IL-OTJ/ValueTypeWrappers/TeachMePlugin.js +5 -2
  6. package/dist/cjs/features/IL-OTJ/ValueTypeWrappers/TeachMePlugin.js.map +1 -1
  7. package/dist/cjs/features/IL-OTJ/_components/ChatComponents/ChatComponent.js +12 -4
  8. package/dist/cjs/features/IL-OTJ/_components/ChatComponents/ChatComponent.js.map +1 -1
  9. package/dist/cjs/features/IL-OTJ/_components/ChatComponents/NormalChat.js +13 -4
  10. package/dist/cjs/features/IL-OTJ/_components/ChatComponents/NormalChat.js.map +1 -1
  11. package/dist/cjs/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.js +41 -4
  12. package/dist/cjs/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.js.map +1 -1
  13. package/dist/cjs/features/IL-marketplace/PromoteFlow/PromoteFlow.js +444 -169
  14. package/dist/cjs/features/IL-marketplace/PromoteFlow/PromoteFlow.js.map +1 -1
  15. package/dist/cjs/features/IL-marketplace/PromoteFlow/PromoteFlow.module.css.js +2 -2
  16. package/dist/cjs/features/IL-marketplace/PromoteFlow/promote-flow.api.js +19 -2
  17. package/dist/cjs/features/IL-marketplace/PromoteFlow/promote-flow.api.js.map +1 -1
  18. package/dist/cjs/features/IL-marketplace/PromoteFlow/promote-flow.store.js +7 -0
  19. package/dist/cjs/features/IL-marketplace/PromoteFlow/promote-flow.store.js.map +1 -1
  20. package/dist/cjs/features/InstantLearning/InstantLearning.js +1 -0
  21. package/dist/cjs/features/InstantLearning/InstantLearning.js.map +1 -1
  22. package/dist/cjs/features/InstantLearning/_components/ChatComponent.js +3 -1
  23. package/dist/cjs/features/InstantLearning/_components/ChatComponent.js.map +1 -1
  24. package/dist/cjs/features/InstantLearning/_components/ContextualChatComponent.js +3 -1
  25. package/dist/cjs/features/InstantLearning/_components/ContextualChatComponent.js.map +1 -1
  26. package/dist/features/IL-OTJ/ValueTypeWrappers/TeachMePlugin.js +5 -2
  27. package/dist/features/IL-OTJ/ValueTypeWrappers/TeachMePlugin.js.map +1 -1
  28. package/dist/features/IL-OTJ/_components/ChatComponents/ChatComponent.js +12 -4
  29. package/dist/features/IL-OTJ/_components/ChatComponents/ChatComponent.js.map +1 -1
  30. package/dist/features/IL-OTJ/_components/ChatComponents/NormalChat.js +13 -4
  31. package/dist/features/IL-OTJ/_components/ChatComponents/NormalChat.js.map +1 -1
  32. package/dist/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.js +41 -4
  33. package/dist/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.js.map +1 -1
  34. package/dist/features/IL-marketplace/PromoteFlow/PromoteFlow.js +446 -171
  35. package/dist/features/IL-marketplace/PromoteFlow/PromoteFlow.js.map +1 -1
  36. package/dist/features/IL-marketplace/PromoteFlow/PromoteFlow.module.css.js +2 -2
  37. package/dist/features/IL-marketplace/PromoteFlow/promote-flow.api.js +17 -3
  38. package/dist/features/IL-marketplace/PromoteFlow/promote-flow.api.js.map +1 -1
  39. package/dist/features/IL-marketplace/PromoteFlow/promote-flow.store.js +7 -0
  40. package/dist/features/IL-marketplace/PromoteFlow/promote-flow.store.js.map +1 -1
  41. package/dist/features/InstantLearning/InstantLearning.js +1 -0
  42. package/dist/features/InstantLearning/InstantLearning.js.map +1 -1
  43. package/dist/features/InstantLearning/_components/ChatComponent.js +3 -1
  44. package/dist/features/InstantLearning/_components/ChatComponent.js.map +1 -1
  45. package/dist/features/InstantLearning/_components/ContextualChatComponent.js +3 -1
  46. package/dist/features/InstantLearning/_components/ContextualChatComponent.js.map +1 -1
  47. package/dist/types/src/ILMarketplaceWrapper.d.ts.map +1 -1
  48. package/dist/types/src/features/IL-OTJ/ValueTypeWrappers/TeachMePlugin.d.ts.map +1 -1
  49. package/dist/types/src/features/IL-OTJ/_components/ChatComponents/ChatComponent.d.ts.map +1 -1
  50. package/dist/types/src/features/IL-OTJ/_components/ChatComponents/NormalChat.d.ts.map +1 -1
  51. package/dist/types/src/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.d.ts.map +1 -1
  52. package/dist/types/src/features/IL-marketplace/PromoteFlow/PromoteFlow.d.ts.map +1 -1
  53. package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.api.d.ts +5 -2
  54. package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.api.d.ts.map +1 -1
  55. package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.interfaces.d.ts +26 -1
  56. package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.interfaces.d.ts.map +1 -1
  57. package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.store.d.ts +3 -1
  58. package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.store.d.ts.map +1 -1
  59. package/dist/types/src/features/InstantLearning/InstantLearning.d.ts.map +1 -1
  60. package/dist/types/src/features/InstantLearning/_components/ChatComponent.d.ts.map +1 -1
  61. package/dist/types/src/features/InstantLearning/_components/ContextualChatComponent.d.ts.map +1 -1
  62. package/package.json +4 -5
@@ -28,6 +28,10 @@ function EnvironmentConfigurationModal({
28
28
  const [saveError, setSaveError] = React.useState(null);
29
29
  React.useEffect(() => {
30
30
  if (!environment) return;
31
+ console.debug("[EnvironmentConfigurationModal] Resetting configuration", {
32
+ environment,
33
+ initialEnvironmentName: initialConfiguration.env_name
34
+ });
31
35
  setConfiguration(initialConfiguration);
32
36
  setIsPasswordVisible(false);
33
37
  setSaveError(null);
@@ -36,26 +40,53 @@ function EnvironmentConfigurationModal({
36
40
  React.useEffect(() => {
37
41
  if (!environment) return;
38
42
  const handleEscape = (event) => {
39
- if (event.key === "Escape") onClose();
43
+ if (event.key === "Escape") {
44
+ console.debug("[EnvironmentConfigurationModal] Closing with Escape", { environment });
45
+ onClose();
46
+ }
40
47
  };
41
48
  document.addEventListener("keydown", handleEscape);
42
49
  return () => document.removeEventListener("keydown", handleEscape);
43
50
  }, [environment, onClose]);
44
51
  if (!environment) return null;
45
- const environmentLabel = environment === "source" ? "Source" : "Destination";
52
+ const environmentLabel = environment === "source" ? "Source" : environment === "destination" ? "Destination" : environment === "tenantSource" ? "Tenant source" : "Tenant database";
46
53
  const updateField = (field, value) => setConfiguration((current) => ({ ...current, [field]: value }));
47
54
  const updateTier = (envTier) => {
55
+ const dbType = envTier === "external" ? "EXTERNAL" : "INTERNAL";
56
+ console.debug("[EnvironmentConfigurationModal] Environment tier changed", {
57
+ environment,
58
+ envTier,
59
+ dbType
60
+ });
48
61
  updateField("env_tier", envTier);
49
- updateField("db_type", envTier === "external" ? "EXTERNAL" : "INTERNAL");
62
+ updateField("db_type", dbType);
50
63
  };
51
64
  const handleSave = async () => {
52
- if (!promoteFlow_utils.isEnvironmentConfigurationComplete(configuration)) return;
65
+ if (!promoteFlow_utils.isEnvironmentConfigurationComplete(configuration)) {
66
+ console.warn("[EnvironmentConfigurationModal] Save blocked by incomplete configuration", {
67
+ environment
68
+ });
69
+ return;
70
+ }
71
+ console.info("[EnvironmentConfigurationModal] Saving configuration", {
72
+ environment,
73
+ envName: configuration.env_name,
74
+ envTier: configuration.env_tier
75
+ });
53
76
  setIsSaving(true);
54
77
  setSaveError(null);
55
78
  try {
56
79
  await onSave(environment, configuration);
80
+ console.info("[EnvironmentConfigurationModal] Configuration saved", {
81
+ environment,
82
+ envName: configuration.env_name
83
+ });
57
84
  onClose();
58
85
  } catch (error) {
86
+ console.error("[EnvironmentConfigurationModal] Failed to save configuration", {
87
+ environment,
88
+ error
89
+ });
59
90
  setSaveError(
60
91
  error instanceof Error ? error.message : "Unable to save environment configuration."
61
92
  );
@@ -140,6 +171,12 @@ function EnvironmentConfigurationModal({
140
171
  type: "button",
141
172
  className: `${EnvironmentConfigurationModal_module["default"].presetItem} ${isSelected ? EnvironmentConfigurationModal_module["default"].presetItemSelected : ""}`,
142
173
  onClick: () => {
174
+ console.info("[EnvironmentConfigurationModal] Preset selected", {
175
+ environment,
176
+ envId: config.env_id,
177
+ envName: config.env_name,
178
+ envTier: config.env_tier
179
+ });
143
180
  onSelectPreset(environment, config);
144
181
  onClose();
145
182
  },
@@ -1 +1 @@
1
- {"version":3,"file":"EnvironmentConfigurationModal.js","sources":["../../../../../src/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { Check, Eye, EyeOff, X } from 'lucide-react';\nimport cssStyles from './EnvironmentConfigurationModal.module.css';\nimport type {\n EnvironmentConfiguration,\n EnvironmentRegistryRecord,\n EnvironmentTier,\n PromotionEnvironment,\n} from './promote-flow.interfaces';\nimport { isEnvironmentConfigurationComplete } from './promote-flow.utils';\n\ninterface EnvironmentConfigurationModalProps {\n environment: PromotionEnvironment | null;\n initialConfiguration: EnvironmentConfiguration;\n permittedTiers: EnvironmentTier[];\n onSave: (\n environment: PromotionEnvironment,\n configuration: EnvironmentConfiguration\n ) => Promise<void>;\n onSelectPreset: (environment: PromotionEnvironment, config: EnvironmentRegistryRecord) => void;\n presetTier: EnvironmentTier;\n onPresetTierChange: (tier: EnvironmentTier) => void;\n onClose: () => void;\n promotionConfigs?: EnvironmentRegistryRecord[];\n selectedPromotionConfig?: EnvironmentRegistryRecord | null;\n isLoadingConfigs?: boolean;\n}\n\nexport function EnvironmentConfigurationModal({\n environment,\n initialConfiguration,\n permittedTiers,\n onSave,\n onSelectPreset,\n presetTier,\n onPresetTierChange,\n onClose,\n promotionConfigs = [],\n selectedPromotionConfig = null,\n isLoadingConfigs = false,\n}: EnvironmentConfigurationModalProps) {\n const [configuration, setConfiguration] =\n useState<EnvironmentConfiguration>(initialConfiguration);\n const [isPasswordVisible, setIsPasswordVisible] = useState(false);\n const [selectedTab, setSelectedTab] = useState<'manual' | 'preset'>('preset');\n const [isSaving, setIsSaving] = useState(false);\n const [saveError, setSaveError] = useState<string | null>(null);\n\n useEffect(() => {\n if (!environment) return;\n setConfiguration(initialConfiguration);\n setIsPasswordVisible(false);\n setSaveError(null);\n setSelectedTab('preset');\n }, [environment, initialConfiguration]);\n\n useEffect(() => {\n if (!environment) return;\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') onClose();\n };\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [environment, onClose]);\n\n if (!environment) return null;\n\n const environmentLabel = environment === 'source' ? 'Source' : 'Destination';\n const updateField = <Field extends keyof EnvironmentConfiguration>(\n field: Field,\n value: EnvironmentConfiguration[Field]\n ) => setConfiguration((current) => ({ ...current, [field]: value }));\n\n const updateTier = (envTier: EnvironmentTier) => {\n updateField('env_tier', envTier);\n updateField('db_type', envTier === 'external' ? 'EXTERNAL' : 'INTERNAL');\n };\n\n const handleSave = async () => {\n if (!isEnvironmentConfigurationComplete(configuration)) return;\n setIsSaving(true);\n setSaveError(null);\n try {\n await onSave(environment, configuration);\n onClose();\n } catch (error) {\n setSaveError(\n error instanceof Error ? error.message : 'Unable to save environment configuration.'\n );\n } finally {\n setIsSaving(false);\n }\n };\n\n return (\n <div\n className={cssStyles.overlay}\n onMouseDown={(event) => event.target === event.currentTarget && onClose()}\n >\n <section\n className={cssStyles.dialog}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"environment-configuration-title\"\n >\n <header className={cssStyles.header}>\n <div>\n <span className={cssStyles.eyebrow}>{environmentLabel} connection</span>\n <h2 id=\"environment-configuration-title\">Configure {environment} environment</h2>\n <p>Choose a saved connection or securely add a new database.</p>\n </div>\n <button\n type=\"button\"\n className={cssStyles.closeButton}\n onClick={onClose}\n aria-label=\"Close dialog\"\n >\n <X aria-hidden=\"true\" />\n </button>\n </header>\n\n <div className={cssStyles.tabsContainer}>\n <button\n type=\"button\"\n className={`${cssStyles.tab} ${selectedTab === 'preset' ? cssStyles.tabActive : ''}`}\n onClick={() => setSelectedTab('preset')}\n >\n Pre-Configured\n </button>\n <button\n type=\"button\"\n className={`${cssStyles.tab} ${selectedTab === 'manual' ? cssStyles.tabActive : ''}`}\n onClick={() => setSelectedTab('manual')}\n >\n Manual\n </button>\n </div>\n\n {selectedTab === 'preset' ? (\n <div className={cssStyles.presetList}>\n <label className={cssStyles.presetTierSelect}>\n <span>Environment Tier</span>\n <select\n value={presetTier}\n onChange={(event) => onPresetTierChange(event.target.value as EnvironmentTier)}\n >\n {permittedTiers.map((tier) => (\n <option key={tier} value={tier}>\n {tier.toUpperCase()}\n </option>\n ))}\n </select>\n </label>\n {isLoadingConfigs ? (\n <div className={cssStyles.loadingMessage}>Loading configurations...</div>\n ) : promotionConfigs.length === 0 ? (\n <div className={cssStyles.loadingMessage}>\n No pre-configured environments are available for this tier.\n </div>\n ) : (\n promotionConfigs.map((config) => {\n const isSelected = config.env_id === selectedPromotionConfig?.env_id;\n return (\n <button\n key={config.env_id}\n type=\"button\"\n className={`${cssStyles.presetItem} ${isSelected ? cssStyles.presetItemSelected : ''}`}\n onClick={() => {\n onSelectPreset(environment, config);\n onClose();\n }}\n aria-pressed={isSelected}\n >\n <div className={cssStyles.presetItemHeader}>\n <div className={cssStyles.presetItemName}>{config.env_name}</div>\n {isSelected && (\n <span className={cssStyles.selectedBadge}>\n <Check aria-hidden=\"true\" strokeWidth={2.5} />\n Selected\n </span>\n )}\n </div>\n <div className={cssStyles.presetItemDetails}>\n <span className={cssStyles.presetItemEnv}>\n {config.env_tier} · {config.db_type}\n </span>\n <span className={cssStyles.presetItemCreator}>{config.database_name}</span>\n </div>\n </button>\n );\n })\n )}\n </div>\n ) : (\n <>\n <div className={cssStyles.form}>\n <label className={cssStyles.formField}>\n <span>Environment Name</span>\n <input\n value={configuration.env_name}\n onChange={(event) => updateField('env_name', event.target.value)}\n />\n </label>\n <label className={cssStyles.formField}>\n <span>Environment Tier</span>\n <select\n value={configuration.env_tier}\n onChange={(event) => updateTier(event.target.value as EnvironmentTier)}\n >\n {permittedTiers.map((tier) => (\n <option key={tier} value={tier}>\n {tier.toUpperCase()}\n </option>\n ))}\n </select>\n </label>\n <label className={cssStyles.formField}>\n <span>Database Type</span>\n <select value={configuration.db_type} disabled>\n <option value={configuration.env_tier === 'external' ? 'EXTERNAL' : 'INTERNAL'}>\n {configuration.env_tier === 'external' ? 'EXTERNAL' : 'INTERNAL'}\n </option>\n </select>\n </label>\n <label className={`${cssStyles.formField} ${cssStyles.formFieldWide}`}>\n <span>Host</span>\n <input\n value={configuration.host}\n onChange={(event) => updateField('host', event.target.value)}\n />\n </label>\n <label className={cssStyles.formField}>\n <span>Port</span>\n <input\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n value={configuration.port}\n onChange={(event) => updateField('port', event.target.value.replace(/\\D/g, ''))}\n />\n </label>\n <label className={cssStyles.formField}>\n <span>Username</span>\n <input\n value={configuration.username}\n onChange={(event) => updateField('username', event.target.value)}\n />\n </label>\n <label className={cssStyles.formField}>\n <span>Password</span>\n <span className={cssStyles.passwordField}>\n <input\n type={isPasswordVisible ? 'text' : 'password'}\n value={configuration.password}\n onChange={(event) => updateField('password', event.target.value)}\n />\n <button\n type=\"button\"\n className={cssStyles.passwordVisibilityButton}\n onClick={() => setIsPasswordVisible((visible) => !visible)}\n aria-label={isPasswordVisible ? 'Hide password' : 'Show password'}\n >\n {isPasswordVisible ? <EyeOff aria-hidden=\"true\" /> : <Eye aria-hidden=\"true\" />}\n </button>\n </span>\n </label>\n <label className={`${cssStyles.formField} ${cssStyles.formFieldWide}`}>\n <span>Database Name</span>\n <input\n value={configuration.database_name}\n onChange={(event) => updateField('database_name', event.target.value)}\n />\n </label>\n <label className={cssStyles.tenantOption}>\n <span>\n <strong>Tenant database</strong>\n <small>Enable when this connection uses tenant-scoped data.</small>\n </span>\n <span className={cssStyles.toggleControl}>\n <input\n type=\"checkbox\"\n checked={configuration.is_tenant_db}\n onChange={(event) => updateField('is_tenant_db', event.target.checked)}\n />\n <span aria-hidden=\"true\" />\n </span>\n </label>\n </div>\n {saveError && (\n <p className={cssStyles.saveError} role=\"alert\">\n {saveError}\n </p>\n )}\n <footer className={cssStyles.footer}>\n <button type=\"button\" className={cssStyles.cancelButton} onClick={onClose}>\n Cancel\n </button>\n <button\n type=\"button\"\n className={cssStyles.saveButton}\n onClick={handleSave}\n disabled={isSaving || !isEnvironmentConfigurationComplete(configuration)}\n >\n {isSaving ? 'Saving…' : `Save ${environmentLabel}`}\n </button>\n </footer>\n </>\n )}\n </section>\n </div>\n );\n}\n"],"names":["useState","useEffect","isEnvironmentConfigurationComplete","jsx","cssStyles","jsxs","X","Check","Fragment","EyeOff","Eye"],"mappings":"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"}
1
+ {"version":3,"file":"EnvironmentConfigurationModal.js","sources":["../../../../../src/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { Check, Eye, EyeOff, X } from 'lucide-react';\nimport cssStyles from './EnvironmentConfigurationModal.module.css';\nimport type {\n EnvironmentConfiguration,\n EnvironmentRegistryRecord,\n EnvironmentTier,\n PromotionEnvironment,\n} from './promote-flow.interfaces';\nimport { isEnvironmentConfigurationComplete } from './promote-flow.utils';\n\ninterface EnvironmentConfigurationModalProps {\n environment: PromotionEnvironment | null;\n initialConfiguration: EnvironmentConfiguration;\n permittedTiers: EnvironmentTier[];\n onSave: (\n environment: PromotionEnvironment,\n configuration: EnvironmentConfiguration\n ) => Promise<void>;\n onSelectPreset: (environment: PromotionEnvironment, config: EnvironmentRegistryRecord) => void;\n presetTier: EnvironmentTier;\n onPresetTierChange: (tier: EnvironmentTier) => void;\n onClose: () => void;\n promotionConfigs?: EnvironmentRegistryRecord[];\n selectedPromotionConfig?: EnvironmentRegistryRecord | null;\n isLoadingConfigs?: boolean;\n}\n\nexport function EnvironmentConfigurationModal({\n environment,\n initialConfiguration,\n permittedTiers,\n onSave,\n onSelectPreset,\n presetTier,\n onPresetTierChange,\n onClose,\n promotionConfigs = [],\n selectedPromotionConfig = null,\n isLoadingConfigs = false,\n}: EnvironmentConfigurationModalProps) {\n const [configuration, setConfiguration] =\n useState<EnvironmentConfiguration>(initialConfiguration);\n const [isPasswordVisible, setIsPasswordVisible] = useState(false);\n const [selectedTab, setSelectedTab] = useState<'manual' | 'preset'>('preset');\n const [isSaving, setIsSaving] = useState(false);\n const [saveError, setSaveError] = useState<string | null>(null);\n\n useEffect(() => {\n if (!environment) return;\n console.debug('[EnvironmentConfigurationModal] Resetting configuration', {\n environment,\n initialEnvironmentName: initialConfiguration.env_name,\n });\n setConfiguration(initialConfiguration);\n setIsPasswordVisible(false);\n setSaveError(null);\n setSelectedTab('preset');\n }, [environment, initialConfiguration]);\n\n useEffect(() => {\n if (!environment) return;\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n console.debug('[EnvironmentConfigurationModal] Closing with Escape', { environment });\n onClose();\n }\n };\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [environment, onClose]);\n\n if (!environment) return null;\n\n const environmentLabel =\n environment === 'source'\n ? 'Source'\n : environment === 'destination'\n ? 'Destination'\n : environment === 'tenantSource'\n ? 'Tenant source'\n : 'Tenant database';\n const updateField = <Field extends keyof EnvironmentConfiguration>(\n field: Field,\n value: EnvironmentConfiguration[Field]\n ) => setConfiguration((current) => ({ ...current, [field]: value }));\n\n const updateTier = (envTier: EnvironmentTier) => {\n const dbType = envTier === 'external' ? 'EXTERNAL' : 'INTERNAL';\n console.debug('[EnvironmentConfigurationModal] Environment tier changed', {\n environment,\n envTier,\n dbType,\n });\n updateField('env_tier', envTier);\n updateField('db_type', dbType);\n };\n\n const handleSave = async () => {\n if (!isEnvironmentConfigurationComplete(configuration)) {\n console.warn('[EnvironmentConfigurationModal] Save blocked by incomplete configuration', {\n environment,\n });\n return;\n }\n console.info('[EnvironmentConfigurationModal] Saving configuration', {\n environment,\n envName: configuration.env_name,\n envTier: configuration.env_tier,\n });\n setIsSaving(true);\n setSaveError(null);\n try {\n await onSave(environment, configuration);\n console.info('[EnvironmentConfigurationModal] Configuration saved', {\n environment,\n envName: configuration.env_name,\n });\n onClose();\n } catch (error) {\n console.error('[EnvironmentConfigurationModal] Failed to save configuration', {\n environment,\n error,\n });\n setSaveError(\n error instanceof Error ? error.message : 'Unable to save environment configuration.'\n );\n } finally {\n setIsSaving(false);\n }\n };\n\n return (\n <div\n className={cssStyles.overlay}\n onMouseDown={(event) => event.target === event.currentTarget && onClose()}\n >\n <section\n className={cssStyles.dialog}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"environment-configuration-title\"\n >\n <header className={cssStyles.header}>\n <div>\n <span className={cssStyles.eyebrow}>{environmentLabel} connection</span>\n <h2 id=\"environment-configuration-title\">Configure {environment} environment</h2>\n <p>Choose a saved connection or securely add a new database.</p>\n </div>\n <button\n type=\"button\"\n className={cssStyles.closeButton}\n onClick={onClose}\n aria-label=\"Close dialog\"\n >\n <X aria-hidden=\"true\" />\n </button>\n </header>\n\n <div className={cssStyles.tabsContainer}>\n <button\n type=\"button\"\n className={`${cssStyles.tab} ${selectedTab === 'preset' ? cssStyles.tabActive : ''}`}\n onClick={() => setSelectedTab('preset')}\n >\n Pre-Configured\n </button>\n <button\n type=\"button\"\n className={`${cssStyles.tab} ${selectedTab === 'manual' ? cssStyles.tabActive : ''}`}\n onClick={() => setSelectedTab('manual')}\n >\n Manual\n </button>\n </div>\n\n {selectedTab === 'preset' ? (\n <div className={cssStyles.presetList}>\n <label className={cssStyles.presetTierSelect}>\n <span>Environment Tier</span>\n <select\n value={presetTier}\n onChange={(event) => onPresetTierChange(event.target.value as EnvironmentTier)}\n >\n {permittedTiers.map((tier) => (\n <option key={tier} value={tier}>\n {tier.toUpperCase()}\n </option>\n ))}\n </select>\n </label>\n {isLoadingConfigs ? (\n <div className={cssStyles.loadingMessage}>Loading configurations...</div>\n ) : promotionConfigs.length === 0 ? (\n <div className={cssStyles.loadingMessage}>\n No pre-configured environments are available for this tier.\n </div>\n ) : (\n promotionConfigs.map((config) => {\n const isSelected = config.env_id === selectedPromotionConfig?.env_id;\n return (\n <button\n key={config.env_id}\n type=\"button\"\n className={`${cssStyles.presetItem} ${isSelected ? cssStyles.presetItemSelected : ''}`}\n onClick={() => {\n console.info('[EnvironmentConfigurationModal] Preset selected', {\n environment,\n envId: config.env_id,\n envName: config.env_name,\n envTier: config.env_tier,\n });\n onSelectPreset(environment, config);\n onClose();\n }}\n aria-pressed={isSelected}\n >\n <div className={cssStyles.presetItemHeader}>\n <div className={cssStyles.presetItemName}>{config.env_name}</div>\n {isSelected && (\n <span className={cssStyles.selectedBadge}>\n <Check aria-hidden=\"true\" strokeWidth={2.5} />\n Selected\n </span>\n )}\n </div>\n <div className={cssStyles.presetItemDetails}>\n <span className={cssStyles.presetItemEnv}>\n {config.env_tier} · {config.db_type}\n </span>\n <span className={cssStyles.presetItemCreator}>{config.database_name}</span>\n </div>\n </button>\n );\n })\n )}\n </div>\n ) : (\n <>\n <div className={cssStyles.form}>\n <label className={cssStyles.formField}>\n <span>Environment Name</span>\n <input\n value={configuration.env_name}\n onChange={(event) => updateField('env_name', event.target.value)}\n />\n </label>\n <label className={cssStyles.formField}>\n <span>Environment Tier</span>\n <select\n value={configuration.env_tier}\n onChange={(event) => updateTier(event.target.value as EnvironmentTier)}\n >\n {permittedTiers.map((tier) => (\n <option key={tier} value={tier}>\n {tier.toUpperCase()}\n </option>\n ))}\n </select>\n </label>\n <label className={cssStyles.formField}>\n <span>Database Type</span>\n <select value={configuration.db_type} disabled>\n <option value={configuration.env_tier === 'external' ? 'EXTERNAL' : 'INTERNAL'}>\n {configuration.env_tier === 'external' ? 'EXTERNAL' : 'INTERNAL'}\n </option>\n </select>\n </label>\n <label className={`${cssStyles.formField} ${cssStyles.formFieldWide}`}>\n <span>Host</span>\n <input\n value={configuration.host}\n onChange={(event) => updateField('host', event.target.value)}\n />\n </label>\n <label className={cssStyles.formField}>\n <span>Port</span>\n <input\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n value={configuration.port}\n onChange={(event) => updateField('port', event.target.value.replace(/\\D/g, ''))}\n />\n </label>\n <label className={cssStyles.formField}>\n <span>Username</span>\n <input\n value={configuration.username}\n onChange={(event) => updateField('username', event.target.value)}\n />\n </label>\n <label className={cssStyles.formField}>\n <span>Password</span>\n <span className={cssStyles.passwordField}>\n <input\n type={isPasswordVisible ? 'text' : 'password'}\n value={configuration.password}\n onChange={(event) => updateField('password', event.target.value)}\n />\n <button\n type=\"button\"\n className={cssStyles.passwordVisibilityButton}\n onClick={() => setIsPasswordVisible((visible) => !visible)}\n aria-label={isPasswordVisible ? 'Hide password' : 'Show password'}\n >\n {isPasswordVisible ? <EyeOff aria-hidden=\"true\" /> : <Eye aria-hidden=\"true\" />}\n </button>\n </span>\n </label>\n <label className={`${cssStyles.formField} ${cssStyles.formFieldWide}`}>\n <span>Database Name</span>\n <input\n value={configuration.database_name}\n onChange={(event) => updateField('database_name', event.target.value)}\n />\n </label>\n <label className={cssStyles.tenantOption}>\n <span>\n <strong>Tenant database</strong>\n <small>Enable when this connection uses tenant-scoped data.</small>\n </span>\n <span className={cssStyles.toggleControl}>\n <input\n type=\"checkbox\"\n checked={configuration.is_tenant_db}\n onChange={(event) => updateField('is_tenant_db', event.target.checked)}\n />\n <span aria-hidden=\"true\" />\n </span>\n </label>\n </div>\n {saveError && (\n <p className={cssStyles.saveError} role=\"alert\">\n {saveError}\n </p>\n )}\n <footer className={cssStyles.footer}>\n <button type=\"button\" className={cssStyles.cancelButton} onClick={onClose}>\n Cancel\n </button>\n <button\n type=\"button\"\n className={cssStyles.saveButton}\n onClick={handleSave}\n disabled={isSaving || !isEnvironmentConfigurationComplete(configuration)}\n >\n {isSaving ? 'Saving…' : `Save ${environmentLabel}`}\n </button>\n </footer>\n </>\n )}\n </section>\n </div>\n );\n}\n"],"names":["useState","useEffect","isEnvironmentConfigurationComplete","jsx","cssStyles","jsxs","X","Check","Fragment","EyeOff","Eye"],"mappings":"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"}