@jini-ai/ui 0.3.13 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +139 -0
- package/README.md +120 -26
- package/dist/browser/index.js +1 -1
- package/dist/browser/useDismissOnOutsideOrEscape.d.ts +10 -1
- package/dist/browser/useDismissOnOutsideOrEscape.js +7 -4
- package/dist/browser/useGlobalKeydown.d.ts +14 -2
- package/dist/browser/useGlobalKeydown.js +8 -17
- package/dist/features/a2ui/catalog-from-registry.d.ts +6 -3
- package/dist/features/a2ui/catalog-from-registry.js +1 -1
- package/dist/features/a2ui/index.d.ts +1 -1
- package/dist/features/a2ui/protocol.d.ts +1 -1
- package/dist/features/a2ui/renderer.js +23 -10
- package/dist/features/a2ui/use-a2ui-surface.d.ts +11 -6
- package/dist/features/a2ui/use-a2ui-surface.js +40 -10
- package/dist/features/admin-widgets/components/ComingSoonNotice.d.ts +11 -0
- package/dist/features/admin-widgets/components/ComingSoonNotice.js +7 -0
- package/dist/features/admin-widgets/components/ComingSoonPanel.d.ts +10 -0
- package/dist/features/admin-widgets/components/ComingSoonPanel.js +10 -0
- package/dist/features/admin-widgets/components/ImagePreviewModal.d.ts +16 -0
- package/dist/features/admin-widgets/components/ImagePreviewModal.hooks.d.ts +13 -0
- package/dist/features/admin-widgets/components/ImagePreviewModal.hooks.js +46 -0
- package/dist/features/admin-widgets/components/ImagePreviewModal.js +13 -0
- package/dist/features/admin-widgets/components/InfoTip.d.ts +18 -0
- package/dist/features/admin-widgets/components/InfoTip.hooks.d.ts +16 -0
- package/dist/features/admin-widgets/components/InfoTip.hooks.js +45 -0
- package/dist/features/admin-widgets/components/InfoTip.js +12 -0
- package/dist/features/admin-widgets/components/SeeMore/SeeMore.d.ts +41 -0
- package/dist/features/admin-widgets/components/SeeMore/SeeMore.hooks.d.ts +14 -0
- package/dist/features/admin-widgets/components/SeeMore/SeeMore.hooks.js +57 -0
- package/dist/features/admin-widgets/components/SeeMore/SeeMore.js +24 -0
- package/dist/features/admin-widgets/components/Select/Select.d.ts +39 -0
- package/dist/features/admin-widgets/components/Select/Select.hooks.d.ts +105 -0
- package/dist/features/admin-widgets/components/Select/Select.hooks.js +359 -0
- package/dist/features/admin-widgets/components/Select/Select.js +46 -0
- package/dist/features/admin-widgets/index.d.ts +20 -0
- package/dist/features/admin-widgets/index.js +11 -0
- package/dist/features/admin-widgets/styles/admin-widgets.css +2 -0
- package/dist/features/appearance/constants.d.ts +2 -2
- package/dist/features/appearance/constants.js +2 -1
- package/dist/features/appearance/react/components/AppearanceTab.js +5 -5
- package/dist/features/appearance/rules.d.ts +10 -4
- package/dist/features/appearance/rules.js +5 -5
- package/dist/features/appearance/types.d.ts +1 -1
- package/dist/features/appearance/types.js +1 -1
- package/dist/features/asset-grid/react/components/AssetGrid.js +1 -1
- package/dist/features/asset-grid/react/components/DeleteConfirmDialog.js +1 -1
- package/dist/features/asset-grid/react/hooks/useAssetGridKeyboardShortcuts.js +23 -21
- package/dist/features/asset-grid/react/hooks/useAssetGridLiveUpdates.d.ts +1 -1
- package/dist/features/asset-grid/react/hooks/useAssetGridLiveUpdates.js +1 -1
- package/dist/features/asset-tree-browser/ports.d.ts +3 -1
- package/dist/features/asset-tree-browser/react/hooks/useAssetTreeCopyLocalPath.js +1 -1
- package/dist/features/browser-chrome/react/components/BrowserViewportControls.js +1 -1
- package/dist/features/browser-chrome/types.js +1 -1
- package/dist/features/command-palette/ports.js +1 -1
- package/dist/features/connectors/ConnectorsBrowser.js +2 -2
- package/dist/features/connectors/components/ConnectorCard.js +3 -3
- package/dist/features/connectors/components/ConnectorDetailDrawer.js +1 -1
- package/dist/features/connectors/components/ConnectorGrid.js +2 -2
- package/dist/features/connectors/components/ConnectorSearchBar.js +2 -2
- package/dist/features/connectors/components/ProviderTabBar.js +2 -2
- package/dist/features/connectors/constants.d.ts +1 -1
- package/dist/features/connectors/constants.js +1 -1
- package/dist/features/connectors/hooks/useConnectorAuthorization.js +1 -1
- package/dist/features/connectors/rules.d.ts +2 -2
- package/dist/features/connectors/rules.js +1 -1
- package/dist/features/connectors/types.d.ts +2 -2
- package/dist/features/connectors/types.js +1 -1
- package/dist/features/execution/react/components/ByokProviderForm.js +3 -3
- package/dist/features/execution/react/components/ExecutionTab.js +2 -2
- package/dist/features/execution/react/components/LocalCliAgentCard.js +3 -3
- package/dist/features/execution/react/components/LocalCliAgentList.js +2 -2
- package/dist/features/execution/react/components/ProviderChipGroup.js +2 -2
- package/dist/features/execution/react/components/SearchableModelSelect.js +1 -1
- package/dist/features/execution/rules.js +1 -1
- package/dist/features/file-dropzone/react/components/FileDropzone.js +5 -3
- package/dist/features/file-dropzone/react/hooks/useFileDropzone.d.ts +1 -1
- package/dist/features/file-dropzone/react/hooks/useFileDropzone.js +1 -1
- package/dist/features/file-dropzone/types.d.ts +1 -1
- package/dist/features/file-dropzone/types.js +1 -1
- package/dist/features/folder-path-drop/react/hooks/useFolderPathDropCapture.js +6 -4
- package/dist/features/html-editor/canvas-content-wrapper.js +1 -1
- package/dist/features/html-editor/canvas-embed-placeholders.js +7 -7
- package/dist/features/html-editor/canvas-style.d.ts +4 -0
- package/dist/features/html-editor/canvas-style.js +6 -21
- package/dist/features/html-viewer/constants.d.ts +1 -1
- package/dist/features/html-viewer/constants.js +1 -1
- package/dist/features/html-viewer/react/components/PresentMenu.js +1 -1
- package/dist/features/html-viewer/react/components/ZoomMenu.js +1 -1
- package/dist/features/html-viewer/types.d.ts +1 -1
- package/dist/features/html-viewer/types.js +1 -1
- package/dist/features/i18n/dictionaries/index.d.ts +2 -3
- package/dist/features/i18n/dictionaries/settings-dialog.en.d.ts +1 -1
- package/dist/features/i18n/dictionary-translator.d.ts +16 -0
- package/dist/features/i18n/dictionary-translator.js +14 -0
- package/dist/features/i18n/index.d.ts +3 -0
- package/dist/features/i18n/index.js +2 -0
- package/dist/features/i18n/locale.d.ts +1 -1
- package/dist/features/i18n/template-i18n.d.ts +26 -0
- package/dist/features/i18n/template-i18n.js +36 -0
- package/dist/features/iframe-pool/react/components/IframeKeepAliveProvider.d.ts +1 -1
- package/dist/features/iframe-pool/react/components/IframeKeepAliveProvider.js +1 -1
- package/dist/features/instructions/react/components/InstructionsTab.js +1 -1
- package/dist/features/integrations/react/components/ClientPicker.js +4 -4
- package/dist/features/integrations/react/components/CodexInstallToggleButton.js +1 -1
- package/dist/features/integrations/react/components/IntegrationsTab.js +2 -2
- package/dist/features/integrations/react/components/SnippetBlock.js +1 -1
- package/dist/features/integrations/types.d.ts +1 -1
- package/dist/features/integrations/types.js +1 -1
- package/dist/features/interactive-ui/index.js +13 -13
- package/dist/features/interactive-ui/interactive-ui.css +1 -1
- package/dist/features/interactive-ui/providers/recharts/bar-chart.js +1 -1
- package/dist/features/interactive-ui/providers/recharts/line-chart.js +1 -1
- package/dist/features/interactive-ui/providers/recharts/pie-chart.js +2 -2
- package/dist/features/interactive-ui/providers/shadcn/lib/utils.d.ts +1 -1
- package/dist/features/interactive-ui/providers/shadcn/lib/utils.js +1 -1
- package/dist/features/interactive-ui/registry.d.ts +15 -4
- package/dist/features/interactive-ui/registry.js +5 -5
- package/dist/features/language/react/components/LanguageTab.js +2 -2
- package/dist/features/list-detail-panel/types.d.ts +1 -1
- package/dist/features/list-detail-panel/types.js +1 -1
- package/dist/features/mcp-ui/confirmation-store.js +2 -1
- package/dist/features/mcp-ui/surfaces/bridge.d.ts +2 -1
- package/dist/features/mcp-ui/surfaces/bridge.js +17 -7
- package/dist/features/mcp-ui/surfaces/confirmation.d.ts +20 -0
- package/dist/features/mcp-ui/surfaces/confirmation.js +38 -6
- package/dist/features/mcp-ui/surfaces/document.d.ts +7 -1
- package/dist/features/mcp-ui/surfaces/document.js +19 -1
- package/dist/features/mcp-ui/surfaces/text-input.js +4 -4
- package/dist/features/mcp-ui/surfaces/tokens.d.ts +17 -20
- package/dist/features/mcp-ui/surfaces/tokens.js +33 -35
- package/dist/features/media-providers/index.d.ts +1 -1
- package/dist/features/media-providers/index.js +1 -1
- package/dist/features/media-providers/react/components/MediaProvidersTab.js +4 -4
- package/dist/features/media-providers/rules.js +1 -1
- package/dist/features/memory/async-commit-guard.d.ts +1 -1
- package/dist/features/memory/constants.d.ts +1 -1
- package/dist/features/memory/constants.js +1 -1
- package/dist/features/memory/dependencies.d.ts +11 -23
- package/dist/features/memory/dependencies.js +116 -106
- package/dist/features/memory/index.d.ts +1 -1
- package/dist/features/memory/index.js +1 -1
- package/dist/features/memory/react/components/MemoryAdvancedModal.js +2 -2
- package/dist/features/memory/react/components/MemoryEntryCard.js +1 -1
- package/dist/features/memory/react/components/MemoryExtractionCard.js +1 -1
- package/dist/features/memory/react/components/MemoryHooksPanel.js +1 -1
- package/dist/features/memory/react/components/MemoryList.js +5 -5
- package/dist/features/memory/react/components/MemoryManualEditor.js +5 -5
- package/dist/features/memory/react/components/MemorySettingsPanel.js +1 -1
- package/dist/features/memory/react/hooks/useMemoryEntries.hooks.js +1 -1
- package/dist/features/memory/react/hooks/useMemoryNavigation.hooks.js +1 -1
- package/dist/features/memory/react/styles.js +1 -1
- package/dist/features/memory/rules.js +1 -1
- package/dist/features/memory/types.d.ts +1 -1
- package/dist/features/mention-autocomplete/react/hooks/useMentionAutocomplete.js +1 -1
- package/dist/features/notifications/react/components/NotificationsTab.js +7 -7
- package/dist/features/notifications/types.d.ts +1 -1
- package/dist/features/observability/boot-timing.js +2 -2
- package/dist/features/observability/stuck-run.js +1 -1
- package/dist/features/observability/white-screen.js +4 -4
- package/dist/features/panel-kit/fetch-query/adapter.react.d.ts +35 -0
- package/dist/features/panel-kit/fetch-query/adapter.react.js +122 -0
- package/dist/features/panel-kit/fetch-query/cache.d.ts +123 -0
- package/dist/features/panel-kit/fetch-query/cache.js +231 -0
- package/dist/features/panel-kit/fetch-query/environment.browser.d.ts +4 -0
- package/dist/features/panel-kit/fetch-query/environment.browser.js +25 -0
- package/dist/features/panel-kit/fetch-query/index.d.ts +4 -0
- package/dist/features/panel-kit/fetch-query/index.js +2 -0
- package/dist/features/panel-kit/fetch-query/types.d.ts +91 -0
- package/dist/features/panel-kit/fetch-query/types.js +2 -0
- package/dist/features/panel-kit/helpers/format-timestamp.d.ts +18 -0
- package/dist/features/panel-kit/helpers/format-timestamp.js +20 -0
- package/dist/features/panel-kit/helpers/permissions.d.ts +11 -0
- package/dist/features/panel-kit/helpers/permissions.js +10 -0
- package/dist/features/panel-kit/helpers/resolve-active-tab-id.d.ts +13 -0
- package/dist/features/panel-kit/helpers/resolve-active-tab-id.js +13 -0
- package/dist/features/panel-kit/helpers/retry-unreachable.d.ts +20 -0
- package/dist/features/panel-kit/helpers/retry-unreachable.js +39 -0
- package/dist/features/panel-kit/hooks/use-async-action.hooks.d.ts +13 -0
- package/dist/features/panel-kit/hooks/use-async-action.hooks.js +27 -0
- package/dist/features/panel-kit/hooks/use-dirty-guard.hooks.d.ts +18 -0
- package/dist/features/panel-kit/hooks/use-dirty-guard.hooks.js +33 -0
- package/dist/features/panel-kit/hooks/use-focus-trap.hooks.d.ts +8 -0
- package/dist/features/panel-kit/hooks/use-focus-trap.hooks.js +66 -0
- package/dist/features/panel-kit/hooks/use-serial-writes.hooks.d.ts +26 -0
- package/dist/features/panel-kit/hooks/use-serial-writes.hooks.js +41 -0
- package/dist/features/panel-kit/hooks/use-settlement-generation.hooks.d.ts +9 -0
- package/dist/features/panel-kit/hooks/use-settlement-generation.hooks.js +25 -0
- package/dist/features/panel-kit/index.d.ts +19 -0
- package/dist/features/panel-kit/index.js +13 -0
- package/dist/features/privacy/react/components/PrivacyTab.js +2 -2
- package/dist/features/privacy/types.d.ts +1 -1
- package/dist/features/privacy/types.js +1 -1
- package/dist/features/progress-card/reference-adapters.d.ts +1 -1
- package/dist/features/progress-card/rules.d.ts +1 -1
- package/dist/features/progress-card/rules.js +1 -1
- package/dist/features/progress-card/types.d.ts +1 -1
- package/dist/features/progress-card/types.js +1 -1
- package/dist/features/resource-dashboard/dependencies.d.ts +1 -1
- package/dist/features/resource-dashboard/ports.d.ts +1 -1
- package/dist/features/resource-dashboard/react/hooks/useResourceBoard.d.ts +1 -1
- package/dist/features/resource-dashboard/react/hooks/useResourceBoard.js +1 -1
- package/dist/features/resource-dashboard/rules.d.ts +1 -1
- package/dist/features/resource-dashboard/rules.js +2 -2
- package/dist/features/resource-dashboard/types.d.ts +4 -4
- package/dist/features/resource-dashboard/types.js +1 -1
- package/dist/features/schedule-picker/react/hooks/useRecurringSchedulePicker.js +1 -1
- package/dist/features/settings/dialog/styles/settings-dialog.css +62 -60
- package/dist/features/sketch-editor/constants.d.ts +1 -1
- package/dist/features/sketch-editor/constants.js +1 -1
- package/dist/features/sketch-editor/dom.d.ts +1 -1
- package/dist/features/sketch-editor/dom.js +1 -1
- package/dist/features/sketch-editor/react/hooks/useSketchDomEnhancements.d.ts +1 -1
- package/dist/features/sketch-editor/react/hooks/useSketchDomEnhancements.js +11 -9
- package/dist/features/sketch-editor/types.d.ts +1 -1
- package/dist/features/sketch-editor/types.js +1 -1
- package/dist/features/skills/react/components/SkillDraftForm.js +1 -1
- package/dist/features/skills/react/components/SkillRow.js +1 -1
- package/dist/features/skills/react/components/SkillsTab.js +2 -2
- package/dist/features/source-config-list/agent-handles.js +2 -2
- package/dist/features/source-config-list/react/hooks/useSourceConfigAddForm.d.ts +1 -1
- package/dist/features/source-config-list/react/hooks/useSourceConfigAddForm.js +1 -1
- package/dist/features/source-config-list/rules.d.ts +1 -1
- package/dist/features/source-config-list/rules.js +3 -3
- package/dist/features/source-config-list/types.d.ts +1 -1
- package/dist/features/source-config-list/types.js +1 -1
- package/dist/features/tab-launcher-menu/react/hooks/useTabLauncherMenu.js +1 -1
- package/dist/features/tab-strip/index.d.ts +4 -0
- package/dist/features/tab-strip/index.js +2 -0
- package/dist/features/tab-strip/react/components/TabBar.d.ts +23 -0
- package/dist/features/tab-strip/react/components/TabBar.hooks.d.ts +25 -0
- package/dist/features/tab-strip/react/components/TabBar.hooks.js +57 -0
- package/dist/features/tab-strip/react/components/TabBar.js +18 -0
- package/dist/features/tab-strip/react/components/TabStrip.js +2 -1
- package/dist/features/tab-strip/react/components/TabStripFrame.d.ts +3 -0
- package/dist/features/tab-strip/react/components/TabStripFrame.js +7 -0
- package/dist/features/tabbed-dialog/react/hooks/useTabbedDialog.js +1 -1
- package/dist/features/tabbed-dialog/styles/tabbed-dialog.css +8 -141
- package/dist/features/tabbed-dialog/types.d.ts +1 -1
- package/dist/features/tabbed-dialog/types.js +1 -1
- package/dist/features/version-manager/ports.d.ts +1 -1
- package/dist/features/version-manager/react/components/VersionPromptPopover.js +5 -3
- package/dist/features/version-manager/react/components/VersionRestoreControl.js +1 -1
- package/dist/features/version-manager/types.d.ts +1 -1
- package/dist/features/version-manager/types.js +1 -1
- package/dist/features/viewer-shell/dependencies.js +1 -1
- package/dist/features/viewer-shell/ports.d.ts +1 -1
- package/dist/features/viewer-shell/react/components/ViewportSwitcher.js +1 -1
- package/dist/features/viewer-shell/react/hooks/useMarkdownScrollSync.d.ts +1 -1
- package/dist/features/viewer-shell/react/hooks/useMarkdownScrollSync.js +1 -1
- package/dist/features/viewer-shell/types.d.ts +1 -1
- package/dist/features/viewer-shell/types.js +1 -1
- package/dist/index.d.ts +420 -0
- package/dist/index.js +421 -1
- package/dist/react/components/ComponentKitPreview.js +1 -1
- package/dist/react/components/EditorIcon.d.ts +1 -1
- package/dist/react/components/EditorIcon.js +22 -22
- package/dist/react/components/ExportDiagnosticsButton.d.ts +8 -1
- package/dist/react/components/ExportDiagnosticsButton.js +6 -6
- package/dist/react/components/PaletteTweaks.js +5 -5
- package/dist/react/hooks/useBrandFonts.d.ts +19 -4
- package/dist/react/hooks/useBrandFonts.js +11 -7
- package/dist/react/hooks/useDebouncedValue.d.ts +12 -1
- package/dist/react/hooks/useDebouncedValue.js +9 -4
- package/dist/react/hooks/useStableHandler.d.ts +3 -1
- package/dist/react/hooks/useStableHandler.js +1 -1
- package/dist/renderers/annotation-canvas/drawing.d.ts +4 -4
- package/dist/renderers/annotation-canvas/drawing.js +28 -15
- package/dist/renderers/annotation-canvas/react/components/AnnotationCanvas.js +2 -2
- package/dist/renderers/annotation-canvas/react/hooks/useAnnotationCanvas.js +4 -3
- package/dist/renderers/annotation-canvas/rules.d.ts +1 -1
- package/dist/renderers/annotation-canvas/theme.d.ts +13 -0
- package/dist/renderers/annotation-canvas/theme.js +16 -0
- package/dist/renderers/annotation-canvas/types.d.ts +1 -1
- package/dist/renderers/index.d.ts +1 -1
- package/dist/renderers/new-tab-preview.d.ts +3 -0
- package/dist/renderers/new-tab-preview.js +3 -1
- package/dist/renderers/preview-modal-shell/react/hooks/usePreviewModalShell.d.ts +1 -1
- package/dist/renderers/preview-modal-shell/react/hooks/usePreviewModalShell.js +1 -1
- package/dist/renderers/preview-modal-shell/rules.d.ts +1 -1
- package/dist/renderers/preview-modal-shell/types.d.ts +3 -3
- package/dist/renderers/preview-modal-shell/types.js +2 -2
- package/dist/renderers/react/components/ArtifactView.d.ts +1 -1
- package/dist/renderers/react/components/ArtifactView.js +1 -1
- package/dist/renderers/registry.d.ts +12 -6
- package/dist/renderers/registry.js +7 -9
- package/dist/renderers/renderers/html.js +2 -2
- package/dist/renderers/renderers/index.js +1 -1
- package/dist/renderers/renderers/markdown.js +2 -2
- package/dist/renderers/renderers/react-component.js +1 -1
- package/dist/renderers/renderers/svg.js +1 -1
- package/dist/renderers/shiki.js +1 -1
- package/dist/renderers/srcdoc/build.d.ts +1 -1
- package/dist/renderers/srcdoc/build.js +1 -1
- package/dist/renderers/url-load-decision.d.ts +1 -1
- package/dist/renderers/url-load-decision.js +1 -1
- package/dist/styles/admin.css +273 -0
- package/dist/styles/variables.css +117 -0
- package/dist/theme/apply.d.ts +9 -0
- package/dist/theme/apply.js +77 -0
- package/dist/theme/color-scheme.d.ts +8 -0
- package/dist/theme/color-scheme.js +9 -0
- package/dist/theme/default.d.ts +4 -0
- package/dist/theme/default.js +11 -0
- package/dist/theme/index.d.ts +6 -0
- package/dist/theme/index.js +5 -0
- package/dist/theme/stylesheet.d.ts +8 -0
- package/dist/theme/stylesheet.js +14 -0
- package/dist/theme/types.d.ts +39 -0
- package/dist/theme/types.js +2 -0
- package/dist/theme/validation.d.ts +15 -0
- package/dist/theme/validation.js +55 -0
- package/dist/utils/appearance.js +1 -1
- package/dist/utils/browser-request.d.ts +12 -0
- package/dist/utils/browser-request.js +10 -0
- package/dist/utils/color-math.d.ts +20 -6
- package/dist/utils/color-math.js +12 -12
- package/dist/utils/copy-to-clipboard.d.ts +19 -8
- package/dist/utils/copy-to-clipboard.js +15 -11
- package/dist/utils/dom-subscriptions.js +1 -1
- package/dist/utils/endpoint-policy.d.ts +9 -3
- package/dist/utils/endpoint-policy.js +5 -5
- package/dist/utils/markdown-scroll-sync.js +3 -3
- package/dist/utils/notifications.d.ts +1 -1
- package/dist/utils/notifications.js +1 -1
- package/dist/utils/polygon-selection.d.ts +1 -1
- package/dist/utils/polygon-selection.js +1 -1
- package/dist/utils/scroll-tabs-with-wheel.d.ts +4 -1
- package/dist/utils/scroll-tabs-with-wheel.js +1 -1
- package/dist/utils/smooth-scroll-to-top.js +1 -1
- package/dist/utils/sse.d.ts +3 -1
- package/dist/utils/sse.js +1 -1
- package/package.json +105 -16
- package/dist/features/lexical-rich-text-editor/react/test-support/lexical-harness.d.ts +0 -11
- package/dist/features/lexical-rich-text-editor/react/test-support/lexical-harness.js +0 -35
|
@@ -48,10 +48,10 @@ export function renderTextInput(props) {
|
|
|
48
48
|
? `<textarea class="mcpui-textarea"${common}${optionalAttribute('rows', props.rows)}>${props.value === undefined ? '' : escapeHtml(String(props.value))}</textarea>`
|
|
49
49
|
: `<input class="mcpui-input" type="${type}"${common}` +
|
|
50
50
|
optionalAttribute('value', props.value) +
|
|
51
|
-
// A stored secret (e.g. a cloud provider's access key) must never be
|
|
52
|
-
//
|
|
53
|
-
//
|
|
54
|
-
(
|
|
51
|
+
// A stored secret (e.g. a cloud provider's access key or a database password) must never be
|
|
52
|
+
// autofilled with a saved website login. `new-password`, not `off`: Chrome ignores `off` on
|
|
53
|
+
// password inputs by design and fills the saved login anyway.
|
|
54
|
+
(type === 'password' ? optionalAttribute('autocomplete', 'new-password') : '') +
|
|
55
55
|
(isNumber
|
|
56
56
|
? optionalAttribute('min', props.min) + optionalAttribute('max', props.max) + optionalAttribute('step', props.step)
|
|
57
57
|
: '') +
|
|
@@ -17,10 +17,8 @@
|
|
|
17
17
|
* alone moves the accent, its hover state, its focus ring, and its tinted background together,
|
|
18
18
|
* because all four resolve through it.
|
|
19
19
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* properties at all), so these are namespaced `--jini-mcpui-*` to stay out of the way of one if it
|
|
23
|
-
* ever lands.
|
|
20
|
+
* The sandbox cannot inherit the host's CSS. These names are a document adapter of
|
|
21
|
+
* defaultAdminTheme; hosts forward their active values through the existing overrides port.
|
|
24
22
|
*
|
|
25
23
|
* ## Dark mode
|
|
26
24
|
*
|
|
@@ -43,26 +41,26 @@
|
|
|
43
41
|
* render in whatever the engine falls back to after a delay.
|
|
44
42
|
*/
|
|
45
43
|
export declare const SURFACE_TOKENS: {
|
|
46
|
-
readonly '--jini-mcpui-bg':
|
|
47
|
-
readonly '--jini-mcpui-panel':
|
|
48
|
-
readonly '--jini-mcpui-border':
|
|
49
|
-
readonly '--jini-mcpui-border-strong':
|
|
50
|
-
readonly '--jini-mcpui-text':
|
|
51
|
-
readonly '--jini-mcpui-text-strong':
|
|
52
|
-
readonly '--jini-mcpui-text-muted':
|
|
53
|
-
readonly '--jini-mcpui-text-soft':
|
|
54
|
-
readonly '--jini-mcpui-text-faint':
|
|
55
|
-
readonly '--jini-mcpui-accent':
|
|
56
|
-
readonly '--jini-mcpui-accent-strong':
|
|
57
|
-
readonly '--jini-mcpui-danger':
|
|
44
|
+
readonly '--jini-mcpui-bg': string;
|
|
45
|
+
readonly '--jini-mcpui-panel': string;
|
|
46
|
+
readonly '--jini-mcpui-border': string;
|
|
47
|
+
readonly '--jini-mcpui-border-strong': string;
|
|
48
|
+
readonly '--jini-mcpui-text': string;
|
|
49
|
+
readonly '--jini-mcpui-text-strong': string;
|
|
50
|
+
readonly '--jini-mcpui-text-muted': string;
|
|
51
|
+
readonly '--jini-mcpui-text-soft': string;
|
|
52
|
+
readonly '--jini-mcpui-text-faint': string;
|
|
53
|
+
readonly '--jini-mcpui-accent': string;
|
|
54
|
+
readonly '--jini-mcpui-accent-strong': string;
|
|
55
|
+
readonly '--jini-mcpui-danger': string;
|
|
58
56
|
readonly '--jini-mcpui-radius-xs': "4px";
|
|
59
57
|
readonly '--jini-mcpui-radius-sm': "6px";
|
|
60
58
|
readonly '--jini-mcpui-radius-md': "8px";
|
|
61
59
|
readonly '--jini-mcpui-radius-lg': "10px";
|
|
62
60
|
readonly '--jini-mcpui-radius-xl': "12px";
|
|
63
61
|
readonly '--jini-mcpui-radius-pill': "999px";
|
|
64
|
-
readonly '--jini-mcpui-font':
|
|
65
|
-
readonly '--jini-mcpui-font-mono':
|
|
62
|
+
readonly '--jini-mcpui-font': string;
|
|
63
|
+
readonly '--jini-mcpui-font-mono': string;
|
|
66
64
|
};
|
|
67
65
|
/** The token names a caller may override. */
|
|
68
66
|
export type SurfaceTokenName = keyof typeof SURFACE_TOKENS;
|
|
@@ -79,8 +77,7 @@ export declare const SURFACE_TOKENS_DARK: Record<SurfaceTokenName, string>;
|
|
|
79
77
|
* Whether every generated surface is pinned to the light palette regardless of the embedding
|
|
80
78
|
* browser/OS's `prefers-color-scheme`.
|
|
81
79
|
*
|
|
82
|
-
* True
|
|
83
|
-
* light/dark toggle yet (`apps/admin`'s Appearance section is a disabled "SOON" placeholder), so a
|
|
80
|
+
* True by default because without an explicit app-level theme signal, a
|
|
84
81
|
* surface that honors the OS preference doesn't track any actual app theme — it tracks whatever the
|
|
85
82
|
* operator's OS happens to be set to, which produces a dark card floating in an always-light admin
|
|
86
83
|
* UI. Flip this to `false` once the host product has a real app-level theme signal to forward in;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { defaultAdminTheme } from '../../../theme/default.js';
|
|
1
2
|
/**
|
|
2
3
|
* @module features/mcp-ui/surfaces/tokens
|
|
3
4
|
*
|
|
@@ -17,10 +18,8 @@
|
|
|
17
18
|
* alone moves the accent, its hover state, its focus ring, and its tinted background together,
|
|
18
19
|
* because all four resolve through it.
|
|
19
20
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* properties at all), so these are namespaced `--jini-mcpui-*` to stay out of the way of one if it
|
|
23
|
-
* ever lands.
|
|
21
|
+
* The sandbox cannot inherit the host's CSS. These names are a document adapter of
|
|
22
|
+
* defaultAdminTheme; hosts forward their active values through the existing overrides port.
|
|
24
23
|
*
|
|
25
24
|
* ## Dark mode
|
|
26
25
|
*
|
|
@@ -43,28 +42,28 @@
|
|
|
43
42
|
* render in whatever the engine falls back to after a delay.
|
|
44
43
|
*/
|
|
45
44
|
export const SURFACE_TOKENS = {
|
|
46
|
-
'--jini-mcpui-bg':
|
|
47
|
-
'--jini-mcpui-panel':
|
|
48
|
-
'--jini-mcpui-border':
|
|
49
|
-
'--jini-mcpui-border-strong':
|
|
50
|
-
'--jini-mcpui-text':
|
|
51
|
-
'--jini-mcpui-text-strong':
|
|
52
|
-
'--jini-mcpui-text-muted':
|
|
53
|
-
'--jini-mcpui-text-soft':
|
|
54
|
-
'--jini-mcpui-text-faint':
|
|
55
|
-
'--jini-mcpui-accent':
|
|
56
|
-
'--jini-mcpui-accent-strong':
|
|
45
|
+
'--jini-mcpui-bg': defaultAdminTheme.light.bg,
|
|
46
|
+
'--jini-mcpui-panel': defaultAdminTheme.light.surface,
|
|
47
|
+
'--jini-mcpui-border': defaultAdminTheme.light.border,
|
|
48
|
+
'--jini-mcpui-border-strong': defaultAdminTheme.light.border,
|
|
49
|
+
'--jini-mcpui-text': defaultAdminTheme.light.text,
|
|
50
|
+
'--jini-mcpui-text-strong': defaultAdminTheme.light.text,
|
|
51
|
+
'--jini-mcpui-text-muted': defaultAdminTheme.light.muted,
|
|
52
|
+
'--jini-mcpui-text-soft': defaultAdminTheme.light.muted,
|
|
53
|
+
'--jini-mcpui-text-faint': defaultAdminTheme.light.muted,
|
|
54
|
+
'--jini-mcpui-accent': defaultAdminTheme.light.primary,
|
|
55
|
+
'--jini-mcpui-accent-strong': defaultAdminTheme.light.primary,
|
|
57
56
|
// Desaturated and earthy, in the same family as the accent rather than a saturated pure red — a
|
|
58
57
|
// destructive action should read as serious, not as an alarm the eye learns to discount.
|
|
59
|
-
'--jini-mcpui-danger':
|
|
58
|
+
'--jini-mcpui-danger': defaultAdminTheme.light.danger,
|
|
60
59
|
'--jini-mcpui-radius-xs': '4px',
|
|
61
60
|
'--jini-mcpui-radius-sm': '6px',
|
|
62
61
|
'--jini-mcpui-radius-md': '8px',
|
|
63
62
|
'--jini-mcpui-radius-lg': '10px',
|
|
64
63
|
'--jini-mcpui-radius-xl': '12px',
|
|
65
64
|
'--jini-mcpui-radius-pill': '999px',
|
|
66
|
-
'--jini-mcpui-font':
|
|
67
|
-
'--jini-mcpui-font-mono':
|
|
65
|
+
'--jini-mcpui-font': defaultAdminTheme.fonts.body,
|
|
66
|
+
'--jini-mcpui-font-mono': defaultAdminTheme.fonts.mono,
|
|
68
67
|
};
|
|
69
68
|
/**
|
|
70
69
|
* The dark-scheme value for every token in {@link SURFACE_TOKENS}, keyed the same way and typed as
|
|
@@ -75,18 +74,18 @@ export const SURFACE_TOKENS = {
|
|
|
75
74
|
* against exactly that omission.
|
|
76
75
|
*/
|
|
77
76
|
export const SURFACE_TOKENS_DARK = {
|
|
78
|
-
'--jini-mcpui-bg':
|
|
79
|
-
'--jini-mcpui-panel':
|
|
80
|
-
'--jini-mcpui-border':
|
|
81
|
-
'--jini-mcpui-border-strong':
|
|
82
|
-
'--jini-mcpui-text':
|
|
83
|
-
'--jini-mcpui-text-strong':
|
|
84
|
-
'--jini-mcpui-text-muted':
|
|
85
|
-
'--jini-mcpui-text-soft':
|
|
86
|
-
'--jini-mcpui-text-faint':
|
|
87
|
-
'--jini-mcpui-accent':
|
|
88
|
-
'--jini-mcpui-accent-strong':
|
|
89
|
-
'--jini-mcpui-danger':
|
|
77
|
+
'--jini-mcpui-bg': defaultAdminTheme.dark.bg,
|
|
78
|
+
'--jini-mcpui-panel': defaultAdminTheme.dark.surface,
|
|
79
|
+
'--jini-mcpui-border': defaultAdminTheme.dark.border,
|
|
80
|
+
'--jini-mcpui-border-strong': defaultAdminTheme.dark.border,
|
|
81
|
+
'--jini-mcpui-text': defaultAdminTheme.dark.text,
|
|
82
|
+
'--jini-mcpui-text-strong': defaultAdminTheme.dark.text,
|
|
83
|
+
'--jini-mcpui-text-muted': defaultAdminTheme.dark.muted,
|
|
84
|
+
'--jini-mcpui-text-soft': defaultAdminTheme.dark.muted,
|
|
85
|
+
'--jini-mcpui-text-faint': defaultAdminTheme.dark.muted,
|
|
86
|
+
'--jini-mcpui-accent': defaultAdminTheme.dark.primary,
|
|
87
|
+
'--jini-mcpui-accent-strong': defaultAdminTheme.dark.primary,
|
|
88
|
+
'--jini-mcpui-danger': defaultAdminTheme.dark.danger,
|
|
90
89
|
'--jini-mcpui-radius-xs': SURFACE_TOKENS['--jini-mcpui-radius-xs'],
|
|
91
90
|
'--jini-mcpui-radius-sm': SURFACE_TOKENS['--jini-mcpui-radius-sm'],
|
|
92
91
|
'--jini-mcpui-radius-md': SURFACE_TOKENS['--jini-mcpui-radius-md'],
|
|
@@ -102,10 +101,10 @@ export const SURFACE_TOKENS_DARK = {
|
|
|
102
101
|
* which is the exact failure this indirection removes.
|
|
103
102
|
*/
|
|
104
103
|
const DERIVED_TOKENS = {
|
|
105
|
-
'--jini-mcpui-accent-hover': 'color-mix(in srgb, var(--jini-mcpui-accent) 88%,
|
|
104
|
+
'--jini-mcpui-accent-hover': 'color-mix(in srgb, var(--jini-mcpui-accent) 88%, var(--jini-mcpui-text))',
|
|
106
105
|
'--jini-mcpui-accent-tint': 'color-mix(in srgb, var(--jini-mcpui-accent) 10%, transparent)',
|
|
107
106
|
'--jini-mcpui-accent-ring': 'color-mix(in srgb, var(--jini-mcpui-accent) 35%, transparent)',
|
|
108
|
-
'--jini-mcpui-danger-hover': 'color-mix(in srgb, var(--jini-mcpui-danger) 88%,
|
|
107
|
+
'--jini-mcpui-danger-hover': 'color-mix(in srgb, var(--jini-mcpui-danger) 88%, var(--jini-mcpui-text))',
|
|
109
108
|
'--jini-mcpui-danger-tint': 'color-mix(in srgb, var(--jini-mcpui-danger) 10%, transparent)',
|
|
110
109
|
'--jini-mcpui-danger-ring': 'color-mix(in srgb, var(--jini-mcpui-danger) 35%, transparent)',
|
|
111
110
|
'--jini-mcpui-surface-shadow': '0 1px 2px color-mix(in srgb, var(--jini-mcpui-text) 8%, transparent)',
|
|
@@ -119,13 +118,12 @@ const DERIVED_TOKENS = {
|
|
|
119
118
|
* itself is light. A drop shadow should stay dark ink at low opacity in both schemes, so this is a
|
|
120
119
|
* fixed value the dark media block below applies as a second, later declaration of the same property.
|
|
121
120
|
*/
|
|
122
|
-
const DARK_SURFACE_SHADOW = '0 1px 2px
|
|
121
|
+
const DARK_SURFACE_SHADOW = '0 1px 2px color-mix(in srgb, var(--jini-mcpui-bg) 32%, transparent)';
|
|
123
122
|
/**
|
|
124
123
|
* Whether every generated surface is pinned to the light palette regardless of the embedding
|
|
125
124
|
* browser/OS's `prefers-color-scheme`.
|
|
126
125
|
*
|
|
127
|
-
* True
|
|
128
|
-
* light/dark toggle yet (`apps/admin`'s Appearance section is a disabled "SOON" placeholder), so a
|
|
126
|
+
* True by default because without an explicit app-level theme signal, a
|
|
129
127
|
* surface that honors the OS preference doesn't track any actual app theme — it tracks whatever the
|
|
130
128
|
* operator's OS happens to be set to, which produces a dark card floating in an always-light admin
|
|
131
129
|
* UI. Flip this to `false` once the host product has a real app-level theme signal to forward in;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { DEFAULT_MEDIA_PROVIDER_CATALOG } from './constants.js';
|
|
2
2
|
export { createFakeMediaProvidersPort, type FakeMediaProvidersPortOptions } from './dependencies.js';
|
|
3
3
|
export type { MediaProvidersPort } from './ports.js';
|
|
4
|
-
export { hasAnyConfiguredProvider, hasRecoverableFields, isEntryEmpty, isEntryPresent, isMarkerOnlyEntry, maskedKeyLabel, mergeDaemonProviders, resolveProviderBaseUrl, shouldSyncLocalProvidersToDaemon, sortProvidersByConfigured, } from './rules.js';
|
|
4
|
+
export { hasAnyConfiguredProvider, hasRecoverableFields, isEntryEmpty, isEntryPresent, isMarkerOnlyEntry, maskedKeyLabel, mergeDaemonProviders, resolveProviderBaseUrl, shouldSyncLocalProvidersToDaemon, sortProvidersByConfigured, isProviderBaseUrlInvalid, invalidBaseUrlProviderIds, } from './rules.js';
|
|
5
5
|
export type { MediaProviderCredentials, MediaProviderMap, MediaProviderOption, MediaProvidersLoadState, MediaProvidersSaveState, } from './types.js';
|
|
6
6
|
export { useMediaProvidersTab } from './react/hooks/useMediaProvidersTab.js';
|
|
7
7
|
export type { MediaProviderEditPatch, UseMediaProvidersTabOptions, UseMediaProvidersTabResult, } from './react/hooks/useMediaProvidersTab.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { DEFAULT_MEDIA_PROVIDER_CATALOG } from './constants.js';
|
|
2
2
|
export { createFakeMediaProvidersPort } from './dependencies.js';
|
|
3
|
-
export { hasAnyConfiguredProvider, hasRecoverableFields, isEntryEmpty, isEntryPresent, isMarkerOnlyEntry, maskedKeyLabel, mergeDaemonProviders, resolveProviderBaseUrl, shouldSyncLocalProvidersToDaemon, sortProvidersByConfigured, } from './rules.js';
|
|
3
|
+
export { hasAnyConfiguredProvider, hasRecoverableFields, isEntryEmpty, isEntryPresent, isMarkerOnlyEntry, maskedKeyLabel, mergeDaemonProviders, resolveProviderBaseUrl, shouldSyncLocalProvidersToDaemon, sortProvidersByConfigured, isProviderBaseUrlInvalid, invalidBaseUrlProviderIds, } from './rules.js';
|
|
4
4
|
export { useMediaProvidersTab } from './react/hooks/useMediaProvidersTab.js';
|
|
5
5
|
export { MediaProvidersTab } from './react/components/MediaProvidersTab.js';
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -57,7 +57,7 @@ export function MediaProvidersTab({ port, catalog = DEFAULT_MEDIA_PROVIDER_CATAL
|
|
|
57
57
|
};
|
|
58
58
|
const orderedCatalog = sortProvidersByConfigured(catalog, providers, pinnedProviderIds);
|
|
59
59
|
const providerHandles = agentHandle
|
|
60
|
-
? buildAgentListHandles(agentHandle, orderedCatalog.map((option) => option.id))
|
|
60
|
+
? buildAgentListHandles({ prefix: agentHandle, ids: orderedCatalog.map((option) => option.id) })
|
|
61
61
|
: undefined;
|
|
62
62
|
// Membership check against the ALREADY-ORDERED result, not `pinnedProviderIds` directly: a
|
|
63
63
|
// pinned id absent from `catalog` never appears in `orderedCatalog` either (see
|
|
@@ -68,7 +68,7 @@ export function MediaProvidersTab({ port, catalog = DEFAULT_MEDIA_PROVIDER_CATAL
|
|
|
68
68
|
// Save writes every provider at once, so ONE unacceptable endpoint blocks the
|
|
69
69
|
// whole button rather than being silently persisted alongside the good ones.
|
|
70
70
|
const blockedByInvalidBaseUrl = invalidBaseUrlProviderIds(providers).length > 0;
|
|
71
|
-
return (_jsxs("section", { className: "jini-settings-section jini-settings-media-providers", children: [_jsxs("div", { className: "jini-section-head", children: [_jsxs("div", { children: [_jsx("h4", { children: title }), _jsx("p", { className: "jini-hint", children: description })] }), _jsxs("button", { type: "button", className: "jini-button jini-button-ghost", onClick: reload, disabled: load.status === 'loading', ...agentHandleProps(agentHandle, { action: 'reload', role: 'button', label: reloadLabel }), children: [_jsx(Icon, { name: "refresh", size: 13 }), _jsx("span", { children: load.status === 'loading' ? reloadingLabel : reloadLabel })] })] }), load.status === 'unreachable' ? (_jsx("p", { className: "jini-hint jini-hint-error", role: "alert", children: unreachableLabel })) : null, !hasAnyConfigured ? _jsx("p", { className: "jini-hint", children: emptyStateLabel }) : null, _jsx("div", { className: "jini-media-provider-list", children: orderedCatalog.map((option, index) => {
|
|
71
|
+
return (_jsxs("section", { className: "jini-settings-section jini-settings-media-providers", children: [_jsxs("div", { className: "jini-section-head", children: [_jsxs("div", { children: [_jsx("h4", { children: title }), _jsx("p", { className: "jini-hint", children: description })] }), _jsxs("button", { type: "button", className: "jini-button jini-button-ghost", onClick: reload, disabled: load.status === 'loading', ...agentHandleProps({}, { base: agentHandle, ...({ action: 'reload', role: 'button', label: reloadLabel }) }), children: [_jsx(Icon, { name: "refresh", size: 13 }), _jsx("span", { children: load.status === 'loading' ? reloadingLabel : reloadLabel })] })] }), load.status === 'unreachable' ? (_jsx("p", { className: "jini-hint jini-hint-error", role: "alert", children: unreachableLabel })) : null, !hasAnyConfigured ? _jsx("p", { className: "jini-hint", children: emptyStateLabel }) : null, _jsx("div", { className: "jini-media-provider-list", children: orderedCatalog.map((option, index) => {
|
|
72
72
|
const entry = providers[option.id] ?? {};
|
|
73
73
|
const clearable = isEntryPresent(entry);
|
|
74
74
|
const saved = isMarkerOnlyEntry(entry);
|
|
@@ -96,7 +96,7 @@ export function MediaProvidersTab({ port, catalog = DEFAULT_MEDIA_PROVIDER_CATAL
|
|
|
96
96
|
credential-shaped fields, which is how a saved password gets autofilled into
|
|
97
97
|
an API-key box. Same defect, same fix, same reasoning as
|
|
98
98
|
`ByokProviderForm`'s own API-key input; see its comment. */
|
|
99
|
-
autoComplete: "new-password", spellCheck: false, placeholder: saved ? maskedLabel : apiKeyPlaceholder, "aria-label": `${option.label} ${apiKeyLabel}`, value: entry.apiKey ?? '', onChange: (event) => updateProvider(option.id, { apiKey: event.target.value }), ...agentHandleProps(providerHandle, { action: 'api-key', role: 'field', label: `${option.label} ${apiKeyLabel}` }) }), _jsx("button", { type: "button", className: "jini-input-affix-btn", "aria-pressed": keyVisible, "aria-label": `${option.label} ${keyVisible ? hideKeyLabel : showKeyLabel}`, onClick: () => toggleKeyVisible(option.id), ...agentHandleProps(providerHandle, { action: 'reveal-key', role: 'button', label: `${option.label} ${showKeyLabel}` }), children: _jsx(Icon, { name: keyVisible ? 'eye-off' : 'eye', size: 14 }) })] }), _jsxs("label", { className: "jini-media-provider-field", children: [_jsx("span", { className: "jini-field-label jini-sr-only", children: baseUrlLabel }), _jsx("input", { className: "jini-input", type: "url", inputMode: "url", spellCheck: false, placeholder: option.defaultBaseUrl || baseUrlPlaceholder, "aria-label": `${option.label} ${baseUrlLabel}`, value: rawBaseUrl, "aria-invalid": baseUrlInvalid || undefined, onChange: (event) => updateProvider(option.id, { baseUrl: event.target.value }), ...agentHandleProps(providerHandle, { action: 'base-url', role: 'field', label: `${option.label} ${baseUrlLabel}` }) })] }), option.models && option.models.length > 0 ? (_jsxs("label", { className: "jini-media-provider-field", children: [_jsx("span", { className: "jini-field-label jini-sr-only", children: modelLabel }), _jsx("input", { className: "jini-input", list: modelListId, spellCheck: false, placeholder: modelPlaceholder, "aria-label": `${option.label} ${modelLabel}`, value: entry.model ?? '', onChange: (event) => updateProvider(option.id, { model: event.target.value }), ...agentHandleProps(providerHandle, { action: 'model', role: 'field', label: `${option.label} ${modelLabel}` }) }), _jsx("datalist", { id: modelListId, children: option.models.map((model) => (_jsx("option", { value: model }, model))) })] })) : null, _jsx("button", { type: "button", className: "jini-button jini-button-ghost", disabled: !clearable, "aria-label": `${option.label} ${clearLabel}`, onClick: () => clearProvider(option.id), ...agentHandleProps(providerHandle, { action: 'clear', role: 'button', label: `${option.label} ${clearLabel}` }), children: clearLabel })] }), baseUrlInvalid ? (_jsx("span", { className: "jini-field-hint jini-hint-error", role: "alert", children: baseUrlInvalidLabel })) : !rawBaseUrl.trim() && effectiveBaseUrl ? (_jsx("span", { className: "jini-field-hint", children: t(baseUrlDefaultHintTemplate, { url: effectiveBaseUrl }) })) : null] })] }, option.id));
|
|
100
|
-
}) }), _jsxs("div", { className: "jini-media-provider-save-row", children: [_jsx("button", { type: "button", className: "jini-button", onClick: saveChanges, disabled: save.status === 'saving' || !hasPendingChanges || blockedByInvalidBaseUrl, ...agentHandleProps(agentHandle, { action: 'save', role: 'button', label: saveChangesLabel }), children: save.status === 'saving' ? savingLabel : saveChangesLabel }), save.status === 'saved' ? (_jsx("span", { className: "jini-hint", role: "status", children: savedNoticeLabel })) : null, save.status === 'save-error' ? (_jsx("span", { className: "jini-hint jini-hint-error", role: "alert", children: saveErrorLabel })) : null] })] }));
|
|
99
|
+
autoComplete: "new-password", spellCheck: false, placeholder: saved ? maskedLabel : apiKeyPlaceholder, "aria-label": `${option.label} ${apiKeyLabel}`, value: entry.apiKey ?? '', onChange: (event) => updateProvider(option.id, { apiKey: event.target.value }), ...agentHandleProps({}, { base: providerHandle, ...({ action: 'api-key', role: 'field', label: `${option.label} ${apiKeyLabel}` }) }) }), _jsx("button", { type: "button", className: "jini-input-affix-btn", "aria-pressed": keyVisible, "aria-label": `${option.label} ${keyVisible ? hideKeyLabel : showKeyLabel}`, onClick: () => toggleKeyVisible(option.id), ...agentHandleProps({}, { base: providerHandle, ...({ action: 'reveal-key', role: 'button', label: `${option.label} ${showKeyLabel}` }) }), children: _jsx(Icon, { name: keyVisible ? 'eye-off' : 'eye', size: 14 }) })] }), _jsxs("label", { className: "jini-media-provider-field", children: [_jsx("span", { className: "jini-field-label jini-sr-only", children: baseUrlLabel }), _jsx("input", { className: "jini-input", type: "url", inputMode: "url", spellCheck: false, placeholder: option.defaultBaseUrl || baseUrlPlaceholder, "aria-label": `${option.label} ${baseUrlLabel}`, value: rawBaseUrl, "aria-invalid": baseUrlInvalid || undefined, onChange: (event) => updateProvider(option.id, { baseUrl: event.target.value }), ...agentHandleProps({}, { base: providerHandle, ...({ action: 'base-url', role: 'field', label: `${option.label} ${baseUrlLabel}` }) }) })] }), option.models && option.models.length > 0 ? (_jsxs("label", { className: "jini-media-provider-field", children: [_jsx("span", { className: "jini-field-label jini-sr-only", children: modelLabel }), _jsx("input", { className: "jini-input", list: modelListId, spellCheck: false, placeholder: modelPlaceholder, "aria-label": `${option.label} ${modelLabel}`, value: entry.model ?? '', onChange: (event) => updateProvider(option.id, { model: event.target.value }), ...agentHandleProps({}, { base: providerHandle, ...({ action: 'model', role: 'field', label: `${option.label} ${modelLabel}` }) }) }), _jsx("datalist", { id: modelListId, children: option.models.map((model) => (_jsx("option", { value: model }, model))) })] })) : null, _jsx("button", { type: "button", className: "jini-button jini-button-ghost", disabled: !clearable, "aria-label": `${option.label} ${clearLabel}`, onClick: () => clearProvider(option.id), ...agentHandleProps({}, { base: providerHandle, ...({ action: 'clear', role: 'button', label: `${option.label} ${clearLabel}` }) }), children: clearLabel })] }), baseUrlInvalid ? (_jsx("span", { className: "jini-field-hint jini-hint-error", role: "alert", children: baseUrlInvalidLabel })) : !rawBaseUrl.trim() && effectiveBaseUrl ? (_jsx("span", { className: "jini-field-hint", children: t(baseUrlDefaultHintTemplate, { url: effectiveBaseUrl }) })) : null] })] }, option.id));
|
|
100
|
+
}) }), _jsxs("div", { className: "jini-media-provider-save-row", children: [_jsx("button", { type: "button", className: "jini-button", onClick: saveChanges, disabled: save.status === 'saving' || !hasPendingChanges || blockedByInvalidBaseUrl, ...agentHandleProps({}, { base: agentHandle, ...({ action: 'save', role: 'button', label: saveChangesLabel }) }), children: save.status === 'saving' ? savingLabel : saveChangesLabel }), save.status === 'saved' ? (_jsx("span", { className: "jini-hint", role: "status", children: savedNoticeLabel })) : null, save.status === 'save-error' ? (_jsx("span", { className: "jini-hint jini-hint-error", role: "alert", children: saveErrorLabel })) : null] })] }));
|
|
101
101
|
}
|
|
102
102
|
//# sourceMappingURL=MediaProvidersTab.js.map
|
|
@@ -155,7 +155,7 @@ export function isProviderBaseUrlInvalid(entry) {
|
|
|
155
155
|
const typed = entry?.baseUrl?.trim();
|
|
156
156
|
if (!typed)
|
|
157
157
|
return false;
|
|
158
|
-
return !isAllowedEndpointUrl(typed);
|
|
158
|
+
return !isAllowedEndpointUrl({ raw: typed });
|
|
159
159
|
}
|
|
160
160
|
/** Every provider id in the map whose typed base URL is unacceptable — the save gate's input. */
|
|
161
161
|
export function invalidBaseUrlProviderIds(providers) {
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* useMemoryConfig's hydrate() — invalidate() was only called at toggle
|
|
19
19
|
* start, not in the write's onSettled callback — before being caught in
|
|
20
20
|
* review and fixed. Ported with that fix already applied — see
|
|
21
|
-
* `packages/ui/
|
|
21
|
+
* `packages/ui/archived provenance ledger`.)
|
|
22
22
|
*/
|
|
23
23
|
export interface AsyncCommitGuard {
|
|
24
24
|
begin: () => number;
|
|
@@ -27,7 +27,7 @@ export declare function connectorAppLabel(connectorId: string): string | undefin
|
|
|
27
27
|
/**
|
|
28
28
|
* Placeholder `provider` label for a memory-connector catalogue row this
|
|
29
29
|
* client has only an id for (no full connector detail has loaded yet).
|
|
30
|
-
* The pinned source hardcoded `'
|
|
30
|
+
* The pinned source hardcoded `'connector-provider'` here — that's a specific
|
|
31
31
|
* third-party OAuth-integration vendor OD's real deployment happens to use,
|
|
32
32
|
* not a generic concept, so this package uses a neutral placeholder instead;
|
|
33
33
|
* a host resolving real connector details overwrites it via
|
|
@@ -65,7 +65,7 @@ export function connectorAppLabel(connectorId) {
|
|
|
65
65
|
/**
|
|
66
66
|
* Placeholder `provider` label for a memory-connector catalogue row this
|
|
67
67
|
* client has only an id for (no full connector detail has loaded yet).
|
|
68
|
-
* The pinned source hardcoded `'
|
|
68
|
+
* The pinned source hardcoded `'connector-provider'` here — that's a specific
|
|
69
69
|
* third-party OAuth-integration vendor OD's real deployment happens to use,
|
|
70
70
|
* not a generic concept, so this package uses a neutral placeholder instead;
|
|
71
71
|
* a host resolving real connector details overwrites it via
|
|
@@ -1,29 +1,17 @@
|
|
|
1
1
|
import type { Connector } from '../connectors/types.js';
|
|
2
2
|
import type { MemoryConfigPort, MemoryConnectorsPort, MemoryEntriesPort, MemoryExtractionsPort } from './ports.js';
|
|
3
3
|
import type { ConnectorMemorySuggestionResponse, MemoryListResponse } from './types.js';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
* fields to `undefined`. Fixed the same way `fetchMemoryEntry()` below
|
|
16
|
-
* already handles a missing required field: validate every field this
|
|
17
|
-
* shared read path's callers actually trust unconditionally, and throw
|
|
18
|
-
* instead of returning a response that looks like a legitimate empty state.
|
|
19
|
-
* The four per-hook flags are deliberately NOT added to this list — they
|
|
20
|
-
* keep their own established legacy-default semantics in `hydrate()`
|
|
21
|
-
* (`list.xEnabled !== false`), so their absence is intentionally not a
|
|
22
|
-
* transport failure.
|
|
23
|
-
*/
|
|
24
|
-
export declare function fetchMemoryList(): Promise<MemoryListResponse>;
|
|
25
|
-
export declare const memoryEntriesPort: MemoryEntriesPort;
|
|
26
|
-
export declare const memoryExtractionsPort: MemoryExtractionsPort;
|
|
4
|
+
/** Build the real REST ports with one native fetch binding; defaults remain browser-owned. */
|
|
5
|
+
export declare function createMemoryHttpPorts(_required: Record<string, never>, { fetch }?: {
|
|
6
|
+
fetch?: typeof globalThis.fetch;
|
|
7
|
+
}): {
|
|
8
|
+
config: MemoryConfigPort;
|
|
9
|
+
entries: MemoryEntriesPort;
|
|
10
|
+
extractions: MemoryExtractionsPort;
|
|
11
|
+
};
|
|
12
|
+
export declare const memoryConfigPort: MemoryConfigPort, memoryEntriesPort: MemoryEntriesPort, memoryExtractionsPort: MemoryExtractionsPort;
|
|
13
|
+
/** Standalone default read shares the entries port's validated REST implementation. */
|
|
14
|
+
export declare const fetchMemoryList: () => Promise<MemoryListResponse>;
|
|
27
15
|
export interface FakeMemoryConnectorsPortOptions {
|
|
28
16
|
connectors?: Connector[];
|
|
29
17
|
suggestionResponse?: ConnectorMemorySuggestionResponse | null;
|