@aglyn/plugins-ai 1.0.0-beta.292 → 1.0.0-beta.293

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/package.json +17 -17
  2. package/src/lib/components/ai-site-import-job.component.js +5 -4
  3. package/src/lib/components/ai-site-import-job.component.js.map +1 -1
  4. package/src/lib/components/ai-site-import-start.component.js +3 -3
  5. package/src/lib/components/ai-site-import-start.component.js.map +1 -1
  6. package/src/lib/components/ai-site-start-card.component.d.ts +1 -1
  7. package/src/lib/components/ai-site-start-card.component.js +129 -29
  8. package/src/lib/components/ai-site-start-card.component.js.map +1 -1
  9. package/src/lib/components/ai-site-start-steps.component.d.ts +15 -3
  10. package/src/lib/components/ai-site-start-steps.component.js +42 -25
  11. package/src/lib/components/ai-site-start-steps.component.js.map +1 -1
  12. package/src/lib/components/ai-site-style-previews.d.ts +17 -0
  13. package/src/lib/components/ai-site-style-previews.js +26 -95
  14. package/src/lib/components/ai-site-style-previews.js.map +1 -1
  15. package/src/lib/declarations.server.js +22 -0
  16. package/src/lib/declarations.server.js.map +1 -1
  17. package/src/lib/jobs/ai-job-import-step.d.ts +21 -2
  18. package/src/lib/jobs/ai-job-import-step.js +179 -49
  19. package/src/lib/jobs/ai-job-import-step.js.map +1 -1
  20. package/src/lib/jobs/ai-job-layout-language.d.ts +27 -3
  21. package/src/lib/jobs/ai-job-layout-language.js +156 -113
  22. package/src/lib/jobs/ai-job-layout-language.js.map +1 -1
  23. package/src/lib/jobs/ai-job-layout-step.js +56 -17
  24. package/src/lib/jobs/ai-job-layout-step.js.map +1 -1
  25. package/src/lib/jobs/ai-job-page-language.d.ts +25 -15
  26. package/src/lib/jobs/ai-job-page-language.js +120 -66
  27. package/src/lib/jobs/ai-job-page-language.js.map +1 -1
  28. package/src/lib/jobs/ai-job-page-step.js +27 -7
  29. package/src/lib/jobs/ai-job-page-step.js.map +1 -1
  30. package/src/lib/jobs/ai-job-site-datasets.d.ts +12 -4
  31. package/src/lib/jobs/ai-job-site-datasets.js +36 -16
  32. package/src/lib/jobs/ai-job-site-datasets.js.map +1 -1
  33. package/src/lib/jobs/ai-jobs.js +6 -2
  34. package/src/lib/jobs/ai-jobs.js.map +1 -1
  35. package/src/lib/jobs/ai-layout-stock-photos.d.ts +50 -1
  36. package/src/lib/jobs/ai-layout-stock-photos.js +586 -35
  37. package/src/lib/jobs/ai-layout-stock-photos.js.map +1 -1
  38. package/src/lib/jobs/ai-site-import-compile.d.ts +147 -0
  39. package/src/lib/jobs/ai-site-import-compile.js +1143 -0
  40. package/src/lib/jobs/ai-site-import-compile.js.map +1 -0
  41. package/src/lib/jobs/ai-site-import-document.d.ts +9 -36
  42. package/src/lib/jobs/ai-site-import-document.js +23 -489
  43. package/src/lib/jobs/ai-site-import-document.js.map +1 -1
  44. package/src/lib/jobs/ai-site-import-look.d.ts +54 -7
  45. package/src/lib/jobs/ai-site-import-look.js +163 -52
  46. package/src/lib/jobs/ai-site-import-look.js.map +1 -1
  47. package/src/lib/jobs/ai-site-import-publish.d.ts +7 -1
  48. package/src/lib/jobs/ai-site-import-publish.js +19 -5
  49. package/src/lib/jobs/ai-site-import-publish.js.map +1 -1
  50. package/src/lib/jobs/ai-site-late-photos.js +4 -2
  51. package/src/lib/jobs/ai-site-late-photos.js.map +1 -1
  52. package/src/lib/jobs/ai-site-publish.d.ts +10 -1
  53. package/src/lib/jobs/ai-site-publish.js +8 -3
  54. package/src/lib/jobs/ai-site-publish.js.map +1 -1
  55. package/src/lib/jobs/fixtures/ai-stock-photo-agl4092-1029-recordings.d.ts +23 -0
  56. package/src/lib/jobs/fixtures/ai-stock-photo-agl4092-1029-recordings.js +677 -0
  57. package/src/lib/jobs/fixtures/ai-stock-photo-agl4092-1029-recordings.js.map +1 -0
  58. package/src/lib/layout-language/ai-layout-compiler.d.ts +26 -0
  59. package/src/lib/layout-language/ai-layout-compiler.js +677 -33
  60. package/src/lib/layout-language/ai-layout-compiler.js.map +1 -1
  61. package/src/lib/layout-language/ai-layout-frame-hollows.js +5 -1
  62. package/src/lib/layout-language/ai-layout-frame-hollows.js.map +1 -1
  63. package/src/lib/layout-language/ai-layout-frame-source.d.ts +196 -0
  64. package/src/lib/layout-language/ai-layout-frame-source.js +726 -0
  65. package/src/lib/layout-language/ai-layout-frame-source.js.map +1 -0
  66. package/src/lib/layout-language/ai-layout-frame.d.ts +22 -0
  67. package/src/lib/layout-language/ai-layout-frame.js +121 -29
  68. package/src/lib/layout-language/ai-layout-frame.js.map +1 -1
  69. package/src/lib/layout-language/ai-layout-language.d.ts +103 -37
  70. package/src/lib/layout-language/ai-layout-language.js +85 -120
  71. package/src/lib/layout-language/ai-layout-language.js.map +1 -1
  72. package/src/lib/model/ai-credit-estimate.d.ts +11 -7
  73. package/src/lib/model/ai-credit-estimate.js +11 -7
  74. package/src/lib/model/ai-credit-estimate.js.map +1 -1
  75. package/src/lib/model/ai-site-import.d.ts +307 -13
  76. package/src/lib/model/ai-site-import.js +227 -19
  77. package/src/lib/model/ai-site-import.js.map +1 -1
  78. package/src/lib/model/ai-site-look.d.ts +65 -1
  79. package/src/lib/model/ai-site-look.js +141 -23
  80. package/src/lib/model/ai-site-look.js.map +1 -1
  81. package/src/lib/model/ai-site-photos.d.ts +2 -0
  82. package/src/lib/model/ai-site-photos.js.map +1 -1
  83. package/src/lib/model/ai-site-start-steps.d.ts +4 -3
  84. package/src/lib/model/ai-site-start-steps.js +11 -3
  85. package/src/lib/model/ai-site-start-steps.js.map +1 -1
  86. package/src/lib/model/ai-site-start.d.ts +23 -2
  87. package/src/lib/model/ai-site-start.js +25 -3
  88. package/src/lib/model/ai-site-start.js.map +1 -1
  89. package/src/lib/providers/routing.d.ts +11 -0
  90. package/src/lib/providers/routing.js +23 -0
  91. package/src/lib/providers/routing.js.map +1 -1
  92. package/src/lib/runtime/ai-doctrine-validators.d.ts +4 -2
  93. package/src/lib/runtime/ai-doctrine-validators.js +7 -2
  94. package/src/lib/runtime/ai-doctrine-validators.js.map +1 -1
  95. package/src/lib/runtime/ai-icon-library.d.ts +4 -0
  96. package/src/lib/runtime/ai-icon-library.js +4 -0
  97. package/src/lib/runtime/ai-icon-library.js.map +1 -1
  98. package/src/lib/runtime/ai-node-tree.js +5 -1
  99. package/src/lib/runtime/ai-node-tree.js.map +1 -1
  100. package/src/lib/runtime/ai-palette.d.ts +2 -0
  101. package/src/lib/runtime/ai-palette.generated.js +19 -3
  102. package/src/lib/runtime/ai-palette.generated.js.map +1 -1
  103. package/src/lib/runtime/ai-palette.js +2 -1
  104. package/src/lib/runtime/ai-palette.js.map +1 -1
  105. package/src/lib/site-import/fixtures/site-layout-recordings.d.ts +50 -0
  106. package/src/lib/site-import/fixtures/site-layout-recordings.js +86 -0
  107. package/src/lib/site-import/fixtures/site-layout-recordings.js.map +1 -0
  108. package/src/lib/site-import/site-import-crawl.d.ts +18 -1
  109. package/src/lib/site-import/site-import-crawl.js +70 -10
  110. package/src/lib/site-import/site-import-crawl.js.map +1 -1
  111. package/src/lib/site-import/site-import-css.d.ts +110 -0
  112. package/src/lib/site-import/site-import-css.js +826 -0
  113. package/src/lib/site-import/site-import-css.js.map +1 -0
  114. package/src/lib/site-import/site-import-html.d.ts +116 -1
  115. package/src/lib/site-import/site-import-html.js +538 -46
  116. package/src/lib/site-import/site-import-html.js.map +1 -1
  117. package/src/lib/site-import/site-import-layout.d.ts +79 -0
  118. package/src/lib/site-import/site-import-layout.js +1608 -0
  119. package/src/lib/site-import/site-import-layout.js.map +1 -0
  120. package/src/lib/site-import/site-import-nav.d.ts +40 -0
  121. package/src/lib/site-import/site-import-nav.js +437 -0
  122. package/src/lib/site-import/site-import-nav.js.map +1 -0
  123. package/src/lib/site-import/site-import-page.d.ts +8 -1
  124. package/src/lib/site-import/site-import-page.js +24 -2
  125. package/src/lib/site-import/site-import-page.js.map +1 -1
  126. package/src/lib/assets/site-styles/beauty.webp +0 -0
  127. package/src/lib/assets/site-styles/blog.webp +0 -0
  128. package/src/lib/assets/site-styles/business.webp +0 -0
  129. package/src/lib/assets/site-styles/coming-soon.webp +0 -0
  130. package/src/lib/assets/site-styles/education.webp +0 -0
  131. package/src/lib/assets/site-styles/events.webp +0 -0
  132. package/src/lib/assets/site-styles/fitness.webp +0 -0
  133. package/src/lib/assets/site-styles/landing.webp +0 -0
  134. package/src/lib/assets/site-styles/music.webp +0 -0
  135. package/src/lib/assets/site-styles/nonprofit.webp +0 -0
  136. package/src/lib/assets/site-styles/personal.webp +0 -0
  137. package/src/lib/assets/site-styles/photography.webp +0 -0
  138. package/src/lib/assets/site-styles/portfolio.webp +0 -0
  139. package/src/lib/assets/site-styles/professional.webp +0 -0
  140. package/src/lib/assets/site-styles/realestate.webp +0 -0
  141. package/src/lib/assets/site-styles/restaurant.webp +0 -0
  142. package/src/lib/assets/site-styles/store.webp +0 -0
  143. package/src/lib/assets/site-styles/studio.webp +0 -0
  144. package/src/lib/assets/site-styles/trades.webp +0 -0
  145. package/src/lib/assets/site-styles/wellness.webp +0 -0
  146. package/src/lib/assets/site-styles/yoga.webp +0 -0
  147. package/src/lib/site-import/site-import-review.d.ts +0 -40
  148. package/src/lib/site-import/site-import-review.js +0 -149
  149. package/src/lib/site-import/site-import-review.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aglyn/plugins-ai",
