@aglyn/plugins-ai 1.0.0-beta.234 → 1.0.0-beta.235
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/package.json +17 -17
- package/src/lib/activity/ai-activity-actions.d.ts +25 -0
- package/src/lib/activity/ai-activity-actions.js +85 -4
- package/src/lib/activity/ai-activity-actions.js.map +1 -1
- package/src/lib/components/ai-brief-dialog.component.js +46 -2
- package/src/lib/components/ai-brief-dialog.component.js.map +1 -1
- package/src/lib/components/ai-campaign-create.component.js +1 -1
- package/src/lib/components/ai-campaign-create.component.js.map +1 -1
- package/src/lib/components/ai-credits-card.component.js +3 -3
- package/src/lib/components/ai-credits-card.component.js.map +1 -1
- package/src/lib/components/ai-crm-email-draft.component.js +1 -1
- package/src/lib/components/ai-crm-email-draft.component.js.map +1 -1
- package/src/lib/components/ai-crm-import-mapping.component.js +1 -1
- package/src/lib/components/ai-crm-import-mapping.component.js.map +1 -1
- package/src/lib/components/ai-crm-record-card.component.js +1 -1
- package/src/lib/components/ai-crm-record-card.component.js.map +1 -1
- package/src/lib/components/ai-describe-automation.component.js +4 -2
- package/src/lib/components/ai-describe-automation.component.js.map +1 -1
- package/src/lib/components/ai-describe-org-automation.component.js +1 -1
- package/src/lib/components/ai-describe-org-automation.component.js.map +1 -1
- package/src/lib/components/ai-experiment-cards.component.js +2 -2
- package/src/lib/components/ai-experiment-cards.component.js.map +1 -1
- package/src/lib/components/ai-explain-automation.component.js +1 -1
- package/src/lib/components/ai-explain-automation.component.js.map +1 -1
- package/src/lib/components/ai-insight-card.component.js +3 -1
- package/src/lib/components/ai-insight-card.component.js.map +1 -1
- package/src/lib/components/ai-jobs-list-page.component.d.ts +6 -1
- package/src/lib/components/ai-jobs-list-page.component.js +15 -2
- package/src/lib/components/ai-jobs-list-page.component.js.map +1 -1
- package/src/lib/components/ai-logic.component.js +5 -3
- package/src/lib/components/ai-logic.component.js.map +1 -1
- package/src/lib/components/ai-media-create.component.js +88 -16
- package/src/lib/components/ai-media-create.component.js.map +1 -1
- package/src/lib/components/ai-model-selector.component.js +8 -0
- package/src/lib/components/ai-model-selector.component.js.map +1 -1
- package/src/lib/components/ai-overlay-cards.component.js +2 -2
- package/src/lib/components/ai-overlay-cards.component.js.map +1 -1
- package/src/lib/components/ai-product-copy-card.component.js +2 -1
- package/src/lib/components/ai-product-copy-card.component.js.map +1 -1
- package/src/lib/components/ai-products-hub-card.component.js +2 -1
- package/src/lib/components/ai-products-hub-card.component.js.map +1 -1
- package/src/lib/components/ai-revise-automation.component.js +1 -1
- package/src/lib/components/ai-revise-automation.component.js.map +1 -1
- package/src/lib/components/ai-seo-fields-card.component.js +7 -3
- package/src/lib/components/ai-seo-fields-card.component.js.map +1 -1
- package/src/lib/components/ai-site-batch-card.component.js +7 -4
- package/src/lib/components/ai-site-batch-card.component.js.map +1 -1
- package/src/lib/components/ai-site-build-page.component.js +7 -3
- package/src/lib/components/ai-site-build-page.component.js.map +1 -1
- package/src/lib/components/ai-site-seo-start-card.component.js +7 -4
- package/src/lib/components/ai-site-seo-start-card.component.js.map +1 -1
- package/src/lib/components/ai-site-start-card.component.js +62 -29
- package/src/lib/components/ai-site-start-card.component.js.map +1 -1
- package/src/lib/components/ai-theme-proposal-card.component.js +1 -0
- package/src/lib/components/ai-theme-proposal-card.component.js.map +1 -1
- package/src/lib/components/ai-upsell-dialog.component.js +17 -3
- package/src/lib/components/ai-upsell-dialog.component.js.map +1 -1
- package/src/lib/components/ai-usage-strip.component.js +13 -2
- package/src/lib/components/ai-usage-strip.component.js.map +1 -1
- package/src/lib/components/assist-build-card.component.js +20 -3
- package/src/lib/components/assist-build-card.component.js.map +1 -1
- package/src/lib/components/assist-jobs-drawer.component.js +7 -1
- package/src/lib/components/assist-jobs-drawer.component.js.map +1 -1
- package/src/lib/components/billing-ai-allotments.component.js +2 -2
- package/src/lib/components/billing-ai-allotments.component.js.map +1 -1
- package/src/lib/components/billing-ai-top-users.component.js +1 -0
- package/src/lib/components/billing-ai-top-users.component.js.map +1 -1
- package/src/lib/components/billing-assist-overage-card.component.js +2 -2
- package/src/lib/components/billing-assist-overage-card.component.js.map +1 -1
- package/src/lib/components/host-ai-allotments.component.js +2 -2
- package/src/lib/components/host-ai-allotments.component.js.map +1 -1
- package/src/lib/components/member-ai-allotment-card.component.js +2 -2
- package/src/lib/components/member-ai-allotment-card.component.js.map +1 -1
- package/src/lib/components/staff-org-ai-card.component.js +1 -0
- package/src/lib/components/staff-org-ai-card.component.js.map +1 -1
- package/src/lib/components/staff-org-ai-conversations.component.d.ts +9 -3
- package/src/lib/components/staff-org-ai-conversations.component.js +174 -83
- package/src/lib/components/staff-org-ai-conversations.component.js.map +1 -1
- package/src/lib/components/staff-user-ai-usage-card.component.js +2 -1
- package/src/lib/components/staff-user-ai-usage-card.component.js.map +1 -1
- package/src/lib/jobs/ai-job-layout-language.js +4 -1
- package/src/lib/jobs/ai-job-layout-language.js.map +1 -1
- package/src/lib/jobs/ai-job-layout-site-pages.d.ts +12 -0
- package/src/lib/jobs/ai-job-layout-site-pages.js +20 -0
- package/src/lib/jobs/ai-job-layout-site-pages.js.map +1 -1
- package/src/lib/jobs/ai-job-page-language.d.ts +10 -1
- package/src/lib/jobs/ai-job-page-language.js +41 -8
- package/src/lib/jobs/ai-job-page-language.js.map +1 -1
- package/src/lib/jobs/ai-job-page-step.js +14 -3
- package/src/lib/jobs/ai-job-page-step.js.map +1 -1
- package/src/lib/jobs/ai-job-site-content.d.ts +75 -7
- package/src/lib/jobs/ai-job-site-content.js +205 -32
- package/src/lib/jobs/ai-job-site-content.js.map +1 -1
- package/src/lib/jobs/ai-job-site-step.d.ts +8 -0
- package/src/lib/jobs/ai-job-site-step.js +61 -12
- package/src/lib/jobs/ai-job-site-step.js.map +1 -1
- package/src/lib/layout-language/ai-layout-compiler.d.ts +8 -0
- package/src/lib/layout-language/ai-layout-compiler.js +308 -10
- package/src/lib/layout-language/ai-layout-compiler.js.map +1 -1
- package/src/lib/layout-language/ai-layout-design.d.ts +7 -0
- package/src/lib/layout-language/ai-layout-design.js +23 -11
- package/src/lib/layout-language/ai-layout-design.js.map +1 -1
- package/src/lib/layout-language/ai-layout-frame.d.ts +6 -0
- package/src/lib/layout-language/ai-layout-frame.js +12 -3
- package/src/lib/layout-language/ai-layout-frame.js.map +1 -1
- package/src/lib/layout-language/ai-layout-gaps.js +18 -2
- package/src/lib/layout-language/ai-layout-gaps.js.map +1 -1
- package/src/lib/layout-language/ai-layout-links.d.ts +26 -1
- package/src/lib/layout-language/ai-layout-links.js +24 -4
- package/src/lib/layout-language/ai-layout-links.js.map +1 -1
- package/src/lib/layout-language/ai-layout-listings.d.ts +125 -0
- package/src/lib/layout-language/ai-layout-listings.js +187 -0
- package/src/lib/layout-language/ai-layout-listings.js.map +1 -0
- package/src/lib/model/ai-site-build-progress.js +27 -12
- package/src/lib/model/ai-site-build-progress.js.map +1 -1
- package/src/lib/model/ai-site-job.d.ts +33 -8
- package/src/lib/model/ai-site-job.js +38 -18
- package/src/lib/model/ai-site-job.js.map +1 -1
- package/src/lib/model/ai-site-kinds.d.ts +30 -8
- package/src/lib/model/ai-site-kinds.js +731 -117
- package/src/lib/model/ai-site-kinds.js.map +1 -1
- package/src/lib/model/ai-site-start-seo.d.ts +30 -0
- package/src/lib/model/ai-site-start-seo.js +132 -11
- package/src/lib/model/ai-site-start-seo.js.map +1 -1
- package/src/lib/model/ai-site-start.d.ts +2 -2
- package/src/lib/model/ai-site-start.js +3 -3
- package/src/lib/model/ai-site-start.js.map +1 -1
- package/src/lib/plugin.js +15 -3
- package/src/lib/plugin.js.map +1 -1
- package/src/lib/runtime/ai-palette.generated.js +13 -3
- package/src/lib/runtime/ai-palette.generated.js.map +1 -1
- package/src/lib/server/ai-admin-conversations.d.ts +9 -0
- package/src/lib/server/ai-admin-conversations.js +151 -9
- package/src/lib/server/ai-admin-conversations.js.map +1 -1
- package/src/lib/usage/staff-org-ai-conversations.d.ts +23 -0
- package/src/lib/usage/staff-org-ai-conversations.js +45 -0
- package/src/lib/usage/staff-org-ai-conversations.js.map +1 -1
package/src/lib/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../libs/plugins/ai/src/lib/plugin.ts"],"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\nimport { PLATFORM_BRAND_NAME, aiAddonName, registerConsoleExtension } from '@aglyn/aglyn'\nimport { LinearProgress } from '@mui/material'\nimport { createElement } from 'react'\nimport { AiAssistProviderOnHost } from './components/ai-assist-provider-on-host.component'\nimport { AI_PLUGIN_ID } from './constants'\nimport { registerAiDeclarations } from './declarations'\nimport { lazyWidget } from './lazy-widget'\n\n/*\n * Every component below is registered by name and loaded the first time the\n * shell draws it (AGL-3649); see `lazyWidget`. The console loads this plugin\n * on every screen, so a static import of a component here is downloaded by\n * every reader of every page, staff cards included.\n */\n\n/** What a page shows while its code arrives. */\nconst PAGE_LOADING = createElement(LinearProgress, { 'aria-label': 'Loading' })\n\nconst AiCollaboratorPermissionsCell = lazyWidget(\n 'AiCollaboratorPermissionsCell',\n () =>\n import('./components/ai-collaborator-permissions-column.component').then(\n (m) => m.AiCollaboratorPermissionsCell,\n ),\n)\nconst AiSaveAsComponent = lazyWidget('AiSaveAsComponent', () =>\n import('./components/ai-save-as-component.component').then(\n (m) => m.AiSaveAsComponent,\n ),\n)\nconst AiGenerateSectionControl = lazyWidget('AiGenerateSectionControl', () =>\n import('./components/besigner-ai-controls.component').then(\n (m) => m.AiGenerateSectionControl,\n ),\n)\nconst AiRewriteControl = lazyWidget('AiRewriteControl', () =>\n import('./components/besigner-ai-controls.component').then(\n (m) => m.AiRewriteControl,\n ),\n)\nconst AssistPanelOnHost = lazyWidget('AssistPanelOnHost', () =>\n import('./components/ai-permissions-on-host.component').then(\n (m) => m.AssistPanelOnHost,\n ),\n)\nconst AiCreditsCard = lazyWidget('AiCreditsCard', () =>\n import('./components/ai-credits-card.component').then((m) => m.default),\n)\nconst AiJobsTopBarIndicator = lazyWidget('AiJobsTopBarIndicator', () =>\n import('./components/ai-jobs-indicator.component').then((m) => m.default),\n)\nconst AiCollaboratorCreditsCell = lazyWidget('AiCollaboratorCreditsCell', () =>\n import('./components/ai-credits-columns.component').then(\n (m) => m.AiCollaboratorCreditsCell,\n ),\n)\nconst AiCollaboratorCreditsHeader = lazyWidget(\n 'AiCollaboratorCreditsHeader',\n () =>\n import('./components/ai-credits-columns.component').then(\n (m) => m.AiCollaboratorCreditsHeader,\n ),\n)\nconst AiMemberCreditsCell = lazyWidget('AiMemberCreditsCell', () =>\n import('./components/ai-credits-columns.component').then(\n (m) => m.AiMemberCreditsCell,\n ),\n)\nconst AiMemberCreditsHeader = lazyWidget('AiMemberCreditsHeader', () =>\n import('./components/ai-credits-columns.component').then(\n (m) => m.AiMemberCreditsHeader,\n ),\n)\nconst AssistSignalsPage = lazyWidget(\n 'AssistSignalsPage',\n () =>\n import('./components/assist-signals-page.component').then(\n (m) => m.AssistSignalsPage,\n ),\n PAGE_LOADING,\n)\nconst BillingAssistOverageCard = lazyWidget('BillingAssistOverageCard', () =>\n import('./components/billing-assist-overage-card.component').then(\n (m) => m.default,\n ),\n)\nconst AiTopUsersCard = lazyWidget('AiTopUsersCard', () =>\n import('./components/billing-ai-top-users.component').then(\n (m) => m.AiTopUsersCard,\n ),\n)\nconst AiAllotmentsCard = lazyWidget('AiAllotmentsCard', () =>\n import('./components/billing-ai-allotments.component').then(\n (m) => m.AiAllotmentsCard,\n ),\n)\nconst AiCollaboratorAllotmentCell = lazyWidget(\n 'AiCollaboratorAllotmentCell',\n () =>\n import('./components/host-ai-allotments.component').then(\n (m) => m.AiCollaboratorAllotmentCell,\n ),\n)\nconst AiCollaboratorAllotmentHeader = lazyWidget(\n 'AiCollaboratorAllotmentHeader',\n () =>\n import('./components/host-ai-allotments.component').then(\n (m) => m.AiCollaboratorAllotmentHeader,\n ),\n)\nconst AiSiteAllotmentCard = lazyWidget('AiSiteAllotmentCard', () =>\n import('./components/host-ai-allotments.component').then(\n (m) => m.AiSiteAllotmentCard,\n ),\n)\nconst MemberAiAllotmentCard = lazyWidget('MemberAiAllotmentCard', () =>\n import('./components/member-ai-allotment-card.component').then(\n (m) => m.default,\n ),\n)\nconst MemberAiUsageCard = lazyWidget('MemberAiUsageCard', () =>\n import('./components/member-ai-usage-card.component').then((m) => m.default),\n)\nconst AiThemeProposalCard = lazyWidget('AiThemeProposalCard', () =>\n import('./components/ai-theme-proposal-card.component').then(\n (m) => m.default,\n ),\n)\nconst StaffOrgAiCard = lazyWidget('StaffOrgAiCard', () =>\n import('./components/staff-org-ai-card.component').then((m) => m.default),\n)\nconst StaffOrgAiConversations = lazyWidget('StaffOrgAiConversations', () =>\n import('./components/staff-org-ai-conversations.component').then((m) => m.default),\n)\nconst StaffOrgUsageAiCreditsCell = lazyWidget(\n 'StaffOrgUsageAiCreditsCell',\n () =>\n import('./components/staff-org-usage-ai-columns.component').then(\n (m) => m.StaffOrgUsageAiCreditsCell,\n ),\n)\nconst StaffOrgUsageAiOverageCell = lazyWidget(\n 'StaffOrgUsageAiOverageCell',\n () =>\n import('./components/staff-org-usage-ai-columns.component').then(\n (m) => m.StaffOrgUsageAiOverageCell,\n ),\n)\nconst StaffOrgUsageAiPool = lazyWidget('StaffOrgUsageAiPool', () =>\n import('./components/staff-org-usage-ai-columns.component').then(\n (m) => m.StaffOrgUsageAiPool,\n ),\n)\nconst StaffOrgUsageAssistCell = lazyWidget('StaffOrgUsageAssistCell', () =>\n import('./components/staff-org-usage-ai-columns.component').then(\n (m) => m.StaffOrgUsageAssistCell,\n ),\n)\nconst StaffOrgsAiSpendCell = lazyWidget('StaffOrgsAiSpendCell', () =>\n import('./components/staff-orgs-ai-spend-column.component').then(\n (m) => m.StaffOrgsAiSpendCell,\n ),\n)\nconst StaffOrgsAiSpendHeader = lazyWidget('StaffOrgsAiSpendHeader', () =>\n import('./components/staff-orgs-ai-spend-column.component').then(\n (m) => m.StaffOrgsAiSpendHeader,\n ),\n)\nconst StaffUserAiUsageCard = lazyWidget('StaffUserAiUsageCard', () =>\n import('./components/staff-user-ai-usage-card.component').then(\n (m) => m.default,\n ),\n)\nconst AiSeoAuditCard = lazyWidget('AiSeoAuditCard', () =>\n import('./components/ai-seo-audit-card.component').then((m) => m.default),\n)\nconst AiSiteBatchCard = lazyWidget('AiSiteBatchCard', () =>\n import('./components/ai-site-batch-card.component').then((m) => m.default),\n)\nconst AiSiteSeoStartCard = lazyWidget('AiSiteSeoStartCard', () =>\n import('./components/ai-site-seo-start-card.component').then(\n (m) => m.default,\n ),\n)\nconst AiSiteMemoryCard = lazyWidget('AiSiteMemoryCard', () =>\n import('./components/ai-site-memory-card.component').then((m) => m.default),\n)\nconst AiSiteStartCard = lazyWidget('AiSiteStartCard', () =>\n import('./components/ai-site-start-card.component').then((m) => m.default),\n)\nconst AiSeoFieldsCard = lazyWidget('AiSeoFieldsCard', () =>\n import('./components/ai-seo-fields-card.component').then((m) => m.default),\n)\nconst AiDescribeAutomationButton = lazyWidget(\n 'AiDescribeAutomationButton',\n () =>\n import('./components/ai-describe-automation.component').then(\n (m) => m.default,\n ),\n)\nconst AiReviseAutomation = lazyWidget('AiReviseAutomation', () =>\n import('./components/ai-revise-automation.component').then((m) => m.default),\n)\nconst AiDescribeOrgAutomationButton = lazyWidget(\n 'AiDescribeOrgAutomationButton',\n () =>\n import('./components/ai-describe-org-automation.component').then(\n (m) => m.default,\n ),\n)\nconst AiInsightHostCard = lazyWidget('AiInsightHostCard', () =>\n import('./components/ai-insight-card.component').then(\n (m) => m.AiInsightHostCard,\n ),\n)\nconst AiInsightOrgCard = lazyWidget('AiInsightOrgCard', () =>\n import('./components/ai-insight-card.component').then(\n (m) => m.AiInsightOrgCard,\n ),\n)\nconst AiLogicCreateButton = lazyWidget('AiLogicCreateButton', () =>\n import('./components/ai-logic.component').then((m) => m.AiLogicCreateButton),\n)\nconst AiLogicFixReference = lazyWidget('AiLogicFixReference', () =>\n import('./components/ai-logic.component').then((m) => m.AiLogicFixReference),\n)\nconst AiLogicFunctionTools = lazyWidget('AiLogicFunctionTools', () =>\n import('./components/ai-logic.component').then((m) => m.AiLogicFunctionTools),\n)\nconst AiFunnelAskButton = lazyWidget('AiFunnelAskButton', () =>\n import('./components/ai-funnel-zones.component').then(\n (m) => m.AiFunnelAskButton,\n ),\n)\nconst AiFunnelCreateButton = lazyWidget('AiFunnelCreateButton', () =>\n import('./components/ai-funnel-zones.component').then(\n (m) => m.AiFunnelCreateButton,\n ),\n)\nconst AiCrmEmailDraft = lazyWidget('AiCrmEmailDraft', () =>\n import('./components/ai-crm-email-draft.component').then((m) => m.default),\n)\nconst AiCrmImportMapping = lazyWidget('AiCrmImportMapping', () =>\n import('./components/ai-crm-import-mapping.component').then((m) => m.default),\n)\nconst AiCrmRecordCard = lazyWidget('AiCrmRecordCard', () =>\n import('./components/ai-crm-record-card.component').then((m) => m.default),\n)\nconst AiDescribePageButton = lazyWidget('AiDescribePageButton', () =>\n import('./components/ai-describe-page.component').then((m) => m.default),\n)\nconst AiMediaCreateButton = lazyWidget('AiMediaCreateButton', () =>\n import('./components/ai-media-create.component').then((m) => m.default),\n)\nconst AiDescribeComponentButton = lazyWidget('AiDescribeComponentButton', () =>\n import('./components/ai-describe-button.component').then(\n (m) => m.AiDescribeComponentButton,\n ),\n)\nconst AiDescribeFormButton = lazyWidget('AiDescribeFormButton', () =>\n import('./components/ai-describe-button.component').then(\n (m) => m.AiDescribeFormButton,\n ),\n)\nconst AiDescribeLayoutButton = lazyWidget('AiDescribeLayoutButton', () =>\n import('./components/ai-describe-button.component').then(\n (m) => m.AiDescribeLayoutButton,\n ),\n)\nconst AiDescribeTemplateButton = lazyWidget('AiDescribeTemplateButton', () =>\n import('./components/ai-describe-button.component').then(\n (m) => m.AiDescribeTemplateButton,\n ),\n)\nconst AiDescribeEmailButton = lazyWidget('AiDescribeEmailButton', () =>\n import('./components/ai-describe-email.component').then(\n (m) => m.AiDescribeEmailButton,\n ),\n)\nconst AiExperimentResultCard = lazyWidget('AiExperimentResultCard', () =>\n import('./components/ai-experiment-cards.component').then(\n (m) => m.AiExperimentResultCard,\n ),\n)\nconst AiExperimentVariantsCard = lazyWidget('AiExperimentVariantsCard', () =>\n import('./components/ai-experiment-cards.component').then(\n (m) => m.AiExperimentVariantsCard,\n ),\n)\nconst AiExplainAutomation = lazyWidget('AiExplainAutomation', () =>\n import('./components/ai-explain-automation.component').then(\n (m) => m.AiExplainAutomation,\n ),\n)\nconst AiExplainRunFailure = lazyWidget('AiExplainRunFailure', () =>\n import('./components/ai-explain-automation.component').then(\n (m) => m.AiExplainRunFailure,\n ),\n)\nconst AiCreateCampaignButton = lazyWidget('AiCreateCampaignButton', () =>\n import('./components/ai-campaign-create.component').then((m) => m.default),\n)\nconst AiMarketingInsightButton = lazyWidget('AiMarketingInsightButton', () =>\n import('./components/ai-marketing-insight.component').then((m) => m.default),\n)\nconst AiCreateOverlayButton = lazyWidget('AiCreateOverlayButton', () =>\n import('./components/ai-overlay-cards.component').then(\n (m) => m.AiCreateOverlayButton,\n ),\n)\nconst AiOverlayEditorCard = lazyWidget('AiOverlayEditorCard', () =>\n import('./components/ai-overlay-cards.component').then(\n (m) => m.AiOverlayEditorCard,\n ),\n)\nconst AiProductCopyCard = lazyWidget('AiProductCopyCard', () =>\n import('./components/ai-product-copy-card.component').then((m) => m.default),\n)\nconst AiProductImportOption = lazyWidget('AiProductImportOption', () =>\n import('./components/ai-product-import-option.component').then(\n (m) => m.default,\n ),\n)\nconst AiProductsHubCard = lazyWidget('AiProductsHubCard', () =>\n import('./components/ai-products-hub-card.component').then((m) => m.default),\n)\nconst AiCreateProductsButton = lazyWidget('AiCreateProductsButton', () =>\n import('./components/ai-products-create-button.component').then(\n (m) => m.default,\n ),\n)\nconst AiJobsPage = lazyWidget(\n 'AiJobsPage',\n () => import('./components/ai-jobs-page.component').then((m) => m.default),\n PAGE_LOADING,\n)\n\n/**\n * The Aglyn AI plugin's console half (AGL-2939): the assistant dock, the\n * besigner copy assistant's provider, the billing, member and staff cards,\n * the member tables' credit columns and the Assist signal staff page — each\n * mounted through a shell-owned zone (AGL-2940) or the staff area's generic\n * route, so no console page imports this plugin.\n *\n * No `featureFlag` on the extension: the plugin's doors are gated one by\n * one — the dock reads the `release_assist` verdict the shell hands it, the\n * generative doors answer 404 behind `release_ai_generative`, the billing\n * cards render only where the plan sells a band — and a flag here would\n * switch off the released doors with the unreleased ones.\n */\nexport function registerAiConsole(): void {\n registerAiDeclarations()\n registerConsoleExtension({\n pluginId: AI_PLUGIN_ID,\n displayName: 'AI',\n // The besigner copy assistant (AGL-89/419): mounted by the shell around\n // every console page, and opened by this plugin's besigner controls.\n providers: [AiAssistProviderOnHost],\n // The Assist docs-gap and cost board (AGL-1860, AGL-2252), at the staff\n // URL and under the tab it has always had.\n staffPages: [\n {\n id: 'assist-signals',\n label: 'Assist signal',\n header: {\n // The configured brand, not ours (AGL-2153/2260): a white-label\n // deployment and a self-host operator both read this header.\n title: `${PLATFORM_BRAND_NAME} Assist Signal`,\n docsTopic: 'assistSignals',\n },\n Component: AssistSignalsPage,\n },\n ],\n // A site's AI jobs (AGL-3596), an address under the site and no tab:\n // `/ai-jobs` lists them, and `/ai-jobs/{jobId}` is one job's page —\n // \"Building your site\" (AGL-3594), where the guided start lands a person\n // and where a site job's notification opens. The `href` is a literal,\n // `AI_SITE_BUILD_HREF`'s value, because the tab-title manifest is read\n // from this source (`ai-jobs-page.spec.tsx` holds the two equal).\n navItems: [\n {\n label: 'AI jobs',\n href: '/ai-jobs',\n recordTitle: 'Building your site',\n header: { title: 'AI jobs', docsTopic: 'howAglynAiBuilds', docsAnchor: '#finding-your-ai-jobs' },\n unlisted: true,\n ownsSubtree: true,\n permission: 'ai.generate',\n Component: AiJobsPage,\n },\n ],\n widgets: [\n {\n slot: 'consoleDock',\n widgetId: 'ai-assist-dock',\n title: 'Assistant',\n Component: AssistPanelOnHost,\n },\n // The AI jobs indicator (AGL-3593), beside the notifications bell on\n // every page: what the workspace's jobs are doing, and the way to them.\n // Gated as the other generative widgets are; it asks the shell for the\n // release flags of the jobs and of the panel it opens.\n {\n slot: 'consoleTopBar',\n widgetId: 'ai-jobs-indicator',\n title: 'AI jobs',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiJobsTopBarIndicator,\n },\n {\n slot: 'orgBillingUsage',\n widgetId: 'ai-credits-meter',\n title: 'AI credits',\n Component: AiCreditsCard,\n },\n {\n slot: 'orgBillingUsage',\n widgetId: 'ai-credits-overage',\n title: 'AI credits overage',\n Component: BillingAssistOverageCard,\n },\n // The per-member usage (AGL-2928): who drew the credits the meter\n // counts, on Billing → Usage, on each member's page, on the staff\n // user page, and as a column of both member tables.\n {\n slot: 'orgBillingUsage',\n widgetId: 'ai-usage-by-member',\n title: 'Who is generating what',\n permission: 'billing.view',\n Component: AiTopUsersCard,\n },\n // The collaborators table's AI column (AGL-2927): whether each person\n // may open the AI doors on the site, per site, ahead of the columns\n // that report what they drew.\n {\n slot: 'hostMembers',\n widgetId: 'ai-collaborator-permissions',\n title: 'AI',\n column: { header: 'AI' },\n Component: AiCollaboratorPermissionsCell,\n },\n // The copy assistant's besigner controls (AGL-89, AGL-169): Generate a\n // section on every editor's toolbar, and Rewrite with AI under the\n // selected element's fields. Each opens the provider's dialog, and is\n // drawn only while the reader holds the door's permission.\n {\n slot: 'besignerToolbar',\n widgetId: 'ai-generate-section',\n title: 'Generate a section with AI',\n Component: AiGenerateSectionControl,\n },\n {\n slot: 'besignerInspector',\n widgetId: 'ai-rewrite-copy',\n title: 'Rewrite with AI',\n Component: AiRewriteControl,\n },\n // Save the selection as a reusable component (AGL-2908): the component\n // job's second entry point, which proposes the properties a section\n // should declare and applies them as the manual promote does.\n {\n slot: 'besignerInspector',\n widgetId: 'ai-save-as-component',\n title: 'Make a reusable component with AI',\n permission: 'ai.generate',\n Component: AiSaveAsComponent,\n },\n {\n slot: 'orgMember',\n widgetId: 'ai-member-usage',\n title: 'AI usage',\n Component: MemberAiUsageCard,\n },\n // The allotments (AGL-2942): a member's or a site's monthly share of\n // the pool, set on Billing → Usage, on each member's page and on a\n // site's collaborators card — each card asks the route what its\n // reader may see and change.\n {\n slot: 'orgBillingUsage',\n widgetId: 'ai-allotments',\n title: 'AI allotments',\n permission: 'billing.view',\n Component: AiAllotmentsCard,\n },\n {\n slot: 'orgMember',\n widgetId: 'ai-member-allotment',\n title: 'AI allotment',\n Component: MemberAiAllotmentCard,\n },\n {\n slot: 'hostMembers',\n widgetId: 'ai-collaborator-allotment',\n title: 'AI allotment',\n column: {\n header: 'AI allotment',\n align: 'right',\n Header: AiCollaboratorAllotmentHeader,\n },\n Component: AiCollaboratorAllotmentCell,\n },\n {\n slot: 'hostMembers',\n widgetId: 'ai-site-allotment',\n title: 'Site AI allotment',\n Component: AiSiteAllotmentCard,\n },\n // Themes by AI (AGL-2938): a brief on the site's Theme section, a\n // proposal previewed before and after, and the editor's own Save to\n // keep it. Generation is sold as `aiGenerative` and held by\n // `ai.generate`, so the shell withholds the card from a plan or a\n // member without either; the card itself asks the route about the\n // release flag before it shows anything.\n {\n slot: 'hostTheme',\n widgetId: 'ai-theme-proposal',\n title: 'Theme assistant',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiThemeProposalCard,\n },\n {\n slot: 'staffOrg',\n widgetId: 'ai-org-usage',\n title: 'AI usage',\n Component: StaffOrgAiCard,\n },\n {\n slot: 'staffOrg',\n widgetId: 'ai-org-conversations',\n title: 'AI conversations',\n Component: StaffOrgAiConversations,\n },\n {\n slot: 'staffUser',\n widgetId: 'ai-account-usage',\n title: 'AI usage across organizations',\n Component: StaffUserAiUsageCard,\n },\n // The staff tables' AI figures (AGL-2984): the Organizations list's\n // spend column, and the usage table's three columns with the credit\n // pool line the org page draws above it.\n {\n slot: 'staffOrgsListColumn',\n widgetId: 'ai-orgs-spend',\n title: 'AI spend (month)',\n column: {\n header: 'AI spend (month)',\n align: 'right',\n Header: StaffOrgsAiSpendHeader,\n },\n Component: StaffOrgsAiSpendCell,\n },\n {\n slot: 'staffOrgUsageColumn',\n widgetId: 'ai-usage-assist-cost',\n title: 'Assist',\n column: { header: 'Assist', align: 'right' },\n Component: StaffOrgUsageAssistCell,\n },\n {\n slot: 'staffOrgUsageColumn',\n widgetId: 'ai-usage-credits',\n title: 'AI credits used',\n column: { header: 'AI credits used', align: 'right' },\n Component: StaffOrgUsageAiCreditsCell,\n },\n {\n slot: 'staffOrgUsageColumn',\n widgetId: 'ai-usage-overage',\n title: 'AI overage billed ($)',\n column: { header: 'AI overage billed ($)', align: 'right' },\n Component: StaffOrgUsageAiOverageCell,\n },\n {\n slot: 'staffOrgUsageColumn',\n widgetId: 'ai-usage-pool',\n title: 'AI credit pool',\n Component: StaffOrgUsageAiPool,\n },\n {\n slot: 'orgMembersListColumn',\n widgetId: 'ai-member-credits',\n title: 'AI credits (month)',\n column: { header: 'AI credits (month)', align: 'right', Header: AiMemberCreditsHeader },\n Component: AiMemberCreditsCell,\n },\n {\n slot: 'hostMembers',\n widgetId: 'ai-collaborator-credits',\n title: 'AI credits (site, month)',\n column: {\n header: 'AI credits (site, month)',\n align: 'right',\n Header: AiCollaboratorCreditsHeader,\n },\n Component: AiCollaboratorCreditsCell,\n },\n // SEO by AI (AGL-2910): \"Write SEO\" inside every search listing editor\n // — a page's SEO card and a product's listing — and the site audit on\n // the site's SEO section. Generation is sold as `aiGenerative` and held\n // by `ai.generate`, so the shell withholds both from a plan or a member\n // without either; each card asks the jobs route about the release flag\n // before it shows anything, and neither ever writes what it proposes.\n {\n slot: 'seoFields',\n widgetId: 'ai-seo-fields',\n title: 'SEO assistant',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiSeoFieldsCard,\n },\n {\n slot: 'hostSeo',\n widgetId: 'ai-seo-audit',\n title: 'SEO audit',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiSeoAuditCard,\n },\n // A page from a brief (AGL-2907): \"Create with AI\" beside Templates and\n // Create New Screen. Gated as the other generative widgets are.\n // On a plan that could buy the AI add-on and has not, each \"Create with\n // AI\" entry here is mounted anyway (`showWhenNotEntitled`) and opens\n // the add-on's dialog instead of the brief (AGL-3601). The shell holds\n // each behind `release_ai_generative` too, so an entry draws at once\n // and asks the jobs route nothing until its brief is sent.\n {\n slot: 'hostScreens',\n widgetId: 'ai-describe-page',\n title: 'Describe a page',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiDescribePageButton,\n },\n // The same entry for a page template, a layout and a form (AGL-3043),\n // beside the create action of the page that lists each: the same\n // dialog and the same gates.\n {\n slot: 'hostTemplates',\n widgetId: 'ai-describe-template',\n title: 'Describe a page template',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiDescribeTemplateButton,\n },\n {\n slot: 'hostLayouts',\n widgetId: 'ai-describe-layout',\n title: 'Describe a layout',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiDescribeLayoutButton,\n },\n {\n slot: 'hostForms',\n widgetId: 'ai-describe-form',\n title: 'Describe a form',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiDescribeFormButton,\n },\n // And a reusable component from a brief (AGL-3051), beside Templates\n // and Create Component: the component job's first entry point, which\n // had none in the console.\n // Pictures from a description (AGL-3602): \"Create with AI\" beside Upload\n // media in the media library, and in its empty state. Gated as the\n // other generative widgets are, by the shell alone: it asks nothing of\n // a server until someone creates a picture, and the door decides then.\n {\n slot: 'mediaLibrary',\n widgetId: 'ai-media-create',\n title: 'Create images with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiMediaCreateButton,\n },\n {\n slot: 'hostComponents',\n widgetId: 'ai-describe-component',\n title: 'Describe a reusable component',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiDescribeComponentButton,\n },\n // An email design from a brief (AGL-3596), beside New template on a\n // site's email templates — the zone the email plugin hosts. Its dialog\n // also offers the draft campaign that would send it; the Campaigns\n // section's own door is `ai-create-campaign`, below.\n {\n slot: 'hostEmailTemplates',\n widgetId: 'ai-describe-email',\n title: 'Describe an email',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiDescribeEmailButton,\n },\n // Automations by AI (AGL-2919), in the zones the workflows plugin hosts\n // on its Automation page: \"Create with AI\" beside Add action and Recipes,\n // \"Explain it\" in the editor of a saved automation, and \"Why did this\n // fail?\" on a failed run. Gated as the other generative widgets are,\n // the release flag included, by the shell alone (AGL-3601): none asks\n // the jobs route anything until it is used, and none of them changes an\n // automation.\n {\n slot: 'hostAutomations',\n widgetId: 'ai-describe-automation',\n title: 'Describe an automation',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiDescribeAutomationButton,\n },\n // Funnels by AI (AGL-3605), in the zones the funnels plugin hosts on\n // its card: a draft from a description, and its results explained.\n {\n slot: 'funnelsCreate',\n widgetId: 'ai-describe-funnel',\n title: 'Describe a funnel',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiFunnelCreateButton,\n },\n {\n slot: 'funnelInsight',\n widgetId: 'ai-explain-funnel',\n title: 'Ask AI about this funnel',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiFunnelAskButton,\n },\n {\n slot: 'automationEditor',\n widgetId: 'ai-explain-automation',\n title: 'Explain this automation',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n releaseFlag: 'release_ai_generative',\n Component: AiExplainAutomation,\n },\n // \"Change with AI\" and \"Fix with AI\" in a saved action's editor\n // (AGL-3603): a changed copy drafted OFF beside it, never the saved\n // action written in place.\n {\n slot: 'automationEditor',\n widgetId: 'ai-revise-automation',\n title: 'Change this automation with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n releaseFlag: 'release_ai_generative',\n Component: AiReviseAutomation,\n },\n // \"Create with AI\" on the workspace's Org automations (AGL-3603): one\n // of the workspace's automations drafted from a description and opened\n // in that section's editor, unsaved and switched off.\n {\n slot: 'orgAutomations',\n widgetId: 'ai-describe-org-automation',\n title: 'Describe an org automation',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiDescribeOrgAutomationButton,\n },\n // \"Ask AI about these numbers\" (AGL-3603): a tile on a site's\n // dashboard and Analytics page, which both draw `hostDashboard`, and on\n // the workspace's sites page. It opens the insight dialog the Assist\n // panel opens, gated as every generative widget is.\n {\n slot: 'hostDashboard',\n widgetId: 'ai-insight-ask',\n title: 'Ask AI about these numbers',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiInsightHostCard,\n },\n {\n slot: 'orgDashboard',\n widgetId: 'ai-insight-ask',\n title: 'Ask AI about these numbers',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiInsightOrgCard,\n },\n // Logic by AI (AGL-3603), in the zones the logic plugin hosts on its\n // Functions & Variables page: Create with AI in the Functions and\n // Variables card headers, Explain / Change / Fix in a saved function's\n // editor, and Fix with AI on a broken reference an automation holds.\n // Each proposal opens unsaved in the logic editor; none is saved here.\n {\n slot: 'hostLogic',\n widgetId: 'ai-describe-logic',\n title: 'Describe a function or variable',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiLogicCreateButton,\n },\n {\n slot: 'logicFunctionEditor',\n widgetId: 'ai-logic-function',\n title: 'This function with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n releaseFlag: 'release_ai_generative',\n Component: AiLogicFunctionTools,\n },\n {\n slot: 'logicReferenceIssue',\n widgetId: 'ai-logic-fix-reference',\n title: 'Fix this reference with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n releaseFlag: 'release_ai_generative',\n Component: AiLogicFixReference,\n },\n {\n slot: 'automationRun',\n widgetId: 'ai-explain-run-failure',\n title: 'Why did this run fail?',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n releaseFlag: 'release_ai_generative',\n Component: AiExplainRunFailure,\n },\n // CRM by AI (AGL-2917): a record's summary and next step on its page,\n // a draft in the one-to-one composer, and an import's column matches.\n // The CRM hosts each zone, so it is drawn only where the CRM is; the\n // shell holds the plan and `ai.generate`, each card asks the jobs route\n // about the release flag before it shows anything, and none writes what\n // it proposes.\n {\n slot: 'recordInsights',\n widgetId: 'ai-crm-record',\n title: 'AI summary',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiCrmRecordCard,\n },\n {\n slot: 'recordEmail',\n widgetId: 'ai-crm-email',\n title: 'Draft with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiCrmEmailDraft,\n },\n {\n slot: 'importMapping',\n widgetId: 'ai-crm-import-mapping',\n title: 'Match columns with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiCrmImportMapping,\n },\n // The guided start (AGL-2918), on the page a newly created site lands\n // on: a few questions that become a site scaffold. Gated as the other\n // generative widgets are, and it asks the jobs route about the release\n // flag before it shows anything — so a workspace the feature is not\n // released to gets the blank page and nothing else. Skipping is the\n // zone's own `startBlank`, which creates nothing.\n {\n slot: 'hostFirstRun',\n widgetId: 'ai-site-start',\n title: 'Start this site with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiSiteStartCard,\n },\n // The listing those answers describe (AGL-2918), on the site's SEO\n // section: the site-wide search title and description the guided start\n // implies, offered where they are edited. The same gates as every\n // generative widget, and it stages into the SEO form rather than\n // writing it — a person's Update is the write, as it is for the audit\n // card beside it.\n {\n slot: 'hostSeo',\n widgetId: 'ai-site-seo-start',\n title: 'The listing your answers describe',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiSiteSeoStartCard,\n },\n // What Aglyn AI learned from the site's applied edits (AGL-3661), on\n // Setup → Business profile, where the owner reads and forgets it. No\n // generate permission: reading and clearing what the AI keeps about a\n // site is every editor's, and the rules hold the write to the server.\n {\n slot: 'hostBusinessProfile',\n widgetId: 'ai-site-memory',\n title: `What ${aiAddonName()} learned`,\n featureFlag: 'aiGenerative',\n Component: AiSiteMemoryCard,\n },\n // The agency batch (AGL-2911): one brief across many of the org's\n // sites, from the page that lists them. The card asks the jobs route\n // about the release flag before it shows anything, and its own door\n // holds the plan band and the caller's permission on every site it is\n // pointed at.\n {\n slot: 'orgSites',\n widgetId: 'ai-site-batch',\n title: 'Generate sites with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiSiteBatchCard,\n },\n // Commerce by AI (AGL-2916): product copy in the product editor, the\n // catalog, categories and discounts on the products hub, and copy for\n // an import as it lands. The commerce plugin hosts the zones and makes\n // every write. The shell holds the release flag; the products hub card\n // reads its recent proposals before it draws its own controls, but\n // offers the \"Create with AI\" door's brief from the moment it mounts.\n {\n slot: 'productEditor',\n widgetId: 'ai-product-copy',\n title: 'Product copy assistant',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiProductCopyCard,\n },\n {\n slot: 'productsHub',\n widgetId: 'ai-products-hub',\n title: 'Build your catalog with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n releaseFlag: 'release_ai_generative',\n Component: AiProductsHubCard,\n },\n // \"Create with AI\" beside Add product and in the empty catalog\n // (AGL-3596): a door to the card's Propose products brief, shown only\n // while that card is on the page to take it.\n {\n slot: 'productsCreate',\n widgetId: 'ai-products-create',\n title: 'Propose products',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiCreateProductsButton,\n },\n {\n slot: 'productImport',\n widgetId: 'ai-product-import',\n title: 'Write imported product copy with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiProductImportOption,\n },\n // A/B tests by AI (AGL-2914): variants written in the experiment\n // editor, and one test's result read in plain words below its figures.\n // The A/B testing card hosts both zones, so they are drawn only where\n // that card is and only on a site with A/B testing; the shell holds the\n // plan band, `ai.generate` and the release flag, and neither card asks\n // the jobs route anything until it is used (AGL-3601). Neither writes: the\n // experiment editor's Save is the only write, and an explanation has\n // nothing to apply.\n {\n slot: 'experimentVariants',\n widgetId: 'ai-experiment-variants',\n title: 'Write variants with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n releaseFlag: 'release_ai_generative',\n Component: AiExperimentVariantsCard,\n },\n {\n slot: 'experimentResult',\n widgetId: 'ai-experiment-result',\n title: 'Explain this result with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n releaseFlag: 'release_ai_generative',\n Component: AiExperimentResultCard,\n },\n // Overlays by AI (AGL-3603), in the zones the marketing plugin's\n // overlays list hosts: \"Create with AI\" beside New bar and New popup,\n // and \"Write with AI\" among the overlay editor's fields. Both start a\n // `text` job asked for overlay copy; neither writes — the list saves a\n // created overlay switched off, and the editor's Save is the write.\n {\n slot: 'hostOverlays',\n widgetId: 'ai-create-overlay',\n title: 'Create an overlay with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiCreateOverlayButton,\n },\n {\n slot: 'overlayEditor',\n widgetId: 'ai-overlay-copy',\n title: 'Write overlay copy with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n releaseFlag: 'release_ai_generative',\n Component: AiOverlayEditorCard,\n },\n // A campaign from a brief (AGL-3603), beside Create campaign on the\n // Campaigns section the marketing plugin hosts: the `campaign` job's\n // first console door, or the `email` job's where the plan sends no\n // campaign email. Both write drafts that are aimed at nobody and sent\n // by nobody until a member does.\n {\n slot: 'hostCampaigns',\n widgetId: 'ai-create-campaign',\n title: 'Create a campaign with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiCreateCampaignButton,\n },\n // The figures in words (AGL-3603), in the header of the Conversions\n // section and of one campaign's report: the insight dialog the Assist\n // panel opens, on the Marketing surface, for the site the figures are.\n // It reads and cites; it changes nothing.\n {\n slot: 'marketingInsights',\n widgetId: 'ai-marketing-insight',\n title: 'Ask AI about these numbers',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiMarketingInsightButton,\n },\n ],\n })\n}\n"],"names":["PLATFORM_BRAND_NAME","aiAddonName","registerConsoleExtension","LinearProgress","createElement","AiAssistProviderOnHost","AI_PLUGIN_ID","registerAiDeclarations","lazyWidget","PAGE_LOADING","AiCollaboratorPermissionsCell","then","m","AiSaveAsComponent","AiGenerateSectionControl","AiRewriteControl","AssistPanelOnHost","AiCreditsCard","default","AiJobsTopBarIndicator","AiCollaboratorCreditsCell","AiCollaboratorCreditsHeader","AiMemberCreditsCell","AiMemberCreditsHeader","AssistSignalsPage","BillingAssistOverageCard","AiTopUsersCard","AiAllotmentsCard","AiCollaboratorAllotmentCell","AiCollaboratorAllotmentHeader","AiSiteAllotmentCard","MemberAiAllotmentCard","MemberAiUsageCard","AiThemeProposalCard","StaffOrgAiCard","StaffOrgAiConversations","StaffOrgUsageAiCreditsCell","StaffOrgUsageAiOverageCell","StaffOrgUsageAiPool","StaffOrgUsageAssistCell","StaffOrgsAiSpendCell","StaffOrgsAiSpendHeader","StaffUserAiUsageCard","AiSeoAuditCard","AiSiteBatchCard","AiSiteSeoStartCard","AiSiteMemoryCard","AiSiteStartCard","AiSeoFieldsCard","AiDescribeAutomationButton","AiReviseAutomation","AiDescribeOrgAutomationButton","AiInsightHostCard","AiInsightOrgCard","AiLogicCreateButton","AiLogicFixReference","AiLogicFunctionTools","AiFunnelAskButton","AiFunnelCreateButton","AiCrmEmailDraft","AiCrmImportMapping","AiCrmRecordCard","AiDescribePageButton","AiMediaCreateButton","AiDescribeComponentButton","AiDescribeFormButton","AiDescribeLayoutButton","AiDescribeTemplateButton","AiDescribeEmailButton","AiExperimentResultCard","AiExperimentVariantsCard","AiExplainAutomation","AiExplainRunFailure","AiCreateCampaignButton","AiMarketingInsightButton","AiCreateOverlayButton","AiOverlayEditorCard","AiProductCopyCard","AiProductImportOption","AiProductsHubCard","AiCreateProductsButton","AiJobsPage","registerAiConsole","pluginId","displayName","providers","staffPages","id","label","header","title","docsTopic","Component","navItems","href","recordTitle","docsAnchor","unlisted","ownsSubtree","permission","widgets","slot","widgetId","featureFlag","column","align","Header","showWhenNotEntitled","releaseFlag"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/plugins/ai/src/lib/plugin.ts"],"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\nimport { PLATFORM_BRAND_NAME, aiAddonName, registerConsoleExtension } from '@aglyn/aglyn'\nimport { LinearProgress } from '@mui/material'\nimport { createElement } from 'react'\nimport { AiAssistProviderOnHost } from './components/ai-assist-provider-on-host.component'\nimport { AI_PLUGIN_ID } from './constants'\nimport { registerAiDeclarations } from './declarations'\nimport { lazyWidget } from './lazy-widget'\n\n/*\n * Every component below is registered by name and loaded the first time the\n * shell draws it (AGL-3649); see `lazyWidget`. The console loads this plugin\n * on every screen, so a static import of a component here is downloaded by\n * every reader of every page, staff cards included.\n */\n\n/** What a page shows while its code arrives. */\nconst PAGE_LOADING = createElement(LinearProgress, { 'aria-label': 'Loading' })\n\nconst AiCollaboratorPermissionsCell = lazyWidget(\n 'AiCollaboratorPermissionsCell',\n () =>\n import('./components/ai-collaborator-permissions-column.component').then(\n (m) => m.AiCollaboratorPermissionsCell,\n ),\n)\nconst AiSaveAsComponent = lazyWidget('AiSaveAsComponent', () =>\n import('./components/ai-save-as-component.component').then(\n (m) => m.AiSaveAsComponent,\n ),\n)\nconst AiGenerateSectionControl = lazyWidget('AiGenerateSectionControl', () =>\n import('./components/besigner-ai-controls.component').then(\n (m) => m.AiGenerateSectionControl,\n ),\n)\nconst AiRewriteControl = lazyWidget('AiRewriteControl', () =>\n import('./components/besigner-ai-controls.component').then(\n (m) => m.AiRewriteControl,\n ),\n)\nconst AssistPanelOnHost = lazyWidget('AssistPanelOnHost', () =>\n import('./components/ai-permissions-on-host.component').then(\n (m) => m.AssistPanelOnHost,\n ),\n)\nconst AiCreditsCard = lazyWidget('AiCreditsCard', () =>\n import('./components/ai-credits-card.component').then((m) => m.default),\n)\nconst AiJobsTopBarIndicator = lazyWidget('AiJobsTopBarIndicator', () =>\n import('./components/ai-jobs-indicator.component').then((m) => m.default),\n)\nconst AiCollaboratorCreditsCell = lazyWidget('AiCollaboratorCreditsCell', () =>\n import('./components/ai-credits-columns.component').then(\n (m) => m.AiCollaboratorCreditsCell,\n ),\n)\nconst AiCollaboratorCreditsHeader = lazyWidget(\n 'AiCollaboratorCreditsHeader',\n () =>\n import('./components/ai-credits-columns.component').then(\n (m) => m.AiCollaboratorCreditsHeader,\n ),\n)\nconst AiMemberCreditsCell = lazyWidget('AiMemberCreditsCell', () =>\n import('./components/ai-credits-columns.component').then(\n (m) => m.AiMemberCreditsCell,\n ),\n)\nconst AiMemberCreditsHeader = lazyWidget('AiMemberCreditsHeader', () =>\n import('./components/ai-credits-columns.component').then(\n (m) => m.AiMemberCreditsHeader,\n ),\n)\nconst AssistSignalsPage = lazyWidget(\n 'AssistSignalsPage',\n () =>\n import('./components/assist-signals-page.component').then(\n (m) => m.AssistSignalsPage,\n ),\n PAGE_LOADING,\n)\nconst BillingAssistOverageCard = lazyWidget('BillingAssistOverageCard', () =>\n import('./components/billing-assist-overage-card.component').then(\n (m) => m.default,\n ),\n)\nconst AiTopUsersCard = lazyWidget('AiTopUsersCard', () =>\n import('./components/billing-ai-top-users.component').then(\n (m) => m.AiTopUsersCard,\n ),\n)\nconst AiAllotmentsCard = lazyWidget('AiAllotmentsCard', () =>\n import('./components/billing-ai-allotments.component').then(\n (m) => m.AiAllotmentsCard,\n ),\n)\nconst AiCollaboratorAllotmentCell = lazyWidget(\n 'AiCollaboratorAllotmentCell',\n () =>\n import('./components/host-ai-allotments.component').then(\n (m) => m.AiCollaboratorAllotmentCell,\n ),\n)\nconst AiCollaboratorAllotmentHeader = lazyWidget(\n 'AiCollaboratorAllotmentHeader',\n () =>\n import('./components/host-ai-allotments.component').then(\n (m) => m.AiCollaboratorAllotmentHeader,\n ),\n)\nconst AiSiteAllotmentCard = lazyWidget('AiSiteAllotmentCard', () =>\n import('./components/host-ai-allotments.component').then(\n (m) => m.AiSiteAllotmentCard,\n ),\n)\nconst MemberAiAllotmentCard = lazyWidget('MemberAiAllotmentCard', () =>\n import('./components/member-ai-allotment-card.component').then(\n (m) => m.default,\n ),\n)\nconst MemberAiUsageCard = lazyWidget('MemberAiUsageCard', () =>\n import('./components/member-ai-usage-card.component').then((m) => m.default),\n)\nconst AiThemeProposalCard = lazyWidget('AiThemeProposalCard', () =>\n import('./components/ai-theme-proposal-card.component').then(\n (m) => m.default,\n ),\n)\nconst StaffOrgAiCard = lazyWidget('StaffOrgAiCard', () =>\n import('./components/staff-org-ai-card.component').then((m) => m.default),\n)\nconst StaffOrgAiConversations = lazyWidget('StaffOrgAiConversations', () =>\n import('./components/staff-org-ai-conversations.component').then((m) => m.default),\n)\nconst StaffOrgUsageAiCreditsCell = lazyWidget(\n 'StaffOrgUsageAiCreditsCell',\n () =>\n import('./components/staff-org-usage-ai-columns.component').then(\n (m) => m.StaffOrgUsageAiCreditsCell,\n ),\n)\nconst StaffOrgUsageAiOverageCell = lazyWidget(\n 'StaffOrgUsageAiOverageCell',\n () =>\n import('./components/staff-org-usage-ai-columns.component').then(\n (m) => m.StaffOrgUsageAiOverageCell,\n ),\n)\nconst StaffOrgUsageAiPool = lazyWidget('StaffOrgUsageAiPool', () =>\n import('./components/staff-org-usage-ai-columns.component').then(\n (m) => m.StaffOrgUsageAiPool,\n ),\n)\nconst StaffOrgUsageAssistCell = lazyWidget('StaffOrgUsageAssistCell', () =>\n import('./components/staff-org-usage-ai-columns.component').then(\n (m) => m.StaffOrgUsageAssistCell,\n ),\n)\nconst StaffOrgsAiSpendCell = lazyWidget('StaffOrgsAiSpendCell', () =>\n import('./components/staff-orgs-ai-spend-column.component').then(\n (m) => m.StaffOrgsAiSpendCell,\n ),\n)\nconst StaffOrgsAiSpendHeader = lazyWidget('StaffOrgsAiSpendHeader', () =>\n import('./components/staff-orgs-ai-spend-column.component').then(\n (m) => m.StaffOrgsAiSpendHeader,\n ),\n)\nconst StaffUserAiUsageCard = lazyWidget('StaffUserAiUsageCard', () =>\n import('./components/staff-user-ai-usage-card.component').then(\n (m) => m.default,\n ),\n)\nconst AiSeoAuditCard = lazyWidget('AiSeoAuditCard', () =>\n import('./components/ai-seo-audit-card.component').then((m) => m.default),\n)\nconst AiSiteBatchCard = lazyWidget('AiSiteBatchCard', () =>\n import('./components/ai-site-batch-card.component').then((m) => m.default),\n)\nconst AiSiteSeoStartCard = lazyWidget('AiSiteSeoStartCard', () =>\n import('./components/ai-site-seo-start-card.component').then(\n (m) => m.default,\n ),\n)\nconst AiSiteMemoryCard = lazyWidget('AiSiteMemoryCard', () =>\n import('./components/ai-site-memory-card.component').then((m) => m.default),\n)\nconst AiSiteStartCard = lazyWidget('AiSiteStartCard', () =>\n import('./components/ai-site-start-card.component').then((m) => m.default),\n)\nconst AiSeoFieldsCard = lazyWidget('AiSeoFieldsCard', () =>\n import('./components/ai-seo-fields-card.component').then((m) => m.default),\n)\nconst AiDescribeAutomationButton = lazyWidget(\n 'AiDescribeAutomationButton',\n () =>\n import('./components/ai-describe-automation.component').then(\n (m) => m.default,\n ),\n)\nconst AiReviseAutomation = lazyWidget('AiReviseAutomation', () =>\n import('./components/ai-revise-automation.component').then((m) => m.default),\n)\nconst AiDescribeOrgAutomationButton = lazyWidget(\n 'AiDescribeOrgAutomationButton',\n () =>\n import('./components/ai-describe-org-automation.component').then(\n (m) => m.default,\n ),\n)\nconst AiInsightHostCard = lazyWidget('AiInsightHostCard', () =>\n import('./components/ai-insight-card.component').then(\n (m) => m.AiInsightHostCard,\n ),\n)\nconst AiInsightOrgCard = lazyWidget('AiInsightOrgCard', () =>\n import('./components/ai-insight-card.component').then(\n (m) => m.AiInsightOrgCard,\n ),\n)\nconst AiLogicCreateButton = lazyWidget('AiLogicCreateButton', () =>\n import('./components/ai-logic.component').then((m) => m.AiLogicCreateButton),\n)\nconst AiLogicFixReference = lazyWidget('AiLogicFixReference', () =>\n import('./components/ai-logic.component').then((m) => m.AiLogicFixReference),\n)\nconst AiLogicFunctionTools = lazyWidget('AiLogicFunctionTools', () =>\n import('./components/ai-logic.component').then((m) => m.AiLogicFunctionTools),\n)\nconst AiFunnelAskButton = lazyWidget('AiFunnelAskButton', () =>\n import('./components/ai-funnel-zones.component').then(\n (m) => m.AiFunnelAskButton,\n ),\n)\nconst AiFunnelCreateButton = lazyWidget('AiFunnelCreateButton', () =>\n import('./components/ai-funnel-zones.component').then(\n (m) => m.AiFunnelCreateButton,\n ),\n)\nconst AiCrmEmailDraft = lazyWidget('AiCrmEmailDraft', () =>\n import('./components/ai-crm-email-draft.component').then((m) => m.default),\n)\nconst AiCrmImportMapping = lazyWidget('AiCrmImportMapping', () =>\n import('./components/ai-crm-import-mapping.component').then((m) => m.default),\n)\nconst AiCrmRecordCard = lazyWidget('AiCrmRecordCard', () =>\n import('./components/ai-crm-record-card.component').then((m) => m.default),\n)\nconst AiDescribePageButton = lazyWidget('AiDescribePageButton', () =>\n import('./components/ai-describe-page.component').then((m) => m.default),\n)\nconst AiMediaCreateButton = lazyWidget('AiMediaCreateButton', () =>\n import('./components/ai-media-create.component').then((m) => m.default),\n)\nconst AiDescribeComponentButton = lazyWidget('AiDescribeComponentButton', () =>\n import('./components/ai-describe-button.component').then(\n (m) => m.AiDescribeComponentButton,\n ),\n)\nconst AiDescribeFormButton = lazyWidget('AiDescribeFormButton', () =>\n import('./components/ai-describe-button.component').then(\n (m) => m.AiDescribeFormButton,\n ),\n)\nconst AiDescribeLayoutButton = lazyWidget('AiDescribeLayoutButton', () =>\n import('./components/ai-describe-button.component').then(\n (m) => m.AiDescribeLayoutButton,\n ),\n)\nconst AiDescribeTemplateButton = lazyWidget('AiDescribeTemplateButton', () =>\n import('./components/ai-describe-button.component').then(\n (m) => m.AiDescribeTemplateButton,\n ),\n)\nconst AiDescribeEmailButton = lazyWidget('AiDescribeEmailButton', () =>\n import('./components/ai-describe-email.component').then(\n (m) => m.AiDescribeEmailButton,\n ),\n)\nconst AiExperimentResultCard = lazyWidget('AiExperimentResultCard', () =>\n import('./components/ai-experiment-cards.component').then(\n (m) => m.AiExperimentResultCard,\n ),\n)\nconst AiExperimentVariantsCard = lazyWidget('AiExperimentVariantsCard', () =>\n import('./components/ai-experiment-cards.component').then(\n (m) => m.AiExperimentVariantsCard,\n ),\n)\nconst AiExplainAutomation = lazyWidget('AiExplainAutomation', () =>\n import('./components/ai-explain-automation.component').then(\n (m) => m.AiExplainAutomation,\n ),\n)\nconst AiExplainRunFailure = lazyWidget('AiExplainRunFailure', () =>\n import('./components/ai-explain-automation.component').then(\n (m) => m.AiExplainRunFailure,\n ),\n)\nconst AiCreateCampaignButton = lazyWidget('AiCreateCampaignButton', () =>\n import('./components/ai-campaign-create.component').then((m) => m.default),\n)\nconst AiMarketingInsightButton = lazyWidget('AiMarketingInsightButton', () =>\n import('./components/ai-marketing-insight.component').then((m) => m.default),\n)\nconst AiCreateOverlayButton = lazyWidget('AiCreateOverlayButton', () =>\n import('./components/ai-overlay-cards.component').then(\n (m) => m.AiCreateOverlayButton,\n ),\n)\nconst AiOverlayEditorCard = lazyWidget('AiOverlayEditorCard', () =>\n import('./components/ai-overlay-cards.component').then(\n (m) => m.AiOverlayEditorCard,\n ),\n)\nconst AiProductCopyCard = lazyWidget('AiProductCopyCard', () =>\n import('./components/ai-product-copy-card.component').then((m) => m.default),\n)\nconst AiProductImportOption = lazyWidget('AiProductImportOption', () =>\n import('./components/ai-product-import-option.component').then(\n (m) => m.default,\n ),\n)\nconst AiProductsHubCard = lazyWidget('AiProductsHubCard', () =>\n import('./components/ai-products-hub-card.component').then((m) => m.default),\n)\nconst AiCreateProductsButton = lazyWidget('AiCreateProductsButton', () =>\n import('./components/ai-products-create-button.component').then(\n (m) => m.default,\n ),\n)\nconst AiJobsPage = lazyWidget(\n 'AiJobsPage',\n () => import('./components/ai-jobs-page.component').then((m) => m.default),\n PAGE_LOADING,\n)\n\n/**\n * The Aglyn AI plugin's console half (AGL-2939): the assistant dock, the\n * besigner copy assistant's provider, the billing, member and staff cards,\n * the member tables' credit columns and the Assist signal staff page — each\n * mounted through a shell-owned zone (AGL-2940) or the staff area's generic\n * route, so no console page imports this plugin.\n *\n * No `featureFlag` on the extension: the plugin's doors are gated one by\n * one — the dock reads the `release_assist` verdict the shell hands it, the\n * generative doors answer 404 behind `release_ai_generative`, the billing\n * cards render only where the plan sells a band — and a flag here would\n * switch off the released doors with the unreleased ones.\n */\nexport function registerAiConsole(): void {\n registerAiDeclarations()\n registerConsoleExtension({\n pluginId: AI_PLUGIN_ID,\n displayName: 'AI',\n // The besigner copy assistant (AGL-89/419): mounted by the shell around\n // every console page, and opened by this plugin's besigner controls.\n providers: [AiAssistProviderOnHost],\n // The Assist docs-gap and cost board (AGL-1860, AGL-2252), at the staff\n // URL and under the tab it has always had.\n staffPages: [\n {\n id: 'assist-signals',\n label: 'Assist signal',\n header: {\n // The configured brand, not ours (AGL-2153/2260): a white-label\n // deployment and a self-host operator both read this header.\n title: `${PLATFORM_BRAND_NAME} Assist Signal`,\n docsTopic: 'assistSignals',\n },\n Component: AssistSignalsPage,\n },\n ],\n // A site's AI jobs (AGL-3596), an address under the site and no tab:\n // `/ai-jobs` lists them, and `/ai-jobs/{jobId}` is one job's page —\n // \"Building your site\" (AGL-3594), where the guided start lands a person\n // and where a site job's notification opens. The `href` is a literal,\n // `AI_SITE_BUILD_HREF`'s value, because the tab-title manifest is read\n // from this source (`ai-jobs-page.spec.tsx` holds the two equal).\n navItems: [\n {\n label: 'AI jobs',\n href: '/ai-jobs',\n recordTitle: 'Building your site',\n header: { title: 'AI jobs', docsTopic: 'aiJobsAndActivity', docsAnchor: '#the-ai-jobs-page' },\n unlisted: true,\n ownsSubtree: true,\n permission: 'ai.generate',\n Component: AiJobsPage,\n },\n ],\n widgets: [\n {\n slot: 'consoleDock',\n widgetId: 'ai-assist-dock',\n title: 'Assistant',\n Component: AssistPanelOnHost,\n },\n // The AI jobs indicator (AGL-3593), beside the notifications bell on\n // every page: what the workspace's jobs are doing, and the way to them.\n // Gated as the other generative widgets are; it asks the shell for the\n // release flags of the jobs and of the panel it opens.\n {\n slot: 'consoleTopBar',\n widgetId: 'ai-jobs-indicator',\n title: 'AI jobs',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiJobsTopBarIndicator,\n },\n {\n slot: 'orgBillingUsage',\n widgetId: 'ai-credits-meter',\n title: 'AI credits',\n Component: AiCreditsCard,\n },\n {\n slot: 'orgBillingUsage',\n widgetId: 'ai-credits-overage',\n title: 'AI credits overage',\n Component: BillingAssistOverageCard,\n },\n // The per-member usage (AGL-2928): who drew the credits the meter\n // counts, on Billing → Usage, on each member's page, on the staff\n // user page, and as a column of both member tables.\n {\n slot: 'orgBillingUsage',\n widgetId: 'ai-usage-by-member',\n title: 'Who is generating what',\n permission: 'billing.view',\n Component: AiTopUsersCard,\n },\n // The collaborators table's AI column (AGL-2927): whether each person\n // may open the AI doors on the site, per site, ahead of the columns\n // that report what they drew.\n {\n slot: 'hostMembers',\n widgetId: 'ai-collaborator-permissions',\n title: 'AI',\n column: { header: 'AI' },\n Component: AiCollaboratorPermissionsCell,\n },\n // The copy assistant's besigner controls (AGL-89, AGL-169): Generate a\n // section on every editor's toolbar, and Rewrite with AI under the\n // selected element's fields. Each opens the provider's dialog, and is\n // drawn only while the reader holds the door's permission.\n {\n slot: 'besignerToolbar',\n widgetId: 'ai-generate-section',\n title: 'Generate a section with AI',\n Component: AiGenerateSectionControl,\n },\n {\n slot: 'besignerInspector',\n widgetId: 'ai-rewrite-copy',\n title: 'Rewrite with AI',\n Component: AiRewriteControl,\n },\n // Save the selection as a reusable component (AGL-2908): the component\n // job's second entry point, which proposes the properties a section\n // should declare and applies them as the manual promote does.\n {\n slot: 'besignerInspector',\n widgetId: 'ai-save-as-component',\n title: 'Make a reusable component with AI',\n permission: 'ai.generate',\n Component: AiSaveAsComponent,\n },\n {\n slot: 'orgMember',\n widgetId: 'ai-member-usage',\n title: 'AI usage',\n Component: MemberAiUsageCard,\n },\n // The allotments (AGL-2942): a member's or a site's monthly share of\n // the pool, set on Billing → Usage, on each member's page and on a\n // site's collaborators card — each card asks the route what its\n // reader may see and change.\n {\n slot: 'orgBillingUsage',\n widgetId: 'ai-allotments',\n title: 'AI allotments',\n permission: 'billing.view',\n Component: AiAllotmentsCard,\n },\n {\n slot: 'orgMember',\n widgetId: 'ai-member-allotment',\n title: 'AI allotment',\n Component: MemberAiAllotmentCard,\n },\n {\n slot: 'hostMembers',\n widgetId: 'ai-collaborator-allotment',\n title: 'AI allotment',\n column: {\n header: 'AI allotment',\n align: 'right',\n Header: AiCollaboratorAllotmentHeader,\n },\n Component: AiCollaboratorAllotmentCell,\n },\n {\n slot: 'hostMembers',\n widgetId: 'ai-site-allotment',\n title: 'Site AI allotment',\n Component: AiSiteAllotmentCard,\n },\n // Themes by AI (AGL-2938): a brief on the site's Theme section, a\n // proposal previewed before and after, and the editor's own Save to\n // keep it. Generation is sold as `aiGenerative` and held by\n // `ai.generate`, so the shell withholds the card from a plan or a\n // member without either; the card itself asks the route about the\n // release flag before it shows anything.\n {\n slot: 'hostTheme',\n widgetId: 'ai-theme-proposal',\n title: 'Theme assistant',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiThemeProposalCard,\n },\n {\n slot: 'staffOrg',\n widgetId: 'ai-org-usage',\n title: 'AI usage',\n Component: StaffOrgAiCard,\n },\n {\n slot: 'staffOrg',\n widgetId: 'ai-org-conversations',\n title: `${PLATFORM_BRAND_NAME} AI requests`,\n Component: StaffOrgAiConversations,\n },\n {\n slot: 'staffUser',\n widgetId: 'ai-account-usage',\n title: 'AI usage across organizations',\n Component: StaffUserAiUsageCard,\n },\n // The same card for one account, across every org it asked in\n // (AGL-3660); the slot passes `uid`, which puts it in account mode.\n {\n slot: 'staffUser',\n widgetId: 'ai-account-requests',\n title: `${PLATFORM_BRAND_NAME} AI requests`,\n Component: StaffOrgAiConversations,\n },\n // The staff tables' AI figures (AGL-2984): the Organizations list's\n // spend column, and the usage table's three columns with the credit\n // pool line the org page draws above it.\n {\n slot: 'staffOrgsListColumn',\n widgetId: 'ai-orgs-spend',\n title: 'AI spend (month)',\n column: {\n header: 'AI spend (month)',\n align: 'right',\n Header: StaffOrgsAiSpendHeader,\n },\n Component: StaffOrgsAiSpendCell,\n },\n {\n slot: 'staffOrgUsageColumn',\n widgetId: 'ai-usage-assist-cost',\n title: 'Assist',\n column: { header: 'Assist', align: 'right' },\n Component: StaffOrgUsageAssistCell,\n },\n {\n slot: 'staffOrgUsageColumn',\n widgetId: 'ai-usage-credits',\n title: 'AI credits used',\n column: { header: 'AI credits used', align: 'right' },\n Component: StaffOrgUsageAiCreditsCell,\n },\n {\n slot: 'staffOrgUsageColumn',\n widgetId: 'ai-usage-overage',\n title: 'AI overage billed ($)',\n column: { header: 'AI overage billed ($)', align: 'right' },\n Component: StaffOrgUsageAiOverageCell,\n },\n {\n slot: 'staffOrgUsageColumn',\n widgetId: 'ai-usage-pool',\n title: 'AI credit pool',\n Component: StaffOrgUsageAiPool,\n },\n {\n slot: 'orgMembersListColumn',\n widgetId: 'ai-member-credits',\n title: 'AI credits (month)',\n column: { header: 'AI credits (month)', align: 'right', Header: AiMemberCreditsHeader },\n Component: AiMemberCreditsCell,\n },\n {\n slot: 'hostMembers',\n widgetId: 'ai-collaborator-credits',\n title: 'AI credits (site, month)',\n column: {\n header: 'AI credits (site, month)',\n align: 'right',\n Header: AiCollaboratorCreditsHeader,\n },\n Component: AiCollaboratorCreditsCell,\n },\n // SEO by AI (AGL-2910): \"Write SEO\" inside every search listing editor\n // — a page's SEO card and a product's listing — and the site audit on\n // the site's SEO section. Generation is sold as `aiGenerative` and held\n // by `ai.generate`, so the shell withholds both from a plan or a member\n // without either; each card asks the jobs route about the release flag\n // before it shows anything, and neither ever writes what it proposes.\n {\n slot: 'seoFields',\n widgetId: 'ai-seo-fields',\n title: 'SEO assistant',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiSeoFieldsCard,\n },\n {\n slot: 'hostSeo',\n widgetId: 'ai-seo-audit',\n title: 'SEO audit',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiSeoAuditCard,\n },\n // A page from a brief (AGL-2907): \"Create with AI\" beside Templates and\n // Create New Screen. Gated as the other generative widgets are.\n // On a plan that could buy the AI add-on and has not, each \"Create with\n // AI\" entry here is mounted anyway (`showWhenNotEntitled`) and opens\n // the add-on's dialog instead of the brief (AGL-3601). The shell holds\n // each behind `release_ai_generative` too, so an entry draws at once\n // and asks the jobs route nothing until its brief is sent.\n {\n slot: 'hostScreens',\n widgetId: 'ai-describe-page',\n title: 'Describe a page',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiDescribePageButton,\n },\n // The same entry for a page template, a layout and a form (AGL-3043),\n // beside the create action of the page that lists each: the same\n // dialog and the same gates.\n {\n slot: 'hostTemplates',\n widgetId: 'ai-describe-template',\n title: 'Describe a page template',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiDescribeTemplateButton,\n },\n {\n slot: 'hostLayouts',\n widgetId: 'ai-describe-layout',\n title: 'Describe a layout',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiDescribeLayoutButton,\n },\n {\n slot: 'hostForms',\n widgetId: 'ai-describe-form',\n title: 'Describe a form',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiDescribeFormButton,\n },\n // And a reusable component from a brief (AGL-3051), beside Templates\n // and Create Component: the component job's first entry point, which\n // had none in the console.\n // Pictures from a description (AGL-3602): \"Create with AI\" beside Upload\n // media in the media library, and in its empty state. Gated as the\n // other generative widgets are, by the shell alone: it asks nothing of\n // a server until someone creates a picture, and the door decides then.\n // Like every Create with AI entry it is mounted without the add-on too\n // and opens its own upsell there (AGL-3601).\n {\n slot: 'mediaLibrary',\n widgetId: 'ai-media-create',\n title: 'Create images with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiMediaCreateButton,\n },\n {\n slot: 'hostComponents',\n widgetId: 'ai-describe-component',\n title: 'Describe a reusable component',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiDescribeComponentButton,\n },\n // An email design from a brief (AGL-3596), beside New template on a\n // site's email templates — the zone the email plugin hosts. Its dialog\n // also offers the draft campaign that would send it; the Campaigns\n // section's own door is `ai-create-campaign`, below.\n {\n slot: 'hostEmailTemplates',\n widgetId: 'ai-describe-email',\n title: 'Describe an email',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiDescribeEmailButton,\n },\n // Automations by AI (AGL-2919), in the zones the workflows plugin hosts\n // on its Automation page: \"Create with AI\" beside Add action and Recipes,\n // \"Explain it\" in the editor of a saved automation, and \"Why did this\n // fail?\" on a failed run. Gated as the other generative widgets are,\n // the release flag included, by the shell alone (AGL-3601): none asks\n // the jobs route anything until it is used, and none of them changes an\n // automation.\n {\n slot: 'hostAutomations',\n widgetId: 'ai-describe-automation',\n title: 'Describe an automation',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiDescribeAutomationButton,\n },\n // Funnels by AI (AGL-3605), in the zones the funnels plugin hosts on\n // its card: a draft from a description, and its results explained.\n {\n slot: 'funnelsCreate',\n widgetId: 'ai-describe-funnel',\n title: 'Describe a funnel',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiFunnelCreateButton,\n },\n {\n slot: 'funnelInsight',\n widgetId: 'ai-explain-funnel',\n title: 'Ask AI about this funnel',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiFunnelAskButton,\n },\n {\n slot: 'automationEditor',\n widgetId: 'ai-explain-automation',\n title: 'Explain this automation',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n releaseFlag: 'release_ai_generative',\n Component: AiExplainAutomation,\n },\n // \"Change with AI\" and \"Fix with AI\" in a saved action's editor\n // (AGL-3603): a changed copy drafted OFF beside it, never the saved\n // action written in place.\n {\n slot: 'automationEditor',\n widgetId: 'ai-revise-automation',\n title: 'Change this automation with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n releaseFlag: 'release_ai_generative',\n Component: AiReviseAutomation,\n },\n // \"Create with AI\" on the workspace's Org automations (AGL-3603): one\n // of the workspace's automations drafted from a description and opened\n // in that section's editor, unsaved and switched off.\n {\n slot: 'orgAutomations',\n widgetId: 'ai-describe-org-automation',\n title: 'Describe an org automation',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiDescribeOrgAutomationButton,\n },\n // \"Ask AI about these numbers\" (AGL-3603): a tile on a site's\n // dashboard and Analytics page, which both draw `hostDashboard`, and on\n // the workspace's sites page. It opens the insight dialog the Assist\n // panel opens, gated as every generative widget is.\n {\n slot: 'hostDashboard',\n widgetId: 'ai-insight-ask',\n title: 'Ask AI about these numbers',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiInsightHostCard,\n },\n {\n slot: 'orgDashboard',\n widgetId: 'ai-insight-ask',\n title: 'Ask AI about these numbers',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiInsightOrgCard,\n },\n // Logic by AI (AGL-3603), in the zones the logic plugin hosts on its\n // Functions & Variables page: Create with AI in the Functions and\n // Variables card headers, Explain / Change / Fix in a saved function's\n // editor, and Fix with AI on a broken reference an automation holds.\n // Each proposal opens unsaved in the logic editor; none is saved here.\n {\n slot: 'hostLogic',\n widgetId: 'ai-describe-logic',\n title: 'Describe a function or variable',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiLogicCreateButton,\n },\n {\n slot: 'logicFunctionEditor',\n widgetId: 'ai-logic-function',\n title: 'This function with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n releaseFlag: 'release_ai_generative',\n Component: AiLogicFunctionTools,\n },\n {\n slot: 'logicReferenceIssue',\n widgetId: 'ai-logic-fix-reference',\n title: 'Fix this reference with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n releaseFlag: 'release_ai_generative',\n Component: AiLogicFixReference,\n },\n {\n slot: 'automationRun',\n widgetId: 'ai-explain-run-failure',\n title: 'Why did this run fail?',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n releaseFlag: 'release_ai_generative',\n Component: AiExplainRunFailure,\n },\n // CRM by AI (AGL-2917): a record's summary and next step on its page,\n // a draft in the one-to-one composer, and an import's column matches.\n // The CRM hosts each zone, so it is drawn only where the CRM is; the\n // shell holds the plan and `ai.generate`, each card asks the jobs route\n // about the release flag before it shows anything, and none writes what\n // it proposes.\n {\n slot: 'recordInsights',\n widgetId: 'ai-crm-record',\n title: 'AI summary',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiCrmRecordCard,\n },\n {\n slot: 'recordEmail',\n widgetId: 'ai-crm-email',\n title: 'Draft with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiCrmEmailDraft,\n },\n {\n slot: 'importMapping',\n widgetId: 'ai-crm-import-mapping',\n title: 'Match columns with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiCrmImportMapping,\n },\n // The guided start (AGL-2918), on the page a newly created site lands\n // on: a few questions that become a site scaffold. Gated as the other\n // generative widgets are, and it asks the jobs route about the release\n // flag before it shows anything — so a workspace the feature is not\n // released to gets the blank page and nothing else. Skipping is the\n // zone's own `startBlank`, which creates nothing.\n {\n slot: 'hostFirstRun',\n widgetId: 'ai-site-start',\n title: 'Start this site with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiSiteStartCard,\n },\n // The listing those answers describe (AGL-2918), on the site's SEO\n // section: the site-wide search title and description the guided start\n // implies, offered where they are edited. The same gates as every\n // generative widget, and it stages into the SEO form rather than\n // writing it — a person's Update is the write, as it is for the audit\n // card beside it.\n {\n slot: 'hostSeo',\n widgetId: 'ai-site-seo-start',\n title: 'The listing your answers describe',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiSiteSeoStartCard,\n },\n // What Aglyn AI learned from the site's applied edits (AGL-3661), on\n // Setup → Business profile, where the owner reads and forgets it. No\n // generate permission: reading and clearing what the AI keeps about a\n // site is every editor's, and the rules hold the write to the server.\n {\n slot: 'hostBusinessProfile',\n widgetId: 'ai-site-memory',\n title: `What ${aiAddonName()} learned`,\n featureFlag: 'aiGenerative',\n Component: AiSiteMemoryCard,\n },\n // The agency batch (AGL-2911): one brief across many of the org's\n // sites, from the page that lists them. The card asks the jobs route\n // about the release flag before it shows anything, and its own door\n // holds the plan band and the caller's permission on every site it is\n // pointed at.\n {\n slot: 'orgSites',\n widgetId: 'ai-site-batch',\n title: 'Generate sites with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiSiteBatchCard,\n },\n // Commerce by AI (AGL-2916): product copy in the product editor, the\n // catalog, categories and discounts on the products hub, and copy for\n // an import as it lands. The commerce plugin hosts the zones and makes\n // every write. The shell holds the release flag; the products hub card\n // reads its recent proposals before it draws its own controls, but\n // offers the \"Create with AI\" door's brief from the moment it mounts.\n {\n slot: 'productEditor',\n widgetId: 'ai-product-copy',\n title: 'Product copy assistant',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiProductCopyCard,\n },\n {\n slot: 'productsHub',\n widgetId: 'ai-products-hub',\n title: 'Build your catalog with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n releaseFlag: 'release_ai_generative',\n Component: AiProductsHubCard,\n },\n // \"Create with AI\" beside Add product and in the empty catalog\n // (AGL-3596): a door to the card's Propose products brief, shown only\n // while that card is on the page to take it.\n {\n slot: 'productsCreate',\n widgetId: 'ai-products-create',\n title: 'Propose products',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiCreateProductsButton,\n },\n {\n slot: 'productImport',\n widgetId: 'ai-product-import',\n title: 'Write imported product copy with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n Component: AiProductImportOption,\n },\n // A/B tests by AI (AGL-2914): variants written in the experiment\n // editor, and one test's result read in plain words below its figures.\n // The A/B testing card hosts both zones, so they are drawn only where\n // that card is and only on a site with A/B testing; the shell holds the\n // plan band, `ai.generate` and the release flag, and neither card asks\n // the jobs route anything until it is used (AGL-3601). Neither writes: the\n // experiment editor's Save is the only write, and an explanation has\n // nothing to apply.\n {\n slot: 'experimentVariants',\n widgetId: 'ai-experiment-variants',\n title: 'Write variants with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n releaseFlag: 'release_ai_generative',\n Component: AiExperimentVariantsCard,\n },\n {\n slot: 'experimentResult',\n widgetId: 'ai-experiment-result',\n title: 'Explain this result with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n releaseFlag: 'release_ai_generative',\n Component: AiExperimentResultCard,\n },\n // Overlays by AI (AGL-3603), in the zones the marketing plugin's\n // overlays list hosts: \"Create with AI\" beside New bar and New popup,\n // and \"Write with AI\" among the overlay editor's fields. Both start a\n // `text` job asked for overlay copy; neither writes — the list saves a\n // created overlay switched off, and the editor's Save is the write.\n {\n slot: 'hostOverlays',\n widgetId: 'ai-create-overlay',\n title: 'Create an overlay with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiCreateOverlayButton,\n },\n {\n slot: 'overlayEditor',\n widgetId: 'ai-overlay-copy',\n title: 'Write overlay copy with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n releaseFlag: 'release_ai_generative',\n Component: AiOverlayEditorCard,\n },\n // A campaign from a brief (AGL-3603), beside Create campaign on the\n // Campaigns section the marketing plugin hosts: the `campaign` job's\n // first console door, or the `email` job's where the plan sends no\n // campaign email. Both write drafts that are aimed at nobody and sent\n // by nobody until a member does.\n {\n slot: 'hostCampaigns',\n widgetId: 'ai-create-campaign',\n title: 'Create a campaign with AI',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiCreateCampaignButton,\n },\n // The figures in words (AGL-3603), in the header of the Conversions\n // section and of one campaign's report: the insight dialog the Assist\n // panel opens, on the Marketing surface, for the site the figures are.\n // It reads and cites; it changes nothing.\n {\n slot: 'marketingInsights',\n widgetId: 'ai-marketing-insight',\n title: 'Ask AI about these numbers',\n featureFlag: 'aiGenerative',\n permission: 'ai.generate',\n showWhenNotEntitled: true,\n releaseFlag: 'release_ai_generative',\n Component: AiMarketingInsightButton,\n },\n ],\n })\n}\n"],"names":["PLATFORM_BRAND_NAME","aiAddonName","registerConsoleExtension","LinearProgress","createElement","AiAssistProviderOnHost","AI_PLUGIN_ID","registerAiDeclarations","lazyWidget","PAGE_LOADING","AiCollaboratorPermissionsCell","then","m","AiSaveAsComponent","AiGenerateSectionControl","AiRewriteControl","AssistPanelOnHost","AiCreditsCard","default","AiJobsTopBarIndicator","AiCollaboratorCreditsCell","AiCollaboratorCreditsHeader","AiMemberCreditsCell","AiMemberCreditsHeader","AssistSignalsPage","BillingAssistOverageCard","AiTopUsersCard","AiAllotmentsCard","AiCollaboratorAllotmentCell","AiCollaboratorAllotmentHeader","AiSiteAllotmentCard","MemberAiAllotmentCard","MemberAiUsageCard","AiThemeProposalCard","StaffOrgAiCard","StaffOrgAiConversations","StaffOrgUsageAiCreditsCell","StaffOrgUsageAiOverageCell","StaffOrgUsageAiPool","StaffOrgUsageAssistCell","StaffOrgsAiSpendCell","StaffOrgsAiSpendHeader","StaffUserAiUsageCard","AiSeoAuditCard","AiSiteBatchCard","AiSiteSeoStartCard","AiSiteMemoryCard","AiSiteStartCard","AiSeoFieldsCard","AiDescribeAutomationButton","AiReviseAutomation","AiDescribeOrgAutomationButton","AiInsightHostCard","AiInsightOrgCard","AiLogicCreateButton","AiLogicFixReference","AiLogicFunctionTools","AiFunnelAskButton","AiFunnelCreateButton","AiCrmEmailDraft","AiCrmImportMapping","AiCrmRecordCard","AiDescribePageButton","AiMediaCreateButton","AiDescribeComponentButton","AiDescribeFormButton","AiDescribeLayoutButton","AiDescribeTemplateButton","AiDescribeEmailButton","AiExperimentResultCard","AiExperimentVariantsCard","AiExplainAutomation","AiExplainRunFailure","AiCreateCampaignButton","AiMarketingInsightButton","AiCreateOverlayButton","AiOverlayEditorCard","AiProductCopyCard","AiProductImportOption","AiProductsHubCard","AiCreateProductsButton","AiJobsPage","registerAiConsole","pluginId","displayName","providers","staffPages","id","label","header","title","docsTopic","Component","navItems","href","recordTitle","docsAnchor","unlisted","ownsSubtree","permission","widgets","slot","widgetId","featureFlag","column","align","Header","showWhenNotEntitled","releaseFlag"],"mappings":"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"}
|
|
@@ -4191,6 +4191,13 @@
|
|
|
4191
4191
|
pageSize: {
|
|
4192
4192
|
type: 'string',
|
|
4193
4193
|
maxLength: 200
|
|
4194
|
+
},
|
|
4195
|
+
cardStyle: {
|
|
4196
|
+
type: 'string',
|
|
4197
|
+
enum: [
|
|
4198
|
+
'outlined',
|
|
4199
|
+
'photo'
|
|
4200
|
+
]
|
|
4194
4201
|
}
|
|
4195
4202
|
},
|
|
4196
4203
|
required: [],
|
|
@@ -4220,7 +4227,8 @@
|
|
|
4220
4227
|
showSort: 'checkbox',
|
|
4221
4228
|
showTypeFilter: 'checkbox',
|
|
4222
4229
|
showPriceFilter: 'checkbox',
|
|
4223
|
-
pageSize: 'text-field'
|
|
4230
|
+
pageSize: 'text-field',
|
|
4231
|
+
cardStyle: 'select'
|
|
4224
4232
|
},
|
|
4225
4233
|
textLimits: {
|
|
4226
4234
|
collectionSlug: 200,
|
|
@@ -4933,7 +4941,8 @@
|
|
|
4933
4941
|
'videoEmbed'
|
|
4934
4942
|
],
|
|
4935
4943
|
codeOnly: [
|
|
4936
|
-
'icon'
|
|
4944
|
+
'icon',
|
|
4945
|
+
'product-grid'
|
|
4937
4946
|
]
|
|
4938
4947
|
},
|
|
4939
4948
|
email: {
|
|
@@ -5003,7 +5012,8 @@
|
|
|
5003
5012
|
codeOnly: [
|
|
5004
5013
|
'icon',
|
|
5005
5014
|
'muiDrawer',
|
|
5006
|
-
'muiDrawerToggle'
|
|
5015
|
+
'muiDrawerToggle',
|
|
5016
|
+
'cart'
|
|
5007
5017
|
]
|
|
5008
5018
|
},
|
|
5009
5019
|
component: {
|