betterstart-cli 0.0.84 → 0.0.86

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.
@@ -38,7 +38,7 @@ export function CopyableCodeBlock({ label, code, language, tabs }: CopyableCodeB
38
38
  <Card className="flex flex-col w-full p-0 gap-0">
39
39
  {hasTabs ? (
40
40
  <Tabs value={activeTab.id} onValueChange={setActiveTabId} className="min-h-0 flex-1 gap-0">
41
- <CardHeader className="flex items-center justify-between gap-2 py-1! pl-3.5! pr-1 bg-background border-b border-border">
41
+ <CardHeader className="flex items-center justify-between gap-2 pt-[5px]! pb-2! pl-3.5! pr-1 bg-background border-b border-border">
42
42
  <div className="flex min-w-0 flex-1 items-center gap-2">
43
43
  <span className="min-w-0 truncate text-sm font-medium text-muted-foreground">
44
44
  {label}
@@ -54,7 +54,7 @@ export function CopyableCodeBlock({ label, code, language, tabs }: CopyableCodeB
54
54
  <Button
55
55
  type="button"
56
56
  variant="ghost"
57
- size="icon"
57
+ size="icon-sm"
58
58
  aria-label={`Copy ${label} ${activeTab.label}`}
59
59
  onClick={() => {
60
60
  void copy(activeTab.code)
@@ -66,7 +66,7 @@ export function CopyableCodeBlock({ label, code, language, tabs }: CopyableCodeB
66
66
 
67
67
  {codeTabs.map((tab) => (
68
68
  <TabsContent key={tab.id} value={tab.id} className="min-h-0 overflow-auto">
69
- <CardContent className="p-0 overflow-auto">
69
+ <CardContent className="p-0 overflow-auto h-full">
70
70
  <React.Suspense fallback={<PlainCodeFallback code={tab.code} />}>
71
71
  <LazyCodeMirror code={tab.code} language={tab.language} theme={codeTheme} />
72
72
  </React.Suspense>
@@ -76,14 +76,14 @@ export function CopyableCodeBlock({ label, code, language, tabs }: CopyableCodeB
76
76
  </Tabs>
77
77
  ) : (
78
78
  <>
79
- <CardHeader className="flex items-center justify-between gap-2 py-1! pl-3.5! pr-1 bg-background border-b border-border">
79
+ <CardHeader className="flex items-center justify-between gap-2 pt-[5px]! pb-2! pl-3.5! pr-1 bg-background border-b border-border">
80
80
  <span className="min-w-0 truncate text-sm font-medium text-muted-foreground">
81
81
  {label}
82
82
  </span>
83
83
  <Button
84
84
  type="button"
85
85
  variant="ghost"
86
- size="icon"
86
+ size="icon-sm"
87
87
  aria-label={`Copy ${label}`}
88
88
  onClick={() => {
89
89
  void copy(activeTab.code)
@@ -11,8 +11,8 @@ import type { DevModeCodeLanguage, DevModeCodeTheme } from './dev-mode-types'
11
11
  const codeMirrorSetup = {
12
12
  lineNumbers: true,
13
13
  foldGutter: false,
14
- highlightActiveLine: false,
15
- highlightActiveLineGutter: false
14
+ highlightActiveLine: true,
15
+ highlightActiveLineGutter: true
16
16
  }
17
17
 
18
18
  const compactCodeTheme = EditorView.theme({
@@ -63,6 +63,7 @@ export default function DevModeCodeMirror({ code, language, theme }: DevModeCode
63
63
  basicSetup={codeMirrorSetup}
64
64
  extensions={extensions}
65
65
  theme={theme === 'dark' ? githubDark : githubLight}
66
+ className="flex-1 [&>.cm-editor]:h-full"
66
67
  />
67
68
  )
68
69
  }
@@ -30,7 +30,7 @@ function DialogOverlay({
30
30
  <DialogPrimitive.Overlay
31
31
  data-slot="dialog-overlay"
32
32
  className={cn(
33
- 'fixed inset-0 isolate z-50 bg-black/80 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0',
33
+ 'fixed inset-0 isolate z-200 bg-black/80 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0',
34
34
  className
35
35
  )}
36
36
  {...props}
@@ -52,7 +52,7 @@ function DialogContent({
52
52
  <DialogPrimitive.Content
53
53
  data-slot="dialog-content"
54
54
  className={cn(
55
- 'fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-0 rounded-sm text-sm text-popover-foreground ring-1 ring-foreground/5 duration-100 outline-none sm:max-w-md data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 overflow-hidden bg-card',
55
+ 'fixed top-1/2 left-1/2 z-200 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-0 rounded-sm text-sm text-popover-foreground ring-1 ring-foreground/5 duration-100 outline-none sm:max-w-md data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:fade-out-0 data-closed:zoom-out-95 overflow-hidden bg-card',
56
56
  className
57
57
  )}
58
58
  {...props}
@@ -106,7 +106,7 @@ function DialogFooter({
106
106
  <div
107
107
  data-slot="dialog-footer"
108
108
  className={cn(
109
- 'flex flex-col-reverse gap-1 px-6 pt-4 items-center pb-5 bg-muted sm:flex-row sm:justify-between',
109
+ 'flex flex-col-reverse gap-1 px-6 pt-2 items-center pb-3 bg-muted sm:flex-row sm:justify-between',
110
110
  className
111
111
  )}
112
112
  {...props}
package/dist/cli.js CHANGED
@@ -26300,6 +26300,8 @@ function ensureVercelJsonFramework(cwd) {
26300
26300
  }
26301
26301
  function parseDeployedUrl(stdout, stderr) {
26302
26302
  const plainErr = stripVTControlCharacters4(stderr);
26303
+ const aliased = plainErr.match(/Aliased:\s+(https:\/\/\S+)/i)?.[1];
26304
+ if (aliased) return aliased;
26303
26305
  const production = plainErr.match(/Production:\s+(https:\/\/\S+)/i)?.[1];
26304
26306
  if (production) return production;
26305
26307
  const fromStdout = stripVTControlCharacters4(stdout).match(/https:\/\/\S+/)?.[0];
@@ -26368,30 +26370,44 @@ function findAcceptTermsUrl(line) {
26368
26370
  async function provisionNeonInteractive(runner, cwd, options) {
26369
26371
  const quietSpinner = spinner2();
26370
26372
  quietSpinner.start("Creating your Neon database");
26371
- let waitingOnTerms = false;
26373
+ let termsNotice;
26374
+ let termsResolved = false;
26375
+ const settleTermsNotice = () => {
26376
+ if (!termsNotice || termsResolved) return;
26377
+ termsResolved = true;
26378
+ quietSpinner.clear();
26379
+ eraseRows(termsNotice.rows);
26380
+ p20.log.step(termsNotice.text);
26381
+ };
26372
26382
  const quiet = await runVercel(runner, neonAddArgs(options), {
26373
26383
  cwd,
26374
26384
  mode: "capture",
26375
26385
  timeoutMs: PROVISION_TIMEOUT_MS2,
26376
26386
  env: options.env,
26377
26387
  onOutputLine: (line, run) => {
26378
- if (!waitingOnTerms) {
26388
+ if (!termsNotice) {
26379
26389
  const termsUrl = findAcceptTermsUrl(line);
26380
26390
  if (!termsUrl) return;
26381
- waitingOnTerms = true;
26382
26391
  run.extendTimeout(INTERACTIVE_PROVISION_TIMEOUT_MS2);
26392
+ const message = "Please accept the Neon terms in your browser";
26393
+ termsNotice = {
26394
+ text: `${message}
26395
+ ${pc7.dim(termsUrl)}`,
26396
+ rows: clackLogRows(message) + clackLogRows(termsUrl) - 1
26397
+ };
26383
26398
  quietSpinner.clear();
26384
- p20.log.info(`Please accept the Neon terms in your browser
26385
- ${pc7.dim(termsUrl)}`);
26399
+ p20.log.info(termsNotice.text);
26386
26400
  quietSpinner.start("Waiting for the terms to be accepted");
26387
26401
  return;
26388
26402
  }
26389
26403
  if (TERMS_ACCEPTED_PATTERN.test(line)) {
26390
- quietSpinner.message("Creating your Neon database");
26404
+ settleTermsNotice();
26405
+ quietSpinner.start("Creating your Neon database");
26391
26406
  }
26392
26407
  }
26393
26408
  });
26394
26409
  if (quiet.success) {
26410
+ settleTermsNotice();
26395
26411
  quietSpinner.clear();
26396
26412
  return readNeonProvisionInfo(quiet.stdout);
26397
26413
  }