@webiny/app-admin 6.6.0-alpha.0 → 6.6.0-alpha.1
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/base/Admin.js +17 -2
- package/base/Admin.js.map +1 -1
- package/base/Base/DefaultFieldRenderers.js +17 -2
- package/base/Base/DefaultFieldRenderers.js.map +1 -1
- package/base/Base/FieldRenderers/AutoCompleteRenderer.d.ts +13 -0
- package/base/Base/FieldRenderers/AutoCompleteRenderer.js +29 -0
- package/base/Base/FieldRenderers/AutoCompleteRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/HorizontalTabsRenderer.d.ts +2 -2
- package/base/Base/FieldRenderers/LexicalRenderer.js +10 -6
- package/base/Base/FieldRenderers/LexicalRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/MultiFilePickerRenderer.js +8 -5
- package/base/Base/FieldRenderers/MultiFilePickerRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/MultiSelectRenderer.d.ts +15 -0
- package/base/Base/FieldRenderers/MultiSelectRenderer.js +31 -0
- package/base/Base/FieldRenderers/MultiSelectRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.d.ts +2 -0
- package/base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.js +5 -2
- package/base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.d.ts +11 -0
- package/base/Base/FieldRenderers/ObjectRenderer/{MultiValueDynamicZone.js → MultiValueDynamicZone/MultiValueDynamicZone.js} +65 -14
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZonePresenter.d.ts +13 -0
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZonePresenter.js +28 -0
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZonePresenter.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/abstractions.d.ts +15 -0
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/abstractions.js +5 -0
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/abstractions.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/feature.d.ts +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/feature.js +11 -0
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/feature.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/index.d.ts +2 -0
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/index.js +2 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.d.ts +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js +19 -3
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.d.ts +10 -8
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js +34 -3
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.d.ts +3 -2
- package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js +11 -5
- package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js.map +1 -1
- package/base/Base/FieldRenderers/SelectRenderer.d.ts +6 -0
- package/base/Base/FieldRenderers/SelectRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/VerticalTabsRenderer.d.ts +2 -2
- package/base/Base/Menus.js +4 -4
- package/base/Base/Menus.js.map +1 -1
- package/base/createRootContainer.js +4 -2
- package/base/createRootContainer.js.map +1 -1
- package/components/Drawers/DrawerParamsContext.d.ts +6 -0
- package/components/Drawers/DrawerParamsContext.js +10 -0
- package/components/Drawers/DrawerParamsContext.js.map +1 -0
- package/components/Drawers/DrawersContext.d.ts +13 -0
- package/components/Drawers/DrawersContext.js +50 -0
- package/components/Drawers/DrawersContext.js.map +1 -0
- package/components/Drawers/useDrawers.d.ts +2 -0
- package/components/Drawers/useDrawers.js +10 -0
- package/components/Drawers/useDrawers.js.map +1 -0
- package/components/Filters/Filters.js +4 -3
- package/components/Filters/Filters.js.map +1 -1
- package/components/IconPicker/IconPickerComponent.d.ts +2 -2
- package/components/LexicalEditor/LexicalLinkForm.js +3 -0
- package/components/LexicalEditor/LexicalLinkForm.js.map +1 -1
- package/components/ListView/ListViewBulkActions.d.ts +2 -2
- package/components/ListView/ListViewContent.d.ts +2 -2
- package/components/ListView/ListViewFilters.d.ts +2 -2
- package/components/ListView/index.d.ts +6 -6
- package/components/OverlayLayout/OverlayLayout.js +4 -2
- package/components/OverlayLayout/OverlayLayout.js.map +1 -1
- package/components/OverlayLayout/components/OverlayContent.js +1 -0
- package/components/OverlayLayout/components/OverlayContent.js.map +1 -1
- package/components/RolesMultiAutocomplete/index.d.ts +4 -2
- package/components/SplitView/SplitView.js +1 -1
- package/components/SplitView/SplitView.js.map +1 -1
- package/components/Table/components/Table/TableInner.d.ts +2 -2
- package/components/TeamAutocomplete/index.d.ts +4 -2
- package/components/TeamsMultiAutocomplete/index.d.ts +4 -2
- package/components/index.d.ts +0 -1
- package/components/index.js +0 -1
- package/config/AdminConfig/Breadcrumbs.d.ts +42 -0
- package/config/AdminConfig/Breadcrumbs.js +24 -0
- package/config/AdminConfig/Breadcrumbs.js.map +1 -0
- package/config/AdminConfig/Drawer.d.ts +10 -0
- package/config/AdminConfig/Drawer.js +19 -0
- package/config/AdminConfig/Drawer.js.map +1 -0
- package/config/AdminConfig/LexicalTheme/AllowCustomColors.d.ts +5 -0
- package/config/AdminConfig/LexicalTheme/AllowCustomColors.js +18 -0
- package/config/AdminConfig/LexicalTheme/AllowCustomColors.js.map +1 -0
- package/config/AdminConfig/LexicalTheme.d.ts +2 -0
- package/config/AdminConfig/LexicalTheme.js +2 -0
- package/config/AdminConfig/LexicalTheme.js.map +1 -1
- package/config/AdminConfig.d.ts +8 -0
- package/config/AdminConfig.js +8 -1
- package/config/AdminConfig.js.map +1 -1
- package/exports/admin.d.ts +3 -0
- package/exports/admin.js +3 -0
- package/features/accessManagement/types.d.ts +3 -3
- package/features/aiChat/AiChatGateway.d.ts +30 -0
- package/features/aiChat/AiChatGateway.js +41 -0
- package/features/aiChat/AiChatGateway.js.map +1 -0
- package/features/aiChat/AiChatPresenter.d.ts +32 -0
- package/features/aiChat/AiChatPresenter.js +220 -0
- package/features/aiChat/AiChatPresenter.js.map +1 -0
- package/features/aiChat/abstractions.d.ts +124 -0
- package/features/aiChat/abstractions.js +6 -0
- package/features/aiChat/abstractions.js.map +1 -0
- package/features/aiChat/feature.d.ts +3 -0
- package/features/aiChat/feature.js +19 -0
- package/features/aiChat/feature.js.map +1 -0
- package/features/aiChat/index.d.ts +6 -0
- package/features/aiChat/index.js +3 -0
- package/features/dateFormatter/DefaultDateFormatter.d.ts +8 -0
- package/features/dateFormatter/DefaultDateFormatter.js +25 -0
- package/features/dateFormatter/DefaultDateFormatter.js.map +1 -0
- package/features/dateFormatter/abstractions.d.ts +13 -0
- package/features/dateFormatter/abstractions.js +5 -0
- package/features/dateFormatter/abstractions.js.map +1 -0
- package/features/dateFormatter/feature.d.ts +3 -0
- package/features/dateFormatter/feature.js +17 -0
- package/features/dateFormatter/feature.js.map +1 -0
- package/features/dateFormatter/index.d.ts +4 -0
- package/features/dateFormatter/index.js +4 -0
- package/features/dateFormatter/useDateFormatter.d.ts +5 -0
- package/features/dateFormatter/useDateFormatter.js +8 -0
- package/features/dateFormatter/useDateFormatter.js.map +1 -0
- package/features/featureFlags/FeatureFlagsGateway.d.ts +10 -0
- package/features/featureFlags/FeatureFlagsGateway.js +40 -0
- package/features/featureFlags/FeatureFlagsGateway.js.map +1 -0
- package/features/featureFlags/FeatureFlagsService.d.ts +16 -0
- package/features/featureFlags/FeatureFlagsService.js +64 -0
- package/features/featureFlags/FeatureFlagsService.js.map +1 -0
- package/features/featureFlags/abstractions.d.ts +19 -0
- package/features/featureFlags/abstractions.js +6 -0
- package/features/featureFlags/abstractions.js.map +1 -0
- package/features/featureFlags/feature.d.ts +3 -0
- package/features/featureFlags/feature.js +19 -0
- package/features/featureFlags/feature.js.map +1 -0
- package/features/formModel/Field.js +10 -0
- package/features/formModel/Field.js.map +1 -1
- package/features/formModel/FieldBuilder.js +1 -1
- package/features/formModel/FieldBuilder.js.map +1 -1
- package/features/formModel/FieldBuilder.test.js +4 -4
- package/features/formModel/FieldBuilder.test.js.map +1 -1
- package/features/formModel/FormErrors.d.ts +2 -2
- package/features/formModel/FormModel.test.js +50 -0
- package/features/formModel/FormModel.test.js.map +1 -1
- package/features/formModel/FormView.d.ts +8 -4
- package/features/formModel/PresenterErrors.d.ts +2 -2
- package/features/formModel/demo/FormModelDemo.d.ts +2 -2
- package/features/formModel/renderers.d.ts +1 -0
- package/features/formModel/renderers.js +1 -0
- package/features/notifications/NotificationsRenderer.d.ts +2 -2
- package/features/security/AuthenticationContext/ApiStreamClientDecorator.d.ts +22 -0
- package/features/security/AuthenticationContext/ApiStreamClientDecorator.js +32 -0
- package/features/security/AuthenticationContext/ApiStreamClientDecorator.js.map +1 -0
- package/features/security/AuthenticationContext/feature.js +2 -0
- package/features/security/AuthenticationContext/feature.js.map +1 -1
- package/features/slugify/DefaultSlugify.d.ts +8 -0
- package/features/slugify/DefaultSlugify.js +20 -0
- package/features/slugify/DefaultSlugify.js.map +1 -0
- package/features/slugify/abstractions.d.ts +12 -0
- package/features/slugify/abstractions.js +5 -0
- package/features/slugify/abstractions.js.map +1 -0
- package/features/slugify/feature.d.ts +1 -0
- package/features/slugify/feature.js +11 -0
- package/features/slugify/feature.js.map +1 -0
- package/features/slugify/index.d.ts +3 -0
- package/features/slugify/index.js +3 -0
- package/features/stringFormatter/DefaultStringFormatter.d.ts +17 -0
- package/features/stringFormatter/DefaultStringFormatter.js +19 -0
- package/features/stringFormatter/DefaultStringFormatter.js.map +1 -0
- package/features/stringFormatter/abstractions.d.ts +11 -0
- package/features/stringFormatter/abstractions.js +5 -0
- package/features/stringFormatter/abstractions.js.map +1 -0
- package/features/stringFormatter/feature.d.ts +3 -0
- package/features/stringFormatter/feature.js +19 -0
- package/features/stringFormatter/feature.js.map +1 -0
- package/features/stringFormatter/index.d.ts +4 -0
- package/features/stringFormatter/index.js +4 -0
- package/features/stringFormatter/useStringFormatter.d.ts +5 -0
- package/features/stringFormatter/useStringFormatter.js +8 -0
- package/features/stringFormatter/useStringFormatter.js.map +1 -0
- package/features/tenancy/ApiStreamClientDecorator.d.ts +16 -0
- package/features/tenancy/ApiStreamClientDecorator.js +30 -0
- package/features/tenancy/ApiStreamClientDecorator.js.map +1 -0
- package/features/tenancy/feature.js +2 -0
- package/features/tenancy/feature.js.map +1 -1
- package/features/wcp/ReactLicense.d.ts +6 -0
- package/features/wcp/ReactLicense.js +18 -0
- package/features/wcp/ReactLicense.js.map +1 -1
- package/features/wcp/WcpGateway.js +3 -0
- package/features/wcp/WcpGateway.js.map +1 -1
- package/hooks/index.d.ts +3 -0
- package/hooks/index.js +3 -0
- package/hooks/useDrawer.d.ts +9 -0
- package/hooks/useDrawer.js +19 -0
- package/hooks/useDrawer.js.map +1 -0
- package/hooks/useHotkeys.js +5 -3
- package/hooks/useHotkeys.js.map +1 -1
- package/hooks/useOpenDrawer.d.ts +7 -0
- package/hooks/useOpenDrawer.js +18 -0
- package/hooks/useOpenDrawer.js.map +1 -0
- package/hooks/useSnackbar.js.map +1 -1
- package/index.d.ts +18 -1
- package/index.js +23 -12
- package/modules/AccessManagementExtension.js +46 -22
- package/modules/AccessManagementExtension.js.map +1 -1
- package/package.json +31 -28
- package/presentation/accessManagement/SecurityPermissions.js +3 -3
- package/presentation/accessManagement/SecurityPermissions.js.map +1 -1
- package/presentation/accessManagement/apiKeys/ApiKeysPresenter.d.ts +3 -1
- package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js +13 -16
- package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js.map +1 -1
- package/presentation/accessManagement/apiKeys/components/ApiKeysView.d.ts +2 -2
- package/presentation/accessManagement/apiKeys/components/ApiKeysView.js +13 -7
- package/presentation/accessManagement/apiKeys/components/ApiKeysView.js.map +1 -1
- package/presentation/accessManagement/roles/RolesPresenter.d.ts +3 -1
- package/presentation/accessManagement/roles/RolesPresenter.js +11 -14
- package/presentation/accessManagement/roles/RolesPresenter.js.map +1 -1
- package/presentation/accessManagement/roles/components/RolesView.d.ts +2 -2
- package/presentation/accessManagement/roles/components/RolesView.js +10 -6
- package/presentation/accessManagement/roles/components/RolesView.js.map +1 -1
- package/presentation/accessManagement/teams/TeamsPresenter.d.ts +3 -1
- package/presentation/accessManagement/teams/TeamsPresenter.js +11 -14
- package/presentation/accessManagement/teams/TeamsPresenter.js.map +1 -1
- package/presentation/accessManagement/teams/components/TeamsView.d.ts +2 -2
- package/presentation/accessManagement/teams/components/TeamsView.js +10 -6
- package/presentation/accessManagement/teams/components/TeamsView.js.map +1 -1
- package/presentation/commandPalette/CommandPalettePresenter.d.ts +21 -0
- package/presentation/commandPalette/CommandPalettePresenter.js +91 -0
- package/presentation/commandPalette/CommandPalettePresenter.js.map +1 -0
- package/presentation/commandPalette/abstractions.d.ts +76 -0
- package/presentation/commandPalette/abstractions.js +7 -0
- package/presentation/commandPalette/abstractions.js.map +1 -0
- package/presentation/commandPalette/commands/AskAiCommand.d.ts +25 -0
- package/presentation/commandPalette/commands/AskAiCommand.js +33 -0
- package/presentation/commandPalette/commands/AskAiCommand.js.map +1 -0
- package/presentation/commandPalette/commands/CopyCurrentUrlCommand.d.ts +15 -0
- package/presentation/commandPalette/commands/CopyCurrentUrlCommand.js +33 -0
- package/presentation/commandPalette/commands/CopyCurrentUrlCommand.js.map +1 -0
- package/presentation/commandPalette/commands/SendMessageCommand.d.ts +23 -0
- package/presentation/commandPalette/commands/SendMessageCommand.js +66 -0
- package/presentation/commandPalette/commands/SendMessageCommand.js.map +1 -0
- package/presentation/commandPalette/commands/SignOutCommand.d.ts +18 -0
- package/presentation/commandPalette/commands/SignOutCommand.js +37 -0
- package/presentation/commandPalette/commands/SignOutCommand.js.map +1 -0
- package/presentation/commandPalette/commands/feature.d.ts +5 -0
- package/presentation/commandPalette/commands/feature.js +17 -0
- package/presentation/commandPalette/commands/feature.js.map +1 -0
- package/presentation/commandPalette/feature.d.ts +3 -0
- package/presentation/commandPalette/feature.js +17 -0
- package/presentation/commandPalette/feature.js.map +1 -0
- package/presentation/commandPalette/index.d.ts +3 -0
- package/presentation/commandPalette/index.js +2 -0
- package/presentation/featureFlags/FeatureFlagsProvider.d.ts +7 -0
- package/presentation/featureFlags/FeatureFlagsProvider.js +22 -0
- package/presentation/featureFlags/FeatureFlagsProvider.js.map +1 -0
- package/presentation/featureFlags/useFeatureFlags.d.ts +2 -0
- package/presentation/featureFlags/useFeatureFlags.js +17 -0
- package/presentation/featureFlags/useFeatureFlags.js.map +1 -0
- package/presentation/installation/components/SystemInstaller/SystemInstaller.d.ts +2 -2
- package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleStartUsing.js +0 -3
- package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleStartUsing.js.map +1 -1
- package/presentation/listPresenter/FolderAwareDataSource.js +4 -1
- package/presentation/listPresenter/FolderAwareDataSource.js.map +1 -1
- package/presentation/listPresenter/QueryMatcher.js +2 -2
- package/presentation/listPresenter/QueryMatcher.js.map +1 -1
- package/presentation/sortable/SortablePresenter.d.ts +23 -0
- package/presentation/sortable/SortablePresenter.js +175 -0
- package/presentation/sortable/SortablePresenter.js.map +1 -0
- package/presentation/sortable/abstractions.d.ts +24 -0
- package/presentation/sortable/abstractions.js +5 -0
- package/presentation/sortable/abstractions.js.map +1 -0
- package/presentation/sortable/feature.d.ts +1 -0
- package/presentation/sortable/feature.js +11 -0
- package/presentation/sortable/feature.js.map +1 -0
- package/presentation/sortable/index.d.ts +2 -0
- package/presentation/sortable/index.js +2 -0
- package/presentation/trashBin/components/BulkActions/DeleteItems.d.ts +2 -2
- package/presentation/trashBin/components/BulkActions/RestoreItems.d.ts +2 -2
- package/presentation/trashBin/components/TrashBinOverlay.d.ts +2 -2
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.d.ts +0 -10
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.js.map +0 -1
- package/base/Base/Menus/WebinyVersion.d.ts +0 -2
- package/base/Base/Menus/WebinyVersion.js +0 -23
- package/base/Base/Menus/WebinyVersion.js.map +0 -1
- package/base/WebinyVersion.d.ts +0 -2
- package/base/WebinyVersion.js +0 -23
- package/base/WebinyVersion.js.map +0 -1
- package/components/Wcp.d.ts +0 -19
- package/components/Wcp.js +0 -37
- package/components/Wcp.js.map +0 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { ConnectToProperties, Property, useIdGenerator } from "@webiny/react-properties";
|
|
3
|
+
const Breadcrumb = ({ name, label, to, icon, before, after })=>{
|
|
4
|
+
const getId = useIdGenerator("Breadcrumb");
|
|
5
|
+
const id = name ?? label;
|
|
6
|
+
return /*#__PURE__*/ react.createElement(ConnectToProperties, {
|
|
7
|
+
name: "AdminConfig"
|
|
8
|
+
}, /*#__PURE__*/ react.createElement(Property, {
|
|
9
|
+
id: getId(id),
|
|
10
|
+
name: "breadcrumbs",
|
|
11
|
+
array: true,
|
|
12
|
+
before: before,
|
|
13
|
+
after: after,
|
|
14
|
+
value: {
|
|
15
|
+
name: id,
|
|
16
|
+
label,
|
|
17
|
+
to,
|
|
18
|
+
icon
|
|
19
|
+
}
|
|
20
|
+
}));
|
|
21
|
+
};
|
|
22
|
+
export { Breadcrumb };
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=Breadcrumbs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config/AdminConfig/Breadcrumbs.js","sources":["../../../src/config/AdminConfig/Breadcrumbs.tsx"],"sourcesContent":["import React from \"react\";\nimport { ConnectToProperties, Property, useIdGenerator } from \"@webiny/react-properties\";\nimport type { Route } from \"@webiny/app/features/router/Route.js\";\n\n/**\n * Where a breadcrumb navigates: either a raw path string, or a `Route` (optionally with\n * params) that the header resolves to a link via the router's `getLink`.\n */\nexport type BreadcrumbLink = string | { route: Route<any>; params?: Record<string, any> };\n\nexport interface BreadcrumbConfig {\n name: string;\n label: string;\n to?: BreadcrumbLink;\n icon?: React.ReactNode;\n}\n\nexport interface BreadcrumbProps {\n /** Stable id for ordering/diffing. Defaults to `label`. */\n name?: string;\n /** Text label shown for this location. */\n label: string;\n /** Where this item navigates — a path string or a `Route` (+ params). */\n to?: BreadcrumbLink;\n /** Optional leading icon. */\n icon?: React.ReactNode;\n /** Place this item before another (by name). */\n before?: string;\n /** Place this item after another (by name). */\n after?: string;\n}\n\n/**\n * Declares a single breadcrumb. Drop it anywhere in a view or sub-view — the header renders\n * every mounted `<Breadcrumb>` as the trail, in mount order, and clears each when it\n * unmounts. Breadcrumbs are pure presentation, so this composes through the React Config API\n * (like `AdminConfig.Menu` / `Dashboard.Widget`) rather than dependency injection.\n *\n * ```tsx\n * <Breadcrumb label=\"File Manager\" to={{ route: Routes.List }} />\n * <Breadcrumb label={folder.title} to={{ route: Routes.List, params: { folderId } }} />\n * ```\n */\nexport const Breadcrumb = ({ name, label, to, icon, before, after }: BreadcrumbProps) => {\n const getId = useIdGenerator(\"Breadcrumb\");\n const id = name ?? label;\n\n return (\n <ConnectToProperties name={\"AdminConfig\"}>\n <Property\n id={getId(id)}\n name={\"breadcrumbs\"}\n array={true}\n before={before}\n after={after}\n value={{ name: id, label, to, icon }}\n />\n </ConnectToProperties>\n );\n};\n"],"names":["Breadcrumb","name","label","to","icon","before","after","getId","useIdGenerator","id","ConnectToProperties","Property"],"mappings":";;AA2CO,MAAMA,aAAa,CAAC,EAAEC,IAAI,EAAEC,KAAK,EAAEC,EAAE,EAAEC,IAAI,EAAEC,MAAM,EAAEC,KAAK,EAAmB;IAChF,MAAMC,QAAQC,eAAe;IAC7B,MAAMC,KAAKR,QAAQC;IAEnB,OAAO,WAAP,GACI,oBAACQ,qBAAmBA;QAAC,MAAM;qBACvB,oBAACC,UAAQA;QACL,IAAIJ,MAAME;QACV,MAAM;QACN,OAAO;QACP,QAAQJ;QACR,OAAOC;QACP,OAAO;YAAE,MAAMG;YAAIP;YAAOC;YAAIC;QAAK;;AAInD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface DrawerConfig {
|
|
3
|
+
name: string;
|
|
4
|
+
element: React.ReactElement;
|
|
5
|
+
}
|
|
6
|
+
export interface DrawerProps {
|
|
7
|
+
name: string;
|
|
8
|
+
element: React.ReactElement;
|
|
9
|
+
}
|
|
10
|
+
export declare const Drawer: ({ name, element }: DrawerProps) => React.JSX.Element;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { ConnectToProperties, Property, useIdGenerator } from "@webiny/react-properties";
|
|
3
|
+
const Drawer = ({ name, element })=>{
|
|
4
|
+
const getId = useIdGenerator("Drawer");
|
|
5
|
+
return /*#__PURE__*/ react.createElement(ConnectToProperties, {
|
|
6
|
+
name: "AdminConfig"
|
|
7
|
+
}, /*#__PURE__*/ react.createElement(Property, {
|
|
8
|
+
id: getId(name),
|
|
9
|
+
name: "drawers",
|
|
10
|
+
array: true,
|
|
11
|
+
value: {
|
|
12
|
+
name,
|
|
13
|
+
element
|
|
14
|
+
}
|
|
15
|
+
}));
|
|
16
|
+
};
|
|
17
|
+
export { Drawer };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=Drawer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config/AdminConfig/Drawer.js","sources":["../../../src/config/AdminConfig/Drawer.tsx"],"sourcesContent":["import React from \"react\";\nimport { ConnectToProperties, Property, useIdGenerator } from \"@webiny/react-properties\";\n\nexport interface DrawerConfig {\n name: string;\n element: React.ReactElement;\n}\n\nexport interface DrawerProps {\n name: string;\n element: React.ReactElement;\n}\n\nexport const Drawer = ({ name, element }: DrawerProps) => {\n const getId = useIdGenerator(\"Drawer\");\n\n return (\n <ConnectToProperties name={\"AdminConfig\"}>\n <Property id={getId(name)} name={\"drawers\"} array={true} value={{ name, element }} />\n </ConnectToProperties>\n );\n};\n"],"names":["Drawer","name","element","getId","useIdGenerator","ConnectToProperties","Property"],"mappings":";;AAaO,MAAMA,SAAS,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAe;IACjD,MAAMC,QAAQC,eAAe;IAE7B,OAAO,WAAP,GACI,oBAACC,qBAAmBA;QAAC,MAAM;qBACvB,oBAACC,UAAQA;QAAC,IAAIH,MAAMF;QAAO,MAAM;QAAW,OAAO;QAAM,OAAO;YAAEA;YAAMC;QAAQ;;AAG5F"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { ConnectToProperties, Property, useIdGenerator } from "@webiny/react-properties";
|
|
3
|
+
const AllowCustomColors = ({ value = true })=>{
|
|
4
|
+
const getId = useIdGenerator("lexicalTheme");
|
|
5
|
+
return /*#__PURE__*/ react.createElement(ConnectToProperties, {
|
|
6
|
+
name: "AdminConfig"
|
|
7
|
+
}, /*#__PURE__*/ react.createElement(Property, {
|
|
8
|
+
id: "lexicalTheme",
|
|
9
|
+
name: "lexicalTheme"
|
|
10
|
+
}, /*#__PURE__*/ react.createElement(Property, {
|
|
11
|
+
id: getId("allowCustomColors"),
|
|
12
|
+
name: "allowCustomColors",
|
|
13
|
+
value: value
|
|
14
|
+
})));
|
|
15
|
+
};
|
|
16
|
+
export { AllowCustomColors };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=AllowCustomColors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config/AdminConfig/LexicalTheme/AllowCustomColors.js","sources":["../../../../src/config/AdminConfig/LexicalTheme/AllowCustomColors.tsx"],"sourcesContent":["import React from \"react\";\nimport { ConnectToProperties, Property, useIdGenerator } from \"@webiny/react-properties\";\n\nexport interface AllowCustomColorsProps {\n value?: boolean;\n}\n\nexport const AllowCustomColors = ({ value = true }: AllowCustomColorsProps) => {\n const getId = useIdGenerator(\"lexicalTheme\");\n\n return (\n <ConnectToProperties name={\"AdminConfig\"}>\n <Property id={\"lexicalTheme\"} name={\"lexicalTheme\"}>\n <Property\n id={getId(\"allowCustomColors\")}\n name={\"allowCustomColors\"}\n value={value}\n />\n </Property>\n </ConnectToProperties>\n );\n};\n"],"names":["AllowCustomColors","value","getId","useIdGenerator","ConnectToProperties","Property"],"mappings":";;AAOO,MAAMA,oBAAoB,CAAC,EAAEC,QAAQ,IAAI,EAA0B;IACtE,MAAMC,QAAQC,eAAe;IAE7B,OAAO,WAAP,GACI,oBAACC,qBAAmBA;QAAC,MAAM;qBACvB,oBAACC,UAAQA;QAAC,IAAI;QAAgB,MAAM;qBAChC,oBAACA,UAAQA;QACL,IAAIH,MAAM;QACV,MAAM;QACN,OAAOD;;AAK3B"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { AllowCustomColors } from "./LexicalTheme/AllowCustomColors.js";
|
|
1
2
|
import { Color } from "./LexicalTheme/Color.js";
|
|
2
3
|
export declare const LexicalTheme: {
|
|
4
|
+
AllowCustomColors: typeof AllowCustomColors;
|
|
3
5
|
Color: typeof Color;
|
|
4
6
|
Typography: {
|
|
5
7
|
Heading: typeof import("./LexicalTheme/Typography.js").Heading;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { AllowCustomColors } from "./LexicalTheme/AllowCustomColors.js";
|
|
1
2
|
import { Color } from "./LexicalTheme/Color.js";
|
|
2
3
|
import { Typography } from "./LexicalTheme/Typography.js";
|
|
3
4
|
const LexicalTheme = {
|
|
5
|
+
AllowCustomColors: AllowCustomColors,
|
|
4
6
|
Color: Color,
|
|
5
7
|
Typography: Typography
|
|
6
8
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config/AdminConfig/LexicalTheme.js","sources":["../../../src/config/AdminConfig/LexicalTheme.tsx"],"sourcesContent":["import { Color } from \"./LexicalTheme/Color.js\";\nimport { Typography } from \"./LexicalTheme/Typography.js\";\n\nexport const LexicalTheme = {\n Color,\n Typography\n};\n"],"names":["LexicalTheme","Color","Typography"],"mappings":"
|
|
1
|
+
{"version":3,"file":"config/AdminConfig/LexicalTheme.js","sources":["../../../src/config/AdminConfig/LexicalTheme.tsx"],"sourcesContent":["import { AllowCustomColors } from \"./LexicalTheme/AllowCustomColors.js\";\nimport { Color } from \"./LexicalTheme/Color.js\";\nimport { Typography } from \"./LexicalTheme/Typography.js\";\n\nexport const LexicalTheme = {\n AllowCustomColors,\n Color,\n Typography\n};\n"],"names":["LexicalTheme","AllowCustomColors","Color","Typography"],"mappings":";;;AAIO,MAAMA,eAAe;IACxBC,mBAAiBA;IACjBC,OAAKA;IACLC,YAAUA;AACd"}
|
package/config/AdminConfig.d.ts
CHANGED
|
@@ -4,9 +4,12 @@ import type { SupportMenuConfig } from "./AdminConfig/Menu/SupportMenu.js";
|
|
|
4
4
|
import type { UserMenuConfig } from "./AdminConfig/Menu/UserMenu.js";
|
|
5
5
|
import { Route } from "./AdminConfig/Route.js";
|
|
6
6
|
import { type WidgetConfig } from "./AdminConfig/Widget.js";
|
|
7
|
+
import { Breadcrumb, type BreadcrumbConfig } from "./AdminConfig/Breadcrumbs.js";
|
|
7
8
|
import type { PermissionRendererConfig } from "../permissions/types.js";
|
|
8
9
|
import { Dialog } from "./AdminConfig/Dialog.js";
|
|
9
10
|
import type { DialogConfig } from "./AdminConfig/Dialog.js";
|
|
11
|
+
import { Drawer } from "./AdminConfig/Drawer.js";
|
|
12
|
+
import type { DrawerConfig } from "./AdminConfig/Drawer.js";
|
|
10
13
|
import type { FieldRendererConfig } from "./AdminConfig/FieldRenderer.js";
|
|
11
14
|
import type { LayoutRendererConfig } from "./AdminConfig/LayoutRenderer.js";
|
|
12
15
|
import type { EditorTheme } from "@webiny/lexical-theme";
|
|
@@ -25,9 +28,11 @@ export declare const useAdminConfig: () => {
|
|
|
25
28
|
horizontalLogo: React.ReactNode;
|
|
26
29
|
};
|
|
27
30
|
widgets: WidgetConfig[];
|
|
31
|
+
breadcrumbs: BreadcrumbConfig[];
|
|
28
32
|
permissionRenderers: PermissionRendererConfig[];
|
|
29
33
|
lexicalTheme: EditorTheme;
|
|
30
34
|
dialogs: DialogConfig[];
|
|
35
|
+
drawers: DrawerConfig[];
|
|
31
36
|
fieldRenderers: FieldRendererConfig[];
|
|
32
37
|
layoutRenderers: LayoutRendererConfig[];
|
|
33
38
|
};
|
|
@@ -468,10 +473,12 @@ export declare const AdminConfig: typeof Private & {
|
|
|
468
473
|
Dashboard: {
|
|
469
474
|
Widget: typeof import("./AdminConfig/Widget.js").Widget;
|
|
470
475
|
};
|
|
476
|
+
Breadcrumb: typeof Breadcrumb;
|
|
471
477
|
Security: {
|
|
472
478
|
Permissions: typeof import("./AdminConfig/SecurityPermissions.js").SecurityPermissions;
|
|
473
479
|
};
|
|
474
480
|
LexicalTheme: {
|
|
481
|
+
AllowCustomColors: typeof import("./AdminConfig/LexicalTheme/AllowCustomColors.js").AllowCustomColors;
|
|
475
482
|
Color: typeof import("./AdminConfig/LexicalTheme/Color.js").Color;
|
|
476
483
|
Typography: {
|
|
477
484
|
Heading: typeof import("./AdminConfig/LexicalTheme/Typography.js").Heading;
|
|
@@ -481,6 +488,7 @@ export declare const AdminConfig: typeof Private & {
|
|
|
481
488
|
};
|
|
482
489
|
};
|
|
483
490
|
Dialog: typeof Dialog;
|
|
491
|
+
Drawer: typeof Drawer;
|
|
484
492
|
Form: {
|
|
485
493
|
FieldRenderer: typeof import("./AdminConfig/FieldRenderer.js").FieldRenderer;
|
|
486
494
|
LayoutRenderer: typeof import("./AdminConfig/LayoutRenderer.js").LayoutRenderer;
|
package/config/AdminConfig.js
CHANGED
|
@@ -5,11 +5,13 @@ import { Tenant } from "./AdminConfig/Tenant.js";
|
|
|
5
5
|
import { Route } from "./AdminConfig/Route.js";
|
|
6
6
|
import { Theme } from "./AdminConfig/Theme.js";
|
|
7
7
|
import { Dashboard } from "./AdminConfig/Dashboard.js";
|
|
8
|
+
import { Breadcrumb } from "./AdminConfig/Breadcrumbs.js";
|
|
8
9
|
import { Security } from "./AdminConfig/Security.js";
|
|
9
10
|
import { LexicalTheme } from "./AdminConfig/LexicalTheme.js";
|
|
10
11
|
import { Title } from "./AdminConfig/Title.js";
|
|
11
12
|
import { Logo } from "./AdminConfig/Logo.js";
|
|
12
13
|
import { Dialog } from "./AdminConfig/Dialog.js";
|
|
14
|
+
import { Drawer } from "./AdminConfig/Drawer.js";
|
|
13
15
|
import { Form } from "./AdminConfig/Form.js";
|
|
14
16
|
import { createAdminConfig } from "./createAdminConfig.js";
|
|
15
17
|
import { createLexicalTokens } from "@webiny/lexical-theme/createLexicalEditorTokens.js";
|
|
@@ -28,7 +30,8 @@ const useAdminConfig = ()=>{
|
|
|
28
30
|
colors: baseConfig.lexicalTheme?.colors,
|
|
29
31
|
typography: baseConfig.lexicalTheme?.typography || {},
|
|
30
32
|
fontSizes: [],
|
|
31
|
-
tokens: lexicalTokens
|
|
33
|
+
tokens: lexicalTokens,
|
|
34
|
+
allowCustomColors: baseConfig.lexicalTheme?.allowCustomColors ?? false
|
|
32
35
|
};
|
|
33
36
|
return {
|
|
34
37
|
menus: baseConfig.menus ?? [],
|
|
@@ -40,9 +43,11 @@ const useAdminConfig = ()=>{
|
|
|
40
43
|
horizontalLogo: baseConfig.horizontalLogo
|
|
41
44
|
},
|
|
42
45
|
widgets: baseConfig.widgets ?? [],
|
|
46
|
+
breadcrumbs: baseConfig.breadcrumbs ?? [],
|
|
43
47
|
permissionRenderers: baseConfig.permissionRenderers ?? [],
|
|
44
48
|
lexicalTheme,
|
|
45
49
|
dialogs: baseConfig.dialogs ?? [],
|
|
50
|
+
drawers: baseConfig.drawers ?? [],
|
|
46
51
|
fieldRenderers: baseConfig.fieldRenderers ?? [],
|
|
47
52
|
layoutRenderers: baseConfig.layoutRenderers ?? []
|
|
48
53
|
};
|
|
@@ -58,9 +63,11 @@ const AdminConfig = Object.assign(Private, {
|
|
|
58
63
|
Title: Title,
|
|
59
64
|
Logo: Logo,
|
|
60
65
|
Dashboard: Dashboard,
|
|
66
|
+
Breadcrumb: Breadcrumb,
|
|
61
67
|
Security: Security,
|
|
62
68
|
LexicalTheme: LexicalTheme,
|
|
63
69
|
Dialog: Dialog,
|
|
70
|
+
Drawer: Drawer,
|
|
64
71
|
Form: Form,
|
|
65
72
|
useAdminConfig: useAdminConfig
|
|
66
73
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config/AdminConfig.js","sources":["../../src/config/AdminConfig.tsx"],"sourcesContent":["import React from \"react\";\nimport { createProvider } from \"@webiny/app\";\nimport { Menu, type MenuConfig } from \"./AdminConfig/Menu.js\";\nimport type { TenantConfig } from \"./AdminConfig/Tenant.js\";\nimport { Tenant } from \"./AdminConfig/Tenant.js\";\nimport type { SupportMenuConfig } from \"./AdminConfig/Menu/SupportMenu.js\";\nimport type { UserMenuConfig } from \"./AdminConfig/Menu/UserMenu.js\";\nimport { Route } from \"./AdminConfig/Route.js\";\nimport { Theme } from \"./AdminConfig/Theme.js\";\nimport { Dashboard } from \"./AdminConfig/Dashboard.js\";\nimport { type WidgetConfig } from \"./AdminConfig/Widget.js\";\nimport { Security } from \"./AdminConfig/Security.js\";\nimport type { PermissionRendererConfig } from \"../permissions/types.js\";\nimport { LexicalTheme } from \"./AdminConfig/LexicalTheme.js\";\nimport { Title } from \"./AdminConfig/Title.js\";\nimport { Logo } from \"./AdminConfig/Logo.js\";\nimport { Dialog } from \"./AdminConfig/Dialog.js\";\nimport type { DialogConfig } from \"./AdminConfig/Dialog.js\";\nimport { Form } from \"./AdminConfig/Form.js\";\nimport type { FieldRendererConfig } from \"./AdminConfig/FieldRenderer.js\";\nimport type { LayoutRendererConfig } from \"./AdminConfig/LayoutRenderer.js\";\nimport { createAdminConfig } from \"./createAdminConfig.js\";\nimport type { EditorTheme } from \"@webiny/lexical-theme\";\nimport { createLexicalTokens } from \"@webiny/lexical-theme/createLexicalEditorTokens.js\";\n\nconst base = createAdminConfig<AdminConfig>();\n\nexport const AdminWithConfig = Object.assign(base.WithConfig, {\n displayName: \"AdminWithConfig\"\n});\n\ninterface AdminConfig {\n menus: MenuConfig[];\n supportMenus: SupportMenuConfig[];\n userMenus: UserMenuConfig[];\n tenant: TenantConfig;\n title: string;\n squareLogo: React.ReactNode;\n horizontalLogo: React.ReactNode;\n widgets: WidgetConfig[];\n permissionRenderers: PermissionRendererConfig[];\n lexicalTheme: EditorTheme;\n dialogs: DialogConfig[];\n fieldRenderers: FieldRendererConfig[];\n layoutRenderers: LayoutRendererConfig[];\n}\n\n/* Once the app fully renders (after the LoginScreen), apply protected configs. */\nexport const AdminConfigPlugin = <base.ApplyProtectedConfig />;\n\nexport const AdminConfigProvider = createProvider(Original => {\n return function AdminConfigProvider({ children }) {\n return (\n <AdminWithConfig>\n <base.ApplyPublicConfig />\n <Original>{children}</Original>\n </AdminWithConfig>\n );\n };\n});\n\nconst lexicalTokens = createLexicalTokens(\"wa-lx-\");\n\nexport const useAdminConfig = () => {\n const baseConfig = base.useConfig();\n\n const lexicalTheme: EditorTheme = {\n colors: baseConfig.lexicalTheme?.colors,\n typography: baseConfig.lexicalTheme?.typography || {},\n fontSizes: [],\n tokens: lexicalTokens\n };\n\n return {\n menus: baseConfig.menus ?? [],\n userMenus: baseConfig.userMenus ?? [],\n supportMenus: baseConfig.supportMenus ?? [],\n title: baseConfig.title,\n logo: {\n squareLogo: baseConfig.squareLogo,\n horizontalLogo: baseConfig.horizontalLogo\n },\n widgets: baseConfig.widgets ?? [],\n permissionRenderers: baseConfig.permissionRenderers ?? [],\n lexicalTheme,\n dialogs: baseConfig.dialogs ?? [],\n fieldRenderers: baseConfig.fieldRenderers ?? [],\n layoutRenderers: baseConfig.layoutRenderers ?? []\n };\n};\n\nexport interface PublicProps {\n children: React.ReactNode;\n}\n\nexport const Public = ({ children }: PublicProps) => {\n return <base.PublicConfig>{children}</base.PublicConfig>;\n};\n\nexport interface PrivateProps {\n children: React.ReactNode;\n}\n\nexport const Private = ({ children }: PrivateProps) => {\n return <base.PrivateConfig>{children}</base.PrivateConfig>;\n};\n\nexport const AdminConfig = Object.assign(Private, {\n Public,\n Theme,\n Menu,\n Route,\n Tenant,\n Title,\n Logo,\n Dashboard,\n Security,\n LexicalTheme,\n Dialog,\n Form,\n useAdminConfig\n});\n"],"names":["base","createAdminConfig","AdminWithConfig","Object","AdminConfigPlugin","AdminConfigProvider","createProvider","Original","children","lexicalTokens","createLexicalTokens","useAdminConfig","baseConfig","lexicalTheme","Public","Private","AdminConfig","Theme","Menu","Route","Tenant","Title","Logo","Dashboard","Security","LexicalTheme","Dialog","Form"],"mappings":"
|
|
1
|
+
{"version":3,"file":"config/AdminConfig.js","sources":["../../src/config/AdminConfig.tsx"],"sourcesContent":["import React from \"react\";\nimport { createProvider } from \"@webiny/app\";\nimport { Menu, type MenuConfig } from \"./AdminConfig/Menu.js\";\nimport type { TenantConfig } from \"./AdminConfig/Tenant.js\";\nimport { Tenant } from \"./AdminConfig/Tenant.js\";\nimport type { SupportMenuConfig } from \"./AdminConfig/Menu/SupportMenu.js\";\nimport type { UserMenuConfig } from \"./AdminConfig/Menu/UserMenu.js\";\nimport { Route } from \"./AdminConfig/Route.js\";\nimport { Theme } from \"./AdminConfig/Theme.js\";\nimport { Dashboard } from \"./AdminConfig/Dashboard.js\";\nimport { type WidgetConfig } from \"./AdminConfig/Widget.js\";\nimport { Breadcrumb, type BreadcrumbConfig } from \"./AdminConfig/Breadcrumbs.js\";\nimport { Security } from \"./AdminConfig/Security.js\";\nimport type { PermissionRendererConfig } from \"../permissions/types.js\";\nimport { LexicalTheme } from \"./AdminConfig/LexicalTheme.js\";\nimport { Title } from \"./AdminConfig/Title.js\";\nimport { Logo } from \"./AdminConfig/Logo.js\";\nimport { Dialog } from \"./AdminConfig/Dialog.js\";\nimport type { DialogConfig } from \"./AdminConfig/Dialog.js\";\nimport { Drawer } from \"./AdminConfig/Drawer.js\";\nimport type { DrawerConfig } from \"./AdminConfig/Drawer.js\";\nimport { Form } from \"./AdminConfig/Form.js\";\nimport type { FieldRendererConfig } from \"./AdminConfig/FieldRenderer.js\";\nimport type { LayoutRendererConfig } from \"./AdminConfig/LayoutRenderer.js\";\nimport { createAdminConfig } from \"./createAdminConfig.js\";\nimport type { EditorTheme } from \"@webiny/lexical-theme\";\nimport { createLexicalTokens } from \"@webiny/lexical-theme/createLexicalEditorTokens.js\";\n\nconst base = createAdminConfig<AdminConfig>();\n\nexport const AdminWithConfig = Object.assign(base.WithConfig, {\n displayName: \"AdminWithConfig\"\n});\n\ninterface AdminConfig {\n menus: MenuConfig[];\n supportMenus: SupportMenuConfig[];\n userMenus: UserMenuConfig[];\n tenant: TenantConfig;\n title: string;\n squareLogo: React.ReactNode;\n horizontalLogo: React.ReactNode;\n widgets: WidgetConfig[];\n breadcrumbs: BreadcrumbConfig[];\n permissionRenderers: PermissionRendererConfig[];\n lexicalTheme: EditorTheme;\n dialogs: DialogConfig[];\n drawers: DrawerConfig[];\n fieldRenderers: FieldRendererConfig[];\n layoutRenderers: LayoutRendererConfig[];\n}\n\n/* Once the app fully renders (after the LoginScreen), apply protected configs. */\nexport const AdminConfigPlugin = <base.ApplyProtectedConfig />;\n\nexport const AdminConfigProvider = createProvider(Original => {\n return function AdminConfigProvider({ children }) {\n return (\n <AdminWithConfig>\n <base.ApplyPublicConfig />\n <Original>{children}</Original>\n </AdminWithConfig>\n );\n };\n});\n\nconst lexicalTokens = createLexicalTokens(\"wa-lx-\");\n\nexport const useAdminConfig = () => {\n const baseConfig = base.useConfig();\n\n const lexicalTheme: EditorTheme = {\n colors: baseConfig.lexicalTheme?.colors,\n typography: baseConfig.lexicalTheme?.typography || {},\n fontSizes: [],\n tokens: lexicalTokens,\n allowCustomColors: baseConfig.lexicalTheme?.allowCustomColors ?? false\n };\n\n return {\n menus: baseConfig.menus ?? [],\n userMenus: baseConfig.userMenus ?? [],\n supportMenus: baseConfig.supportMenus ?? [],\n title: baseConfig.title,\n logo: {\n squareLogo: baseConfig.squareLogo,\n horizontalLogo: baseConfig.horizontalLogo\n },\n widgets: baseConfig.widgets ?? [],\n breadcrumbs: baseConfig.breadcrumbs ?? [],\n permissionRenderers: baseConfig.permissionRenderers ?? [],\n lexicalTheme,\n dialogs: baseConfig.dialogs ?? [],\n drawers: baseConfig.drawers ?? [],\n fieldRenderers: baseConfig.fieldRenderers ?? [],\n layoutRenderers: baseConfig.layoutRenderers ?? []\n };\n};\n\nexport interface PublicProps {\n children: React.ReactNode;\n}\n\nexport const Public = ({ children }: PublicProps) => {\n return <base.PublicConfig>{children}</base.PublicConfig>;\n};\n\nexport interface PrivateProps {\n children: React.ReactNode;\n}\n\nexport const Private = ({ children }: PrivateProps) => {\n return <base.PrivateConfig>{children}</base.PrivateConfig>;\n};\n\nexport const AdminConfig = Object.assign(Private, {\n Public,\n Theme,\n Menu,\n Route,\n Tenant,\n Title,\n Logo,\n Dashboard,\n Breadcrumb,\n Security,\n LexicalTheme,\n Dialog,\n Drawer,\n Form,\n useAdminConfig\n});\n"],"names":["base","createAdminConfig","AdminWithConfig","Object","AdminConfigPlugin","AdminConfigProvider","createProvider","Original","children","lexicalTokens","createLexicalTokens","useAdminConfig","baseConfig","lexicalTheme","Public","Private","AdminConfig","Theme","Menu","Route","Tenant","Title","Logo","Dashboard","Breadcrumb","Security","LexicalTheme","Dialog","Drawer","Form"],"mappings":";;;;;;;;;;;;;;;;;AA4BA,MAAMA,OAAOC;AAEN,MAAMC,kBAAkBC,OAAO,MAAM,CAACH,KAAK,UAAU,EAAE;IAC1D,aAAa;AACjB;AAqBO,MAAMI,oBAAoB,WAAHA,GAAG,oBAACJ,KAAK,oBAAoB;AAEpD,MAAMK,kCAAsBC,eAAeC,CAAAA,WACvC,SAA6B,EAAEC,QAAQ,EAAE;QAC5C,OAAO,WAAP,GACI,oBAACN,iBAAeA,MAAAA,WAAAA,GACZ,oBAACF,KAAK,iBAAiB,uBACvB,oBAACO,UAAAA,MAAUC;IAGvB;AAGJ,MAAMC,gBAAgBC,oBAAoB;AAEnC,MAAMC,iBAAiB;IAC1B,MAAMC,aAAaZ,KAAK,SAAS;IAEjC,MAAMa,eAA4B;QAC9B,QAAQD,WAAW,YAAY,EAAE;QACjC,YAAYA,WAAW,YAAY,EAAE,cAAc,CAAC;QACpD,WAAW,EAAE;QACb,QAAQH;QACR,mBAAmBG,WAAW,YAAY,EAAE,qBAAqB;IACrE;IAEA,OAAO;QACH,OAAOA,WAAW,KAAK,IAAI,EAAE;QAC7B,WAAWA,WAAW,SAAS,IAAI,EAAE;QACrC,cAAcA,WAAW,YAAY,IAAI,EAAE;QAC3C,OAAOA,WAAW,KAAK;QACvB,MAAM;YACF,YAAYA,WAAW,UAAU;YACjC,gBAAgBA,WAAW,cAAc;QAC7C;QACA,SAASA,WAAW,OAAO,IAAI,EAAE;QACjC,aAAaA,WAAW,WAAW,IAAI,EAAE;QACzC,qBAAqBA,WAAW,mBAAmB,IAAI,EAAE;QACzDC;QACA,SAASD,WAAW,OAAO,IAAI,EAAE;QACjC,SAASA,WAAW,OAAO,IAAI,EAAE;QACjC,gBAAgBA,WAAW,cAAc,IAAI,EAAE;QAC/C,iBAAiBA,WAAW,eAAe,IAAI,EAAE;IACrD;AACJ;AAMO,MAAME,SAAS,CAAC,EAAEN,QAAQ,EAAe,GACrC,WAAP,GAAO,oBAACR,KAAK,YAAY,QAAEQ;AAOxB,MAAMO,UAAU,CAAC,EAAEP,QAAQ,EAAgB,GACvC,WAAP,GAAO,oBAACR,KAAK,aAAa,QAAEQ;AAGzB,MAAMQ,cAAcb,OAAO,MAAM,CAACY,SAAS;IAC9CD,QAAAA;IACAG,OAAKA;IACLC,MAAIA;IACJC,OAAKA;IACLC,QAAMA;IACNC,OAAKA;IACLC,MAAIA;IACJC,WAASA;IACTC,YAAUA;IACVC,UAAQA;IACRC,cAAYA;IACZC,QAAMA;IACNC,QAAMA;IACNC,MAAIA;IACJlB,gBAAAA;AACJ"}
|
package/exports/admin.d.ts
CHANGED
|
@@ -8,3 +8,6 @@ export { Tool, ToolPipelineRunner, LexicalContext } from "../features/tools/inde
|
|
|
8
8
|
export { ToolsFeature } from "../features/tools/index.js";
|
|
9
9
|
export { AdminConfig } from "../config/AdminConfig.js";
|
|
10
10
|
export { Routes } from "../routes.js";
|
|
11
|
+
export { BulkActionButton, useBulkActionDialog } from "../components/BulkActions/index.js";
|
|
12
|
+
export { Notifications } from "../features/notifications/abstractions.js";
|
|
13
|
+
export { Command, CommandPalettePresenter } from "../presentation/commandPalette/index.js";
|
package/exports/admin.js
CHANGED
|
@@ -7,3 +7,6 @@ export { useBuildParams } from "../presentation/buildParams/useBuildParams.js";
|
|
|
7
7
|
export { LexicalContext, Tool, ToolPipelineRunner, ToolsFeature } from "../features/tools/index.js";
|
|
8
8
|
export { AdminConfig } from "../config/AdminConfig.js";
|
|
9
9
|
export { Routes } from "../routes.js";
|
|
10
|
+
export { BulkActionButton, useBulkActionDialog } from "../components/BulkActions/index.js";
|
|
11
|
+
export { Notifications } from "../features/notifications/abstractions.js";
|
|
12
|
+
export { Command, CommandPalettePresenter } from "../presentation/commandPalette/index.js";
|
|
@@ -2,7 +2,7 @@ import type { Identity } from "../../domain/Identity.js";
|
|
|
2
2
|
export interface Role {
|
|
3
3
|
id: string;
|
|
4
4
|
name: string;
|
|
5
|
-
description: string;
|
|
5
|
+
description: string | null;
|
|
6
6
|
slug: string;
|
|
7
7
|
system?: boolean;
|
|
8
8
|
plugin: boolean | null;
|
|
@@ -12,7 +12,7 @@ export interface Role {
|
|
|
12
12
|
export interface Team {
|
|
13
13
|
id: string;
|
|
14
14
|
name: string;
|
|
15
|
-
description: string;
|
|
15
|
+
description: string | null;
|
|
16
16
|
slug: string;
|
|
17
17
|
system?: boolean;
|
|
18
18
|
plugin: boolean | null;
|
|
@@ -28,7 +28,7 @@ export interface ApiKey {
|
|
|
28
28
|
slug: string;
|
|
29
29
|
token: string;
|
|
30
30
|
name: string;
|
|
31
|
-
description: string;
|
|
31
|
+
description: string | null;
|
|
32
32
|
permissions: Identity.Permission[];
|
|
33
33
|
createdOn: string;
|
|
34
34
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ApiStreamClient } from "@webiny/app/features/apiStreamClient";
|
|
2
|
+
import { EnvConfig } from "@webiny/app/features/envConfig";
|
|
3
|
+
import { AiChatGateway as Abstraction } from "./abstractions.js";
|
|
4
|
+
import type { AiChatRequest } from "./abstractions.js";
|
|
5
|
+
import type { AiChatStreamEvent } from "./abstractions.js";
|
|
6
|
+
import { AuthenticationContext } from "../../features/security/AuthenticationContext/index.js";
|
|
7
|
+
import { TenantContext } from "../../features/tenancy/abstractions.js";
|
|
8
|
+
/**
|
|
9
|
+
* Talks to the API app's chat routes.
|
|
10
|
+
*
|
|
11
|
+
* Streaming goes through `ApiStreamClient`, so auth and tenant headers come from the platform's own
|
|
12
|
+
* decorators — including `x-webiny-authorization`, which the streaming path needs because on AWS
|
|
13
|
+
* SigV4 occupies `Authorization`. Getting that wrong would silently make every streamed request
|
|
14
|
+
* anonymous.
|
|
15
|
+
*
|
|
16
|
+
* The buffered call still uses `fetch`: `ApiStreamClient` hands back an unread `Response` for a caller
|
|
17
|
+
* that owns a read loop, which is the wrong shape for a single JSON answer.
|
|
18
|
+
*/
|
|
19
|
+
declare class AiChatGatewayImpl implements Abstraction.Interface {
|
|
20
|
+
private authContext;
|
|
21
|
+
private envConfig;
|
|
22
|
+
private tenantContext;
|
|
23
|
+
private streamClient;
|
|
24
|
+
constructor(authContext: AuthenticationContext.Interface, envConfig: EnvConfig.Interface, tenantContext: TenantContext.Interface, streamClient: ApiStreamClient.Interface);
|
|
25
|
+
stream(request: AiChatRequest, signal?: AbortSignal): AsyncIterable<AiChatStreamEvent>;
|
|
26
|
+
}
|
|
27
|
+
export declare const AiChatGateway: typeof AiChatGatewayImpl & {
|
|
28
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IAiChatGateway>;
|
|
29
|
+
};
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ApiStreamClient, readServerSentEvents } from "@webiny/app/features/apiStreamClient";
|
|
2
|
+
import { EnvConfig } from "@webiny/app/features/envConfig";
|
|
3
|
+
import { AiChatGateway } from "./abstractions.js";
|
|
4
|
+
import { AuthenticationContext } from "../security/AuthenticationContext/index.js";
|
|
5
|
+
import { TenantContext } from "../tenancy/abstractions.js";
|
|
6
|
+
const CHAT_STREAM_PATH = "/stream/ai/chat";
|
|
7
|
+
const toBody = (request)=>{
|
|
8
|
+
const body = {
|
|
9
|
+
messages: request.messages
|
|
10
|
+
};
|
|
11
|
+
if (request.approvals?.length) body["approvals"] = request.approvals;
|
|
12
|
+
return body;
|
|
13
|
+
};
|
|
14
|
+
class AiChatGatewayImpl {
|
|
15
|
+
constructor(authContext, envConfig, tenantContext, streamClient){
|
|
16
|
+
this.authContext = authContext;
|
|
17
|
+
this.envConfig = envConfig;
|
|
18
|
+
this.tenantContext = tenantContext;
|
|
19
|
+
this.streamClient = streamClient;
|
|
20
|
+
}
|
|
21
|
+
async *stream(request, signal) {
|
|
22
|
+
const response = await this.streamClient.execute({
|
|
23
|
+
path: CHAT_STREAM_PATH,
|
|
24
|
+
body: toBody(request),
|
|
25
|
+
signal
|
|
26
|
+
});
|
|
27
|
+
yield* readServerSentEvents(response);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const AiChatGateway_AiChatGateway = AiChatGateway.createImplementation({
|
|
31
|
+
implementation: AiChatGatewayImpl,
|
|
32
|
+
dependencies: [
|
|
33
|
+
AuthenticationContext,
|
|
34
|
+
EnvConfig,
|
|
35
|
+
TenantContext,
|
|
36
|
+
ApiStreamClient
|
|
37
|
+
]
|
|
38
|
+
});
|
|
39
|
+
export { AiChatGateway_AiChatGateway as AiChatGateway };
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=AiChatGateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/aiChat/AiChatGateway.js","sources":["../../../src/features/aiChat/AiChatGateway.ts"],"sourcesContent":["import { ApiStreamClient } from \"@webiny/app/features/apiStreamClient\";\nimport { readServerSentEvents } from \"@webiny/app/features/apiStreamClient\";\nimport { EnvConfig } from \"@webiny/app/features/envConfig\";\nimport { AiChatGateway as Abstraction } from \"./abstractions.js\";\nimport type { AiChatRequest } from \"./abstractions.js\";\nimport type { AiChatStreamEvent } from \"./abstractions.js\";\nimport { AuthenticationContext } from \"~/features/security/AuthenticationContext/index.js\";\nimport { TenantContext } from \"~/features/tenancy/abstractions.js\";\n\n/*\n * The `/stream/` prefix is required, not cosmetic: it is the CloudFront behavior that targets the\n * Lambda Function URL. Any other path lands on API Gateway and gets buffered.\n */\nconst CHAT_STREAM_PATH = \"/stream/ai/chat\";\n\nconst toBody = (request: AiChatRequest): Record<string, unknown> => {\n const body: Record<string, unknown> = { messages: request.messages };\n\n if (request.approvals?.length) {\n body[\"approvals\"] = request.approvals;\n }\n\n return body;\n};\n\n/**\n * Talks to the API app's chat routes.\n *\n * Streaming goes through `ApiStreamClient`, so auth and tenant headers come from the platform's own\n * decorators — including `x-webiny-authorization`, which the streaming path needs because on AWS\n * SigV4 occupies `Authorization`. Getting that wrong would silently make every streamed request\n * anonymous.\n *\n * The buffered call still uses `fetch`: `ApiStreamClient` hands back an unread `Response` for a caller\n * that owns a read loop, which is the wrong shape for a single JSON answer.\n */\nclass AiChatGatewayImpl implements Abstraction.Interface {\n constructor(\n private authContext: AuthenticationContext.Interface,\n private envConfig: EnvConfig.Interface,\n private tenantContext: TenantContext.Interface,\n private streamClient: ApiStreamClient.Interface\n ) {}\n\n async *stream(request: AiChatRequest, signal?: AbortSignal): AsyncIterable<AiChatStreamEvent> {\n const response = await this.streamClient.execute({\n path: CHAT_STREAM_PATH,\n body: toBody(request),\n signal\n });\n\n yield* readServerSentEvents<AiChatStreamEvent>(response);\n }\n}\n\nexport const AiChatGateway = Abstraction.createImplementation({\n implementation: AiChatGatewayImpl,\n dependencies: [AuthenticationContext, EnvConfig, TenantContext, ApiStreamClient]\n});\n"],"names":["CHAT_STREAM_PATH","toBody","request","body","AiChatGatewayImpl","authContext","envConfig","tenantContext","streamClient","signal","response","readServerSentEvents","AiChatGateway","Abstraction","AuthenticationContext","EnvConfig","TenantContext","ApiStreamClient"],"mappings":";;;;;AAaA,MAAMA,mBAAmB;AAEzB,MAAMC,SAAS,CAACC;IACZ,MAAMC,OAAgC;QAAE,UAAUD,QAAQ,QAAQ;IAAC;IAEnE,IAAIA,QAAQ,SAAS,EAAE,QACnBC,IAAI,CAAC,YAAY,GAAGD,QAAQ,SAAS;IAGzC,OAAOC;AACX;AAaA,MAAMC;IACF,YACYC,WAA4C,EAC5CC,SAA8B,EAC9BC,aAAsC,EACtCC,YAAuC,CACjD;aAJUH,WAAW,GAAXA;aACAC,SAAS,GAATA;aACAC,aAAa,GAAbA;aACAC,YAAY,GAAZA;IACT;IAEH,OAAO,OAAON,OAAsB,EAAEO,MAAoB,EAAoC;QAC1F,MAAMC,WAAW,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YAC7C,MAAMV;YACN,MAAMC,OAAOC;YACbO;QACJ;QAEA,OAAOE,qBAAwCD;IACnD;AACJ;AAEO,MAAME,8BAAgBC,cAAAA,oBAAgC,CAAC;IAC1D,gBAAgBT;IAChB,cAAc;QAACU;QAAuBC;QAAWC;QAAeC;KAAgB;AACpF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { AiChatGateway } from "./abstractions.js";
|
|
2
|
+
import { AiChatPresenter as Abstraction, type IAiChatViewModel } from "./abstractions.js";
|
|
3
|
+
/**
|
|
4
|
+
* Owns the palette's AI conversation.
|
|
5
|
+
*
|
|
6
|
+
* A presenter rather than component state: several pieces change together, a network stream drives
|
|
7
|
+
* them, and an abort has to outlive any one render.
|
|
8
|
+
*
|
|
9
|
+
* Registered as a singleton, so `reset` genuinely clears rather than relying on unmount.
|
|
10
|
+
*/
|
|
11
|
+
declare class AiChatPresenterImpl implements Abstraction.Interface {
|
|
12
|
+
private gateway;
|
|
13
|
+
private turns;
|
|
14
|
+
private busy;
|
|
15
|
+
private controller;
|
|
16
|
+
constructor(gateway: AiChatGateway.Interface);
|
|
17
|
+
get vm(): IAiChatViewModel;
|
|
18
|
+
ask(question: string): void;
|
|
19
|
+
decide(turnIndex: number, approved: boolean): void;
|
|
20
|
+
reset(): void;
|
|
21
|
+
/** Replays settled turns so a follow-up ("and which of those is cheapest?") has context. */
|
|
22
|
+
private historyBefore;
|
|
23
|
+
private run;
|
|
24
|
+
private addTurn;
|
|
25
|
+
private patch;
|
|
26
|
+
private setBusy;
|
|
27
|
+
private clear;
|
|
28
|
+
}
|
|
29
|
+
export declare const AiChatPresenter: typeof AiChatPresenterImpl & {
|
|
30
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IAiChatPresenter>;
|
|
31
|
+
};
|
|
32
|
+
export {};
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { makeAutoObservable } from "mobx";
|
|
2
|
+
import { AiChatGateway, AiChatPresenter } from "./abstractions.js";
|
|
3
|
+
const emptyTurn = (question)=>({
|
|
4
|
+
question,
|
|
5
|
+
text: "",
|
|
6
|
+
tools: [],
|
|
7
|
+
completed: [],
|
|
8
|
+
failed: [],
|
|
9
|
+
running: false,
|
|
10
|
+
pendingApprovals: [],
|
|
11
|
+
messages: [],
|
|
12
|
+
settled: false
|
|
13
|
+
});
|
|
14
|
+
class AiChatPresenterImpl {
|
|
15
|
+
constructor(gateway){
|
|
16
|
+
this.gateway = gateway;
|
|
17
|
+
this.turns = [];
|
|
18
|
+
this.busy = false;
|
|
19
|
+
this.controller = null;
|
|
20
|
+
makeAutoObservable(this, {
|
|
21
|
+
controller: false
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
get vm() {
|
|
25
|
+
return {
|
|
26
|
+
busy: this.busy,
|
|
27
|
+
turns: this.turns.map((turn)=>({
|
|
28
|
+
question: turn.question,
|
|
29
|
+
text: turn.text,
|
|
30
|
+
tools: turn.tools,
|
|
31
|
+
completed: turn.completed,
|
|
32
|
+
failed: turn.failed,
|
|
33
|
+
running: turn.running,
|
|
34
|
+
pendingApprovals: turn.pendingApprovals,
|
|
35
|
+
settled: turn.settled,
|
|
36
|
+
...void 0 === turn.error ? {} : {
|
|
37
|
+
error: turn.error
|
|
38
|
+
}
|
|
39
|
+
}))
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
ask(question) {
|
|
43
|
+
const trimmed = question.trim();
|
|
44
|
+
if (!trimmed || this.busy) return;
|
|
45
|
+
const index = this.turns.length;
|
|
46
|
+
this.addTurn(trimmed);
|
|
47
|
+
this.run(index, {
|
|
48
|
+
messages: [
|
|
49
|
+
...this.historyBefore(index),
|
|
50
|
+
{
|
|
51
|
+
role: "user",
|
|
52
|
+
content: trimmed
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
decide(turnIndex, approved) {
|
|
58
|
+
const turn = this.turns[turnIndex];
|
|
59
|
+
if (!turn?.pendingApprovals.length || this.busy) return;
|
|
60
|
+
const approvals = turn.pendingApprovals.map((approval)=>({
|
|
61
|
+
approvalId: approval.approvalId,
|
|
62
|
+
approved
|
|
63
|
+
}));
|
|
64
|
+
const messages = [
|
|
65
|
+
...this.historyBefore(turnIndex),
|
|
66
|
+
{
|
|
67
|
+
role: "user",
|
|
68
|
+
content: turn.question
|
|
69
|
+
},
|
|
70
|
+
...turn.messages
|
|
71
|
+
];
|
|
72
|
+
this.patch(turnIndex, {
|
|
73
|
+
pendingApprovals: [],
|
|
74
|
+
settled: false,
|
|
75
|
+
running: true
|
|
76
|
+
});
|
|
77
|
+
this.run(turnIndex, {
|
|
78
|
+
messages,
|
|
79
|
+
approvals
|
|
80
|
+
}, true);
|
|
81
|
+
}
|
|
82
|
+
reset() {
|
|
83
|
+
this.controller?.abort();
|
|
84
|
+
this.controller = null;
|
|
85
|
+
this.clear();
|
|
86
|
+
}
|
|
87
|
+
historyBefore(upTo) {
|
|
88
|
+
const history = [];
|
|
89
|
+
for (const turn of this.turns.slice(0, upTo))if (turn.settled && !turn.error) {
|
|
90
|
+
history.push({
|
|
91
|
+
role: "user",
|
|
92
|
+
content: turn.question
|
|
93
|
+
});
|
|
94
|
+
history.push(...turn.messages);
|
|
95
|
+
}
|
|
96
|
+
return history;
|
|
97
|
+
}
|
|
98
|
+
async run(index, request, resuming = false) {
|
|
99
|
+
this.controller?.abort();
|
|
100
|
+
const controller = new AbortController();
|
|
101
|
+
this.controller = controller;
|
|
102
|
+
this.setBusy(true);
|
|
103
|
+
try {
|
|
104
|
+
const existing = resuming ? this.turns[index] : void 0;
|
|
105
|
+
let text = existing?.text ?? "";
|
|
106
|
+
const tools = existing ? [
|
|
107
|
+
...existing.tools
|
|
108
|
+
] : [];
|
|
109
|
+
const completed = existing ? [
|
|
110
|
+
...existing.completed
|
|
111
|
+
] : [];
|
|
112
|
+
const failed = existing ? [
|
|
113
|
+
...existing.failed
|
|
114
|
+
] : [];
|
|
115
|
+
const priorMessages = existing ? [
|
|
116
|
+
...existing.messages
|
|
117
|
+
] : [];
|
|
118
|
+
for await (const event of this.gateway.stream(request, controller.signal)){
|
|
119
|
+
if ("text" === event.type) {
|
|
120
|
+
text += event.text;
|
|
121
|
+
this.patch(index, {
|
|
122
|
+
text,
|
|
123
|
+
running: false
|
|
124
|
+
});
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if ("tool-call" === event.type) {
|
|
128
|
+
tools.push(event.name);
|
|
129
|
+
this.patch(index, {
|
|
130
|
+
tools: [
|
|
131
|
+
...tools
|
|
132
|
+
],
|
|
133
|
+
running: true
|
|
134
|
+
});
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
if ("tool-result" === event.type) {
|
|
138
|
+
completed.push(event.name);
|
|
139
|
+
this.patch(index, {
|
|
140
|
+
completed: [
|
|
141
|
+
...completed
|
|
142
|
+
]
|
|
143
|
+
});
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
if ("tool-error" === event.type) {
|
|
147
|
+
failed.push(event.name);
|
|
148
|
+
this.patch(index, {
|
|
149
|
+
failed: [
|
|
150
|
+
...failed
|
|
151
|
+
]
|
|
152
|
+
});
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
if ("approval" === event.type) {
|
|
156
|
+
this.patch(index, {
|
|
157
|
+
pendingApprovals: event.approvals,
|
|
158
|
+
running: false
|
|
159
|
+
});
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
if ("done" === event.type) {
|
|
163
|
+
this.patch(index, {
|
|
164
|
+
messages: [
|
|
165
|
+
...priorMessages,
|
|
166
|
+
...event.messages
|
|
167
|
+
],
|
|
168
|
+
settled: true,
|
|
169
|
+
running: false
|
|
170
|
+
});
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
if ("error" === event.type) return void this.patch(index, {
|
|
174
|
+
error: event.message,
|
|
175
|
+
settled: true,
|
|
176
|
+
running: false
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
} catch (error) {
|
|
180
|
+
if (!controller.signal.aborted) this.patch(index, {
|
|
181
|
+
error: error instanceof Error ? error.message : String(error),
|
|
182
|
+
settled: true,
|
|
183
|
+
running: false
|
|
184
|
+
});
|
|
185
|
+
} finally{
|
|
186
|
+
this.setBusy(false);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
addTurn(question) {
|
|
190
|
+
this.turns = [
|
|
191
|
+
...this.turns,
|
|
192
|
+
{
|
|
193
|
+
...emptyTurn(question),
|
|
194
|
+
running: true
|
|
195
|
+
}
|
|
196
|
+
];
|
|
197
|
+
}
|
|
198
|
+
patch(index, change) {
|
|
199
|
+
this.turns = this.turns.map((turn, i)=>i === index ? {
|
|
200
|
+
...turn,
|
|
201
|
+
...change
|
|
202
|
+
} : turn);
|
|
203
|
+
}
|
|
204
|
+
setBusy(busy) {
|
|
205
|
+
this.busy = busy;
|
|
206
|
+
}
|
|
207
|
+
clear() {
|
|
208
|
+
this.turns = [];
|
|
209
|
+
this.busy = false;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
const AiChatPresenter_AiChatPresenter = AiChatPresenter.createImplementation({
|
|
213
|
+
implementation: AiChatPresenterImpl,
|
|
214
|
+
dependencies: [
|
|
215
|
+
AiChatGateway
|
|
216
|
+
]
|
|
217
|
+
});
|
|
218
|
+
export { AiChatPresenter_AiChatPresenter as AiChatPresenter };
|
|
219
|
+
|
|
220
|
+
//# sourceMappingURL=AiChatPresenter.js.map
|