3
- "version": "1.0.0-beta.292",
3
+ "version": "1.0.0-beta.293",
4
4
  "license": "Apache-2.0",
5
5
  "homepage": "https://aglyn.com",
6
6
  "repository": {
@@ -25,22 +25,22 @@
25
25
  "./package.json": "./package.json"
26
26
  },
27
27
  "dependencies": {
28
- "@aglyn/aglyn": "1.0.0-beta.292",
29
- "@aglyn/shared-data-enums": "1.0.0-beta.292",
30
- "@aglyn/shared-data-mdi": "1.0.0-beta.292",
31
- "@aglyn/shared-data-types": "1.0.0-beta.292",
32
- "@aglyn/shared-ui-email-campaigns": "1.0.0-beta.292",
33
- "@aglyn/shared-ui-jsx": "1.0.0-beta.292",
34
- "@aglyn/shared-ui-snackstack": "1.0.0-beta.292",
35
- "@aglyn/shared-ui-theme": "1.0.0-beta.292",
36
- "@aglyn/shared-util-email": "1.0.0-beta.292",
37
- "@aglyn/shared-util-errors": "1.0.0-beta.292",
38
- "@aglyn/shared-util-http": "1.0.0-beta.292",
39
- "@aglyn/shared-util-timestamp": "1.0.0-beta.292",
40
- "@aglyn/shared-util-tools": "1.0.0-beta.292",
41
- "@aglyn/tenant-data-admin": "1.0.0-beta.292",
42
- "@aglyn/tenant-feature-instance": "1.0.0-beta.292",
43
- "@aglyn/tenant-runtime": "1.0.0-beta.292",
28
+ "@aglyn/aglyn": "1.0.0-beta.293",
29
+ "@aglyn/shared-data-enums": "1.0.0-beta.293",
30
+ "@aglyn/shared-data-mdi": "1.0.0-beta.293",
31
+ "@aglyn/shared-data-types": "1.0.0-beta.293",
32
+ "@aglyn/shared-ui-email-campaigns": "1.0.0-beta.293",
33
+ "@aglyn/shared-ui-jsx": "1.0.0-beta.293",
34
+ "@aglyn/shared-ui-snackstack": "1.0.0-beta.293",
35
+ "@aglyn/shared-ui-theme": "1.0.0-beta.293",
36
+ "@aglyn/shared-util-email": "1.0.0-beta.293",
37
+ "@aglyn/shared-util-errors": "1.0.0-beta.293",
38
+ "@aglyn/shared-util-http": "1.0.0-beta.293",
39
+ "@aglyn/shared-util-timestamp": "1.0.0-beta.293",
40
+ "@aglyn/shared-util-tools": "1.0.0-beta.293",
41
+ "@aglyn/tenant-data-admin": "1.0.0-beta.293",
42
+ "@aglyn/tenant-feature-instance": "1.0.0-beta.293",
43
+ "@aglyn/tenant-runtime": "1.0.0-beta.293",
44
44
  "@swc/helpers": "0.5.23"
45
45
  },
46
46
  "peerDependencies": {
@@ -330,7 +330,7 @@ function Frame({ siteName, heading, lede, children }) {
330
330
  /*#__PURE__*/ _jsx(Typography, {
331
331
  variant: "body2",
332
332
  color: "text.secondary",
333
- children: `${start.quote}, from your AI credits. Every page is a draft until you publish it.`
333
+ children: `${start.quote}, from your AI credits. Its pages land in your site’s preview, or as drafts where the site is not in preview.`
334
334
  }),
335
335
  /*#__PURE__*/ _jsx(HelpTip, _extends({}, AI_SITE_IMPORT_HELP.waves, {
336
336
  ariaLabel: "How waves work"
@@ -374,7 +374,7 @@ function Frame({ siteName, heading, lede, children }) {
374
374
  children: state.waves.map((wave)=>/*#__PURE__*/ _jsx(Typography, {
375
375
  component: "li",
376
376
  variant: "body2",
377
- children: `${wave.label}: ${wave.slots.length} ${wave.slots.length === 1 ? 'page' : 'pages'}${wave.frame ? ', with your header and footer' : ''}${wave.status === 'done' || wave.status === 'review' ? ' (in)' : wave.status === 'running' ? ' (running)' : ''}`
377
+ children: `${wave.label}: ${wave.slots.length} ${wave.slots.length === 1 ? 'page' : 'pages'}${wave.frame ? ', with your header and footer' : ''}${wave.status === 'done' || wave.status === 'review' ? ' (in)' : wave.status === 'running' ? ' (running)' : wave.status === 'stopped' ? wave.startedAt ? ' (stopped)' : ' (not started)' : ''}`
378
378
  }, wave.index))
379
379
  })
380
380
  })
@@ -796,7 +796,7 @@ function Frame({ siteName, heading, lede, children }) {
796
796
  children: [
797
797
  /*#__PURE__*/ _jsx(Alert, {
798
798
  severity: "info",
799
- children: (_job_error = job.error) != null ? _job_error : job.status === 'canceled' ? 'Nothing more is brought in. The pages already in stay as drafts.' : 'It could not go on. The pages already in stay as drafts.'
799
+ children: (_job_error = job.error) != null ? _job_error : job.status === 'canceled' ? 'Nothing more is brought in. The pages already in stay where they are: in your site’s preview, or as drafts.' : 'It could not go on. The pages already in stay where they are: in your site’s preview, or as drafts.'
800
800
  }),
801
801
  pagesHref ? /*#__PURE__*/ _jsx(Box, {
802
802
  children: /*#__PURE__*/ _jsx(Button, {
@@ -805,7 +805,8 @@ function Frame({ siteName, heading, lede, children }) {
805
805
  href: pagesHref,
806
806
  children: 'Open your draft pages'
807
807
  })
808
- }) : null
808
+ }) : null,
809
+ waves
809
810
  ]
810
811
  });
