@aglyn/plugins-ai 1.0.0-beta.228 → 1.0.0-beta.230
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 +3 -3
- package/package.json +17 -17
- package/src/lib/activity/ai-activity-actions.js +7 -1
- package/src/lib/activity/ai-activity-actions.js.map +1 -1
- package/src/lib/components/ai-automation-zones.d.ts +38 -0
- package/src/lib/components/ai-automation-zones.js +5 -1
- package/src/lib/components/ai-automation-zones.js.map +1 -1
- package/src/lib/components/ai-brief-dialog.component.d.ts +20 -2
- package/src/lib/components/ai-brief-dialog.component.js +87 -8
- package/src/lib/components/ai-brief-dialog.component.js.map +1 -1
- package/src/lib/components/ai-campaign-create.component.d.ts +54 -0
- package/src/lib/components/ai-campaign-create.component.js +270 -0
- package/src/lib/components/ai-campaign-create.component.js.map +1 -0
- package/src/lib/components/ai-describe-automation.component.d.ts +8 -3
- package/src/lib/components/ai-describe-automation.component.js +15 -6
- package/src/lib/components/ai-describe-automation.component.js.map +1 -1
- package/src/lib/components/ai-describe-button.component.d.ts +20 -8
- package/src/lib/components/ai-describe-button.component.js +19 -36
- package/src/lib/components/ai-describe-button.component.js.map +1 -1
- package/src/lib/components/ai-describe-email.component.d.ts +31 -0
- package/src/lib/components/ai-describe-email.component.js +22 -0
- package/src/lib/components/ai-describe-email.component.js.map +1 -0
- package/src/lib/components/ai-describe-org-automation.component.d.ts +36 -0
- package/src/lib/components/ai-describe-org-automation.component.js +238 -0
- package/src/lib/components/ai-describe-org-automation.component.js.map +1 -0
- package/src/lib/components/ai-experiment-cards.component.d.ts +9 -1
- package/src/lib/components/ai-experiment-cards.component.js +104 -18
- package/src/lib/components/ai-experiment-cards.component.js.map +1 -1
- package/src/lib/components/ai-explain-automation.component.js +1 -5
- package/src/lib/components/ai-explain-automation.component.js.map +1 -1
- package/src/lib/components/ai-funnel-zones.component.d.ts +61 -0
- package/src/lib/components/ai-funnel-zones.component.js +178 -0
- package/src/lib/components/ai-funnel-zones.component.js.map +1 -0
- package/src/lib/components/ai-insight-card.component.d.ts +42 -0
- package/src/lib/components/ai-insight-card.component.js +137 -0
- package/src/lib/components/ai-insight-card.component.js.map +1 -0
- package/src/lib/components/ai-insight-dialog.component.d.ts +6 -0
- package/src/lib/components/ai-insight-dialog.component.js +9 -3
- package/src/lib/components/ai-insight-dialog.component.js.map +1 -1
- package/src/lib/components/ai-job-plan.component.d.ts +7 -2
- package/src/lib/components/ai-job-plan.component.js +35 -5
- package/src/lib/components/ai-job-plan.component.js.map +1 -1
- package/src/lib/components/ai-job-requests.d.ts +17 -1
- package/src/lib/components/ai-job-requests.js +39 -3
- package/src/lib/components/ai-job-requests.js.map +1 -1
- package/src/lib/components/ai-jobs-list-page.component.js +12 -1
- package/src/lib/components/ai-jobs-list-page.component.js.map +1 -1
- package/src/lib/components/ai-logic-zones.d.ts +64 -0
- package/src/lib/components/ai-logic-zones.js +18 -0
- package/src/lib/components/ai-logic-zones.js.map +1 -0
- package/src/lib/components/ai-logic.component.d.ts +77 -0
- package/src/lib/components/ai-logic.component.js +553 -0
- package/src/lib/components/ai-logic.component.js.map +1 -0
- package/src/lib/components/ai-marketing-insight.component.d.ts +30 -0
- package/src/lib/components/ai-marketing-insight.component.js +80 -0
- package/src/lib/components/ai-marketing-insight.component.js.map +1 -0
- package/src/lib/components/ai-media-create.component.d.ts +55 -0
- package/src/lib/components/ai-media-create.component.js +433 -0
- package/src/lib/components/ai-media-create.component.js.map +1 -0
- package/src/lib/components/ai-overlay-cards.component.d.ts +83 -0
- package/src/lib/components/ai-overlay-cards.component.js +505 -0
- package/src/lib/components/ai-overlay-cards.component.js.map +1 -0
- package/src/lib/components/ai-product-zones.d.ts +5 -0
- package/src/lib/components/ai-product-zones.js +1 -1
- package/src/lib/components/ai-product-zones.js.map +1 -1
- package/src/lib/components/ai-products-create-button.component.d.ts +42 -0
- package/src/lib/components/ai-products-create-button.component.js +67 -0
- package/src/lib/components/ai-products-create-button.component.js.map +1 -0
- package/src/lib/components/ai-products-hub-card.component.js +100 -81
- package/src/lib/components/ai-products-hub-card.component.js.map +1 -1
- package/src/lib/components/ai-revise-automation.component.d.ts +16 -0
- package/src/lib/components/ai-revise-automation.component.js +207 -0
- package/src/lib/components/ai-revise-automation.component.js.map +1 -0
- package/src/lib/components/ai-site-build-page.component.d.ts +1 -1
- package/src/lib/components/ai-site-build-page.component.js +177 -20
- package/src/lib/components/ai-site-build-page.component.js.map +1 -1
- package/src/lib/components/ai-site-start-card.component.d.ts +10 -1
- package/src/lib/components/ai-site-start-card.component.js +7 -4
- package/src/lib/components/ai-site-start-card.component.js.map +1 -1
- package/src/lib/components/ai-upsell-dialog.component.d.ts +53 -0
- package/src/lib/components/ai-upsell-dialog.component.js +177 -0
- package/src/lib/components/ai-upsell-dialog.component.js.map +1 -0
- package/src/lib/components/assist-build-card.component.d.ts +42 -0
- package/src/lib/components/assist-build-card.component.js +183 -0
- package/src/lib/components/assist-build-card.component.js.map +1 -0
- package/src/lib/components/assist-edit-canvas.d.ts +2 -0
- package/src/lib/components/assist-edit-canvas.js +56 -1
- package/src/lib/components/assist-edit-canvas.js.map +1 -1
- package/src/lib/components/assist-jobs-drawer.component.d.ts +11 -0
- package/src/lib/components/assist-jobs-drawer.component.js +85 -4
- package/src/lib/components/assist-jobs-drawer.component.js.map +1 -1
- package/src/lib/components/assist-panel.component.js +51 -2
- package/src/lib/components/assist-panel.component.js.map +1 -1
- package/src/lib/components/use-ai-job-run.d.ts +3 -14
- package/src/lib/components/use-ai-job-run.js +0 -50
- package/src/lib/components/use-ai-job-run.js.map +1 -1
- package/src/lib/jobs/ai-build-capabilities.d.ts +58 -0
- package/src/lib/jobs/ai-build-capabilities.js +256 -0
- package/src/lib/jobs/ai-build-capabilities.js.map +1 -0
- package/src/lib/jobs/ai-build-unit-outcome.d.ts +52 -0
- package/src/lib/jobs/ai-build-unit-outcome.js +138 -0
- package/src/lib/jobs/ai-build-unit-outcome.js.map +1 -0
- package/src/lib/jobs/ai-job-build-step.d.ts +144 -0
- package/src/lib/jobs/ai-job-build-step.js +657 -0
- package/src/lib/jobs/ai-job-build-step.js.map +1 -0
- package/src/lib/jobs/ai-job-draft-ids.js +9 -1
- package/src/lib/jobs/ai-job-draft-ids.js.map +1 -1
- package/src/lib/jobs/ai-job-drafts.d.ts +14 -4
- package/src/lib/jobs/ai-job-drafts.js +25 -4
- package/src/lib/jobs/ai-job-drafts.js.map +1 -1
- package/src/lib/jobs/ai-job-layout-site-pages.d.ts +70 -0
- package/src/lib/jobs/ai-job-layout-site-pages.js +216 -0
- package/src/lib/jobs/ai-job-layout-site-pages.js.map +1 -0
- package/src/lib/jobs/ai-job-layout-step.d.ts +2 -2
- package/src/lib/jobs/ai-job-layout-step.js +19 -1
- package/src/lib/jobs/ai-job-layout-step.js.map +1 -1
- package/src/lib/jobs/ai-job-logic-step.d.ts +107 -0
- package/src/lib/jobs/ai-job-logic-step.js +395 -0
- package/src/lib/jobs/ai-job-logic-step.js.map +1 -0
- package/src/lib/jobs/ai-job-overlay-copy.d.ts +70 -0
- package/src/lib/jobs/ai-job-overlay-copy.js +178 -0
- package/src/lib/jobs/ai-job-overlay-copy.js.map +1 -0
- package/src/lib/jobs/ai-job-page-step.js +6 -6
- package/src/lib/jobs/ai-job-page-step.js.map +1 -1
- package/src/lib/jobs/ai-job-plan-step.d.ts +26 -1
- package/src/lib/jobs/ai-job-plan-step.js +79 -11
- package/src/lib/jobs/ai-job-plan-step.js.map +1 -1
- package/src/lib/jobs/ai-job-site-step.d.ts +15 -1
- package/src/lib/jobs/ai-job-site-step.js +207 -58
- package/src/lib/jobs/ai-job-site-step.js.map +1 -1
- package/src/lib/jobs/ai-job-text-step.d.ts +22 -1
- package/src/lib/jobs/ai-job-text-step.js +12 -0
- package/src/lib/jobs/ai-job-text-step.js.map +1 -1
- package/src/lib/jobs/ai-job-workflow-step.d.ts +54 -4
- package/src/lib/jobs/ai-job-workflow-step.js +318 -13
- package/src/lib/jobs/ai-job-workflow-step.js.map +1 -1
- package/src/lib/jobs/ai-jobs.d.ts +90 -2
- package/src/lib/jobs/ai-jobs.js +495 -61
- package/src/lib/jobs/ai-jobs.js.map +1 -1
- package/src/lib/jobs/ai-logic-records.d.ts +40 -0
- package/src/lib/jobs/ai-logic-records.js +55 -0
- package/src/lib/jobs/ai-logic-records.js.map +1 -0
- package/src/lib/jobs/ai-site-publish.d.ts +7 -0
- package/src/lib/jobs/ai-site-publish.js +9 -0
- package/src/lib/jobs/ai-site-publish.js.map +1 -1
- package/src/lib/jobs/ai-workflow-records.d.ts +4 -0
- package/src/lib/jobs/ai-workflow-records.js +40 -1
- package/src/lib/jobs/ai-workflow-records.js.map +1 -1
- package/src/lib/model/ai-automation-draft.d.ts +18 -0
- package/src/lib/model/ai-automation-draft.js +86 -0
- package/src/lib/model/ai-automation-draft.js.map +1 -1
- package/src/lib/model/ai-build-job.d.ts +201 -0
- package/src/lib/model/ai-build-job.js +471 -0
- package/src/lib/model/ai-build-job.js.map +1 -0
- package/src/lib/model/ai-build-plan.d.ts +61 -0
- package/src/lib/model/ai-build-plan.js +154 -9
- package/src/lib/model/ai-build-plan.js.map +1 -1
- package/src/lib/model/ai-build-progress.d.ts +56 -0
- package/src/lib/model/ai-build-progress.js +128 -0
- package/src/lib/model/ai-build-progress.js.map +1 -0
- package/src/lib/model/ai-insight.d.ts +20 -10
- package/src/lib/model/ai-insight.js +72 -9
- package/src/lib/model/ai-insight.js.map +1 -1
- package/src/lib/model/ai-job-activity.js +3 -1
- package/src/lib/model/ai-job-activity.js.map +1 -1
- package/src/lib/model/ai-job-failure-copy.d.ts +20 -1
- package/src/lib/model/ai-job-failure-copy.js +28 -1
- package/src/lib/model/ai-job-failure-copy.js.map +1 -1
- package/src/lib/model/ai-job-notice.d.ts +3 -0
- package/src/lib/model/ai-job-notice.js +11 -2
- package/src/lib/model/ai-job-notice.js.map +1 -1
- package/src/lib/model/ai-jobs.types.d.ts +87 -2
- package/src/lib/model/ai-jobs.types.js +3 -1
- package/src/lib/model/ai-jobs.types.js.map +1 -1
- package/src/lib/model/ai-logic-job.d.ts +108 -0
- package/src/lib/model/ai-logic-job.js +327 -0
- package/src/lib/model/ai-logic-job.js.map +1 -0
- package/src/lib/model/ai-media-credits.d.ts +52 -0
- package/src/lib/model/ai-media-credits.js +61 -0
- package/src/lib/model/ai-media-credits.js.map +1 -0
- package/src/lib/model/ai-overlay-copy.d.ts +114 -0
- package/src/lib/model/ai-overlay-copy.js +175 -0
- package/src/lib/model/ai-overlay-copy.js.map +1 -0
- package/src/lib/model/ai-site-build-progress.d.ts +28 -3
- package/src/lib/model/ai-site-build-progress.js +231 -17
- package/src/lib/model/ai-site-build-progress.js.map +1 -1
- package/src/lib/model/ai-site-start-seo.d.ts +16 -0
- package/src/lib/model/ai-site-start-seo.js +54 -4
- package/src/lib/model/ai-site-start-seo.js.map +1 -1
- package/src/lib/model/ai-site-start.d.ts +14 -0
- package/src/lib/model/ai-site-start.js +43 -0
- package/src/lib/model/ai-site-start.js.map +1 -1
- package/src/lib/model/ai-svg.d.ts +69 -0
- package/src/lib/model/ai-svg.js +265 -0
- package/src/lib/model/ai-svg.js.map +1 -0
- package/src/lib/model/ai-usage-by-user.d.ts +3 -2
- package/src/lib/model/ai-usage-by-user.js.map +1 -1
- package/src/lib/model/ai-workflow-job.d.ts +92 -4
- package/src/lib/model/ai-workflow-job.js +124 -7
- package/src/lib/model/ai-workflow-job.js.map +1 -1
- package/src/lib/model/assist-build.d.ts +58 -0
- package/src/lib/model/assist-build.js +52 -0
- package/src/lib/model/assist-build.js.map +1 -0
- package/src/lib/model/assist-edit.d.ts +48 -3
- package/src/lib/model/assist-edit.js +48 -4
- package/src/lib/model/assist-edit.js.map +1 -1
- package/src/lib/plugin-config.js +2 -0
- package/src/lib/plugin-config.js.map +1 -1
- package/src/lib/plugin.js +240 -11
- package/src/lib/plugin.js.map +1 -1
- package/src/lib/providers/catalog.d.ts +81 -4
- package/src/lib/providers/catalog.js +80 -9
- package/src/lib/providers/catalog.js.map +1 -1
- package/src/lib/providers/image-contract.d.ts +116 -0
- package/src/lib/providers/image-contract.js +74 -0
- package/src/lib/providers/image-contract.js.map +1 -0
- package/src/lib/providers/model-choice.js +11 -0
- package/src/lib/providers/model-choice.js.map +1 -1
- package/src/lib/providers/routing.js +18 -0
- package/src/lib/providers/routing.js.map +1 -1
- package/src/lib/providers/vertex-image.d.ts +121 -0
- package/src/lib/providers/vertex-image.js +312 -0
- package/src/lib/providers/vertex-image.js.map +1 -0
- package/src/lib/runtime/ai-doctrine-validators.d.ts +19 -0
- package/src/lib/runtime/ai-doctrine-validators.js +89 -0
- package/src/lib/runtime/ai-doctrine-validators.js.map +1 -1
- package/src/lib/runtime/ai-doctrine.d.ts +6 -0
- package/src/lib/runtime/ai-doctrine.js +16 -6
- package/src/lib/runtime/ai-doctrine.js.map +1 -1
- package/src/lib/runtime/ai-eval-live.js +4 -0
- package/src/lib/runtime/ai-eval-live.js.map +1 -1
- package/src/lib/runtime/ai-eval.d.ts +15 -1
- package/src/lib/runtime/ai-eval.js +52 -1
- package/src/lib/runtime/ai-eval.js.map +1 -1
- package/src/lib/runtime/experiment-variant-copy.d.ts +34 -0
- package/src/lib/runtime/experiment-variant-copy.js +102 -0
- package/src/lib/runtime/experiment-variant-copy.js.map +1 -0
- package/src/lib/server/ai-experiment-versions.d.ts +51 -0
- package/src/lib/server/ai-experiment-versions.js +270 -0
- package/src/lib/server/ai-experiment-versions.js.map +1 -0
- package/src/lib/server/ai-jobs-resume.js +74 -4
- package/src/lib/server/ai-jobs-resume.js.map +1 -1
- package/src/lib/server/ai-media-image.d.ts +66 -0
- package/src/lib/server/ai-media-image.js +521 -0
- package/src/lib/server/ai-media-image.js.map +1 -0
- package/src/lib/server/ai-media-svg.d.ts +91 -0
- package/src/lib/server/ai-media-svg.js +186 -0
- package/src/lib/server/ai-media-svg.js.map +1 -0
- package/src/lib/server/assist-build.d.ts +54 -0
- package/src/lib/server/assist-build.js +121 -0
- package/src/lib/server/assist-build.js.map +1 -0
- package/src/lib/server/assist-chat.js +108 -12
- package/src/lib/server/assist-chat.js.map +1 -1
- package/src/lib/server/assist-edit.js +213 -3
- package/src/lib/server/assist-edit.js.map +1 -1
- package/src/lib/server/assist-view-context.js +242 -4
- package/src/lib/server/assist-view-context.js.map +1 -1
- package/src/lib/server.js +26 -0
- package/src/lib/server.js.map +1 -1
- package/src/lib/tools/ai-logic-tool.d.ts +27 -0
- package/src/lib/tools/ai-logic-tool.js +207 -0
- package/src/lib/tools/ai-logic-tool.js.map +1 -0
- package/src/lib/tools/ai-overlay-tool.d.ts +35 -0
- package/src/lib/tools/ai-overlay-tool.js +107 -0
- package/src/lib/tools/ai-overlay-tool.js.map +1 -0
- package/src/lib/tools/ai-workflow-tool.d.ts +11 -0
- package/src/lib/tools/ai-workflow-tool.js +31 -0
- package/src/lib/tools/ai-workflow-tool.js.map +1 -1
- package/src/lib/usage/assist-job-refund.d.ts +31 -3
- package/src/lib/usage/assist-job-refund.js +46 -10
- package/src/lib/usage/assist-job-refund.js.map +1 -1
- package/src/lib/usage/assist-usage.d.ts +5 -0
- package/src/lib/usage/assist-usage.js +2 -0
- package/src/lib/usage/assist-usage.js.map +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/components/ai-logic.component.tsx"],"sourcesContent":["'use client'\n\n/**\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\nimport type { ConsoleWidgetEntitlementProps } from '@aglyn/aglyn/plugin-manager/feature-plugins'\nimport { pluginDocsHelp } from '@aglyn/aglyn/app-utils/docs-help'\nimport { mdiCreation } from '@aglyn/shared-data-mdi'\nimport { MdiIcon } from '@aglyn/shared-ui-jsx'\nimport { useUser } from '@aglyn/tenant-feature-instance'\nimport {\n Alert,\n Box,\n Button,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Link,\n Stack,\n TextField,\n Typography,\n} from '@mui/material'\nimport { useEffect, useState } from 'react'\nimport { AI_LOGIC_RESOURCE, readAiLogicProposal, type AiLogicProposal } from '../model/ai-logic-job'\nimport type { AiJobSummary } from '../model/ai-jobs.types'\nimport { openAiJobs } from './ai-jobs-store'\nimport type {\n ConsoleHostLogicZoneProps,\n ConsoleLogicFunctionEditorZoneProps,\n ConsoleLogicReferenceIssueZoneProps,\n} from './ai-logic-zones'\nimport { aiJobProblem, useAiJobRun, type AiJobRun } from './use-ai-job-run'\nimport { AiUpsellButton } from './ai-upsell-dialog.component'\n\n/**\n * Logic by AI (AGL-3603), in the zones the logic plugin hosts on its\n * Functions & Variables page:\n *\n * - \"Create with AI\" in the Functions and the Variables card headers\n * (`hostLogic`): a description becomes a `logic` job whose proposal opens\n * in that card's editor, unsaved.\n * - \"Explain it\", \"Change with AI\" and \"Fix with AI\" in a saved function's\n * editor (`logicFunctionEditor`).\n * - \"Fix with AI\" on a broken reference an ACTION holds\n * (`logicReferenceIssue`): a changed copy of the action, drafted switched\n * off by the workflow job's `revise` mode.\n *\n * Nothing here saves: a proposal is put in the editor only when the person\n * asks, and the editor's Save is the write.\n */\n\nconst BRIEF_MAX_CHARS = 4_000\n\nexport const AI_LOGIC_COPY = {\n create: 'Create with AI',\n title: { function: 'Describe a function', variable: 'Describe a variable' },\n label: { function: 'What should it work out?', variable: 'What should it hold?' },\n placeholder: {\n function: 'A shipping quote: free over our free-shipping amount, otherwise the flat rate plus 2 per kilo',\n variable: 'Our plan prices: starter 19, pro 49, business 99',\n },\n next: {\n function:\n 'The function is written only from the expressions the editor runs and your site’s variables, checked, and run once. It opens in the editor for you to test and save.',\n variable: 'The variable opens in the editor for you to check and save.',\n },\n submit: { function: 'Write the function', variable: 'Write the variable' },\n running: 'Writing it. This usually takes under a minute.',\n ready: 'Ready',\n open: 'Open in the editor',\n notOpened: 'It could not be opened in the editor. Check the card for why, then try again.',\n failed: 'Nothing could be written from this description. Try again.',\n explain: 'Explain it',\n explaining: 'Reading the function.',\n again: 'Explain it again',\n explainFailed: 'The function could not be explained. Try again.',\n explainBrief: (name: string) => `Explain what ${name} works out, and anything in it worth checking.`,\n changeLabel: 'What should change?',\n changePlaceholder: 'Add a 10% discount when the order is over 200',\n change: 'Change with AI',\n fix: 'Fix with AI',\n fixBrief: (name: string) =>\n `Fix whatever in ${name} would stop it working — a name the site does not have, a condition that can never hold, a value it returns that nothing sets. Change nothing else.`,\n changeIntro:\n 'Describe a change, or let AI fix what would stop it working. The changed function replaces what this editor holds only when you open it, and is saved only when you save.',\n replace: 'Put it in the editor',\n referenceFix: 'Fix with AI',\n referenceTitle: 'Fix this reference',\n referenceRunning: 'Drafting a changed copy of the automation. This can take a few minutes.',\n referenceDone:\n 'A changed copy is drafted, switched off, beside the automation. Review it on the Automation page, then switch it on in place of the old one.',\n referenceFailed: 'The automation could not be changed. Try again.',\n referenceBrief: (issue: { refType: string; missing: string }) =>\n `A step names the ${issue.refType} “${issue.missing}”, which the site no longer has. Point that step at the site’s ${issue.refType} the name means, or leave it for me to pick. Change nothing else.`,\n} as const\n\n/** The proposal a finished logic job wrote, or `null`. */\nfunction proposalOf(job: AiJobSummary | null): { proposal: AiLogicProposal; note: string | null } | null {\n if (job?.status !== 'done') return null\n const output = job.outputs.find((one) => one.resource === AI_LOGIC_RESOURCE)\n const proposal = readAiLogicProposal(output?.proposal)\n return proposal ? { proposal, note: output?.note ?? null } : null\n}\n\nfunction nameOf(proposal: AiLogicProposal): string {\n return proposal.kind === 'function' ? proposal.definition.name : proposal.variable.name\n}\n\n/** Progress and what went wrong, shared by every control here. */\nfunction RunState({ run, running, failed, done }: { run: AiJobRun; running: string; failed: string; done: boolean }) {\n const problem = aiJobProblem(run.job, failed) ?? (run.job?.status === 'done' && !done ? failed : null)\n return (\n <>\n {run.running && run.job ? (\n <Alert\n severity=\"info\"\n icon={<CircularProgress size={18} aria-label=\"Working\" />}\n action={\n <Button color=\"inherit\" size=\"small\" variant=\"outlined\" onClick={() => run.job && openAiJobs({ jobId: run.job.id })}>\n {'Open AI jobs'}\n </Button>\n }\n >\n {running}\n </Alert>\n ) : null}\n {problem ? <Alert severity={run.job?.status === 'failed' ? 'error' : 'warning'}>{problem}</Alert> : null}\n {run.notice ? <Alert severity=\"warning\">{run.notice}</Alert> : null}\n </>\n )\n}\n\n/** \"Create with AI\" in the Functions or the Variables card's header. */\nexport function AiLogicCreateButton({\n hostId,\n orgId,\n kind,\n propose,\n entitled,\n upgrade,\n}: ConsoleHostLogicZoneProps & ConsoleWidgetEntitlementProps) {\n const copy = AI_LOGIC_COPY\n const help = pluginDocsHelp('aiLogic')\n const { data: user } = useUser()\n const run = useAiJobRun(user, copy.failed)\n const { reset } = run\n const [open, setOpen] = useState(false)\n const [brief, setBrief] = useState('')\n const [notOpened, setNotOpened] = useState(false)\n\n useEffect(() => {\n reset()\n setNotOpened(false)\n }, [open, reset])\n\n // Drawn from the shell's gates alone (AGL-3601); a plan without the add-on\n // gets the add-on's dialog, and nothing asks a server until it is used.\n if (entitled === false) return upgrade ? <AiUpsellButton kind=\"logic\" upgrade={upgrade} /> : null\n const ready = proposalOf(run.job)\n const asking = !run.job || Boolean(run.notice)\n const close = () => setOpen(false)\n\n const start = async () => {\n const trimmed = brief.trim()\n if (!orgId || !trimmed) return\n if (await run.start({ orgId, hostId, kind: 'logic', brief: trimmed, inputs: { mode: kind } })) setBrief('')\n }\n const apply = () => {\n if (!ready) return\n if (propose(ready.proposal)) close()\n else setNotOpened(true)\n }\n\n return (\n <>\n <Button size=\"small\" variant=\"outlined\" startIcon={<MdiIcon path={mdiCreation.path} />} onClick={() => setOpen(true)}>\n {copy.create}\n </Button>\n <Dialog open={open} onClose={run.starting ? undefined : close} fullWidth maxWidth=\"sm\">\n <DialogTitle>{copy.title[kind]}</DialogTitle>\n <DialogContent>\n <Stack spacing={2} sx={{ pt: 1 }}>\n {asking ? (\n <>\n <TextField\n label={copy.label[kind]}\n placeholder={copy.placeholder[kind]}\n multiline\n minRows={3}\n value={brief}\n onChange={(event) => setBrief(event.target.value.slice(0, BRIEF_MAX_CHARS))}\n disabled={run.starting}\n autoFocus\n />\n <Typography variant=\"body2\" color=\"text.secondary\">\n {copy.next[kind]}{' '}\n <Link href={help.href} target=\"_blank\" rel=\"noopener\" title={help.excerpt}>\n {'How it works'}\n </Link>\n </Typography>\n </>\n ) : null}\n {ready ? (\n <Alert severity=\"success\">\n <Typography variant=\"body2\" sx={{ fontWeight: 600 }}>{`${copy.ready}: ${nameOf(ready.proposal)}`}</Typography>\n {ready.note ? <Typography variant=\"body2\">{ready.note}</Typography> : null}\n </Alert>\n ) : null}\n <RunState run={run} running={copy.running} failed={copy.failed} done={Boolean(ready)} />\n {notOpened ? <Alert severity=\"warning\">{copy.notOpened}</Alert> : null}\n </Stack>\n </DialogContent>\n <DialogActions>\n <Button onClick={close} disabled={run.starting}>\n {asking ? 'Cancel' : 'Close'}\n </Button>\n {asking ? (\n <Button variant=\"contained\" onClick={() => void start()} disabled={run.starting || !orgId || !brief.trim()}>\n {copy.submit[kind]}\n </Button>\n ) : ready ? (\n <Button variant=\"contained\" onClick={apply}>\n {copy.open}\n </Button>\n ) : null}\n </DialogActions>\n </Dialog>\n </>\n )\n}\n\n/** \"Explain it\", \"Change with AI\" and \"Fix with AI\" in a saved function's editor. */\nexport function AiLogicFunctionTools({ hostId, orgId, target, propose }: ConsoleLogicFunctionEditorZoneProps) {\n const copy = AI_LOGIC_COPY\n const help = pluginDocsHelp('aiLogic', { anchor: '#change' })\n const { data: user } = useUser()\n const explain = useAiJobRun(user, copy.explainFailed)\n const change = useAiJobRun(user, copy.failed)\n const [brief, setBrief] = useState('')\n const [notOpened, setNotOpened] = useState(false)\n\n const explanation =\n explain.job?.status === 'done' ? explain.job.outputs.find((one) => one.resource === 'text')?.text ?? null : null\n const ready = proposalOf(change.job)\n const busy = change.starting || change.running\n\n const ask = () => {\n if (!orgId) return\n void explain.start({\n orgId,\n hostId,\n kind: 'logic',\n brief: copy.explainBrief(target.name),\n inputs: { mode: 'explain', functionId: target.id },\n })\n }\n const revise = async (text: string) => {\n const trimmed = text.trim()\n if (!orgId || !trimmed) return\n setNotOpened(false)\n if (\n await change.start({ orgId, hostId, kind: 'logic', brief: trimmed, inputs: { mode: 'function', functionId: target.id } })\n ) {\n setBrief('')\n }\n }\n\n return (\n <Box sx={{ border: 1, borderColor: 'divider', borderRadius: 1, p: 1.5 }} aria-label=\"This function with AI\">\n <Stack spacing={1}>\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'center' }}>\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ flexGrow: 1 }}>\n {copy.changeIntro}{' '}\n <Link href={help.href} target=\"_blank\" rel=\"noopener\" title={help.excerpt}>\n {'How it works'}\n </Link>\n </Typography>\n <Button size=\"small\" variant=\"outlined\" disabled={explain.starting || explain.running || !orgId} onClick={ask}>\n {explanation ? copy.again : copy.explain}\n </Button>\n </Stack>\n {explanation ? (\n <Typography variant=\"body2\" component=\"div\" sx={{ whiteSpace: 'pre-line', wordBreak: 'break-word' }}>\n {explanation}\n </Typography>\n ) : null}\n <RunState run={explain} running={copy.explaining} failed={copy.explainFailed} done={Boolean(explanation)} />\n <TextField\n size=\"small\"\n label={copy.changeLabel}\n placeholder={copy.changePlaceholder}\n value={brief}\n multiline\n maxRows={4}\n onChange={(event) => setBrief(event.target.value.slice(0, BRIEF_MAX_CHARS))}\n disabled={busy}\n />\n <Stack direction=\"row\" spacing={1}>\n <Button\n size=\"small\"\n variant=\"outlined\"\n startIcon={<MdiIcon path={mdiCreation.path} />}\n disabled={busy || !orgId || !brief.trim()}\n onClick={() => void revise(brief)}\n >\n {copy.change}\n </Button>\n <Button\n size=\"small\"\n variant=\"text\"\n startIcon={<MdiIcon path={mdiCreation.path} />}\n disabled={busy || !orgId}\n onClick={() => void revise(copy.fixBrief(target.name))}\n >\n {copy.fix}\n </Button>\n </Stack>\n {ready ? (\n <Alert\n severity=\"success\"\n action={\n <Button\n color=\"inherit\"\n size=\"small\"\n variant=\"outlined\"\n onClick={() => {\n if (!propose(ready.proposal)) setNotOpened(true)\n }}\n >\n {copy.replace}\n </Button>\n }\n >\n <Typography variant=\"body2\" sx={{ fontWeight: 600 }}>{`${copy.ready}: ${nameOf(ready.proposal)}`}</Typography>\n {ready.note ? <Typography variant=\"body2\">{ready.note}</Typography> : null}\n </Alert>\n ) : null}\n <RunState run={change} running={copy.running} failed={copy.failed} done={Boolean(ready)} />\n {notOpened ? <Alert severity=\"warning\">{copy.notOpened}</Alert> : null}\n </Stack>\n </Box>\n )\n}\n\n/**\n * \"Fix with AI\" on a broken reference an automation holds: a changed copy of\n * the action, drafted switched off by the workflow job's `revise` mode. A\n * workflow's, a variable's and a page's references are not offered.\n */\nexport function AiLogicFixReference({ hostId, orgId, issue }: ConsoleLogicReferenceIssueZoneProps) {\n const copy = AI_LOGIC_COPY\n const { data: user } = useUser()\n const run = useAiJobRun(user, copy.referenceFailed)\n const [open, setOpen] = useState(false)\n\n if (issue.source !== 'action') return null\n const drafted = run.job?.status === 'done' ? run.job.outputs.find((one) => one.resource === 'workflow') : undefined\n\n const ask = () => {\n setOpen(true)\n if (run.job || !orgId) return\n void run.start({\n orgId,\n hostId,\n kind: 'workflow',\n brief: copy.referenceBrief(issue),\n inputs: { mode: 'revise', targetType: 'action', targetId: issue.sourceId },\n })\n }\n const close = () => {\n setOpen(false)\n if (run.notice) run.reset()\n }\n\n return (\n <>\n <Button size=\"small\" variant=\"text\" sx={{ px: 0.5, minWidth: 0 }} startIcon={<MdiIcon path={mdiCreation.path} />} onClick={ask}>\n {copy.referenceFix}\n </Button>\n <Dialog open={open} onClose={close} fullWidth maxWidth=\"sm\">\n <DialogTitle>{copy.referenceTitle}</DialogTitle>\n <DialogContent>\n <Stack spacing={1.5} sx={{ pt: 1 }}>\n {drafted ? (\n <Alert severity=\"success\">\n <Typography variant=\"body2\" sx={{ fontWeight: 600 }}>{drafted.label}</Typography>\n <Typography variant=\"body2\">{drafted.note || copy.referenceDone}</Typography>\n </Alert>\n ) : null}\n <RunState run={run} running={copy.referenceRunning} failed={copy.referenceFailed} done={Boolean(drafted)} />\n </Stack>\n </DialogContent>\n <DialogActions>\n <Button onClick={close}>{'Close'}</Button>\n </DialogActions>\n </Dialog>\n </>\n )\n}\n"],"names":["pluginDocsHelp","mdiCreation","MdiIcon","useUser","Alert","Box","Button","CircularProgress","Dialog","DialogActions","DialogContent","DialogTitle","Link","Stack","TextField","Typography","useEffect","useState","AI_LOGIC_RESOURCE","readAiLogicProposal","openAiJobs","aiJobProblem","useAiJobRun","AiUpsellButton","BRIEF_MAX_CHARS","AI_LOGIC_COPY","create","title","function","variable","label","placeholder","next","submit","running","ready","open","notOpened","failed","explain","explaining","again","explainFailed","explainBrief","name","changeLabel","changePlaceholder","change","fix","fixBrief","changeIntro","replace","referenceFix","referenceTitle","referenceRunning","referenceDone","referenceFailed","referenceBrief","issue","refType","missing","proposalOf","job","status","output","outputs","find","one","resource","proposal","note","nameOf","kind","definition","RunState","run","done","problem","severity","icon","size","aria-label","action","color","variant","onClick","jobId","id","notice","AiLogicCreateButton","hostId","orgId","propose","entitled","upgrade","copy","help","data","user","reset","setOpen","brief","setBrief","setNotOpened","asking","Boolean","close","start","trimmed","trim","inputs","mode","apply","startIcon","path","onClose","starting","undefined","fullWidth","maxWidth","spacing","sx","pt","multiline","minRows","value","onChange","event","target","slice","disabled","autoFocus","href","rel","excerpt","fontWeight","AiLogicFunctionTools","anchor","explanation","text","busy","ask","functionId","revise","border","borderColor","borderRadius","p","direction","alignItems","flexGrow","component","whiteSpace","wordBreak","maxRows","AiLogicFixReference","source","drafted","targetType","targetId","sourceId","px","minWidth"],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ConsoleWidgetEntitlementProps } from '@aglyn/aglyn/plugin-manager/feature-plugins';
|
|
2
|
+
/**
|
|
3
|
+
* "Ask AI about these numbers" (AGL-3603), in the header of the marketing
|
|
4
|
+
* plugin's Conversions section and of one campaign's report, through the zone
|
|
5
|
+
* that plugin hosts there.
|
|
6
|
+
*
|
|
7
|
+
* It opens the insight dialog the Assist panel opens, on the `marketing`
|
|
8
|
+
* surface: the question starts an `insight` job, which reads the site's
|
|
9
|
+
* figures through the readers the owning plugins publish — the campaigns, the
|
|
10
|
+
* conversions they were credited with, the revenue they earned, the forms and
|
|
11
|
+
* the traffic — and every insight it keeps cites the rows its numbers come
|
|
12
|
+
* from. Nothing is changed or sent.
|
|
13
|
+
*
|
|
14
|
+
* The props restate the half of the zone's contract this widget reads.
|
|
15
|
+
*/
|
|
16
|
+
/** What the `marketingInsights` zone hands this widget. */
|
|
17
|
+
export interface AiMarketingInsightButtonProps extends ConsoleWidgetEntitlementProps {
|
|
18
|
+
hostId: string | null;
|
|
19
|
+
subject: 'conversions' | 'campaign';
|
|
20
|
+
campaign: string | null;
|
|
21
|
+
}
|
|
22
|
+
/** What the button reads. */
|
|
23
|
+
export declare const AI_MARKETING_INSIGHT_LABEL = "Ask AI about these numbers";
|
|
24
|
+
/** The question the dialog opens on, from what the report is about. */
|
|
25
|
+
export declare function aiMarketingInsightQuestion(subject: AiMarketingInsightButtonProps['subject'], campaign: string | null): string;
|
|
26
|
+
export declare function AiMarketingInsightButton(props: AiMarketingInsightButtonProps): import("react").JSX.Element;
|
|
27
|
+
export declare namespace AiMarketingInsightButton {
|
|
28
|
+
var displayName: string;
|
|
29
|
+
}
|
|
30
|
+
export default AiMarketingInsightButton;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ 'use client';
|
|
17
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
18
|
+
import { mdiCreation } from "@aglyn/shared-data-mdi";
|
|
19
|
+
import { MdiIcon } from "@aglyn/shared-ui-jsx";
|
|
20
|
+
import { useConsoleHostRoute, useHostOrgId, useUser } from "@aglyn/tenant-feature-instance";
|
|
21
|
+
import { Button } from "@mui/material";
|
|
22
|
+
import { useState } from "react";
|
|
23
|
+
import { AiInsightDialog } from "./ai-insight-dialog.component.js";
|
|
24
|
+
import { AiUpsellButton } from "./ai-upsell-dialog.component.js";
|
|
25
|
+
/** What the button reads. */ export const AI_MARKETING_INSIGHT_LABEL = 'Ask AI about these numbers';
|
|
26
|
+
/** The question the dialog opens on, from what the report is about. */ export function aiMarketingInsightQuestion(subject, campaign) {
|
|
27
|
+
if (subject === 'campaign' && campaign) {
|
|
28
|
+
return `How did the campaign “${campaign}” do — what did it cause, and what did it earn?`;
|
|
29
|
+
}
|
|
30
|
+
return 'Which campaigns brought in the most conversions, and what did they earn?';
|
|
31
|
+
}
|
|
32
|
+
export function AiMarketingInsightButton(props) {
|
|
33
|
+
var _useHostOrgId, _ref;
|
|
34
|
+
const { hostId, subject, campaign } = props;
|
|
35
|
+
const { data: user } = useUser();
|
|
36
|
+
const orgId = (_useHostOrgId = useHostOrgId(hostId != null ? hostId : undefined)) != null ? _useHostOrgId : undefined;
|
|
37
|
+
const { orgSlug, subdomain } = useConsoleHostRoute(hostId);
|
|
38
|
+
const [open, setOpen] = useState(false);
|
|
39
|
+
// The figures are one site's: with no site there is nothing to read.
|
|
40
|
+
if (!hostId) return null;
|
|
41
|
+
// Drawn from the shell's gates alone (AGL-3601): nothing asks a server until
|
|
42
|
+
// it is used, and a plan without the add-on gets the add-on's dialog.
|
|
43
|
+
if (props.entitled === false) {
|
|
44
|
+
return props.upgrade ? /*#__PURE__*/ _jsx(AiUpsellButton, {
|
|
45
|
+
kind: "insight",
|
|
46
|
+
label: AI_MARKETING_INSIGHT_LABEL,
|
|
47
|
+
upgrade: props.upgrade
|
|
48
|
+
}) : null;
|
|
49
|
+
}
|
|
50
|
+
if (!orgId) return null;
|
|
51
|
+
return /*#__PURE__*/ _jsxs(_Fragment, {
|
|
52
|
+
children: [
|
|
53
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
54
|
+
size: "small",
|
|
55
|
+
variant: "outlined",
|
|
56
|
+
startIcon: /*#__PURE__*/ _jsx(MdiIcon, {
|
|
57
|
+
path: mdiCreation.path
|
|
58
|
+
}),
|
|
59
|
+
onClick: ()=>setOpen(true),
|
|
60
|
+
children: AI_MARKETING_INSIGHT_LABEL
|
|
61
|
+
}),
|
|
62
|
+
/*#__PURE__*/ _jsx(AiInsightDialog, {
|
|
63
|
+
open: open,
|
|
64
|
+
onClose: ()=>setOpen(false),
|
|
65
|
+
orgId: orgId,
|
|
66
|
+
orgSlug: orgSlug != null ? orgSlug : '',
|
|
67
|
+
hostId: hostId,
|
|
68
|
+
host: subdomain,
|
|
69
|
+
surface: "marketing",
|
|
70
|
+
user: user,
|
|
71
|
+
uid: (_ref = user == null ? void 0 : user.uid) != null ? _ref : null,
|
|
72
|
+
question: aiMarketingInsightQuestion(subject, campaign)
|
|
73
|
+
})
|
|
74
|
+
]
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
AiMarketingInsightButton.displayName = 'AiMarketingInsightButton';
|
|
78
|
+
export default AiMarketingInsightButton;
|
|
79
|
+
|
|
80
|
+
//# sourceMappingURL=ai-marketing-insight.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/components/ai-marketing-insight.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'use client'\n\nimport type { ConsoleWidgetEntitlementProps } from '@aglyn/aglyn/plugin-manager/feature-plugins'\nimport { mdiCreation } from '@aglyn/shared-data-mdi'\nimport { MdiIcon } from '@aglyn/shared-ui-jsx'\nimport { useConsoleHostRoute, useHostOrgId, useUser } from '@aglyn/tenant-feature-instance'\nimport { Button } from '@mui/material'\nimport { useState } from 'react'\nimport { AiInsightDialog } from './ai-insight-dialog.component'\nimport { AiUpsellButton } from './ai-upsell-dialog.component'\n\n/**\n * \"Ask AI about these numbers\" (AGL-3603), in the header of the marketing\n * plugin's Conversions section and of one campaign's report, through the zone\n * that plugin hosts there.\n *\n * It opens the insight dialog the Assist panel opens, on the `marketing`\n * surface: the question starts an `insight` job, which reads the site's\n * figures through the readers the owning plugins publish — the campaigns, the\n * conversions they were credited with, the revenue they earned, the forms and\n * the traffic — and every insight it keeps cites the rows its numbers come\n * from. Nothing is changed or sent.\n *\n * The props restate the half of the zone's contract this widget reads.\n */\n\n/** What the `marketingInsights` zone hands this widget. */\nexport interface AiMarketingInsightButtonProps extends ConsoleWidgetEntitlementProps {\n hostId: string | null\n subject: 'conversions' | 'campaign'\n campaign: string | null\n}\n\n/** What the button reads. */\nexport const AI_MARKETING_INSIGHT_LABEL = 'Ask AI about these numbers'\n\n/** The question the dialog opens on, from what the report is about. */\nexport function aiMarketingInsightQuestion(\n subject: AiMarketingInsightButtonProps['subject'],\n campaign: string | null,\n): string {\n if (subject === 'campaign' && campaign) {\n return `How did the campaign “${campaign}” do — what did it cause, and what did it earn?`\n }\n return 'Which campaigns brought in the most conversions, and what did they earn?'\n}\n\nexport function AiMarketingInsightButton(props: AiMarketingInsightButtonProps) {\n const { hostId, subject, campaign } = props\n const { data: user } = useUser()\n const orgId = useHostOrgId(hostId ?? undefined) ?? undefined\n const { orgSlug, subdomain } = useConsoleHostRoute(hostId)\n const [open, setOpen] = useState(false)\n\n // The figures are one site's: with no site there is nothing to read.\n if (!hostId) return null\n // Drawn from the shell's gates alone (AGL-3601): nothing asks a server until\n // it is used, and a plan without the add-on gets the add-on's dialog.\n if (props.entitled === false) {\n return props.upgrade ? (\n <AiUpsellButton kind=\"insight\" label={AI_MARKETING_INSIGHT_LABEL} upgrade={props.upgrade} />\n ) : null\n }\n if (!orgId) return null\n\n return (\n <>\n <Button\n size=\"small\"\n variant=\"outlined\"\n startIcon={<MdiIcon path={mdiCreation.path} />}\n onClick={() => setOpen(true)}\n >\n {AI_MARKETING_INSIGHT_LABEL}\n </Button>\n <AiInsightDialog\n open={open}\n onClose={() => setOpen(false)}\n orgId={orgId}\n orgSlug={orgSlug ?? ''}\n hostId={hostId}\n host={subdomain}\n surface=\"marketing\"\n user={user}\n uid={user?.uid ?? null}\n question={aiMarketingInsightQuestion(subject, campaign)}\n />\n </>\n )\n}\nAiMarketingInsightButton.displayName = 'AiMarketingInsightButton'\n\nexport default AiMarketingInsightButton\n"],"names":["mdiCreation","MdiIcon","useConsoleHostRoute","useHostOrgId","useUser","Button","useState","AiInsightDialog","AiUpsellButton","AI_MARKETING_INSIGHT_LABEL","aiMarketingInsightQuestion","subject","campaign","AiMarketingInsightButton","props","hostId","data","user","orgId","undefined","orgSlug","subdomain","open","setOpen","entitled","upgrade","kind","label","size","variant","startIcon","path","onClick","onClose","host","surface","uid","question","displayName"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GACD;;AAGA,SAASA,WAAW,QAAQ,yBAAwB;AACpD,SAASC,OAAO,QAAQ,uBAAsB;AAC9C,SAASC,mBAAmB,EAAEC,YAAY,EAAEC,OAAO,QAAQ,iCAAgC;AAC3F,SAASC,MAAM,QAAQ,gBAAe;AACtC,SAASC,QAAQ,QAAQ,QAAO;AAChC,SAASC,eAAe,QAAQ,mCAA+B;AAC/D,SAASC,cAAc,QAAQ,kCAA8B;AAwB7D,2BAA2B,GAC3B,OAAO,MAAMC,6BAA6B,6BAA4B;AAEtE,qEAAqE,GACrE,OAAO,SAASC,2BACdC,OAAiD,EACjDC,QAAuB;IAEvB,IAAID,YAAY,cAAcC,UAAU;QACtC,OAAO,CAAC,sBAAsB,EAAEA,SAAS,+CAA+C,CAAC;IAC3F;IACA,OAAO;AACT;AAEA,OAAO,SAASC,yBAAyBC,KAAoC;QAG7DX;IAFd,MAAM,EAAEY,MAAM,EAAEJ,OAAO,EAAEC,QAAQ,EAAE,GAAGE;IACtC,MAAM,EAAEE,MAAMC,IAAI,EAAE,GAAGb;IACvB,MAAMc,SAAQf,gBAAAA,aAAaY,iBAAAA,SAAUI,sBAAvBhB,gBAAqCgB;IACnD,MAAM,EAAEC,OAAO,EAAEC,SAAS,EAAE,GAAGnB,oBAAoBa;IACnD,MAAM,CAACO,MAAMC,QAAQ,GAAGjB,SAAS;IAEjC,qEAAqE;IACrE,IAAI,CAACS,QAAQ,OAAO;IACpB,6EAA6E;IAC7E,sEAAsE;IACtE,IAAID,MAAMU,QAAQ,KAAK,OAAO;QAC5B,OAAOV,MAAMW,OAAO,iBAClB,KAACjB;YAAekB,MAAK;YAAUC,OAAOlB;YAA4BgB,SAASX,MAAMW,OAAO;aACtF;IACN;IACA,IAAI,CAACP,OAAO,OAAO;IAEnB,qBACE;;0BACE,KAACb;gBACCuB,MAAK;gBACLC,SAAQ;gBACRC,yBAAW,KAAC7B;oBAAQ8B,MAAM/B,YAAY+B,IAAI;;gBAC1CC,SAAS,IAAMT,QAAQ;0BAEtBd;;0BAEH,KAACF;gBACCe,MAAMA;gBACNW,SAAS,IAAMV,QAAQ;gBACvBL,OAAOA;gBACPE,OAAO,EAAEA,kBAAAA,UAAW;gBACpBL,QAAQA;gBACRmB,MAAMb;gBACNc,SAAQ;gBACRlB,MAAMA;gBACNmB,GAAG,UAAEnB,wBAAAA,KAAMmB,GAAG,mBAAI;gBAClBC,UAAU3B,2BAA2BC,SAASC;;;;AAItD;AACAC,yBAAyByB,WAAW,GAAG;AAEvC,eAAezB,yBAAwB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import type { ConsoleMediaLibraryZoneProps } from '@aglyn/aglyn/plugin-manager/feature-plugins';
|
|
18
|
+
import { type AiImageMode, type AiSvgStyle } from '../providers/image-contract';
|
|
19
|
+
/**
|
|
20
|
+
* "Create with AI" in Media (AGL-3602): pictures from a description, added to
|
|
21
|
+
* the library that is open, through the `mediaLibrary` zone beside Upload
|
|
22
|
+
* media and in the library's empty state.
|
|
23
|
+
*
|
|
24
|
+
* It draws from the shell's gates alone — the plan, the member's
|
|
25
|
+
* `ai.generate`, the plugin being on for the workspace and the site — and asks
|
|
26
|
+
* no server anything until someone creates a picture: the door decides then,
|
|
27
|
+
* and the dialog says what it decided. Two modes: an Illustration (an SVG the
|
|
28
|
+
* text AI draws, wherever text AI runs) and, where the deployment makes them,
|
|
29
|
+
* a Photo.
|
|
30
|
+
*/
|
|
31
|
+
/** Where the shell sends a reader to buy what the plan lacks (AGL-3601). */
|
|
32
|
+
export interface AiMediaUpgrade {
|
|
33
|
+
billingHref: string;
|
|
34
|
+
canManageBilling: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface AiMediaCreateButtonProps extends ConsoleMediaLibraryZoneProps {
|
|
37
|
+
/**
|
|
38
|
+
* `false` when the shell mounted this as its own upsell: the plan lacks AI
|
|
39
|
+
* generation and an add-on would grant it. Absent means entitled.
|
|
40
|
+
*/
|
|
41
|
+
entitled?: boolean;
|
|
42
|
+
upgrade?: AiMediaUpgrade;
|
|
43
|
+
}
|
|
44
|
+
/** The words each kind of illustration is offered in. */
|
|
45
|
+
export declare const AI_SVG_STYLE_LABELS: Record<AiSvgStyle, string>;
|
|
46
|
+
/** The sentence the estimate reads as, before anything is spent. */
|
|
47
|
+
export declare function aiMediaCreditEstimate(mode: AiImageMode, count: number): string;
|
|
48
|
+
export declare function AiMediaCreateButton(props: AiMediaCreateButtonProps): import("react").JSX.Element;
|
|
49
|
+
export interface AiMediaCreateDialogProps extends Pick<ConsoleMediaLibraryZoneProps, 'hostId' | 'library' | 'folderId' | 'onCreated'> {
|
|
50
|
+
open: boolean;
|
|
51
|
+
onClose: () => void;
|
|
52
|
+
orgId: string;
|
|
53
|
+
}
|
|
54
|
+
export declare function AiMediaCreateDialog({ open, onClose, orgId, hostId, library, folderId, onCreated, }: AiMediaCreateDialogProps): import("react").JSX.Element;
|
|
55
|
+
export default AiMediaCreateButton;
|