@amplitude/wizard 1.0.0-beta.1 → 1.0.0-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +171 -74
- package/dist/bin.js +376 -150
- package/dist/src/lib/agent-interface.js +64 -9
- package/dist/src/lib/agent-runner.js +1 -10
- package/dist/src/lib/api.d.ts +22 -4
- package/dist/src/lib/api.js +114 -12
- package/dist/src/lib/commandments.js +14 -1
- package/dist/src/lib/constants.d.ts +5 -4
- package/dist/src/lib/constants.js +11 -9
- package/dist/src/lib/credential-resolution.d.ts +45 -0
- package/dist/src/lib/credential-resolution.js +311 -0
- package/dist/src/lib/exit-codes.d.ts +10 -0
- package/dist/src/lib/exit-codes.js +12 -0
- package/dist/src/lib/feature-flags.d.ts +37 -0
- package/dist/src/lib/feature-flags.js +119 -0
- package/dist/src/lib/health-checks/statuspage.d.ts +1 -0
- package/dist/src/lib/health-checks/statuspage.js +5 -1
- package/dist/src/lib/mode-config.d.ts +14 -0
- package/dist/src/lib/mode-config.js +14 -0
- package/dist/src/lib/session-checkpoint.d.ts +27 -0
- package/dist/src/lib/session-checkpoint.js +134 -0
- package/dist/src/lib/wizard-session.d.ts +54 -1
- package/dist/src/lib/wizard-session.js +71 -14
- package/dist/src/lib/wizard-tools.js +19 -4
- package/dist/src/steps/add-mcp-server-to-clients/clients/claude.d.ts +3 -0
- package/dist/src/steps/add-mcp-server-to-clients/clients/claude.js +6 -0
- package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.js +3 -1
- package/dist/src/ui/agent-ui.d.ts +91 -0
- package/dist/src/ui/agent-ui.js +277 -0
- package/dist/src/ui/logging-ui.js +1 -1
- package/dist/src/ui/tui/App.d.ts +12 -0
- package/dist/src/ui/tui/App.js +29 -18
- package/dist/src/ui/tui/components/AmplitudeLogo.js +16 -17
- package/dist/src/ui/tui/components/AmplitudeTextLogo.d.ts +0 -2
- package/dist/src/ui/tui/components/AmplitudeTextLogo.js +53 -18
- package/dist/src/ui/tui/components/BrailleSpinner.d.ts +8 -0
- package/dist/src/ui/tui/components/BrailleSpinner.js +15 -0
- package/dist/src/ui/tui/components/ConsoleView.d.ts +8 -11
- package/dist/src/ui/tui/components/ConsoleView.js +52 -38
- package/dist/src/ui/tui/components/HeaderBar.d.ts +12 -0
- package/dist/src/ui/tui/components/HeaderBar.js +17 -0
- package/dist/src/ui/tui/components/JourneyStepper.d.ts +16 -0
- package/dist/src/ui/tui/components/JourneyStepper.js +83 -0
- package/dist/src/ui/tui/components/KeyHintBar.d.ts +19 -0
- package/dist/src/ui/tui/components/KeyHintBar.js +20 -0
- package/dist/src/ui/tui/console-commands.d.ts +1 -4
- package/dist/src/ui/tui/console-commands.js +48 -13
- package/dist/src/ui/tui/flows.d.ts +1 -1
- package/dist/src/ui/tui/flows.js +1 -1
- package/dist/src/ui/tui/hooks/useAsyncEffect.d.ts +15 -0
- package/dist/src/ui/tui/hooks/useAsyncEffect.js +35 -0
- package/dist/src/ui/tui/hooks/useWizardStore.d.ts +9 -0
- package/dist/src/ui/tui/hooks/useWizardStore.js +11 -0
- package/dist/src/ui/tui/ink-ui.js +1 -1
- package/dist/src/ui/tui/primitives/DissolveTransition.js +4 -5
- package/dist/src/ui/tui/primitives/EventPlanViewer.d.ts +3 -1
- package/dist/src/ui/tui/primitives/EventPlanViewer.js +8 -3
- package/dist/src/ui/tui/primitives/ProgressList.js +1 -1
- package/dist/src/ui/tui/primitives/SlashCommandInput.js +19 -4
- package/dist/src/ui/tui/primitives/SplitView.d.ts +2 -1
- package/dist/src/ui/tui/primitives/SplitView.js +10 -2
- package/dist/src/ui/tui/primitives/TabContainer.js +10 -2
- package/dist/src/ui/tui/primitives/index.d.ts +0 -1
- package/dist/src/ui/tui/primitives/index.js +0 -1
- package/dist/src/ui/tui/router.js +1 -1
- package/dist/src/ui/tui/screen-registry.d.ts +0 -7
- package/dist/src/ui/tui/screen-registry.js +13 -4
- package/dist/src/ui/tui/screens/ActivationOptionsScreen.d.ts +2 -2
- package/dist/src/ui/tui/screens/ActivationOptionsScreen.js +8 -8
- package/dist/src/ui/tui/screens/AuthScreen.d.ts +2 -1
- package/dist/src/ui/tui/screens/AuthScreen.js +144 -32
- package/dist/src/ui/tui/screens/ChecklistScreen.d.ts +2 -12
- package/dist/src/ui/tui/screens/ChecklistScreen.js +22 -33
- package/dist/src/ui/tui/screens/DataIngestionCheckScreen.d.ts +3 -12
- package/dist/src/ui/tui/screens/DataIngestionCheckScreen.js +114 -33
- package/dist/src/ui/tui/screens/DataSetupScreen.d.ts +3 -3
- package/dist/src/ui/tui/screens/DataSetupScreen.js +17 -10
- package/dist/src/ui/tui/screens/IntroScreen.d.ts +5 -3
- package/dist/src/ui/tui/screens/IntroScreen.js +132 -41
- package/dist/src/ui/tui/screens/LoginScreen.d.ts +1 -1
- package/dist/src/ui/tui/screens/LoginScreen.js +4 -4
- package/dist/src/ui/tui/screens/LogoutScreen.d.ts +4 -2
- package/dist/src/ui/tui/screens/LogoutScreen.js +17 -5
- package/dist/src/ui/tui/screens/McpScreen.d.ts +4 -4
- package/dist/src/ui/tui/screens/McpScreen.js +25 -17
- package/dist/src/ui/tui/screens/OutageScreen.d.ts +1 -1
- package/dist/src/ui/tui/screens/OutageScreen.js +5 -5
- package/dist/src/ui/tui/screens/OutroScreen.d.ts +5 -0
- package/dist/src/ui/tui/screens/OutroScreen.js +21 -15
- package/dist/src/ui/tui/screens/RegionSelectScreen.js +15 -13
- package/dist/src/ui/tui/screens/RunScreen.d.ts +7 -5
- package/dist/src/ui/tui/screens/RunScreen.js +102 -157
- package/dist/src/ui/tui/screens/SettingsOverrideScreen.d.ts +1 -1
- package/dist/src/ui/tui/screens/SettingsOverrideScreen.js +6 -5
- package/dist/src/ui/tui/screens/SetupScreen.d.ts +1 -1
- package/dist/src/ui/tui/screens/SetupScreen.js +7 -7
- package/dist/src/ui/tui/screens/SlackScreen.d.ts +2 -7
- package/dist/src/ui/tui/screens/SlackScreen.js +60 -45
- package/dist/src/ui/tui/session-constants.d.ts +41 -0
- package/dist/src/ui/tui/session-constants.js +38 -0
- package/dist/src/ui/tui/start-tui.d.ts +3 -1
- package/dist/src/ui/tui/start-tui.js +14 -10
- package/dist/src/ui/tui/store.d.ts +5 -1
- package/dist/src/ui/tui/store.js +45 -6
- package/dist/src/ui/tui/styles.d.ts +75 -19
- package/dist/src/ui/tui/styles.js +101 -19
- package/dist/src/ui/tui/utils/classify-error.d.ts +14 -0
- package/dist/src/ui/tui/utils/classify-error.js +90 -0
- package/dist/src/ui/tui/utils/diagnostics.d.ts +21 -0
- package/dist/src/ui/tui/utils/diagnostics.js +72 -0
- package/dist/src/ui/tui/utils/with-retry.d.ts +12 -0
- package/dist/src/ui/tui/utils/with-retry.js +32 -0
- package/dist/src/ui/tui/utils/with-timeout.d.ts +10 -0
- package/dist/src/ui/tui/utils/with-timeout.js +24 -0
- package/dist/src/utils/ampli-settings.d.ts +1 -1
- package/dist/src/utils/ampli-settings.js +15 -5
- package/dist/src/utils/analytics.d.ts +18 -0
- package/dist/src/utils/analytics.js +35 -3
- package/dist/src/utils/api-key-store.js +5 -5
- package/dist/src/utils/atomic-write.d.ts +15 -0
- package/dist/src/utils/atomic-write.js +34 -0
- package/dist/src/utils/setup-utils.js +2 -2
- package/dist/src/utils/token-refresh.d.ts +22 -0
- package/dist/src/utils/token-refresh.js +79 -0
- package/dist/src/utils/wizard-abort.js +6 -1
- package/package.json +16 -17
- package/skills/instrumentation/add-analytics-instrumentation/SKILL.md +142 -0
- package/skills/instrumentation/diff-intake/SKILL.md +128 -0
- package/skills/instrumentation/discover-analytics-patterns/SKILL.md +185 -0
- package/skills/instrumentation/discover-event-surfaces/SKILL.md +322 -0
- package/skills/instrumentation/discover-event-surfaces/references/best-practices.md +563 -0
- package/skills/instrumentation/instrument-events/SKILL.md +169 -0
- package/skills/instrumentation/instrument-events/references/best-practices.md +563 -0
- package/skills/integration/integration-android/SKILL.md +49 -0
- package/skills/integration/integration-android/references/EXAMPLE.md +1977 -0
- package/skills/integration/integration-android/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-android/references/analytics.md +1778 -0
- package/skills/integration/integration-android/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-android/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-android/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-android/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-angular/SKILL.md +49 -0
- package/skills/integration/integration-angular/references/EXAMPLE.md +899 -0
- package/skills/integration/integration-angular/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-angular/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-angular/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-angular/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-angular/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-angular/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-astro-hybrid/SKILL.md +56 -0
- package/skills/integration/integration-astro-hybrid/references/EXAMPLE.md +1095 -0
- package/skills/integration/integration-astro-hybrid/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-astro-hybrid/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-astro-hybrid/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-astro-hybrid/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-astro-hybrid/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-astro-hybrid/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-astro-ssr/SKILL.md +52 -0
- package/skills/integration/integration-astro-ssr/references/EXAMPLE.md +1106 -0
- package/skills/integration/integration-astro-ssr/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-astro-ssr/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-astro-ssr/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-astro-ssr/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-astro-ssr/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-astro-ssr/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-astro-static/SKILL.md +49 -0
- package/skills/integration/integration-astro-static/references/EXAMPLE.md +910 -0
- package/skills/integration/integration-astro-static/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-astro-static/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-astro-static/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-astro-static/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-astro-static/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-astro-static/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-astro-view-transitions/SKILL.md +51 -0
- package/skills/integration/integration-astro-view-transitions/references/EXAMPLE.md +979 -0
- package/skills/integration/integration-astro-view-transitions/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-astro-view-transitions/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-django/SKILL.md +57 -0
- package/skills/integration/integration-django/references/EXAMPLE.md +1005 -0
- package/skills/integration/integration-django/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-django/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-django/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-django/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-django/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-django/references/python.md +1424 -0
- package/skills/integration/integration-expo/SKILL.md +53 -0
- package/skills/integration/integration-expo/references/EXAMPLE.md +1291 -0
- package/skills/integration/integration-expo/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-expo/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-expo/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-expo/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-expo/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-expo/references/react-native-sdk.md +2819 -0
- package/skills/integration/integration-fastapi/SKILL.md +57 -0
- package/skills/integration/integration-fastapi/references/EXAMPLE.md +1389 -0
- package/skills/integration/integration-fastapi/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-fastapi/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-fastapi/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-fastapi/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-fastapi/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-fastapi/references/python.md +1424 -0
- package/skills/integration/integration-flask/SKILL.md +56 -0
- package/skills/integration/integration-flask/references/EXAMPLE.md +1130 -0
- package/skills/integration/integration-flask/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-flask/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-flask/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-flask/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-flask/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-flask/references/python.md +1424 -0
- package/skills/integration/integration-javascript_node/SKILL.md +54 -0
- package/skills/integration/integration-javascript_node/references/EXAMPLE.md +365 -0
- package/skills/integration/integration-javascript_node/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-javascript_node/references/analytics.md +1778 -0
- package/skills/integration/integration-javascript_node/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-javascript_node/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-javascript_node/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-javascript_node/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-javascript_web/SKILL.md +58 -0
- package/skills/integration/integration-javascript_web/references/EXAMPLE.md +451 -0
- package/skills/integration/integration-javascript_web/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-javascript_web/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-javascript_web/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-javascript_web/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-javascript_web/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-javascript_web/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-laravel/SKILL.md +52 -0
- package/skills/integration/integration-laravel/references/EXAMPLE.md +2039 -0
- package/skills/integration/integration-laravel/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-laravel/references/analytics.md +1778 -0
- package/skills/integration/integration-laravel/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-laravel/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-laravel/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-laravel/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-nextjs-app-router/SKILL.md +54 -0
- package/skills/integration/integration-nextjs-app-router/references/EXAMPLE.md +673 -0
- package/skills/integration/integration-nextjs-app-router/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-nextjs-app-router/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-nextjs-pages-router/SKILL.md +54 -0
- package/skills/integration/integration-nextjs-pages-router/references/EXAMPLE.md +735 -0
- package/skills/integration/integration-nextjs-pages-router/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-nextjs-pages-router/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-nuxt-3.6/SKILL.md +46 -0
- package/skills/integration/integration-nuxt-3.6/references/EXAMPLE.md +8422 -0
- package/skills/integration/integration-nuxt-3.6/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-nuxt-3.6/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-nuxt-4/SKILL.md +46 -0
- package/skills/integration/integration-nuxt-4/references/EXAMPLE.md +8670 -0
- package/skills/integration/integration-nuxt-4/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-nuxt-4/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-nuxt-4/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-nuxt-4/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-nuxt-4/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-nuxt-4/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-python/SKILL.md +53 -0
- package/skills/integration/integration-python/references/EXAMPLE.md +445 -0
- package/skills/integration/integration-python/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-python/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-python/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-python/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-python/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-python/references/python.md +1424 -0
- package/skills/integration/integration-react-native/SKILL.md +49 -0
- package/skills/integration/integration-react-native/references/EXAMPLE.md +2253 -0
- package/skills/integration/integration-react-native/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-react-native/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-react-native/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-react-native/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-react-native/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-react-native/references/react-native-sdk.md +2819 -0
- package/skills/integration/integration-react-react-router-6/SKILL.md +53 -0
- package/skills/integration/integration-react-react-router-6/references/EXAMPLE.md +570 -0
- package/skills/integration/integration-react-react-router-6/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-react-react-router-6/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-react-react-router-6/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-react-react-router-6/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-react-react-router-6/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-react-react-router-6/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-react-react-router-7-data/SKILL.md +53 -0
- package/skills/integration/integration-react-react-router-7-data/references/EXAMPLE.md +830 -0
- package/skills/integration/integration-react-react-router-7-data/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-react-react-router-7-data/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-react-react-router-7-declarative/SKILL.md +53 -0
- package/skills/integration/integration-react-react-router-7-declarative/references/EXAMPLE.md +609 -0
- package/skills/integration/integration-react-react-router-7-declarative/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-react-react-router-7-declarative/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-react-react-router-7-framework/SKILL.md +53 -0
- package/skills/integration/integration-react-react-router-7-framework/references/EXAMPLE.md +1081 -0
- package/skills/integration/integration-react-react-router-7-framework/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-react-react-router-7-framework/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-react-tanstack-router-code-based/SKILL.md +57 -0
- package/skills/integration/integration-react-tanstack-router-code-based/references/EXAMPLE.md +659 -0
- package/skills/integration/integration-react-tanstack-router-code-based/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-react-tanstack-router-code-based/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-react-tanstack-router-file-based/SKILL.md +57 -0
- package/skills/integration/integration-react-tanstack-router-file-based/references/EXAMPLE.md +777 -0
- package/skills/integration/integration-react-tanstack-router-file-based/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-react-tanstack-router-file-based/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-react-vite/SKILL.md +53 -0
- package/skills/integration/integration-react-vite/references/EXAMPLE.md +542 -0
- package/skills/integration/integration-react-vite/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-react-vite/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-react-vite/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-react-vite/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-react-vite/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-react-vite/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-ruby/SKILL.md +50 -0
- package/skills/integration/integration-ruby/references/EXAMPLE.md +420 -0
- package/skills/integration/integration-ruby/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-ruby/references/analytics.md +1778 -0
- package/skills/integration/integration-ruby/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-ruby/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-ruby/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-ruby/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-ruby-on-rails/SKILL.md +55 -0
- package/skills/integration/integration-ruby-on-rails/references/EXAMPLE.md +1013 -0
- package/skills/integration/integration-ruby-on-rails/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-ruby-on-rails/references/analytics.md +1778 -0
- package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-sveltekit/SKILL.md +47 -0
- package/skills/integration/integration-sveltekit/references/EXAMPLE.md +14121 -0
- package/skills/integration/integration-sveltekit/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-sveltekit/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-sveltekit/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-sveltekit/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-sveltekit/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-sveltekit/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-swift/SKILL.md +49 -0
- package/skills/integration/integration-swift/references/EXAMPLE.md +660 -0
- package/skills/integration/integration-swift/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-swift/references/analytics.md +1778 -0
- package/skills/integration/integration-swift/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-swift/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-swift/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-swift/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-tanstack-start/SKILL.md +58 -0
- package/skills/integration/integration-tanstack-start/references/EXAMPLE.md +998 -0
- package/skills/integration/integration-tanstack-start/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-tanstack-start/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-tanstack-start/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-tanstack-start/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-tanstack-start/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-tanstack-start/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-vue-3/SKILL.md +46 -0
- package/skills/integration/integration-vue-3/references/EXAMPLE.md +846 -0
- package/skills/integration/integration-vue-3/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-vue-3/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-vue-3/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-vue-3/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-vue-3/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-vue-3/references/browser-sdk-2.md +4680 -0
- package/skills/taxonomy/amplitude-quickstart-taxonomy-agent/SKILL.md +228 -0
- package/dist/package.json +0 -145
- package/dist/src/ui/tui/components/TitleBar.d.ts +0 -6
- package/dist/src/ui/tui/components/TitleBar.js +0 -16
- package/dist/src/ui/tui/primitives/KagiSmallWebViewer.d.ts +0 -7
- package/dist/src/ui/tui/primitives/KagiSmallWebViewer.js +0 -101
- package/dist/src/utils/anthropic-status.d.ts +0 -17
- package/dist/src/utils/anthropic-status.js +0 -51
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
|
-
* SlackScreen — Amplitude Slack integration setup.
|
|
3
|
+
* SlackScreen — Amplitude Slack integration setup (v2).
|
|
4
4
|
*
|
|
5
5
|
* Guides the user to connect their Slack workspace to Amplitude.
|
|
6
6
|
* Since the OAuth handshake happens in the browser (Amplitude Settings),
|
|
@@ -10,12 +10,12 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
10
10
|
* Region-aware: EU users need the "Amplitude - EU" Slack app.
|
|
11
11
|
*/
|
|
12
12
|
import { Box, Text } from 'ink';
|
|
13
|
-
import { useState, useEffect } from 'react';
|
|
14
|
-
import { useSyncExternalStore } from 'react';
|
|
13
|
+
import { useState, useEffect, useRef } from 'react';
|
|
15
14
|
import { SlackOutcome } from '../store.js';
|
|
15
|
+
import { useWizardStore } from '../hooks/useWizardStore.js';
|
|
16
16
|
import { ConfirmationInput } from '../primitives/index.js';
|
|
17
|
-
import { Colors } from '../styles.js';
|
|
18
|
-
import {
|
|
17
|
+
import { Colors, Icons } from '../styles.js';
|
|
18
|
+
import { fetchSlackInstallUrl, fetchSlackConnectionStatus, } from '../../../lib/api.js';
|
|
19
19
|
import { OUTBOUND_URLS } from '../../../lib/constants.js';
|
|
20
20
|
import { logToFile } from '../../../utils/debug.js';
|
|
21
21
|
import opn from 'opn';
|
|
@@ -26,16 +26,6 @@ var Phase;
|
|
|
26
26
|
Phase["Waiting"] = "waiting";
|
|
27
27
|
Phase["Done"] = "done";
|
|
28
28
|
})(Phase || (Phase = {}));
|
|
29
|
-
/**
|
|
30
|
-
* Build the Amplitude settings URL for Slack connection.
|
|
31
|
-
* Uses the org name from the API; falls back to base URL.
|
|
32
|
-
*/
|
|
33
|
-
export function slackSettingsUrl(baseUrl, orgName) {
|
|
34
|
-
if (orgName) {
|
|
35
|
-
return `${baseUrl}/analytics/${encodeURIComponent(orgName)}/settings/profile`;
|
|
36
|
-
}
|
|
37
|
-
return `${baseUrl}/settings/profile`;
|
|
38
|
-
}
|
|
39
29
|
const markDone = (store, outcome, standalone, onComplete) => {
|
|
40
30
|
if (onComplete) {
|
|
41
31
|
onComplete();
|
|
@@ -48,50 +38,75 @@ const markDone = (store, outcome, standalone, onComplete) => {
|
|
|
48
38
|
}
|
|
49
39
|
};
|
|
50
40
|
export const SlackScreen = ({ store, standalone = false, onComplete, }) => {
|
|
51
|
-
|
|
41
|
+
useWizardStore(store);
|
|
52
42
|
const [phase, setPhase] = useState(Phase.Prompt);
|
|
53
|
-
const
|
|
43
|
+
const timerRef = useRef(null);
|
|
44
|
+
// Clear any pending timer on unmount
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
return () => {
|
|
47
|
+
if (timerRef.current !== null)
|
|
48
|
+
clearTimeout(timerRef.current);
|
|
49
|
+
};
|
|
50
|
+
}, []);
|
|
54
51
|
const region = store.session.region ?? 'us';
|
|
55
52
|
const isEu = region === 'eu';
|
|
56
53
|
const appName = isEu ? 'Amplitude - EU' : 'Amplitude';
|
|
57
|
-
//
|
|
58
|
-
// (e.g. returning users, or the standalone `slack` command).
|
|
54
|
+
// Check if Slack is already connected on mount — auto-complete if so.
|
|
59
55
|
useEffect(() => {
|
|
60
|
-
|
|
61
|
-
if (resolvedOrgName) {
|
|
62
|
-
logToFile(`[SlackScreen] using existing orgName=${resolvedOrgName}`);
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
56
|
+
let cancelled = false;
|
|
65
57
|
const credentials = store.session.credentials;
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
58
|
+
const orgId = store.session.selectedOrgId;
|
|
59
|
+
logToFile(`[SlackScreen] selectedOrgName=${store.session.selectedOrgName ?? ''} credentials=${credentials ? 'present' : 'null'} region=${region}`);
|
|
60
|
+
// Thunder uses access_token (Hydra-validated), not id_token.
|
|
61
|
+
const accessToken = credentials?.accessToken;
|
|
62
|
+
if (accessToken && orgId) {
|
|
63
|
+
void fetchSlackConnectionStatus(accessToken, region, orgId).then((isConnected) => {
|
|
64
|
+
if (cancelled)
|
|
65
|
+
return;
|
|
66
|
+
logToFile(`[SlackScreen] slackConnectionStatus=${isConnected}`);
|
|
67
|
+
if (isConnected) {
|
|
68
|
+
setPhase(Phase.Done);
|
|
69
|
+
timerRef.current = setTimeout(() => {
|
|
70
|
+
if (!cancelled) {
|
|
71
|
+
markDone(store, SlackOutcome.Configured, standalone, onComplete);
|
|
72
|
+
}
|
|
73
|
+
}, 1500);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
69
76
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const name = info.orgs[0]?.name ?? null;
|
|
74
|
-
logToFile(`[SlackScreen] API returned orgs=${JSON.stringify(info.orgs.map((o) => o.name))} using=${name}`);
|
|
75
|
-
setResolvedOrgName(name);
|
|
76
|
-
})
|
|
77
|
-
.catch((err) => {
|
|
78
|
-
logToFile(`[SlackScreen] API fetch failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
79
|
-
});
|
|
77
|
+
return () => {
|
|
78
|
+
cancelled = true;
|
|
79
|
+
};
|
|
80
80
|
}, []);
|
|
81
|
-
const
|
|
81
|
+
const zone = (region ?? 'us');
|
|
82
|
+
const settingsUrl = OUTBOUND_URLS.slackSettings(zone, store.session.selectedOrgId);
|
|
83
|
+
const [openedUrl, setOpenedUrl] = useState(settingsUrl);
|
|
82
84
|
const handleConnect = () => {
|
|
83
85
|
setPhase(Phase.Opening);
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
const credentials = store.session.credentials;
|
|
87
|
+
const orgId = store.session.selectedOrgId;
|
|
88
|
+
// Thunder uses access_token (Hydra-validated), not id_token.
|
|
89
|
+
const accessToken = credentials?.accessToken;
|
|
90
|
+
// Try the direct Slack OAuth URL first; fall back to settings page.
|
|
91
|
+
const open = (url) => {
|
|
92
|
+
setOpenedUrl(url);
|
|
93
|
+
logToFile(`[SlackScreen] opening ${url === settingsUrl ? 'settings fallback' : 'direct Slack OAuth URL'}`);
|
|
94
|
+
opn(url, { wait: false }).catch(() => { });
|
|
95
|
+
timerRef.current = setTimeout(() => setPhase(Phase.Waiting), 800);
|
|
96
|
+
};
|
|
97
|
+
if (accessToken && orgId) {
|
|
98
|
+
void fetchSlackInstallUrl(accessToken, zone, orgId, settingsUrl).then((directUrl) => open(directUrl ?? settingsUrl));
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
open(settingsUrl);
|
|
102
|
+
}
|
|
88
103
|
};
|
|
89
104
|
const handleSkip = () => {
|
|
90
105
|
markDone(store, SlackOutcome.Skipped, standalone, onComplete);
|
|
91
106
|
};
|
|
92
107
|
const handleDone = () => {
|
|
93
108
|
setPhase(Phase.Done);
|
|
94
|
-
setTimeout(() => markDone(store, SlackOutcome.Configured, standalone, onComplete), 1500);
|
|
109
|
+
timerRef.current = setTimeout(() => markDone(store, SlackOutcome.Configured, standalone, onComplete), 1500);
|
|
95
110
|
};
|
|
96
|
-
return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [_jsx(Text, { bold: true, color: Colors.accent, children: "Slack Integration" }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: Colors.
|
|
111
|
+
return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [_jsx(Text, { bold: true, color: Colors.accent, children: "Slack Integration" }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: Colors.secondary, children: "Connect Amplitude to Slack for chart previews, dashboard sharing," }), _jsx(Text, { color: Colors.secondary, children: "and real-time tracking plan notifications." }), isEu && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.warning, children: "EU region: install the \"Amplitude - EU\" app from the Slack App Directory." }) })), phase === Phase.Prompt && (_jsx(Box, { marginTop: 1, children: _jsx(ConfirmationInput, { message: `Connect the "${appName}" Slack app to your workspace?`, confirmLabel: "Connect", cancelLabel: "Skip for now", onConfirm: handleConnect, onCancel: handleSkip }) })), phase === Phase.Opening && (_jsxs(Text, { color: Colors.active, children: ["Opening browser", Icons.ellipsis] })), phase === Phase.Waiting && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [openedUrl === settingsUrl ? (_jsxs(_Fragment, { children: [_jsxs(Text, { color: Colors.body, children: ["Browser opened to", ' ', _jsx(Text, { color: Colors.accent, children: settingsUrl })] }), _jsxs(Text, { color: Colors.secondary, children: ["Go to Settings ", Icons.chevronRight, " Personal Settings", ' ', Icons.chevronRight, " Profile and click \"Connect to Slack\"."] }), _jsxs(Text, { color: Colors.muted, children: ["Docs:", ' ', _jsx(Text, { color: Colors.accent, children: "https://amplitude.com/docs/analytics/integrate-slack" })] })] })) : (_jsxs(_Fragment, { children: [_jsxs(Text, { color: Colors.body, children: ["Browser opened to ", _jsx(Text, { color: Colors.accent, children: "Slack" }), " for authorization."] }), _jsxs(Text, { color: Colors.secondary, children: ["Authorize the ", appName, " app in Slack to complete the connection."] }), _jsxs(Text, { color: Colors.muted, children: ["Docs:", ' ', _jsx(Text, { color: Colors.accent, children: "https://amplitude.com/docs/analytics/integrate-slack" })] })] })), _jsx(Box, { marginTop: 1, children: _jsx(ConfirmationInput, { message: "Connected to Slack?", confirmLabel: "Yes, connected", cancelLabel: "Skip for now", onConfirm: handleDone, onCancel: handleSkip }) })] })), phase === Phase.Done && (_jsx(Box, { flexDirection: "column", marginTop: 1, children: _jsxs(Text, { color: Colors.success, bold: true, children: [Icons.checkmark, " Slack connected! You'll get chart previews and notifications in Slack."] }) }))] })] }));
|
|
97
112
|
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inline copies of runtime constants from wizard-session.ts.
|
|
3
|
+
*
|
|
4
|
+
* tsx has an ESM/CJS dual-loading bug: when a module is first loaded as CJS
|
|
5
|
+
* (e.g. via a top-level import chain) and then loaded again via dynamic
|
|
6
|
+
* import() as ESM, named exports using the `as const` + same-name type
|
|
7
|
+
* pattern fail to resolve. This file provides the TUI layer with its own
|
|
8
|
+
* copies so it never needs runtime imports from wizard-session.ts.
|
|
9
|
+
*
|
|
10
|
+
* IMPORTANT: keep these in sync with src/lib/wizard-session.ts.
|
|
11
|
+
*/
|
|
12
|
+
export declare const RunPhase: {
|
|
13
|
+
readonly Idle: "idle";
|
|
14
|
+
readonly Running: "running";
|
|
15
|
+
readonly Completed: "completed";
|
|
16
|
+
readonly Error: "error";
|
|
17
|
+
};
|
|
18
|
+
export type RunPhase = (typeof RunPhase)[keyof typeof RunPhase];
|
|
19
|
+
export declare const AdditionalFeature: {
|
|
20
|
+
readonly LLM: "llm";
|
|
21
|
+
};
|
|
22
|
+
export type AdditionalFeature = (typeof AdditionalFeature)[keyof typeof AdditionalFeature];
|
|
23
|
+
export declare const ADDITIONAL_FEATURE_LABELS: Record<AdditionalFeature, string>;
|
|
24
|
+
export declare const McpOutcome: {
|
|
25
|
+
readonly NoClients: "no_clients";
|
|
26
|
+
readonly Skipped: "skipped";
|
|
27
|
+
readonly Installed: "installed";
|
|
28
|
+
readonly Failed: "failed";
|
|
29
|
+
};
|
|
30
|
+
export type McpOutcome = (typeof McpOutcome)[keyof typeof McpOutcome];
|
|
31
|
+
export declare const SlackOutcome: {
|
|
32
|
+
readonly Skipped: "skipped";
|
|
33
|
+
readonly Configured: "configured";
|
|
34
|
+
};
|
|
35
|
+
export type SlackOutcome = (typeof SlackOutcome)[keyof typeof SlackOutcome];
|
|
36
|
+
export declare const OutroKind: {
|
|
37
|
+
readonly Success: "success";
|
|
38
|
+
readonly Error: "error";
|
|
39
|
+
readonly Cancel: "cancel";
|
|
40
|
+
};
|
|
41
|
+
export type OutroKind = (typeof OutroKind)[keyof typeof OutroKind];
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inline copies of runtime constants from wizard-session.ts.
|
|
3
|
+
*
|
|
4
|
+
* tsx has an ESM/CJS dual-loading bug: when a module is first loaded as CJS
|
|
5
|
+
* (e.g. via a top-level import chain) and then loaded again via dynamic
|
|
6
|
+
* import() as ESM, named exports using the `as const` + same-name type
|
|
7
|
+
* pattern fail to resolve. This file provides the TUI layer with its own
|
|
8
|
+
* copies so it never needs runtime imports from wizard-session.ts.
|
|
9
|
+
*
|
|
10
|
+
* IMPORTANT: keep these in sync with src/lib/wizard-session.ts.
|
|
11
|
+
*/
|
|
12
|
+
export const RunPhase = {
|
|
13
|
+
Idle: 'idle',
|
|
14
|
+
Running: 'running',
|
|
15
|
+
Completed: 'completed',
|
|
16
|
+
Error: 'error',
|
|
17
|
+
};
|
|
18
|
+
export const AdditionalFeature = {
|
|
19
|
+
LLM: 'llm',
|
|
20
|
+
};
|
|
21
|
+
export const ADDITIONAL_FEATURE_LABELS = {
|
|
22
|
+
[AdditionalFeature.LLM]: 'LLM analytics',
|
|
23
|
+
};
|
|
24
|
+
export const McpOutcome = {
|
|
25
|
+
NoClients: 'no_clients',
|
|
26
|
+
Skipped: 'skipped',
|
|
27
|
+
Installed: 'installed',
|
|
28
|
+
Failed: 'failed',
|
|
29
|
+
};
|
|
30
|
+
export const SlackOutcome = {
|
|
31
|
+
Skipped: 'skipped',
|
|
32
|
+
Configured: 'configured',
|
|
33
|
+
};
|
|
34
|
+
export const OutroKind = {
|
|
35
|
+
Success: 'success',
|
|
36
|
+
Error: 'error',
|
|
37
|
+
Cancel: 'cancel',
|
|
38
|
+
};
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* start-tui.ts — Sets up the Ink TUI renderer
|
|
2
|
+
* start-tui.ts — Sets up the Ink TUI renderer.
|
|
3
|
+
*
|
|
4
|
+
* Uses Amplitude brand colors for terminal theming.
|
|
3
5
|
*/
|
|
4
6
|
import { WizardStore, Flow } from './store.js';
|
|
5
7
|
import type { WizardSession } from '../../lib/wizard-session.js';
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* start-tui.ts — Sets up the Ink TUI renderer
|
|
2
|
+
* start-tui.ts — Sets up the Ink TUI renderer.
|
|
3
|
+
*
|
|
4
|
+
* Uses Amplitude brand colors for terminal theming.
|
|
3
5
|
*/
|
|
4
6
|
import { render } from 'ink';
|
|
5
7
|
import { createElement } from 'react';
|
|
@@ -7,22 +9,22 @@ import { WizardStore, Flow } from './store.js';
|
|
|
7
9
|
import { InkUI } from './ink-ui.js';
|
|
8
10
|
import { setUI } from '../index.js';
|
|
9
11
|
import { App } from './App.js';
|
|
12
|
+
import { Brand } from './styles.js';
|
|
10
13
|
// ANSI escape sequences
|
|
11
14
|
const RESET_ATTRS = '\x1b[0m';
|
|
12
15
|
const CLEAR_SCREEN = '\x1b[2J';
|
|
13
16
|
const CURSOR_HOME = '\x1b[H';
|
|
14
17
|
const BG_BLACK = '\x1b[48;2;0;0;0m';
|
|
15
|
-
// OSC 10/11: set terminal foreground/background
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
+
// OSC 10/11: set terminal foreground/background to Amplitude brand colors
|
|
19
|
+
const OSC_FG = `\x1b]10;${Brand.gray10}\x07`;
|
|
20
|
+
const OSC_BG = `\x1b]11;${Brand.gray100}\x07`;
|
|
18
21
|
// OSC 110/111: reset to user defaults
|
|
19
22
|
const OSC_FG_RESET = '\x1b]110;\x07';
|
|
20
23
|
const OSC_BG_RESET = '\x1b]111;\x07';
|
|
21
|
-
/** Set foreground
|
|
22
|
-
const FORCE_DARK =
|
|
24
|
+
/** Set foreground + background to brand colors, clear screen. */
|
|
25
|
+
const FORCE_DARK = OSC_FG + OSC_BG + BG_BLACK + CLEAR_SCREEN + CURSOR_HOME;
|
|
23
26
|
export function startTUI(version, flow = Flow.Wizard, initialSession) {
|
|
24
|
-
//
|
|
25
|
-
// The UI adapts to whatever size the terminal already is.
|
|
27
|
+
// Apply brand terminal theme
|
|
26
28
|
process.stdout.write(FORCE_DARK);
|
|
27
29
|
const store = new WizardStore(flow);
|
|
28
30
|
store.version = version;
|
|
@@ -32,8 +34,10 @@ export function startTUI(version, flow = Flow.Wizard, initialSession) {
|
|
|
32
34
|
// Swap in the InkUI
|
|
33
35
|
const inkUI = new InkUI(store);
|
|
34
36
|
setUI(inkUI);
|
|
35
|
-
// Render the Ink
|
|
36
|
-
const { unmount: inkUnmount } = render(createElement(App, { store })
|
|
37
|
+
// Render the App — exitOnCtrlC lets Ink translate Ctrl+C into process.exit()
|
|
38
|
+
const { unmount: inkUnmount } = render(createElement(App, { store }), {
|
|
39
|
+
exitOnCtrlC: true,
|
|
40
|
+
});
|
|
37
41
|
// Reset terminal colors on exit
|
|
38
42
|
const cleanup = () => {
|
|
39
43
|
process.stdout.write(OSC_FG_RESET + OSC_BG_RESET + RESET_ATTRS + CLEAR_SCREEN + CURSOR_HOME);
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
* explicit setters so emitChange() is always called.
|
|
11
11
|
*/
|
|
12
12
|
import { TaskStatus, type EventPlanDecision } from '../wizard-ui.js';
|
|
13
|
-
import { type WizardSession, type OutroData, type DiscoveredFeature
|
|
13
|
+
import { type WizardSession, type OutroData, type DiscoveredFeature } from '../../lib/wizard-session.js';
|
|
14
|
+
import { AdditionalFeature, McpOutcome, SlackOutcome, RunPhase } from './session-constants.js';
|
|
14
15
|
import { WizardRouter, type ScreenName, Screen, Overlay, Flow } from './router.js';
|
|
15
16
|
export { TaskStatus, Screen, Overlay, Flow, RunPhase, McpOutcome, SlackOutcome, };
|
|
16
17
|
export type { ScreenName, OutroData, WizardSession };
|
|
@@ -97,6 +98,7 @@ export declare class WizardStore {
|
|
|
97
98
|
setRunPhase(phase: RunPhase): void;
|
|
98
99
|
setCredentials(credentials: WizardSession['credentials']): void;
|
|
99
100
|
setApiKeyNotice(notice: string | null): void;
|
|
101
|
+
setSelectedProjectName(name: string | null): void;
|
|
100
102
|
setFrameworkConfig(integration: WizardSession['integration'], config: WizardSession['frameworkConfig']): void;
|
|
101
103
|
setDetectionComplete(): void;
|
|
102
104
|
setDetectedFramework(label: string): void;
|
|
@@ -188,6 +190,8 @@ export declare class WizardStore {
|
|
|
188
190
|
/**
|
|
189
191
|
* Enable an additional feature: enqueue it for the stop hook
|
|
190
192
|
* and set any feature-specific session flags.
|
|
193
|
+
* Respects Amplitude Experiment feature flags — if the corresponding
|
|
194
|
+
* flag is off the feature is silently skipped.
|
|
191
195
|
*/
|
|
192
196
|
enableFeature(feature: AdditionalFeature): void;
|
|
193
197
|
setAmplitudePreDetected(): void;
|
package/dist/src/ui/tui/store.js
CHANGED
|
@@ -11,9 +11,12 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { atom, map } from 'nanostores';
|
|
13
13
|
import { TaskStatus } from '../wizard-ui.js';
|
|
14
|
-
import {
|
|
14
|
+
import { buildSession, } from '../../lib/wizard-session.js';
|
|
15
|
+
import { AdditionalFeature, McpOutcome, SlackOutcome, RunPhase, } from './session-constants.js';
|
|
15
16
|
import { WizardRouter, Screen, Overlay, Flow, } from './router.js';
|
|
16
17
|
import { analytics, sessionPropertiesCompact } from '../../utils/analytics.js';
|
|
18
|
+
// Inlined to avoid tsx ESM resolution bug with dynamic import().
|
|
19
|
+
const FLAG_LLM_ANALYTICS = 'wizard-llm-analytics';
|
|
17
20
|
export { TaskStatus, Screen, Overlay, Flow, RunPhase, McpOutcome, SlackOutcome, };
|
|
18
21
|
export class WizardStore {
|
|
19
22
|
// ── Internal nanostore atoms ─────────────────────────────────────
|
|
@@ -62,6 +65,7 @@ export class WizardStore {
|
|
|
62
65
|
}
|
|
63
66
|
set session(value) {
|
|
64
67
|
this.$session.set(value);
|
|
68
|
+
this.emitChange();
|
|
65
69
|
}
|
|
66
70
|
get commandMode() {
|
|
67
71
|
return this.$commandMode.get();
|
|
@@ -128,6 +132,10 @@ export class WizardStore {
|
|
|
128
132
|
this.$session.setKey('apiKeyNotice', notice);
|
|
129
133
|
this.emitChange();
|
|
130
134
|
}
|
|
135
|
+
setSelectedProjectName(name) {
|
|
136
|
+
this.$session.setKey('selectedProjectName', name);
|
|
137
|
+
this.emitChange();
|
|
138
|
+
}
|
|
131
139
|
setFrameworkConfig(integration, config) {
|
|
132
140
|
this.$session.setKey('integration', integration);
|
|
133
141
|
this.$session.setKey('frameworkConfig', config);
|
|
@@ -148,6 +156,19 @@ export class WizardStore {
|
|
|
148
156
|
setRegion(region) {
|
|
149
157
|
this.$session.setKey('region', region);
|
|
150
158
|
this.$session.setKey('regionForced', false);
|
|
159
|
+
// Persist region to project-level ampli.json so next run uses the right zone.
|
|
160
|
+
// Only writes if OrgId/WorkspaceId already exist (otherwise writeAmpliConfig
|
|
161
|
+
// would create a partial config).
|
|
162
|
+
const session = this.$session.get();
|
|
163
|
+
if (session.selectedOrgId && session.selectedWorkspaceId) {
|
|
164
|
+
void import('../../lib/ampli-config.js').then(({ writeAmpliConfig }) => {
|
|
165
|
+
writeAmpliConfig(session.installDir, {
|
|
166
|
+
OrgId: session.selectedOrgId,
|
|
167
|
+
WorkspaceId: session.selectedWorkspaceId,
|
|
168
|
+
Zone: region,
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
}
|
|
151
172
|
this.emitChange();
|
|
152
173
|
}
|
|
153
174
|
/** Force the RegionSelect screen to re-appear (/region command). */
|
|
@@ -355,9 +376,13 @@ export class WizardStore {
|
|
|
355
376
|
this.$session.setKey('selectedOrgName', org.name);
|
|
356
377
|
this.$session.setKey('selectedWorkspaceId', workspace.id);
|
|
357
378
|
this.$session.setKey('selectedWorkspaceName', workspace.name);
|
|
358
|
-
// Write ampli.json to the project directory
|
|
379
|
+
// Write ampli.json to the project directory.
|
|
380
|
+
// Use session.region (user-confirmed) over pendingAuthCloudRegion (auto-detected)
|
|
381
|
+
// so that /region changes are respected.
|
|
359
382
|
void import('../../lib/ampli-config.js').then(({ writeAmpliConfig }) => {
|
|
360
|
-
const zone = this.$session.get().
|
|
383
|
+
const zone = this.$session.get().region ??
|
|
384
|
+
this.$session.get().pendingAuthCloudRegion ??
|
|
385
|
+
'us';
|
|
361
386
|
writeAmpliConfig(installDir, {
|
|
362
387
|
OrgId: org.id,
|
|
363
388
|
WorkspaceId: workspace.id,
|
|
@@ -398,21 +423,35 @@ export class WizardStore {
|
|
|
398
423
|
}
|
|
399
424
|
addDiscoveredFeature(feature) {
|
|
400
425
|
if (!this.session.discoveredFeatures.includes(feature)) {
|
|
401
|
-
this
|
|
426
|
+
this.$session.setKey('discoveredFeatures', [
|
|
427
|
+
...this.session.discoveredFeatures,
|
|
428
|
+
feature,
|
|
429
|
+
]);
|
|
402
430
|
this.emitChange();
|
|
403
431
|
}
|
|
404
432
|
}
|
|
405
433
|
/**
|
|
406
434
|
* Enable an additional feature: enqueue it for the stop hook
|
|
407
435
|
* and set any feature-specific session flags.
|
|
436
|
+
* Respects Amplitude Experiment feature flags — if the corresponding
|
|
437
|
+
* flag is off the feature is silently skipped.
|
|
408
438
|
*/
|
|
409
439
|
enableFeature(feature) {
|
|
440
|
+
// Gate LLM analytics behind the wizard-llm-analytics feature flag
|
|
441
|
+
if (feature === AdditionalFeature.LLM) {
|
|
442
|
+
if (!analytics.isFeatureFlagEnabled(FLAG_LLM_ANALYTICS)) {
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
410
446
|
if (!this.session.additionalFeatureQueue.includes(feature)) {
|
|
411
|
-
this
|
|
447
|
+
this.$session.setKey('additionalFeatureQueue', [
|
|
448
|
+
...this.session.additionalFeatureQueue,
|
|
449
|
+
feature,
|
|
450
|
+
]);
|
|
412
451
|
}
|
|
413
452
|
// Feature-specific flags
|
|
414
453
|
if (feature === AdditionalFeature.LLM) {
|
|
415
|
-
this
|
|
454
|
+
this.$session.setKey('llmOptIn', true);
|
|
416
455
|
}
|
|
417
456
|
analytics.wizardCapture('Feature Enabled', { feature });
|
|
418
457
|
this.emitChange();
|
|
@@ -1,6 +1,80 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Design tokens — Amplitude brand palette + modern TUI primitives.
|
|
3
|
+
*
|
|
4
|
+
* Colors sourced from brand.amplitude.com/creative/color.
|
|
5
|
+
* Optimised for dark terminal backgrounds (Gray 100 base).
|
|
3
6
|
*/
|
|
7
|
+
export declare const Brand: {
|
|
8
|
+
readonly darkBlue: "#001A4F";
|
|
9
|
+
readonly blue: "#1E61F0";
|
|
10
|
+
readonly blueOnDark: "#4083FF";
|
|
11
|
+
readonly lilac: "#6980FF";
|
|
12
|
+
readonly violet: "#A373FF";
|
|
13
|
+
readonly pink: "#FF7D78";
|
|
14
|
+
readonly amber: "#F59E0B";
|
|
15
|
+
readonly red: "#F23845";
|
|
16
|
+
readonly gray100: "#13171A";
|
|
17
|
+
readonly gray90: "#242A2E";
|
|
18
|
+
readonly gray80: "#373D42";
|
|
19
|
+
readonly gray70: "#50565B";
|
|
20
|
+
readonly gray60: "#697077";
|
|
21
|
+
readonly gray50: "#868D95";
|
|
22
|
+
readonly gray40: "#9FA5AD";
|
|
23
|
+
readonly gray30: "#B9BFC7";
|
|
24
|
+
readonly gray20: "#D5D9E0";
|
|
25
|
+
readonly gray10: "#F2F4F8";
|
|
26
|
+
readonly success: "#34D399";
|
|
27
|
+
readonly white: "#FFFFFF";
|
|
28
|
+
};
|
|
29
|
+
export declare const Colors: {
|
|
30
|
+
readonly heading: "#F2F4F8";
|
|
31
|
+
readonly body: "#B9BFC7";
|
|
32
|
+
readonly secondary: "#868D95";
|
|
33
|
+
readonly muted: "#697077";
|
|
34
|
+
readonly disabled: "#50565B";
|
|
35
|
+
readonly accent: "#4083FF";
|
|
36
|
+
readonly accentSecondary: "#6980FF";
|
|
37
|
+
readonly active: "#A373FF";
|
|
38
|
+
readonly success: "#34D399";
|
|
39
|
+
readonly error: "#F23845";
|
|
40
|
+
readonly warning: "#F59E0B";
|
|
41
|
+
readonly background: "#13171A";
|
|
42
|
+
readonly surface: "#242A2E";
|
|
43
|
+
readonly border: "#373D42";
|
|
44
|
+
readonly primary: "#4083FF";
|
|
45
|
+
};
|
|
46
|
+
export declare const Icons: {
|
|
47
|
+
readonly checkmark: "✓";
|
|
48
|
+
readonly cross: "✗";
|
|
49
|
+
readonly bullet: "●";
|
|
50
|
+
readonly bulletOpen: "○";
|
|
51
|
+
readonly bulletHalf: "◐";
|
|
52
|
+
readonly squareFilled: "◼";
|
|
53
|
+
readonly squareOpen: "◻";
|
|
54
|
+
readonly chevronRight: "›";
|
|
55
|
+
readonly arrowRight: "→";
|
|
56
|
+
readonly triangleRight: "▶";
|
|
57
|
+
readonly triangleSmallRight: "▸";
|
|
58
|
+
readonly diamond: "◆";
|
|
59
|
+
readonly diamondOpen: "◇";
|
|
60
|
+
readonly bar: "│";
|
|
61
|
+
readonly dash: "─";
|
|
62
|
+
readonly warning: "⚠";
|
|
63
|
+
readonly prompt: "❯";
|
|
64
|
+
readonly dot: "·";
|
|
65
|
+
readonly ellipsis: "…";
|
|
66
|
+
};
|
|
67
|
+
export declare const SPINNER_FRAMES: readonly ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
68
|
+
export declare const SPINNER_INTERVAL = 200;
|
|
69
|
+
export declare const Layout: {
|
|
70
|
+
readonly minWidth: 60;
|
|
71
|
+
readonly maxWidth: 120;
|
|
72
|
+
readonly paddingX: 2;
|
|
73
|
+
readonly stepperHeight: 1;
|
|
74
|
+
readonly headerHeight: 1;
|
|
75
|
+
readonly hintBarHeight: 1;
|
|
76
|
+
readonly separatorChar: "─";
|
|
77
|
+
};
|
|
4
78
|
export declare enum HAlign {
|
|
5
79
|
Left = "flex-start",
|
|
6
80
|
Center = "center",
|
|
@@ -11,21 +85,3 @@ export declare enum VAlign {
|
|
|
11
85
|
Center = "center",
|
|
12
86
|
Bottom = "flex-end"
|
|
13
87
|
}
|
|
14
|
-
export declare const Colors: {
|
|
15
|
-
readonly primary: "#1e61f0";
|
|
16
|
-
readonly accent: "#1e61f0";
|
|
17
|
-
readonly success: "green";
|
|
18
|
-
readonly error: "red";
|
|
19
|
-
readonly muted: "#cccccc";
|
|
20
|
-
};
|
|
21
|
-
export declare const Icons: {
|
|
22
|
-
readonly diamond: "◆";
|
|
23
|
-
readonly diamondOpen: "◇";
|
|
24
|
-
readonly check: "✔";
|
|
25
|
-
readonly warning: "⚠";
|
|
26
|
-
readonly squareFilled: "◼";
|
|
27
|
-
readonly squareOpen: "◻";
|
|
28
|
-
readonly triangleRight: "▶";
|
|
29
|
-
readonly triangleSmallRight: "▸";
|
|
30
|
-
readonly bullet: "•";
|
|
31
|
-
};
|
|
@@ -1,6 +1,106 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Design tokens — Amplitude brand palette + modern TUI primitives.
|
|
3
|
+
*
|
|
4
|
+
* Colors sourced from brand.amplitude.com/creative/color.
|
|
5
|
+
* Optimised for dark terminal backgrounds (Gray 100 base).
|
|
3
6
|
*/
|
|
7
|
+
// ── Amplitude brand palette ──────────────────────────────────────────
|
|
8
|
+
export const Brand = {
|
|
9
|
+
darkBlue: '#001A4F',
|
|
10
|
+
blue: '#1E61F0',
|
|
11
|
+
blueOnDark: '#4083FF', // primary accent on dark backgrounds
|
|
12
|
+
lilac: '#6980FF', // secondary accent, completed states
|
|
13
|
+
violet: '#A373FF', // in-progress, active highlights
|
|
14
|
+
pink: '#FF7D78', // decorative only
|
|
15
|
+
amber: '#F59E0B', // warnings — visually distinct from red
|
|
16
|
+
red: '#F23845', // errors only
|
|
17
|
+
gray100: '#13171A', // terminal background
|
|
18
|
+
gray90: '#242A2E', // card/surface
|
|
19
|
+
gray80: '#373D42', // borders, dividers
|
|
20
|
+
gray70: '#50565B', // disabled text
|
|
21
|
+
gray60: '#697077', // muted text
|
|
22
|
+
gray50: '#868D95', // secondary text
|
|
23
|
+
gray40: '#9FA5AD', // body text
|
|
24
|
+
gray30: '#B9BFC7', // primary text
|
|
25
|
+
gray20: '#D5D9E0', // emphasized text
|
|
26
|
+
gray10: '#F2F4F8', // headings, bright text
|
|
27
|
+
success: '#34D399', // emerald-400 — completion
|
|
28
|
+
white: '#FFFFFF',
|
|
29
|
+
};
|
|
30
|
+
// ── Semantic color aliases ───────────────────────────────────────────
|
|
31
|
+
export const Colors = {
|
|
32
|
+
// Text hierarchy (4 levels)
|
|
33
|
+
heading: Brand.gray10,
|
|
34
|
+
body: Brand.gray30,
|
|
35
|
+
secondary: Brand.gray50,
|
|
36
|
+
muted: Brand.gray60,
|
|
37
|
+
disabled: Brand.gray70,
|
|
38
|
+
// Interactive
|
|
39
|
+
accent: Brand.blueOnDark,
|
|
40
|
+
accentSecondary: Brand.lilac,
|
|
41
|
+
active: Brand.violet,
|
|
42
|
+
// Status
|
|
43
|
+
success: Brand.success,
|
|
44
|
+
error: Brand.red,
|
|
45
|
+
warning: Brand.amber,
|
|
46
|
+
// Surfaces
|
|
47
|
+
background: Brand.gray100,
|
|
48
|
+
surface: Brand.gray90,
|
|
49
|
+
border: Brand.gray80,
|
|
50
|
+
// Legacy compat — screens that import Colors.primary
|
|
51
|
+
primary: Brand.blueOnDark,
|
|
52
|
+
};
|
|
53
|
+
// ── Icons — modern unicode glyphs ───────────────────────────────────
|
|
54
|
+
export const Icons = {
|
|
55
|
+
// Progress states
|
|
56
|
+
checkmark: '✓',
|
|
57
|
+
cross: '✗',
|
|
58
|
+
bullet: '●',
|
|
59
|
+
bulletOpen: '○',
|
|
60
|
+
bulletHalf: '◐',
|
|
61
|
+
squareFilled: '◼',
|
|
62
|
+
squareOpen: '◻',
|
|
63
|
+
// Navigation
|
|
64
|
+
chevronRight: '›',
|
|
65
|
+
arrowRight: '→',
|
|
66
|
+
triangleRight: '▶',
|
|
67
|
+
triangleSmallRight: '▸',
|
|
68
|
+
// Decorative
|
|
69
|
+
diamond: '◆',
|
|
70
|
+
diamondOpen: '◇',
|
|
71
|
+
bar: '│',
|
|
72
|
+
dash: '─',
|
|
73
|
+
warning: '⚠',
|
|
74
|
+
// Indicators
|
|
75
|
+
prompt: '❯',
|
|
76
|
+
dot: '·',
|
|
77
|
+
ellipsis: '…',
|
|
78
|
+
};
|
|
79
|
+
// ── Braille spinner frames ──────────────────────────────────────────
|
|
80
|
+
export const SPINNER_FRAMES = [
|
|
81
|
+
'⠋',
|
|
82
|
+
'⠙',
|
|
83
|
+
'⠹',
|
|
84
|
+
'⠸',
|
|
85
|
+
'⠼',
|
|
86
|
+
'⠴',
|
|
87
|
+
'⠦',
|
|
88
|
+
'⠧',
|
|
89
|
+
'⠇',
|
|
90
|
+
'⠏',
|
|
91
|
+
];
|
|
92
|
+
export const SPINNER_INTERVAL = 200;
|
|
93
|
+
// ── Layout constants ────────────────────────────────────────────────
|
|
94
|
+
export const Layout = {
|
|
95
|
+
minWidth: 60,
|
|
96
|
+
maxWidth: 120,
|
|
97
|
+
paddingX: 2,
|
|
98
|
+
stepperHeight: 1,
|
|
99
|
+
headerHeight: 1,
|
|
100
|
+
hintBarHeight: 1,
|
|
101
|
+
separatorChar: '─',
|
|
102
|
+
};
|
|
103
|
+
// ── Alignment ────────────────────────────────────────────────────────
|
|
4
104
|
export var HAlign;
|
|
5
105
|
(function (HAlign) {
|
|
6
106
|
HAlign["Left"] = "flex-start";
|
|
@@ -13,21 +113,3 @@ export var VAlign;
|
|
|
13
113
|
VAlign["Center"] = "center";
|
|
14
114
|
VAlign["Bottom"] = "flex-end";
|
|
15
115
|
})(VAlign || (VAlign = {}));
|
|
16
|
-
export const Colors = {
|
|
17
|
-
primary: '#1e61f0',
|
|
18
|
-
accent: '#1e61f0',
|
|
19
|
-
success: 'green',
|
|
20
|
-
error: 'red',
|
|
21
|
-
muted: '#cccccc',
|
|
22
|
-
};
|
|
23
|
-
export const Icons = {
|
|
24
|
-
diamond: '\u25C6',
|
|
25
|
-
diamondOpen: '\u25C7',
|
|
26
|
-
check: '\u2714',
|
|
27
|
-
warning: '\u26A0',
|
|
28
|
-
squareFilled: '\u25FC',
|
|
29
|
-
squareOpen: '\u25FB',
|
|
30
|
-
triangleRight: '\u25B6',
|
|
31
|
-
triangleSmallRight: '\u25B8',
|
|
32
|
-
bullet: '\u2022',
|
|
33
|
-
};
|