811
812
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/components/ai-site-import-job.component.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'use client'\n\nimport { PageHeaderRecord } from '@aglyn/aglyn/app-utils/page-header-record-context'\nimport { buildRoute, Route } from '@aglyn/aglyn/app-utils/console-routes'\nimport {\n mdiAlertCircle,\n mdiCheckCircle,\n mdiChevronDown,\n mdiClockOutline,\n mdiMinusCircleOutline,\n mdiOpenInNew,\n} from '@aglyn/shared-data-mdi'\nimport { AppLink, HelpTip, MdiIcon } from '@aglyn/shared-ui-jsx'\nimport type { MaybeTokenSource } from '@aglyn/shared-util-http/authorized-token'\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Alert,\n Box,\n Button,\n Card,\n CircularProgress,\n Container,\n LinearProgress,\n Stack,\n Typography,\n} from '@mui/material'\nimport { useCallback, useState, type ReactNode } from 'react'\nimport type { AiJobSummary } from '../model/ai-jobs.types'\nimport { aiSiteImportReviewWave, aiSiteImportRunningWave, type AiSiteImportWave } from '../model/ai-site-import'\nimport {\n aiSiteImportFoundText,\n aiSiteImportHeldCopy,\n aiSiteImportLeftOutLines,\n aiSiteImportPhaseOf,\n aiSiteImportPlanText,\n aiSiteImportStartAction,\n aiSiteImportStartAllAction,\n aiSiteImportVerdictNote,\n aiSiteImportWaveRows,\n aiSiteImportWaveSpent,\n type AiSiteImportClaim,\n type AiSiteImportRowState,\n} from '../model/ai-site-import-view'\nimport { AiJobCancelButton } from './ai-job-cancel.component'\nimport { aiCreditsBillingHref, aiJobOutputHref } from './ai-job-links'\nimport { AI_SITE_IMPORT_HELP } from './ai-site-import-start.component'\nimport { AiSiteOwnershipProof, postAiSiteOwnership } from './ai-site-ownership-proof.component'\n\nconst ROW_ICON: Readonly<Record<Exclude<AiSiteImportRowState, 'active'>, { path: string; color: string; label: string }>> = {\n done: { path: mdiCheckCircle.path, color: 'success.main', label: 'In' },\n waiting: { path: mdiClockOutline.path, color: 'text.disabled', label: 'Waiting' },\n failed: { path: mdiAlertCircle.path, color: 'error.main', label: 'Could not be brought in' },\n skipped: { path: mdiMinusCircleOutline.path, color: 'text.disabled', label: 'Left out' },\n}\n\nfunction RowIcon({ state }: { state: AiSiteImportRowState }) {\n if (state === 'active') return <CircularProgress size={20} aria-label=\"In progress\" />\n const icon = ROW_ICON[state]\n return (\n <Box component=\"span\" role=\"img\" aria-label={icon.label} sx={{ color: icon.color, display: 'inline-flex', fontSize: (theme) => theme.spacing(2.5) }}>\n <MdiIcon path={icon.path} aria-hidden />\n </Box>\n )\n}\n\n/** One wave's pages: where each was, where it is now, how it went, and its draft to open. */\nfunction WaveRows({ job, wave, orgSlug }: { job: AiJobSummary; wave: AiSiteImportWave; orgSlug: string }) {\n const rows = aiSiteImportWaveRows(job, wave)\n return (\n <Box component=\"ol\" aria-label={wave.label} sx={{ listStyle: 'none', m: 0, p: { xs: 2, sm: 3 } }}>\n <Stack spacing={2}>\n {rows.map((row) => {\n const output = row.outputId ? job.outputs.find((entry) => entry.id === row.outputId) : undefined\n const href = output ? aiJobOutputHref(output, orgSlug) : null\n return (\n <Stack component=\"li\" key={row.slot} direction=\"row\" spacing={2} sx={{ alignItems: 'flex-start' }}>\n <Box sx={{ width: (theme) => theme.spacing(3), display: 'flex', justifyContent: 'center' }}>\n <RowIcon state={row.state} />\n </Box>\n <Box sx={{ flex: 1, minWidth: 0 }}>\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'baseline', justifyContent: 'space-between' }}>\n <Typography variant=\"body1\" color={row.state === 'waiting' || row.state === 'skipped' ? 'text.secondary' : 'text.primary'}>\n {row.title}\n </Typography>\n {href && row.state === 'done' ? (\n <Button size=\"small\" component={AppLink} href={href}>\n {'Open draft'}\n </Button>\n ) : null}\n </Stack>\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'baseline', flexWrap: 'wrap' }}>\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ overflowWrap: 'anywhere' }}>\n {`${row.from} → ${row.to}`}\n </Typography>\n <Button\n size=\"small\"\n component=\"a\"\n href={row.oldPage}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n endIcon={<MdiIcon path={mdiOpenInNew.path} aria-hidden />}\n aria-label={`Old page: ${row.from}, opens in a new tab`}\n sx={{ minWidth: 0, py: 0 }}\n >\n {'Old page'}\n </Button>\n </Stack>\n {row.build || row.words ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {[row.build, row.words].filter(Boolean).join(' · ')}\n </Typography>\n ) : null}\n {row.photos ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {row.photos}\n </Typography>\n ) : null}\n {row.note && row.state !== 'done' ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {row.note}\n </Typography>\n ) : null}\n </Box>\n </Stack>\n )\n })}\n </Stack>\n </Box>\n )\n}\n\nfunction Frame({ siteName, heading, lede, children }: { siteName?: string; heading: string; lede?: string; children?: ReactNode }) {\n return (\n <Container maxWidth=\"sm\" sx={{ py: { xs: 3, sm: 5 }, px: { xs: 2, sm: 3 } }}>\n <PageHeaderRecord title={heading} />\n <Stack spacing={4}>\n <Stack spacing={1}>\n {siteName ? (\n <Typography variant=\"overline\" color=\"text.secondary\">\n {siteName}\n </Typography>\n ) : null}\n <Typography variant=\"h4\" component=\"h1\">\n {heading}\n </Typography>\n {lede ? (\n <Typography variant=\"body1\" color=\"text.secondary\">\n {lede}\n </Typography>\n ) : null}\n </Stack>\n {children}\n </Stack>\n </Container>\n )\n}\n\nexport interface AiSiteImportJobProps {\n job: AiJobSummary\n orgId: string | null\n orgSlug: string\n /** The site's subdomain, which its Pages list is addressed by. */\n host: string | null\n siteName?: string\n user: MaybeTokenSource\n busy: boolean\n notice: string | null\n /** Starts the next wave, or reads the site again: the resume door. */\n onResume: () => void\n /**\n * Starts every remaining wave with no review between them (AGL-4083). The\n * button is drawn only where the page can start them this way.\n */\n onStartAll?: () => void\n onJob: (job: AiJobSummary) => void\n}\n\n/**\n * \"Bring my site\" (AGL-3976), on the import job's own page: the site read\n * and its waves planned with each one's quote, a wave running page by page,\n * a wave in for its review with its drafts to open, and the next wave's\n * button — the only way the next one starts. A wave held for a new proof, the\n * day's limit or a site that could not be read says so and offers the way on.\n */\nexport function AiSiteImportJob({ job, orgId, orgSlug, host, siteName, user, busy, notice, onResume, onStartAll, onJob }: AiSiteImportJobProps) {\n const phase = aiSiteImportPhaseOf(job)\n const state = job.siteImport ?? null\n const start = aiSiteImportStartAction(job)\n const startAll = onStartAll ? aiSiteImportStartAllAction(job) : null\n const held = aiSiteImportHeldCopy(job)\n const pagesHref = host && orgSlug ? buildRoute(Route.HOST_SCREENS, { orgSlug, host }) : null\n const [claim, setClaim] = useState<AiSiteImportClaim | null>(null)\n const [claimNotice, setClaimNotice] = useState<string | null>(null)\n const verifyAgain = useCallback(async () => {\n if (!orgId || !state) return\n setClaimNotice(null)\n const answer = await postAiSiteOwnership(user, { orgId, action: 'claim', domain: state.domain })\n if (answer.claim) setClaim(answer.claim)\n else setClaimNotice(answer.message)\n }, [orgId, state, user])\n\n const cancel = (\n <Box>\n <AiJobCancelButton job={job} user={user} orgId={orgId} onJob={onJob} variant=\"text\" size=\"small\" />\n </Box>\n )\n const startButton = start ? (\n <Stack spacing={1}>\n <Stack direction={{ xs: 'column', sm: 'row' }} spacing={1.5} sx={{ alignItems: { sm: 'center' } }}>\n <Box>\n <Button variant=\"contained\" size=\"large\" disabled={busy} onClick={onResume}>\n {busy ? 'Starting…' : start.label}\n </Button>\n </Box>\n {startAll && onStartAll ? (\n <Box>\n <Button variant=\"outlined\" size=\"large\" disabled={busy} onClick={onStartAll}>\n {startAll.label}\n </Button>\n </Box>\n ) : null}\n </Stack>\n <Stack direction=\"row\" spacing={0.5} sx={{ alignItems: 'center' }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {`${start.quote}, from your AI credits. Every page is a draft until you publish it.`}\n </Typography>\n <HelpTip {...AI_SITE_IMPORT_HELP.waves} ariaLabel=\"How waves work\" />\n </Stack>\n {startAll && onStartAll ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {`${startAll.quote} for every remaining wave (${startAll.waves}), one after another with no review between them. You review the last one.`}\n </Typography>\n ) : null}\n </Stack>\n ) : null\n const waves = state ? (\n <Accordion variant=\"outlined\" disableGutters sx={{ borderRadius: 2, '&::before': { display: 'none' } }}>\n <AccordionSummary expandIcon={<MdiIcon path={mdiChevronDown.path} />}>\n <Typography variant=\"subtitle1\">{`Every wave (${state.waves.length})`}</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Stack component=\"ol\" spacing={1} sx={{ m: 0, pl: 2.5 }}>\n {state.waves.map((wave) => (\n <Typography component=\"li\" variant=\"body2\" key={wave.index}>\n {`${wave.label}: ${wave.slots.length} ${wave.slots.length === 1 ? 'page' : 'pages'}${wave.frame ? ', with your header and footer' : ''}${\n wave.status === 'done' || wave.status === 'review' ? ' (in)' : wave.status === 'running' ? ' (running)' : ''\n }`}\n </Typography>\n ))}\n </Stack>\n </AccordionDetails>\n </Accordion>\n ) : null\n const leftOut = state ? aiSiteImportLeftOutLines(state) : []\n const leftOutCard = leftOut.length ? (\n <Accordion variant=\"outlined\" disableGutters sx={{ borderRadius: 2, '&::before': { display: 'none' } }}>\n <AccordionSummary expandIcon={<MdiIcon path={mdiChevronDown.path} />}>\n <Typography variant=\"subtitle1\">{`Not brought in (${leftOut.reduce((total, line) => total + line.count, 0)})`}</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Stack spacing={1.5}>\n {leftOut.map((line) => (\n <Box key={line.reason}>\n <Typography variant=\"body2\">{`${line.count} · ${line.text}`}</Typography>\n {line.paths.length ? (\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ overflowWrap: 'anywhere' }}>\n {line.paths.slice(0, 8).join(', ')}\n {line.paths.length > 8 || line.count > line.paths.length ? ', …' : ''}\n </Typography>\n ) : null}\n {line.reason === 'plan-limit' && orgSlug ? (\n <Button size=\"small\" component={AppLink} href={aiCreditsBillingHref(orgSlug)} sx={{ mt: 0.5 }}>\n {'See plans'}\n </Button>\n ) : null}\n </Box>\n ))}\n </Stack>\n </AccordionDetails>\n </Accordion>\n ) : null\n\n if (phase === 'reading') {\n return (\n <Frame siteName={siteName} heading=\"Reading your site\" lede=\"AglynBot reads robots.txt first, then your sitemap and your pages. Nothing is built yet, and reading uses no AI credits.\">\n <Card variant=\"outlined\" sx={{ borderRadius: 2 }}>\n <LinearProgress aria-label=\"Reading your site\" />\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ p: { xs: 2, sm: 3 } }}>\n {'This takes a minute or two. You can leave this page; we tell you when your site is read.'}\n </Typography>\n </Card>\n {cancel}\n </Frame>\n )\n }\n\n if (phase === 'ready' && state) {\n return (\n <Frame siteName={siteName} heading=\"Your site is read\" lede={job.review?.message ?? undefined}>\n {notice && <Alert severity=\"warning\">{notice}</Alert>}\n {aiSiteImportVerdictNote(state) ? <Alert severity=\"warning\">{aiSiteImportVerdictNote(state)}</Alert> : null}\n <Stack spacing={1}>\n <Typography variant=\"body1\">{aiSiteImportFoundText(state)}</Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {aiSiteImportPlanText(state)}\n </Typography>\n </Stack>\n {start ? (\n <Card variant=\"outlined\" sx={{ borderRadius: 2 }}>\n <Typography variant=\"subtitle1\" sx={{ px: { xs: 2, sm: 3 }, pt: { xs: 2, sm: 3 } }}>\n {`First: ${start.wave.label}`}\n </Typography>\n <WaveRows job={job} wave={start.wave} orgSlug={orgSlug} />\n </Card>\n ) : null}\n {startButton}\n {waves}\n {leftOutCard}\n {cancel}\n </Frame>\n )\n }\n\n if ((phase === 'running' || phase === 'starting') && state) {\n const wave = aiSiteImportRunningWave(state) ?? start?.wave ?? null\n const rows = wave ? aiSiteImportWaveRows(job, wave) : []\n const done = rows.filter((row) => row.state !== 'waiting' && row.state !== 'active').length\n return (\n <Frame\n siteName={siteName}\n heading={wave ? `Bringing in ${wave.label}` : 'Bringing in your site'}\n lede=\"Each page is rewritten into your new site’s design with its own words, facts and photos. You review the wave when it is in.\"\n >\n <Card variant=\"outlined\" sx={{ borderRadius: 2 }}>\n {rows.length ? (\n <LinearProgress variant=\"determinate\" value={Math.round((done / rows.length) * 100)} aria-label={`${done} of ${rows.length} in`} />\n ) : (\n <LinearProgress aria-label=\"Starting the wave\" />\n )}\n {wave ? <WaveRows job={job} wave={wave} orgSlug={orgSlug} /> : null}\n </Card>\n {waves}\n {cancel}\n </Frame>\n )\n }\n\n if (phase === 'review' && state) {\n const wave = aiSiteImportReviewWave(state) as AiSiteImportWave\n const spent = aiSiteImportWaveSpent(job, wave)\n return (\n <Frame siteName={siteName} heading={`${wave.label} is in`} lede=\"Open each page to review it. They are drafts: nothing is published until you publish it.\">\n {notice && <Alert severity=\"warning\">{notice}</Alert>}\n <Card variant=\"outlined\" sx={{ borderRadius: 2 }}>\n <WaveRows job={job} wave={wave} orgSlug={orgSlug} />\n </Card>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {`This wave used ${spent.toLocaleString('en-US')} AI ${spent === 1 ? 'credit' : 'credits'}.`}\n </Typography>\n {pagesHref ? (\n <Box>\n <Button variant=\"outlined\" component={AppLink} href={pagesHref}>\n {'Open your draft pages'}\n </Button>\n </Box>\n ) : null}\n {start ? (\n <Card variant=\"outlined\" sx={{ borderRadius: 2 }}>\n <Typography variant=\"subtitle1\" sx={{ px: { xs: 2, sm: 3 }, pt: { xs: 2, sm: 3 } }}>\n {`Next: ${start.wave.label}`}\n </Typography>\n <WaveRows job={job} wave={start.wave} orgSlug={orgSlug} />\n </Card>\n ) : null}\n {startButton}\n {waves}\n {leftOutCard}\n {cancel}\n </Frame>\n )\n }\n\n // The home page was turned away or could not be read (AGL-4083): nothing was\n // planned or spent, and Check again reads the site again, for free.\n if (phase === 'held' && held) {\n return (\n <Frame siteName={siteName} heading={held.heading}>\n {notice && <Alert severity=\"warning\">{notice}</Alert>}\n <Alert severity=\"warning\">{held.message}</Alert>\n <Stack direction=\"row\" spacing={0.5} sx={{ alignItems: 'center' }}>\n <Button variant=\"contained\" disabled={busy} onClick={onResume}>\n {busy ? 'Checking…' : held.action}\n </Button>\n <HelpTip {...AI_SITE_IMPORT_HELP.turnedAway} ariaLabel=\"How to let AglynBot in\" />\n </Stack>\n {leftOutCard}\n {cancel}\n </Frame>\n )\n }\n\n if (phase === 'held' || phase === 'paused') {\n const ownership = job.review?.reason === 'ownership'\n return (\n <Frame siteName={siteName} heading={ownership ? 'Verify your site again' : phase === 'paused' ? 'Your site import is paused' : 'Your site import is waiting'}>\n {notice && <Alert severity=\"warning\">{notice}</Alert>}\n <Alert severity=\"info\">{job.review?.message ?? job.error ?? 'It stopped for your decision.'}</Alert>\n {ownership && orgId ? (\n claim ? (\n <AiSiteOwnershipProof orgId={orgId} user={user} claim={claim} onClaim={setClaim} />\n ) : (\n <Box>\n <Button variant=\"outlined\" onClick={() => void verifyAgain()}>\n {'Verify again'}\n </Button>\n {claimNotice ? <Alert severity=\"warning\" sx={{ mt: 1 }}>{claimNotice}</Alert> : null}\n </Box>\n )\n ) : null}\n <Stack direction={{ xs: 'column', sm: 'row' }} spacing={2} sx={{ alignItems: { sm: 'center' } }}>\n <Button variant=\"contained\" disabled={busy || (ownership && !claim?.current)} onClick={onResume}>\n {busy ? 'Starting…' : phase === 'paused' ? 'Resume' : start ? `${start.label} again` : 'Read the site again'}\n </Button>\n {phase === 'paused' && orgSlug ? (\n <Button variant=\"outlined\" component={AppLink} href={aiCreditsBillingHref(orgSlug)}>\n {'Get more AI credits'}\n </Button>\n ) : null}\n </Stack>\n {waves}\n {cancel}\n </Frame>\n )\n }\n\n if (phase === 'done' && state) {\n const brought = (job.items ?? []).filter((row) => row.op === 'page' && (row.status === 'succeeded' || row.status === 'degraded')).length\n return (\n <Frame\n siteName={siteName}\n heading=\"Your site is in\"\n lede={`${brought} ${brought === 1 ? 'page was' : 'pages were'} brought in from ${state.domain}. They are drafts: review them, then publish them when you are ready.`}\n >\n {pagesHref ? (\n <Box>\n <Button variant=\"contained\" size=\"large\" component={AppLink} href={pagesHref}>\n {'Open your draft pages'}\n </Button>\n </Box>\n ) : null}\n {state.waves.map((wave) => (\n <Card key={wave.index} variant=\"outlined\" sx={{ borderRadius: 2 }}>\n <Typography variant=\"subtitle1\" sx={{ px: { xs: 2, sm: 3 }, pt: { xs: 2, sm: 3 } }}>\n {wave.label}\n </Typography>\n <WaveRows job={job} wave={wave} orgSlug={orgSlug} />\n </Card>\n ))}\n {leftOutCard}\n </Frame>\n )\n }\n\n return (\n <Frame siteName={siteName} heading={job.status === 'canceled' ? 'Your site import was stopped' : 'Your site import stopped'}>\n <Alert severity=\"info\">\n {job.error ??\n (job.status === 'canceled'\n ? 'Nothing more is brought in. The pages already in stay as drafts.'\n : 'It could not go on. The pages already in stay as drafts.')}\n </Alert>\n {pagesHref ? (\n <Box>\n <Button variant=\"outlined\" component={AppLink} href={pagesHref}>\n {'Open your draft pages'}\n </Button>\n </Box>\n ) : null}\n </Frame>\n )\n}\n\nexport default AiSiteImportJob\n"],"names":["PageHeaderRecord","buildRoute","Route","mdiAlertCircle","mdiCheckCircle","mdiChevronDown","mdiClockOutline","mdiMinusCircleOutline","mdiOpenInNew","AppLink","HelpTip","MdiIcon","Accordion","AccordionDetails","AccordionSummary","Alert","Box","Button","Card","CircularProgress","Container","LinearProgress","Stack","Typography","useCallback","useState","aiSiteImportReviewWave","aiSiteImportRunningWave","aiSiteImportFoundText","aiSiteImportHeldCopy","aiSiteImportLeftOutLines","aiSiteImportPhaseOf","aiSiteImportPlanText","aiSiteImportStartAction","aiSiteImportStartAllAction","aiSiteImportVerdictNote","aiSiteImportWaveRows","aiSiteImportWaveSpent","AiJobCancelButton","aiCreditsBillingHref","aiJobOutputHref","AI_SITE_IMPORT_HELP","AiSiteOwnershipProof","postAiSiteOwnership","ROW_ICON","done","path","color","label","waiting","failed","skipped","RowIcon","state","size","aria-label","icon","component","role","sx","display","fontSize","theme","spacing","aria-hidden","WaveRows","job","wave","orgSlug","rows","listStyle","m","p","xs","sm","map","row","output","outputId","outputs","find","entry","id","undefined","href","direction","alignItems","width","justifyContent","flex","minWidth","variant","title","flexWrap","overflowWrap","from","to","oldPage","target","rel","endIcon","py","build","words","filter","Boolean","join","photos","note","slot","Frame","siteName","heading","lede","children","maxWidth","px","AiSiteImportJob","orgId","host","user","busy","notice","onResume","onStartAll","onJob","phase","siteImport","start","startAll","held","pagesHref","HOST_SCREENS","claim","setClaim","claimNotice","setClaimNotice","verifyAgain","answer","action","domain","message","cancel","startButton","disabled","onClick","quote","waves","ariaLabel","disableGutters","borderRadius","expandIcon","length","pl","slots","frame","status","index","leftOut","leftOutCard","reduce","total","line","count","text","paths","slice","reason","mt","review","severity","pt","value","Math","round","spent","toLocaleString","turnedAway","ownership","error","onClaim","current","brought","items","op"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/components/ai-site-import-job.component.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'use client'\n\nimport { PageHeaderRecord } from '@aglyn/aglyn/app-utils/page-header-record-context'\nimport { buildRoute, Route } from '@aglyn/aglyn/app-utils/console-routes'\nimport {\n mdiAlertCircle,\n mdiCheckCircle,\n mdiChevronDown,\n mdiClockOutline,\n mdiMinusCircleOutline,\n mdiOpenInNew,\n} from '@aglyn/shared-data-mdi'\nimport { AppLink, HelpTip, MdiIcon } from '@aglyn/shared-ui-jsx'\nimport type { MaybeTokenSource } from '@aglyn/shared-util-http/authorized-token'\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Alert,\n Box,\n Button,\n Card,\n CircularProgress,\n Container,\n LinearProgress,\n Stack,\n Typography,\n} from '@mui/material'\nimport { useCallback, useState, type ReactNode } from 'react'\nimport type { AiJobSummary } from '../model/ai-jobs.types'\nimport { aiSiteImportReviewWave, aiSiteImportRunningWave, type AiSiteImportWave } from '../model/ai-site-import'\nimport {\n aiSiteImportFoundText,\n aiSiteImportHeldCopy,\n aiSiteImportLeftOutLines,\n aiSiteImportPhaseOf,\n aiSiteImportPlanText,\n aiSiteImportStartAction,\n aiSiteImportStartAllAction,\n aiSiteImportVerdictNote,\n aiSiteImportWaveRows,\n aiSiteImportWaveSpent,\n type AiSiteImportClaim,\n type AiSiteImportRowState,\n} from '../model/ai-site-import-view'\nimport { AiJobCancelButton } from './ai-job-cancel.component'\nimport { aiCreditsBillingHref, aiJobOutputHref } from './ai-job-links'\nimport { AI_SITE_IMPORT_HELP } from './ai-site-import-start.component'\nimport { AiSiteOwnershipProof, postAiSiteOwnership } from './ai-site-ownership-proof.component'\n\nconst ROW_ICON: Readonly<Record<Exclude<AiSiteImportRowState, 'active'>, { path: string; color: string; label: string }>> = {\n done: { path: mdiCheckCircle.path, color: 'success.main', label: 'In' },\n waiting: { path: mdiClockOutline.path, color: 'text.disabled', label: 'Waiting' },\n failed: { path: mdiAlertCircle.path, color: 'error.main', label: 'Could not be brought in' },\n skipped: { path: mdiMinusCircleOutline.path, color: 'text.disabled', label: 'Left out' },\n}\n\nfunction RowIcon({ state }: { state: AiSiteImportRowState }) {\n if (state === 'active') return <CircularProgress size={20} aria-label=\"In progress\" />\n const icon = ROW_ICON[state]\n return (\n <Box component=\"span\" role=\"img\" aria-label={icon.label} sx={{ color: icon.color, display: 'inline-flex', fontSize: (theme) => theme.spacing(2.5) }}>\n <MdiIcon path={icon.path} aria-hidden />\n </Box>\n )\n}\n\n/** One wave's pages: where each was, where it is now, how it went, and its draft to open. */\nfunction WaveRows({ job, wave, orgSlug }: { job: AiJobSummary; wave: AiSiteImportWave; orgSlug: string }) {\n const rows = aiSiteImportWaveRows(job, wave)\n return (\n <Box component=\"ol\" aria-label={wave.label} sx={{ listStyle: 'none', m: 0, p: { xs: 2, sm: 3 } }}>\n <Stack spacing={2}>\n {rows.map((row) => {\n const output = row.outputId ? job.outputs.find((entry) => entry.id === row.outputId) : undefined\n const href = output ? aiJobOutputHref(output, orgSlug) : null\n return (\n <Stack component=\"li\" key={row.slot} direction=\"row\" spacing={2} sx={{ alignItems: 'flex-start' }}>\n <Box sx={{ width: (theme) => theme.spacing(3), display: 'flex', justifyContent: 'center' }}>\n <RowIcon state={row.state} />\n </Box>\n <Box sx={{ flex: 1, minWidth: 0 }}>\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'baseline', justifyContent: 'space-between' }}>\n <Typography variant=\"body1\" color={row.state === 'waiting' || row.state === 'skipped' ? 'text.secondary' : 'text.primary'}>\n {row.title}\n </Typography>\n {href && row.state === 'done' ? (\n <Button size=\"small\" component={AppLink} href={href}>\n {'Open draft'}\n </Button>\n ) : null}\n </Stack>\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'baseline', flexWrap: 'wrap' }}>\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ overflowWrap: 'anywhere' }}>\n {`${row.from} → ${row.to}`}\n </Typography>\n <Button\n size=\"small\"\n component=\"a\"\n href={row.oldPage}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n endIcon={<MdiIcon path={mdiOpenInNew.path} aria-hidden />}\n aria-label={`Old page: ${row.from}, opens in a new tab`}\n sx={{ minWidth: 0, py: 0 }}\n >\n {'Old page'}\n </Button>\n </Stack>\n {row.build || row.words ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {[row.build, row.words].filter(Boolean).join(' · ')}\n </Typography>\n ) : null}\n {row.photos ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {row.photos}\n </Typography>\n ) : null}\n {row.note && row.state !== 'done' ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {row.note}\n </Typography>\n ) : null}\n </Box>\n </Stack>\n )\n })}\n </Stack>\n </Box>\n )\n}\n\nfunction Frame({ siteName, heading, lede, children }: { siteName?: string; heading: string; lede?: string; children?: ReactNode }) {\n return (\n <Container maxWidth=\"sm\" sx={{ py: { xs: 3, sm: 5 }, px: { xs: 2, sm: 3 } }}>\n <PageHeaderRecord title={heading} />\n <Stack spacing={4}>\n <Stack spacing={1}>\n {siteName ? (\n <Typography variant=\"overline\" color=\"text.secondary\">\n {siteName}\n </Typography>\n ) : null}\n <Typography variant=\"h4\" component=\"h1\">\n {heading}\n </Typography>\n {lede ? (\n <Typography variant=\"body1\" color=\"text.secondary\">\n {lede}\n </Typography>\n ) : null}\n </Stack>\n {children}\n </Stack>\n </Container>\n )\n}\n\nexport interface AiSiteImportJobProps {\n job: AiJobSummary\n orgId: string | null\n orgSlug: string\n /** The site's subdomain, which its Pages list is addressed by. */\n host: string | null\n siteName?: string\n user: MaybeTokenSource\n busy: boolean\n notice: string | null\n /** Starts the next wave, or reads the site again: the resume door. */\n onResume: () => void\n /**\n * Starts every remaining wave with no review between them (AGL-4083). The\n * button is drawn only where the page can start them this way.\n */\n onStartAll?: () => void\n onJob: (job: AiJobSummary) => void\n}\n\n/**\n * \"Bring my site\" (AGL-3976), on the import job's own page: the site read\n * and its waves planned with each one's quote, a wave running page by page,\n * a wave in for its review with its drafts to open, and the next wave's\n * button — the only way the next one starts. A wave held for a new proof, the\n * day's limit or a site that could not be read says so and offers the way on.\n */\nexport function AiSiteImportJob({ job, orgId, orgSlug, host, siteName, user, busy, notice, onResume, onStartAll, onJob }: AiSiteImportJobProps) {\n const phase = aiSiteImportPhaseOf(job)\n const state = job.siteImport ?? null\n const start = aiSiteImportStartAction(job)\n const startAll = onStartAll ? aiSiteImportStartAllAction(job) : null\n const held = aiSiteImportHeldCopy(job)\n const pagesHref = host && orgSlug ? buildRoute(Route.HOST_SCREENS, { orgSlug, host }) : null\n const [claim, setClaim] = useState<AiSiteImportClaim | null>(null)\n const [claimNotice, setClaimNotice] = useState<string | null>(null)\n const verifyAgain = useCallback(async () => {\n if (!orgId || !state) return\n setClaimNotice(null)\n const answer = await postAiSiteOwnership(user, { orgId, action: 'claim', domain: state.domain })\n if (answer.claim) setClaim(answer.claim)\n else setClaimNotice(answer.message)\n }, [orgId, state, user])\n\n const cancel = (\n <Box>\n <AiJobCancelButton job={job} user={user} orgId={orgId} onJob={onJob} variant=\"text\" size=\"small\" />\n </Box>\n )\n const startButton = start ? (\n <Stack spacing={1}>\n <Stack direction={{ xs: 'column', sm: 'row' }} spacing={1.5} sx={{ alignItems: { sm: 'center' } }}>\n <Box>\n <Button variant=\"contained\" size=\"large\" disabled={busy} onClick={onResume}>\n {busy ? 'Starting…' : start.label}\n </Button>\n </Box>\n {startAll && onStartAll ? (\n <Box>\n <Button variant=\"outlined\" size=\"large\" disabled={busy} onClick={onStartAll}>\n {startAll.label}\n </Button>\n </Box>\n ) : null}\n </Stack>\n <Stack direction=\"row\" spacing={0.5} sx={{ alignItems: 'center' }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {`${start.quote}, from your AI credits. Its pages land in your site’s preview, or as drafts where the site is not in preview.`}\n </Typography>\n <HelpTip {...AI_SITE_IMPORT_HELP.waves} ariaLabel=\"How waves work\" />\n </Stack>\n {startAll && onStartAll ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {`${startAll.quote} for every remaining wave (${startAll.waves}), one after another with no review between them. You review the last one.`}\n </Typography>\n ) : null}\n </Stack>\n ) : null\n const waves = state ? (\n <Accordion variant=\"outlined\" disableGutters sx={{ borderRadius: 2, '&::before': { display: 'none' } }}>\n <AccordionSummary expandIcon={<MdiIcon path={mdiChevronDown.path} />}>\n <Typography variant=\"subtitle1\">{`Every wave (${state.waves.length})`}</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Stack component=\"ol\" spacing={1} sx={{ m: 0, pl: 2.5 }}>\n {state.waves.map((wave) => (\n <Typography component=\"li\" variant=\"body2\" key={wave.index}>\n {`${wave.label}: ${wave.slots.length} ${wave.slots.length === 1 ? 'page' : 'pages'}${wave.frame ? ', with your header and footer' : ''}${\n wave.status === 'done' || wave.status === 'review'\n ? ' (in)'\n : wave.status === 'running'\n ? ' (running)'\n : wave.status === 'stopped'\n ? wave.startedAt\n ? ' (stopped)'\n : ' (not started)'\n : ''\n }`}\n </Typography>\n ))}\n </Stack>\n </AccordionDetails>\n </Accordion>\n ) : null\n const leftOut = state ? aiSiteImportLeftOutLines(state) : []\n const leftOutCard = leftOut.length ? (\n <Accordion variant=\"outlined\" disableGutters sx={{ borderRadius: 2, '&::before': { display: 'none' } }}>\n <AccordionSummary expandIcon={<MdiIcon path={mdiChevronDown.path} />}>\n <Typography variant=\"subtitle1\">{`Not brought in (${leftOut.reduce((total, line) => total + line.count, 0)})`}</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Stack spacing={1.5}>\n {leftOut.map((line) => (\n <Box key={line.reason}>\n <Typography variant=\"body2\">{`${line.count} · ${line.text}`}</Typography>\n {line.paths.length ? (\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ overflowWrap: 'anywhere' }}>\n {line.paths.slice(0, 8).join(', ')}\n {line.paths.length > 8 || line.count > line.paths.length ? ', …' : ''}\n </Typography>\n ) : null}\n {line.reason === 'plan-limit' && orgSlug ? (\n <Button size=\"small\" component={AppLink} href={aiCreditsBillingHref(orgSlug)} sx={{ mt: 0.5 }}>\n {'See plans'}\n </Button>\n ) : null}\n </Box>\n ))}\n </Stack>\n </AccordionDetails>\n </Accordion>\n ) : null\n\n if (phase === 'reading') {\n return (\n <Frame siteName={siteName} heading=\"Reading your site\" lede=\"AglynBot reads robots.txt first, then your sitemap and your pages. Nothing is built yet, and reading uses no AI credits.\">\n <Card variant=\"outlined\" sx={{ borderRadius: 2 }}>\n <LinearProgress aria-label=\"Reading your site\" />\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ p: { xs: 2, sm: 3 } }}>\n {'This takes a minute or two. You can leave this page; we tell you when your site is read.'}\n </Typography>\n </Card>\n {cancel}\n </Frame>\n )\n }\n\n if (phase === 'ready' && state) {\n return (\n <Frame siteName={siteName} heading=\"Your site is read\" lede={job.review?.message ?? undefined}>\n {notice && <Alert severity=\"warning\">{notice}</Alert>}\n {aiSiteImportVerdictNote(state) ? <Alert severity=\"warning\">{aiSiteImportVerdictNote(state)}</Alert> : null}\n <Stack spacing={1}>\n <Typography variant=\"body1\">{aiSiteImportFoundText(state)}</Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {aiSiteImportPlanText(state)}\n </Typography>\n </Stack>\n {start ? (\n <Card variant=\"outlined\" sx={{ borderRadius: 2 }}>\n <Typography variant=\"subtitle1\" sx={{ px: { xs: 2, sm: 3 }, pt: { xs: 2, sm: 3 } }}>\n {`First: ${start.wave.label}`}\n </Typography>\n <WaveRows job={job} wave={start.wave} orgSlug={orgSlug} />\n </Card>\n ) : null}\n {startButton}\n {waves}\n {leftOutCard}\n {cancel}\n </Frame>\n )\n }\n\n if ((phase === 'running' || phase === 'starting') && state) {\n const wave = aiSiteImportRunningWave(state) ?? start?.wave ?? null\n const rows = wave ? aiSiteImportWaveRows(job, wave) : []\n const done = rows.filter((row) => row.state !== 'waiting' && row.state !== 'active').length\n return (\n <Frame\n siteName={siteName}\n heading={wave ? `Bringing in ${wave.label}` : 'Bringing in your site'}\n lede=\"Each page is rewritten into your new site’s design with its own words, facts and photos. You review the wave when it is in.\"\n >\n <Card variant=\"outlined\" sx={{ borderRadius: 2 }}>\n {rows.length ? (\n <LinearProgress variant=\"determinate\" value={Math.round((done / rows.length) * 100)} aria-label={`${done} of ${rows.length} in`} />\n ) : (\n <LinearProgress aria-label=\"Starting the wave\" />\n )}\n {wave ? <WaveRows job={job} wave={wave} orgSlug={orgSlug} /> : null}\n </Card>\n {waves}\n {cancel}\n </Frame>\n )\n }\n\n if (phase === 'review' && state) {\n const wave = aiSiteImportReviewWave(state) as AiSiteImportWave\n const spent = aiSiteImportWaveSpent(job, wave)\n return (\n <Frame siteName={siteName} heading={`${wave.label} is in`} lede=\"Open each page to review it. They are drafts: nothing is published until you publish it.\">\n {notice && <Alert severity=\"warning\">{notice}</Alert>}\n <Card variant=\"outlined\" sx={{ borderRadius: 2 }}>\n <WaveRows job={job} wave={wave} orgSlug={orgSlug} />\n </Card>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {`This wave used ${spent.toLocaleString('en-US')} AI ${spent === 1 ? 'credit' : 'credits'}.`}\n </Typography>\n {pagesHref ? (\n <Box>\n <Button variant=\"outlined\" component={AppLink} href={pagesHref}>\n {'Open your draft pages'}\n </Button>\n </Box>\n ) : null}\n {start ? (\n <Card variant=\"outlined\" sx={{ borderRadius: 2 }}>\n <Typography variant=\"subtitle1\" sx={{ px: { xs: 2, sm: 3 }, pt: { xs: 2, sm: 3 } }}>\n {`Next: ${start.wave.label}`}\n </Typography>\n <WaveRows job={job} wave={start.wave} orgSlug={orgSlug} />\n </Card>\n ) : null}\n {startButton}\n {waves}\n {leftOutCard}\n {cancel}\n </Frame>\n )\n }\n\n // The home page was turned away or could not be read (AGL-4083): nothing was\n // planned or spent, and Check again reads the site again, for free.\n if (phase === 'held' && held) {\n return (\n <Frame siteName={siteName} heading={held.heading}>\n {notice && <Alert severity=\"warning\">{notice}</Alert>}\n <Alert severity=\"warning\">{held.message}</Alert>\n <Stack direction=\"row\" spacing={0.5} sx={{ alignItems: 'center' }}>\n <Button variant=\"contained\" disabled={busy} onClick={onResume}>\n {busy ? 'Checking…' : held.action}\n </Button>\n <HelpTip {...AI_SITE_IMPORT_HELP.turnedAway} ariaLabel=\"How to let AglynBot in\" />\n </Stack>\n {leftOutCard}\n {cancel}\n </Frame>\n )\n }\n\n if (phase === 'held' || phase === 'paused') {\n const ownership = job.review?.reason === 'ownership'\n return (\n <Frame siteName={siteName} heading={ownership ? 'Verify your site again' : phase === 'paused' ? 'Your site import is paused' : 'Your site import is waiting'}>\n {notice && <Alert severity=\"warning\">{notice}</Alert>}\n <Alert severity=\"info\">{job.review?.message ?? job.error ?? 'It stopped for your decision.'}</Alert>\n {ownership && orgId ? (\n claim ? (\n <AiSiteOwnershipProof orgId={orgId} user={user} claim={claim} onClaim={setClaim} />\n ) : (\n <Box>\n <Button variant=\"outlined\" onClick={() => void verifyAgain()}>\n {'Verify again'}\n </Button>\n {claimNotice ? <Alert severity=\"warning\" sx={{ mt: 1 }}>{claimNotice}</Alert> : null}\n </Box>\n )\n ) : null}\n <Stack direction={{ xs: 'column', sm: 'row' }} spacing={2} sx={{ alignItems: { sm: 'center' } }}>\n <Button variant=\"contained\" disabled={busy || (ownership && !claim?.current)} onClick={onResume}>\n {busy ? 'Starting…' : phase === 'paused' ? 'Resume' : start ? `${start.label} again` : 'Read the site again'}\n </Button>\n {phase === 'paused' && orgSlug ? (\n <Button variant=\"outlined\" component={AppLink} href={aiCreditsBillingHref(orgSlug)}>\n {'Get more AI credits'}\n </Button>\n ) : null}\n </Stack>\n {waves}\n {cancel}\n </Frame>\n )\n }\n\n if (phase === 'done' && state) {\n const brought = (job.items ?? []).filter((row) => row.op === 'page' && (row.status === 'succeeded' || row.status === 'degraded')).length\n return (\n <Frame\n siteName={siteName}\n heading=\"Your site is in\"\n lede={`${brought} ${brought === 1 ? 'page was' : 'pages were'} brought in from ${state.domain}. They are drafts: review them, then publish them when you are ready.`}\n >\n {pagesHref ? (\n <Box>\n <Button variant=\"contained\" size=\"large\" component={AppLink} href={pagesHref}>\n {'Open your draft pages'}\n </Button>\n </Box>\n ) : null}\n {state.waves.map((wave) => (\n <Card key={wave.index} variant=\"outlined\" sx={{ borderRadius: 2 }}>\n <Typography variant=\"subtitle1\" sx={{ px: { xs: 2, sm: 3 }, pt: { xs: 2, sm: 3 } }}>\n {wave.label}\n </Typography>\n <WaveRows job={job} wave={wave} orgSlug={orgSlug} />\n </Card>\n ))}\n {leftOutCard}\n </Frame>\n )\n }\n\n return (\n <Frame siteName={siteName} heading={job.status === 'canceled' ? 'Your site import was stopped' : 'Your site import stopped'}>\n <Alert severity=\"info\">\n {job.error ??\n (job.status === 'canceled'\n ? 'Nothing more is brought in. The pages already in stay where they are: in your site’s preview, or as drafts.'\n : 'It could not go on. The pages already in stay where they are: in your site’s preview, or as drafts.')}\n </Alert>\n {pagesHref ? (\n <Box>\n <Button variant=\"outlined\" component={AppLink} href={pagesHref}>\n {'Open your draft pages'}\n </Button>\n </Box>\n ) : null}\n {/* Which waves came in and which stopped (AGL-4107). */}\n {waves}\n </Frame>\n )\n}\n\nexport default AiSiteImportJob\n"],"names":["PageHeaderRecord","buildRoute","Route","mdiAlertCircle","mdiCheckCircle","mdiChevronDown","mdiClockOutline","mdiMinusCircleOutline","mdiOpenInNew","AppLink","HelpTip","MdiIcon","Accordion","AccordionDetails","AccordionSummary","Alert","Box","Button","Card","CircularProgress","Container","LinearProgress","Stack","Typography","useCallback","useState","aiSiteImportReviewWave","aiSiteImportRunningWave","aiSiteImportFoundText","aiSiteImportHeldCopy","aiSiteImportLeftOutLines","aiSiteImportPhaseOf","aiSiteImportPlanText","aiSiteImportStartAction","aiSiteImportStartAllAction","aiSiteImportVerdictNote","aiSiteImportWaveRows","aiSiteImportWaveSpent","AiJobCancelButton","aiCreditsBillingHref","aiJobOutputHref","AI_SITE_IMPORT_HELP","AiSiteOwnershipProof","postAiSiteOwnership","ROW_ICON","done","path","color","label","waiting","failed","skipped","RowIcon","state","size","aria-label","icon","component","role","sx","display","fontSize","theme","spacing","aria-hidden","WaveRows","job","wave","orgSlug","rows","listStyle","m","p","xs","sm","map","row","output","outputId","outputs","find","entry","id","undefined","href","direction","alignItems","width","justifyContent","flex","minWidth","variant","title","flexWrap","overflowWrap","from","to","oldPage","target","rel","endIcon","py","build","words","filter","Boolean","join","photos","note","slot","Frame","siteName","heading","lede","children","maxWidth","px","AiSiteImportJob","orgId","host","user","busy","notice","onResume","onStartAll","onJob","phase","siteImport","start","startAll","held","pagesHref","HOST_SCREENS","claim","setClaim","claimNotice","setClaimNotice","verifyAgain","answer","action","domain","message","cancel","startButton","disabled","onClick","quote","waves","ariaLabel","disableGutters","borderRadius","expandIcon","length","pl","slots","frame","status","startedAt","index","leftOut","leftOutCard","reduce","total","line","count","text","paths","slice","reason","mt","review","severity","pt","value","Math","round","spent","toLocaleString","turnedAway","ownership","error","onClaim","current","brought","items","op"],"mappings":"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"}
@@ -16,7 +16,7 @@
16
16
  */ 'use client';
