@agent-native/core 0.98.4 → 0.98.6
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/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +28 -0
- package/corpus/core/docs/content/durable-background-runs.mdx +37 -0
- package/corpus/core/docs/content/external-agents.mdx +62 -7
- package/corpus/core/docs/content/locales/ar-SA/external-agents.mdx +38 -7
- package/corpus/core/docs/content/locales/ar-SA/tracking.mdx +2 -0
- package/corpus/core/docs/content/locales/de-DE/external-agents.mdx +39 -7
- package/corpus/core/docs/content/locales/de-DE/tracking.mdx +2 -0
- package/corpus/core/docs/content/locales/es-ES/external-agents.mdx +39 -7
- package/corpus/core/docs/content/locales/es-ES/tracking.mdx +2 -0
- package/corpus/core/docs/content/locales/fr-FR/external-agents.mdx +39 -7
- package/corpus/core/docs/content/locales/fr-FR/tracking.mdx +4 -2
- package/corpus/core/docs/content/locales/hi-IN/external-agents.mdx +38 -7
- package/corpus/core/docs/content/locales/hi-IN/tracking.mdx +2 -0
- package/corpus/core/docs/content/locales/ja-JP/external-agents.mdx +38 -7
- package/corpus/core/docs/content/locales/ja-JP/tracking.mdx +2 -0
- package/corpus/core/docs/content/locales/ko-KR/external-agents.mdx +38 -7
- package/corpus/core/docs/content/locales/ko-KR/tracking.mdx +2 -0
- package/corpus/core/docs/content/locales/pt-BR/external-agents.mdx +39 -7
- package/corpus/core/docs/content/locales/pt-BR/tracking.mdx +2 -0
- package/corpus/core/docs/content/locales/zh-CN/external-agents.mdx +37 -7
- package/corpus/core/docs/content/locales/zh-CN/tracking.mdx +2 -0
- package/corpus/core/docs/content/locales/zh-TW/durable-background-runs.mdx +14 -0
- package/corpus/core/docs/content/locales/zh-TW/external-agents.mdx +37 -7
- package/corpus/core/docs/content/locales/zh-TW/tracking.mdx +2 -0
- package/corpus/core/docs/content/tracking.mdx +2 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/a2a/handlers.ts +95 -21
- package/corpus/core/src/a2a/task-store.ts +65 -3
- package/corpus/core/src/agent/durable-background.ts +16 -16
- package/corpus/core/src/agent/engine/ai-sdk-engine.ts +25 -8
- package/corpus/core/src/agent/engine/anthropic-engine.ts +17 -3
- package/corpus/core/src/agent/engine/output-tokens.ts +6 -6
- package/corpus/core/src/agent/production-agent.ts +200 -27
- package/corpus/core/src/agent/run-manager.ts +81 -1
- package/corpus/core/src/agent/run-store.ts +301 -41
- package/corpus/core/src/client/AgentPanel.tsx +6 -2
- package/corpus/core/src/client/AssistantChat.tsx +364 -69
- package/corpus/core/src/client/agent-chat-adapter.ts +169 -1
- package/corpus/core/src/client/chat/message-components.tsx +3 -0
- package/corpus/core/src/client/chat/tool-call-display.tsx +20 -36
- package/corpus/core/src/client/conversation/use-near-bottom-autoscroll.ts +7 -0
- package/corpus/core/src/client/extensions/AgentNativeExtensionFrame.tsx +2 -0
- package/corpus/core/src/client/extensions/EmbeddedExtension.tsx +2 -0
- package/corpus/core/src/client/extensions/ExtensionEditor.tsx +9 -2
- package/corpus/core/src/client/extensions/ExtensionViewer.tsx +2 -0
- package/corpus/core/src/client/extensions/InlineExtensionFrame.tsx +2 -0
- package/corpus/core/src/client/extensions/portable-extension.ts +2 -0
- package/corpus/core/src/client/session-replay.ts +361 -29
- package/corpus/core/src/client/sse-event-processor.ts +43 -1
- package/corpus/core/src/demo/actions/toggle-demo-mode.ts +1 -1
- package/corpus/core/src/demo/config.ts +6 -6
- package/corpus/core/src/demo/fetch-interceptor.ts +13 -4
- package/corpus/core/src/demo/redact.ts +13 -149
- package/corpus/core/src/extensions/html-shell.ts +3 -0
- package/corpus/core/src/extensions/session-replay-iframe.ts +131 -0
- package/corpus/core/src/integrations/adapters/slack.ts +123 -13
- package/corpus/core/src/integrations/identity-links-store.ts +210 -0
- package/corpus/core/src/integrations/identity.ts +132 -0
- package/corpus/core/src/integrations/index.ts +6 -0
- package/corpus/core/src/integrations/plugin.ts +58 -1
- package/corpus/core/src/integrations/types.ts +7 -0
- package/corpus/core/src/mcp/build-server.ts +127 -22
- package/corpus/core/src/mcp/external-agent-policy.ts +18 -0
- package/corpus/core/src/mcp/index.ts +1 -0
- package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +1 -20
- package/corpus/core/src/server/agent-chat/plugin-options.ts +12 -1
- package/corpus/core/src/server/agent-chat/script-entries.ts +20 -3
- package/corpus/core/src/server/agent-chat-plugin.ts +3 -0
- package/corpus/core/src/session-replay-iframe-protocol.ts +58 -0
- package/corpus/core/src/shared/reasoning-effort.ts +35 -0
- package/corpus/core/src/styles/agent-conversation.css +26 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +34 -5
- package/corpus/core/src/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -15
- package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +30 -21
- package/corpus/templates/analytics/AGENTS.md +27 -0
- package/corpus/templates/analytics/actions/create-session-replay-agent-link.ts +0 -1
- package/corpus/templates/analytics/actions/get-error-issue.ts +1 -0
- package/corpus/templates/analytics/actions/get-session-replay-summary.ts +1 -0
- package/corpus/templates/analytics/actions/get-session-replay-timeline.ts +40 -0
- package/corpus/templates/analytics/actions/list-error-issues.ts +13 -0
- package/corpus/templates/analytics/actions/list-session-recordings.ts +1 -0
- package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +4 -0
- package/corpus/templates/analytics/app/global.css +2 -2
- package/corpus/templates/analytics/app/hooks/use-dashboard-chat-context.ts +41 -4
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +52 -203
- package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +69 -16
- package/corpus/templates/analytics/changelog/2026-07-12-analytics-chat-retries-before-showing-a-generic-no-data-mess.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-12-analytics-sessions-search-no-longer-loses-fast-keystrokes-an.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-12-chart-selection-respects-chat-state.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-12-connected-external-agents-can-now-look-up-sessions-error-iss.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-12-demo-mode-anonymizes-error-reporting-emails.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-12-session-identities-stay-visible-when-demo-mode-is-off.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-12-session-replays-show-iframe-content.md +6 -0
- package/corpus/templates/analytics/netlify.toml +0 -3
- package/corpus/templates/analytics/server/lib/analytics-connector-catalog.ts +14 -0
- package/corpus/templates/analytics/server/lib/error-capture.ts +101 -2
- package/corpus/templates/analytics/server/lib/real-data-actions.ts +24 -0
- package/corpus/templates/analytics/server/lib/session-replay-agent-context.ts +49 -17
- package/corpus/templates/analytics/server/lib/session-replay.ts +18 -16
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +43 -6
- package/corpus/templates/analytics/server/plugins/db.ts +15 -0
- package/corpus/templates/assets/app/global.css +1 -1
- package/corpus/templates/brain/app/global.css +2 -2
- package/corpus/templates/brain/changelog/2026-07-12-fix-long-response-progress.md +6 -0
- package/corpus/templates/forms/app/components/CloudUpgrade.tsx +1 -1
- package/corpus/templates/forms/app/components/ThemeToggle.tsx +22 -6
- package/corpus/templates/forms/app/components/builder/FieldPropertiesPanel.tsx +5 -5
- package/corpus/templates/forms/app/components/builder/FieldRenderer.tsx +3 -3
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +16 -16
- package/corpus/templates/forms/app/global.css +164 -13
- package/corpus/templates/forms/app/pages/AskPage.tsx +35 -13
- package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +143 -67
- package/corpus/templates/forms/app/pages/FormFillPage.tsx +44 -11
- package/corpus/templates/forms/app/pages/FormsListPage.tsx +42 -24
- package/corpus/templates/forms/app/pages/ResponseInsightsPage.tsx +28 -15
- package/corpus/templates/forms/app/pages/ResponsesPage.tsx +46 -20
- package/corpus/templates/forms/app/routes/_app.settings.tsx +1 -1
- package/corpus/templates/forms/changelog/2026-07-12-ask-forms-suggestions-now-sit-beneath-the-composer-for-a-tig.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-12-builder-response-tables-now-fill-the-view-without-a-redundan.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-12-form-builder-surfaces-are-calmer-fields-stay-stable-on-hover.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-12-response-tables-now-fill-the-available-pane-with-a-flexible-.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-12-smoother-more-tactile-controls-throughout-animated-icon-and-.md +6 -0
- package/corpus/templates/mail/AGENTS.md +3 -1
- package/corpus/templates/mail/app/components/email/EmailThread.tsx +21 -13
- package/corpus/templates/mail/app/components/email/email-iframe-document.ts +18 -0
- package/corpus/templates/mail/server/lib/mail-integrations.ts +3 -0
- package/dist/a2a/handlers.d.ts.map +1 -1
- package/dist/a2a/handlers.js +84 -15
- package/dist/a2a/handlers.js.map +1 -1
- package/dist/a2a/task-store.d.ts +20 -1
- package/dist/a2a/task-store.d.ts.map +1 -1
- package/dist/a2a/task-store.js +57 -4
- package/dist/a2a/task-store.js.map +1 -1
- package/dist/agent/durable-background.d.ts +10 -10
- package/dist/agent/durable-background.d.ts.map +1 -1
- package/dist/agent/durable-background.js +16 -16
- package/dist/agent/durable-background.js.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.js +19 -8
- package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
- package/dist/agent/engine/anthropic-engine.js +11 -3
- package/dist/agent/engine/anthropic-engine.js.map +1 -1
- package/dist/agent/engine/output-tokens.js +6 -6
- package/dist/agent/engine/output-tokens.js.map +1 -1
- package/dist/agent/production-agent.d.ts +52 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +154 -26
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-manager.d.ts +9 -0
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +71 -1
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/run-store.d.ts +9 -0
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +243 -48
- package/dist/agent/run-store.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +6 -2
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +21 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +298 -67
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +146 -1
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +2 -1
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts +3 -1
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +13 -37
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/conversation/use-near-bottom-autoscroll.d.ts +1 -0
- package/dist/client/conversation/use-near-bottom-autoscroll.d.ts.map +1 -1
- package/dist/client/conversation/use-near-bottom-autoscroll.js +6 -0
- package/dist/client/conversation/use-near-bottom-autoscroll.js.map +1 -1
- package/dist/client/extensions/AgentNativeExtensionFrame.d.ts.map +1 -1
- package/dist/client/extensions/AgentNativeExtensionFrame.js +2 -1
- package/dist/client/extensions/AgentNativeExtensionFrame.js.map +1 -1
- package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
- package/dist/client/extensions/EmbeddedExtension.js +2 -1
- package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
- package/dist/client/extensions/ExtensionEditor.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionEditor.js +5 -2
- package/dist/client/extensions/ExtensionEditor.js.map +1 -1
- package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionViewer.js +2 -1
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/extensions/InlineExtensionFrame.d.ts.map +1 -1
- package/dist/client/extensions/InlineExtensionFrame.js +2 -1
- package/dist/client/extensions/InlineExtensionFrame.js.map +1 -1
- package/dist/client/extensions/portable-extension.d.ts.map +1 -1
- package/dist/client/extensions/portable-extension.js +2 -0
- package/dist/client/extensions/portable-extension.js.map +1 -1
- package/dist/client/session-replay.d.ts.map +1 -1
- package/dist/client/session-replay.js +308 -29
- package/dist/client/session-replay.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts +5 -0
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +37 -1
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/demo/actions/toggle-demo-mode.js +1 -1
- package/dist/demo/actions/toggle-demo-mode.js.map +1 -1
- package/dist/demo/config.js +6 -6
- package/dist/demo/config.js.map +1 -1
- package/dist/demo/fetch-interceptor.d.ts.map +1 -1
- package/dist/demo/fetch-interceptor.js +13 -4
- package/dist/demo/fetch-interceptor.js.map +1 -1
- package/dist/demo/redact.d.ts +7 -7
- package/dist/demo/redact.d.ts.map +1 -1
- package/dist/demo/redact.js +8 -145
- package/dist/demo/redact.js.map +1 -1
- package/dist/extensions/html-shell.d.ts.map +1 -1
- package/dist/extensions/html-shell.js +2 -0
- package/dist/extensions/html-shell.js.map +1 -1
- package/dist/extensions/session-replay-iframe.d.ts +10 -0
- package/dist/extensions/session-replay-iframe.d.ts.map +1 -0
- package/dist/extensions/session-replay-iframe.js +121 -0
- package/dist/extensions/session-replay-iframe.js.map +1 -0
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/integrations/adapters/slack.d.ts.map +1 -1
- package/dist/integrations/adapters/slack.js +98 -13
- package/dist/integrations/adapters/slack.js.map +1 -1
- package/dist/integrations/identity-links-store.d.ts +23 -0
- package/dist/integrations/identity-links-store.d.ts.map +1 -0
- package/dist/integrations/identity-links-store.js +158 -0
- package/dist/integrations/identity-links-store.js.map +1 -0
- package/dist/integrations/identity.d.ts +11 -0
- package/dist/integrations/identity.d.ts.map +1 -0
- package/dist/integrations/identity.js +100 -0
- package/dist/integrations/identity.js.map +1 -0
- package/dist/integrations/index.d.ts +2 -0
- package/dist/integrations/index.d.ts.map +1 -1
- package/dist/integrations/index.js +2 -0
- package/dist/integrations/index.js.map +1 -1
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +43 -1
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/integrations/types.d.ts +6 -0
- package/dist/integrations/types.d.ts.map +1 -1
- package/dist/integrations/types.js.map +1 -1
- package/dist/mcp/build-server.d.ts +9 -2
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js +97 -20
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/mcp/external-agent-policy.d.ts +19 -0
- package/dist/mcp/external-agent-policy.d.ts.map +1 -0
- package/dist/mcp/external-agent-policy.js +2 -0
- package/dist/mcp/external-agent-policy.js.map +1 -0
- package/dist/mcp/index.d.ts +1 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/notifications/routes.d.ts +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.js +1 -19
- package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
- package/dist/server/agent-chat/plugin-options.d.ts +11 -1
- package/dist/server/agent-chat/plugin-options.d.ts.map +1 -1
- package/dist/server/agent-chat/plugin-options.js.map +1 -1
- package/dist/server/agent-chat/script-entries.d.ts.map +1 -1
- package/dist/server/agent-chat/script-entries.js +16 -2
- package/dist/server/agent-chat/script-entries.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +3 -0
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/session-replay-iframe-protocol.d.ts +36 -0
- package/dist/session-replay-iframe-protocol.d.ts.map +1 -0
- package/dist/session-replay-iframe-protocol.js +24 -0
- package/dist/session-replay-iframe-protocol.js.map +1 -0
- package/dist/shared/reasoning-effort.d.ts +11 -0
- package/dist/shared/reasoning-effort.d.ts.map +1 -1
- package/dist/shared/reasoning-effort.js +36 -0
- package/dist/shared/reasoning-effort.js.map +1 -1
- package/dist/styles/agent-conversation.css +26 -0
- package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +34 -5
- package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -15
- package/docs/content/durable-background-runs.mdx +37 -0
- package/docs/content/external-agents.mdx +62 -7
- package/docs/content/locales/ar-SA/external-agents.mdx +38 -7
- package/docs/content/locales/ar-SA/tracking.mdx +2 -0
- package/docs/content/locales/de-DE/external-agents.mdx +39 -7
- package/docs/content/locales/de-DE/tracking.mdx +2 -0
- package/docs/content/locales/es-ES/external-agents.mdx +39 -7
- package/docs/content/locales/es-ES/tracking.mdx +2 -0
- package/docs/content/locales/fr-FR/external-agents.mdx +39 -7
- package/docs/content/locales/fr-FR/tracking.mdx +4 -2
- package/docs/content/locales/hi-IN/external-agents.mdx +38 -7
- package/docs/content/locales/hi-IN/tracking.mdx +2 -0
- package/docs/content/locales/ja-JP/external-agents.mdx +38 -7
- package/docs/content/locales/ja-JP/tracking.mdx +2 -0
- package/docs/content/locales/ko-KR/external-agents.mdx +38 -7
- package/docs/content/locales/ko-KR/tracking.mdx +2 -0
- package/docs/content/locales/pt-BR/external-agents.mdx +39 -7
- package/docs/content/locales/pt-BR/tracking.mdx +2 -0
- package/docs/content/locales/zh-CN/external-agents.mdx +37 -7
- package/docs/content/locales/zh-CN/tracking.mdx +2 -0
- package/docs/content/locales/zh-TW/durable-background-runs.mdx +14 -0
- package/docs/content/locales/zh-TW/external-agents.mdx +37 -7
- package/docs/content/locales/zh-TW/tracking.mdx +2 -0
- package/docs/content/tracking.mdx +2 -0
- package/package.json +2 -2
- package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +34 -5
- package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -15
- package/corpus/core/src/observability/hosted-model-experiment.ts +0 -118
- package/dist/observability/hosted-model-experiment.d.ts +0 -39
- package/dist/observability/hosted-model-experiment.d.ts.map +0 -1
- package/dist/observability/hosted-model-experiment.js +0 -90
- package/dist/observability/hosted-model-experiment.js.map +0 -1
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
IconPlus,
|
|
22
22
|
IconChevronDown,
|
|
23
23
|
IconCopy,
|
|
24
|
+
IconArrowLeft,
|
|
24
25
|
IconArrowUp,
|
|
25
26
|
IconArrowDown,
|
|
26
27
|
IconArrowsSort,
|
|
@@ -333,7 +334,21 @@ export function FormBuilderPage() {
|
|
|
333
334
|
<div className="flex flex-col h-full">
|
|
334
335
|
{/* Top bar */}
|
|
335
336
|
<div className="flex items-center justify-between border-b border-border ps-12 pe-2 sm:px-4 md:ps-4 h-14 shrink-0 min-w-0">
|
|
336
|
-
<div className="flex items-center gap-3 min-w-0 flex-1">
|
|
337
|
+
<div className="flex items-center gap-2 sm:gap-3 min-w-0 flex-1">
|
|
338
|
+
<Tooltip>
|
|
339
|
+
<TooltipTrigger asChild>
|
|
340
|
+
<Button
|
|
341
|
+
variant="ghost"
|
|
342
|
+
size="icon"
|
|
343
|
+
className="size-10 shrink-0 active:scale-[0.96]"
|
|
344
|
+
onClick={() => navigate("/forms")}
|
|
345
|
+
aria-label={t("builder.backToForms")}
|
|
346
|
+
>
|
|
347
|
+
<IconArrowLeft className="h-4 w-4" />
|
|
348
|
+
</Button>
|
|
349
|
+
</TooltipTrigger>
|
|
350
|
+
<TooltipContent>{t("builder.backToForms")}</TooltipContent>
|
|
351
|
+
</Tooltip>
|
|
337
352
|
<Skeleton className="h-5 w-48" />
|
|
338
353
|
<Skeleton className="h-4 w-14 rounded-full" />
|
|
339
354
|
</div>
|
|
@@ -538,7 +553,21 @@ export function FormBuilderPage() {
|
|
|
538
553
|
{codeRequiredDialog}
|
|
539
554
|
{/* Top bar */}
|
|
540
555
|
<div className="flex items-center justify-between border-b border-border ps-12 pe-2 sm:px-4 md:ps-4 h-14 shrink-0 min-w-0">
|
|
541
|
-
<div className="flex items-center gap-
|
|
556
|
+
<div className="flex items-center gap-1 sm:gap-2 relative min-w-0 flex-1 me-2">
|
|
557
|
+
<Tooltip>
|
|
558
|
+
<TooltipTrigger asChild>
|
|
559
|
+
<Button
|
|
560
|
+
variant="ghost"
|
|
561
|
+
size="icon"
|
|
562
|
+
className="size-10 shrink-0 active:scale-[0.96]"
|
|
563
|
+
onClick={() => navigate("/forms")}
|
|
564
|
+
aria-label={t("builder.backToForms")}
|
|
565
|
+
>
|
|
566
|
+
<IconArrowLeft className="h-4 w-4" />
|
|
567
|
+
</Button>
|
|
568
|
+
</TooltipTrigger>
|
|
569
|
+
<TooltipContent>{t("builder.backToForms")}</TooltipContent>
|
|
570
|
+
</Tooltip>
|
|
542
571
|
<span
|
|
543
572
|
ref={titleMeasureRef}
|
|
544
573
|
aria-hidden
|
|
@@ -574,7 +603,12 @@ export function FormBuilderPage() {
|
|
|
574
603
|
{form.status === "published" && (
|
|
575
604
|
<Tooltip>
|
|
576
605
|
<TooltipTrigger asChild>
|
|
577
|
-
<Button
|
|
606
|
+
<Button
|
|
607
|
+
variant="ghost"
|
|
608
|
+
size="icon"
|
|
609
|
+
className="h-10 w-10 active:scale-[0.96] motion-reduce:active:scale-100"
|
|
610
|
+
asChild
|
|
611
|
+
>
|
|
578
612
|
<a
|
|
579
613
|
href={appPath(`/f/${form.slug}`)}
|
|
580
614
|
target="_blank"
|
|
@@ -596,7 +630,7 @@ export function FormBuilderPage() {
|
|
|
596
630
|
<Button
|
|
597
631
|
variant="ghost"
|
|
598
632
|
size="icon"
|
|
599
|
-
className="h-
|
|
633
|
+
className="h-10 w-10 active:scale-[0.96] motion-reduce:active:scale-100"
|
|
600
634
|
onClick={copyShareLink}
|
|
601
635
|
disabled={form.status !== "published"}
|
|
602
636
|
aria-label={
|
|
@@ -605,11 +639,24 @@ export function FormBuilderPage() {
|
|
|
605
639
|
: t("builder.publishBeforeCopyPublicFormLink")
|
|
606
640
|
}
|
|
607
641
|
>
|
|
608
|
-
|
|
609
|
-
<
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
642
|
+
<span className="relative inline-flex h-4 w-4 items-center justify-center">
|
|
643
|
+
<IconCopy
|
|
644
|
+
className={cn(
|
|
645
|
+
"absolute h-4 w-4 transition-[opacity,scale] duration-200 ease-out",
|
|
646
|
+
copied
|
|
647
|
+
? "scale-[0.25] opacity-0"
|
|
648
|
+
: "scale-100 opacity-100",
|
|
649
|
+
)}
|
|
650
|
+
/>
|
|
651
|
+
<IconCheck
|
|
652
|
+
className={cn(
|
|
653
|
+
"absolute h-4 w-4 transition-[opacity,scale] duration-200 ease-out",
|
|
654
|
+
copied
|
|
655
|
+
? "scale-100 opacity-100"
|
|
656
|
+
: "scale-[0.25] opacity-0",
|
|
657
|
+
)}
|
|
658
|
+
/>
|
|
659
|
+
</span>
|
|
613
660
|
</Button>
|
|
614
661
|
</span>
|
|
615
662
|
</TooltipTrigger>
|
|
@@ -629,7 +676,7 @@ export function FormBuilderPage() {
|
|
|
629
676
|
resourceType="form"
|
|
630
677
|
resourceId={form.id}
|
|
631
678
|
resourceTitle={form.title}
|
|
632
|
-
triggerClassName="h-
|
|
679
|
+
triggerClassName="h-10 border-input bg-transparent px-3 text-xs active:scale-[0.96] hover:bg-accent hover:text-accent-foreground"
|
|
633
680
|
shareUrl={publishedFormUrl}
|
|
634
681
|
shareUrlLabel={t("builder.publicResponseLink")}
|
|
635
682
|
shareUrlDescription={t(
|
|
@@ -662,7 +709,7 @@ export function FormBuilderPage() {
|
|
|
662
709
|
{canEdit && form.status !== "published" && (
|
|
663
710
|
<Button
|
|
664
711
|
size="sm"
|
|
665
|
-
className="text-xs"
|
|
712
|
+
className="relative text-xs before:absolute before:-inset-y-0.5 before:content-[''] active:scale-[0.96] motion-reduce:active:scale-100"
|
|
666
713
|
onClick={handleTogglePublish}
|
|
667
714
|
disabled={pendingStatus !== null}
|
|
668
715
|
>
|
|
@@ -684,7 +731,7 @@ export function FormBuilderPage() {
|
|
|
684
731
|
<Button
|
|
685
732
|
variant="outline"
|
|
686
733
|
size="icon"
|
|
687
|
-
className="h-
|
|
734
|
+
className="h-10 w-10 bg-transparent active:scale-[0.96] motion-reduce:active:scale-100"
|
|
688
735
|
aria-label={t("forms.formActions")}
|
|
689
736
|
>
|
|
690
737
|
<IconDots className="h-4 w-4" />
|
|
@@ -728,13 +775,19 @@ export function FormBuilderPage() {
|
|
|
728
775
|
value={activeBuilderTab}
|
|
729
776
|
onValueChange={canEdit ? setBuilderTab : undefined}
|
|
730
777
|
>
|
|
731
|
-
<TabsList className="w-max sm:w-auto">
|
|
732
|
-
<TabsTrigger
|
|
778
|
+
<TabsList className="w-max rounded-lg shadow-[inset_0_1px_0_hsl(var(--foreground)/0.04)] sm:w-auto">
|
|
779
|
+
<TabsTrigger
|
|
780
|
+
value="edit"
|
|
781
|
+
className="rounded-md text-xs transition-[color,background-color,box-shadow,transform] active:scale-[0.96]"
|
|
782
|
+
>
|
|
733
783
|
{canEdit ? t("builder.editTab") : t("builder.previewTab")}
|
|
734
784
|
</TabsTrigger>
|
|
735
785
|
{canEdit && (
|
|
736
786
|
<>
|
|
737
|
-
<TabsTrigger
|
|
787
|
+
<TabsTrigger
|
|
788
|
+
value="responses"
|
|
789
|
+
className="rounded-md text-xs transition-[color,background-color,box-shadow,transform] active:scale-[0.96]"
|
|
790
|
+
>
|
|
738
791
|
{t("builder.resultsTab")}
|
|
739
792
|
{(form.responseCount ?? 0) > 0 && (
|
|
740
793
|
<Badge
|
|
@@ -745,10 +798,16 @@ export function FormBuilderPage() {
|
|
|
745
798
|
</Badge>
|
|
746
799
|
)}
|
|
747
800
|
</TabsTrigger>
|
|
748
|
-
<TabsTrigger
|
|
801
|
+
<TabsTrigger
|
|
802
|
+
value="settings"
|
|
803
|
+
className="rounded-md text-xs transition-[color,background-color,box-shadow,transform] active:scale-[0.96]"
|
|
804
|
+
>
|
|
749
805
|
{t("header.settings")}
|
|
750
806
|
</TabsTrigger>
|
|
751
|
-
<TabsTrigger
|
|
807
|
+
<TabsTrigger
|
|
808
|
+
value="integrations"
|
|
809
|
+
className="rounded-md text-xs transition-[color,background-color,box-shadow,transform] active:scale-[0.96]"
|
|
810
|
+
>
|
|
752
811
|
{t("builder.integrationsTab")}
|
|
753
812
|
</TabsTrigger>
|
|
754
813
|
</>
|
|
@@ -972,18 +1031,18 @@ function BuilderContent({
|
|
|
972
1031
|
)
|
|
973
1032
|
}
|
|
974
1033
|
className={cn(
|
|
975
|
-
"group relative rounded-lg border
|
|
1034
|
+
"group relative -mx-3 cursor-pointer rounded-lg border px-3 py-4 transition-[background-color,border-color,box-shadow,opacity] duration-150 ease-out sm:-mx-4 sm:px-4",
|
|
976
1035
|
selectedFieldId === field.id
|
|
977
|
-
? "border-primary ring-1 ring-primary/20
|
|
978
|
-
: "border-border bg-card hover:
|
|
1036
|
+
? "border-primary bg-card shadow-[0_1px_3px_-2px_hsl(var(--foreground)/0.16)] ring-1 ring-primary/20"
|
|
1037
|
+
: "border-transparent bg-transparent shadow-none hover:border-border/80 hover:bg-card/70 hover:shadow-[0_1px_3px_-2px_hsl(var(--foreground)/0.12)]",
|
|
979
1038
|
dragIdx === idx && "opacity-50",
|
|
980
1039
|
)}
|
|
981
1040
|
>
|
|
982
1041
|
<div
|
|
983
|
-
className="absolute -start-
|
|
1042
|
+
className="absolute -start-5 top-1/2 hidden size-10 -translate-y-1/2 items-center justify-center cursor-grab text-muted-foreground opacity-0 transition-[color,opacity,transform] duration-150 ease-out group-hover:opacity-100 group-focus-within:opacity-100 hover:text-foreground sm:flex"
|
|
984
1043
|
aria-label={t("builder.dragToReorder")}
|
|
985
1044
|
>
|
|
986
|
-
<IconGripVertical className="h-4 w-4
|
|
1045
|
+
<IconGripVertical className="h-4 w-4 translate-x-px" />
|
|
987
1046
|
</div>
|
|
988
1047
|
<FieldRenderer field={field} preview />
|
|
989
1048
|
</div>
|
|
@@ -992,7 +1051,7 @@ function BuilderContent({
|
|
|
992
1051
|
side="right"
|
|
993
1052
|
align="start"
|
|
994
1053
|
sideOffset={12}
|
|
995
|
-
className="w-[calc(100vw-2rem)]
|
|
1054
|
+
className="w-[calc(100vw-2rem)] max-h-[70vh] overflow-auto rounded-lg p-0 shadow-md sm:w-72 sm:max-h-[520px]"
|
|
996
1055
|
onOpenAutoFocus={(e) => e.preventDefault()}
|
|
997
1056
|
onInteractOutside={(e) => {
|
|
998
1057
|
// Don't close when interacting with dropdowns portaled to body
|
|
@@ -1016,7 +1075,7 @@ function BuilderContent({
|
|
|
1016
1075
|
) : (
|
|
1017
1076
|
<div
|
|
1018
1077
|
key={field.id}
|
|
1019
|
-
className="relative rounded-lg border border-border bg-card
|
|
1078
|
+
className="relative -mx-3 rounded-lg border border-transparent bg-transparent px-3 py-4 transition-[background-color,border-color] duration-150 hover:border-border/70 hover:bg-card/70 sm:-mx-4 sm:px-4"
|
|
1020
1079
|
>
|
|
1021
1080
|
<FieldRenderer field={field} preview />
|
|
1022
1081
|
</div>
|
|
@@ -1030,10 +1089,13 @@ function BuilderContent({
|
|
|
1030
1089
|
<div className="mt-4 flex items-center gap-2">
|
|
1031
1090
|
<DropdownMenu>
|
|
1032
1091
|
<DropdownMenuTrigger asChild>
|
|
1033
|
-
<Button
|
|
1034
|
-
|
|
1092
|
+
<Button
|
|
1093
|
+
variant="outline"
|
|
1094
|
+
className="gap-2 active:scale-[0.96]"
|
|
1095
|
+
>
|
|
1096
|
+
<IconPlus className="h-4 w-4 shrink-0" />
|
|
1035
1097
|
{t("builder.addField")}
|
|
1036
|
-
<IconChevronDown className="h-3 w-3" />
|
|
1098
|
+
<IconChevronDown className="h-3.5 w-3.5 translate-y-px" />
|
|
1037
1099
|
</Button>
|
|
1038
1100
|
</DropdownMenuTrigger>
|
|
1039
1101
|
<DropdownMenuContent align="start" className="w-48">
|
|
@@ -1056,6 +1118,7 @@ function BuilderContent({
|
|
|
1056
1118
|
<Button
|
|
1057
1119
|
variant="outline"
|
|
1058
1120
|
size="icon"
|
|
1121
|
+
className="active:scale-[0.96]"
|
|
1059
1122
|
aria-label={t("builder.editFormWithAi")}
|
|
1060
1123
|
>
|
|
1061
1124
|
<IconMessage className="h-4 w-4" />
|
|
@@ -1065,7 +1128,7 @@ function BuilderContent({
|
|
|
1065
1128
|
side="top"
|
|
1066
1129
|
align="end"
|
|
1067
1130
|
sideOffset={8}
|
|
1068
|
-
className="w-[calc(100vw-2rem)]
|
|
1131
|
+
className="w-[calc(100vw-2rem)] rounded-lg p-0 shadow-md sm:w-80"
|
|
1069
1132
|
onOpenAutoFocus={(e) => {
|
|
1070
1133
|
e.preventDefault();
|
|
1071
1134
|
agentPromptRef.current?.focus();
|
|
@@ -1100,7 +1163,7 @@ function BuilderContent({
|
|
|
1100
1163
|
<Button
|
|
1101
1164
|
variant="secondary"
|
|
1102
1165
|
size="icon"
|
|
1103
|
-
className="h-
|
|
1166
|
+
className="h-10 w-10 active:scale-[0.96] motion-reduce:active:scale-100"
|
|
1104
1167
|
onClick={onSubmitAgent}
|
|
1105
1168
|
disabled={
|
|
1106
1169
|
!agentPrompt.trim() ||
|
|
@@ -1170,7 +1233,6 @@ function ResultsContent({ formId, form }: { formId: string; form: any }) {
|
|
|
1170
1233
|
|
|
1171
1234
|
const allResponses = data?.responses || [];
|
|
1172
1235
|
const fields: FormField[] = data?.fields || form?.fields || [];
|
|
1173
|
-
const total = data?.total ?? 0;
|
|
1174
1236
|
const hasSubmitterEmail = allResponses.some((r: any) =>
|
|
1175
1237
|
responseValueAsString(r.submitterEmail).trim(),
|
|
1176
1238
|
);
|
|
@@ -1272,7 +1334,7 @@ function ResultsContent({ formId, form }: { formId: string; form: any }) {
|
|
|
1272
1334
|
variant="outline"
|
|
1273
1335
|
size="sm"
|
|
1274
1336
|
onClick={() => refetch()}
|
|
1275
|
-
className="gap-2"
|
|
1337
|
+
className="gap-2 active:scale-[0.96]"
|
|
1276
1338
|
>
|
|
1277
1339
|
<IconRefresh className="h-3.5 w-3.5" />
|
|
1278
1340
|
{t("common.retry")}
|
|
@@ -1295,13 +1357,7 @@ function ResultsContent({ formId, form }: { formId: string; form: any }) {
|
|
|
1295
1357
|
return (
|
|
1296
1358
|
<div className="flex flex-col flex-1 overflow-hidden">
|
|
1297
1359
|
<div className="flex flex-wrap items-center justify-between gap-2 px-3 sm:px-4 py-2 border-b border-border">
|
|
1298
|
-
<div className="flex items-center gap-2">
|
|
1299
|
-
<Badge variant="secondary" className="text-xs">
|
|
1300
|
-
{t("builder.results.responseCount", {
|
|
1301
|
-
count: total,
|
|
1302
|
-
formattedCount: formatNumber(total),
|
|
1303
|
-
})}
|
|
1304
|
-
</Badge>
|
|
1360
|
+
<div className="ms-auto flex items-center gap-2">
|
|
1305
1361
|
{search.trim() && filtered.length !== allResponses.length && (
|
|
1306
1362
|
<span className="text-xs text-muted-foreground">
|
|
1307
1363
|
{t("builder.results.matchCount", {
|
|
@@ -1310,8 +1366,6 @@ function ResultsContent({ formId, form }: { formId: string; form: any }) {
|
|
|
1310
1366
|
})}
|
|
1311
1367
|
</span>
|
|
1312
1368
|
)}
|
|
1313
|
-
</div>
|
|
1314
|
-
<div className="flex items-center gap-2">
|
|
1315
1369
|
<div className="relative">
|
|
1316
1370
|
<IconSearch className="absolute start-2 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground pointer-events-none" />
|
|
1317
1371
|
<Input
|
|
@@ -1334,17 +1388,20 @@ function ResultsContent({ formId, form }: { formId: string; form: any }) {
|
|
|
1334
1388
|
</div>
|
|
1335
1389
|
</div>
|
|
1336
1390
|
<div className="flex-1 min-w-0 overflow-auto overscroll-x-contain">
|
|
1337
|
-
<div className="min-w-full">
|
|
1391
|
+
<div className="w-full min-w-full">
|
|
1338
1392
|
<table
|
|
1339
|
-
className="min-w-full table-fixed text-sm"
|
|
1340
|
-
style={{ minWidth: responseTableMinWidth }}
|
|
1393
|
+
className="w-full min-w-full table-fixed text-sm"
|
|
1394
|
+
style={{ width: "100%", minWidth: responseTableMinWidth }}
|
|
1341
1395
|
>
|
|
1342
1396
|
<colgroup>
|
|
1343
1397
|
<col className="w-16" />
|
|
1344
1398
|
<col className="w-40" />
|
|
1345
1399
|
{hasSubmitterEmail ? <col className="w-56" /> : null}
|
|
1346
|
-
{fields.map((f) => (
|
|
1347
|
-
<col
|
|
1400
|
+
{fields.map((f, index) => (
|
|
1401
|
+
<col
|
|
1402
|
+
key={f.id}
|
|
1403
|
+
className={index === fields.length - 1 ? "w-auto" : "w-80"}
|
|
1404
|
+
/>
|
|
1348
1405
|
))}
|
|
1349
1406
|
</colgroup>
|
|
1350
1407
|
<thead>
|
|
@@ -1460,18 +1517,33 @@ function ResultsSortableHeader({
|
|
|
1460
1517
|
<button
|
|
1461
1518
|
type="button"
|
|
1462
1519
|
onClick={onClick}
|
|
1463
|
-
className="inline-flex items-center gap-1 hover:text-foreground
|
|
1520
|
+
className="relative inline-flex cursor-pointer items-center gap-1 transition-[color,transform] duration-150 ease-out hover:text-foreground active:scale-[0.96] motion-reduce:active:scale-100 before:absolute before:-inset-3 before:content-['']"
|
|
1464
1521
|
>
|
|
1465
1522
|
<span>{label}</span>
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1523
|
+
<span className="relative inline-flex h-3 w-3 items-center justify-center">
|
|
1524
|
+
<IconArrowUp
|
|
1525
|
+
className={cn(
|
|
1526
|
+
"absolute h-3 w-3 transition-[opacity,scale] duration-200 ease-out",
|
|
1527
|
+
active && dir === "asc"
|
|
1528
|
+
? "scale-100 opacity-100"
|
|
1529
|
+
: "scale-[0.25] opacity-0",
|
|
1530
|
+
)}
|
|
1531
|
+
/>
|
|
1532
|
+
<IconArrowDown
|
|
1533
|
+
className={cn(
|
|
1534
|
+
"absolute h-3 w-3 transition-[opacity,scale] duration-200 ease-out",
|
|
1535
|
+
active && dir === "desc"
|
|
1536
|
+
? "scale-100 opacity-100"
|
|
1537
|
+
: "scale-[0.25] opacity-0",
|
|
1538
|
+
)}
|
|
1539
|
+
/>
|
|
1540
|
+
<IconArrowsSort
|
|
1541
|
+
className={cn(
|
|
1542
|
+
"absolute h-3 w-3 transition-[opacity,scale] duration-200 ease-out",
|
|
1543
|
+
active ? "scale-[0.25] opacity-0" : "scale-100 opacity-40",
|
|
1544
|
+
)}
|
|
1545
|
+
/>
|
|
1546
|
+
</span>
|
|
1475
1547
|
</button>
|
|
1476
1548
|
);
|
|
1477
1549
|
}
|
|
@@ -1532,7 +1604,7 @@ function SettingsEditor({
|
|
|
1532
1604
|
/>
|
|
1533
1605
|
</div>
|
|
1534
1606
|
|
|
1535
|
-
<div className="flex items-start justify-between gap-4 rounded-lg border p-3">
|
|
1607
|
+
<div className="flex items-start justify-between gap-4 rounded-lg border border-border/60 bg-card p-3">
|
|
1536
1608
|
<div className="space-y-1">
|
|
1537
1609
|
<Label htmlFor="anonymous-responses" className="text-xs">
|
|
1538
1610
|
{t("builder.settings.anonymousResponses")}
|
|
@@ -1549,7 +1621,11 @@ function SettingsEditor({
|
|
|
1549
1621
|
/>
|
|
1550
1622
|
</div>
|
|
1551
1623
|
|
|
1552
|
-
<Button
|
|
1624
|
+
<Button
|
|
1625
|
+
onClick={() => onSave(settings)}
|
|
1626
|
+
className="w-full active:scale-[0.96]"
|
|
1627
|
+
size="sm"
|
|
1628
|
+
>
|
|
1553
1629
|
{t("builder.settings.saveSettings")}
|
|
1554
1630
|
</Button>
|
|
1555
1631
|
</div>
|
|
@@ -1620,12 +1696,12 @@ function IntegrationBrandMark({
|
|
|
1620
1696
|
return (
|
|
1621
1697
|
<div
|
|
1622
1698
|
className={cn(
|
|
1623
|
-
"flex h-10 w-10 items-center justify-center rounded-
|
|
1699
|
+
"flex h-10 w-10 items-center justify-center rounded-lg border border-border/70 bg-background",
|
|
1624
1700
|
className,
|
|
1625
1701
|
)}
|
|
1626
1702
|
>
|
|
1627
1703
|
<img
|
|
1628
|
-
src={meta.logoSrc}
|
|
1704
|
+
src={appPath(meta.logoSrc)}
|
|
1629
1705
|
alt={t("builder.integrations.logoAlt", { label })}
|
|
1630
1706
|
className="h-5 w-5 object-contain"
|
|
1631
1707
|
/>
|
|
@@ -1636,7 +1712,7 @@ function IntegrationBrandMark({
|
|
|
1636
1712
|
return (
|
|
1637
1713
|
<div
|
|
1638
1714
|
className={cn(
|
|
1639
|
-
"flex h-10 w-10 items-center justify-center rounded-
|
|
1715
|
+
"flex h-10 w-10 items-center justify-center rounded-lg border border-border/70 bg-foreground text-background",
|
|
1640
1716
|
className,
|
|
1641
1717
|
)}
|
|
1642
1718
|
>
|
|
@@ -1713,7 +1789,7 @@ function IntegrationsEditor({
|
|
|
1713
1789
|
</div>
|
|
1714
1790
|
|
|
1715
1791
|
{!hasIntegrations && (
|
|
1716
|
-
<div className="rounded-
|
|
1792
|
+
<div className="rounded-lg border border-border/60 bg-muted/20 p-5">
|
|
1717
1793
|
<div className="space-y-4">
|
|
1718
1794
|
<div className="space-y-2">
|
|
1719
1795
|
<h3 className="text-sm font-medium">
|
|
@@ -1735,7 +1811,7 @@ function IntegrationsEditor({
|
|
|
1735
1811
|
key={type}
|
|
1736
1812
|
type="button"
|
|
1737
1813
|
onClick={() => addIntegration(type)}
|
|
1738
|
-
className="cursor-pointer rounded-lg border bg-background p-3 text-start hover:bg-muted/40 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring
|
|
1814
|
+
className="min-h-[44px] cursor-pointer rounded-lg border border-border/60 bg-background p-3 text-start transition-[background-color,border-color,box-shadow] duration-150 ease-out hover:border-primary/30 hover:bg-muted/40 hover:shadow-sm focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring active:scale-[0.96] motion-reduce:active:scale-100"
|
|
1739
1815
|
>
|
|
1740
1816
|
<div className="flex items-center gap-3">
|
|
1741
1817
|
<IntegrationBrandMark type={type} className="h-9 w-9" />
|
|
@@ -1767,7 +1843,7 @@ function IntegrationsEditor({
|
|
|
1767
1843
|
return (
|
|
1768
1844
|
<div
|
|
1769
1845
|
key={integration.id}
|
|
1770
|
-
className="rounded-
|
|
1846
|
+
className="space-y-3 rounded-lg border border-border/60 bg-card p-4"
|
|
1771
1847
|
>
|
|
1772
1848
|
<div className="flex items-start gap-3">
|
|
1773
1849
|
<IntegrationBrandMark type={integration.type} />
|
|
@@ -1801,7 +1877,7 @@ function IntegrationsEditor({
|
|
|
1801
1877
|
<Button
|
|
1802
1878
|
variant="ghost"
|
|
1803
1879
|
size="icon"
|
|
1804
|
-
className="h-
|
|
1880
|
+
className="h-10 w-10 shrink-0 text-muted-foreground hover:text-destructive active:scale-[0.96] motion-reduce:active:scale-100"
|
|
1805
1881
|
onClick={() => removeIntegration(integration.id)}
|
|
1806
1882
|
>
|
|
1807
1883
|
<IconTrash className="h-4 w-4" />
|
|
@@ -1849,7 +1925,7 @@ function IntegrationsEditor({
|
|
|
1849
1925
|
<Button
|
|
1850
1926
|
variant="outline"
|
|
1851
1927
|
size="sm"
|
|
1852
|
-
className="h-11 w-full rounded-
|
|
1928
|
+
className="h-11 w-full rounded-lg active:scale-[0.96]"
|
|
1853
1929
|
>
|
|
1854
1930
|
<IconPlus className="h-3.5 w-3.5 me-1.5" />
|
|
1855
1931
|
{hasIntegrations
|
|
@@ -1869,7 +1945,7 @@ function IntegrationsEditor({
|
|
|
1869
1945
|
key={type}
|
|
1870
1946
|
onClick={() => addIntegration(type)}
|
|
1871
1947
|
disabled={selectedTypes.has(type)}
|
|
1872
|
-
className="
|
|
1948
|
+
className="px-3 py-3"
|
|
1873
1949
|
>
|
|
1874
1950
|
<div className="flex items-center gap-3">
|
|
1875
1951
|
<IntegrationBrandMark type={type} />
|
|
@@ -1900,7 +1976,7 @@ function IntegrationsEditor({
|
|
|
1900
1976
|
<div className="space-y-2">
|
|
1901
1977
|
<Button
|
|
1902
1978
|
onClick={() => onSave(settings)}
|
|
1903
|
-
className="h-10 w-full"
|
|
1979
|
+
className="h-10 w-full active:scale-[0.96]"
|
|
1904
1980
|
size="sm"
|
|
1905
1981
|
>
|
|
1906
1982
|
{saveLabel}
|
|
@@ -187,8 +187,8 @@ export function FormFillPage() {
|
|
|
187
187
|
|
|
188
188
|
if (isLoading) {
|
|
189
189
|
return (
|
|
190
|
-
<div className="min-h-screen bg-
|
|
191
|
-
<div className="max-w-xl
|
|
190
|
+
<div className="min-h-screen bg-muted/30 px-4 py-10">
|
|
191
|
+
<div className="mx-auto max-w-xl space-y-6 rounded-2xl border border-border/80 bg-background p-5 shadow-sm sm:p-8">
|
|
192
192
|
<div className="space-y-3">
|
|
193
193
|
<Skeleton className="h-8 w-2/3" />
|
|
194
194
|
<Skeleton className="h-4 w-full" />
|
|
@@ -210,8 +210,19 @@ export function FormFillPage() {
|
|
|
210
210
|
|
|
211
211
|
if (error || !form) {
|
|
212
212
|
return (
|
|
213
|
-
<div
|
|
214
|
-
|
|
213
|
+
<div
|
|
214
|
+
className={cn(
|
|
215
|
+
"flex min-h-screen items-center justify-center p-4",
|
|
216
|
+
embedded ? "bg-background" : "bg-muted/30",
|
|
217
|
+
)}
|
|
218
|
+
>
|
|
219
|
+
<div
|
|
220
|
+
className={cn(
|
|
221
|
+
"text-center",
|
|
222
|
+
!embedded &&
|
|
223
|
+
"max-w-md rounded-2xl border border-border/80 bg-background p-8 shadow-sm sm:p-10",
|
|
224
|
+
)}
|
|
225
|
+
>
|
|
215
226
|
<h1 className="text-2xl font-semibold mb-2">
|
|
216
227
|
{t("publicForm.formNotFound")}
|
|
217
228
|
</h1>
|
|
@@ -222,7 +233,7 @@ export function FormFillPage() {
|
|
|
222
233
|
variant="outline"
|
|
223
234
|
size="sm"
|
|
224
235
|
onClick={() => window.location.reload()}
|
|
225
|
-
className="gap-2"
|
|
236
|
+
className="min-h-10 gap-2 transition-[scale,background-color,border-color,color,box-shadow] duration-150 active:scale-[0.96] motion-reduce:transition-none"
|
|
226
237
|
>
|
|
227
238
|
<IconRefresh className="h-3.5 w-3.5" />
|
|
228
239
|
{t("publicForm.tryAgain")}
|
|
@@ -235,8 +246,19 @@ export function FormFillPage() {
|
|
|
235
246
|
|
|
236
247
|
if (submitted) {
|
|
237
248
|
return (
|
|
238
|
-
<div
|
|
239
|
-
|
|
249
|
+
<div
|
|
250
|
+
className={cn(
|
|
251
|
+
"flex min-h-screen items-center justify-center p-4",
|
|
252
|
+
embedded ? "bg-background" : "bg-muted/30",
|
|
253
|
+
)}
|
|
254
|
+
>
|
|
255
|
+
<div
|
|
256
|
+
className={cn(
|
|
257
|
+
"max-w-md text-center",
|
|
258
|
+
!embedded &&
|
|
259
|
+
"rounded-2xl border border-border/80 bg-background p-8 shadow-sm sm:p-10",
|
|
260
|
+
)}
|
|
261
|
+
>
|
|
240
262
|
<div className="mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-full bg-emerald-600/10">
|
|
241
263
|
<IconCircleCheck className="h-7 w-7 text-emerald-600 dark:text-emerald-400" />
|
|
242
264
|
</div>
|
|
@@ -254,11 +276,22 @@ export function FormFillPage() {
|
|
|
254
276
|
}
|
|
255
277
|
|
|
256
278
|
return (
|
|
257
|
-
<div
|
|
258
|
-
|
|
279
|
+
<div
|
|
280
|
+
className={cn(
|
|
281
|
+
"flex min-h-screen items-center justify-center p-3 sm:p-4 py-8 sm:py-12",
|
|
282
|
+
embedded ? "bg-background" : "bg-muted/30",
|
|
283
|
+
)}
|
|
284
|
+
>
|
|
285
|
+
<div
|
|
286
|
+
className={cn(
|
|
287
|
+
"w-full max-w-2xl",
|
|
288
|
+
!embedded &&
|
|
289
|
+
"rounded-2xl border border-border/80 bg-background p-5 shadow-sm sm:p-8",
|
|
290
|
+
)}
|
|
291
|
+
>
|
|
259
292
|
{!embedded && (
|
|
260
293
|
<div className="mb-3 flex justify-end">
|
|
261
|
-
<ThemeToggle className="h-
|
|
294
|
+
<ThemeToggle className="h-10 w-10 transition-[scale,background-color,color,box-shadow] duration-150 active:scale-[0.96] motion-reduce:transition-none" />
|
|
262
295
|
</div>
|
|
263
296
|
)}
|
|
264
297
|
{/* Form header */}
|
|
@@ -320,7 +353,7 @@ export function FormFillPage() {
|
|
|
320
353
|
|
|
321
354
|
<Button
|
|
322
355
|
type="submit"
|
|
323
|
-
className="mt-4 w-full sm:w-auto"
|
|
356
|
+
className="mt-4 min-h-11 w-full transition-[scale,background-color,border-color,color,box-shadow] duration-150 active:scale-[0.96] motion-reduce:transition-none sm:w-auto"
|
|
324
357
|
size="lg"
|
|
325
358
|
disabled={submitForm.isPending}
|
|
326
359
|
>
|