@rebasepro/plugin-data-enhancement 0.1.2 → 0.2.3
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/LICENSE +17 -109
- package/README.md +1 -1
- package/dist/admin/src/collection_editor/CollectionEditorDialogsContext.d.ts +19 -0
- package/dist/admin/src/collection_editor/ConfigControllerProvider.d.ts +41 -0
- package/dist/admin/src/collection_editor/_cms_internals.d.ts +29 -0
- package/dist/admin/src/collection_editor/api/generateCollectionApi.d.ts +77 -0
- package/dist/admin/src/collection_editor/index.d.ts +16 -0
- package/dist/admin/src/collection_editor/pgColumnToProperty.d.ts +6 -0
- package/dist/admin/src/collection_editor/types/collection_editor_controller.d.ts +59 -0
- package/dist/admin/src/collection_editor/types/collection_inference.d.ts +10 -0
- package/dist/admin/src/collection_editor/types/config_controller.d.ts +98 -0
- package/dist/admin/src/collection_editor/types/config_permissions.d.ts +19 -0
- package/dist/admin/src/collection_editor/ui/EditorCollectionAction.d.ts +2 -0
- package/dist/admin/src/collection_editor/ui/MissingReferenceWidget.d.ts +3 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.d.ts +36 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/AIModifiedPathsContext.d.ts +20 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/CollectionEditorDialog.d.ts +71 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.d.ts +19 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.d.ts +7 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.d.ts +16 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/CollectionRLSTab.d.ts +12 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/CollectionStudioView.d.ts +5 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/CollectionYupValidation.d.ts +14 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/CollectionsStudioView.d.ts +5 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/DisplaySettingsForm.d.ts +3 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/EnumForm.d.ts +12 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/GeneralSettingsForm.d.ts +7 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/GetCodeDialog.d.ts +6 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/KanbanConfigSection.d.ts +4 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/LayoutModeSwitch.d.ts +5 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/PropertyEditView.d.ts +47 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/PropertyFieldPreview.d.ts +16 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/PropertyTree.d.ts +31 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/SwitchControl.d.ts +8 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/ViewModeSwitch.d.ts +6 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.d.ts +7 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.d.ts +13 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/import/clean_import_data.d.ts +7 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.d.ts +7 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/BooleanPropertyField.d.ts +3 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/CommonPropertyFields.d.ts +10 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/DateTimePropertyField.d.ts +3 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/EnumPropertyField.d.ts +9 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/KeyValuePropertyField.d.ts +3 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/MapPropertyField.d.ts +7 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.d.ts +4 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/NumberPropertyField.d.ts +3 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.d.ts +14 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.d.ts +9 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.d.ts +9 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.d.ts +5 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/StringPropertyField.d.ts +5 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/UrlPropertyField.d.ts +4 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/VectorPropertyField.d.ts +3 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.d.ts +3 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.d.ts +5 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.d.ts +4 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.d.ts +3 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.d.ts +11 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.d.ts +3 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/templates/blog_template.d.ts +2 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/templates/pages_template.d.ts +2 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/templates/products_template.d.ts +2 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/templates/users_template.d.ts +2 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/util.d.ts +5 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/utils/strings.d.ts +1 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/utils/supported_fields.d.ts +3 -0
- package/dist/admin/src/collection_editor/ui/collection_editor/utils/update_property_for_widget.d.ts +2 -0
- package/dist/admin/src/collection_editor/useCollectionEditorController.d.ts +6 -0
- package/dist/admin/src/collection_editor/useCollectionsConfigController.d.ts +6 -0
- package/dist/admin/src/collection_editor/useLocalCollectionsConfigController.d.ts +6 -0
- package/dist/admin/src/collection_editor/validateCollectionJson.d.ts +22 -0
- package/dist/admin/src/components/AdminModeSyncer.d.ts +17 -0
- package/dist/admin/src/components/ArrayContainer.d.ts +58 -0
- package/dist/admin/src/components/ClearFilterSortButton.d.ts +5 -0
- package/dist/admin/src/components/CollectionEditorDialogs.d.ts +15 -0
- package/dist/admin/src/components/DefaultAppBar.d.ts +29 -0
- package/dist/admin/src/components/DefaultDrawer.d.ts +29 -0
- package/dist/admin/src/components/DeleteEntityDialog.d.ts +13 -0
- package/dist/admin/src/components/DrawerNavigationGroup.d.ts +49 -0
- package/dist/admin/src/components/DrawerNavigationItem.d.ts +10 -0
- package/dist/admin/src/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +39 -0
- package/dist/admin/src/components/EntityCollectionTable/EntityCollectionTable.d.ts +27 -0
- package/dist/admin/src/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +129 -0
- package/dist/admin/src/components/EntityCollectionTable/PropertyTableCell.d.ts +26 -0
- package/dist/admin/src/components/EntityCollectionTable/column_utils.d.ts +16 -0
- package/dist/admin/src/components/EntityCollectionTable/fields/TableMultipleRelationField.d.ts +21 -0
- package/dist/admin/src/components/EntityCollectionTable/fields/TableReferenceField.d.ts +22 -0
- package/dist/admin/src/components/EntityCollectionTable/fields/TableRelationField.d.ts +22 -0
- package/dist/admin/src/components/EntityCollectionTable/fields/TableRelationSelectorField.d.ts +20 -0
- package/dist/admin/src/components/EntityCollectionTable/fields/TableStorageUpload.d.ts +35 -0
- package/dist/admin/src/components/EntityCollectionTable/fields/VirtualTableDateField.d.ts +12 -0
- package/dist/admin/src/components/EntityCollectionTable/fields/VirtualTableInput.d.ts +9 -0
- package/dist/admin/src/components/EntityCollectionTable/fields/VirtualTableNumberInput.d.ts +8 -0
- package/dist/admin/src/components/EntityCollectionTable/fields/VirtualTableSelect.d.ts +15 -0
- package/dist/admin/src/components/EntityCollectionTable/fields/VirtualTableSwitch.d.ts +7 -0
- package/dist/admin/src/components/EntityCollectionTable/fields/VirtualTableUserSelect.d.ts +12 -0
- package/dist/admin/src/components/EntityCollectionTable/index.d.ts +6 -0
- package/dist/admin/src/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +25 -0
- package/dist/admin/src/components/EntityCollectionTable/internal/EntityTableCell.d.ts +32 -0
- package/dist/admin/src/components/EntityCollectionTable/internal/EntityTableCellActions.d.ts +9 -0
- package/dist/admin/src/components/EntityCollectionTable/internal/common.d.ts +5 -0
- package/dist/admin/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +27 -0
- package/dist/admin/src/components/EntityCollectionTable/internal/popup_field/useDraggable.d.ts +13 -0
- package/dist/admin/src/components/EntityCollectionTable/internal/popup_field/useWindowSize.d.ts +6 -0
- package/dist/admin/src/components/EntityCollectionTable/table_bindings.d.ts +28 -0
- package/dist/admin/src/components/EntityCollectionView/Board.d.ts +2 -0
- package/dist/admin/src/components/EntityCollectionView/BoardColumn.d.ts +42 -0
- package/dist/admin/src/components/EntityCollectionView/BoardColumnTitle.d.ts +9 -0
- package/dist/admin/src/components/EntityCollectionView/BoardSortableList.d.ts +14 -0
- package/dist/admin/src/components/EntityCollectionView/EntityBoardCard.d.ts +31 -0
- package/dist/admin/src/components/EntityCollectionView/EntityCard.d.ts +20 -0
- package/dist/admin/src/components/EntityCollectionView/EntityCollectionBoardView.d.ts +22 -0
- package/dist/admin/src/components/EntityCollectionView/EntityCollectionCardView.d.ts +32 -0
- package/dist/admin/src/components/EntityCollectionView/EntityCollectionListView.d.ts +50 -0
- package/dist/admin/src/components/EntityCollectionView/EntityCollectionView.d.ts +65 -0
- package/dist/admin/src/components/EntityCollectionView/EntityCollectionViewActions.d.ts +20 -0
- package/dist/admin/src/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +20 -0
- package/dist/admin/src/components/EntityCollectionView/FilterPresetsButton.d.ts +21 -0
- package/dist/admin/src/components/EntityCollectionView/FiltersDialog.d.ts +15 -0
- package/dist/admin/src/components/EntityCollectionView/SplitListView.d.ts +58 -0
- package/dist/admin/src/components/EntityCollectionView/ViewModeToggle.d.ts +44 -0
- package/dist/admin/src/components/EntityCollectionView/board_types.d.ts +105 -0
- package/dist/admin/src/components/EntityCollectionView/hooks/useCollectionInlineEditor.d.ts +12 -0
- package/dist/admin/src/components/EntityCollectionView/hooks/useKanbanDragAndDrop.d.ts +19 -0
- package/dist/admin/src/components/EntityCollectionView/useBoardDataController.d.ts +61 -0
- package/dist/admin/src/components/EntityCollectionView/useEntityPreviewSlots.d.ts +101 -0
- package/dist/admin/src/components/EntityCollectionView/useSelectionController.d.ts +2 -0
- package/dist/admin/src/components/EntityCollectionView/utils.d.ts +3 -0
- package/dist/admin/src/components/EntityDetailView.d.ts +31 -0
- package/dist/admin/src/components/EntityEditView.d.ts +57 -0
- package/dist/admin/src/components/EntityEditViewFormActions.d.ts +2 -0
- package/dist/admin/src/components/EntityJsonPreview.d.ts +3 -0
- package/dist/admin/src/components/EntityPreview.d.ts +56 -0
- package/dist/admin/src/components/EntitySidePanel.d.ts +10 -0
- package/dist/admin/src/components/EntityView.d.ts +12 -0
- package/dist/admin/src/components/FieldCaption.d.ts +5 -0
- package/dist/admin/src/components/HomePage/ContentHomePage.d.ts +11 -0
- package/dist/admin/src/components/HomePage/FavouritesView.d.ts +3 -0
- package/dist/admin/src/components/HomePage/HomePageDnD.d.ts +77 -0
- package/dist/admin/src/components/HomePage/NavigationCard.d.ts +11 -0
- package/dist/admin/src/components/HomePage/NavigationCardBinding.d.ts +18 -0
- package/dist/admin/src/components/HomePage/NavigationGroup.d.ts +11 -0
- package/dist/admin/src/components/HomePage/RenameGroupDialog.d.ts +9 -0
- package/dist/admin/src/components/HomePage/SmallNavigationCard.d.ts +6 -0
- package/dist/admin/src/components/PropertyCollectionView.d.ts +24 -0
- package/dist/admin/src/components/PropertyConfigBadge.d.ts +6 -0
- package/dist/admin/src/components/PropertyIdCopyTooltip.d.ts +8 -0
- package/dist/admin/src/components/RebaseAuthGate.d.ts +21 -0
- package/dist/admin/src/components/RebaseCMS.d.ts +10 -0
- package/dist/admin/src/components/RebaseLayout.d.ts +32 -0
- package/dist/admin/src/components/RebaseNavigation.d.ts +24 -0
- package/dist/admin/src/components/RebaseRouteDefs.d.ts +30 -0
- package/dist/admin/src/components/RebaseShell.d.ts +25 -0
- package/dist/admin/src/components/ReferenceTable/EntitySelectionTable.d.ts +59 -0
- package/dist/admin/src/components/ReferenceWidget.d.ts +30 -0
- package/dist/admin/src/components/RelationSelector.d.ts +32 -0
- package/dist/admin/src/components/SearchIconsView.d.ts +5 -0
- package/dist/admin/src/components/SelectableTable/SelectableTable.d.ts +95 -0
- package/dist/admin/src/components/SelectableTable/SelectableTableContext.d.ts +4 -0
- package/dist/admin/src/components/SelectableTable/SelectionStore.d.ts +26 -0
- package/dist/admin/src/components/SelectableTable/filters/BooleanFilterField.d.ts +9 -0
- package/dist/admin/src/components/SelectableTable/filters/DateTimeFilterField.d.ts +12 -0
- package/dist/admin/src/components/SelectableTable/filters/ReferenceFilterField.d.ts +15 -0
- package/dist/admin/src/components/SelectableTable/filters/RelationFilterField.d.ts +12 -0
- package/dist/admin/src/components/SelectableTable/filters/StringNumberFilterField.d.ts +13 -0
- package/dist/admin/src/components/SideDialogs.d.ts +25 -0
- package/dist/admin/src/components/SideEntityProvider.d.ts +32 -0
- package/dist/admin/src/components/UserSelector.d.ts +18 -0
- package/dist/admin/src/components/admin/CreationResultDialog.d.ts +5 -0
- package/dist/admin/src/components/admin/RoleChip.d.ts +4 -0
- package/dist/admin/src/components/admin/RolesFilterSelect.d.ts +2 -0
- package/dist/admin/src/components/admin/RolesView.d.ts +4 -0
- package/dist/admin/src/components/admin/UserRolesSelectField.d.ts +2 -0
- package/dist/admin/src/components/admin/UsersView.d.ts +4 -0
- package/dist/admin/src/components/app/AppBar.d.ts +12 -0
- package/dist/admin/src/components/app/Drawer.d.ts +19 -0
- package/dist/admin/src/components/app/Scaffold.d.ts +34 -0
- package/dist/admin/src/components/app/useApp.d.ts +17 -0
- package/dist/admin/src/components/common/default_entity_actions.d.ts +10 -0
- package/dist/admin/src/components/common/index.d.ts +1 -0
- package/dist/admin/src/components/field_configs.d.ts +7 -0
- package/dist/admin/src/components/history/EntityHistoryEntry.d.ts +17 -0
- package/dist/admin/src/components/history/EntityHistoryView.d.ts +6 -0
- package/dist/admin/src/components/history/LastEditedByFormAction.d.ts +6 -0
- package/dist/admin/src/components/history/LastEditedByIndicator.d.ts +10 -0
- package/dist/admin/src/components/history/UserChip.d.ts +4 -0
- package/dist/admin/src/components/history/index.d.ts +5 -0
- package/dist/admin/src/components/index.d.ts +39 -0
- package/dist/admin/src/contexts/BreacrumbsContext.d.ts +8 -0
- package/dist/admin/src/contexts/SideDialogsControllerContext.d.ts +3 -0
- package/dist/admin/src/data_export/export/BasicExportAction.d.ts +7 -0
- package/dist/admin/src/data_export/export/ExportCollectionAction.d.ts +11 -0
- package/dist/admin/src/data_export/export/export.d.ts +22 -0
- package/dist/admin/src/data_export/export/index.d.ts +3 -0
- package/dist/admin/src/data_export/index.d.ts +1 -0
- package/dist/admin/src/data_import/components/DataNewPropertiesMapping.d.ts +13 -0
- package/dist/admin/src/data_import/components/ImportFileUpload.d.ts +3 -0
- package/dist/admin/src/data_import/components/ImportNewPropertyFieldPreview.d.ts +9 -0
- package/dist/admin/src/data_import/components/ImportSaveInProgress.d.ts +8 -0
- package/dist/admin/src/data_import/components/index.d.ts +4 -0
- package/dist/admin/src/data_import/hooks/index.d.ts +1 -0
- package/dist/admin/src/data_import/hooks/useImportConfig.d.ts +2 -0
- package/dist/admin/src/data_import/import/ImportCollectionAction.d.ts +15 -0
- package/dist/admin/src/data_import/import/index.d.ts +1 -0
- package/dist/admin/src/data_import/index.d.ts +5 -0
- package/dist/admin/src/data_import/types/column_mapping.d.ts +20 -0
- package/dist/admin/src/data_import/types/index.d.ts +1 -0
- package/dist/admin/src/data_import/utils/data.d.ts +4 -0
- package/dist/admin/src/data_import/utils/file_headers.d.ts +6 -0
- package/dist/admin/src/data_import/utils/file_to_json.d.ts +6 -0
- package/dist/admin/src/data_import/utils/get_import_inference_type.d.ts +2 -0
- package/dist/admin/src/data_import/utils/index.d.ts +3 -0
- package/dist/admin/src/data_import/utils/transforms.d.ts +11 -0
- package/dist/admin/src/editor/components/SlashCommandMenu.d.ts +6 -0
- package/dist/admin/src/editor/components/editor-bubble-item.d.ts +8 -0
- package/dist/admin/src/editor/components/editor-bubble.d.ts +8 -0
- package/dist/admin/src/editor/components/image-bubble.d.ts +5 -0
- package/dist/admin/src/editor/components/index.d.ts +16 -0
- package/dist/admin/src/editor/components/table-bubble.d.ts +5 -0
- package/dist/admin/src/editor/editor.d.ts +30 -0
- package/dist/admin/src/editor/extensions/HighlightDecorationExtension.d.ts +24 -0
- package/dist/admin/src/editor/extensions/Image.d.ts +6 -0
- package/dist/admin/src/editor/extensions/TextLoadingDecorationExtension.d.ts +16 -0
- package/dist/admin/src/editor/extensions/clipboard.d.ts +7 -0
- package/dist/admin/src/editor/extensions/drag-and-drop.d.ts +9 -0
- package/dist/admin/src/editor/hooks/useProseMirror.d.ts +13 -0
- package/dist/admin/src/editor/hooks/useProseMirrorContext.d.ts +9 -0
- package/dist/admin/src/editor/index.d.ts +2 -0
- package/dist/admin/src/editor/markdown.d.ts +5 -0
- package/dist/admin/src/editor/nodeViews/ImageComponent.d.ts +3 -0
- package/dist/admin/src/editor/nodeViews/ReactNodeView.d.ts +29 -0
- package/dist/admin/src/editor/nodeViews/TaskItemComponent.d.ts +3 -0
- package/dist/admin/src/editor/nodeViews/index.d.ts +6 -0
- package/dist/admin/src/editor/plugins/index.d.ts +2 -0
- package/dist/admin/src/editor/plugins/inputrules.d.ts +6 -0
- package/dist/admin/src/editor/plugins/placeholderPlugin.d.ts +3 -0
- package/dist/admin/src/editor/plugins/slashCommandPlugin.d.ts +12 -0
- package/dist/admin/src/editor/schema.d.ts +2 -0
- package/dist/admin/src/editor/selectors/link-selector.d.ts +8 -0
- package/dist/admin/src/editor/selectors/node-selector.d.ts +15 -0
- package/dist/admin/src/editor/selectors/text-buttons.d.ts +1 -0
- package/dist/admin/src/editor/types.d.ts +5 -0
- package/dist/admin/src/editor/utils/prosemirror-utils.d.ts +7 -0
- package/dist/admin/src/editor/utils/remove_classes.d.ts +1 -0
- package/dist/admin/src/form/EntityForm.d.ts +10 -0
- package/dist/admin/src/form/EntityFormActions.d.ts +2 -0
- package/dist/admin/src/form/PropertyFieldBinding.d.ts +30 -0
- package/dist/admin/src/form/components/ErrorFocus.d.ts +4 -0
- package/dist/admin/src/form/components/FieldHelperText.d.ts +12 -0
- package/dist/admin/src/form/components/FormEntry.d.ts +6 -0
- package/dist/admin/src/form/components/FormLayout.d.ts +5 -0
- package/dist/admin/src/form/components/LabelWithIcon.d.ts +14 -0
- package/dist/admin/src/form/components/LabelWithIconAndTooltip.d.ts +15 -0
- package/dist/admin/src/form/components/LocalChangesMenu.d.ts +11 -0
- package/dist/admin/src/form/components/StorageItemPreview.d.ts +14 -0
- package/dist/admin/src/form/components/StorageUploadProgress.d.ts +10 -0
- package/dist/admin/src/form/components/index.d.ts +5 -0
- package/dist/admin/src/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +10 -0
- package/dist/admin/src/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +13 -0
- package/dist/admin/src/form/field_bindings/BlockFieldBinding.d.ts +11 -0
- package/dist/admin/src/form/field_bindings/DateTimeFieldBinding.d.ts +12 -0
- package/dist/admin/src/form/field_bindings/KeyValueFieldBinding.d.ts +8 -0
- package/dist/admin/src/form/field_bindings/MapFieldBinding.d.ts +10 -0
- package/dist/admin/src/form/field_bindings/MarkdownEditorFieldBinding.d.ts +12 -0
- package/dist/admin/src/form/field_bindings/MultiSelectFieldBinding.d.ts +10 -0
- package/dist/admin/src/form/field_bindings/MultipleRelationFieldBinding.d.ts +10 -0
- package/dist/admin/src/form/field_bindings/ReadOnlyFieldBinding.d.ts +11 -0
- package/dist/admin/src/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +10 -0
- package/dist/admin/src/form/field_bindings/ReferenceFieldBinding.d.ts +10 -0
- package/dist/admin/src/form/field_bindings/RelationFieldBinding.d.ts +3 -0
- package/dist/admin/src/form/field_bindings/RepeatFieldBinding.d.ts +11 -0
- package/dist/admin/src/form/field_bindings/SelectFieldBinding.d.ts +11 -0
- package/dist/admin/src/form/field_bindings/StorageUploadFieldBinding.d.ts +21 -0
- package/dist/admin/src/form/field_bindings/SwitchFieldBinding.d.ts +10 -0
- package/dist/admin/src/form/field_bindings/TextFieldBinding.d.ts +9 -0
- package/dist/admin/src/form/field_bindings/UserSelectFieldBinding.d.ts +14 -0
- package/dist/admin/src/form/field_bindings/VectorFieldBinding.d.ts +11 -0
- package/dist/admin/src/form/index.d.ts +21 -0
- package/dist/admin/src/form/useClearRestoreValue.d.ts +13 -0
- package/dist/admin/src/form/validation.d.ts +21 -0
- package/dist/admin/src/hooks/index.d.ts +15 -0
- package/dist/admin/src/hooks/navigation/contexts/CollectionRegistryContext.d.ts +5 -0
- package/dist/admin/src/hooks/navigation/contexts/NavigationStateContext.d.ts +4 -0
- package/dist/admin/src/hooks/navigation/contexts/UrlContext.d.ts +4 -0
- package/dist/admin/src/hooks/navigation/contexts/index.d.ts +3 -0
- package/dist/admin/src/hooks/navigation/useBuildCollectionRegistryController.d.ts +7 -0
- package/dist/admin/src/hooks/navigation/useBuildNavigationStateController.d.ts +34 -0
- package/dist/admin/src/hooks/navigation/useBuildUrlController.d.ts +7 -0
- package/dist/admin/src/hooks/navigation/useNavigationResolution.d.ts +7 -0
- package/dist/admin/src/hooks/navigation/useResolvedCollections.d.ts +28 -0
- package/dist/admin/src/hooks/navigation/useResolvedViews.d.ts +30 -0
- package/dist/admin/src/hooks/navigation/useTopLevelNavigation.d.ts +27 -0
- package/dist/admin/src/hooks/navigation/utils.d.ts +12 -0
- package/dist/admin/src/hooks/useBreadcrumbsController.d.ts +42 -0
- package/dist/admin/src/hooks/useBuildSideDialogsController.d.ts +2 -0
- package/dist/admin/src/hooks/useBuildSideEntityController.d.ts +6 -0
- package/dist/admin/src/hooks/useCMSContext.d.ts +27 -0
- package/dist/admin/src/hooks/useEntityHistory.d.ts +30 -0
- package/dist/admin/src/hooks/useEntitySelectionDialog.d.ts +18 -0
- package/dist/admin/src/hooks/useResolvedNavigationFrom.d.ts +73 -0
- package/dist/admin/src/hooks/useSideDialogsController.d.ts +19 -0
- package/dist/admin/src/hooks/useSideEntityController.d.ts +11 -0
- package/dist/admin/src/index.d.ts +15 -0
- package/dist/admin/src/preview/PropertyPreview.d.ts +7 -0
- package/dist/admin/src/preview/components/ArrayEnumPreview.d.ts +11 -0
- package/dist/admin/src/preview/components/BooleanPreview.d.ts +11 -0
- package/dist/admin/src/preview/components/DatePreview.d.ts +17 -0
- package/dist/admin/src/preview/components/EmptyValue.d.ts +6 -0
- package/dist/admin/src/preview/components/EnumValuesChip.d.ts +13 -0
- package/dist/admin/src/preview/components/ImagePreview.d.ts +16 -0
- package/dist/admin/src/preview/components/ReferencePreview.d.ts +17 -0
- package/dist/admin/src/preview/components/RelationPreview.d.ts +17 -0
- package/dist/admin/src/preview/components/StorageThumbnail.d.ts +15 -0
- package/dist/admin/src/preview/components/UrlComponentPreview.d.ts +14 -0
- package/dist/admin/src/preview/components/UserPreview.d.ts +9 -0
- package/dist/admin/src/preview/index.d.ts +23 -0
- package/dist/admin/src/preview/property_previews/ArrayOfMapsPreview.d.ts +6 -0
- package/dist/admin/src/preview/property_previews/ArrayOfReferencesPreview.d.ts +6 -0
- package/dist/admin/src/preview/property_previews/ArrayOfRelationsPreview.d.ts +6 -0
- package/dist/admin/src/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +6 -0
- package/dist/admin/src/preview/property_previews/ArrayOfStringsPreview.d.ts +6 -0
- package/dist/admin/src/preview/property_previews/ArrayOneOfPreview.d.ts +6 -0
- package/dist/admin/src/preview/property_previews/ArrayPropertyEnumPreview.d.ts +6 -0
- package/dist/admin/src/preview/property_previews/ArrayPropertyPreview.d.ts +6 -0
- package/dist/admin/src/preview/property_previews/MapPropertyPreview.d.ts +9 -0
- package/dist/admin/src/preview/property_previews/NumberPropertyPreview.d.ts +7 -0
- package/dist/admin/src/preview/property_previews/SkeletonPropertyComponent.d.ts +14 -0
- package/dist/admin/src/preview/property_previews/StringPropertyPreview.d.ts +7 -0
- package/dist/admin/src/preview/util.d.ts +7 -0
- package/dist/admin/src/routes/CustomViewRoute.d.ts +4 -0
- package/dist/admin/src/routes/RebaseRoute.d.ts +1 -0
- package/dist/admin/src/routes/index.d.ts +2 -0
- package/dist/admin/src/types/components/EntityFormActionsProps.d.ts +19 -0
- package/dist/admin/src/types/components/EntityFormProps.d.ts +49 -0
- package/dist/admin/src/types/components/PropertyPreviewProps.d.ts +47 -0
- package/dist/admin/src/types/components/formex.d.ts +40 -0
- package/dist/admin/src/types/components/index.d.ts +3 -0
- package/dist/admin/src/types/fields.d.ts +221 -0
- package/dist/admin/src/types/index.d.ts +2 -0
- package/dist/admin/src/util/entity_actions.d.ts +2 -0
- package/dist/admin/src/util/index.d.ts +5 -0
- package/dist/admin/src/util/navigation_utils.d.ts +26 -0
- package/dist/admin/src/util/previews.d.ts +4 -0
- package/dist/admin/src/util/property_utils.d.ts +25 -0
- package/dist/admin/src/util/resolutions.d.ts +9 -0
- package/dist/common/src/data/query_builder.d.ts +51 -0
- package/dist/common/src/index.d.ts +1 -0
- package/dist/common/src/util/entities.d.ts +2 -2
- package/dist/common/src/util/relations.d.ts +1 -1
- package/dist/core/src/components/LoginView/LoginView.d.ts +1 -6
- package/dist/core/src/contexts/SnackbarProvider.d.ts +1 -1
- package/dist/core/src/hooks/data/save.d.ts +2 -2
- package/dist/core/src/hooks/data/useEntityFetch.d.ts +5 -0
- package/dist/core/src/hooks/useResolvedComponent.d.ts +1 -1
- package/dist/index.es.js +1 -2
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +5 -5
- package/dist/index.umd.js.map +1 -1
- package/dist/types/src/controllers/auth.d.ts +9 -8
- package/dist/types/src/controllers/client.d.ts +3 -0
- package/dist/types/src/controllers/data.d.ts +21 -0
- package/dist/types/src/types/auth_adapter.d.ts +356 -0
- package/dist/types/src/types/collections.d.ts +67 -2
- package/dist/types/src/types/database_adapter.d.ts +94 -0
- package/dist/types/src/types/entity_actions.d.ts +7 -1
- package/dist/types/src/types/entity_callbacks.d.ts +1 -1
- package/dist/types/src/types/entity_views.d.ts +36 -1
- package/dist/types/src/types/index.d.ts +2 -0
- package/dist/types/src/types/plugins.d.ts +1 -1
- package/dist/types/src/types/properties.d.ts +24 -5
- package/dist/types/src/types/property_config.d.ts +6 -2
- package/dist/types/src/types/relations.d.ts +1 -1
- package/dist/types/src/types/translations.d.ts +8 -0
- package/dist/types/src/users/user.d.ts +5 -0
- package/dist/ui/src/components/FilterChip.d.ts +42 -0
- package/dist/ui/src/components/index.d.ts +5 -0
- package/dist/ui/src/icons/index.d.ts +2 -0
- package/package.json +20 -16
- package/src/components/FormEnhanceAction.tsx +14 -2
package/dist/index.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../src/utils/values.ts","../src/api.ts","../src/utils/suggestions.ts","../src/utils/properties.ts","../src/editor/useEditorAIController.tsx","../src/components/DataEnhancementControllerProvider.tsx","../src/components/FormEnhanceAction.tsx","../src/useDataEnhancementPlugin.tsx"],"sourcesContent":["export function flatMapEntityValues<M extends object>(values: M, path = \"\"): object {\n if (!values) return {};\n return Object.entries(values).flatMap(([key, value]) => {\n const currentPath = path ? `${path}.${key}` : key;\n if (typeof value === \"object\") {\n return flatMapEntityValues(value, currentPath);\n } else {\n return { [currentPath]: value };\n }\n }).reduce((acc, curr) => ({ ...acc,\n...curr }), {})\n}\n","import {\n DataEnhancementRequest,\n EnhancedDataResult,\n InputEntity,\n InputProperty,\n SamplePromptsResult\n} from \"./types/data_enhancement_controller\";\nimport { EntityValues } from \"@rebasepro/types\";\nimport { flatMapEntityValues } from \"./utils/values\";\n\n// const DEFAULT_SERVER = \"http://localhost:5001/rebase-dev-2da42/europe-west3/api\"; // Local\n\nconst DEFAULT_SERVER = \"https://api.rebase.pro\";\n\nexport async function enhanceDataAPIStream<M extends Record<string, unknown>>(props: {\n apiKey: string,\n entityId?: string | number,\n entityName: string,\n entityDescription?: string,\n propertyKey?: string,\n propertyInstructions?: string;\n values: EntityValues<M>,\n path: string,\n properties: Record<string, InputProperty>,\n\n instructions?: string,\n firebaseToken: string,\n onUpdate: (suggestions: Record<string, any>) => void;\n onUpdateDelta: (propertyKey: string, partialValue: any) => void;\n onError: (error: Error) => void;\n onEnd: (result: EnhancedDataResult) => void;\n host?: string;\n}) {\n\n const flatValues = flatMapEntityValues(props.values);\n\n const properties = props.properties;\n\n const inputEntity: InputEntity = {\n entityId: props.entityId,\n values: flatValues\n }\n\n const request: DataEnhancementRequest = {\n inputEntity,\n properties,\n entityName: props.entityName,\n entityDescription: props.entityDescription,\n propertyKey: props.propertyKey,\n propertyInstructions: props.propertyInstructions,\n instructions: props.instructions\n };\n\n console.debug(\"enhanceDataAPIStream\", request);\n\n return fetch((props.host ?? DEFAULT_SERVER) + \"/data/enhance_stream/\",\n {\n // mode: \"no-cors\",\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Basic ${props.firebaseToken}`,\n \"x-de-api-key\": `Basic ${props.apiKey}`\n // \"x-de-version\": version\n },\n body: JSON.stringify(request)\n })\n .then(async (res) => {\n if (!res.ok) {\n console.error(\"enhanceDataAPIStream error\", res)\n throw await res.json();\n }\n const reader = res.body?.getReader();\n if (!reader) {\n throw new Error(\"No reader\");\n }\n\n for await (const chunk of readChunks(reader)) {\n const str = new TextDecoder().decode(chunk);\n try {\n str.split(\"&$# \").forEach((s) => {\n if (s && s.length > 0) {\n const data = JSON.parse(s.trim());\n if (data.type === \"suggestion_delta\")\n props.onUpdateDelta(data.data.propertyKey, data.data.partialValue);\n else if (data.type === \"suggestion\")\n props.onUpdate(data.data);\n else if (data.type === \"result\")\n props.onEnd(data.data);\n }\n });\n } catch (e: any) {\n console.error(\"str\", str);\n console.error(\"Error parsing stream\", e);\n props.onError(e);\n }\n }\n\n });\n\n}\n\nfunction readChunks(reader: ReadableStreamDefaultReader) {\n return {\n async *[Symbol.asyncIterator]() {\n let readResult = await reader.read();\n while (!readResult.done) {\n yield readResult.value;\n readResult = await reader.read();\n }\n }\n };\n}\n\nexport async function fetchEntityPromptSuggestion<M extends object>(props: {\n input?: string,\n entityName: string,\n firebaseToken: string,\n apiKey: string,\n host?: string\n}): Promise<SamplePromptsResult> {\n\n return fetch((props.host ?? DEFAULT_SERVER) + \"/data/prompt_autocomplete/\",\n {\n // mode: \"no-cors\",\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Basic ${props.firebaseToken}`,\n \"x-de-api-key\": `Basic ${props.apiKey}`\n },\n body: JSON.stringify({\n entityName: props.entityName,\n input: props.input ?? null\n })\n })\n .then(async (res) => {\n const data = await res.json();\n if (!res.ok) {\n console.error(\"fetchEntityPromptSuggestion\", data);\n throw Error(data.message);\n }\n return {\n prompts: data.data.prompts.map((e: string) => ({\n prompt: e,\n type: \"sample\"\n }))\n };\n });\n\n}\n\nexport async function autocompleteStream(props: {\n firebaseToken: string,\n textBefore?: string,\n textAfter: string,\n host?: string;\n onUpdate: (delta: string) => void;\n}) {\n\n let result = \"\";\n return fetch((props.host ?? DEFAULT_SERVER) + \"/data/autocomplete/\",\n {\n // mode: \"no-cors\",\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Basic ${props.firebaseToken}`\n // \"x-de-version\": version\n },\n body: JSON.stringify({\n textBefore: props.textBefore,\n textAfter: props.textAfter\n })\n })\n .then(async (res) => {\n if (!res.ok) {\n console.error(\"enhanceDataAPIStream error\", res)\n throw await res.json();\n }\n const reader = res.body?.getReader();\n if (!reader) {\n throw new Error(\"No reader\");\n }\n\n for await (const chunk of readChunks(reader)) {\n const str = new TextDecoder().decode(chunk);\n result += str;\n console.debug(\"Autocomplete update:\", str);\n props.onUpdate(str);\n }\n\n }).then(() => {\n console.debug(\"Autocomplete result:\", result);\n return result;\n });\n\n}\n","export function getAppendableSuggestion(suggestion: string | number | undefined, value: any): string | undefined {\n const suggestionIncludesValue = typeof suggestion === \"string\" && typeof value === \"string\" && suggestion.toLowerCase().trim().startsWith(value.toLowerCase().trim());\n return (typeof value === \"string\" && suggestionIncludesValue)\n ? suggestion.substring(suggestion.toLowerCase().trim().indexOf(value.toLowerCase().trim()) + value.trim().length)\n : undefined;\n}\n","import { getFieldId } from \"@rebasepro/admin\";\nimport { EnumValues, Properties, Property } from \"@rebasepro/types\";\nimport { isPropertyBuilder } from \"@rebasepro/common\";\nimport { InputProperty } from \"../types/data_enhancement_controller\";\nimport { getValueInPath } from \"@rebasepro/utils\";\n\nexport function getSimplifiedProperties<M extends Record<string, any>>(properties: Properties, values: M, path = \"\"): Record<string, InputProperty> {\n if (!properties) return {};\n return Object.entries(properties)\n .map(([key, property]) => {\n if (isPropertyBuilder(property)) return {};\n const fullKey = path ? `${path}.${key}` : key;\n const valueInPath = getValueInPath(values, fullKey);\n return getSimplifiedProperty(property, fullKey, valueInPath)\n })\n .reduce((a, b) => ({ ...a,\n...b }), {});\n}\n\nfunction getSimpleProperty(property: Property): InputProperty {\n const fieldId = getFieldId(property);\n if (!fieldId) {\n console.error(\"No fieldId found for property\", property);\n throw new Error(\"Field id not found\");\n }\n return {\n name: property.name,\n description: property.description,\n type: property.type,\n fieldConfigId: fieldId,\n enum: \"enum\" in property && property.enum\n ? getSimpleEnumValues(property.enum)\n : undefined,\n disabled: Boolean(property.ui?.disabled || property.ui?.readOnly)\n };\n}\n\nfunction getSimplifiedProperty(property: Property, path: string, value?: any): Record<string, InputProperty> {\n if (isPropertyBuilder(property)) return {};\n if (property.type === \"array\") {\n\n if (property.of && !Array.isArray(property.of) && !isPropertyBuilder(property.of)) {\n const arrayParentProperty: InputProperty = {\n name: property.name,\n description: property.description,\n type: property.type,\n fieldConfigId: \"repeat\",\n disabled: Boolean(property.ui?.disabled || property.ui?.readOnly),\n of: getSimpleProperty(property.of as Property)\n };\n\n const result = { [path]: arrayParentProperty };\n // if (Array.isArray(value)) {\n // result = {\n // ...result,\n // ...value\n // .map((v, i) => getSimplifiedProperty(property.of, `${path}.${i}`, v))\n // .reduce((a, b) => ({ ...a, ...b }), {})\n // };\n // }\n //\n // const existingValuesCount = Array.isArray(value) ? value.length : 0;\n //\n // const newValuesCount = property.of && !isPropertyBuilder<any, any>(property.of) && (property.of as Property).type === \"map\" ? 1 : 3;\n // result = {\n // ...result,\n // // ...Array.from(Array(newValuesCount))\n // // .map((v, i) => getSimplifiedProperty(property.of, `${path}.${i + existingValuesCount}`, v))\n // // .reduce((a, b) => ({ ...a, ...b }), {})\n // }\n\n return result;\n } else if (property.oneOf) {\n\n const arrayParentProperty: InputProperty = {\n name: property.name,\n description: property.description,\n type: property.type,\n fieldConfigId: \"block\",\n disabled: Boolean(property.ui?.disabled || property.ui?.readOnly),\n oneOf: {\n typeField: property.oneOf.typeField,\n valueField: property.oneOf.valueField,\n properties: Object.entries(property.oneOf.properties)\n .map(([key, prop]) => ({ [key]: getSimpleProperty(prop) }))\n .reduce((a, b) => ({ ...a,\n...b }), {})\n }\n };\n\n if (!Array.isArray(value)) {\n return { [path]: arrayParentProperty };\n }\n\n return value.map((v, i) => {\n if (v == null) return {};\n const typeKey = property.oneOf!.typeField ?? \"type\";\n const oneOfType = v[typeKey];\n const valueKey = property.oneOf!.valueField ?? \"value\";\n const oneOfValue = v[valueKey];\n const childProperty = property.oneOf!.properties[oneOfType];\n if (childProperty === undefined) {\n console.error(`No property found for type ${oneOfType}`, property.oneOf!.properties);\n return {};\n }\n const simplifiedProperty = getSimplifiedProperty(childProperty, `${path}.${i}.${valueKey}`, oneOfValue);\n return {\n [`${path}.${i}.${typeKey}`]: oneOfType,\n ...simplifiedProperty\n };\n }).reduce((a, b) => ({ ...a,\n...b }), { [path]: arrayParentProperty });\n }\n } else if (property.type === \"map\") {\n if (property.properties) {\n const mapProperties: Record<string, InputProperty> = Object.entries(property.properties)\n .map(([key, childProperty]) => {\n const childValue = value?.[key];\n return getSimplifiedProperty(childProperty, key, childValue);\n })\n .map(o => attachPathToKeys(o, path))\n .reduce((a, b) => ({ ...a,\n...b }), {});\n\n if (Object.keys(mapProperties).length === 0) return {};\n const mapParentProperty: InputProperty = {\n name: property.name,\n description: property.description,\n type: property.type,\n fieldConfigId: \"group\",\n disabled: Boolean(property.ui?.disabled || property.ui?.readOnly)\n };\n return {\n [path]: mapParentProperty,\n ...mapProperties\n } as Record<string, InputProperty>;\n }\n } else {\n const fieldId = getFieldId(property);\n if (!fieldId) {\n console.warn(`No fieldId found for property ${path} with type ${property.type}`);\n return {};\n }\n return {\n [path]: getSimpleProperty(property)\n };\n }\n return {};\n}\n\n// attach a path to every key in an object\nfunction attachPathToKeys(obj: Record<string, any>, path = \"\"): Record<string, any> {\n return Object.entries(obj)\n .map(([key, value]) => {\n const fullKey = path ? `${path}.${key}` : key;\n return { [fullKey]: value };\n })\n .reduce((a, b) => ({ ...a,\n...b }), {});\n}\n\nfunction getSimpleEnumValues(enumValues: EnumValues): string[] {\n if (Array.isArray(enumValues))\n return enumValues.map(v => String(v.id));\n if (typeof enumValues === \"object\")\n return Object.keys(enumValues);\n throw Error(\"getSimpleEnumValues: Invalid enumValues\");\n}\n","import { autocompleteStream } from \"../api\";\nimport { EditorAIController } from \"@rebasepro/admin\";\n\nexport function useEditorAIController({ getAuthToken }: { getAuthToken?: () => Promise<string> }): EditorAIController {\n const autocomplete = async (textBefore: string, textAfter: string, onUpdate: (delta: string) => void) => {\n if (!getAuthToken) {\n throw new Error(\"Firebase token is required\");\n }\n const firebaseToken = await getAuthToken();\n return autocompleteStream({\n firebaseToken,\n textBefore,\n textAfter,\n onUpdate\n });\n }\n\n return {\n autocomplete\n };\n}\n\n// async function * generateLoremIpsum(): AsyncGenerator<string> {\n// const loremIpsum = \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\\n# Heading\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\";\n//\n// const words = loremIpsum.split(\" \");\n//\n// for (const word of words) {\n// yield word;\n// await new Promise(resolve => setTimeout(resolve, 100));\n// }\n// }\n//\n// const generator = generateLoremIpsum();\n// for await (const word of generator) {\n//\n// }\n","import React, { PropsWithChildren, useCallback, useContext, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport {\n DataEnhancementController,\n EnhancedDataResult,\n EnhanceParams,\n InputProperty\n} from \"../types/data_enhancement_controller\";\nimport {\n useAuthController,\n useCustomizationController,\n useSnackbarController\n} from \"@rebasepro/core\";\nimport { useUrlController } from \"@rebasepro/admin\";\nimport { DataDriver, Entity, EntityCollection, PluginFormActionProps } from \"@rebasepro/types\";\nimport { enhanceDataAPIStream, fetchEntityPromptSuggestion } from \"../api\";\nimport { getAppendableSuggestion } from \"../utils/suggestions\";\nimport { getSimplifiedProperties } from \"../utils/properties\";\nimport { useEditorAIController } from \"../editor/useEditorAIController\";\nimport { getValueInPath } from \"@rebasepro/utils\";\n\nexport const DataEnhancementControllerContext = React.createContext<DataEnhancementController>(null! as DataEnhancementController);\n\nexport type DataEnhancementControllerProviderProps = {\n\n apiKey: string;\n\n getConfigForPath?: (props: {\n path: string,\n collection: EntityCollection\n }) => boolean;\n\n host?: string;\n}\n\nexport const useDataEnhancementController = (): DataEnhancementController => useContext(DataEnhancementControllerContext);\n\nfunction getPropertyFromKey(properties: Record<string, InputProperty>, propertyKey: string) {\n if (propertyKey in properties) {\n return properties[propertyKey];\n } else {\n //split the property key\n const split = propertyKey.split(\".\");\n if (split.length === 1) {\n return undefined;\n }\n const parentKey = split.slice(0, split.length - 1).join(\".\");\n return getPropertyFromKey(properties, parentKey);\n\n }\n}\n\nexport function DataEnhancementControllerProvider({\n apiKey,\n getConfigForPath,\n children,\n host,\n path,\n collection,\n formContext\n}: PropsWithChildren<DataEnhancementControllerProviderProps & PluginFormActionProps<any>>) {\n\n const [enabled, setEnabled] = useState(false);\n const [suggestions, setSuggestions] = useState<Record<string, string | number>>({});\n const [loadingSuggestions, setLoadingSuggestions] = useState<string[]>([]);\n\n const enhancingInProgress = useRef(false);\n\n const authController = useAuthController();\n const snackbarController = useSnackbarController();\n\n\n const properties = useMemo(() => getSimplifiedProperties(collection.properties, formContext?.values ?? {}), [formContext?.values]);\n // const preEnhanceValuesRef = React.useRef(formContext?.values ?? {});\n const valuesRef = React.useRef(formContext?.values ?? {});\n useEffect(() => {\n if (!enhancingInProgress.current)\n valuesRef.current = formContext?.values ?? {};\n }, [formContext?.values]);\n\n const allowReferenceDataSelection = false;\n\n const updateConfig = useCallback(async () => {\n if (!getConfigForPath) return;\n const config = getConfigForPath({\n path,\n collection\n });\n if (config) {\n setEnabled(true);\n }\n }, [collection, getConfigForPath, path]);\n\n useEffect(() => {\n if (!getConfigForPath) {\n setEnabled(true);\n } else {\n updateConfig();\n }\n\n }, [getConfigForPath, updateConfig]);\n\n\n const urlController = useUrlController();\n\n const clearSuggestion = useCallback((propertyKey: string) => {\n setSuggestions((prev) => {\n //remove propertyKey from prev\n const {\n [propertyKey]: _,\n ...rest\n } = prev;\n return rest;\n });\n }, []);\n\n const appendValueDelta = useCallback((propertyKey: string, delta: string) => {\n\n const property = getPropertyFromKey(properties, propertyKey);\n if (delta === null || property?.disabled) {\n return;\n }\n\n // clearSuggestion(propertyKey);\n const value = getValueInPath(valuesRef.current, propertyKey);\n\n const currentValue = value ? (value as string) + \"\" : \"\";\n const updatedValue = currentValue + delta;\n // if (currentValue.length === 0) updatedValue = updatedValue.trimStart();\n valuesRef.current = {\n ...valuesRef.current,\n [propertyKey]: updatedValue\n };\n formContext?.setFieldValue(propertyKey, updatedValue, false);\n setSuggestions(prev => ({\n ...prev,\n [propertyKey]: (prev[propertyKey] ?? \"\") + delta\n }));\n }, [properties, formContext]);\n\n const updateSuggestedValues = useCallback((currentValues: object, updatedValues: Record<string, string | number>, replaceValues: boolean) => {\n\n setLoadingSuggestions((prev) => {\n return prev.filter(p => !Object.keys(updatedValues).includes(p));\n });\n\n Object.entries(updatedValues).forEach(([propertyKey, suggestion]) => {\n\n const value = getValueInPath(currentValues, propertyKey);\n const property = getPropertyFromKey(properties, propertyKey);\n\n if (!property || suggestion === null || property?.disabled) {\n return;\n }\n\n if (typeof suggestion === \"number\") {\n formContext?.setFieldValue(propertyKey, suggestion);\n return;\n }\n\n if (replaceValues) {\n formContext?.setFieldValue(propertyKey, suggestion);\n return;\n }\n\n const appendableValue = getAppendableSuggestion(suggestion, value);\n\n const currentValue = value ? (value as string) + \"\" : \"\";\n if (appendableValue) {\n formContext?.setFieldValue(propertyKey, suggestion);\n } else {\n const multiline = property?.fieldConfigId === \"multiline\" || property?.fieldConfigId === \"markdown\";\n const trimmedValue = currentValue.trimEnd();\n if (multiline && (trimmedValue.endsWith(\".\") || trimmedValue.endsWith(\"?\") || trimmedValue.endsWith(\"!\") || trimmedValue.endsWith(\":\"))) {\n formContext?.setFieldValue(propertyKey, trimmedValue + \"\\n\\n\" + (suggestion as string).trimStart());\n } else {\n formContext?.setFieldValue(propertyKey, trimmedValue + (trimmedValue.length > 0 ? \" \" : \"\") + (suggestion as string));\n }\n }\n });\n\n setSuggestions(prev => ({\n ...prev,\n ...Object.keys(updatedValues)\n .reduce((acc, key) => {\n const value = getValueInPath(formContext?.values, key);\n const suggestion = updatedValues[key];\n return {\n ...acc,\n [key]: getAppendableSuggestion(suggestion, value) ?? suggestion\n };\n }, {})\n }));\n }, [properties, formContext]);\n\n const displayNeededSubscriptionSnackbar = useCallback((projectId: any) => {\n snackbarController.open({\n type: \"warning\",\n message: \"A valid subscription is needed in order to use this function.\",\n autoHideDuration: 4000\n });\n }, [snackbarController]);\n\n const editorAIController = useEditorAIController({ getAuthToken: authController.getAuthToken });\n\n const clearAllSuggestions = useCallback(() => {\n setSuggestions({});\n }, []);\n\n const enhance = useCallback(async (props: EnhanceParams<any>): Promise<EnhancedDataResult | null> => {\n\n if (!authController.user) {\n snackbarController.open({\n type: \"warning\",\n message: \"You need to be logged in to enhance data\"\n });\n return Promise.reject(new Error(\"Not logged in\"));\n }\n\n const resolvedPath = urlController.resolveDatabasePathsFrom(path);\n const firebaseToken = await authController.getAuthToken();\n\n if (props.propertyKey) {\n clearSuggestion(props.propertyKey)\n } else {\n clearAllSuggestions();\n }\n\n setLoadingSuggestions((prev) => [...prev, ...(props.propertyKey ? [props.propertyKey] : Object.keys(properties))]);\n enhancingInProgress.current = true;\n\n const currentValues = valuesRef.current ?? {};\n\n return new Promise((resolve, reject) => {\n function onError(e: any) {\n setLoadingSuggestions([]);\n if (e.code === \"payment-required\") {\n const projectId = e.data.projectId;\n displayNeededSubscriptionSnackbar(projectId);\n } else {\n console.error(\"Enhance error\", e);\n }\n reject(e);\n enhancingInProgress.current = false;\n }\n\n try {\n enhanceDataAPIStream({\n ...props,\n host,\n apiKey,\n properties,\n path: resolvedPath,\n entityName: collection.singularName ?? collection.name,\n entityDescription: collection.description,\n\n firebaseToken,\n onUpdate: (suggestions) => {\n console.debug(\"de onUpdate\", suggestions);\n updateSuggestedValues(currentValues, suggestions, props.replaceValues ?? false);\n },\n onUpdateDelta: (propertyKey: string, partialValue: string) => {\n // console.debug(\"de delta\", propertyKey, partialValue);\n appendValueDelta(propertyKey, partialValue);\n },\n onError,\n onEnd: (result) => {\n console.debug(\"de onEnd\", result);\n if (result.errors) {\n result.errors.forEach((error) => {\n snackbarController.open({\n type: \"warning\",\n message: error\n })\n });\n }\n if (Object.keys(result.suggestions).length === 0) {\n snackbarController.open({\n type: \"info\",\n autoHideDuration: 1800,\n message: \"No fields were updated\"\n })\n }\n setLoadingSuggestions([]);\n resolve(result);\n enhancingInProgress.current = false;\n }\n }).catch(onError);\n } catch (e: any) {\n onError(e);\n }\n });\n }, [\n authController, urlController, path, clearSuggestion, clearAllSuggestions,\n properties, host, apiKey, collection, updateSuggestedValues, appendValueDelta, displayNeededSubscriptionSnackbar, snackbarController\n ]);\n\n const getSamplePrompts = useCallback(async (entityName: string, input?: string) => {\n const firebaseToken = await authController.getAuthToken()\n return fetchEntityPromptSuggestion({\n host,\n entityName,\n firebaseToken,\n apiKey,\n input\n });\n }, [apiKey, authController.getAuthToken, host]);\n\n const dataEnhancementController: DataEnhancementController = useMemo(() => ({\n enabled,\n suggestions,\n clearSuggestion,\n enhance,\n allowReferenceDataSelection,\n clearAllSuggestions,\n getSamplePrompts,\n loadingSuggestions,\n editorAIController\n }), [\n enabled,\n suggestions,\n clearSuggestion,\n enhance,\n allowReferenceDataSelection,\n clearAllSuggestions,\n getSamplePrompts,\n loadingSuggestions,\n editorAIController\n ]);\n\n return (\n <DataEnhancementControllerContext.Provider\n value={dataEnhancementController}>\n {children}\n </DataEnhancementControllerContext.Provider>\n );\n}\n\n\n","\nimport React, { useCallback, useDeferredValue, useEffect, useRef } from \"react\";\n\nimport { Button, CircularProgress, cls, focusedDisabled, IconButton, Menu, MenuItem, Separator, TextareaAutosize , iconSize } from \"@rebasepro/ui\";\nimport { XIcon, SendIcon } from \"lucide-react\";\nimport {\n AIIcon,\n useLargeLayout\n} from \"@rebasepro/core\";\nimport { EntityStatus, PluginFormActionProps, Properties, Property } from \"@rebasepro/types\";\nimport { isPropertyBuilder, stripCollectionPath } from \"@rebasepro/common\";\nimport { useDataEnhancementController } from \"./DataEnhancementControllerProvider\";\nimport { SamplePrompt } from \"../types/data_enhancement_controller\";\n\nexport function FormEnhanceAction({\n entityId,\n path,\n status,\n collection,\n formContext,\n openEntityMode\n}: PluginFormActionProps) {\n\n const largeLayout = useLargeLayout();\n\n const storageKey = createLocalStorageKey(path, status);\n\n const [loading, setLoading] = React.useState(false);\n const dataEnhancementController = useDataEnhancementController();\n\n const [samplePrompts, setSamplePrompts] = React.useState<SamplePrompt[] | undefined>(undefined);\n const [instructions, setInstructions] = React.useState<string>(\"\");\n\n const getSamplePrompts = dataEnhancementController?.getSamplePrompts;\n\n const loadingPrompts = useRef(false);\n const updateSuggestedPrompts = useCallback(async function updateSuggestedPrompts(instructions?: string) {\n if (!getSamplePrompts) return;\n if (loadingPrompts.current) return;\n loadingPrompts.current = true;\n const prompts = status === \"new\"\n ? (await getSamplePrompts(collection.singularName ?? collection.name, instructions)).prompts\n : getPromptsForExistingEntities(collection.properties);\n\n const recentPromptsFromStorage = getRecentPromptsFromStorage(storageKey);\n const recentPrompts = recentPromptsFromStorage.map(prompt => prompt.prompt);\n setSamplePrompts([...recentPromptsFromStorage, ...prompts.filter(p => !recentPrompts.includes(p.prompt))].slice(0, 5));\n loadingPrompts.current = false;\n },\n [collection.name, collection.singularName, getSamplePrompts, status]);\n\n const deferredValues = useDeferredValue(formContext?.values);\n // const enoughData = countStringCharacters(deferredValues, collection.properties) > 20;\n\n useEffect(() => {\n if (!dataEnhancementController) return;\n if (!samplePrompts) {\n setSamplePrompts(getRecentPromptsFromStorage(storageKey));\n updateSuggestedPrompts().then();\n }\n }, [dataEnhancementController, samplePrompts, storageKey, updateSuggestedPrompts, instructions, status]);\n\n useEffect(() => {\n if (!dataEnhancementController) return;\n updateSuggestedPrompts().then();\n }, [dataEnhancementController, status]);\n\n const enhance = (prompt?: string) => {\n if (!dataEnhancementController || !formContext?.values) return;\n setLoading(true);\n if (prompt) {\n addRecentPrompt(storageKey, prompt);\n setSamplePrompts([{\n prompt,\n type: \"recent\"\n }, ...(samplePrompts ?? []).slice(0, 5)]);\n }\n return dataEnhancementController.enhance({\n entityId,\n values: formContext!.values,\n instructions: prompt,\n replaceValues: true\n }).finally(() => {\n setLoading(false);\n });\n };\n\n if (!dataEnhancementController?.enabled)\n return null;\n\n const suggestions = dataEnhancementController.suggestions;\n const hasSuggestions = Object.values(suggestions).filter(Boolean).length > 0;\n\n const disabledSuggestionActions = !hasSuggestions;\n const promptSuggestionsEnabled = (samplePrompts ?? []).length > 0 && instructions.length === 0;\n\n // const noIdSet = !formContext?.entityId;\n\n function submit() {\n enhance(instructions);\n }\n\n return (\n <Menu\n align={\"end\"}\n sideOffset={8}\n className={\"max-w-[100vw]\"}\n trigger={<Button variant={\"filled\"}\n color={\"neutral\"}\n fullWidth={largeLayout && openEntityMode === \"full_screen\"}\n size={\"small\"}\n disabled={loading}>\n {!loading && <AIIcon size={\"small\"}/>}\n {loading && <CircularProgress size={\"small\"}/>}\n Autofill\n </Button>}>\n\n <MenuItem className={\"py-4\"}\n onClick={() => {\n enhance();\n }}>\n <AIIcon size={\"small\"}/>\n Autofill based on the current content\n </MenuItem>\n\n <Separator orientation={\"horizontal\"} className={\"mt-2\"}/>\n\n {samplePrompts?.map((samplePrompt, index) => {\n return <MenuItem\n key={index + \"_\" + samplePrompt.prompt}\n onClick={() => {\n setInstructions(samplePrompt.prompt);\n enhance(samplePrompt.prompt);\n }}\n >\n <div className={\"pl-9 grow text-text-secondary dark:text-text-secondary-dark\"}>\n {samplePrompt.prompt}\n </div>\n\n {samplePrompt.type === \"recent\" && <IconButton\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n removeRecentPrompt(storageKey, samplePrompt.prompt);\n setSamplePrompts((samplePrompts ?? []).filter(p => p.prompt !== samplePrompt.prompt));\n }}\n size={\"smallest\"}\n >\n <XIcon size={iconSize.smallest}/>\n </IconButton>\n }\n </MenuItem>;\n })}\n\n <Separator orientation={\"horizontal\"}/>\n\n <div\n className={cls(\n \"my-2 w-[500px] max-w-full flex items-start text-surface-700 dark:text-surface-200\"\n )}>\n\n <TextareaAutosize\n className={cls(\"p-4 rounded-lg resize-none bg-surface-100 dark:bg-surface-950 mx-2 w-full grow outline-hidden max-h-[300px] overflow-auto\", focusedDisabled)}\n value={instructions}\n autoFocus={status === \"new\"}\n disabled={loading}\n onFocus={(event) => {\n event.stopPropagation();\n }}\n placeholder={\"...or provide instructions\"}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n submit();\n }\n\n }}\n onChange={(e) => {\n setInstructions(e.target.value);\n }}\n />\n\n <IconButton\n size={\"small\"}\n onClick={() => {\n setInstructions(\"\");\n }}\n color={!instructions ? \"primary\" : undefined}\n disabled={loading || !instructions}>\n <XIcon size={iconSize.small}/>\n </IconButton>\n\n <IconButton\n onClick={() => enhance(instructions)}\n size={\"small\"}\n color={!instructions ? \"primary\" : undefined}\n disabled={loading || !instructions}>\n {loading &&\n <CircularProgress size={\"smallest\"}/>}\n {!loading &&\n <SendIcon color={\"primary\"}/>}\n </IconButton>\n\n </div>\n\n </Menu>\n );\n}\n\nexport interface EnhanceDialogProps {\n open: boolean;\n onClose: () => void;\n selectReferences: () => void;\n loading: boolean;\n enhance: (instructions: string) => void;\n samplePrompts?: string[];\n}\n\nfunction getPromptsForExistingEntities(properties: Properties): SamplePrompt[] {\n\n const multilineProperties = Object.values(properties).filter((p: Property) => {\n if (isPropertyBuilder(p)) {\n return false;\n }\n return p.type === \"string\" && (p.ui?.markdown || p.ui?.multiline);\n });\n\n const multilinePrompt: Property | undefined = multilineProperties.length > 0\n ? multilineProperties[Math.floor(Math.random() * multilineProperties.length)] as Property\n : undefined;\n\n const prompts = [\n \"Fill the missing fields\",\n \"Translate the missing content\"\n ];\n if (multilinePrompt) {\n prompts.push(`Add 2 paragraphs to '${multilinePrompt.name}'`);\n }\n return prompts.map(p => ({\n prompt: p,\n type: \"sample\"\n }));\n}\n\nconst createLocalStorageKey = (path: string, status: EntityStatus) => {\n const statusString = status === \"new\" ? \"new\" : \"existing\";\n return `data_enhancement::${statusString}::${stripCollectionPath(path)}`;\n};\n\nconst getRecentPromptsFromStorage = (storageKey: string): SamplePrompt[] => {\n const item = localStorage.getItem(storageKey);\n return item ? JSON.parse(item).map((e: string) => ({\n prompt: e,\n type: \"recent\"\n })) : [];\n};\n\nconst addRecentPrompt = (storageKey: string, prompt: string) => {\n if (!prompt || prompt.trim().length === 0) {\n return;\n }\n const recentPrompts = getRecentPromptsFromStorage(storageKey);\n localStorage.setItem(storageKey, JSON.stringify([prompt, ...recentPrompts\n .map(e => e.prompt)\n .filter(e => e !== prompt)\n .slice(0, 5)]));\n};\n\nconst removeRecentPrompt = (storageKey: string, prompt: string) => {\n localStorage.setItem(storageKey, JSON.stringify(getRecentPromptsFromStorage(storageKey)\n .map(e => e.prompt)\n .filter(e => e !== prompt)));\n};\n","import React from \"react\";\n\nimport { EntityCollection, RebasePlugin, User } from \"@rebasepro/types\";\nimport { DataEnhancementControllerProvider } from \"./components/DataEnhancementControllerProvider\";\nimport { FormEnhanceAction } from \"./components/FormEnhanceAction\";\n\nconst DEFAULT_API_KEY = \"fcms-U9jdDii0xXWSDC34asfrf54lbkFJBfKfRWcEDEwdc4V5wDWEDF\";\n\nexport interface DataEnhancementPluginProps {\n\n apiKey?: string;\n\n /**\n * Use this function to determine if the data enhancement plugin should be enabled for a given path.\n * If this function is not provided, the plugin will be enabled for all paths.\n * If the function returns false, the plugin will be disabled for the given path.\n * You can also return a configuration object to override the default configuration.\n *\n * @param path\n * @param collection\n */\n getConfigForPath?: (props: {\n path: string,\n collection: EntityCollection,\n user: User | null\n }) => boolean;\n\n /**\n * Host to use for the data enhancement API.\n * This prop is only use in development mode.\n */\n host?: string;\n}\n\n/**\n * Use this hook to initialise the data enhancement plugin.\n * This is likely the only hook you will need to use.\n * @param props\n */\nexport function useDataEnhancementPlugin(props?: DataEnhancementPluginProps): RebasePlugin {\n\n const apiKey = props?.apiKey ?? DEFAULT_API_KEY;\n const getConfigForPath = props?.getConfigForPath;\n\n return React.useMemo(() => ({\n key: \"data_enhancement\",\n slots: [\n {\n slot: \"form.actions\",\n Component: FormEnhanceAction,\n order: 40\n }\n ],\n providers: [\n {\n scope: \"form\" as const,\n Component: DataEnhancementControllerProvider as React.ComponentType<any>,\n props: {\n apiKey,\n getConfigForPath,\n host: props?.host\n }\n }\n ]\n }), [apiKey, getConfigForPath, props?.host]);\n}\n"],"names":["flatMapEntityValues","values","path","Object","entries","flatMap","key","value","currentPath","reduce","acc","curr","DEFAULT_SERVER","enhanceDataAPIStream","props","flatValues","properties","inputEntity","entityId","request","entityName","entityDescription","propertyKey","propertyInstructions","instructions","console","debug","fetch","host","method","headers","Authorization","firebaseToken","apiKey","body","JSON","stringify","then","res","ok","error","json","reader","getReader","Error","chunk","readChunks","str","TextDecoder","decode","split","forEach","s","length","data","parse","trim","type","onUpdateDelta","partialValue","onUpdate","onEnd","e","onError","Symbol","asyncIterator","readResult","read","done","fetchEntityPromptSuggestion","input","message","prompts","map","prompt","autocompleteStream","result","textBefore","textAfter","getAppendableSuggestion","suggestion","suggestionIncludesValue","toLowerCase","startsWith","substring","indexOf","undefined","getSimplifiedProperties","property","isPropertyBuilder","fullKey","valueInPath","getValueInPath","getSimplifiedProperty","a","b","getSimpleProperty","fieldId","getFieldId","name","description","fieldConfigId","enum","getSimpleEnumValues","disabled","Boolean","ui","readOnly","of","Array","isArray","arrayParentProperty","oneOf","typeField","valueField","prop","v","i","typeKey","oneOfType","valueKey","oneOfValue","childProperty","simplifiedProperty","mapProperties","childValue","o","attachPathToKeys","keys","mapParentProperty","warn","obj","enumValues","String","id","useEditorAIController","getAuthToken","autocomplete","DataEnhancementControllerContext","React","createContext","useDataEnhancementController","useContext","getPropertyFromKey","parentKey","slice","join","DataEnhancementControllerProvider","getConfigForPath","children","collection","formContext","enabled","setEnabled","useState","suggestions","setSuggestions","loadingSuggestions","setLoadingSuggestions","enhancingInProgress","useRef","authController","useAuthController","snackbarController","useSnackbarController","useMemo","valuesRef","useEffect","current","allowReferenceDataSelection","updateConfig","useCallback","config","urlController","useUrlController","clearSuggestion","prev","_","rest","appendValueDelta","delta","currentValue","updatedValue","setFieldValue","updateSuggestedValues","currentValues","updatedValues","replaceValues","filter","p","includes","appendableValue","multiline","trimmedValue","trimEnd","endsWith","trimStart","displayNeededSubscriptionSnackbar","projectId","open","autoHideDuration","editorAIController","clearAllSuggestions","enhance","user","Promise","reject","resolvedPath","resolveDatabasePathsFrom","resolve","code","singularName","errors","catch","getSamplePrompts","dataEnhancementController","FormEnhanceAction","status","openEntityMode","largeLayout","useLargeLayout","storageKey","createLocalStorageKey","loading","setLoading","samplePrompts","setSamplePrompts","setInstructions","loadingPrompts","updateSuggestedPrompts","getPromptsForExistingEntities","recentPromptsFromStorage","getRecentPromptsFromStorage","recentPrompts","useDeferredValue","addRecentPrompt","finally","submit","jsxs","Menu","Button","jsx","AIIcon","CircularProgress","MenuItem","Separator","samplePrompt","index","IconButton","preventDefault","stopPropagation","removeRecentPrompt","XIcon","iconSize","smallest","cls","TextareaAutosize","focusedDisabled","event","shiftKey","target","small","SendIcon","multilineProperties","markdown","multilinePrompt","Math","floor","random","push","statusString","stripCollectionPath","item","localStorage","getItem","setItem","DEFAULT_API_KEY","useDataEnhancementPlugin","$","_c","t0","t1","for","slot","Component","order","t2","t3","slots","providers","scope"],"mappings":";;;;AAAO,WAASA,oBAAsCC,QAAWC,OAAO,IAAY;AAChF,QAAI,CAACD,OAAQ,QAAO,CAAA;AACpB,WAAOE,OAAOC,QAAQH,MAAM,EAAEI,QAAQ,CAAC,CAACC,KAAKC,KAAK,MAAM;AACpD,YAAMC,cAAcN,OAAO,GAAGA,IAAI,IAAII,GAAG,KAAKA;AAC9C,UAAI,OAAOC,UAAU,UAAU;AAC3B,eAAOP,oBAAoBO,OAAOC,WAAW;AAAA,MACjD,OAAO;AACH,eAAO;AAAA,UAAE,CAACA,WAAW,GAAGD;AAAAA,QAAAA;AAAAA,MAC5B;AAAA,IACJ,CAAC,EAAEE,OAAO,CAACC,KAAKC,UAAU;AAAA,MAAE,GAAGD;AAAAA,MACnC,GAAGC;AAAAA,IAAAA,IAAS,CAAA,CAAE;AAAA,EACd;ACCA,QAAMC,iBAAiB;AAEvB,iBAAsBC,qBAAwDC,OAkB3E;AAEC,UAAMC,aAAaf,oBAAoBc,MAAMb,MAAM;AAEnD,UAAMe,aAAaF,MAAME;AAEzB,UAAMC,cAA2B;AAAA,MAC7BC,UAAUJ,MAAMI;AAAAA,MAChBjB,QAAQc;AAAAA,IAAAA;AAGZ,UAAMI,UAAkC;AAAA,MACpCF;AAAAA,MACAD;AAAAA,MACAI,YAAYN,MAAMM;AAAAA,MAClBC,mBAAmBP,MAAMO;AAAAA,MACzBC,aAAaR,MAAMQ;AAAAA,MACnBC,sBAAsBT,MAAMS;AAAAA,MAC5BC,cAAcV,MAAMU;AAAAA,IAAAA;AAGxBC,YAAQC,MAAM,wBAAwBP,OAAO;AAE7C,WAAOQ,OAAOb,MAAMc,QAAQhB,kBAAkB,yBAC1C;AAAA;AAAA,MAEIiB,QAAQ;AAAA,MACRC,SAAS;AAAA,QACL,gBAAgB;AAAA,QAChBC,eAAe,SAASjB,MAAMkB,aAAa;AAAA,QAC3C,gBAAgB,SAASlB,MAAMmB,MAAM;AAAA;AAAA,MAAA;AAAA,MAGzCC,MAAMC,KAAKC,UAAUjB,OAAO;AAAA,IAAA,CAC/B,EACAkB,KAAK,OAAOC,QAAQ;AACjB,UAAI,CAACA,IAAIC,IAAI;AACTd,gBAAQe,MAAM,8BAA8BF,GAAG;AAC/C,cAAM,MAAMA,IAAIG,KAAAA;AAAAA,MACpB;AACA,YAAMC,SAASJ,IAAIJ,MAAMS,UAAAA;AACzB,UAAI,CAACD,QAAQ;AACT,cAAM,IAAIE,MAAM,WAAW;AAAA,MAC/B;AAEA,uBAAiBC,SAASC,WAAWJ,MAAM,GAAG;AAC1C,cAAMK,MAAM,IAAIC,cAAcC,OAAOJ,KAAK;AAC1C,YAAI;AACAE,cAAIG,MAAM,MAAM,EAAEC,QAASC,CAAAA,MAAM;AAC7B,gBAAIA,KAAKA,EAAEC,SAAS,GAAG;AACnB,oBAAMC,OAAOnB,KAAKoB,MAAMH,EAAEI,MAAM;AAChC,kBAAIF,KAAKG,SAAS,mBACd3C,OAAM4C,cAAcJ,KAAKA,KAAKhC,aAAagC,KAAKA,KAAKK,YAAY;AAAA,uBAC5DL,KAAKG,SAAS,aACnB3C,OAAM8C,SAASN,KAAKA,IAAI;AAAA,uBACnBA,KAAKG,SAAS,SACnB3C,OAAM+C,MAAMP,KAAKA,IAAI;AAAA,YAC7B;AAAA,UACJ,CAAC;AAAA,QACL,SAASQ,GAAQ;AACbrC,kBAAQe,MAAM,OAAOO,GAAG;AACxBtB,kBAAQe,MAAM,wBAAwBsB,CAAC;AACvChD,gBAAMiD,QAAQD,CAAC;AAAA,QACnB;AAAA,MACJ;AAAA,IAEJ,CAAC;AAAA,EAET;AAEA,WAAShB,WAAWJ,QAAqC;AACrD,WAAO;AAAA,MACH,QAAQsB,OAAOC,aAAa,IAAI;AAC5B,YAAIC,aAAa,MAAMxB,OAAOyB,KAAAA;AAC9B,eAAO,CAACD,WAAWE,MAAM;AACrB,gBAAMF,WAAW3D;AACjB2D,uBAAa,MAAMxB,OAAOyB,KAAAA;AAAAA,QAC9B;AAAA,MACJ;AAAA,IAAA;AAAA,EAER;AAEA,iBAAsBE,4BAA8CvD,OAMnC;AAE7B,WAAOa,OAAOb,MAAMc,QAAQhB,kBAAkB,8BAC1C;AAAA;AAAA,MAEIiB,QAAQ;AAAA,MACRC,SAAS;AAAA,QACL,gBAAgB;AAAA,QAChBC,eAAe,SAASjB,MAAMkB,aAAa;AAAA,QAC3C,gBAAgB,SAASlB,MAAMmB,MAAM;AAAA,MAAA;AAAA,MAEzCC,MAAMC,KAAKC,UAAU;AAAA,QACjBhB,YAAYN,MAAMM;AAAAA,QAClBkD,OAAOxD,MAAMwD,SAAS;AAAA,MAAA,CACzB;AAAA,IAAA,CACJ,EACAjC,KAAK,OAAOC,QAAQ;AACjB,YAAMgB,OAAO,MAAMhB,IAAIG,KAAAA;AACvB,UAAI,CAACH,IAAIC,IAAI;AACTd,gBAAQe,MAAM,+BAA+Bc,IAAI;AACjD,cAAMV,MAAMU,KAAKiB,OAAO;AAAA,MAC5B;AACA,aAAO;AAAA,QACHC,SAASlB,KAAKA,KAAKkB,QAAQC,IAAI,CAACX,OAAe;AAAA,UAC3CY,QAAQZ;AAAAA,UACRL,MAAM;AAAA,QAAA,EACR;AAAA,MAAA;AAAA,IAEV,CAAC;AAAA,EAET;AAEA,iBAAsBkB,mBAAmB7D,OAMtC;AAEC,QAAI8D,SAAS;AACb,WAAOjD,OAAOb,MAAMc,QAAQhB,kBAAkB,uBAC1C;AAAA;AAAA,MAEIiB,QAAQ;AAAA,MACRC,SAAS;AAAA,QACL,gBAAgB;AAAA,QAChBC,eAAe,SAASjB,MAAMkB,aAAa;AAAA;AAAA,MAAA;AAAA,MAG/CE,MAAMC,KAAKC,UAAU;AAAA,QACjByC,YAAY/D,MAAM+D;AAAAA,QAClBC,WAAWhE,MAAMgE;AAAAA,MAAAA,CACpB;AAAA,IAAA,CACJ,EACAzC,KAAK,OAAOC,QAAQ;AACjB,UAAI,CAACA,IAAIC,IAAI;AACTd,gBAAQe,MAAM,8BAA8BF,GAAG;AAC/C,cAAM,MAAMA,IAAIG,KAAAA;AAAAA,MACpB;AACA,YAAMC,SAASJ,IAAIJ,MAAMS,UAAAA;AACzB,UAAI,CAACD,QAAQ;AACT,cAAM,IAAIE,MAAM,WAAW;AAAA,MAC/B;AAEA,uBAAiBC,SAASC,WAAWJ,MAAM,GAAG;AAC1C,cAAMK,MAAM,IAAIC,cAAcC,OAAOJ,KAAK;AAC1C+B,kBAAU7B;AACVtB,gBAAQC,MAAM,wBAAwBqB,GAAG;AACzCjC,cAAM8C,SAASb,GAAG;AAAA,MACtB;AAAA,IAEJ,CAAC,EAAEV,KAAK,MAAM;AACVZ,cAAQC,MAAM,wBAAwBkD,MAAM;AAC5C,aAAOA;AAAAA,IACX,CAAC;AAAA,EAET;ACrMO,WAASG,wBAAwBC,YAAyCzE,OAAgC;AAC7G,UAAM0E,0BAA0B,OAAOD,eAAe,YAAY,OAAOzE,UAAU,YAAYyE,WAAWE,YAAAA,EAAc1B,OAAO2B,WAAW5E,MAAM2E,YAAAA,EAAc1B,MAAM;AACpK,WAAQ,OAAOjD,UAAU,YAAY0E,0BAC/BD,WAAWI,UAAUJ,WAAWE,YAAAA,EAAc1B,KAAAA,EAAO6B,QAAQ9E,MAAM2E,YAAAA,EAAc1B,KAAAA,CAAM,IAAIjD,MAAMiD,KAAAA,EAAOH,MAAM,IAC9GiC;AAAAA,EACV;ACCO,WAASC,wBAAuDvE,YAAwBf,QAAWC,OAAO,IAAmC;AAChJ,QAAI,CAACc,WAAY,QAAO,CAAA;AACxB,WAAOb,OAAOC,QAAQY,UAAU,EAC3ByD,IAAI,CAAC,CAACnE,KAAKkF,QAAQ,MAAM;AACtB,UAAIC,OAAAA,kBAAkBD,QAAQ,EAAG,QAAO,CAAA;AACxC,YAAME,UAAUxF,OAAO,GAAGA,IAAI,IAAII,GAAG,KAAKA;AAC1C,YAAMqF,cAAcC,MAAAA,eAAe3F,QAAQyF,OAAO;AAClD,aAAOG,sBAAsBL,UAAUE,SAASC,WAAW;AAAA,IAC/D,CAAC,EACAlF,OAAO,CAACqF,GAAGC,OAAO;AAAA,MAAE,GAAGD;AAAAA,MAChC,GAAGC;AAAAA,IAAAA,IAAM,CAAA,CAAE;AAAA,EACX;AAEA,WAASC,kBAAkBR,UAAmC;AAC1D,UAAMS,UAAUC,MAAAA,WAAWV,QAAQ;AACnC,QAAI,CAACS,SAAS;AACVxE,cAAQe,MAAM,iCAAiCgD,QAAQ;AACvD,YAAM,IAAI5C,MAAM,oBAAoB;AAAA,IACxC;AACA,WAAO;AAAA,MACHuD,MAAMX,SAASW;AAAAA,MACfC,aAAaZ,SAASY;AAAAA,MACtB3C,MAAM+B,SAAS/B;AAAAA,MACf4C,eAAeJ;AAAAA,MACfK,MAAM,UAAUd,YAAYA,SAASc,OAC/BC,oBAAoBf,SAASc,IAAI,IACjChB;AAAAA,MACNkB,UAAUC,QAAQjB,SAASkB,IAAIF,YAAYhB,SAASkB,IAAIC,QAAQ;AAAA,IAAA;AAAA,EAExE;AAEA,WAASd,sBAAsBL,UAAoBtF,MAAcK,OAA4C;AACzG,QAAIkF,OAAAA,kBAAkBD,QAAQ,EAAG,QAAO,CAAA;AACxC,QAAIA,SAAS/B,SAAS,SAAS;AAE3B,UAAI+B,SAASoB,MAAM,CAACC,MAAMC,QAAQtB,SAASoB,EAAE,KAAK,CAACnB,OAAAA,kBAAkBD,SAASoB,EAAE,GAAG;AAC/E,cAAMG,sBAAqC;AAAA,UACvCZ,MAAMX,SAASW;AAAAA,UACfC,aAAaZ,SAASY;AAAAA,UACtB3C,MAAM+B,SAAS/B;AAAAA,UACf4C,eAAe;AAAA,UACfG,UAAUC,QAAQjB,SAASkB,IAAIF,YAAYhB,SAASkB,IAAIC,QAAQ;AAAA,UAChEC,IAAIZ,kBAAkBR,SAASoB,EAAc;AAAA,QAAA;AAGjD,cAAMhC,SAAS;AAAA,UAAE,CAAC1E,IAAI,GAAG6G;AAAAA,QAAAA;AAoBzB,eAAOnC;AAAAA,MACX,WAAWY,SAASwB,OAAO;AAEvB,cAAMD,sBAAqC;AAAA,UACvCZ,MAAMX,SAASW;AAAAA,UACfC,aAAaZ,SAASY;AAAAA,UACtB3C,MAAM+B,SAAS/B;AAAAA,UACf4C,eAAe;AAAA,UACfG,UAAUC,QAAQjB,SAASkB,IAAIF,YAAYhB,SAASkB,IAAIC,QAAQ;AAAA,UAChEK,OAAO;AAAA,YACHC,WAAWzB,SAASwB,MAAMC;AAAAA,YAC1BC,YAAY1B,SAASwB,MAAME;AAAAA,YAC3BlG,YAAYb,OAAOC,QAAQoF,SAASwB,MAAMhG,UAAU,EAC/CyD,IAAI,CAAC,CAACnE,KAAK6G,IAAI,OAAO;AAAA,cAAE,CAAC7G,GAAG,GAAG0F,kBAAkBmB,IAAI;AAAA,YAAA,EAAI,EACzD1G,OAAO,CAACqF,GAAGC,OAAO;AAAA,cAAE,GAAGD;AAAAA,cAChD,GAAGC;AAAAA,YAAAA,IAAM,CAAA,CAAE;AAAA,UAAA;AAAA,QACK;AAGJ,YAAI,CAACc,MAAMC,QAAQvG,KAAK,GAAG;AACvB,iBAAO;AAAA,YAAE,CAACL,IAAI,GAAG6G;AAAAA,UAAAA;AAAAA,QACrB;AAEA,eAAOxG,MAAMkE,IAAI,CAAC2C,GAAGC,MAAM;AACvB,cAAID,KAAK,KAAM,QAAO,CAAA;AACtB,gBAAME,UAAU9B,SAASwB,MAAOC,aAAa;AAC7C,gBAAMM,YAAYH,EAAEE,OAAO;AAC3B,gBAAME,WAAWhC,SAASwB,MAAOE,cAAc;AAC/C,gBAAMO,aAAaL,EAAEI,QAAQ;AAC7B,gBAAME,gBAAgBlC,SAASwB,MAAOhG,WAAWuG,SAAS;AAC1D,cAAIG,kBAAkBpC,QAAW;AAC7B7D,oBAAQe,MAAM,8BAA8B+E,SAAS,IAAI/B,SAASwB,MAAOhG,UAAU;AACnF,mBAAO,CAAA;AAAA,UACX;AACA,gBAAM2G,qBAAqB9B,sBAAsB6B,eAAe,GAAGxH,IAAI,IAAImH,CAAC,IAAIG,QAAQ,IAAIC,UAAU;AACtG,iBAAO;AAAA,YACH,CAAC,GAAGvH,IAAI,IAAImH,CAAC,IAAIC,OAAO,EAAE,GAAGC;AAAAA,YAC7B,GAAGI;AAAAA,UAAAA;AAAAA,QAEX,CAAC,EAAElH,OAAO,CAACqF,GAAGC,OAAO;AAAA,UAAE,GAAGD;AAAAA,UACtC,GAAGC;AAAAA,QAAAA,IAAM;AAAA,UAAE,CAAC7F,IAAI,GAAG6G;AAAAA,QAAAA,CAAqB;AAAA,MAChC;AAAA,IACJ,WAAWvB,SAAS/B,SAAS,OAAO;AAChC,UAAI+B,SAASxE,YAAY;AACrB,cAAM4G,gBAA+CzH,OAAOC,QAAQoF,SAASxE,UAAU,EAClFyD,IAAI,CAAC,CAACnE,KAAKoH,aAAa,MAAM;AAC3B,gBAAMG,aAAatH,QAAQD,GAAG;AAC9B,iBAAOuF,sBAAsB6B,eAAepH,KAAKuH,UAAU;AAAA,QAC/D,CAAC,EACApD,IAAIqD,CAAAA,MAAKC,iBAAiBD,GAAG5H,IAAI,CAAC,EAClCO,OAAO,CAACqF,GAAGC,OAAO;AAAA,UAAE,GAAGD;AAAAA,UACxC,GAAGC;AAAAA,QAAAA,IAAM,CAAA,CAAE;AAEC,YAAI5F,OAAO6H,KAAKJ,aAAa,EAAEvE,WAAW,UAAU,CAAA;AACpD,cAAM4E,oBAAmC;AAAA,UACrC9B,MAAMX,SAASW;AAAAA,UACfC,aAAaZ,SAASY;AAAAA,UACtB3C,MAAM+B,SAAS/B;AAAAA,UACf4C,eAAe;AAAA,UACfG,UAAUC,QAAQjB,SAASkB,IAAIF,YAAYhB,SAASkB,IAAIC,QAAQ;AAAA,QAAA;AAEpE,eAAO;AAAA,UACH,CAACzG,IAAI,GAAG+H;AAAAA,UACR,GAAGL;AAAAA,QAAAA;AAAAA,MAEX;AAAA,IACJ,OAAO;AACH,YAAM3B,UAAUC,MAAAA,WAAWV,QAAQ;AACnC,UAAI,CAACS,SAAS;AACVxE,gBAAQyG,KAAK,iCAAiChI,IAAI,cAAcsF,SAAS/B,IAAI,EAAE;AAC/E,eAAO,CAAA;AAAA,MACX;AACA,aAAO;AAAA,QACH,CAACvD,IAAI,GAAG8F,kBAAkBR,QAAQ;AAAA,MAAA;AAAA,IAE1C;AACA,WAAO,CAAA;AAAA,EACX;AAGA,WAASuC,iBAAiBI,KAA0BjI,OAAO,IAAyB;AAChF,WAAOC,OAAOC,QAAQ+H,GAAG,EACpB1D,IAAI,CAAC,CAACnE,KAAKC,KAAK,MAAM;AACnB,YAAMmF,UAAUxF,OAAO,GAAGA,IAAI,IAAII,GAAG,KAAKA;AAC1C,aAAO;AAAA,QAAE,CAACoF,OAAO,GAAGnF;AAAAA,MAAAA;AAAAA,IACxB,CAAC,EACAE,OAAO,CAACqF,GAAGC,OAAO;AAAA,MAAE,GAAGD;AAAAA,MAChC,GAAGC;AAAAA,IAAAA,IAAM,CAAA,CAAE;AAAA,EACX;AAEA,WAASQ,oBAAoB6B,YAAkC;AAC3D,QAAIvB,MAAMC,QAAQsB,UAAU,EACxB,QAAOA,WAAW3D,IAAI2C,CAAAA,MAAKiB,OAAOjB,EAAEkB,EAAE,CAAC;AAC3C,QAAI,OAAOF,eAAe,SACtB,QAAOjI,OAAO6H,KAAKI,UAAU;AACjC,UAAMxF,MAAM,yCAAyC;AAAA,EACzD;ACpKO,WAAS2F,sBAAsB;AAAA,IAAEC;AAAAA,EAAuD,GAAuB;AAClH,UAAMC,eAAe,OAAO5D,YAAoBC,WAAmBlB,aAAsC;AACrG,UAAI,CAAC4E,cAAc;AACf,cAAM,IAAI5F,MAAM,4BAA4B;AAAA,MAChD;AACA,YAAMZ,gBAAgB,MAAMwG,aAAAA;AAC5B,aAAO7D,mBAAmB;AAAA,QACtB3C;AAAAA,QACA6C;AAAAA,QACAC;AAAAA,QACAlB;AAAAA,MAAAA,CACH;AAAA,IACL;AAEA,WAAO;AAAA,MACH6E;AAAAA,IAAAA;AAAAA,EAER;ACCO,QAAMC,mCAAmCC,MAAMC,cAAyC,IAAkC;AAc1H,QAAMC,+BAA+BA,MAAA;AAAA,WAAiCC,MAAAA,WAAAJ,gCAA2C;AAAA,EAAC;AAEzH,WAASK,mBAAmB/H,YAA2CM,aAAqB;AACxF,QAAIA,eAAeN,YAAY;AAC3B,aAAOA,WAAWM,WAAW;AAAA,IACjC,OAAO;AAEH,YAAM4B,QAAQ5B,YAAY4B,MAAM,GAAG;AACnC,UAAIA,MAAMG,WAAW,GAAG;AACpB,eAAOiC;AAAAA,MACX;AACA,YAAM0D,YAAY9F,MAAM+F,MAAM,GAAG/F,MAAMG,SAAS,CAAC,EAAE6F,KAAK,GAAG;AAC3D,aAAOH,mBAAmB/H,YAAYgI,SAAS;AAAA,IAEnD;AAAA,EACJ;AAEO,WAASG,kCAAkC;AAAA,IAC9ClH;AAAAA,IACAmH;AAAAA,IACAC;AAAAA,IACAzH;AAAAA,IACA1B;AAAAA,IACAoJ;AAAAA,IACAC;AAAAA,EACoF,GAAG;AAEvF,UAAM,CAACC,SAASC,UAAU,IAAIC,MAAAA,SAAS,KAAK;AAC5C,UAAM,CAACC,aAAaC,cAAc,IAAIF,MAAAA,SAA0C,CAAA,CAAE;AAClF,UAAM,CAACG,oBAAoBC,qBAAqB,IAAIJ,MAAAA,SAAmB,CAAA,CAAE;AAEzE,UAAMK,sBAAsBC,MAAAA,OAAO,KAAK;AAExC,UAAMC,iBAAiBC,KAAAA,kBAAAA;AACvB,UAAMC,qBAAqBC,KAAAA,sBAAAA;AAG3B,UAAMpJ,aAAaqJ,MAAAA,QAAQ,MAAM9E,wBAAwB+D,WAAWtI,YAAYuI,aAAatJ,UAAU,CAAA,CAAE,GAAG,CAACsJ,aAAatJ,MAAM,CAAC;AAEjI,UAAMqK,YAAY3B,MAAMqB,OAAOT,aAAatJ,UAAU,CAAA,CAAE;AACxDsK,UAAAA,UAAU,MAAM;AACZ,UAAI,CAACR,oBAAoBS,mBACXA,UAAUjB,aAAatJ,UAAU,CAAA;AAAA,IACnD,GAAG,CAACsJ,aAAatJ,MAAM,CAAC;AAExB,UAAMwK,8BAA8B;AAEpC,UAAMC,eAAeC,MAAAA,YAAY,YAAY;AACzC,UAAI,CAACvB,iBAAkB;AACvB,YAAMwB,SAASxB,iBAAiB;AAAA,QAC5BlJ;AAAAA,QACAoJ;AAAAA,MAAAA,CACH;AACD,UAAIsB,QAAQ;AACRnB,mBAAW,IAAI;AAAA,MACnB;AAAA,IACJ,GAAG,CAACH,YAAYF,kBAAkBlJ,IAAI,CAAC;AAEvCqK,UAAAA,UAAU,MAAM;AACZ,UAAI,CAACnB,kBAAkB;AACnBK,mBAAW,IAAI;AAAA,MACnB,OAAO;AACHiB,qBAAAA;AAAAA,MACJ;AAAA,IAEJ,GAAG,CAACtB,kBAAkBsB,YAAY,CAAC;AAGnC,UAAMG,gBAAgBC,MAAAA,iBAAAA;AAEtB,UAAMC,kBAAkBJ,kBAAY,CAACrJ,gBAAwB;AACzDsI,qBAAgBoB,CAAAA,SAAS;AAErB,cAAM;AAAA,UACF,CAAC1J,WAAW,GAAG2J;AAAAA,UACf,GAAGC;AAAAA,QAAAA,IACHF;AACJ,eAAOE;AAAAA,MACX,CAAC;AAAA,IACL,GAAG,CAAA,CAAE;AAEL,UAAMC,mBAAmBR,MAAAA,YAAY,CAACrJ,eAAqB8J,UAAkB;AAEzE,YAAM5F,WAAWuD,mBAAmB/H,YAAYM,aAAW;AAC3D,UAAI8J,UAAU,QAAQ5F,UAAUgB,UAAU;AACtC;AAAA,MACJ;AAGA,YAAMjG,QAAQqF,MAAAA,eAAe0E,UAAUE,SAASlJ,aAAW;AAE3D,YAAM+J,eAAe9K,QAASA,QAAmB,KAAK;AACtD,YAAM+K,eAAeD,eAAeD;AAEpCd,gBAAUE,UAAU;AAAA,QAChB,GAAGF,UAAUE;AAAAA,QACb,CAAClJ,aAAW,GAAGgK;AAAAA,MAAAA;AAEnB/B,mBAAagC,cAAcjK,eAAagK,cAAc,KAAK;AAC3D1B,qBAAeoB,CAAAA,YAAS;AAAA,QACpB,GAAGA;AAAAA,QACH,CAAC1J,aAAW,IAAI0J,OAAK1J,aAAW,KAAK,MAAM8J;AAAAA,MAAAA,EAC7C;AAAA,IACN,GAAG,CAACpK,YAAYuI,WAAW,CAAC;AAE5B,UAAMiC,wBAAwBb,MAAAA,YAAY,CAACc,eAAuBC,eAAgDC,kBAA2B;AAEzI7B,4BAAuBkB,CAAAA,WAAS;AAC5B,eAAOA,OAAKY,OAAOC,CAAAA,MAAK,CAAC1L,OAAO6H,KAAK0D,aAAa,EAAEI,SAASD,CAAC,CAAC;AAAA,MACnE,CAAC;AAED1L,aAAOC,QAAQsL,aAAa,EAAEvI,QAAQ,CAAC,CAAC7B,eAAa0D,UAAU,MAAM;AAEjE,cAAMzE,UAAQqF,MAAAA,eAAe6F,eAAenK,aAAW;AACvD,cAAMkE,aAAWuD,mBAAmB/H,YAAYM,aAAW;AAE3D,YAAI,CAACkE,cAAYR,eAAe,QAAQQ,YAAUgB,UAAU;AACxD;AAAA,QACJ;AAEA,YAAI,OAAOxB,eAAe,UAAU;AAChCuE,uBAAagC,cAAcjK,eAAa0D,UAAU;AAClD;AAAA,QACJ;AAEA,YAAI2G,eAAe;AACfpC,uBAAagC,cAAcjK,eAAa0D,UAAU;AAClD;AAAA,QACJ;AAEA,cAAM+G,kBAAkBhH,wBAAwBC,YAAYzE,OAAK;AAEjE,cAAM8K,iBAAe9K,UAASA,UAAmB,KAAK;AACtD,YAAIwL,iBAAiB;AACjBxC,uBAAagC,cAAcjK,eAAa0D,UAAU;AAAA,QACtD,OAAO;AACH,gBAAMgH,YAAYxG,YAAUa,kBAAkB,eAAeb,YAAUa,kBAAkB;AACzF,gBAAM4F,eAAeZ,eAAaa,QAAAA;AAClC,cAAIF,cAAcC,aAAaE,SAAS,GAAG,KAAKF,aAAaE,SAAS,GAAG,KAAKF,aAAaE,SAAS,GAAG,KAAKF,aAAaE,SAAS,GAAG,IAAI;AACrI5C,yBAAagC,cAAcjK,eAAa2K,eAAe,SAAUjH,WAAsBoH,WAAW;AAAA,UACtG,OAAO;AACH7C,yBAAagC,cAAcjK,eAAa2K,gBAAgBA,aAAa5I,SAAS,IAAI,MAAM,MAAO2B,UAAqB;AAAA,UACxH;AAAA,QACJ;AAAA,MACJ,CAAC;AAED4E,qBAAeoB,CAAAA,YAAS;AAAA,QACpB,GAAGA;AAAAA,QACH,GAAG7K,OAAO6H,KAAK0D,aAAa,EACvBjL,OAAO,CAACC,KAAKJ,QAAQ;AAClB,gBAAMC,UAAQqF,MAAAA,eAAe2D,aAAatJ,QAAQK,GAAG;AACrD,gBAAM0E,eAAa0G,cAAcpL,GAAG;AACpC,iBAAO;AAAA,YACH,GAAGI;AAAAA,YACH,CAACJ,GAAG,GAAGyE,wBAAwBC,cAAYzE,OAAK,KAAKyE;AAAAA,UAAAA;AAAAA,QAE7D,GAAG,CAAA,CAAE;AAAA,MAAA,EACX;AAAA,IACN,GAAG,CAAChE,YAAYuI,WAAW,CAAC;AAE5B,UAAM8C,oCAAoC1B,kBAAY,CAAC2B,cAAmB;AACtEnC,yBAAmBoC,KAAK;AAAA,QACpB9I,MAAM;AAAA,QACNc,SAAS;AAAA,QACTiI,kBAAkB;AAAA,MAAA,CACrB;AAAA,IACL,GAAG,CAACrC,kBAAkB,CAAC;AAEvB,UAAMsC,qBAAqBlE,sBAAsB;AAAA,MAAEC,cAAcyB,eAAezB;AAAAA,IAAAA,CAAc;AAE9F,UAAMkE,sBAAsB/B,MAAAA,YAAY,MAAM;AAC1Cf,qBAAe,CAAA,CAAE;AAAA,IACrB,GAAG,CAAA,CAAE;AAEL,UAAM+C,UAAUhC,kBAAY,OAAO7J,UAAkE;AAEjG,UAAI,CAACmJ,eAAe2C,MAAM;AACtBzC,2BAAmBoC,KAAK;AAAA,UACpB9I,MAAM;AAAA,UACNc,SAAS;AAAA,QAAA,CACZ;AACD,eAAOsI,QAAQC,OAAO,IAAIlK,MAAM,eAAe,CAAC;AAAA,MACpD;AAEA,YAAMmK,eAAelC,cAAcmC,yBAAyB9M,IAAI;AAChE,YAAM8B,gBAAgB,MAAMiI,eAAezB,aAAAA;AAE3C,UAAI1H,MAAMQ,aAAa;AACnByJ,wBAAgBjK,MAAMQ,WAAW;AAAA,MACrC,OAAO;AACHoL,4BAAAA;AAAAA,MACJ;AAEA5C,4BAAuBkB,CAAAA,WAAS,CAAC,GAAGA,QAAM,GAAIlK,MAAMQ,cAAc,CAACR,MAAMQ,WAAW,IAAInB,OAAO6H,KAAKhH,UAAU,CAAE,CAAC;AACjH+I,0BAAoBS,UAAU;AAE9B,YAAMiB,kBAAgBnB,UAAUE,WAAW,CAAA;AAE3C,aAAO,IAAIqC,QAAQ,CAACI,SAASH,WAAW;AACpC,iBAAS/I,QAAQD,GAAQ;AACrBgG,gCAAsB,CAAA,CAAE;AACxB,cAAIhG,EAAEoJ,SAAS,oBAAoB;AAC/B,kBAAMZ,cAAYxI,EAAER,KAAKgJ;AACzBD,8CAAkCC,WAAS;AAAA,UAC/C,OAAO;AACH7K,oBAAQe,MAAM,iBAAiBsB,CAAC;AAAA,UACpC;AACAgJ,iBAAOhJ,CAAC;AACRiG,8BAAoBS,UAAU;AAAA,QAClC;AAEA,YAAI;AACA3J,+BAAqB;AAAA,YACjB,GAAGC;AAAAA,YACHc;AAAAA,YACAK;AAAAA,YACAjB;AAAAA,YACAd,MAAM6M;AAAAA,YACN3L,YAAYkI,WAAW6D,gBAAgB7D,WAAWnD;AAAAA,YAClD9E,mBAAmBiI,WAAWlD;AAAAA,YAE9BpE;AAAAA,YACA4B,UAAW+F,CAAAA,kBAAgB;AACvBlI,sBAAQC,MAAM,eAAeiI,aAAW;AACxC6B,oCAAsBC,iBAAe9B,eAAa7I,MAAM6K,iBAAiB,KAAK;AAAA,YAClF;AAAA,YACAjI,eAAeA,CAACpC,eAAqBqC,iBAAyB;AAE1DwH,+BAAiB7J,eAAaqC,YAAY;AAAA,YAC9C;AAAA,YACAI;AAAAA,YACAF,OAAQe,CAAAA,WAAW;AACfnD,sBAAQC,MAAM,YAAYkD,MAAM;AAChC,kBAAIA,OAAOwI,QAAQ;AACfxI,uBAAOwI,OAAOjK,QAASX,CAAAA,UAAU;AAC7B2H,qCAAmBoC,KAAK;AAAA,oBACpB9I,MAAM;AAAA,oBACNc,SAAS/B;AAAAA,kBAAAA,CACZ;AAAA,gBACL,CAAC;AAAA,cACL;AACA,kBAAIrC,OAAO6H,KAAKpD,OAAO+E,WAAW,EAAEtG,WAAW,GAAG;AAC9C8G,mCAAmBoC,KAAK;AAAA,kBACpB9I,MAAM;AAAA,kBACN+I,kBAAkB;AAAA,kBAClBjI,SAAS;AAAA,gBAAA,CACZ;AAAA,cACL;AACAuF,oCAAsB,CAAA,CAAE;AACxBmD,sBAAQrI,MAAM;AACdmF,kCAAoBS,UAAU;AAAA,YAClC;AAAA,UAAA,CACH,EAAE6C,MAAMtJ,OAAO;AAAA,QACpB,SAASD,KAAQ;AACbC,kBAAQD,GAAC;AAAA,QACb;AAAA,MACJ,CAAC;AAAA,IACL,GAAG,CACCmG,gBAAgBY,eAAe3K,MAAM6K,iBAAiB2B,qBACtD1L,YAAYY,MAAMK,QAAQqH,YAAYkC,uBAAuBL,kBAAkBkB,mCAAmClC,kBAAkB,CACvI;AAED,UAAMmD,mBAAmB3C,MAAAA,YAAY,OAAOvJ,YAAoBkD,UAAmB;AAC/E,YAAMtC,kBAAgB,MAAMiI,eAAezB,aAAAA;AAC3C,aAAOnE,4BAA4B;AAAA,QAC/BzC;AAAAA,QACAR;AAAAA,QACAY,eAAAA;AAAAA,QACAC;AAAAA,QACAqC;AAAAA,MAAAA,CACH;AAAA,IACL,GAAG,CAACrC,QAAQgI,eAAezB,cAAc5G,IAAI,CAAC;AAE9C,UAAM2L,4BAAuDlD,MAAAA,QAAQ,OAAO;AAAA,MACxEb;AAAAA,MACAG;AAAAA,MACAoB;AAAAA,MACA4B;AAAAA,MACAlC;AAAAA,MACAiC;AAAAA,MACAY;AAAAA,MACAzD;AAAAA,MACA4C;AAAAA,IAAAA,IACA,CACAjD,SACAG,aACAoB,iBACA4B,SACAlC,6BACAiC,qBACAY,kBACAzD,oBACA4C,kBAAkB,CACrB;AAED,0CACK,iCAAiC,UAAjC,EACG,OAAOc,2BACNlE,UACL;AAAA,EAER;AClUO,WAASmE,kBAAkB;AAAA,IAC9BtM;AAAAA,IACAhB;AAAAA,IACAuN;AAAAA,IACAnE;AAAAA,IACAC;AAAAA,IACAmE;AAAAA,EACmB,GAAG;AAEtB,UAAMC,cAAcC,KAAAA,eAAAA;AAEpB,UAAMC,aAAaC,sBAAsB5N,MAAMuN,MAAM;AAErD,UAAM,CAACM,SAASC,UAAU,IAAIrF,MAAMe,SAAS,KAAK;AAClD,UAAM6D,4BAA4B1E,6BAAAA;AAElC,UAAM,CAACoF,eAAeC,gBAAgB,IAAIvF,MAAMe,SAAqCpE,MAAS;AAC9F,UAAM,CAAC9D,cAAc2M,eAAe,IAAIxF,MAAMe,SAAiB,EAAE;AAEjE,UAAM4D,mBAAmBC,2BAA2BD;AAEpD,UAAMc,iBAAiBpE,MAAAA,OAAO,KAAK;AACnC,UAAMqE,yBAAyB1D,MAAAA,YAAY,eAAe0D,wBAAuB7M,gBAAuB;AACpG,UAAI,CAAC8L,iBAAkB;AACvB,UAAIc,eAAe5D,QAAS;AAC5B4D,qBAAe5D,UAAU;AACzB,YAAMhG,UAAUiJ,WAAW,SACpB,MAAMH,iBAAiBhE,WAAW6D,gBAAgB7D,WAAWnD,MAAM3E,cAAY,GAAGgD,UACnF8J,8BAA8BhF,WAAWtI,UAAU;AAEzD,YAAMuN,2BAA2BC,4BAA4BX,UAAU;AACvE,YAAMY,gBAAgBF,yBAAyB9J,IAAIC,CAAAA,WAAUA,OAAOA,MAAM;AAC1EwJ,uBAAiB,CAAC,GAAGK,0BAA0B,GAAG/J,QAAQoH,OAAOC,OAAK,CAAC4C,cAAc3C,SAASD,EAAEnH,MAAM,CAAC,CAAC,EAAEuE,MAAM,GAAG,CAAC,CAAC;AACrHmF,qBAAe5D,UAAU;AAAA,IAC7B,GACI,CAAClB,WAAWnD,MAAMmD,WAAW6D,cAAcG,kBAAkBG,MAAM,CAAC;AAEjDiB,UAAAA,iBAAiBnF,aAAatJ,MAAM;AAG3DsK,UAAAA,UAAU,MAAM;AACZ,UAAI,CAACgD,0BAA2B;AAChC,UAAI,CAACU,eAAe;AAChBC,yBAAiBM,4BAA4BX,UAAU,CAAC;AACxDQ,+BAAAA,EAAyBhM,KAAAA;AAAAA,MAC7B;AAAA,IACJ,GAAG,CAACkL,2BAA2BU,eAAeJ,YAAYQ,wBAAwB7M,cAAciM,MAAM,CAAC;AAEvGlD,UAAAA,UAAU,MAAM;AACZ,UAAI,CAACgD,0BAA2B;AAChCc,6BAAAA,EAAyBhM,KAAAA;AAAAA,IAC7B,GAAG,CAACkL,2BAA2BE,MAAM,CAAC;AAEtC,UAAMd,UAAUA,CAACjI,aAAoB;AACjC,UAAI,CAAC6I,6BAA6B,CAAChE,aAAatJ,OAAQ;AACxD+N,iBAAW,IAAI;AACf,UAAItJ,UAAQ;AACRiK,wBAAgBd,YAAYnJ,QAAM;AAClCwJ,yBAAiB,CAAC;AAAA,UACdxJ,QAAAA;AAAAA,UACAjB,MAAM;AAAA,QAAA,GACP,IAAIwK,iBAAiB,CAAA,GAAIhF,MAAM,GAAG,CAAC,CAAC,CAAC;AAAA,MAC5C;AACA,aAAOsE,0BAA0BZ,QAAQ;AAAA,QACrCzL;AAAAA,QACAjB,QAAQsJ,YAAatJ;AAAAA,QACrBuB,cAAckD;AAAAA,QACdiH,eAAe;AAAA,MAAA,CAClB,EAAEiD,QAAQ,MAAM;AACbZ,mBAAW,KAAK;AAAA,MACpB,CAAC;AAAA,IACL;AAEA,QAAI,CAACT,2BAA2B/D,QAC5B,QAAO;AAEX,UAAMG,cAAc4D,0BAA0B5D;AACvBxJ,WAAOF,OAAO0J,WAAW,EAAEiC,OAAOnF,OAAO,EAAEpD,SAAS;KAGzC4K,iBAAiB,CAAA,GAAI5K,SAAS,KAAK7B,aAAa6B,WAAW;AAI7F,aAASwL,SAAS;AACdlC,cAAQnL,YAAY;AAAA,IACxB;AAEA,WACIsN,gCAACC,GAAAA,QACG,OAAO,OACP,YAAY,GACZ,WAAW,iBACX,SAASD,2BAAAA,KAACE,GAAAA,QAAA,EAAO,SAAS,UACtB,OAAO,WACP,WAAWrB,eAAeD,mBAAmB,eAC7C,MAAM,SACN,UAAUK,SACT,UAAA;AAAA,MAAA,CAACA,WAAWkB,2BAAAA,IAACC,KAAAA,QAAA,EAAO,MAAM,QAAA,CAAQ;AAAA,MAClCnB,WAAWkB,2BAAAA,IAACE,GAAAA,kBAAA,EAAiB,MAAM,QAAA,CAAQ;AAAA,MAAE;AAAA,IAAA,EAAA,CAElD,GAEA,UAAA;AAAA,MAAAL,2BAAAA,KAACM,GAAAA,UAAA,EAAS,WAAW,QACjB,SAAS,MAAM;AACXzC,gBAAAA;AAAAA,MACJ,GACA,UAAA;AAAA,QAAAsC,2BAAAA,IAACC,KAAAA,QAAA,EAAO,MAAM,QAAA,CAAQ;AAAA,QAAA;AAAA,MAAA,GAE1B;AAAA,MAEAD,2BAAAA,IAACI,GAAAA,WAAA,EAAU,aAAa,cAAc,WAAW,QAAO;AAAA,MAEvDpB,eAAexJ,IAAI,CAAC6K,cAAcC,UAAU;AACzC,eAAOT,gCAACM,GAAAA,UAAA,EAEJ,SAAS,MAAM;AACXjB,0BAAgBmB,aAAa5K,MAAM;AACnCiI,kBAAQ2C,aAAa5K,MAAM;AAAA,QAC/B,GAEA,UAAA;AAAA,UAAAuK,2BAAAA,IAAC,OAAA,EAAI,WAAW,+DACXK,UAAAA,aAAa5K,QAClB;AAAA,UAEC4K,aAAa7L,SAAS,YAAYwL,2BAAAA,IAACO,GAAAA,YAAA,EAChC,SAAU1L,CAAAA,MAAM;AACZA,cAAE2L,eAAAA;AACF3L,cAAE4L,gBAAAA;AACFC,+BAAmB9B,YAAYyB,aAAa5K,MAAM;AAClDwJ,8BAAkBD,iBAAiB,CAAA,GAAIrC,OAAOC,SAAKA,IAAEnH,WAAW4K,aAAa5K,MAAM,CAAC;AAAA,UACxF,GACA,MAAM,YAEN,UAAAuK,2BAAAA,IAACW,qBAAM,MAAMC,GAAAA,SAASC,UAAS,EAAA,CACnC;AAAA,QAAA,EAAA,GApBKP,QAAQ,MAAMD,aAAa5K,MAsBpC;AAAA,MACJ,CAAC;AAAA,MAEDuK,2BAAAA,IAACI,GAAAA,WAAA,EAAU,aAAa,aAAA,CAAa;AAAA,MAErCP,2BAAAA,KAAC,OAAA,EACG,WAAWiB,GAAAA,IACP,mFACJ,GAEA,UAAA;AAAA,QAAAd,2BAAAA,IAACe,GAAAA,kBAAA,EACG,WAAWD,GAAAA,IAAI,6HAA6HE,GAAAA,eAAe,GAC3J,OAAOzO,cACP,WAAWiM,WAAW,OACtB,UAAUM,SACV,SAAUmC,CAAAA,UAAU;AAChBA,gBAAMR,gBAAAA;AAAAA,QACV,GACA,aAAa,8BACb,WAAY5L,CAAAA,QAAM;AACdA,cAAE4L,gBAAAA;AACF,cAAI5L,IAAExD,QAAQ,WAAW,CAACwD,IAAEqM,UAAU;AAClCrM,gBAAE2L,eAAAA;AACFZ,mBAAAA;AAAAA,UACJ;AAAA,QAEJ,GACA,UAAW/K,CAAAA,QAAM;AACbqK,0BAAgBrK,IAAEsM,OAAO7P,KAAK;AAAA,QAClC,GAAE;AAAA,QAGN0O,2BAAAA,IAACO,GAAAA,YAAA,EACG,MAAM,SACN,SAAS,MAAM;AACXrB,0BAAgB,EAAE;AAAA,QACtB,GACA,OAAO,CAAC3M,eAAe,YAAY8D,QACnC,UAAUyI,WAAW,CAACvM,cACtB,UAAAyN,2BAAAA,IAACW,mBAAA,EAAM,MAAMC,YAASQ,OAAM,GAChC;AAAA,wCAECb,GAAAA,YAAA,EACG,SAAS,MAAM7C,QAAQnL,YAAY,GACnC,MAAM,SACN,OAAO,CAACA,eAAe,YAAY8D,QACnC,UAAUyI,WAAW,CAACvM,cACrBuM,UAAAA;AAAAA,UAAAA,WACGkB,2BAAAA,IAACE,GAAAA,kBAAA,EAAiB,MAAM,WAAA,CAAW;AAAA,UACtC,CAACpB,WACEkB,2BAAAA,IAACqB,YAAAA,UAAA,EAAS,OAAO,UAAA,CAAU;AAAA,QAAA,EAAA,CACnC;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA,GAEJ;AAAA,EAER;AAWA,WAAShC,8BAA8BtN,YAAwC;AAE3E,UAAMuP,sBAAsBpQ,OAAOF,OAAOe,UAAU,EAAE4K,OAAO,CAACC,MAAgB;AAC1E,UAAIpG,OAAAA,kBAAkBoG,CAAC,GAAG;AACtB,eAAO;AAAA,MACX;AACA,aAAOA,EAAEpI,SAAS,aAAaoI,EAAEnF,IAAI8J,YAAY3E,EAAEnF,IAAIsF;AAAAA,IAC3D,CAAC;AAED,UAAMyE,kBAAwCF,oBAAoBlN,SAAS,IACrEkN,oBAAoBG,KAAKC,MAAMD,KAAKE,OAAAA,IAAWL,oBAAoBlN,MAAM,CAAC,IAC1EiC;AAEN,UAAMd,UAAU,CACZ,2BACA,+BAA+B;AAEnC,QAAIiM,iBAAiB;AACjBjM,cAAQqM,KAAK,wBAAwBJ,gBAAgBtK,IAAI,GAAG;AAAA,IAChE;AACA,WAAO3B,QAAQC,IAAIoH,CAAAA,OAAM;AAAA,MACrBnH,QAAQmH;AAAAA,MACRpI,MAAM;AAAA,IAAA,EACR;AAAA,EACN;AAEA,QAAMqK,wBAAwBA,CAAC5N,MAAcuN,WAAyB;AAClE,UAAMqD,eAAerD,WAAW,QAAQ,QAAQ;AAChD,WAAO,qBAAqBqD,YAAY,KAAKC,OAAAA,oBAAoB7Q,IAAI,CAAC;AAAA,EAC1E;AAEA,QAAMsO,8BAA8BA,CAACX,eAAuC;AACxE,UAAMmD,OAAOC,aAAaC,QAAQrD,UAAU;AAC5C,WAAOmD,OAAO7O,KAAKoB,MAAMyN,IAAI,EAAEvM,IAAI,CAACX,OAAe;AAAA,MAC/CY,QAAQZ;AAAAA,MACRL,MAAM;AAAA,IAAA,EACR,IAAI,CAAA;AAAA,EACV;AAEA,QAAMkL,kBAAkBA,CAACd,YAAoBnJ,WAAmB;AAC5D,QAAI,CAACA,UAAUA,OAAOlB,KAAAA,EAAOH,WAAW,GAAG;AACvC;AAAA,IACJ;AACA,UAAMoL,gBAAgBD,4BAA4BX,UAAU;AAC5DoD,iBAAaE,QAAQtD,YAAY1L,KAAKC,UAAU,CAACsC,QAAQ,GAAG+J,cACvDhK,IAAIX,CAAAA,MAAKA,EAAEY,MAAM,EACjBkH,OAAO9H,CAAAA,MAAKA,MAAMY,MAAM,EACxBuE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAAA,EACtB;AAEA,QAAM0G,qBAAqBA,CAAC9B,YAAoBnJ,WAAmB;AAC/DuM,iBAAaE,QAAQtD,YAAY1L,KAAKC,UAAUoM,4BAA4BX,UAAU,EACjFpJ,IAAIX,CAAAA,MAAKA,EAAEY,MAAM,EACjBkH,OAAO9H,OAAKA,MAAMY,MAAM,CAAC,CAAC;AAAA,EACnC;AC3QA,QAAM0M,kBAAkB;AAiCjB,WAAAC,yBAAAvQ,OAAA;AAAA,UAAAwQ,IAAAC,qBAAAA,EAAA,CAAA;AAEH,UAAAtP,SAAenB,OAAKmB,UAAAmP;AACpB,UAAAhI,mBAAyBtI,OAAKsI;AAsBCtI,WAAKc;AAAA,QAAA4P;AAAA,QAAAC;AAAA,QAAAH,EAAA,CAAA,MAAAtN,uBAAA0N,IAAA,2BAAA,GAAA;AAlBzBD,WAAA,CAAA;AAAA,QAAAE,MAEO;AAAA,QAAcC,WAAApE;AAAAA,QAAAqE,OAAA;AAAA,MAAA,CAAA;AAI3BP,aAAAG;AAAAA,IAAA,OAAA;AAAAA,WAAAH,EAAA,CAAA;AAAA,IAAA;AAQiB,UAAAQ,KAAAhR,OAAKc;AAAM,QAAAmQ;AAAA,QAAAT,EAAA,CAAA,MAAArP,UAAAqP,SAAAlI,oBAAAkI,EAAA,CAAA,MAAAQ,IAAA;AAhBLC,WAAA;AAAA,QAAAzR,KACnB;AAAA,QAAkB0R,OAChBP;AAAAA,QAMNQ,WAAA,CAAA;AAAA,UAAAC,OAGc;AAAA,UAAeN,WAAAzI;AAAAA,UACkDrI,OAAA;AAAA,YAAAmB;AAAAA,YAAAmH;AAAAA,YAAAxH,MAI9DkQ;AAAAA,UAAAA;AAAAA,QAAW,CAAA;AAAA,MAAA;AAIhCR,aAAArP;AAAAqP,aAAAlI;AAAAkI,aAAAQ;AAAAR,aAAAS;AAAAA,IAAA,OAAA;AAAAA,WAAAT,EAAA,CAAA;AAAA,IAAA;AAAAE,SApB2BO;AAoB3B,WApBMP;AAAAA,EAoBqC;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../src/utils/values.ts","../src/api.ts","../src/utils/suggestions.ts","../src/utils/properties.ts","../src/editor/useEditorAIController.tsx","../src/components/DataEnhancementControllerProvider.tsx","../src/components/FormEnhanceAction.tsx","../src/useDataEnhancementPlugin.tsx"],"sourcesContent":["export function flatMapEntityValues<M extends object>(values: M, path = \"\"): object {\n if (!values) return {};\n return Object.entries(values).flatMap(([key, value]) => {\n const currentPath = path ? `${path}.${key}` : key;\n if (typeof value === \"object\") {\n return flatMapEntityValues(value, currentPath);\n } else {\n return { [currentPath]: value };\n }\n }).reduce((acc, curr) => ({ ...acc,\n...curr }), {})\n}\n","import {\n DataEnhancementRequest,\n EnhancedDataResult,\n InputEntity,\n InputProperty,\n SamplePromptsResult\n} from \"./types/data_enhancement_controller\";\nimport { EntityValues } from \"@rebasepro/types\";\nimport { flatMapEntityValues } from \"./utils/values\";\n\n// const DEFAULT_SERVER = \"http://localhost:5001/rebase-dev-2da42/europe-west3/api\"; // Local\n\nconst DEFAULT_SERVER = \"https://api.rebase.pro\";\n\nexport async function enhanceDataAPIStream<M extends Record<string, unknown>>(props: {\n apiKey: string,\n entityId?: string | number,\n entityName: string,\n entityDescription?: string,\n propertyKey?: string,\n propertyInstructions?: string;\n values: EntityValues<M>,\n path: string,\n properties: Record<string, InputProperty>,\n\n instructions?: string,\n firebaseToken: string,\n onUpdate: (suggestions: Record<string, any>) => void;\n onUpdateDelta: (propertyKey: string, partialValue: any) => void;\n onError: (error: Error) => void;\n onEnd: (result: EnhancedDataResult) => void;\n host?: string;\n}) {\n\n const flatValues = flatMapEntityValues(props.values);\n\n const properties = props.properties;\n\n const inputEntity: InputEntity = {\n entityId: props.entityId,\n values: flatValues\n }\n\n const request: DataEnhancementRequest = {\n inputEntity,\n properties,\n entityName: props.entityName,\n entityDescription: props.entityDescription,\n propertyKey: props.propertyKey,\n propertyInstructions: props.propertyInstructions,\n instructions: props.instructions\n };\n\n console.debug(\"enhanceDataAPIStream\", request);\n\n return fetch((props.host ?? DEFAULT_SERVER) + \"/data/enhance_stream/\",\n {\n // mode: \"no-cors\",\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Basic ${props.firebaseToken}`,\n \"x-de-api-key\": `Basic ${props.apiKey}`\n // \"x-de-version\": version\n },\n body: JSON.stringify(request)\n })\n .then(async (res) => {\n if (!res.ok) {\n console.error(\"enhanceDataAPIStream error\", res)\n throw await res.json();\n }\n const reader = res.body?.getReader();\n if (!reader) {\n throw new Error(\"No reader\");\n }\n\n for await (const chunk of readChunks(reader)) {\n const str = new TextDecoder().decode(chunk);\n try {\n str.split(\"&$# \").forEach((s) => {\n if (s && s.length > 0) {\n const data = JSON.parse(s.trim());\n if (data.type === \"suggestion_delta\")\n props.onUpdateDelta(data.data.propertyKey, data.data.partialValue);\n else if (data.type === \"suggestion\")\n props.onUpdate(data.data);\n else if (data.type === \"result\")\n props.onEnd(data.data);\n }\n });\n } catch (e: any) {\n console.error(\"str\", str);\n console.error(\"Error parsing stream\", e);\n props.onError(e);\n }\n }\n\n });\n\n}\n\nfunction readChunks(reader: ReadableStreamDefaultReader) {\n return {\n async *[Symbol.asyncIterator]() {\n let readResult = await reader.read();\n while (!readResult.done) {\n yield readResult.value;\n readResult = await reader.read();\n }\n }\n };\n}\n\nexport async function fetchEntityPromptSuggestion<M extends object>(props: {\n input?: string,\n entityName: string,\n firebaseToken: string,\n apiKey: string,\n host?: string\n}): Promise<SamplePromptsResult> {\n\n return fetch((props.host ?? DEFAULT_SERVER) + \"/data/prompt_autocomplete/\",\n {\n // mode: \"no-cors\",\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Basic ${props.firebaseToken}`,\n \"x-de-api-key\": `Basic ${props.apiKey}`\n },\n body: JSON.stringify({\n entityName: props.entityName,\n input: props.input ?? null\n })\n })\n .then(async (res) => {\n const data = await res.json();\n if (!res.ok) {\n console.error(\"fetchEntityPromptSuggestion\", data);\n throw Error(data.message);\n }\n return {\n prompts: data.data.prompts.map((e: string) => ({\n prompt: e,\n type: \"sample\"\n }))\n };\n });\n\n}\n\nexport async function autocompleteStream(props: {\n firebaseToken: string,\n textBefore?: string,\n textAfter: string,\n host?: string;\n onUpdate: (delta: string) => void;\n}) {\n\n let result = \"\";\n return fetch((props.host ?? DEFAULT_SERVER) + \"/data/autocomplete/\",\n {\n // mode: \"no-cors\",\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Basic ${props.firebaseToken}`\n // \"x-de-version\": version\n },\n body: JSON.stringify({\n textBefore: props.textBefore,\n textAfter: props.textAfter\n })\n })\n .then(async (res) => {\n if (!res.ok) {\n console.error(\"enhanceDataAPIStream error\", res)\n throw await res.json();\n }\n const reader = res.body?.getReader();\n if (!reader) {\n throw new Error(\"No reader\");\n }\n\n for await (const chunk of readChunks(reader)) {\n const str = new TextDecoder().decode(chunk);\n result += str;\n console.debug(\"Autocomplete update:\", str);\n props.onUpdate(str);\n }\n\n }).then(() => {\n console.debug(\"Autocomplete result:\", result);\n return result;\n });\n\n}\n","export function getAppendableSuggestion(suggestion: string | number | undefined, value: any): string | undefined {\n const suggestionIncludesValue = typeof suggestion === \"string\" && typeof value === \"string\" && suggestion.toLowerCase().trim().startsWith(value.toLowerCase().trim());\n return (typeof value === \"string\" && suggestionIncludesValue)\n ? suggestion.substring(suggestion.toLowerCase().trim().indexOf(value.toLowerCase().trim()) + value.trim().length)\n : undefined;\n}\n","import { getFieldId } from \"@rebasepro/admin\";\nimport { EnumValues, Properties, Property } from \"@rebasepro/types\";\nimport { isPropertyBuilder } from \"@rebasepro/common\";\nimport { InputProperty } from \"../types/data_enhancement_controller\";\nimport { getValueInPath } from \"@rebasepro/utils\";\n\nexport function getSimplifiedProperties<M extends Record<string, any>>(properties: Properties, values: M, path = \"\"): Record<string, InputProperty> {\n if (!properties) return {};\n return Object.entries(properties)\n .map(([key, property]) => {\n if (isPropertyBuilder(property)) return {};\n const fullKey = path ? `${path}.${key}` : key;\n const valueInPath = getValueInPath(values, fullKey);\n return getSimplifiedProperty(property, fullKey, valueInPath)\n })\n .reduce((a, b) => ({ ...a,\n...b }), {});\n}\n\nfunction getSimpleProperty(property: Property): InputProperty {\n const fieldId = getFieldId(property);\n if (!fieldId) {\n console.error(\"No fieldId found for property\", property);\n throw new Error(\"Field id not found\");\n }\n return {\n name: property.name,\n description: property.description,\n type: property.type,\n fieldConfigId: fieldId,\n enum: \"enum\" in property && property.enum\n ? getSimpleEnumValues(property.enum)\n : undefined,\n disabled: Boolean(property.ui?.disabled || property.ui?.readOnly)\n };\n}\n\nfunction getSimplifiedProperty(property: Property, path: string, value?: any): Record<string, InputProperty> {\n if (isPropertyBuilder(property)) return {};\n if (property.type === \"array\") {\n\n if (property.of && !Array.isArray(property.of) && !isPropertyBuilder(property.of)) {\n const arrayParentProperty: InputProperty = {\n name: property.name,\n description: property.description,\n type: property.type,\n fieldConfigId: \"repeat\",\n disabled: Boolean(property.ui?.disabled || property.ui?.readOnly),\n of: getSimpleProperty(property.of as Property)\n };\n\n const result = { [path]: arrayParentProperty };\n // if (Array.isArray(value)) {\n // result = {\n // ...result,\n // ...value\n // .map((v, i) => getSimplifiedProperty(property.of, `${path}.${i}`, v))\n // .reduce((a, b) => ({ ...a, ...b }), {})\n // };\n // }\n //\n // const existingValuesCount = Array.isArray(value) ? value.length : 0;\n //\n // const newValuesCount = property.of && !isPropertyBuilder<any, any>(property.of) && (property.of as Property).type === \"map\" ? 1 : 3;\n // result = {\n // ...result,\n // // ...Array.from(Array(newValuesCount))\n // // .map((v, i) => getSimplifiedProperty(property.of, `${path}.${i + existingValuesCount}`, v))\n // // .reduce((a, b) => ({ ...a, ...b }), {})\n // }\n\n return result;\n } else if (property.oneOf) {\n\n const arrayParentProperty: InputProperty = {\n name: property.name,\n description: property.description,\n type: property.type,\n fieldConfigId: \"block\",\n disabled: Boolean(property.ui?.disabled || property.ui?.readOnly),\n oneOf: {\n typeField: property.oneOf.typeField,\n valueField: property.oneOf.valueField,\n properties: Object.entries(property.oneOf.properties)\n .map(([key, prop]) => ({ [key]: getSimpleProperty(prop) }))\n .reduce((a, b) => ({ ...a,\n...b }), {})\n }\n };\n\n if (!Array.isArray(value)) {\n return { [path]: arrayParentProperty };\n }\n\n return value.map((v, i) => {\n if (v == null) return {};\n const typeKey = property.oneOf!.typeField ?? \"type\";\n const oneOfType = v[typeKey];\n const valueKey = property.oneOf!.valueField ?? \"value\";\n const oneOfValue = v[valueKey];\n const childProperty = property.oneOf!.properties[oneOfType];\n if (childProperty === undefined) {\n console.error(`No property found for type ${oneOfType}`, property.oneOf!.properties);\n return {};\n }\n const simplifiedProperty = getSimplifiedProperty(childProperty, `${path}.${i}.${valueKey}`, oneOfValue);\n return {\n [`${path}.${i}.${typeKey}`]: oneOfType,\n ...simplifiedProperty\n };\n }).reduce((a, b) => ({ ...a,\n...b }), { [path]: arrayParentProperty });\n }\n } else if (property.type === \"map\") {\n if (property.properties) {\n const mapProperties: Record<string, InputProperty> = Object.entries(property.properties)\n .map(([key, childProperty]) => {\n const childValue = value?.[key];\n return getSimplifiedProperty(childProperty, key, childValue);\n })\n .map(o => attachPathToKeys(o, path))\n .reduce((a, b) => ({ ...a,\n...b }), {});\n\n if (Object.keys(mapProperties).length === 0) return {};\n const mapParentProperty: InputProperty = {\n name: property.name,\n description: property.description,\n type: property.type,\n fieldConfigId: \"group\",\n disabled: Boolean(property.ui?.disabled || property.ui?.readOnly)\n };\n return {\n [path]: mapParentProperty,\n ...mapProperties\n } as Record<string, InputProperty>;\n }\n } else {\n const fieldId = getFieldId(property);\n if (!fieldId) {\n console.warn(`No fieldId found for property ${path} with type ${property.type}`);\n return {};\n }\n return {\n [path]: getSimpleProperty(property)\n };\n }\n return {};\n}\n\n// attach a path to every key in an object\nfunction attachPathToKeys(obj: Record<string, any>, path = \"\"): Record<string, any> {\n return Object.entries(obj)\n .map(([key, value]) => {\n const fullKey = path ? `${path}.${key}` : key;\n return { [fullKey]: value };\n })\n .reduce((a, b) => ({ ...a,\n...b }), {});\n}\n\nfunction getSimpleEnumValues(enumValues: EnumValues): string[] {\n if (Array.isArray(enumValues))\n return enumValues.map(v => String(v.id));\n if (typeof enumValues === \"object\")\n return Object.keys(enumValues);\n throw Error(\"getSimpleEnumValues: Invalid enumValues\");\n}\n","import { autocompleteStream } from \"../api\";\nimport { EditorAIController } from \"@rebasepro/admin\";\n\nexport function useEditorAIController({ getAuthToken }: { getAuthToken?: () => Promise<string> }): EditorAIController {\n const autocomplete = async (textBefore: string, textAfter: string, onUpdate: (delta: string) => void) => {\n if (!getAuthToken) {\n throw new Error(\"Firebase token is required\");\n }\n const firebaseToken = await getAuthToken();\n return autocompleteStream({\n firebaseToken,\n textBefore,\n textAfter,\n onUpdate\n });\n }\n\n return {\n autocomplete\n };\n}\n\n// async function * generateLoremIpsum(): AsyncGenerator<string> {\n// const loremIpsum = \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\\n# Heading\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\";\n//\n// const words = loremIpsum.split(\" \");\n//\n// for (const word of words) {\n// yield word;\n// await new Promise(resolve => setTimeout(resolve, 100));\n// }\n// }\n//\n// const generator = generateLoremIpsum();\n// for await (const word of generator) {\n//\n// }\n","import React, { PropsWithChildren, useCallback, useContext, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport {\n DataEnhancementController,\n EnhancedDataResult,\n EnhanceParams,\n InputProperty\n} from \"../types/data_enhancement_controller\";\nimport {\n useAuthController,\n useCustomizationController,\n useSnackbarController\n} from \"@rebasepro/core\";\nimport { useUrlController } from \"@rebasepro/admin\";\nimport { DataDriver, Entity, EntityCollection, PluginFormActionProps } from \"@rebasepro/types\";\nimport { enhanceDataAPIStream, fetchEntityPromptSuggestion } from \"../api\";\nimport { getAppendableSuggestion } from \"../utils/suggestions\";\nimport { getSimplifiedProperties } from \"../utils/properties\";\nimport { useEditorAIController } from \"../editor/useEditorAIController\";\nimport { getValueInPath } from \"@rebasepro/utils\";\n\nexport const DataEnhancementControllerContext = React.createContext<DataEnhancementController>(null! as DataEnhancementController);\n\nexport type DataEnhancementControllerProviderProps = {\n\n apiKey: string;\n\n getConfigForPath?: (props: {\n path: string,\n collection: EntityCollection\n }) => boolean;\n\n host?: string;\n}\n\nexport const useDataEnhancementController = (): DataEnhancementController => useContext(DataEnhancementControllerContext);\n\nfunction getPropertyFromKey(properties: Record<string, InputProperty>, propertyKey: string) {\n if (propertyKey in properties) {\n return properties[propertyKey];\n } else {\n //split the property key\n const split = propertyKey.split(\".\");\n if (split.length === 1) {\n return undefined;\n }\n const parentKey = split.slice(0, split.length - 1).join(\".\");\n return getPropertyFromKey(properties, parentKey);\n\n }\n}\n\nexport function DataEnhancementControllerProvider({\n apiKey,\n getConfigForPath,\n children,\n host,\n path,\n collection,\n formContext\n}: PropsWithChildren<DataEnhancementControllerProviderProps & PluginFormActionProps<any>>) {\n\n const [enabled, setEnabled] = useState(false);\n const [suggestions, setSuggestions] = useState<Record<string, string | number>>({});\n const [loadingSuggestions, setLoadingSuggestions] = useState<string[]>([]);\n\n const enhancingInProgress = useRef(false);\n\n const authController = useAuthController();\n const snackbarController = useSnackbarController();\n\n\n const properties = useMemo(() => getSimplifiedProperties(collection.properties, formContext?.values ?? {}), [formContext?.values]);\n // const preEnhanceValuesRef = React.useRef(formContext?.values ?? {});\n const valuesRef = React.useRef(formContext?.values ?? {});\n useEffect(() => {\n if (!enhancingInProgress.current)\n valuesRef.current = formContext?.values ?? {};\n }, [formContext?.values]);\n\n const allowReferenceDataSelection = false;\n\n const updateConfig = useCallback(async () => {\n if (!getConfigForPath) return;\n const config = getConfigForPath({\n path,\n collection\n });\n if (config) {\n setEnabled(true);\n }\n }, [collection, getConfigForPath, path]);\n\n useEffect(() => {\n if (!getConfigForPath) {\n setEnabled(true);\n } else {\n updateConfig();\n }\n\n }, [getConfigForPath, updateConfig]);\n\n\n const urlController = useUrlController();\n\n const clearSuggestion = useCallback((propertyKey: string) => {\n setSuggestions((prev) => {\n //remove propertyKey from prev\n const {\n [propertyKey]: _,\n ...rest\n } = prev;\n return rest;\n });\n }, []);\n\n const appendValueDelta = useCallback((propertyKey: string, delta: string) => {\n\n const property = getPropertyFromKey(properties, propertyKey);\n if (delta === null || property?.disabled) {\n return;\n }\n\n // clearSuggestion(propertyKey);\n const value = getValueInPath(valuesRef.current, propertyKey);\n\n const currentValue = value ? (value as string) + \"\" : \"\";\n const updatedValue = currentValue + delta;\n // if (currentValue.length === 0) updatedValue = updatedValue.trimStart();\n valuesRef.current = {\n ...valuesRef.current,\n [propertyKey]: updatedValue\n };\n formContext?.setFieldValue(propertyKey, updatedValue, false);\n setSuggestions(prev => ({\n ...prev,\n [propertyKey]: (prev[propertyKey] ?? \"\") + delta\n }));\n }, [properties, formContext]);\n\n const updateSuggestedValues = useCallback((currentValues: object, updatedValues: Record<string, string | number>, replaceValues: boolean) => {\n\n setLoadingSuggestions((prev) => {\n return prev.filter(p => !Object.keys(updatedValues).includes(p));\n });\n\n Object.entries(updatedValues).forEach(([propertyKey, suggestion]) => {\n\n const value = getValueInPath(currentValues, propertyKey);\n const property = getPropertyFromKey(properties, propertyKey);\n\n if (!property || suggestion === null || property?.disabled) {\n return;\n }\n\n if (typeof suggestion === \"number\") {\n formContext?.setFieldValue(propertyKey, suggestion);\n return;\n }\n\n if (replaceValues) {\n formContext?.setFieldValue(propertyKey, suggestion);\n return;\n }\n\n const appendableValue = getAppendableSuggestion(suggestion, value);\n\n const currentValue = value ? (value as string) + \"\" : \"\";\n if (appendableValue) {\n formContext?.setFieldValue(propertyKey, suggestion);\n } else {\n const multiline = property?.fieldConfigId === \"multiline\" || property?.fieldConfigId === \"markdown\";\n const trimmedValue = currentValue.trimEnd();\n if (multiline && (trimmedValue.endsWith(\".\") || trimmedValue.endsWith(\"?\") || trimmedValue.endsWith(\"!\") || trimmedValue.endsWith(\":\"))) {\n formContext?.setFieldValue(propertyKey, trimmedValue + \"\\n\\n\" + (suggestion as string).trimStart());\n } else {\n formContext?.setFieldValue(propertyKey, trimmedValue + (trimmedValue.length > 0 ? \" \" : \"\") + (suggestion as string));\n }\n }\n });\n\n setSuggestions(prev => ({\n ...prev,\n ...Object.keys(updatedValues)\n .reduce((acc, key) => {\n const value = getValueInPath(formContext?.values, key);\n const suggestion = updatedValues[key];\n return {\n ...acc,\n [key]: getAppendableSuggestion(suggestion, value) ?? suggestion\n };\n }, {})\n }));\n }, [properties, formContext]);\n\n const displayNeededSubscriptionSnackbar = useCallback((projectId: any) => {\n snackbarController.open({\n type: \"warning\",\n message: \"A valid subscription is needed in order to use this function.\",\n autoHideDuration: 4000\n });\n }, [snackbarController]);\n\n const editorAIController = useEditorAIController({ getAuthToken: authController.getAuthToken });\n\n const clearAllSuggestions = useCallback(() => {\n setSuggestions({});\n }, []);\n\n const enhance = useCallback(async (props: EnhanceParams<any>): Promise<EnhancedDataResult | null> => {\n\n if (!authController.user) {\n snackbarController.open({\n type: \"warning\",\n message: \"You need to be logged in to enhance data\"\n });\n return Promise.reject(new Error(\"Not logged in\"));\n }\n\n const resolvedPath = urlController.resolveDatabasePathsFrom(path);\n const firebaseToken = await authController.getAuthToken();\n\n if (props.propertyKey) {\n clearSuggestion(props.propertyKey)\n } else {\n clearAllSuggestions();\n }\n\n setLoadingSuggestions((prev) => [...prev, ...(props.propertyKey ? [props.propertyKey] : Object.keys(properties))]);\n enhancingInProgress.current = true;\n\n const currentValues = valuesRef.current ?? {};\n\n return new Promise((resolve, reject) => {\n function onError(e: any) {\n setLoadingSuggestions([]);\n if (e.code === \"payment-required\") {\n const projectId = e.data.projectId;\n displayNeededSubscriptionSnackbar(projectId);\n } else {\n console.error(\"Enhance error\", e);\n }\n reject(e);\n enhancingInProgress.current = false;\n }\n\n try {\n enhanceDataAPIStream({\n ...props,\n host,\n apiKey,\n properties,\n path: resolvedPath,\n entityName: collection.singularName ?? collection.name,\n entityDescription: collection.description,\n\n firebaseToken,\n onUpdate: (suggestions) => {\n console.debug(\"de onUpdate\", suggestions);\n updateSuggestedValues(currentValues, suggestions, props.replaceValues ?? false);\n },\n onUpdateDelta: (propertyKey: string, partialValue: string) => {\n // console.debug(\"de delta\", propertyKey, partialValue);\n appendValueDelta(propertyKey, partialValue);\n },\n onError,\n onEnd: (result) => {\n console.debug(\"de onEnd\", result);\n if (result.errors) {\n result.errors.forEach((error) => {\n snackbarController.open({\n type: \"warning\",\n message: error\n })\n });\n }\n if (Object.keys(result.suggestions).length === 0) {\n snackbarController.open({\n type: \"info\",\n autoHideDuration: 1800,\n message: \"No fields were updated\"\n })\n }\n setLoadingSuggestions([]);\n resolve(result);\n enhancingInProgress.current = false;\n }\n }).catch(onError);\n } catch (e: any) {\n onError(e);\n }\n });\n }, [\n authController, urlController, path, clearSuggestion, clearAllSuggestions,\n properties, host, apiKey, collection, updateSuggestedValues, appendValueDelta, displayNeededSubscriptionSnackbar, snackbarController\n ]);\n\n const getSamplePrompts = useCallback(async (entityName: string, input?: string) => {\n const firebaseToken = await authController.getAuthToken()\n return fetchEntityPromptSuggestion({\n host,\n entityName,\n firebaseToken,\n apiKey,\n input\n });\n }, [apiKey, authController.getAuthToken, host]);\n\n const dataEnhancementController: DataEnhancementController = useMemo(() => ({\n enabled,\n suggestions,\n clearSuggestion,\n enhance,\n allowReferenceDataSelection,\n clearAllSuggestions,\n getSamplePrompts,\n loadingSuggestions,\n editorAIController\n }), [\n enabled,\n suggestions,\n clearSuggestion,\n enhance,\n allowReferenceDataSelection,\n clearAllSuggestions,\n getSamplePrompts,\n loadingSuggestions,\n editorAIController\n ]);\n\n return (\n <DataEnhancementControllerContext.Provider\n value={dataEnhancementController}>\n {children}\n </DataEnhancementControllerContext.Provider>\n );\n}\n\n\n","\nimport React, { useCallback, useDeferredValue, useEffect, useRef } from \"react\";\n\nimport {\n Button,\n CircularProgress,\n cls,\n focusedDisabled,\n IconButton,\n iconSize,\n Menu,\n MenuItem,\n SendIcon,\n Separator,\n TextareaAutosize,\n XIcon\n} from \"@rebasepro/ui\";\nimport {\n AIIcon,\n useLargeLayout\n} from \"@rebasepro/core\";\nimport { EntityStatus, PluginFormActionProps, Properties, Property } from \"@rebasepro/types\";\nimport { isPropertyBuilder, stripCollectionPath } from \"@rebasepro/common\";\nimport { useDataEnhancementController } from \"./DataEnhancementControllerProvider\";\nimport { SamplePrompt } from \"../types/data_enhancement_controller\";\n\nexport function FormEnhanceAction({\n entityId,\n path,\n status,\n collection,\n formContext,\n openEntityMode\n}: PluginFormActionProps) {\n\n const largeLayout = useLargeLayout();\n\n const storageKey = createLocalStorageKey(path, status);\n\n const [loading, setLoading] = React.useState(false);\n const dataEnhancementController = useDataEnhancementController();\n\n const [samplePrompts, setSamplePrompts] = React.useState<SamplePrompt[] | undefined>(undefined);\n const [instructions, setInstructions] = React.useState<string>(\"\");\n\n const getSamplePrompts = dataEnhancementController?.getSamplePrompts;\n\n const loadingPrompts = useRef(false);\n const updateSuggestedPrompts = useCallback(async function updateSuggestedPrompts(instructions?: string) {\n if (!getSamplePrompts) return;\n if (loadingPrompts.current) return;\n loadingPrompts.current = true;\n const prompts = status === \"new\"\n ? (await getSamplePrompts(collection.singularName ?? collection.name, instructions)).prompts\n : getPromptsForExistingEntities(collection.properties);\n\n const recentPromptsFromStorage = getRecentPromptsFromStorage(storageKey);\n const recentPrompts = recentPromptsFromStorage.map(prompt => prompt.prompt);\n setSamplePrompts([...recentPromptsFromStorage, ...prompts.filter(p => !recentPrompts.includes(p.prompt))].slice(0, 5));\n loadingPrompts.current = false;\n },\n [collection.name, collection.singularName, getSamplePrompts, status]);\n\n const deferredValues = useDeferredValue(formContext?.values);\n // const enoughData = countStringCharacters(deferredValues, collection.properties) > 20;\n\n useEffect(() => {\n if (!dataEnhancementController) return;\n if (!samplePrompts) {\n setSamplePrompts(getRecentPromptsFromStorage(storageKey));\n updateSuggestedPrompts().then();\n }\n }, [dataEnhancementController, samplePrompts, storageKey, updateSuggestedPrompts, instructions, status]);\n\n useEffect(() => {\n if (!dataEnhancementController) return;\n updateSuggestedPrompts().then();\n }, [dataEnhancementController, status]);\n\n const enhance = (prompt?: string) => {\n if (!dataEnhancementController || !formContext?.values) return;\n setLoading(true);\n if (prompt) {\n addRecentPrompt(storageKey, prompt);\n setSamplePrompts([{\n prompt,\n type: \"recent\"\n }, ...(samplePrompts ?? []).slice(0, 5)]);\n }\n return dataEnhancementController.enhance({\n entityId,\n values: formContext!.values,\n instructions: prompt,\n replaceValues: true\n }).finally(() => {\n setLoading(false);\n });\n };\n\n if (!dataEnhancementController?.enabled)\n return null;\n\n const suggestions = dataEnhancementController.suggestions;\n const hasSuggestions = Object.values(suggestions).filter(Boolean).length > 0;\n\n const disabledSuggestionActions = !hasSuggestions;\n const promptSuggestionsEnabled = (samplePrompts ?? []).length > 0 && instructions.length === 0;\n\n // const noIdSet = !formContext?.entityId;\n\n function submit() {\n enhance(instructions);\n }\n\n return (\n <Menu\n align={\"end\"}\n sideOffset={8}\n className={\"max-w-[100vw]\"}\n trigger={<Button variant={\"filled\"}\n color={\"neutral\"}\n fullWidth={largeLayout && openEntityMode === \"full_screen\"}\n size={\"small\"}\n disabled={loading}>\n {!loading && <AIIcon size={\"small\"}/>}\n {loading && <CircularProgress size={\"small\"}/>}\n Autofill\n </Button>}>\n\n <MenuItem className={\"py-4\"}\n onClick={() => {\n enhance();\n }}>\n <AIIcon size={\"small\"}/>\n Autofill based on the current content\n </MenuItem>\n\n <Separator orientation={\"horizontal\"} className={\"mt-2\"}/>\n\n {samplePrompts?.map((samplePrompt, index) => {\n return <MenuItem\n key={index + \"_\" + samplePrompt.prompt}\n onClick={() => {\n setInstructions(samplePrompt.prompt);\n enhance(samplePrompt.prompt);\n }}\n >\n <div className={\"pl-9 grow text-text-secondary dark:text-text-secondary-dark\"}>\n {samplePrompt.prompt}\n </div>\n\n {samplePrompt.type === \"recent\" && <IconButton\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n removeRecentPrompt(storageKey, samplePrompt.prompt);\n setSamplePrompts((samplePrompts ?? []).filter(p => p.prompt !== samplePrompt.prompt));\n }}\n size={\"smallest\"}\n >\n <XIcon size={iconSize.smallest}/>\n </IconButton>\n }\n </MenuItem>;\n })}\n\n <Separator orientation={\"horizontal\"}/>\n\n <div\n className={cls(\n \"my-2 w-[500px] max-w-full flex items-start text-surface-700 dark:text-surface-200\"\n )}>\n\n <TextareaAutosize\n className={cls(\"p-4 rounded-lg resize-none bg-surface-100 dark:bg-surface-950 mx-2 w-full grow outline-hidden max-h-[300px] overflow-auto\", focusedDisabled)}\n value={instructions}\n autoFocus={status === \"new\"}\n disabled={loading}\n onFocus={(event) => {\n event.stopPropagation();\n }}\n placeholder={\"...or provide instructions\"}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n submit();\n }\n\n }}\n onChange={(e) => {\n setInstructions(e.target.value);\n }}\n />\n\n <IconButton\n size={\"small\"}\n onClick={() => {\n setInstructions(\"\");\n }}\n color={!instructions ? \"primary\" : undefined}\n disabled={loading || !instructions}>\n <XIcon size={iconSize.small}/>\n </IconButton>\n\n <IconButton\n onClick={() => enhance(instructions)}\n size={\"small\"}\n color={!instructions ? \"primary\" : undefined}\n disabled={loading || !instructions}>\n {loading &&\n <CircularProgress size={\"smallest\"}/>}\n {!loading &&\n <SendIcon color={\"primary\"}/>}\n </IconButton>\n\n </div>\n\n </Menu>\n );\n}\n\nexport interface EnhanceDialogProps {\n open: boolean;\n onClose: () => void;\n selectReferences: () => void;\n loading: boolean;\n enhance: (instructions: string) => void;\n samplePrompts?: string[];\n}\n\nfunction getPromptsForExistingEntities(properties: Properties): SamplePrompt[] {\n\n const multilineProperties = Object.values(properties).filter((p: Property) => {\n if (isPropertyBuilder(p)) {\n return false;\n }\n return p.type === \"string\" && (p.ui?.markdown || p.ui?.multiline);\n });\n\n const multilinePrompt: Property | undefined = multilineProperties.length > 0\n ? multilineProperties[Math.floor(Math.random() * multilineProperties.length)] as Property\n : undefined;\n\n const prompts = [\n \"Fill the missing fields\",\n \"Translate the missing content\"\n ];\n if (multilinePrompt) {\n prompts.push(`Add 2 paragraphs to '${multilinePrompt.name}'`);\n }\n return prompts.map(p => ({\n prompt: p,\n type: \"sample\"\n }));\n}\n\nconst createLocalStorageKey = (path: string, status: EntityStatus) => {\n const statusString = status === \"new\" ? \"new\" : \"existing\";\n return `data_enhancement::${statusString}::${stripCollectionPath(path)}`;\n};\n\nconst getRecentPromptsFromStorage = (storageKey: string): SamplePrompt[] => {\n const item = localStorage.getItem(storageKey);\n return item ? JSON.parse(item).map((e: string) => ({\n prompt: e,\n type: \"recent\"\n })) : [];\n};\n\nconst addRecentPrompt = (storageKey: string, prompt: string) => {\n if (!prompt || prompt.trim().length === 0) {\n return;\n }\n const recentPrompts = getRecentPromptsFromStorage(storageKey);\n localStorage.setItem(storageKey, JSON.stringify([prompt, ...recentPrompts\n .map(e => e.prompt)\n .filter(e => e !== prompt)\n .slice(0, 5)]));\n};\n\nconst removeRecentPrompt = (storageKey: string, prompt: string) => {\n localStorage.setItem(storageKey, JSON.stringify(getRecentPromptsFromStorage(storageKey)\n .map(e => e.prompt)\n .filter(e => e !== prompt)));\n};\n","import React from \"react\";\n\nimport { EntityCollection, RebasePlugin, User } from \"@rebasepro/types\";\nimport { DataEnhancementControllerProvider } from \"./components/DataEnhancementControllerProvider\";\nimport { FormEnhanceAction } from \"./components/FormEnhanceAction\";\n\nconst DEFAULT_API_KEY = \"fcms-U9jdDii0xXWSDC34asfrf54lbkFJBfKfRWcEDEwdc4V5wDWEDF\";\n\nexport interface DataEnhancementPluginProps {\n\n apiKey?: string;\n\n /**\n * Use this function to determine if the data enhancement plugin should be enabled for a given path.\n * If this function is not provided, the plugin will be enabled for all paths.\n * If the function returns false, the plugin will be disabled for the given path.\n * You can also return a configuration object to override the default configuration.\n *\n * @param path\n * @param collection\n */\n getConfigForPath?: (props: {\n path: string,\n collection: EntityCollection,\n user: User | null\n }) => boolean;\n\n /**\n * Host to use for the data enhancement API.\n * This prop is only use in development mode.\n */\n host?: string;\n}\n\n/**\n * Use this hook to initialise the data enhancement plugin.\n * This is likely the only hook you will need to use.\n * @param props\n */\nexport function useDataEnhancementPlugin(props?: DataEnhancementPluginProps): RebasePlugin {\n\n const apiKey = props?.apiKey ?? DEFAULT_API_KEY;\n const getConfigForPath = props?.getConfigForPath;\n\n return React.useMemo(() => ({\n key: \"data_enhancement\",\n slots: [\n {\n slot: \"form.actions\",\n Component: FormEnhanceAction,\n order: 40\n }\n ],\n providers: [\n {\n scope: \"form\" as const,\n Component: DataEnhancementControllerProvider as React.ComponentType<any>,\n props: {\n apiKey,\n getConfigForPath,\n host: props?.host\n }\n }\n ]\n }), [apiKey, getConfigForPath, props?.host]);\n}\n"],"names":["flatMapEntityValues","values","path","Object","entries","flatMap","key","value","currentPath","reduce","acc","curr","DEFAULT_SERVER","enhanceDataAPIStream","props","flatValues","properties","inputEntity","entityId","request","entityName","entityDescription","propertyKey","propertyInstructions","instructions","console","debug","fetch","host","method","headers","Authorization","firebaseToken","apiKey","body","JSON","stringify","then","res","ok","error","json","reader","getReader","Error","chunk","readChunks","str","TextDecoder","decode","split","forEach","s","length","data","parse","trim","type","onUpdateDelta","partialValue","onUpdate","onEnd","e","onError","Symbol","asyncIterator","readResult","read","done","fetchEntityPromptSuggestion","input","message","prompts","map","prompt","autocompleteStream","result","textBefore","textAfter","getAppendableSuggestion","suggestion","suggestionIncludesValue","toLowerCase","startsWith","substring","indexOf","undefined","getSimplifiedProperties","property","isPropertyBuilder","fullKey","valueInPath","getValueInPath","getSimplifiedProperty","a","b","getSimpleProperty","fieldId","getFieldId","name","description","fieldConfigId","enum","getSimpleEnumValues","disabled","Boolean","ui","readOnly","of","Array","isArray","arrayParentProperty","oneOf","typeField","valueField","prop","v","i","typeKey","oneOfType","valueKey","oneOfValue","childProperty","simplifiedProperty","mapProperties","childValue","o","attachPathToKeys","keys","mapParentProperty","warn","obj","enumValues","String","id","useEditorAIController","getAuthToken","autocomplete","DataEnhancementControllerContext","React","createContext","useDataEnhancementController","useContext","getPropertyFromKey","parentKey","slice","join","DataEnhancementControllerProvider","getConfigForPath","children","collection","formContext","enabled","setEnabled","useState","suggestions","setSuggestions","loadingSuggestions","setLoadingSuggestions","enhancingInProgress","useRef","authController","useAuthController","snackbarController","useSnackbarController","useMemo","valuesRef","useEffect","current","allowReferenceDataSelection","updateConfig","useCallback","config","urlController","useUrlController","clearSuggestion","prev","_","rest","appendValueDelta","delta","currentValue","updatedValue","setFieldValue","updateSuggestedValues","currentValues","updatedValues","replaceValues","filter","p","includes","appendableValue","multiline","trimmedValue","trimEnd","endsWith","trimStart","displayNeededSubscriptionSnackbar","projectId","open","autoHideDuration","editorAIController","clearAllSuggestions","enhance","user","Promise","reject","resolvedPath","resolveDatabasePathsFrom","resolve","code","singularName","errors","catch","getSamplePrompts","dataEnhancementController","FormEnhanceAction","status","openEntityMode","largeLayout","useLargeLayout","storageKey","createLocalStorageKey","loading","setLoading","samplePrompts","setSamplePrompts","setInstructions","loadingPrompts","updateSuggestedPrompts","getPromptsForExistingEntities","recentPromptsFromStorage","getRecentPromptsFromStorage","recentPrompts","useDeferredValue","addRecentPrompt","finally","submit","jsxs","Menu","Button","jsx","AIIcon","CircularProgress","MenuItem","Separator","samplePrompt","index","IconButton","preventDefault","stopPropagation","removeRecentPrompt","XIcon","iconSize","smallest","cls","TextareaAutosize","focusedDisabled","event","shiftKey","target","small","SendIcon","multilineProperties","markdown","multilinePrompt","Math","floor","random","push","statusString","stripCollectionPath","item","localStorage","getItem","setItem","DEFAULT_API_KEY","useDataEnhancementPlugin","$","_c","t0","t1","for","slot","Component","order","t2","t3","slots","providers","scope"],"mappings":"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"}
|
|
@@ -80,14 +80,15 @@ export type AuthController<USER extends User = User, ExtraData = unknown> = {
|
|
|
80
80
|
export interface AuthControllerExtended<USER extends User = User, ExtraData = unknown> extends AuthController<USER, ExtraData> {
|
|
81
81
|
/** Login with email and password */
|
|
82
82
|
emailPasswordLogin?(email: string, password: string): Promise<void>;
|
|
83
|
-
/** Login with
|
|
84
|
-
googleLogin?: {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
83
|
+
/** Login with Google — accepts an ID token, access token, or authorization code payload */
|
|
84
|
+
googleLogin?: (payload: {
|
|
85
|
+
idToken: string;
|
|
86
|
+
} | {
|
|
87
|
+
accessToken: string;
|
|
88
|
+
} | {
|
|
89
|
+
code: string;
|
|
90
|
+
redirectUri: string;
|
|
91
|
+
}) => Promise<void>;
|
|
91
92
|
/** Register a new user */
|
|
92
93
|
register?(email: string, password: string, displayName?: string): Promise<void>;
|
|
93
94
|
/** Skip login (for anonymous access if enabled) */
|
|
@@ -52,6 +52,7 @@ export interface AdminUser {
|
|
|
52
52
|
photoURL: string | null;
|
|
53
53
|
provider: string;
|
|
54
54
|
roles: string[];
|
|
55
|
+
metadata?: Record<string, any>;
|
|
55
56
|
createdAt: string;
|
|
56
57
|
updatedAt: string;
|
|
57
58
|
}
|
|
@@ -95,6 +96,7 @@ export interface AdminAPI {
|
|
|
95
96
|
displayName?: string;
|
|
96
97
|
password?: string;
|
|
97
98
|
roles?: string[];
|
|
99
|
+
metadata?: Record<string, any>;
|
|
98
100
|
}): Promise<{
|
|
99
101
|
user: AdminUser;
|
|
100
102
|
}>;
|
|
@@ -103,6 +105,7 @@ export interface AdminAPI {
|
|
|
103
105
|
displayName?: string;
|
|
104
106
|
password?: string;
|
|
105
107
|
roles?: string[];
|
|
108
|
+
metadata?: Record<string, any>;
|
|
106
109
|
}): Promise<{
|
|
107
110
|
user: AdminUser;
|
|
108
111
|
}>;
|
|
@@ -76,6 +76,21 @@ export interface FindResponse<M extends Record<string, unknown> = Record<string,
|
|
|
76
76
|
hasMore: boolean;
|
|
77
77
|
};
|
|
78
78
|
}
|
|
79
|
+
export type FilterOperator = WhereFilterOpShort;
|
|
80
|
+
/**
|
|
81
|
+
* Fluent Query Builder Interface supported on both client and server accessors.
|
|
82
|
+
* @group Data
|
|
83
|
+
*/
|
|
84
|
+
export interface QueryBuilderInterface<M extends Record<string, unknown> = Record<string, unknown>> {
|
|
85
|
+
where(column: keyof M & string, operator: FilterOperator, value: unknown): this;
|
|
86
|
+
orderBy(column: keyof M & string, ascending?: "asc" | "desc"): this;
|
|
87
|
+
limit(count: number): this;
|
|
88
|
+
offset(count: number): this;
|
|
89
|
+
search(searchString: string): this;
|
|
90
|
+
include(...relations: string[]): this;
|
|
91
|
+
find(): Promise<FindResponse<M>>;
|
|
92
|
+
listen(onUpdate: (data: FindResponse<M>) => void, onError?: (error: Error) => void): () => void;
|
|
93
|
+
}
|
|
79
94
|
/**
|
|
80
95
|
* A single collection's CRUD accessor.
|
|
81
96
|
*
|
|
@@ -124,6 +139,12 @@ export interface CollectionAccessor<M extends Record<string, unknown> = Record<s
|
|
|
124
139
|
* Count the number of records matching the given filter.
|
|
125
140
|
*/
|
|
126
141
|
count?(params?: FindParams): Promise<number>;
|
|
142
|
+
where(column: keyof M & string, operator: FilterOperator, value: unknown): QueryBuilderInterface<M>;
|
|
143
|
+
orderBy(column: keyof M & string, ascending?: "asc" | "desc"): QueryBuilderInterface<M>;
|
|
144
|
+
limit(count: number): QueryBuilderInterface<M>;
|
|
145
|
+
offset(count: number): QueryBuilderInterface<M>;
|
|
146
|
+
search(searchString: string): QueryBuilderInterface<M>;
|
|
147
|
+
include(...relations: string[]): QueryBuilderInterface<M>;
|
|
127
148
|
}
|
|
128
149
|
/**
|
|
129
150
|
* The unified data access object.
|