17
17
  import { _ as _extends } from "@swc/helpers/_/_extends";
18
18
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
19
- import { lockdownRefusalText, parseLockdownRefusal, PLATFORM_BRAND_NAME } from "@aglyn/aglyn";
19
+ import { lockdownRefusalText, parseLockdownRefusal } from "@aglyn/aglyn";
20
20
  import { pluginDocsHelp } from "@aglyn/aglyn/app-utils/docs-help";
21
21
  import { mdiWebSync } from "@aglyn/shared-data-mdi";
22
22
  import { HelpTip, MdiIcon } from "@aglyn/shared-ui-jsx";
@@ -293,12 +293,12 @@ import { AiSiteOwnershipProof, postAiSiteOwnership } from "./ai-site-ownership-p
293
293
  /*#__PURE__*/ _jsx(Typography, {
294
294
  component: "li",
295
295
  variant: "body2",
296
- children: `${PLATFORM_BRAND_NAME} AI rewrites each page into your new site’s design, with its words, facts and photos. You review each wave and start the next yourself.`
296
+ children: 'Each page keeps every word as you wrote it and is laid out as your page is: its sections, columns, cards, icons, pictures, tables and tabs, in your site’s own look. You review each wave and start the next yourself.'
297
297
  }),
298
298
  /*#__PURE__*/ _jsx(Typography, {
299
299
  component: "li",
300
300
  variant: "body2",
301
- children: 'Every page is a draft. Nothing is published until you publish it, and your current site is not changed.'
301
+ children: 'Each wave lands in your new site’s preview, where only you and your team can see it, until you make the site public. A site not in preview keeps its pages as drafts. Your current site is not changed.'
302
302
  })
303
303
  ]
304
304
  }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/components/ai-site-import-start.component.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'use client'\n\nimport { lockdownRefusalText, parseLockdownRefusal, PLATFORM_BRAND_NAME } from '@aglyn/aglyn'\nimport type { ConsolePendingSite } from '@aglyn/aglyn/plugin-manager/feature-plugins'\nimport { pluginDocsHelp } from '@aglyn/aglyn/app-utils/docs-help'\nimport { mdiWebSync } from '@aglyn/shared-data-mdi'\nimport { HelpTip, MdiIcon } from '@aglyn/shared-ui-jsx'\nimport { authorizedFetch, type MaybeTokenSource } from '@aglyn/shared-util-http/authorized-token'\nimport { Alert, Box, Button, Stack, TextField, Typography } from '@mui/material'\nimport { useRouter } from 'next/navigation'\nimport { useCallback, useRef, useState } from 'react'\nimport type { AiJobSummary } from '../model/ai-jobs.types'\nimport { AI_SITE_IMPORT_DOMAIN_INPUT, AI_SITE_IMPORT_KIND, AI_SITE_IMPORT_WAVE_PAGES } from '../model/ai-site-import'\nimport type { AiSiteImportClaim } from '../model/ai-site-import-view'\nimport { aiSiteBuildHref } from './ai-job-links'\nimport { publishAiJob } from './ai-jobs-store'\nimport { AiSiteOwnershipProof, postAiSiteOwnership } from './ai-site-ownership-proof.component'\n\n/** Each part of the flow links its own section of the Bring my site guide. */\nexport const AI_SITE_IMPORT_HELP = {\n address: pluginDocsHelp('aiImport', {\n anchor: '#your-current-website',\n excerpt: 'The address people type to reach your site today. You prove it is yours next, so only a site you own can be brought in.',\n }),\n prove: pluginDocsHelp('aiImport', {\n anchor: '#prove-it-is-yours',\n excerpt: 'Add a DNS record, add a tag to your home page, or get a code at an address at your domain. Any one is enough.',\n }),\n waves: pluginDocsHelp('aiImport', {\n anchor: '#waves',\n excerpt: 'Your main pages come in first, then each collection, such as blog posts, ten pages at a time. You review each wave and start the next yourself.',\n }),\n turnedAway: pluginDocsHelp('aiImport', {\n anchor: '#turned-away',\n excerpt: 'Allow AglynBot in your site’s bot protection or firewall settings, then choose Check again. Reading your site again uses no AI credits.',\n }),\n}\n\ntype Step = 'address' | 'prove' | 'read'\n\nexport interface AiSiteImportStartProps {\n orgId: string\n orgSlug: string | null\n hostId: string | null\n host: string | null\n user: MaybeTokenSource\n /** The site being created by \"Create site\", when it does not exist yet (AGL-3761). */\n pendingSite?: ConsolePendingSite\n /** Back to how the site starts. */\n onBack: () => void\n /** The dialog closes before the job's page opens. */\n leave?: () => void\n}\n\n/**\n * \"Bring my site\" (AGL-3976): the address of the site the person has now,\n * the proof that it is theirs, and what happens next — then the site is read\n * and its waves planned, nothing built, on the import job's own page.\n *\n * Nothing is created until \"Read my site\": the site in Create site is made\n * then, empty, and the import job is started on it. The job reads the site\n * and waits for the person to start its first wave, so even this costs no\n * AI credits.\n */\nexport function AiSiteImportStart({ orgId, orgSlug, hostId, host, user, pendingSite, onBack, leave }: AiSiteImportStartProps) {\n const router = useRouter()\n const userRef = useRef(user)\n userRef.current = user\n const [step, setStep] = useState<Step>('address')\n const [address, setAddress] = useState('')\n const [claim, setClaim] = useState<AiSiteImportClaim | null>(null)\n const [notice, setNotice] = useState<string | null>(null)\n const [busy, setBusy] = useState(false)\n // A site already verified skips the proof step, and Back skips it too.\n const [proved, setProved] = useState(false)\n\n const claimIt = useCallback(async () => {\n setBusy(true)\n setNotice(null)\n const answer = await postAiSiteOwnership(userRef.current, { orgId, action: 'claim', domain: address })\n setBusy(false)\n if (!answer.claim) {\n setNotice(answer.message ?? 'That address could not be used.')\n return\n }\n setClaim(answer.claim)\n setProved(!answer.claim.current)\n setStep(answer.claim.current ? 'read' : 'prove')\n }, [orgId, address])\n\n const read = useCallback(async () => {\n if (!claim?.current) return\n setBusy(true)\n setNotice(null)\n try {\n const requestJob = (siteId: string | null, check: boolean) =>\n authorizedFetch(userRef.current, '/api/ai/jobs', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n orgId,\n hostId: siteId,\n kind: AI_SITE_IMPORT_KIND,\n brief: `Bring in ${claim.domain}`,\n inputs: { [AI_SITE_IMPORT_DOMAIN_INPUT]: claim.domain },\n ...(check ? { check: true } : {}),\n }),\n })\n const refused = async (response: Response): Promise<Record<string, unknown> | null> => {\n const payload = (await response.json().catch(() => null)) as Record<string, unknown> | null\n if (response.ok) return payload ?? {}\n const locked = parseLockdownRefusal(response.status, payload)\n setNotice(locked ? lockdownRefusalText(locked) : String(payload?.['error'] ?? 'Your site could not be read. Try again.'))\n return null\n }\n let site = { hostId, host, orgSlug }\n if (!hostId && pendingSite) {\n // Asked before the site exists, so a refusal creates nothing (AGL-3859).\n if (!pendingSite.created && !(await refused(await requestJob(null, true)))) return\n // A site brought in starts in preview unless the person switched it\n // off (AGL-4086): its pages arrive here before anyone has looked.\n const made = await pendingSite.create({ start: 'import' })\n if ('error' in made) {\n setNotice(made.error)\n if (made.address) onBack()\n return\n }\n site = { hostId: made.hostId, host: made.host, orgSlug: made.orgSlug || orgSlug }\n }\n if (!site.hostId) return\n const payload = await refused(await requestJob(site.hostId, false))\n const job = (payload?.['job'] as AiJobSummary | undefined) ?? null\n if (!job) {\n if (payload) setNotice('Your site could not be read. Try again.')\n return\n }\n publishAiJob(job)\n const href = aiSiteBuildHref(site.orgSlug, site.host, job.id)\n if (href) {\n leave?.()\n router.push(href)\n }\n } catch {\n setNotice('Your site could not be read. Try again.')\n } finally {\n setBusy(false)\n }\n }, [claim, orgId, hostId, host, orgSlug, pendingSite, onBack, leave, router])\n\n const back = () => {\n setNotice(null)\n if (step === 'address') onBack()\n else if (step === 'prove') setStep('address')\n else setStep(proved ? 'prove' : 'address')\n }\n\n return (\n <Stack spacing={3} component=\"section\" aria-label=\"Bring my site\" data-start-area=\"import\">\n {notice && <Alert severity=\"info\">{notice}</Alert>}\n {step === 'address' && (\n <Stack spacing={2}>\n <Stack direction=\"row\" spacing={0.5} sx={{ alignItems: 'center' }}>\n <Typography variant=\"subtitle1\" component=\"h2\">\n {'Your current website'}\n </Typography>\n <HelpTip {...AI_SITE_IMPORT_HELP.address} />\n </Stack>\n <TextField\n label=\"Website address\"\n placeholder=\"example.com\"\n value={address}\n autoFocus\n onChange={(event) => setAddress(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' && address.trim() && !busy) {\n event.preventDefault()\n void claimIt()\n }\n }}\n helperText=\"The address people type to reach your site today. You prove it is yours next.\"\n />\n </Stack>\n )}\n {step === 'prove' && claim && (\n <Stack spacing={2}>\n <Stack direction=\"row\" spacing={0.5} sx={{ alignItems: 'center' }}>\n <Typography variant=\"subtitle1\" component=\"h2\">\n {'Prove it is yours'}\n </Typography>\n <HelpTip {...AI_SITE_IMPORT_HELP.prove} />\n </Stack>\n <AiSiteOwnershipProof orgId={orgId} user={user} claim={claim} onClaim={setClaim} />\n </Stack>\n )}\n {step === 'read' && claim && (\n <Stack spacing={2}>\n <Stack direction=\"row\" spacing={0.5} sx={{ alignItems: 'center' }}>\n <Typography variant=\"subtitle1\" component=\"h2\">\n {`Bring in ${claim.domain}`}\n </Typography>\n <HelpTip {...AI_SITE_IMPORT_HELP.waves} />\n </Stack>\n <Box component=\"ul\" sx={{ m: 0, pl: 3, '& li': { mb: 1 } }}>\n <Typography component=\"li\" variant=\"body2\">\n {`AglynBot reads your whole site, home page first, as many pages as your plan includes: your main pages first, then collections such as blog posts.`}\n </Typography>\n <Typography component=\"li\" variant=\"body2\">\n {`You see what was found, what could not be read and why, and what each wave of up to ${AI_SITE_IMPORT_WAVE_PAGES} pages costs before anything is built. Reading your site uses no AI credits.`}\n </Typography>\n <Typography component=\"li\" variant=\"body2\">\n {'If your home page cannot be read, nothing is planned and no AI credits are used. You are told why, and you check again once it can be.'}\n </Typography>\n <Typography component=\"li\" variant=\"body2\">\n {`${PLATFORM_BRAND_NAME} AI rewrites each page into your new site’s design, with its words, facts and photos. You review each wave and start the next yourself.`}\n </Typography>\n <Typography component=\"li\" variant=\"body2\">\n {'Every page is a draft. Nothing is published until you publish it, and your current site is not changed.'}\n </Typography>\n </Box>\n {/* Start in preview (AGL-4086), for a site this creates: on unless\n the person switches it off. */}\n {!hostId && pendingSite && !pendingSite.created\n ? pendingSite.previewControl?.('import')\n : null}\n </Stack>\n )}\n <Stack direction=\"row\" spacing={1} sx={{ justifyContent: 'space-between' }}>\n <Button onClick={back} disabled={busy}>\n {'Back'}\n </Button>\n {step === 'address' && (\n <Button variant=\"contained\" disabled={busy || !address.trim()} onClick={() => void claimIt()}>\n {busy ? 'Checking…' : 'Next'}\n </Button>\n )}\n {step === 'prove' && (\n <Button variant=\"contained\" disabled={!claim?.current} onClick={() => setStep('read')}>\n {'Next'}\n </Button>\n )}\n {step === 'read' && (\n <Button\n variant=\"contained\"\n size=\"large\"\n disabled={busy || !claim?.current}\n onClick={() => void read()}\n startIcon={<MdiIcon path={mdiWebSync.path} />}\n >\n {busy ? 'Starting…' : 'Read my site'}\n </Button>\n )}\n </Stack>\n </Stack>\n )\n}\n\nexport default AiSiteImportStart\n"],"names":["lockdownRefusalText","parseLockdownRefusal","PLATFORM_BRAND_NAME","pluginDocsHelp","mdiWebSync","HelpTip","MdiIcon","authorizedFetch","Alert","Box","Button","Stack","TextField","Typography","useRouter","useCallback","useRef","useState","AI_SITE_IMPORT_DOMAIN_INPUT","AI_SITE_IMPORT_KIND","AI_SITE_IMPORT_WAVE_PAGES","aiSiteBuildHref","publishAiJob","AiSiteOwnershipProof","postAiSiteOwnership","AI_SITE_IMPORT_HELP","address","anchor","excerpt","prove","waves","turnedAway","AiSiteImportStart","orgId","orgSlug","hostId","host","user","pendingSite","onBack","leave","router","userRef","current","step","setStep","setAddress","claim","setClaim","notice","setNotice","busy","setBusy","proved","setProved","claimIt","answer","action","domain","message","read","requestJob","siteId","check","method","headers","body","JSON","stringify","kind","brief","inputs","refused","response","payload","json","catch","ok","locked","status","String","site","created","made","create","start","error","job","href","id","push","back","spacing","component","aria-label","data-start-area","severity","direction","sx","alignItems","variant","label","placeholder","value","autoFocus","onChange","event","target","onKeyDown","key","trim","preventDefault","helperText","onClaim","m","pl","mb","previewControl","justifyContent","onClick","disabled","size","startIcon","path"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/components/ai-site-import-start.component.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'use client'\n\nimport { lockdownRefusalText, parseLockdownRefusal, PLATFORM_BRAND_NAME } from '@aglyn/aglyn'\nimport type { ConsolePendingSite } from '@aglyn/aglyn/plugin-manager/feature-plugins'\nimport { pluginDocsHelp } from '@aglyn/aglyn/app-utils/docs-help'\nimport { mdiWebSync } from '@aglyn/shared-data-mdi'\nimport { HelpTip, MdiIcon } from '@aglyn/shared-ui-jsx'\nimport { authorizedFetch, type MaybeTokenSource } from '@aglyn/shared-util-http/authorized-token'\nimport { Alert, Box, Button, Stack, TextField, Typography } from '@mui/material'\nimport { useRouter } from 'next/navigation'\nimport { useCallback, useRef, useState } from 'react'\nimport type { AiJobSummary } from '../model/ai-jobs.types'\nimport { AI_SITE_IMPORT_DOMAIN_INPUT, AI_SITE_IMPORT_KIND, AI_SITE_IMPORT_WAVE_PAGES } from '../model/ai-site-import'\nimport type { AiSiteImportClaim } from '../model/ai-site-import-view'\nimport { aiSiteBuildHref } from './ai-job-links'\nimport { publishAiJob } from './ai-jobs-store'\nimport { AiSiteOwnershipProof, postAiSiteOwnership } from './ai-site-ownership-proof.component'\n\n/** Each part of the flow links its own section of the Bring my site guide. */\nexport const AI_SITE_IMPORT_HELP = {\n address: pluginDocsHelp('aiImport', {\n anchor: '#your-current-website',\n excerpt: 'The address people type to reach your site today. You prove it is yours next, so only a site you own can be brought in.',\n }),\n prove: pluginDocsHelp('aiImport', {\n anchor: '#prove-it-is-yours',\n excerpt: 'Add a DNS record, add a tag to your home page, or get a code at an address at your domain. Any one is enough.',\n }),\n waves: pluginDocsHelp('aiImport', {\n anchor: '#waves',\n excerpt: 'Your main pages come in first, then each collection, such as blog posts, ten pages at a time. You review each wave and start the next yourself.',\n }),\n turnedAway: pluginDocsHelp('aiImport', {\n anchor: '#turned-away',\n excerpt: 'Allow AglynBot in your site’s bot protection or firewall settings, then choose Check again. Reading your site again uses no AI credits.',\n }),\n}\n\ntype Step = 'address' | 'prove' | 'read'\n\nexport interface AiSiteImportStartProps {\n orgId: string\n orgSlug: string | null\n hostId: string | null\n host: string | null\n user: MaybeTokenSource\n /** The site being created by \"Create site\", when it does not exist yet (AGL-3761). */\n pendingSite?: ConsolePendingSite\n /** Back to how the site starts. */\n onBack: () => void\n /** The dialog closes before the job's page opens. */\n leave?: () => void\n}\n\n/**\n * \"Bring my site\" (AGL-3976): the address of the site the person has now,\n * the proof that it is theirs, and what happens next — then the site is read\n * and its waves planned, nothing built, on the import job's own page.\n *\n * Nothing is created until \"Read my site\": the site in Create site is made\n * then, empty, and the import job is started on it. The job reads the site\n * and waits for the person to start its first wave, so even this costs no\n * AI credits.\n */\nexport function AiSiteImportStart({ orgId, orgSlug, hostId, host, user, pendingSite, onBack, leave }: AiSiteImportStartProps) {\n const router = useRouter()\n const userRef = useRef(user)\n userRef.current = user\n const [step, setStep] = useState<Step>('address')\n const [address, setAddress] = useState('')\n const [claim, setClaim] = useState<AiSiteImportClaim | null>(null)\n const [notice, setNotice] = useState<string | null>(null)\n const [busy, setBusy] = useState(false)\n // A site already verified skips the proof step, and Back skips it too.\n const [proved, setProved] = useState(false)\n\n const claimIt = useCallback(async () => {\n setBusy(true)\n setNotice(null)\n const answer = await postAiSiteOwnership(userRef.current, { orgId, action: 'claim', domain: address })\n setBusy(false)\n if (!answer.claim) {\n setNotice(answer.message ?? 'That address could not be used.')\n return\n }\n setClaim(answer.claim)\n setProved(!answer.claim.current)\n setStep(answer.claim.current ? 'read' : 'prove')\n }, [orgId, address])\n\n const read = useCallback(async () => {\n if (!claim?.current) return\n setBusy(true)\n setNotice(null)\n try {\n const requestJob = (siteId: string | null, check: boolean) =>\n authorizedFetch(userRef.current, '/api/ai/jobs', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n orgId,\n hostId: siteId,\n kind: AI_SITE_IMPORT_KIND,\n brief: `Bring in ${claim.domain}`,\n inputs: { [AI_SITE_IMPORT_DOMAIN_INPUT]: claim.domain },\n ...(check ? { check: true } : {}),\n }),\n })\n const refused = async (response: Response): Promise<Record<string, unknown> | null> => {\n const payload = (await response.json().catch(() => null)) as Record<string, unknown> | null\n if (response.ok) return payload ?? {}\n const locked = parseLockdownRefusal(response.status, payload)\n setNotice(locked ? lockdownRefusalText(locked) : String(payload?.['error'] ?? 'Your site could not be read. Try again.'))\n return null\n }\n let site = { hostId, host, orgSlug }\n if (!hostId && pendingSite) {\n // Asked before the site exists, so a refusal creates nothing (AGL-3859).\n if (!pendingSite.created && !(await refused(await requestJob(null, true)))) return\n // A site brought in starts in preview unless the person switched it\n // off (AGL-4086): its pages arrive here before anyone has looked.\n const made = await pendingSite.create({ start: 'import' })\n if ('error' in made) {\n setNotice(made.error)\n if (made.address) onBack()\n return\n }\n site = { hostId: made.hostId, host: made.host, orgSlug: made.orgSlug || orgSlug }\n }\n if (!site.hostId) return\n const payload = await refused(await requestJob(site.hostId, false))\n const job = (payload?.['job'] as AiJobSummary | undefined) ?? null\n if (!job) {\n if (payload) setNotice('Your site could not be read. Try again.')\n return\n }\n publishAiJob(job)\n const href = aiSiteBuildHref(site.orgSlug, site.host, job.id)\n if (href) {\n leave?.()\n router.push(href)\n }\n } catch {\n setNotice('Your site could not be read. Try again.')\n } finally {\n setBusy(false)\n }\n }, [claim, orgId, hostId, host, orgSlug, pendingSite, onBack, leave, router])\n\n const back = () => {\n setNotice(null)\n if (step === 'address') onBack()\n else if (step === 'prove') setStep('address')\n else setStep(proved ? 'prove' : 'address')\n }\n\n return (\n <Stack spacing={3} component=\"section\" aria-label=\"Bring my site\" data-start-area=\"import\">\n {notice && <Alert severity=\"info\">{notice}</Alert>}\n {step === 'address' && (\n <Stack spacing={2}>\n <Stack direction=\"row\" spacing={0.5} sx={{ alignItems: 'center' }}>\n <Typography variant=\"subtitle1\" component=\"h2\">\n {'Your current website'}\n </Typography>\n <HelpTip {...AI_SITE_IMPORT_HELP.address} />\n </Stack>\n <TextField\n label=\"Website address\"\n placeholder=\"example.com\"\n value={address}\n autoFocus\n onChange={(event) => setAddress(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' && address.trim() && !busy) {\n event.preventDefault()\n void claimIt()\n }\n }}\n helperText=\"The address people type to reach your site today. You prove it is yours next.\"\n />\n </Stack>\n )}\n {step === 'prove' && claim && (\n <Stack spacing={2}>\n <Stack direction=\"row\" spacing={0.5} sx={{ alignItems: 'center' }}>\n <Typography variant=\"subtitle1\" component=\"h2\">\n {'Prove it is yours'}\n </Typography>\n <HelpTip {...AI_SITE_IMPORT_HELP.prove} />\n </Stack>\n <AiSiteOwnershipProof orgId={orgId} user={user} claim={claim} onClaim={setClaim} />\n </Stack>\n )}\n {step === 'read' && claim && (\n <Stack spacing={2}>\n <Stack direction=\"row\" spacing={0.5} sx={{ alignItems: 'center' }}>\n <Typography variant=\"subtitle1\" component=\"h2\">\n {`Bring in ${claim.domain}`}\n </Typography>\n <HelpTip {...AI_SITE_IMPORT_HELP.waves} />\n </Stack>\n <Box component=\"ul\" sx={{ m: 0, pl: 3, '& li': { mb: 1 } }}>\n <Typography component=\"li\" variant=\"body2\">\n {`AglynBot reads your whole site, home page first, as many pages as your plan includes: your main pages first, then collections such as blog posts.`}\n </Typography>\n <Typography component=\"li\" variant=\"body2\">\n {`You see what was found, what could not be read and why, and what each wave of up to ${AI_SITE_IMPORT_WAVE_PAGES} pages costs before anything is built. Reading your site uses no AI credits.`}\n </Typography>\n <Typography component=\"li\" variant=\"body2\">\n {'If your home page cannot be read, nothing is planned and no AI credits are used. You are told why, and you check again once it can be.'}\n </Typography>\n <Typography component=\"li\" variant=\"body2\">\n {'Each page keeps every word as you wrote it and is laid out as your page is: its sections, columns, cards, icons, pictures, tables and tabs, in your site’s own look. You review each wave and start the next yourself.'}\n </Typography>\n <Typography component=\"li\" variant=\"body2\">\n {'Each wave lands in your new site’s preview, where only you and your team can see it, until you make the site public. A site not in preview keeps its pages as drafts. Your current site is not changed.'}\n </Typography>\n </Box>\n {/* Start in preview (AGL-4086), for a site this creates: on unless\n the person switches it off. */}\n {!hostId && pendingSite && !pendingSite.created\n ? pendingSite.previewControl?.('import')\n : null}\n </Stack>\n )}\n <Stack direction=\"row\" spacing={1} sx={{ justifyContent: 'space-between' }}>\n <Button onClick={back} disabled={busy}>\n {'Back'}\n </Button>\n {step === 'address' && (\n <Button variant=\"contained\" disabled={busy || !address.trim()} onClick={() => void claimIt()}>\n {busy ? 'Checking…' : 'Next'}\n </Button>\n )}\n {step === 'prove' && (\n <Button variant=\"contained\" disabled={!claim?.current} onClick={() => setStep('read')}>\n {'Next'}\n </Button>\n )}\n {step === 'read' && (\n <Button\n variant=\"contained\"\n size=\"large\"\n disabled={busy || !claim?.current}\n onClick={() => void read()}\n startIcon={<MdiIcon path={mdiWebSync.path} />}\n >\n {busy ? 'Starting…' : 'Read my site'}\n </Button>\n )}\n </Stack>\n </Stack>\n )\n}\n\nexport default AiSiteImportStart\n"],"names":["lockdownRefusalText","parseLockdownRefusal","pluginDocsHelp","mdiWebSync","HelpTip","MdiIcon","authorizedFetch","Alert","Box","Button","Stack","TextField","Typography","useRouter","useCallback","useRef","useState","AI_SITE_IMPORT_DOMAIN_INPUT","AI_SITE_IMPORT_KIND","AI_SITE_IMPORT_WAVE_PAGES","aiSiteBuildHref","publishAiJob","AiSiteOwnershipProof","postAiSiteOwnership","AI_SITE_IMPORT_HELP","address","anchor","excerpt","prove","waves","turnedAway","AiSiteImportStart","orgId","orgSlug","hostId","host","user","pendingSite","onBack","leave","router","userRef","current","step","setStep","setAddress","claim","setClaim","notice","setNotice","busy","setBusy","proved","setProved","claimIt","answer","action","domain","message","read","requestJob","siteId","check","method","headers","body","JSON","stringify","kind","brief","inputs","refused","response","payload","json","catch","ok","locked","status","String","site","created","made","create","start","error","job","href","id","push","back","spacing","component","aria-label","data-start-area","severity","direction","sx","alignItems","variant","label","placeholder","value","autoFocus","onChange","event","target","onKeyDown","key","trim","preventDefault","helperText","onClaim","m","pl","mb","previewControl","justifyContent","onClick","disabled","size","startIcon","path"],"mappings":"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"}
@@ -44,5 +44,5 @@ export type AiSiteStartCardProps = ConsoleHostFirstRunZoneProps & {
44
44
  * `aiSiteStartBrief` and `aiSiteStartInputs`. Each step is reported as a
45
45
  * funnel, with where people struggle (`ai-site-start-tracking.ts`).
46
46
  */
47
- export declare function AiSiteStartCard({ hostId, orgId, orgSlug, host, startBlank, leave, pendingSite, clientBuild, initialAnswers, }: AiSiteStartCardProps): import("react").JSX.Element;
47
+ export declare function AiSiteStartCard({ hostId, orgId, orgSlug, host, startBlank, leave, pendingSite, chooseStarter: chooseStarterInShell, clientBuild, initialAnswers, }: AiSiteStartCardProps): import("react").JSX.Element;
48
48
  export default AiSiteStartCard;