@rebasepro/admin 0.0.1-canary.09e5ec5
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 +6 -0
- package/dist/CollectionEditorDialog-B2M9lCyL.js +4720 -0
- package/dist/CollectionEditorDialog-B2M9lCyL.js.map +1 -0
- package/dist/CollectionsStudioView-WG6soyfs.js +218 -0
- package/dist/CollectionsStudioView-WG6soyfs.js.map +1 -0
- package/dist/ContentHomePage-CDF_a6Lp.js +1786 -0
- package/dist/ContentHomePage-CDF_a6Lp.js.map +1 -0
- package/dist/ExportCollectionAction-Dc0VOWMN.js +439 -0
- package/dist/ExportCollectionAction-Dc0VOWMN.js.map +1 -0
- package/dist/ImportCollectionAction-DpCagAOy.js +686 -0
- package/dist/ImportCollectionAction-DpCagAOy.js.map +1 -0
- package/dist/PropertyEditView-DS67DxoT.js +8138 -0
- package/dist/PropertyEditView-DS67DxoT.js.map +1 -0
- package/dist/RoleChip-QtUFXeTp.js +67 -0
- package/dist/RoleChip-QtUFXeTp.js.map +1 -0
- package/dist/RolesView-CIuYBimF.js +424 -0
- package/dist/RolesView-CIuYBimF.js.map +1 -0
- package/dist/UsersView-B5zelXnH.js +493 -0
- package/dist/UsersView-B5zelXnH.js.map +1 -0
- package/dist/collection_editor/CollectionEditorDialogsContext.d.ts +19 -0
- package/dist/collection_editor/ConfigControllerProvider.d.ts +45 -0
- package/dist/collection_editor/_cms_internals.d.ts +29 -0
- package/dist/collection_editor/api/generateCollectionApi.d.ts +77 -0
- package/dist/collection_editor/api/index.d.ts +1 -0
- package/dist/collection_editor/index.d.ts +16 -0
- package/dist/collection_editor/pgColumnToProperty.d.ts +6 -0
- package/dist/collection_editor/types/collection_editor_controller.d.ts +56 -0
- package/dist/collection_editor/types/collection_inference.d.ts +10 -0
- package/dist/collection_editor/types/config_controller.d.ts +91 -0
- package/dist/collection_editor/types/config_permissions.d.ts +19 -0
- package/dist/collection_editor/ui/AddKanbanColumnAction.d.ts +11 -0
- package/dist/collection_editor/ui/CollectionViewHeaderAction.d.ts +10 -0
- package/dist/collection_editor/ui/EditorCollectionAction.d.ts +2 -0
- package/dist/collection_editor/ui/EditorCollectionActionStart.d.ts +2 -0
- package/dist/collection_editor/ui/EditorEntityAction.d.ts +2 -0
- package/dist/collection_editor/ui/HomePageEditorCollectionAction.d.ts +2 -0
- package/dist/collection_editor/ui/KanbanSetupAction.d.ts +10 -0
- package/dist/collection_editor/ui/MissingReferenceWidget.d.ts +3 -0
- package/dist/collection_editor/ui/NewCollectionButton.d.ts +1 -0
- package/dist/collection_editor/ui/NewCollectionCard.d.ts +2 -0
- package/dist/collection_editor/ui/PropertyAddColumnComponent.d.ts +7 -0
- package/dist/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.d.ts +36 -0
- package/dist/collection_editor/ui/collection_editor/AIModifiedPathsContext.d.ts +20 -0
- package/dist/collection_editor/ui/collection_editor/CollectionDetailsForm.d.ts +11 -0
- package/dist/collection_editor/ui/collection_editor/CollectionEditorDialog.d.ts +72 -0
- package/dist/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.d.ts +19 -0
- package/dist/collection_editor/ui/collection_editor/CollectionJsonImportDialog.d.ts +7 -0
- package/dist/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.d.ts +17 -0
- package/dist/collection_editor/ui/collection_editor/CollectionRLSTab.d.ts +12 -0
- package/dist/collection_editor/ui/collection_editor/CollectionRelationsTab.d.ts +1 -0
- package/dist/collection_editor/ui/collection_editor/CollectionStudioView.d.ts +5 -0
- package/dist/collection_editor/ui/collection_editor/CollectionYupValidation.d.ts +14 -0
- package/dist/collection_editor/ui/collection_editor/CollectionsStudioView.d.ts +5 -0
- package/dist/collection_editor/ui/collection_editor/DisplaySettingsForm.d.ts +3 -0
- package/dist/collection_editor/ui/collection_editor/EntityActionsEditTab.d.ts +5 -0
- package/dist/collection_editor/ui/collection_editor/EntityActionsSelectDialog.d.ts +4 -0
- package/dist/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.d.ts +4 -0
- package/dist/collection_editor/ui/collection_editor/EnumForm.d.ts +12 -0
- package/dist/collection_editor/ui/collection_editor/GeneralSettingsForm.d.ts +7 -0
- package/dist/collection_editor/ui/collection_editor/GetCodeDialog.d.ts +6 -0
- package/dist/collection_editor/ui/collection_editor/KanbanConfigSection.d.ts +4 -0
- package/dist/collection_editor/ui/collection_editor/LayoutModeSwitch.d.ts +5 -0
- package/dist/collection_editor/ui/collection_editor/PropertyEditView.d.ts +47 -0
- package/dist/collection_editor/ui/collection_editor/PropertyFieldPreview.d.ts +16 -0
- package/dist/collection_editor/ui/collection_editor/PropertyTree.d.ts +31 -0
- package/dist/collection_editor/ui/collection_editor/SubcollectionsEditTab.d.ts +11 -0
- package/dist/collection_editor/ui/collection_editor/SwitchControl.d.ts +8 -0
- package/dist/collection_editor/ui/collection_editor/ViewModeSwitch.d.ts +6 -0
- package/dist/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.d.ts +7 -0
- package/dist/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.d.ts +13 -0
- package/dist/collection_editor/ui/collection_editor/import/clean_import_data.d.ts +7 -0
- package/dist/collection_editor/ui/collection_editor/properties/BlockPropertyField.d.ts +7 -0
- package/dist/collection_editor/ui/collection_editor/properties/BooleanPropertyField.d.ts +3 -0
- package/dist/collection_editor/ui/collection_editor/properties/CommonPropertyFields.d.ts +10 -0
- package/dist/collection_editor/ui/collection_editor/properties/DateTimePropertyField.d.ts +3 -0
- package/dist/collection_editor/ui/collection_editor/properties/EnumPropertyField.d.ts +9 -0
- package/dist/collection_editor/ui/collection_editor/properties/KeyValuePropertyField.d.ts +3 -0
- package/dist/collection_editor/ui/collection_editor/properties/MapPropertyField.d.ts +7 -0
- package/dist/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.d.ts +4 -0
- package/dist/collection_editor/ui/collection_editor/properties/NumberPropertyField.d.ts +3 -0
- package/dist/collection_editor/ui/collection_editor/properties/ReferencePropertyField.d.ts +14 -0
- package/dist/collection_editor/ui/collection_editor/properties/RelationPropertyField.d.ts +15 -0
- package/dist/collection_editor/ui/collection_editor/properties/RepeatPropertyField.d.ts +9 -0
- package/dist/collection_editor/ui/collection_editor/properties/StoragePropertyField.d.ts +5 -0
- package/dist/collection_editor/ui/collection_editor/properties/StringPropertyField.d.ts +5 -0
- package/dist/collection_editor/ui/collection_editor/properties/UrlPropertyField.d.ts +4 -0
- package/dist/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.d.ts +3 -0
- package/dist/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.d.ts +10 -0
- package/dist/collection_editor/ui/collection_editor/properties/conditions/ConditionsPanel.d.ts +3 -0
- package/dist/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.d.ts +6 -0
- package/dist/collection_editor/ui/collection_editor/properties/conditions/index.d.ts +6 -0
- package/dist/collection_editor/ui/collection_editor/properties/conditions/property_paths.d.ts +19 -0
- package/dist/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.d.ts +5 -0
- package/dist/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.d.ts +4 -0
- package/dist/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.d.ts +3 -0
- package/dist/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.d.ts +11 -0
- package/dist/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.d.ts +3 -0
- package/dist/collection_editor/ui/collection_editor/templates/blog_template.d.ts +2 -0
- package/dist/collection_editor/ui/collection_editor/templates/pages_template.d.ts +2 -0
- package/dist/collection_editor/ui/collection_editor/templates/products_template.d.ts +2 -0
- package/dist/collection_editor/ui/collection_editor/templates/users_template.d.ts +2 -0
- package/dist/collection_editor/ui/collection_editor/util.d.ts +5 -0
- package/dist/collection_editor/ui/collection_editor/utils/strings.d.ts +1 -0
- package/dist/collection_editor/ui/collection_editor/utils/supported_fields.d.ts +3 -0
- package/dist/collection_editor/ui/collection_editor/utils/update_property_for_widget.d.ts +2 -0
- package/dist/collection_editor/useCollectionEditorController.d.ts +6 -0
- package/dist/collection_editor/useCollectionsConfigController.d.ts +6 -0
- package/dist/collection_editor/useLocalCollectionsConfigController.d.ts +6 -0
- package/dist/collection_editor/validateCollectionJson.d.ts +22 -0
- package/dist/collection_editor_ui.d.ts +8 -0
- package/dist/collection_editor_ui.js +11 -0
- package/dist/collection_editor_ui.js.map +1 -0
- package/dist/components/AdminModeSyncer.d.ts +17 -0
- package/dist/components/ArrayContainer.d.ts +58 -0
- package/dist/components/ClearFilterSortButton.d.ts +5 -0
- package/dist/components/CollectionEditorDialogs.d.ts +15 -0
- package/dist/components/DefaultAppBar.d.ts +29 -0
- package/dist/components/DefaultDrawer.d.ts +29 -0
- package/dist/components/DeleteEntityDialog.d.ts +13 -0
- package/dist/components/DrawerNavigationGroup.d.ts +49 -0
- package/dist/components/DrawerNavigationItem.d.ts +10 -0
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +39 -0
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +27 -0
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +129 -0
- package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +26 -0
- package/dist/components/EntityCollectionTable/column_utils.d.ts +16 -0
- package/dist/components/EntityCollectionTable/fields/TableMultipleRelationField.d.ts +21 -0
- package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +22 -0
- package/dist/components/EntityCollectionTable/fields/TableRelationField.d.ts +22 -0
- package/dist/components/EntityCollectionTable/fields/TableRelationSelectorField.d.ts +20 -0
- package/dist/components/EntityCollectionTable/fields/TableStorageUpload.d.ts +35 -0
- package/dist/components/EntityCollectionTable/fields/VirtualTableDateField.d.ts +12 -0
- package/dist/components/EntityCollectionTable/fields/VirtualTableInput.d.ts +9 -0
- package/dist/components/EntityCollectionTable/fields/VirtualTableNumberInput.d.ts +8 -0
- package/dist/components/EntityCollectionTable/fields/VirtualTableSelect.d.ts +15 -0
- package/dist/components/EntityCollectionTable/fields/VirtualTableSwitch.d.ts +7 -0
- package/dist/components/EntityCollectionTable/fields/VirtualTableUserSelect.d.ts +12 -0
- package/dist/components/EntityCollectionTable/index.d.ts +6 -0
- package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +21 -0
- package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +32 -0
- package/dist/components/EntityCollectionTable/internal/EntityTableCellActions.d.ts +9 -0
- package/dist/components/EntityCollectionTable/internal/common.d.ts +5 -0
- package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +27 -0
- package/dist/components/EntityCollectionTable/internal/popup_field/useDraggable.d.ts +13 -0
- package/dist/components/EntityCollectionTable/internal/popup_field/useWindowSize.d.ts +6 -0
- package/dist/components/EntityCollectionTable/table_bindings.d.ts +28 -0
- package/dist/components/EntityCollectionView/Board.d.ts +2 -0
- package/dist/components/EntityCollectionView/BoardColumn.d.ts +42 -0
- package/dist/components/EntityCollectionView/BoardColumnTitle.d.ts +9 -0
- package/dist/components/EntityCollectionView/BoardSortableList.d.ts +14 -0
- package/dist/components/EntityCollectionView/EntityBoardCard.d.ts +31 -0
- package/dist/components/EntityCollectionView/EntityCard.d.ts +20 -0
- package/dist/components/EntityCollectionView/EntityCollectionBoardView.d.ts +21 -0
- package/dist/components/EntityCollectionView/EntityCollectionCardView.d.ts +32 -0
- package/dist/components/EntityCollectionView/EntityCollectionListView.d.ts +34 -0
- package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +64 -0
- package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +18 -0
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +18 -0
- package/dist/components/EntityCollectionView/FiltersDialog.d.ts +15 -0
- package/dist/components/EntityCollectionView/SplitListView.d.ts +57 -0
- package/dist/components/EntityCollectionView/ViewModeToggle.d.ts +44 -0
- package/dist/components/EntityCollectionView/board_types.d.ts +105 -0
- package/dist/components/EntityCollectionView/hooks/useCollectionInlineEditor.d.ts +12 -0
- package/dist/components/EntityCollectionView/hooks/useKanbanDragAndDrop.d.ts +19 -0
- package/dist/components/EntityCollectionView/useBoardDataController.d.ts +61 -0
- package/dist/components/EntityCollectionView/useEntityPreviewSlots.d.ts +101 -0
- package/dist/components/EntityCollectionView/useSelectionController.d.ts +2 -0
- package/dist/components/EntityCollectionView/utils.d.ts +3 -0
- package/dist/components/EntityEditView.d.ts +49 -0
- package/dist/components/EntityEditViewFormActions.d.ts +2 -0
- package/dist/components/EntityJsonPreview.d.ts +3 -0
- package/dist/components/EntityPreview.d.ts +56 -0
- package/dist/components/EntitySidePanel.d.ts +10 -0
- package/dist/components/EntityView.d.ts +12 -0
- package/dist/components/FieldCaption.d.ts +5 -0
- package/dist/components/HomePage/ContentHomePage.d.ts +11 -0
- package/dist/components/HomePage/FavouritesView.d.ts +3 -0
- package/dist/components/HomePage/HomePageDnD.d.ts +77 -0
- package/dist/components/HomePage/NavigationCard.d.ts +11 -0
- package/dist/components/HomePage/NavigationCardBinding.d.ts +18 -0
- package/dist/components/HomePage/NavigationGroup.d.ts +11 -0
- package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
- package/dist/components/HomePage/SmallNavigationCard.d.ts +6 -0
- package/dist/components/HomePage/index.d.ts +4 -0
- package/dist/components/PropertyCollectionView.d.ts +24 -0
- package/dist/components/PropertyConfigBadge.d.ts +6 -0
- package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
- package/dist/components/RebaseAuthGate.d.ts +21 -0
- package/dist/components/RebaseCMS.d.ts +10 -0
- package/dist/components/RebaseLayout.d.ts +32 -0
- package/dist/components/RebaseNavigation.d.ts +24 -0
- package/dist/components/RebaseRouteDefs.d.ts +30 -0
- package/dist/components/RebaseShell.d.ts +25 -0
- package/dist/components/ReferenceTable/EntitySelectionTable.d.ts +59 -0
- package/dist/components/ReferenceWidget.d.ts +30 -0
- package/dist/components/RelationSelector.d.ts +32 -0
- package/dist/components/SearchIconsView.d.ts +5 -0
- package/dist/components/SelectableTable/SelectableTable.d.ts +95 -0
- package/dist/components/SelectableTable/SelectableTableContext.d.ts +4 -0
- package/dist/components/SelectableTable/SelectionStore.d.ts +26 -0
- package/dist/components/SelectableTable/filters/BooleanFilterField.d.ts +9 -0
- package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +12 -0
- package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +15 -0
- package/dist/components/SelectableTable/filters/RelationFilterField.d.ts +12 -0
- package/dist/components/SelectableTable/filters/StringNumberFilterField.d.ts +13 -0
- package/dist/components/SideDialogs.d.ts +25 -0
- package/dist/components/SideEntityProvider.d.ts +32 -0
- package/dist/components/UserSelector.d.ts +18 -0
- package/dist/components/admin/RoleChip.d.ts +4 -0
- package/dist/components/admin/RolesView.d.ts +4 -0
- package/dist/components/admin/UsersView.d.ts +4 -0
- package/dist/components/admin/index.d.ts +3 -0
- package/dist/components/app/AppBar.d.ts +12 -0
- package/dist/components/app/Drawer.d.ts +19 -0
- package/dist/components/app/Scaffold.d.ts +34 -0
- package/dist/components/app/index.d.ts +4 -0
- package/dist/components/app/useApp.d.ts +17 -0
- package/dist/components/common/default_entity_actions.d.ts +4 -0
- package/dist/components/common/index.d.ts +1 -0
- package/dist/components/field_configs.d.ts +7 -0
- package/dist/components/history/EntityHistoryEntry.d.ts +17 -0
- package/dist/components/history/EntityHistoryView.d.ts +6 -0
- package/dist/components/history/LastEditedByFormAction.d.ts +6 -0
- package/dist/components/history/LastEditedByIndicator.d.ts +10 -0
- package/dist/components/history/UserChip.d.ts +4 -0
- package/dist/components/history/index.d.ts +5 -0
- package/dist/components/index.d.ts +38 -0
- package/dist/contexts/BreacrumbsContext.d.ts +8 -0
- package/dist/contexts/SideDialogsControllerContext.d.ts +3 -0
- package/dist/contexts/SideEntityControllerContext.d.ts +3 -0
- package/dist/data_export/export/BasicExportAction.d.ts +7 -0
- package/dist/data_export/export/ExportCollectionAction.d.ts +11 -0
- package/dist/data_export/export/export.d.ts +22 -0
- package/dist/data_export/export/index.d.ts +3 -0
- package/dist/data_export/index.d.ts +1 -0
- package/dist/data_import/components/DataNewPropertiesMapping.d.ts +13 -0
- package/dist/data_import/components/ImportFileUpload.d.ts +3 -0
- package/dist/data_import/components/ImportNewPropertyFieldPreview.d.ts +9 -0
- package/dist/data_import/components/ImportSaveInProgress.d.ts +8 -0
- package/dist/data_import/components/index.d.ts +4 -0
- package/dist/data_import/hooks/index.d.ts +1 -0
- package/dist/data_import/hooks/useImportConfig.d.ts +2 -0
- package/dist/data_import/import/ImportCollectionAction.d.ts +15 -0
- package/dist/data_import/import/index.d.ts +1 -0
- package/dist/data_import/index.d.ts +5 -0
- package/dist/data_import/types/column_mapping.d.ts +20 -0
- package/dist/data_import/types/index.d.ts +1 -0
- package/dist/data_import/utils/data.d.ts +4 -0
- package/dist/data_import/utils/file_headers.d.ts +1 -0
- package/dist/data_import/utils/file_to_json.d.ts +16 -0
- package/dist/data_import/utils/get_import_inference_type.d.ts +2 -0
- package/dist/data_import/utils/get_properties_mapping.d.ts +1 -0
- package/dist/data_import/utils/index.d.ts +3 -0
- package/dist/editor/components/SlashCommandMenu.d.ts +6 -0
- package/dist/editor/components/editor-bubble-item.d.ts +8 -0
- package/dist/editor/components/editor-bubble.d.ts +8 -0
- package/dist/editor/components/image-bubble.d.ts +5 -0
- package/dist/editor/components/index.d.ts +16 -0
- package/dist/editor/components/table-bubble.d.ts +5 -0
- package/dist/editor/editor.d.ts +30 -0
- package/dist/editor/extensions/HighlightDecorationExtension.d.ts +24 -0
- package/dist/editor/extensions/Image/index.d.ts +6 -0
- package/dist/editor/extensions/Image.d.ts +6 -0
- package/dist/editor/extensions/TextLoadingDecorationExtension.d.ts +16 -0
- package/dist/editor/extensions/clipboard.d.ts +7 -0
- package/dist/editor/extensions/custom-keymap.d.ts +1 -0
- package/dist/editor/extensions/drag-and-drop.d.ts +9 -0
- package/dist/editor/hooks/useProseMirror.d.ts +13 -0
- package/dist/editor/hooks/useProseMirrorContext.d.ts +9 -0
- package/dist/editor/index.d.ts +2 -0
- package/dist/editor/markdown.d.ts +5 -0
- package/dist/editor/nodeViews/ImageComponent.d.ts +3 -0
- package/dist/editor/nodeViews/ReactNodeView.d.ts +29 -0
- package/dist/editor/nodeViews/TaskItemComponent.d.ts +3 -0
- package/dist/editor/nodeViews/index.d.ts +6 -0
- package/dist/editor/plugins/index.d.ts +2 -0
- package/dist/editor/plugins/inputrules.d.ts +6 -0
- package/dist/editor/plugins/placeholderPlugin.d.ts +3 -0
- package/dist/editor/plugins/slashCommandPlugin.d.ts +12 -0
- package/dist/editor/schema.d.ts +2 -0
- package/dist/editor/selectors/ai-selector.d.ts +0 -0
- package/dist/editor/selectors/color-selector.d.ts +10 -0
- package/dist/editor/selectors/link-selector.d.ts +8 -0
- package/dist/editor/selectors/node-selector.d.ts +15 -0
- package/dist/editor/selectors/text-buttons.d.ts +1 -0
- package/dist/editor/types.d.ts +5 -0
- package/dist/editor/useProseMirror.d.ts +16 -0
- package/dist/editor/utils/prosemirror-utils.d.ts +7 -0
- package/dist/editor/utils/remove_classes.d.ts +1 -0
- package/dist/editor/utils/useDebouncedCallback.d.ts +1 -0
- package/dist/editor.js +3834 -0
- package/dist/editor.js.map +1 -0
- package/dist/form/EntityForm.d.ts +10 -0
- package/dist/form/EntityFormActions.d.ts +2 -0
- package/dist/form/PropertyFieldBinding.d.ts +30 -0
- package/dist/form/components/ErrorFocus.d.ts +4 -0
- package/dist/form/components/FieldHelperText.d.ts +12 -0
- package/dist/form/components/FormEntry.d.ts +6 -0
- package/dist/form/components/FormLayout.d.ts +5 -0
- package/dist/form/components/LabelWithIcon.d.ts +14 -0
- package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
- package/dist/form/components/LocalChangesMenu.d.ts +11 -0
- package/dist/form/components/StorageItemPreview.d.ts +14 -0
- package/dist/form/components/StorageUploadProgress.d.ts +10 -0
- package/dist/form/components/index.d.ts +5 -0
- package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +10 -0
- package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +13 -0
- package/dist/form/field_bindings/BlockFieldBinding.d.ts +11 -0
- package/dist/form/field_bindings/DateTimeFieldBinding.d.ts +12 -0
- package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +8 -0
- package/dist/form/field_bindings/MapFieldBinding.d.ts +10 -0
- package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +12 -0
- package/dist/form/field_bindings/MultiSelectFieldBinding.d.ts +10 -0
- package/dist/form/field_bindings/MultipleRelationFieldBinding.d.ts +10 -0
- package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +11 -0
- package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +10 -0
- package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +10 -0
- package/dist/form/field_bindings/RelationFieldBinding.d.ts +3 -0
- package/dist/form/field_bindings/RepeatFieldBinding.d.ts +11 -0
- package/dist/form/field_bindings/SelectFieldBinding.d.ts +11 -0
- package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +21 -0
- package/dist/form/field_bindings/SwitchFieldBinding.d.ts +10 -0
- package/dist/form/field_bindings/TextFieldBinding.d.ts +9 -0
- package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +14 -0
- package/dist/form/index.d.ts +20 -0
- package/dist/form/useClearRestoreValue.d.ts +13 -0
- package/dist/form/validation.d.ts +21 -0
- package/dist/hooks/index.d.ts +15 -0
- package/dist/hooks/navigation/contexts/CollectionRegistryContext.d.ts +5 -0
- package/dist/hooks/navigation/contexts/NavigationStateContext.d.ts +4 -0
- package/dist/hooks/navigation/contexts/UrlContext.d.ts +4 -0
- package/dist/hooks/navigation/contexts/index.d.ts +3 -0
- package/dist/hooks/navigation/useBuildCollectionRegistryController.d.ts +7 -0
- package/dist/hooks/navigation/useBuildNavigationStateController.d.ts +34 -0
- package/dist/hooks/navigation/useBuildUrlController.d.ts +7 -0
- package/dist/hooks/navigation/useNavigationRegistry.d.ts +11 -0
- package/dist/hooks/navigation/useNavigationResolution.d.ts +7 -0
- package/dist/hooks/navigation/useNavigationURLs.d.ts +11 -0
- package/dist/hooks/navigation/useResolvedCollections.d.ts +28 -0
- package/dist/hooks/navigation/useResolvedViews.d.ts +29 -0
- package/dist/hooks/navigation/useTopLevelNavigation.d.ts +27 -0
- package/dist/hooks/navigation/utils.d.ts +12 -0
- package/dist/hooks/useBreadcrumbsController.d.ts +42 -0
- package/dist/hooks/useBuildSideDialogsController.d.ts +2 -0
- package/dist/hooks/useBuildSideEntityController.d.ts +6 -0
- package/dist/hooks/useCMSContext.d.ts +27 -0
- package/dist/hooks/useEntityHistory.d.ts +30 -0
- package/dist/hooks/useEntitySelectionDialog.d.ts +18 -0
- package/dist/hooks/useResolvedNavigationFrom.d.ts +73 -0
- package/dist/hooks/useSideDialogsController.d.ts +19 -0
- package/dist/hooks/useSideEntityController.d.ts +11 -0
- package/dist/index-CBhrgpR7.js +12 -0
- package/dist/index-CBhrgpR7.js.map +1 -0
- package/dist/index-CHxgwt6E.js +456 -0
- package/dist/index-CHxgwt6E.js.map +1 -0
- package/dist/index-Dey5WJpO.js +8 -0
- package/dist/index-Dey5WJpO.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +799 -0
- package/dist/index.js.map +1 -0
- package/dist/markdown-z2Ir7Cgo.js +618 -0
- package/dist/markdown-z2Ir7Cgo.js.map +1 -0
- package/dist/preview/PropertyPreview.d.ts +7 -0
- package/dist/preview/components/ArrayEnumPreview.d.ts +11 -0
- package/dist/preview/components/BooleanPreview.d.ts +11 -0
- package/dist/preview/components/DatePreview.d.ts +17 -0
- package/dist/preview/components/EmptyValue.d.ts +6 -0
- package/dist/preview/components/EnumValuesChip.d.ts +13 -0
- package/dist/preview/components/ImagePreview.d.ts +16 -0
- package/dist/preview/components/ReferencePreview.d.ts +17 -0
- package/dist/preview/components/RelationPreview.d.ts +17 -0
- package/dist/preview/components/StorageThumbnail.d.ts +15 -0
- package/dist/preview/components/UrlComponentPreview.d.ts +14 -0
- package/dist/preview/components/UserPreview.d.ts +9 -0
- package/dist/preview/index.d.ts +23 -0
- package/dist/preview/property_previews/ArrayOfMapsPreview.d.ts +6 -0
- package/dist/preview/property_previews/ArrayOfReferencesPreview.d.ts +6 -0
- package/dist/preview/property_previews/ArrayOfRelationsPreview.d.ts +6 -0
- package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +6 -0
- package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +6 -0
- package/dist/preview/property_previews/ArrayOneOfPreview.d.ts +6 -0
- package/dist/preview/property_previews/ArrayPropertyEnumPreview.d.ts +6 -0
- package/dist/preview/property_previews/ArrayPropertyPreview.d.ts +6 -0
- package/dist/preview/property_previews/MapPropertyPreview.d.ts +9 -0
- package/dist/preview/property_previews/NumberPropertyPreview.d.ts +7 -0
- package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +14 -0
- package/dist/preview/property_previews/StringPropertyPreview.d.ts +7 -0
- package/dist/preview/util.d.ts +7 -0
- package/dist/routes/CustomViewRoute.d.ts +4 -0
- package/dist/routes/RebaseRoute.d.ts +1 -0
- package/dist/routes/index.d.ts +2 -0
- package/dist/types/components/EntityFormActionsProps.d.ts +19 -0
- package/dist/types/components/EntityFormProps.d.ts +48 -0
- package/dist/types/components/PropertyPreviewProps.d.ts +47 -0
- package/dist/types/components/formex.d.ts +40 -0
- package/dist/types/components/index.d.ts +3 -0
- package/dist/types/fields.d.ts +221 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/useEntityHistory-Dcj4zhGj.js +121 -0
- package/dist/useEntityHistory-Dcj4zhGj.js.map +1 -0
- package/dist/util/entity_actions.d.ts +2 -0
- package/dist/util/index.d.ts +5 -0
- package/dist/util/navigation_utils.d.ts +17 -0
- package/dist/util/previews.d.ts +4 -0
- package/dist/util/property_utils.d.ts +25 -0
- package/dist/util/resolutions.d.ts +9 -0
- package/dist/util-BQ82ySL3.js +27720 -0
- package/dist/util-BQ82ySL3.js.map +1 -0
- package/package.json +171 -0
- package/src/collection_editor/CollectionEditorDialogsContext.tsx +25 -0
- package/src/collection_editor/ConfigControllerProvider.tsx +407 -0
- package/src/collection_editor/_cms_internals.ts +41 -0
- package/src/collection_editor/api/generateCollectionApi.ts +125 -0
- package/src/collection_editor/api/index.ts +1 -0
- package/src/collection_editor/index.ts +63 -0
- package/src/collection_editor/pgColumnToProperty.ts +273 -0
- package/src/collection_editor/types/collection_editor_controller.tsx +64 -0
- package/src/collection_editor/types/collection_inference.ts +17 -0
- package/src/collection_editor/types/config_controller.tsx +109 -0
- package/src/collection_editor/types/config_permissions.ts +20 -0
- package/src/collection_editor/ui/AddKanbanColumnAction.tsx +186 -0
- package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +50 -0
- package/src/collection_editor/ui/EditorCollectionAction.tsx +58 -0
- package/src/collection_editor/ui/EditorCollectionActionStart.tsx +93 -0
- package/src/collection_editor/ui/EditorEntityAction.tsx +54 -0
- package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +120 -0
- package/src/collection_editor/ui/KanbanSetupAction.tsx +40 -0
- package/src/collection_editor/ui/MissingReferenceWidget.tsx +33 -0
- package/src/collection_editor/ui/NewCollectionButton.tsx +27 -0
- package/src/collection_editor/ui/NewCollectionCard.tsx +53 -0
- package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +53 -0
- package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +246 -0
- package/src/collection_editor/ui/collection_editor/AIModifiedPathsContext.tsx +90 -0
- package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +417 -0
- package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +977 -0
- package/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx +286 -0
- package/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx +164 -0
- package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +589 -0
- package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +332 -0
- package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +242 -0
- package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +101 -0
- package/src/collection_editor/ui/collection_editor/CollectionYupValidation.tsx +9 -0
- package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +133 -0
- package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +302 -0
- package/src/collection_editor/ui/collection_editor/EntityActionsEditTab.tsx +151 -0
- package/src/collection_editor/ui/collection_editor/EntityActionsSelectDialog.tsx +40 -0
- package/src/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.tsx +39 -0
- package/src/collection_editor/ui/collection_editor/EnumForm.tsx +358 -0
- package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +252 -0
- package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +142 -0
- package/src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx +194 -0
- package/src/collection_editor/ui/collection_editor/LayoutModeSwitch.tsx +41 -0
- package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +777 -0
- package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +155 -0
- package/src/collection_editor/ui/collection_editor/PropertyTree.tsx +350 -0
- package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +241 -0
- package/src/collection_editor/ui/collection_editor/SwitchControl.tsx +39 -0
- package/src/collection_editor/ui/collection_editor/ViewModeSwitch.tsx +47 -0
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx +67 -0
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx +295 -0
- package/src/collection_editor/ui/collection_editor/import/clean_import_data.ts +57 -0
- package/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx +147 -0
- package/src/collection_editor/ui/collection_editor/properties/BooleanPropertyField.tsx +41 -0
- package/src/collection_editor/ui/collection_editor/properties/CommonPropertyFields.tsx +113 -0
- package/src/collection_editor/ui/collection_editor/properties/DateTimePropertyField.tsx +250 -0
- package/src/collection_editor/ui/collection_editor/properties/EnumPropertyField.tsx +125 -0
- package/src/collection_editor/ui/collection_editor/properties/KeyValuePropertyField.tsx +20 -0
- package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +153 -0
- package/src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.tsx +210 -0
- package/src/collection_editor/ui/collection_editor/properties/NumberPropertyField.tsx +117 -0
- package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +163 -0
- package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +346 -0
- package/src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.tsx +106 -0
- package/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx +360 -0
- package/src/collection_editor/ui/collection_editor/properties/StringPropertyField.tsx +148 -0
- package/src/collection_editor/ui/collection_editor/properties/UrlPropertyField.tsx +90 -0
- package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +47 -0
- package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.tsx +915 -0
- package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsPanel.tsx +29 -0
- package/src/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.tsx +614 -0
- package/src/collection_editor/ui/collection_editor/properties/conditions/index.ts +6 -0
- package/src/collection_editor/ui/collection_editor/properties/conditions/property_paths.ts +93 -0
- package/src/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx +52 -0
- package/src/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx +63 -0
- package/src/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx +117 -0
- package/src/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.tsx +154 -0
- package/src/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.tsx +29 -0
- package/src/collection_editor/ui/collection_editor/templates/blog_template.ts +112 -0
- package/src/collection_editor/ui/collection_editor/templates/pages_template.ts +183 -0
- package/src/collection_editor/ui/collection_editor/templates/products_template.ts +88 -0
- package/src/collection_editor/ui/collection_editor/templates/users_template.ts +42 -0
- package/src/collection_editor/ui/collection_editor/util.ts +28 -0
- package/src/collection_editor/ui/collection_editor/utils/strings.ts +1 -0
- package/src/collection_editor/ui/collection_editor/utils/supported_fields.tsx +34 -0
- package/src/collection_editor/ui/collection_editor/utils/update_property_for_widget.ts +281 -0
- package/src/collection_editor/useCollectionEditorController.tsx +9 -0
- package/src/collection_editor/useCollectionsConfigController.tsx +9 -0
- package/src/collection_editor/useLocalCollectionsConfigController.tsx +120 -0
- package/src/collection_editor/validateCollectionJson.ts +379 -0
- package/src/collection_editor_ui.ts +15 -0
- package/src/components/AdminModeSyncer.tsx +56 -0
- package/src/components/ArrayContainer.tsx +538 -0
- package/src/components/ClearFilterSortButton.tsx +48 -0
- package/src/components/CollectionEditorDialogs.tsx +68 -0
- package/src/components/DefaultAppBar.tsx +242 -0
- package/src/components/DefaultDrawer.tsx +347 -0
- package/src/components/DeleteEntityDialog.tsx +182 -0
- package/src/components/DrawerNavigationGroup.tsx +130 -0
- package/src/components/DrawerNavigationItem.tsx +65 -0
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +233 -0
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +385 -0
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +171 -0
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +340 -0
- package/src/components/EntityCollectionTable/column_utils.tsx +75 -0
- package/src/components/EntityCollectionTable/fields/TableMultipleRelationField.tsx +130 -0
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +172 -0
- package/src/components/EntityCollectionTable/fields/TableRelationField.tsx +181 -0
- package/src/components/EntityCollectionTable/fields/TableRelationSelectorField.tsx +42 -0
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +322 -0
- package/src/components/EntityCollectionTable/fields/VirtualTableDateField.tsx +39 -0
- package/src/components/EntityCollectionTable/fields/VirtualTableInput.tsx +90 -0
- package/src/components/EntityCollectionTable/fields/VirtualTableNumberInput.tsx +80 -0
- package/src/components/EntityCollectionTable/fields/VirtualTableSelect.tsx +133 -0
- package/src/components/EntityCollectionTable/fields/VirtualTableSwitch.tsx +32 -0
- package/src/components/EntityCollectionTable/fields/VirtualTableUserSelect.tsx +41 -0
- package/src/components/EntityCollectionTable/index.tsx +14 -0
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +102 -0
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +310 -0
- package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +81 -0
- package/src/components/EntityCollectionTable/internal/common.tsx +73 -0
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +418 -0
- package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +96 -0
- package/src/components/EntityCollectionTable/internal/popup_field/useWindowSize.tsx +22 -0
- package/src/components/EntityCollectionTable/table_bindings.tsx +346 -0
- package/src/components/EntityCollectionView/Board.tsx +474 -0
- package/src/components/EntityCollectionView/BoardColumn.tsx +158 -0
- package/src/components/EntityCollectionView/BoardColumnTitle.tsx +45 -0
- package/src/components/EntityCollectionView/BoardSortableList.tsx +177 -0
- package/src/components/EntityCollectionView/EntityBoardCard.tsx +264 -0
- package/src/components/EntityCollectionView/EntityCard.tsx +224 -0
- package/src/components/EntityCollectionView/EntityCollectionBoardView.tsx +614 -0
- package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +267 -0
- package/src/components/EntityCollectionView/EntityCollectionListView.tsx +816 -0
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +1277 -0
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +179 -0
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +148 -0
- package/src/components/EntityCollectionView/FiltersDialog.tsx +242 -0
- package/src/components/EntityCollectionView/SplitListView.tsx +314 -0
- package/src/components/EntityCollectionView/ViewModeToggle.tsx +199 -0
- package/src/components/EntityCollectionView/board_types.ts +113 -0
- package/src/components/EntityCollectionView/hooks/useCollectionInlineEditor.ts +79 -0
- package/src/components/EntityCollectionView/hooks/useKanbanDragAndDrop.ts +140 -0
- package/src/components/EntityCollectionView/useBoardDataController.tsx +675 -0
- package/src/components/EntityCollectionView/useEntityPreviewSlots.ts +442 -0
- package/src/components/EntityCollectionView/useSelectionController.tsx +39 -0
- package/src/components/EntityCollectionView/utils.ts +19 -0
- package/src/components/EntityEditView.tsx +632 -0
- package/src/components/EntityEditViewFormActions.tsx +352 -0
- package/src/components/EntityJsonPreview.tsx +66 -0
- package/src/components/EntityPreview.tsx +372 -0
- package/src/components/EntitySidePanel.tsx +160 -0
- package/src/components/EntityView.tsx +69 -0
- package/src/components/FieldCaption.tsx +14 -0
- package/src/components/HomePage/ContentHomePage.tsx +567 -0
- package/src/components/HomePage/FavouritesView.tsx +61 -0
- package/src/components/HomePage/HomePageDnD.tsx +703 -0
- package/src/components/HomePage/NavigationCard.tsx +88 -0
- package/src/components/HomePage/NavigationCardBinding.tsx +108 -0
- package/src/components/HomePage/NavigationGroup.tsx +157 -0
- package/src/components/HomePage/RenameGroupDialog.tsx +123 -0
- package/src/components/HomePage/SmallNavigationCard.tsx +46 -0
- package/src/components/HomePage/index.tsx +5 -0
- package/src/components/PropertyCollectionView.tsx +335 -0
- package/src/components/PropertyConfigBadge.tsx +27 -0
- package/src/components/PropertyIdCopyTooltip.tsx +48 -0
- package/src/components/RebaseAuthGate.tsx +42 -0
- package/src/components/RebaseCMS.tsx +27 -0
- package/src/components/RebaseLayout.tsx +73 -0
- package/src/components/RebaseNavigation.tsx +230 -0
- package/src/components/RebaseRouteDefs.tsx +130 -0
- package/src/components/RebaseShell.tsx +70 -0
- package/src/components/ReferenceTable/EntitySelectionTable.tsx +363 -0
- package/src/components/ReferenceWidget.tsx +155 -0
- package/src/components/RelationSelector.tsx +672 -0
- package/src/components/SearchIconsView.tsx +96 -0
- package/src/components/SelectableTable/SelectableTable.tsx +356 -0
- package/src/components/SelectableTable/SelectableTableContext.tsx +6 -0
- package/src/components/SelectableTable/SelectionStore.ts +67 -0
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +51 -0
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +125 -0
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +208 -0
- package/src/components/SelectableTable/filters/RelationFilterField.tsx +138 -0
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +221 -0
- package/src/components/SideDialogs.tsx +208 -0
- package/src/components/SideEntityProvider.tsx +76 -0
- package/src/components/UserSelector.tsx +339 -0
- package/src/components/admin/RoleChip.tsx +23 -0
- package/src/components/admin/RolesView.tsx +419 -0
- package/src/components/admin/UsersView.tsx +782 -0
- package/src/components/admin/index.ts +3 -0
- package/src/components/app/AppBar.tsx +17 -0
- package/src/components/app/Drawer.tsx +30 -0
- package/src/components/app/Scaffold.tsx +242 -0
- package/src/components/app/index.ts +4 -0
- package/src/components/app/useApp.tsx +36 -0
- package/src/components/common/default_entity_actions.tsx +156 -0
- package/src/components/common/index.ts +1 -0
- package/src/components/field_configs.tsx +423 -0
- package/src/components/history/EntityHistoryEntry.tsx +182 -0
- package/src/components/history/EntityHistoryView.tsx +191 -0
- package/src/components/history/LastEditedByFormAction.tsx +24 -0
- package/src/components/history/LastEditedByIndicator.tsx +98 -0
- package/src/components/history/UserChip.tsx +15 -0
- package/src/components/history/index.tsx +5 -0
- package/src/components/index.ts +55 -0
- package/src/contexts/BreacrumbsContext.tsx +53 -0
- package/src/contexts/SideDialogsControllerContext.tsx +5 -0
- package/src/contexts/SideEntityControllerContext.tsx +5 -0
- package/src/data_export/export/BasicExportAction.tsx +143 -0
- package/src/data_export/export/ExportCollectionAction.tsx +266 -0
- package/src/data_export/export/export.ts +248 -0
- package/src/data_export/export/index.ts +3 -0
- package/src/data_export/index.ts +1 -0
- package/src/data_import/components/DataNewPropertiesMapping.tsx +231 -0
- package/src/data_import/components/ImportFileUpload.tsx +43 -0
- package/src/data_import/components/ImportNewPropertyFieldPreview.tsx +60 -0
- package/src/data_import/components/ImportSaveInProgress.tsx +121 -0
- package/src/data_import/components/index.ts +4 -0
- package/src/data_import/hooks/index.ts +1 -0
- package/src/data_import/hooks/useImportConfig.tsx +34 -0
- package/src/data_import/import/ImportCollectionAction.tsx +436 -0
- package/src/data_import/import/index.ts +1 -0
- package/src/data_import/index.ts +5 -0
- package/src/data_import/types/column_mapping.ts +32 -0
- package/src/data_import/types/index.ts +1 -0
- package/src/data_import/utils/data.ts +148 -0
- package/src/data_import/utils/file_headers.ts +90 -0
- package/src/data_import/utils/file_to_json.ts +106 -0
- package/src/data_import/utils/get_import_inference_type.ts +27 -0
- package/src/data_import/utils/get_properties_mapping.ts +67 -0
- package/src/data_import/utils/index.ts +3 -0
- package/src/editor/components/SlashCommandMenu.tsx +517 -0
- package/src/editor/components/editor-bubble-item.tsx +32 -0
- package/src/editor/components/editor-bubble.tsx +120 -0
- package/src/editor/components/image-bubble.tsx +165 -0
- package/src/editor/components/index.ts +14 -0
- package/src/editor/components/table-bubble.tsx +171 -0
- package/src/editor/editor.tsx +510 -0
- package/src/editor/extensions/HighlightDecorationExtension.ts +114 -0
- package/src/editor/extensions/Image/index.ts +133 -0
- package/src/editor/extensions/Image.ts +159 -0
- package/src/editor/extensions/TextLoadingDecorationExtension.tsx +107 -0
- package/src/editor/extensions/clipboard.ts +72 -0
- package/src/editor/extensions/custom-keymap.ts +25 -0
- package/src/editor/extensions/drag-and-drop.tsx +508 -0
- package/src/editor/hooks/useProseMirror.ts +126 -0
- package/src/editor/hooks/useProseMirrorContext.ts +15 -0
- package/src/editor/index.ts +2 -0
- package/src/editor/markdown.ts +205 -0
- package/src/editor/nodeViews/ImageComponent.tsx +20 -0
- package/src/editor/nodeViews/ReactNodeView.tsx +89 -0
- package/src/editor/nodeViews/TaskItemComponent.tsx +29 -0
- package/src/editor/nodeViews/index.ts +35 -0
- package/src/editor/plugins/index.ts +58 -0
- package/src/editor/plugins/inputrules.ts +82 -0
- package/src/editor/plugins/placeholderPlugin.ts +55 -0
- package/src/editor/plugins/slashCommandPlugin.ts +65 -0
- package/src/editor/schema.ts +263 -0
- package/src/editor/selectors/ai-selector.tsx +111 -0
- package/src/editor/selectors/color-selector.tsx +200 -0
- package/src/editor/selectors/link-selector.tsx +119 -0
- package/src/editor/selectors/node-selector.tsx +145 -0
- package/src/editor/selectors/text-buttons.tsx +80 -0
- package/src/editor/types.ts +6 -0
- package/src/editor/useProseMirror.ts +125 -0
- package/src/editor/utils/prosemirror-utils.ts +113 -0
- package/src/editor/utils/remove_classes.ts +17 -0
- package/src/editor/utils/useDebouncedCallback.ts +25 -0
- package/src/form/EntityForm.tsx +855 -0
- package/src/form/EntityFormActions.tsx +214 -0
- package/src/form/PropertyFieldBinding.tsx +344 -0
- package/src/form/components/ErrorFocus.tsx +44 -0
- package/src/form/components/FieldHelperText.tsx +85 -0
- package/src/form/components/FormEntry.tsx +22 -0
- package/src/form/components/FormLayout.tsx +16 -0
- package/src/form/components/LabelWithIcon.tsx +43 -0
- package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
- package/src/form/components/LocalChangesMenu.tsx +132 -0
- package/src/form/components/StorageItemPreview.tsx +82 -0
- package/src/form/components/StorageUploadProgress.tsx +105 -0
- package/src/form/components/index.tsx +5 -0
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +107 -0
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +171 -0
- package/src/form/field_bindings/BlockFieldBinding.tsx +280 -0
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +72 -0
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +554 -0
- package/src/form/field_bindings/MapFieldBinding.tsx +162 -0
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +232 -0
- package/src/form/field_bindings/MultiSelectFieldBinding.tsx +123 -0
- package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +157 -0
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +66 -0
- package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +141 -0
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +141 -0
- package/src/form/field_bindings/RelationFieldBinding.tsx +184 -0
- package/src/form/field_bindings/RepeatFieldBinding.tsx +139 -0
- package/src/form/field_bindings/SelectFieldBinding.tsx +110 -0
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +493 -0
- package/src/form/field_bindings/SwitchFieldBinding.tsx +65 -0
- package/src/form/field_bindings/TextFieldBinding.tsx +156 -0
- package/src/form/field_bindings/UserSelectFieldBinding.tsx +66 -0
- package/src/form/index.tsx +27 -0
- package/src/form/useClearRestoreValue.tsx +36 -0
- package/src/form/validation.ts +519 -0
- package/src/hooks/index.ts +15 -0
- package/src/hooks/navigation/contexts/CollectionRegistryContext.tsx +20 -0
- package/src/hooks/navigation/contexts/NavigationStateContext.tsx +16 -0
- package/src/hooks/navigation/contexts/UrlContext.tsx +25 -0
- package/src/hooks/navigation/contexts/index.ts +14 -0
- package/src/hooks/navigation/useBuildCollectionRegistryController.tsx +171 -0
- package/src/hooks/navigation/useBuildNavigationStateController.tsx +133 -0
- package/src/hooks/navigation/useBuildUrlController.tsx +66 -0
- package/src/hooks/navigation/useNavigationRegistry.ts +153 -0
- package/src/hooks/navigation/useNavigationResolution.ts +91 -0
- package/src/hooks/navigation/useNavigationURLs.ts +56 -0
- package/src/hooks/navigation/useResolvedCollections.ts +133 -0
- package/src/hooks/navigation/useResolvedViews.tsx +216 -0
- package/src/hooks/navigation/useTopLevelNavigation.ts +257 -0
- package/src/hooks/navigation/utils.ts +176 -0
- package/src/hooks/useBreadcrumbsController.tsx +49 -0
- package/src/hooks/useBuildSideDialogsController.tsx +145 -0
- package/src/hooks/useBuildSideEntityController.tsx +310 -0
- package/src/hooks/useCMSContext.tsx +79 -0
- package/src/hooks/useEntityHistory.ts +167 -0
- package/src/hooks/useEntitySelectionDialog.tsx +57 -0
- package/src/hooks/useResolvedNavigationFrom.tsx +160 -0
- package/src/hooks/useSideDialogsController.tsx +25 -0
- package/src/hooks/useSideEntityController.tsx +13 -0
- package/src/index.ts +95 -0
- package/src/preview/PropertyPreview.tsx +292 -0
- package/src/preview/components/ArrayEnumPreview.tsx +39 -0
- package/src/preview/components/BooleanPreview.tsx +25 -0
- package/src/preview/components/DatePreview.tsx +93 -0
- package/src/preview/components/EmptyValue.tsx +10 -0
- package/src/preview/components/EnumValuesChip.tsx +39 -0
- package/src/preview/components/ImagePreview.tsx +143 -0
- package/src/preview/components/ReferencePreview.tsx +166 -0
- package/src/preview/components/RelationPreview.tsx +160 -0
- package/src/preview/components/StorageThumbnail.tsx +90 -0
- package/src/preview/components/UrlComponentPreview.tsx +115 -0
- package/src/preview/components/UserPreview.tsx +30 -0
- package/src/preview/index.ts +25 -0
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +73 -0
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +44 -0
- package/src/preview/property_previews/ArrayOfRelationsPreview.tsx +50 -0
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +49 -0
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +44 -0
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +72 -0
- package/src/preview/property_previews/ArrayPropertyEnumPreview.tsx +35 -0
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +70 -0
- package/src/preview/property_previews/MapPropertyPreview.tsx +146 -0
- package/src/preview/property_previews/NumberPropertyPreview.tsx +29 -0
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +277 -0
- package/src/preview/property_previews/StringPropertyPreview.tsx +59 -0
- package/src/preview/util.ts +30 -0
- package/src/routes/CustomViewRoute.tsx +24 -0
- package/src/routes/RebaseRoute.tsx +344 -0
- package/src/routes/index.ts +2 -0
- package/src/types/components/EntityFormActionsProps.tsx +20 -0
- package/src/types/components/EntityFormProps.tsx +54 -0
- package/src/types/components/PropertyPreviewProps.tsx +59 -0
- package/src/types/components/formex.tsx +46 -0
- package/src/types/components/index.ts +3 -0
- package/src/types/fields.tsx +299 -0
- package/src/types/index.ts +4 -0
- package/src/util/entity_actions.ts +28 -0
- package/src/util/index.ts +5 -0
- package/src/util/navigation_utils.ts +69 -0
- package/src/util/previews.ts +50 -0
- package/src/util/property_utils.tsx +215 -0
- package/src/util/resolutions.ts +71 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor.js","sources":["../src/editor/hooks/useProseMirrorContext.ts","../src/editor/components/editor-bubble.tsx","../src/editor/components/editor-bubble-item.tsx","../src/editor/plugins/slashCommandPlugin.ts","../src/editor/extensions/Image.ts","../src/editor/extensions/TextLoadingDecorationExtension.tsx","../src/editor/components/SlashCommandMenu.tsx","../src/editor/components/image-bubble.tsx","../src/editor/components/table-bubble.tsx","../src/editor/utils/prosemirror-utils.ts","../src/editor/selectors/node-selector.tsx","../src/editor/selectors/link-selector.tsx","../src/editor/selectors/text-buttons.tsx","../src/editor/utils/remove_classes.ts","../src/editor/extensions/clipboard.ts","../src/editor/extensions/drag-and-drop.tsx","../src/editor/extensions/HighlightDecorationExtension.ts","../src/editor/plugins/inputrules.ts","../src/editor/plugins/placeholderPlugin.ts","../src/editor/plugins/index.ts","../src/editor/nodeViews/ReactNodeView.tsx","../src/editor/nodeViews/TaskItemComponent.tsx","../src/editor/nodeViews/ImageComponent.tsx","../src/editor/nodeViews/index.ts","../src/editor/hooks/useProseMirror.ts","../src/editor/editor.tsx"],"sourcesContent":["import React, { createContext, useContext } from \"react\";\nimport { EditorState } from \"prosemirror-state\";\nimport { EditorView } from \"prosemirror-view\";\n\nexport interface ProseMirrorContextType {\n state: EditorState | null;\n view: EditorView | null;\n}\n\nexport const ProseMirrorContext = createContext<ProseMirrorContextType>({\n state: null,\n view: null\n});\n\nexport const useProseMirrorContext = () => useContext(ProseMirrorContext);\n","import { forwardRef, type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\nimport { autoUpdate, computePosition, flip, offset, shift, type VirtualElement } from \"@floating-ui/dom\";\nimport { NodeSelection } from \"prosemirror-state\";\n\nexport interface EditorBubbleProps {\n children: ReactNode;\n options?: any;\n className?: string;\n}\n\nexport const EditorBubble = forwardRef<HTMLDivElement, EditorBubbleProps>(\n ({ children, options, className }, ref) => {\n const { view, state } = useProseMirrorContext();\n const menuRef = useRef<HTMLDivElement>(null);\n const [show, setShow] = useState(false);\n\n useEffect(() => {\n if (!view || !state) return;\n\n // Delay evaluation slightly to let selection settle\n const timer = setTimeout(() => {\n const { selection } = state;\n const { empty } = selection;\n\n // check if image is selected\n let isImage = false;\n state.doc.nodesBetween(selection.from, selection.to, (node) => {\n if (node.type.name === \"image\") isImage = true;\n });\n\n if (isImage || empty || selection instanceof NodeSelection) {\n setShow(false);\n return;\n }\n\n setShow(true);\n }, 0);\n\n return () => clearTimeout(timer);\n }, [view, state]);\n\n useEffect(() => {\n if (!show || !view || !state || !menuRef.current) return;\n\n const { from, to } = state.selection;\n\n // Fallback for end selection coords\n let start = view.coordsAtPos(from);\n let end = view.coordsAtPos(to);\n\n const virtualEl = {\n getBoundingClientRect() {\n const top = Math.min(start.top, end.top);\n const bottom = Math.max(start.bottom, end.bottom);\n const left = Math.min(start.left, end.left);\n const right = Math.max(start.right, end.right);\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top,\n top,\n left,\n right,\n bottom\n };\n }\n };\n\n const cleanup = autoUpdate(virtualEl as VirtualElement, menuRef.current, () => {\n if (!menuRef.current) return;\n\n // Recompute coords in case of scroll\n try {\n start = view.coordsAtPos(state.selection.from);\n end = view.coordsAtPos(state.selection.to);\n } catch (e) {\n // Ignore error if selection is out of bounds\n }\n\n computePosition(virtualEl as VirtualElement, menuRef.current, {\n placement: options?.placement || \"top\",\n middleware: [offset(options?.offset || 8), flip(), shift()],\n strategy: \"fixed\"\n }).then(({ x, y }) => {\n if (menuRef.current) {\n Object.assign(menuRef.current.style, {\n left: `${x}px`,\n top: `${y}px`,\n visibility: \"visible\"\n });\n }\n });\n });\n return () => cleanup();\n }, [show, view, state, options]);\n\n if (!show) return null;\n\n return (\n <div\n ref={menuRef}\n className={className}\n style={{ position: \"fixed\",\nzIndex: 9999,\nvisibility: \"hidden\" }}\n onMouseDown={(e) => {\n e.preventDefault(); // Don't lose focus inside ProseMirror\n }}\n >\n {children}\n </div>\n );\n }\n);\n\nEditorBubble.displayName = \"EditorBubble\";\n\nexport default EditorBubble;\n","import { type ComponentPropsWithoutRef, type ReactNode, forwardRef } from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\n\ninterface EditorBubbleItemProps {\n children: ReactNode;\n asChild?: boolean;\n onSelect?: () => void;\n}\n\nexport const EditorBubbleItem = forwardRef<\n HTMLDivElement,\n EditorBubbleItemProps & Omit<ComponentPropsWithoutRef<\"div\">, \"onSelect\">\n>(({ children, asChild, onSelect, ...rest }, ref) => {\n const { view } = useProseMirrorContext();\n const Comp = asChild ? Slot : \"div\";\n\n if (!view) return null;\n\n return (\n <Comp ref={ref} {...rest} onMouseDown={(e: React.MouseEvent) => {\n // Prevent default to avoid losing focus\n e.preventDefault();\n }} onClick={() => onSelect?.()}>\n {children}\n </Comp>\n );\n});\n\nEditorBubbleItem.displayName = \"EditorBubbleItem\";\n\nexport default EditorBubbleItem;\n","import { Plugin, PluginKey, TextSelection } from \"prosemirror-state\";\n\nexport const SlashCommandPluginKey = new PluginKey(\"slash-command\");\n\nexport interface SlashCommandState {\n active: boolean;\n range?: { from: number; to: number };\n query?: string;\n dismissed?: boolean;\n}\n\nexport function slashCommandPlugin() {\n return new Plugin({\n key: SlashCommandPluginKey,\n state: {\n init(): SlashCommandState {\n return { active: false };\n },\n apply(tr, value, oldState, newState): SlashCommandState {\n const meta = tr.getMeta(SlashCommandPluginKey);\n if (meta !== undefined) {\n return meta;\n }\n\n const { selection } = newState;\n if (!(selection instanceof TextSelection) || !selection.empty) {\n return { active: false };\n }\n\n // Make sure we are in a paragraph or heading block, not a code_block for example\n const $anchor = selection.$anchor;\n if ($anchor.parent.type.name === \"code_block\") {\n return { active: false };\n }\n\n const textBefore = $anchor.parent.textBetween(\n Math.max(0, $anchor.parentOffset - 20),\n $anchor.parentOffset,\n undefined,\n \"\\ufffc\"\n );\n const match = textBefore.match(/(?:\\s|^)(\\/)([a-zA-Z0-9]*)$/);\n\n if (!match) {\n return { active: false };\n }\n\n // If the user previously dismissed this slash command, keep it dismissed\n if (value.dismissed) {\n return { active: false,\ndismissed: true };\n }\n\n // match[1] is the slash, match[2] is the query\n const query = match[2];\n const from = $anchor.pos - query.length - 1;\n const to = $anchor.pos;\n return { active: true,\nrange: { from,\nto },\nquery };\n }\n }\n });\n}\n","import { cls, defaultBorderMixin } from \"@rebasepro/ui\";\nimport { Decoration, DecorationSet, EditorView } from \"prosemirror-view\";\nimport { Plugin, PluginKey } from \"prosemirror-state\";\n\nexport type UploadFn = (image: File) => Promise<string>;\n\nexport async function onFileRead(view: EditorView, readerEvent: ProgressEvent<FileReader>, pos: number, upload: UploadFn, image: File) {\n\n const { schema } = view.state;\n\n // @ts-ignore\n const plugin = view.state.plugins.find((p: Plugin) => p.key === ImagePluginKey.key);\n if (!plugin) {\n console.error(\"Image plugin not found\");\n return;\n }\n\n const decoId = Math.random().toString(36).substring(7);\n const placeholder = document.createElement(\"div\");\n const imageElement = document.createElement(\"img\");\n imageElement.setAttribute(\"class\", \"opacity-40 rounded-lg border \" + defaultBorderMixin);\n imageElement.src = readerEvent.target?.result as string;\n placeholder.appendChild(imageElement);\n\n const deco = Decoration.widget(pos, placeholder, { id: decoId });\n let decorationSet = plugin.getState(view.state);\n decorationSet = decorationSet?.add(view.state.doc, [deco]);\n view.dispatch(view.state.tr.setMeta(plugin, { decorationSet }));\n\n // Image Upload Logic\n const src = await upload(image);\n console.debug(\"Uploaded image\", src);\n\n const replacePlaceholder = () => {\n // Retrieve the LATEST state after the async upload\n let currentDecos = plugin.getState(view.state) as DecorationSet;\n const foundDecos = currentDecos.find(undefined, undefined, spec => spec.id === decoId);\n\n if (foundDecos.length === 0) {\n console.warn(\"Image placeholder removed before upload completed.\");\n return;\n }\n\n // Get the mapped position of the decoration\n const currentPos = foundDecos[0].from;\n\n // Replace placeholder with actual image at the correct mapped position\n const imageNode = view.state.schema.nodes.image.create({ src });\n const tr = view.state.tr.replaceWith(currentPos, currentPos, imageNode);\n\n // Remove placeholder decoration using the LATEST decorationSet\n currentDecos = currentDecos.remove(foundDecos);\n tr.setMeta(plugin, { decorationSet: currentDecos });\n view.dispatch(tr);\n };\n\n // Preload the image so it doesn't cause a layout shift when replacing the placeholder\n const preloader = new Image();\n preloader.src = src;\n preloader.onload = replacePlaceholder;\n preloader.onerror = replacePlaceholder;\n}\n\nexport const ImagePluginKey = new PluginKey(\"imagePlugin\");\n\nexport const createDropImagePlugin = (upload: UploadFn): Plugin => {\n const plugin: Plugin = new Plugin({\n key: ImagePluginKey,\n state: {\n // Initialize the plugin state with an empty DecorationSet\n init: () => DecorationSet.empty,\n // Apply transactions to update the state\n apply: (tr, old) => {\n // Handle custom transaction steps that update decorations\n const meta = tr.getMeta(plugin);\n if (meta && meta.decorationSet) {\n return meta.decorationSet;\n }\n // Map decorations to the new document structure\n return old.map(tr.mapping, tr.doc);\n }\n },\n props: {\n handleDOMEvents: {\n dragover: (view: EditorView, event: DragEvent) => {\n if (event.dataTransfer?.types?.includes(\"Files\")) {\n event.preventDefault();\n return true;\n }\n return false;\n },\n drop: (view: EditorView, event: DragEvent) => {\n if (!event.dataTransfer?.files || event.dataTransfer?.files.length === 0) {\n return false;\n }\n event.preventDefault();\n\n const files = Array.from(event.dataTransfer.files);\n const images = files.filter(file => /image/i.test(file.type));\n\n if (images.length === 0) {\n console.log(\"No images found in dropped files\");\n return false;\n }\n\n images.forEach(image => {\n const position = view.posAtCoords({\n left: event.clientX,\n top: event.clientY\n });\n if (!position) return;\n\n const reader = new FileReader();\n reader.onload = async (readerEvent) => {\n await onFileRead(view, readerEvent, position.pos, upload, image);\n };\n reader.readAsDataURL(image);\n });\n\n return true;\n }\n },\n handlePaste(view: EditorView, event: ClipboardEvent) {\n const html = event.clipboardData?.getData(\"text/html\");\n if (html && html.includes(\"<img\")) {\n // Let ProseMirror handle the HTML paste natively (e.g. copy-pasted from the editor itself or a webpage)\n return false;\n }\n\n const items = Array.from(event.clipboardData?.items || []);\n const pos = view.state.selection.from;\n let anyImageFound = false;\n\n items\n .filter((item) => item.type.startsWith(\"image/\"))\n .forEach((item) => {\n const image = item.getAsFile();\n if (image) {\n anyImageFound = true;\n const reader = new FileReader();\n reader.onload = async (readerEvent) => {\n await onFileRead(view, readerEvent, pos, upload, image);\n };\n reader.readAsDataURL(image);\n }\n });\n\n return anyImageFound;\n },\n decorations(state) {\n return plugin.getState(state);\n }\n }\n });\n\n return plugin;\n};\n\n\n","import { Plugin, PluginKey, Transaction, EditorState } from \"prosemirror-state\";\nimport { Decoration, DecorationSet } from \"prosemirror-view\";\n\n// Define and export the plugin key\nexport const loadingDecorationKey = new PluginKey<LoadingDecorationState>(\"loadingDecoration\");\n\ninterface LoadingDecorationState {\n decorationSet: DecorationSet;\n hasDecoration: boolean;\n}\n\nexport const textLoadingCommands = {\n toggleLoadingDecoration: (state: EditorState, dispatch: ((tr: Transaction) => void) | undefined, loadingHtml?: string): boolean => {\n const { selection } = state;\n const pos = selection.from;\n\n if (!dispatch) return false;\n\n const tr = state.tr.setMeta(loadingDecorationKey, {\n pos,\n type: \"loadingDecoration\",\n remove: false,\n loadingHtml\n });\n\n dispatch(tr);\n return true;\n },\n\n removeLoadingDecoration: (state: EditorState, dispatch: ((tr: Transaction) => void) | undefined): boolean => {\n if (!dispatch) return false;\n\n const tr = state.tr.setMeta(loadingDecorationKey, {\n pos: 0, // We can pass any position as it will remove the entire decoration set\n type: \"loadingDecoration\",\n remove: true\n });\n\n dispatch(tr);\n return true;\n }\n};\n\n/**\n * This plugin is used to display streaming content from an LLM.\n */\nexport const textLoadingDecorationPlugin = () => {\n return new Plugin<LoadingDecorationState>({\n key: loadingDecorationKey,\n\n state: {\n init() {\n return {\n decorationSet: DecorationSet.empty,\n hasDecoration: false\n };\n },\n\n apply(tr, oldState) {\n const action = tr.getMeta(loadingDecorationKey);\n\n if (action?.type === \"loadingDecoration\") {\n const { pos, remove, loadingHtml } = action;\n\n if (remove) {\n return {\n decorationSet: DecorationSet.empty,\n hasDecoration: false\n };\n }\n\n const decoration = Decoration.widget(pos, () => {\n const container = document.createElement(\"span\");\n container.className = \"loading-decoration\";\n\n // Sanitize and append HTML\n if (loadingHtml) {\n container.innerHTML = loadingHtml;\n } else {\n const span = document.createElement(\"span\");\n span.innerText = \"loading...\";\n container.appendChild(span);\n }\n\n return container;\n });\n\n return {\n decorationSet: DecorationSet.empty.add(tr.doc, [decoration]),\n hasDecoration: true\n };\n }\n\n return {\n decorationSet: oldState.decorationSet.map(tr.mapping, tr.doc),\n hasDecoration: oldState.hasDecoration\n };\n }\n },\n\n props: {\n decorations(state) {\n return this.getState(state)?.decorationSet || DecorationSet.empty;\n }\n }\n });\n};\n","\nimport React, { useEffect, useRef, useState, ReactNode } from \"react\";\nimport { Fragment, DOMParser } from \"prosemirror-model\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\nimport { autoUpdate, computePosition, flip, offset, shift, type VirtualElement } from \"@floating-ui/dom\";\nimport { SlashCommandPluginKey } from \"../plugins/slashCommandPlugin\";\nimport { cls, defaultBorderMixin , iconSize } from \"@rebasepro/ui\";\nimport { CheckSquareIcon, Heading1Icon, Heading2Icon, Heading3Icon, Wand2Icon, TableIcon, TypeIcon, ListIcon, ListOrderedIcon, QuoteIcon, CodeIcon, ImageIcon } from \"lucide-react\";\nimport { setBlockType, wrapIn } from \"prosemirror-commands\";\nimport { wrapInList } from \"prosemirror-schema-list\";\nimport { schema } from \"../schema\";\nimport { EditorView } from \"prosemirror-view\";\nimport { TextSelection } from \"prosemirror-state\";\nimport type { EditorAIController } from \"../types\";\nimport { onFileRead, UploadFn } from \"../extensions/Image\";\nimport { textLoadingCommands } from \"../extensions/TextLoadingDecorationExtension\";\nimport { parser } from \"../markdown\";\n\ninterface SuggestionItem {\n title: string;\n description: string;\n icon: ReactNode;\n searchTerms?: string[];\n command: (\n view: EditorView,\n range: { from: number; to: number },\n upload: UploadFn,\n aiController?: EditorAIController,\n setSubView?: (viewId: string | null) => void\n ) => void;\n}\n\nconst suggestionItems: SuggestionItem[] = [\n {\n title: \"Text\",\n description: \"Just start typing with plain text.\",\n searchTerms: [\"p\", \"paragraph\"],\n icon: <TypeIcon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n setBlockType(schema.nodes.paragraph)(view.state, view.dispatch);\n }\n },\n {\n title: \"To-do List\",\n description: \"Track tasks with a to-do list.\",\n searchTerms: [\"todo\", \"task\", \"list\", \"check\", \"checkbox\"],\n icon: <CheckSquareIcon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n wrapInList(schema.nodes.task_list)(view.state, view.dispatch);\n }\n },\n {\n title: \"Heading 1\",\n description: \"Big section heading.\",\n searchTerms: [\"title\", \"big\", \"large\"],\n icon: <Heading1Icon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n setBlockType(schema.nodes.heading, { level: 1 })(view.state, view.dispatch);\n }\n },\n {\n title: \"Heading 2\",\n description: \"Medium section heading.\",\n searchTerms: [\"subtitle\", \"medium\"],\n icon: <Heading2Icon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n setBlockType(schema.nodes.heading, { level: 2 })(view.state, view.dispatch);\n }\n },\n {\n title: \"Heading 3\",\n description: \"Small section heading.\",\n searchTerms: [\"subtitle\", \"small\"],\n icon: <Heading3Icon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n setBlockType(schema.nodes.heading, { level: 3 })(view.state, view.dispatch);\n }\n },\n {\n title: \"Bullet List\",\n description: \"Create a simple bullet list.\",\n searchTerms: [\"unordered\", \"point\"],\n icon: <ListIcon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n wrapInList(schema.nodes.bullet_list)(view.state, view.dispatch);\n }\n },\n {\n title: \"Numbered List\",\n description: \"Create a list with numbering.\",\n searchTerms: [\"ordered\"],\n icon: <ListOrderedIcon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n wrapInList(schema.nodes.ordered_list)(view.state, view.dispatch);\n }\n },\n {\n title: \"Quote\",\n description: \"Capture a quote.\",\n searchTerms: [\"blockquote\"],\n icon: <QuoteIcon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n wrapIn(schema.nodes.blockquote)(view.state, view.dispatch);\n }\n },\n {\n title: \"Code\",\n description: \"Capture a code snippet.\",\n searchTerms: [\"codeblock\"],\n icon: <CodeIcon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n setBlockType(schema.nodes.code_block)(view.state, view.dispatch);\n }\n },\n {\n title: \"Image\",\n description: \"Upload an image from your computer.\",\n searchTerms: [\"photo\", \"picture\", \"media\", \"upload\", \"file\"],\n icon: <ImageIcon size={iconSize.small}/>,\n command: (view, range, upload) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \"image/*\";\n input.onchange = async () => {\n if (input.files?.length) {\n const file = input.files[0];\n if (!file) return;\n const pos = view.state.selection.from;\n\n const images = Array.from(input.files).filter(f => /image/i.test(f.type));\n if (images.length === 0) return false;\n\n images.forEach(image => {\n const reader = new FileReader();\n reader.onload = async (readerEvent) => {\n await onFileRead(view, readerEvent, pos, upload, image);\n };\n reader.readAsDataURL(image);\n });\n }\n return true;\n };\n input.click();\n }\n },\n {\n title: \"Table\",\n description: \"Insert a custom grid table.\",\n searchTerms: [\"table\", \"grid\", \"row\", \"col\"],\n icon: <TableIcon size={iconSize.small}/>,\n command: (view, range, upload, aiController, setSubView) => {\n if (setSubView) setSubView(\"table-grid\");\n }\n }\n];\n\nconst autocompleteSuggestionItem: SuggestionItem = {\n title: \"Autocomplete\",\n description: \"Add text based on the context.\",\n searchTerms: [\"ai\"],\n icon: <Wand2Icon size={iconSize.small}/>,\n command: async (view, range, upload, aiController) => {\n if (!aiController) throw Error(\"No AiController\");\n\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n setBlockType(schema.nodes.paragraph)(view.state, view.dispatch);\n\n const { state } = view;\n const { from, to } = state.selection;\n\n const textBeforeCursor = state.doc.textBetween(0, from, \"\\n\");\n const textAfterCursor = state.doc.textBetween(to, state.doc.content.size, \"\\n\");\n\n let buffer = \"\";\n const result = await aiController.autocomplete(textBeforeCursor, textAfterCursor, (delta) => {\n buffer += delta;\n if (delta.length !== 0) {\n textLoadingCommands.toggleLoadingDecoration(view.state, view.dispatch, buffer);\n }\n });\n\n // Insert parsed text result at cursor natively\n try {\n // The AI controller might stream literal \"\\n\" characters depending on its JSON decoding layer.\n // We need to un-escape these back to genuine newlines so MarkdownIt block-parsing works.\n const unescapedResult = result.replace(/\\\\n/g, \"\\n\").replace(/\\\\t/g, \"\\t\");\n\n const isHTML = /<\\/?[a-z][\\s\\S]*>/i.test(unescapedResult);\n let parsedDoc;\n\n if (isHTML) {\n const div = document.createElement(\"div\");\n div.innerHTML = unescapedResult;\n parsedDoc = DOMParser.fromSchema(view.state.schema).parse(div);\n } else {\n parsedDoc = parser.parse(unescapedResult);\n }\n\n if (parsedDoc) {\n const tr = view.state.tr.replaceWith(view.state.selection.from, view.state.selection.from, parsedDoc.content);\n view.dispatch(tr);\n } else {\n view.dispatch(view.state.tr.insertText(unescapedResult));\n }\n } catch (e) {\n console.error(e);\n view.dispatch(view.state.tr.insertText(result));\n }\n }\n};\n\nexport const SlashCommandMenu = ({ upload, aiController }: { upload: UploadFn, aiController?: EditorAIController }) => {\n const { view, state } = useProseMirrorContext();\n const menuRef = useRef<HTMLDivElement>(null);\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [subView, setSubView] = useState<string | null>(null);\n const [tableGridCoords, setTableGridCoords] = useState({ r: 0,\nc: 0 });\n\n const pluginState = state ? SlashCommandPluginKey.getState(state) : null;\n const isActive = pluginState?.active;\n const query = pluginState?.query || \"\";\n const range = pluginState?.range;\n\n const filteredItems = React.useMemo(() => {\n if (!isActive) return [];\n const availableItems = [...suggestionItems];\n if (aiController) availableItems.push(autocompleteSuggestionItem);\n\n return availableItems.filter(item => {\n const inTitle = item.title.toLowerCase().includes(query.toLowerCase());\n if (inTitle) return inTitle;\n return item.searchTerms?.some(term => term.toLowerCase().includes(query.toLowerCase()));\n });\n }, [query, isActive, aiController]);\n\n useEffect(() => {\n setSelectedIndex(0);\n }, [query]);\n\n useEffect(() => {\n if (!isActive) setSubView(null);\n }, [isActive]);\n\n useEffect(() => {\n if (!view || !isActive || !range || !menuRef.current) return;\n\n const start = view.coordsAtPos(range.from);\n const virtualEl = {\n getBoundingClientRect() {\n return {\n width: 0,\n height: start.bottom - start.top,\n x: start.left,\n y: start.top,\n top: start.top,\n left: start.left,\n right: start.left,\n bottom: start.bottom\n };\n }\n };\n\n const cleanup = autoUpdate(virtualEl as VirtualElement, menuRef.current, () => {\n if (!menuRef.current) return;\n computePosition(virtualEl as VirtualElement, menuRef.current, {\n placement: \"bottom-start\",\n middleware: [offset(4), flip(), shift()],\n strategy: \"fixed\"\n }).then(({ x, y }) => {\n if (menuRef.current) {\n Object.assign(menuRef.current.style, {\n left: `${x}px`,\n top: `${y}px`,\n visibility: \"visible\"\n });\n }\n });\n });\n return () => cleanup();\n }, [view, isActive, range]);\n\n useEffect(() => {\n if (!isActive || !view) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (subView === \"table-grid\") {\n if (e.key === \"Escape\") {\n e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation();\n setSubView(null);\n setTableGridCoords({ r: 0,\nc: 0 });\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault(); e.stopPropagation();\n setTableGridCoords(prev => ({ r: Math.max(0, prev.r - 1),\nc: prev.c }));\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault(); e.stopPropagation();\n setTableGridCoords(prev => ({ r: Math.min(4, prev.r + 1),\nc: prev.c }));\n } else if (e.key === \"ArrowLeft\") {\n e.preventDefault(); e.stopPropagation();\n setTableGridCoords(prev => ({ r: prev.r,\nc: Math.max(0, prev.c - 1) }));\n } else if (e.key === \"ArrowRight\") {\n e.preventDefault(); e.stopPropagation();\n setTableGridCoords(prev => ({ r: prev.r,\nc: Math.min(4, prev.c + 1) }));\n } else if (e.key === \"Enter\") {\n e.preventDefault(); e.stopPropagation();\n if (range) {\n const tableNode = createTableNode(view.state.schema, tableGridCoords.r + 1, tableGridCoords.c + 1);\n const tr = view.state.tr.replaceWith(range.from, range.to, tableNode);\n try {\n const selection = TextSelection.create(tr.doc, range.from + 4);\n tr.setSelection(selection);\n } catch (e) {\n console.warn(\"Could not select first cell\", e);\n }\n tr.setMeta(SlashCommandPluginKey, { active: false });\n view.dispatch(tr);\n view.focus();\n setSubView(null);\n setTableGridCoords({ r: 0,\nc: 0 });\n }\n }\n return;\n }\n\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n e.stopPropagation();\n setSelectedIndex(prev => (prev + filteredItems.length - 1) % filteredItems.length);\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n e.stopPropagation();\n setSelectedIndex(prev => (prev + 1) % filteredItems.length);\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n e.stopPropagation();\n if (filteredItems[selectedIndex] && range) {\n filteredItems[selectedIndex].command(view, range, upload, aiController, setSubView);\n // Do not focus view if a subview opened\n setTimeout(() => {\n // Focus is managed by the caller\n }, 0);\n }\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n // Close menu gracefully and keep it dismissed\n view.dispatch(view.state.tr.setMeta(SlashCommandPluginKey, { active: false,\ndismissed: true }));\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => window.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n }, [isActive, selectedIndex, filteredItems, view, range, upload, aiController, subView, tableGridCoords]);\n\n const itemRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\n useEffect(() => {\n if (itemRefs.current[selectedIndex]) {\n itemRefs.current[selectedIndex]?.scrollIntoView({ block: \"nearest\" });\n }\n }, [selectedIndex]);\n\n useEffect(() => {\n if (!subView) {\n setTableGridCoords({ r: 0,\nc: 0 });\n }\n }, [subView]);\n\n if (!isActive || filteredItems.length === 0) return null;\n\n if (subView === \"table-grid\" && range && view) {\n return (\n <div\n ref={menuRef}\n onMouseDown={(e) => e.preventDefault()}\n style={{ position: \"fixed\",\nzIndex: 9999,\nvisibility: \"hidden\" }}\n className={cls(\"text-surface-900 dark:text-white rounded-md border bg-white dark:bg-surface-800 p-2 shadow transition-none\", defaultBorderMixin)}\n >\n <TableGridPicker\n hoveredRow={tableGridCoords.r}\n hoveredCol={tableGridCoords.c}\n onHover={(r, c) => setTableGridCoords({ r,\nc })}\n onSelect={(rows, cols) => {\n const tableNode = createTableNode(view.state.schema, rows, cols);\n const tr = view.state.tr.replaceWith(range.from, range.to, tableNode);\n try {\n const selection = TextSelection.create(tr.doc, range.from + 4);\n tr.setSelection(selection);\n } catch (e) {\n console.warn(\"Could not select first cell\", e);\n }\n tr.setMeta(SlashCommandPluginKey, { active: false });\n view.dispatch(tr);\n view.focus();\n setSubView(null);\n }}\n />\n </div>\n );\n }\n\n return (\n <div\n ref={menuRef}\n style={{ position: \"fixed\",\nzIndex: 9999,\nvisibility: \"hidden\" }}\n className={cls(\"text-surface-900 dark:text-white max-h-[280px] w-72 overflow-y-auto rounded-md border bg-white dark:bg-surface-800 px-1 py-2 shadow transition-none\", defaultBorderMixin)}\n >\n {filteredItems.map((item, index) => (\n <button\n key={item.title}\n ref={el => { itemRefs.current[index] = el; }}\n onClick={(e) => {\n e.preventDefault();\n if (range && view) {\n item.command(view, range, upload, aiController, setSubView);\n // Only focus back to editor if it didn't open a sub-view\n if (!subView) view.focus();\n }\n }}\n onMouseDown={(e) => e.preventDefault()}\n className={cls(\"flex w-full items-center space-x-2 rounded-md px-2 py-1 text-left text-sm hover:bg-blue-50 hover:dark:bg-surface-700\",\n index === selectedIndex ? \"bg-blue-100 dark:bg-surface-accent-950\" : \"\")}\n >\n <div className={cls(\"flex h-10 w-10 shrink-0 items-center justify-center rounded-md border bg-white dark:bg-surface-800\", defaultBorderMixin)}>\n {item.icon}\n </div>\n <div className=\"flex flex-col overflow-hidden\">\n <p className=\"font-medium truncate\">{item.title}</p>\n <p className=\"text-xs text-surface-700 dark:text-surface-accent-300 truncate\">\n {item.description}\n </p>\n </div>\n </button>\n ))}\n </div>\n );\n};\n\nconst createTableNode = (schema: import(\"prosemirror-model\").Schema, rowsCount: number, colsCount: number) => {\n const rows = [];\n for (let r = 0; r < rowsCount; r++) {\n const cells = [];\n for (let c = 0; c < colsCount; c++) {\n const isHeader = r === 0;\n const cellType = isHeader ? schema.nodes.table_header : schema.nodes.table_cell;\n const cell = cellType.createAndFill();\n if (cell) cells.push(cell);\n }\n const row = schema.nodes.table_row.create(null, Fragment.from(cells));\n rows.push(row);\n }\n return schema.nodes.table.create(null, Fragment.from(rows));\n};\n\nconst TableGridPicker = ({\n hoveredRow,\n hoveredCol,\n onHover,\n onSelect\n}: {\n hoveredRow: number;\n hoveredCol: number;\n onHover: (r: number, c: number) => void;\n onSelect: (r: number, c: number) => void;\n}) => {\n return (\n <div className=\"flex flex-col gap-1 items-center justify-center p-1 w-fit\">\n <span className=\"text-xs text-gray-500 font-medium mb-1\">\n {hoveredCol + 1} x {hoveredRow + 1} Table\n </span>\n <div className=\"flex flex-col gap-1\">\n {Array.from({ length: 5 }).map((_, r) => (\n <div key={r} className=\"flex gap-1\">\n {Array.from({ length: 5 }).map((_, c) => (\n <div\n key={c}\n className={cls(\n \"w-5 h-5 border rounded-sm cursor-pointer transition-colors duration-75\",\n r <= hoveredRow && c <= hoveredCol\n ? \"bg-blue-100 border-blue-400 dark:bg-blue-900 dark:border-blue-500\"\n : \"bg-white dark:bg-surface-800 border-gray-200 dark:border-gray-700 hover:border-blue-300\"\n )}\n onMouseEnter={() => onHover(r, c)}\n onClick={() => onSelect(hoveredRow + 1, hoveredCol + 1)}\n />\n ))}\n </div>\n ))}\n </div>\n </div>\n );\n};\n","import { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\nimport { autoUpdate, computePosition, flip, offset, shift, type VirtualElement } from \"@floating-ui/dom\";\nimport { NodeSelection } from \"prosemirror-state\";\nimport { TextField, defaultBorderMixin, Typography, cls } from \"@rebasepro/ui\";\nimport { useTranslation } from \"@rebasepro/core\";\n\nexport interface ImageBubbleProps {\n options?: any;\n className?: string;\n}\n\nexport const ImageBubble = forwardRef<HTMLDivElement, ImageBubbleProps>(\n ({ options, className }, ref) => {\n const { view, state } = useProseMirrorContext();\n const { t } = useTranslation();\n const menuRef = useRef<HTMLDivElement>(null);\n const [show, setShow] = useState(false);\n const [alt, setAlt] = useState(\"\");\n const [title, setTitle] = useState(\"\");\n const [imagePos, setImagePos] = useState<number | null>(null);\n\n useEffect(() => {\n if (!view) return;\n const handleContextMenu = (e: MouseEvent) => {\n const posInfo = view.posAtCoords({ left: e.clientX,\ntop: e.clientY });\n if (posInfo && posInfo.inside >= 0) {\n const node = view.state.doc.nodeAt(posInfo.inside);\n if (node && node.type.name === \"image\") {\n e.preventDefault();\n const tr = view.state.tr.setSelection(NodeSelection.create(view.state.doc, posInfo.inside));\n view.dispatch(tr);\n setShow(true);\n setAlt(node.attrs.alt || \"\");\n setTitle(node.attrs.title || \"\");\n setImagePos(posInfo.inside);\n }\n }\n };\n view.dom.addEventListener(\"contextmenu\", handleContextMenu);\n\n const handleMousedown = (e: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(e.target as Node) && e.button !== 2) {\n setShow(false);\n }\n };\n document.addEventListener(\"mousedown\", handleMousedown);\n\n return () => {\n view.dom.removeEventListener(\"contextmenu\", handleContextMenu);\n document.removeEventListener(\"mousedown\", handleMousedown);\n };\n }, [view]);\n\n useEffect(() => {\n if (!show || !view || !state || !menuRef.current) return;\n\n const { from, to } = state.selection;\n let start = view.coordsAtPos(from);\n let end = view.coordsAtPos(to);\n\n const virtualEl = {\n getBoundingClientRect() {\n const top = Math.min(start.top, end.top);\n const bottom = Math.max(start.bottom, end.bottom);\n const left = Math.min(start.left, end.left);\n const right = Math.max(start.right, end.right);\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top,\n top,\n left,\n right,\n bottom\n };\n }\n };\n\n const cleanup = autoUpdate(virtualEl as VirtualElement, menuRef.current, () => {\n if (!menuRef.current) return;\n try {\n start = view.coordsAtPos(state.selection.from);\n end = view.coordsAtPos(state.selection.to);\n } catch (e) {\n // Ignore errors during fast remounts/updates\n }\n\n computePosition(virtualEl as VirtualElement, menuRef.current, {\n placement: options?.placement || \"bottom\",\n middleware: [offset(options?.offset || 8), flip(), shift()],\n strategy: \"fixed\"\n }).then(({ x, y }) => {\n if (menuRef.current) {\n Object.assign(menuRef.current.style, {\n left: `${x}px`,\n top: `${y}px`,\n visibility: \"visible\"\n });\n }\n });\n });\n return () => cleanup();\n }, [show, view, state, options]);\n\n const handleSave = (newAlt: string, newTitle: string) => {\n if (imagePos !== null && view) {\n const node = view.state.doc.nodeAt(imagePos);\n if (node && node.type.name === \"image\") {\n const tr = view.state.tr.setNodeMarkup(imagePos, undefined, {\n ...node.attrs,\n alt: newAlt,\n title: newTitle\n });\n // Preserve the node selection so the bubble stays open!\n tr.setSelection(NodeSelection.create(tr.doc, imagePos));\n view.dispatch(tr);\n }\n }\n };\n\n if (!show) return null;\n\n return (\n <div\n ref={menuRef}\n style={{ visibility: \"hidden\",\nposition: \"fixed\",\nzIndex: 50 }}\n className={cls(\"flex flex-col gap-1.5 p-2 w-56 max-w-[90vw] rounded-lg border bg-white dark:bg-surface-800 shadow-lg\", defaultBorderMixin, className)}\n onMouseDown={(e) => {\n // Prevent mousedown from stealing focus from inputs\n // but we don't want to prevent typing\n // Only prevent if clicking on the container background\n if (e.target === e.currentTarget) {\n e.preventDefault();\n }\n }}\n >\n <TextField\n size={\"small\"}\n placeholder={t(\"alt_text\")}\n value={alt}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n setAlt(e.target.value);\n handleSave(e.target.value, title);\n }}\n />\n <TextField\n size={\"small\"}\n placeholder={t(\"title\")}\n value={title}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n setTitle(e.target.value);\n handleSave(alt, e.target.value);\n }}\n />\n </div>\n );\n }\n);\n\nImageBubble.displayName = \"ImageBubble\";\n","import { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\nimport { autoUpdate, computePosition, flip, offset, shift, type VirtualElement } from \"@floating-ui/dom\";\nimport { IconButton, Tooltip, defaultBorderMixin, cls } from \"@rebasepro/ui\";\nimport { useTranslation } from \"@rebasepro/core\";\nimport {\n addColumnBefore,\n addColumnAfter,\n deleteColumn,\n addRowBefore,\n addRowAfter,\n deleteRow,\n deleteTable\n} from \"prosemirror-tables\";\nimport { EditorState } from \"prosemirror-state\";\n\n\nexport interface TableBubbleProps {\n options?: any;\n className?: string;\n}\n\nconst isSelectionInTable = (state: EditorState) => {\n const { $from } = state.selection;\n for (let d = $from.depth; d > 0; d--) {\n if ($from.node(d).type.name === \"table\") {\n return true;\n }\n }\n return false;\n};\n\n// We create separate icon components if they don't exist in @rebasepro/ui\n// using basic SVGs for now, or we can use existing ones if we know them.\n// Wait, I will use generic SVGs for these since I don't know if @rebasepro/ui has them.\n\nexport const TableBubble = forwardRef<HTMLDivElement, TableBubbleProps>(\n ({ options, className }, ref) => {\n const { view, state } = useProseMirrorContext();\n const { t } = useTranslation();\n const menuRef = useRef<HTMLDivElement>(null);\n const [show, setShow] = useState(false);\n\n useEffect(() => {\n if (!state) return;\n setShow(isSelectionInTable(state));\n }, [state?.selection]);\n\n useEffect(() => {\n if (!show || !view || !state || !menuRef.current) return;\n\n const { from, to } = state.selection;\n\n // Safety measure: if view.docView is destroyed, coordsAtPos might crash\n if (view.isDestroyed) return;\n\n let start = view.coordsAtPos(from);\n let end = view.coordsAtPos(to);\n\n const virtualEl = {\n getBoundingClientRect() {\n const top = Math.min(start.top, end.top);\n const bottom = Math.max(start.bottom, end.bottom);\n const left = Math.min(start.left, end.left);\n const right = Math.max(start.right, end.right);\n\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top,\n top,\n bottom,\n left,\n right\n } as DOMRect;\n }\n };\n\n const cleanup = autoUpdate(virtualEl as VirtualElement, menuRef.current, () => {\n if (!menuRef.current || view.isDestroyed) return;\n try {\n start = view.coordsAtPos(state.selection.from);\n end = view.coordsAtPos(state.selection.to);\n } catch (e) {\n // Ignore errors during fast remounts/updates\n }\n\n computePosition(virtualEl as VirtualElement, menuRef.current, {\n placement: options?.placement || \"top\",\n middleware: [offset(options?.offset || 8), flip(), shift()],\n strategy: \"fixed\"\n }).then(({ x, y }) => {\n if (menuRef.current) {\n Object.assign(menuRef.current.style, {\n left: `${x}px`,\n top: `${y}px`,\n visibility: \"visible\"\n });\n }\n });\n });\n return () => cleanup();\n }, [show, view, state, options]);\n\n if (!show || !view || !state) return null;\n\n const executeCommand = (cmd: (state: EditorState, dispatch?: (tr: import(\"prosemirror-state\").Transaction) => void) => boolean) => {\n cmd(state, view.dispatch);\n view.focus();\n };\n\n return (\n <div\n ref={menuRef}\n style={{ visibility: \"hidden\",\nposition: \"fixed\",\nzIndex: 50 }}\n className={cls(\"flex flex-row gap-1 p-1 rounded-lg border bg-white dark:bg-surface-800 shadow-lg\", defaultBorderMixin, className)}\n onMouseDown={(e) => {\n // Prevent mousedown from stealing focus from the editor\n e.preventDefault();\n }}\n >\n <div className=\"flex gap-1 border-r pr-1 mr-1 dark:border-gray-700\">\n <Tooltip title={t(\"add_row_before\")}>\n <IconButton size=\"small\" onClick={() => executeCommand(addRowBefore)}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"16\"></line><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line><line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\"></line></svg>\n </IconButton>\n </Tooltip>\n <Tooltip title={t(\"add_row_after\")}>\n <IconButton size=\"small\" onClick={() => executeCommand(addRowAfter)}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"20\"></line><line x1=\"8\" y1=\"16\" x2=\"16\" y2=\"16\"></line><line x1=\"3\" y1=\"15\" x2=\"21\" y2=\"15\"></line></svg>\n </IconButton>\n </Tooltip>\n <Tooltip title={t(\"delete_row\")}>\n <IconButton size=\"small\" onClick={() => executeCommand(deleteRow)}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"></line><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line></svg>\n </IconButton>\n </Tooltip>\n </div>\n\n <div className=\"flex gap-1 border-r pr-1 mr-1 dark:border-gray-700\">\n <Tooltip title={t(\"add_column_before\")}>\n <IconButton size=\"small\" onClick={() => executeCommand(addColumnBefore)}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"16\"></line><line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\"></line></svg>\n </IconButton>\n </Tooltip>\n <Tooltip title={t(\"add_column_after\")}>\n <IconButton size=\"small\" onClick={() => executeCommand(addColumnAfter)}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"12\" y1=\"12\" x2=\"20\" y2=\"12\"></line><line x1=\"16\" y1=\"8\" x2=\"16\" y2=\"16\"></line><line x1=\"15\" y1=\"3\" x2=\"15\" y2=\"21\"></line></svg>\n </IconButton>\n </Tooltip>\n <Tooltip title={t(\"delete_column\")}>\n <IconButton size=\"small\" onClick={() => executeCommand(deleteColumn)}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"21\"></line><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"16\"></line></svg>\n </IconButton>\n </Tooltip>\n </div>\n\n <Tooltip title={t(\"delete_table\")}>\n <IconButton size=\"small\" onClick={() => executeCommand(deleteTable)}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><polyline points=\"3 6 5 6 21 6\"></polyline><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"></path><line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line><line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line></svg>\n </IconButton>\n </Tooltip>\n </div>\n );\n }\n);\n\nTableBubble.displayName = \"TableBubble\";\n","import { EditorState, TextSelection, Transaction } from \"prosemirror-state\";\nimport { MarkType, NodeType, Node as ProseMirrorNode } from \"prosemirror-model\";\n\nexport function isMarkActive(state: EditorState, type: MarkType) {\n if (!state || !type) return false;\n const { from, $from, to, empty } = state.selection;\n if (empty) return !!type.isInSet(state.storedMarks || $from.marks());\n return state.doc.rangeHasMark(from, to, type);\n}\n\nexport function isNodeActive(state: EditorState, type: NodeType, attrs: Record<string, unknown> = {}) {\n if (!state || !type) return false;\n const selection = state.selection;\n const { $from, to } = selection;\n const node = selection instanceof TextSelection ? undefined : (selection as unknown as { node?: ProseMirrorNode }).node;\n if (node) {\n return node.type === type && (!attrs || Object.keys(attrs).every((key) => node.attrs[key] === attrs[key]));\n }\n return to <= $from.end() && $from.parent.type === type && (!attrs || Object.keys(attrs).every((key) => $from.parent.attrs[key] === attrs[key]));\n}\n\nexport function getMarkAttributes(state: EditorState, type: MarkType) {\n if (!state || !type) return {};\n const { from, $from, to, empty } = state.selection;\n let mark;\n if (empty) {\n mark = type.isInSet(state.storedMarks || $from.marks());\n } else {\n let found = false;\n state.doc.nodesBetween(from, to, (node) => {\n if (found) return false;\n const m = type.isInSet(node.marks);\n if (m) {\n mark = m;\n found = true;\n }\n return true;\n });\n }\n return mark ? mark.attrs : {};\n}\n\nexport function setMark(type: MarkType, attrs?: Record<string, unknown>) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n const selection = state.selection as TextSelection;\n const { empty, $cursor, ranges } = selection;\n if ((empty && !$cursor) || !type) return false;\n if (dispatch) {\n if ($cursor) {\n dispatch(state.tr.addStoredMark(type.create(attrs)));\n } else {\n const tr = state.tr;\n for (let i = 0; i < ranges.length; i++) {\n const { $from, $to } = ranges[i];\n tr.addMark($from.pos, $to.pos, type.create(attrs));\n }\n dispatch(tr.scrollIntoView());\n }\n }\n return true;\n };\n}\n\nexport function unsetMark(type: MarkType) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n const selection = state.selection as TextSelection;\n const { empty, $cursor, ranges } = selection;\n if ((empty && !$cursor) || !type) return false;\n if (dispatch) {\n const tr = state.tr;\n if ($cursor) {\n const parent = $cursor.parent;\n let markStart = -1;\n let markEnd = -1;\n let currentMarkStart = -1;\n\n parent.forEach((child: ProseMirrorNode, offset: number) => {\n const childStart = $cursor.start() + offset;\n const childEnd = childStart + child.nodeSize;\n\n if (type.isInSet(child.marks)) {\n if (currentMarkStart === -1) currentMarkStart = childStart;\n if ($cursor.pos >= childStart && $cursor.pos <= childEnd) {\n markStart = currentMarkStart;\n }\n } else {\n if (currentMarkStart !== -1) {\n if (markStart !== -1 && markEnd === -1) markEnd = childStart;\n currentMarkStart = -1;\n }\n }\n });\n\n if (markStart !== -1 && markEnd === -1) {\n markEnd = $cursor.end();\n }\n\n if (markStart !== -1 && markEnd !== -1) {\n tr.removeMark(markStart, markEnd, type);\n }\n tr.removeStoredMark(type);\n dispatch(tr.scrollIntoView());\n } else {\n for (let i = 0; i < ranges.length; i++) {\n const { $from, $to } = ranges[i];\n tr.removeMark($from.pos, $to.pos, type);\n }\n dispatch(tr.scrollIntoView());\n }\n }\n return true;\n };\n}\n","\nimport { EditorState, Transaction } from \"prosemirror-state\";\nimport { EditorBubbleItem } from \"../components\";\nimport { useTranslation } from \"@rebasepro/core\";\n\nimport { Button, Popover , iconSize } from \"@rebasepro/ui\";\nimport { CheckSquareIcon, Heading3Icon, Heading1Icon, Heading2Icon, CheckIcon, CodeIcon, ListIcon, ListOrderedIcon, QuoteIcon, ChevronDownIcon, TypeIcon } from \"lucide-react\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\nimport { isNodeActive } from \"../utils/prosemirror-utils\";\nimport { schema } from \"../schema\";\nimport { setBlockType, wrapIn } from \"prosemirror-commands\";\nimport { wrapInList } from \"prosemirror-schema-list\";\n\nexport type SelectorItem = {\n name: string;\n labelKey: string;\n icon: React.ElementType;\n command: (state: EditorState, dispatch: (tr: Transaction) => void) => void;\n isActive: (state: EditorState) => boolean;\n};\n\nconst items: SelectorItem[] = [\n {\n name: \"Text\",\n labelKey: \"editor_text\",\n icon: TypeIcon,\n command: (state, dispatch) => setBlockType(schema.nodes.paragraph)(state, dispatch),\n isActive: (state) =>\n isNodeActive(state, schema.nodes.paragraph) &&\n !isNodeActive(state, schema.nodes.bullet_list) &&\n !isNodeActive(state, schema.nodes.ordered_list)\n },\n {\n name: \"Heading 1\",\n labelKey: \"editor_heading_1\",\n icon: Heading1Icon,\n command: (state, dispatch) => setBlockType(schema.nodes.heading, { level: 1 })(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.heading, { level: 1 })\n },\n {\n name: \"Heading 2\",\n labelKey: \"editor_heading_2\",\n icon: Heading2Icon,\n command: (state, dispatch) => setBlockType(schema.nodes.heading, { level: 2 })(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.heading, { level: 2 })\n },\n {\n name: \"Heading 3\",\n labelKey: \"editor_heading_3\",\n icon: Heading3Icon,\n command: (state, dispatch) => setBlockType(schema.nodes.heading, { level: 3 })(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.heading, { level: 3 })\n },\n {\n name: \"To-do List\",\n labelKey: \"editor_todo_list\",\n icon: CheckSquareIcon,\n command: (state, dispatch) => wrapInList(schema.nodes.task_list)(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.task_item)\n },\n {\n name: \"Bullet List\",\n labelKey: \"editor_bullet_list\",\n icon: ListIcon,\n command: (state, dispatch) => wrapInList(schema.nodes.bullet_list)(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.bullet_list)\n },\n {\n name: \"Numbered List\",\n labelKey: \"editor_numbered_list\",\n icon: ListOrderedIcon,\n command: (state, dispatch) => wrapInList(schema.nodes.ordered_list)(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.ordered_list)\n },\n {\n name: \"Quote\",\n labelKey: \"editor_quote\",\n icon: QuoteIcon,\n command: (state, dispatch) => wrapIn(schema.nodes.blockquote)(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.blockquote)\n },\n {\n name: \"Code\",\n labelKey: \"editor_code\",\n icon: CodeIcon,\n command: (state, dispatch) => setBlockType(schema.nodes.code_block)(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.code_block)\n }\n];\n\ninterface NodeSelectorProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n portalContainer: HTMLElement | null;\n}\n\nexport const NodeSelector = ({\n open,\n onOpenChange,\n portalContainer\n}: NodeSelectorProps) => {\n const { state, view } = useProseMirrorContext();\n const { t } = useTranslation();\n if (!state || !view) return null;\n\n const activeItem = items.filter((item) => item.isActive(state)).pop() ?? {\n name: \"Multiple\",\n labelKey: \"editor_multiple\"\n };\n\n return (\n <Popover\n sideOffset={5}\n align=\"start\"\n portalContainer={portalContainer}\n className=\"w-48 p-1\"\n trigger={<Button variant=\"text\"\n className=\"gap-2 rounded-none\"\n color=\"text\">\n <span className=\"whitespace-nowrap text-sm\">{t(activeItem.labelKey)}</span>\n <ChevronDownIcon size={iconSize.small}/>\n </Button>}\n modal={true}\n open={open}\n onOpenChange={onOpenChange}>\n {items.map((item, index) => (\n <EditorBubbleItem\n key={index}\n onSelect={() => {\n item.command(view.state, view.dispatch);\n view.focus();\n onOpenChange(false);\n }}\n className=\"flex cursor-pointer items-center justify-between rounded px-2 py-1 text-sm hover:bg-blue-50 hover:dark:bg-surface-700 text-surface-900 dark:text-white\"\n >\n <div className=\"flex items-center space-x-2\">\n <item.icon size={iconSize.smallest}/>\n <span>{t(item.labelKey)}</span>\n </div>\n {activeItem.name === item.name && <CheckIcon size={iconSize.smallest}/>}\n </EditorBubbleItem>\n ))}\n </Popover>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport { Button, cls, focusedDisabled, Popover , iconSize } from \"@rebasepro/ui\";\nimport { CheckIcon, Trash2Icon } from \"lucide-react\";\nimport { useTranslation } from \"@rebasepro/core\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\nimport { getMarkAttributes, isMarkActive, setMark, unsetMark } from \"../utils/prosemirror-utils\";\nimport { schema } from \"../schema\";\n\nexport function isValidUrl(url: string) {\n try {\n new URL(url);\n return true;\n } catch (e) {\n return false;\n }\n}\n\nexport function getUrlFromString(str: string) {\n if (isValidUrl(str)) return str;\n try {\n if (str.includes(\".\") && !str.includes(\" \")) {\n return new URL(`https://${str}`).toString();\n }\n return null;\n } catch (e) {\n return null;\n }\n}\n\ninterface LinkSelectorProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nexport const LinkSelector = ({\n open,\n onOpenChange\n}: LinkSelectorProps) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const { state, view } = useProseMirrorContext();\n const { t } = useTranslation();\n\n // Autofocus on input by default\n useEffect(() => {\n if (open && inputRef.current) {\n inputRef.current.focus();\n }\n }, [open]);\n\n if (!state || !view) return null;\n\n const handleSubmit = (e: any) => {\n e.preventDefault();\n const value = inputRef.current?.value;\n if (!value) return;\n const url = getUrlFromString(value);\n if (url) {\n setMark(schema.marks.link, { href: url })(view.state, view.dispatch);\n view.focus();\n onOpenChange(false);\n }\n };\n\n const handleRemoveLink = () => {\n unsetMark(schema.marks.link)(view.state, view.dispatch);\n view.focus();\n onOpenChange(false);\n };\n\n const isActive = isMarkActive(state, schema.marks.link);\n const href = getMarkAttributes(state, schema.marks.link).href || \"\";\n\n return (\n <Popover modal={true}\n open={open}\n onOpenChange={onOpenChange}\n trigger={<Button variant=\"text\"\n type=\"button\"\n className=\"gap-2 rounded-none\"\n color={\"text\"}>\n <p className={cls(\"underline decoration-stone-400 underline-offset-4\", {\n \"text-blue-500\": isActive\n })}>\n {t(\"editor_link\")}\n </p>\n </Button>}>\n <form\n onSubmit={handleSubmit}\n className=\"flex p-1 gap-1\"\n >\n <input\n ref={inputRef}\n autoFocus={open}\n placeholder={t(\"editor_paste_or_type_link\")}\n defaultValue={href}\n className={cls(\"text-surface-900 dark:text-white flex-grow bg-transparent p-1 text-sm outline-none\", focusedDisabled)}/>\n\n {href ? (\n <Button\n size={\"small\"}\n variant=\"text\"\n type=\"button\"\n color={\"text\"}\n className=\"flex items-center\"\n onClick={handleRemoveLink}\n >\n <Trash2Icon size={iconSize.small}/>\n </Button>\n ) : (\n <Button size={\"small\"}\n type=\"submit\"\n variant={\"text\"}>\n <CheckIcon size={iconSize.small}/>\n </Button>\n )}\n </form>\n </Popover>\n );\n};\n","\nimport { EditorState, Transaction } from \"prosemirror-state\";\nimport { EditorBubbleItem } from \"../components\";\nimport type { SelectorItem } from \"./node-selector\";\nimport { Button, cls } from \"@rebasepro/ui\";\nimport { BoldIcon, ItalicIcon, StrikethroughIcon, UnderlineIcon, CodeIcon } from \"lucide-react\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\nimport { isMarkActive } from \"../utils/prosemirror-utils\";\nimport { schema } from \"../schema\";\nimport { toggleMark } from \"prosemirror-commands\";\n\nexport const TextButtons = () => {\n const { state, view } = useProseMirrorContext();\n if (!state || !view) return null;\n\n // We pass state directly to isActive, and dispatch to command\n const items = [\n {\n name: \"bold\",\n labelKey: \"editor_bold\",\n isActive: (s: EditorState) => isMarkActive(s, schema.marks.bold),\n command: (s: EditorState, dispatch: (tr: Transaction) => void) => toggleMark(schema.marks.bold)(s, dispatch),\n icon: BoldIcon\n },\n {\n name: \"italic\",\n labelKey: \"editor_italic\",\n isActive: (s: EditorState) => isMarkActive(s, schema.marks.italic),\n command: (s: EditorState, dispatch: (tr: Transaction) => void) => toggleMark(schema.marks.italic)(s, dispatch),\n icon: ItalicIcon\n },\n {\n name: \"underline\",\n labelKey: \"editor_underline\",\n isActive: (s: EditorState) => isMarkActive(s, schema.marks.underline),\n command: (s: EditorState, dispatch: (tr: Transaction) => void) => toggleMark(schema.marks.underline)(s, dispatch),\n icon: UnderlineIcon\n },\n {\n name: \"strike\",\n labelKey: \"editor_strikethrough\",\n isActive: (s: EditorState) => isMarkActive(s, schema.marks.strike),\n command: (s: EditorState, dispatch: (tr: Transaction) => void) => toggleMark(schema.marks.strike)(s, dispatch),\n icon: StrikethroughIcon\n },\n {\n name: \"code\",\n labelKey: \"editor_code\",\n isActive: (s: EditorState) => isMarkActive(s, schema.marks.code),\n command: (s: EditorState, dispatch: (tr: Transaction) => void) => toggleMark(schema.marks.code)(s, dispatch),\n icon: CodeIcon\n }\n ];\n\n return (\n <div className=\"flex\">\n {items.map((item, index) => (\n <EditorBubbleItem\n key={index}\n onSelect={() => {\n item.command(view.state, view.dispatch);\n view.focus();\n }}\n >\n <Button size={\"small\"}\n color=\"text\"\n className=\"gap-2 rounded-none h-full\"\n variant=\"text\">\n <item.icon\n className={cls({\n \"text-inherit\": !item.isActive(state),\n \"text-blue-500\": item.isActive(state)\n })}\n />\n </Button>\n </EditorBubbleItem>\n ))}\n </div>\n );\n};\n","export function removeClassesFromJson(jsonObj: any): any {\n // If it's an array, apply the function to each element\n if (Array.isArray(jsonObj)) {\n return jsonObj.map(item => removeClassesFromJson(item));\n } else if (typeof jsonObj === \"object\" && jsonObj !== null) { // If it's an object, recurse through its properties\n // If the object has an `attrs` property and `class` field, delete the `class` field\n if (jsonObj.attrs && typeof jsonObj.attrs === \"object\" && \"class\" in jsonObj.attrs) {\n delete jsonObj.attrs.class;\n }\n\n // Apply the function recursively to object properties\n Object.keys(jsonObj).forEach(key => {\n jsonObj[key] = removeClassesFromJson(jsonObj[key]);\n });\n }\n return jsonObj;\n}\n","import { DOMSerializer, Slice } from \"prosemirror-model\"\nimport { EditorView } from \"prosemirror-view\";\n\nexport function serializeForClipboard(view: EditorView, slice: Slice) {\n view.someProp(\"transformCopied\", f => {\n slice = f(slice!, view)\n })\n\n const context = [];\n let {\n content,\n openStart,\n openEnd\n } = slice\n while (openStart > 1 && openEnd > 1 && content.childCount == 1 && content.firstChild!.childCount == 1) {\n openStart--\n openEnd--\n const node = content.firstChild!\n // @ts-ignore\n context.push(node.type.name, node.attrs != node.type.defaultAttrs ? node.attrs : null)\n content = node.content\n }\n\n const serializer = view.someProp(\"clipboardSerializer\") || DOMSerializer.fromSchema(view.state.schema)\n const doc = detachedDoc(), wrap = doc.createElement(\"div\")\n wrap.appendChild(serializer.serializeFragment(content, { document: doc }))\n\n let firstChild = wrap.firstChild, needsWrap, wrappers = 0\n while (firstChild && firstChild.nodeType == 1 && (needsWrap = wrapMap[firstChild.nodeName.toLowerCase()])) {\n for (let i = needsWrap.length - 1; i >= 0; i--) {\n const wrapper = doc.createElement(needsWrap[i])\n while (wrap.firstChild) wrapper.appendChild(wrap.firstChild)\n wrap.appendChild(wrapper)\n wrappers++\n }\n firstChild = wrap.firstChild\n }\n\n if (firstChild && firstChild.nodeType == 1)\n (firstChild as HTMLElement).setAttribute(\n \"data-pm-slice\", `${openStart} ${openEnd}${wrappers ? ` -${wrappers}` : \"\"} ${JSON.stringify(context)}`)\n\n const text = view.someProp(\"clipboardTextSerializer\", f => f(slice, view)) ||\n slice.content.textBetween(0, slice.content.size, \"\\n\\n\")\n\n return {\n dom: wrap,\n text,\n slice\n }\n}\n\n// Trick from jQuery -- some elements must be wrapped in other\n// elements for innerHTML to work. I.e. if you do `div.innerHTML =\n// \"<td>..</td>\"` the table cells are ignored.\nconst wrapMap: { [node: string]: string[] } = {\n thead: [\"table\"],\n tbody: [\"table\"],\n tfoot: [\"table\"],\n caption: [\"table\"],\n colgroup: [\"table\"],\n col: [\"table\", \"colgroup\"],\n tr: [\"table\", \"tbody\"],\n td: [\"table\", \"tbody\", \"tr\"],\n th: [\"table\", \"tbody\", \"tr\"]\n}\n\nlet _detachedDoc: Document | null = null\n\nfunction detachedDoc() {\n return _detachedDoc || (_detachedDoc = document.implementation.createHTMLDocument(\"title\"))\n}\n","import { NodeSelection, Plugin } from \"prosemirror-state\";\nimport { EditorView } from \"prosemirror-view\";\nimport { Slice } from \"prosemirror-model\";\nimport { serializeForClipboard } from \"./clipboard\";\n\n/** ProseMirror internal drag state — not exposed in type definitions */\ninterface ProseMirrorDragState {\n slice: Slice;\n move: boolean;\n node?: NodeSelection;\n}\n\n/** EditorView with access to the internal `dragging` property */\ninterface EditorViewWithDrag extends EditorView {\n dragging: ProseMirrorDragState | null;\n}\n\nexport interface DragHandleOptions {\n /**\n * The width of the drag handle\n */\n dragHandleWidth: number;\n}\n\nfunction absoluteRect(element: Element) {\n const data = element.getBoundingClientRect();\n\n let ancestor = element.parentElement;\n while (ancestor && window.getComputedStyle(ancestor).position === \"static\") {\n ancestor = ancestor.parentElement;\n }\n const ancestorRect = ancestor?.getBoundingClientRect();\n\n return {\n top: data.top - (ancestorRect?.top ?? 0),\n left: data.left - (ancestorRect?.left ?? 0),\n width: data.width\n };\n}\n\nfunction nodeDOMAtCoords(coords: { x: number; y: number }, view: EditorView) {\n const editorRect = view.dom.getBoundingClientRect();\n\n // 0. Give up if outside vertical bounds or too far horizontally\n if (coords.y < editorRect.top || coords.y > editorRect.bottom) return undefined;\n if (coords.x < editorRect.left - 100 || coords.x > editorRect.right + 50) return undefined;\n\n const blockSelector = 'li, p, pre, blockquote, h1, h2, h3, h4, h5, h6, img, [data-type=\"taskList\"]';\n\n // 1. First probe exactly at the mouse coordinates\n const elem = document.elementFromPoint(coords.x, coords.y);\n const block = elem?.closest(blockSelector);\n if (block && view.dom.contains(block) && block.textContent?.trim()) {\n const li = block.closest(\"li\");\n return (li && view.dom.contains(li)) ? li : block;\n }\n\n // 2. If mouse is in the left gutter, probe horizontally into the editor\n const probeX = editorRect.left + Math.min(60, editorRect.width / 4);\n if (coords.x > probeX) return undefined;\n\n const probeElem = document.elementFromPoint(probeX, coords.y);\n const probeBlock = probeElem?.closest(blockSelector);\n if (probeBlock && probeBlock.textContent?.trim()) {\n // Ensure the found block is actually inside our editor\n if (view.dom.contains(probeBlock)) {\n const li = probeBlock.closest(\"li\");\n return (li && view.dom.contains(li)) ? li : probeBlock;\n }\n }\n\n return undefined;\n}\n\nfunction nodePosAtDOM(node: Element, view: EditorView, options: DragHandleOptions) {\n try {\n if (!view.dom.contains(node)) return null;\n const pos = view.posAtDOM(node, 0);\n const $pos = view.state.doc.resolve(pos);\n // posAtDOM(node, 0) generally returns the position inside the node.\n // We want the position right before the node to create a NodeSelection.\n if ($pos.depth > 0) {\n return $pos.before();\n }\n return pos;\n } catch (e) {\n return null;\n }\n}\n\nexport function dragHandlePlugin(options: DragHandleOptions = { dragHandleWidth: 24 }) {\n function handleDragStart(event: DragEvent, view: EditorView) {\n view.focus();\n\n if (!event.dataTransfer) return;\n\n const node = nodeDOMAtCoords({\n x: event.clientX,\n y: event.clientY\n }, view);\n\n if (!(node instanceof Element)) return;\n\n const nodePos = nodePosAtDOM(node, view, options);\n if (nodePos == null || nodePos < 0) return;\n\n const draggedNodeSelection = NodeSelection.create(view.state.doc, nodePos);\n view.dispatch(view.state.tr.setSelection(draggedNodeSelection));\n\n const slice = view.state.selection.content();\n const {\n dom,\n text\n } = serializeForClipboard(view as EditorViewWithDrag, slice);\n\n event.dataTransfer.clearData();\n event.dataTransfer.setData(\"text/html\", dom.innerHTML);\n event.dataTransfer.setData(\"text/plain\", text);\n event.dataTransfer.effectAllowed = \"copyMove\";\n\n event.dataTransfer.setDragImage(node, 0, 0);\n\n (view as EditorViewWithDrag).dragging = {\n slice,\n move: true,\n node: draggedNodeSelection\n };\n }\n\n function handleClick(event: MouseEvent, view: EditorView) {\n view.focus();\n\n view.dom.classList.remove(\"dragging\");\n\n const node = nodeDOMAtCoords({\n x: event.clientX,\n y: event.clientY\n }, view);\n\n if (!(node instanceof Element)) return;\n\n const nodePos = nodePosAtDOM(node, view, options);\n if (!nodePos) return;\n\n view.dispatch(view.state.tr.setSelection(NodeSelection.create(view.state.doc, nodePos)));\n }\n\n let dragHandleElement: HTMLElement | null = null;\n\n function hideDragHandle() {\n if (dragHandleElement) {\n dragHandleElement.classList.add(\"hide\");\n dragHandleElement.style.opacity = \"0\";\n dragHandleElement.style.pointerEvents = \"none\";\n }\n }\n\n function showDragHandle() {\n if (dragHandleElement) {\n dragHandleElement.classList.remove(\"hide\");\n dragHandleElement.style.opacity = \"1\";\n dragHandleElement.style.pointerEvents = \"auto\";\n }\n }\n\n return new Plugin({\n view: (view) => {\n dragHandleElement = document.createElement(\"div\");\n dragHandleElement.draggable = true;\n dragHandleElement.dataset.dragHandle = \"\";\n dragHandleElement.classList.add(\"drag-handle\");\n dragHandleElement.addEventListener(\"dragstart\", (e) => {\n handleDragStart(e, view);\n });\n dragHandleElement.addEventListener(\"click\", (e) => {\n handleClick(e, view);\n });\n const onMouseMove = (event: MouseEvent) => {\n if (!view.editable) {\n return;\n }\n\n const node = nodeDOMAtCoords({\n x: event.clientX,\n y: event.clientY\n }, view);\n\n if (!(node instanceof Element)) {\n hideDragHandle();\n return;\n }\n\n const compStyle = window.getComputedStyle(node);\n const lineHeight = parseInt(compStyle.lineHeight, 10);\n const paddingTop = parseInt(compStyle.paddingTop, 10);\n\n const rect = absoluteRect(node);\n if (!rect) {\n hideDragHandle();\n return;\n }\n\n rect.top += (lineHeight - 24) / 2;\n rect.top += paddingTop;\n // Li markers\n if (node.matches(\"ul:not([data-type=taskList]) li, ol li\")) {\n rect.left -= options.dragHandleWidth;\n }\n rect.width = options.dragHandleWidth;\n\n if (!dragHandleElement) return;\n\n dragHandleElement.style.left = `${rect.left - rect.width}px`;\n dragHandleElement.style.top = `${rect.top}px`;\n showDragHandle();\n };\n\n window.addEventListener(\"mousemove\", onMouseMove);\n\n hideDragHandle();\n\n view?.dom?.parentElement?.appendChild(dragHandleElement);\n\n return {\n destroy: () => {\n window.removeEventListener(\"mousemove\", onMouseMove);\n dragHandleElement?.remove?.();\n dragHandleElement = null;\n }\n };\n },\n props: {\n handleDOMEvents: {\n keydown: () => {\n hideDragHandle();\n },\n mousewheel: () => {\n hideDragHandle();\n },\n // dragging class is used for CSS\n dragstart: (view) => {\n view.dom.classList.add(\"dragging\");\n },\n drop: (view) => {\n view.dom.classList.remove(\"dragging\");\n },\n dragend: (view) => {\n view.dom.classList.remove(\"dragging\");\n }\n }\n }\n });\n}\n\nimport { dropPoint } from \"prosemirror-transform\";\n\nexport function globalDragDropPlugin() {\n let dropCursorElement: HTMLElement | null = null;\n let cleanup: (() => void) | null = null;\n\n function updateDropCursorColor(el: HTMLElement) {\n const isDark = document.documentElement.getAttribute(\"data-theme\") === \"dark\";\n const varName = isDark ? \"--color-surface-accent-300\" : \"--color-surface-accent-600\";\n const color = getComputedStyle(document.documentElement).getPropertyValue(varName).trim();\n el.style.backgroundColor = color || (isDark ? \"#cbd5e1\" : \"#475569\");\n }\n\n return new Plugin({\n view(editorView) {\n dropCursorElement = document.createElement(\"div\");\n dropCursorElement.className = \"prosemirror-dropcursor-block\";\n dropCursorElement.style.cssText = \"position: absolute; z-index: 50; pointer-events: none; height: 2px;\";\n updateDropCursorColor(dropCursorElement);\n\n // Watch for theme changes\n const observer = new MutationObserver(() => {\n if (dropCursorElement) updateDropCursorColor(dropCursorElement);\n });\n observer.observe(document.documentElement, { attributes: true,\nattributeFilter: [\"data-theme\"] });\n\n const removeCursor = () => {\n if (dropCursorElement && dropCursorElement.parentNode) {\n dropCursorElement.parentNode.removeChild(dropCursorElement);\n }\n };\n\n const getBlockInsertionPoint = (event: DragEvent, clampedX: number) => {\n const pos = editorView.posAtCoords({ left: clampedX,\ntop: event.clientY });\n if (!pos) return null;\n\n const $pos = editorView.state.doc.resolve(pos.pos);\n\n let blockDepth = 0;\n for (let i = $pos.depth; i > 0; i--) {\n const name = $pos.node(i).type.name;\n if (name === \"list_item\" || name === \"taskItem\") {\n blockDepth = i;\n break;\n }\n if ($pos.node(i).isBlock && name !== \"bullet_list\" && name !== \"ordered_list\" && name !== \"taskList\") {\n blockDepth = i;\n }\n }\n\n if (blockDepth === 0) return pos.pos;\n\n const nodeBeforePos = $pos.before(blockDepth);\n const nodeAfterPos = $pos.after(blockDepth);\n\n const domNode = editorView.nodeDOM(nodeBeforePos);\n if (domNode instanceof HTMLElement) {\n const rect = domNode.getBoundingClientRect();\n const isTopHalf = event.clientY < rect.top + rect.height / 2;\n return isTopHalf ? nodeBeforePos : nodeAfterPos;\n }\n return pos.pos;\n };\n\n const handleDragOver = (event: DragEvent) => {\n if (!editorView.editable || !editorView.dragging) return;\n\n // If it's a native slice drag (no explicitly captured node from our drag handle)\n // then we bail out here and let ProseMirror native drop logic and native dropcursor handle it\n if (!((editorView as EditorViewWithDrag).dragging as ProseMirrorDragState | null & { node?: unknown })?.node) {\n removeCursor();\n return;\n }\n\n event.preventDefault(); // browser requires this to allow drop\n\n const editorRect = editorView.dom.getBoundingClientRect();\n const clampedX = Math.max(editorRect.left + 10, Math.min(event.clientX, editorRect.right - 10));\n\n const target = getBlockInsertionPoint(event, clampedX);\n if (target === null) {\n removeCursor();\n return;\n }\n\n const $pos = editorView.state.doc.resolve(target);\n\n let rect;\n const before = $pos.nodeBefore;\n const after = $pos.nodeAfter;\n\n if (before || after) {\n const nodeDOM = editorView.nodeDOM(target - (before ? before.nodeSize : 0));\n if (nodeDOM && nodeDOM instanceof HTMLElement) {\n const nodeRect = nodeDOM.getBoundingClientRect();\n let top = before ? nodeRect.bottom : nodeRect.top;\n if (before && after) {\n const afterDOM = editorView.nodeDOM(target);\n if (afterDOM && afterDOM instanceof HTMLElement) {\n top = (top + afterDOM.getBoundingClientRect().top) / 2;\n }\n }\n rect = { left: nodeRect.left,\nright: nodeRect.right,\ntop: top - 1,\nbottom: top + 1 };\n }\n }\n\n if (!rect) {\n const coords = editorView.coordsAtPos(target);\n rect = { left: editorRect.left + 50,\nright: editorRect.right - 50,\ntop: coords.top - 1,\nbottom: coords.top + 1 };\n }\n\n const parent = editorView.dom.offsetParent as HTMLElement;\n let parentLeft = 0;\n let parentTop = 0;\n if (parent && parent !== document.body && getComputedStyle(parent).position !== \"static\") {\n const parentRect = parent.getBoundingClientRect();\n parentLeft = parentRect.left - parent.scrollLeft;\n parentTop = parentRect.top - parent.scrollTop;\n }\n\n if (!dropCursorElement!.parentNode) {\n parent.appendChild(dropCursorElement!);\n }\n\n dropCursorElement!.style.left = `${rect.left - parentLeft}px`;\n dropCursorElement!.style.top = `${rect.top - parentTop}px`;\n dropCursorElement!.style.width = `${rect.right - rect.left}px`;\n };\n\n const handleDrop = (event: DragEvent) => {\n if (!editorView.editable || !editorView.dragging) return;\n\n if (!((editorView as EditorViewWithDrag).dragging as ProseMirrorDragState | null & { node?: unknown })?.node) {\n removeCursor();\n return;\n }\n\n event.preventDefault();\n removeCursor();\n editorView.dom.classList.remove(\"dragging\");\n\n const editorRect = editorView.dom.getBoundingClientRect();\n const clampedX = Math.max(editorRect.left + 10, Math.min(event.clientX, editorRect.right - 10));\n\n const targetPos = getBlockInsertionPoint(event, clampedX);\n if (targetPos === null) return;\n\n const dragging = (editorView as EditorViewWithDrag).dragging;\n if (dragging && dragging.slice) {\n let tr = editorView.state.tr;\n if (dragging.move) {\n const { node } = dragging;\n if (node) {\n node.replace(tr); // exact native ProseMirror delete\n } else {\n tr = tr.deleteSelection();\n }\n }\n\n const mappedTarget = tr.mapping.map(targetPos);\n const beforeInsert = tr.doc;\n\n const { node, slice } = dragging;\n\n if (node && node.node) {\n let nodeToInsert: import(\"prosemirror-model\").Node | import(\"prosemirror-model\").Fragment = node.node;\n const $mapped = tr.doc.resolve(mappedTarget);\n const parentName = $mapped.parent.type.name;\n\n const isTargetList = parentName === \"bullet_list\" || parentName === \"ordered_list\";\n const isTargetTaskList = parentName === \"taskList\";\n\n // 1. Unwrap incoming lists if they don't match the destination perfectly\n if (\"type\" in nodeToInsert && nodeToInsert.type.name === \"list_item\" && !isTargetList) {\n nodeToInsert = nodeToInsert.content;\n } else if (\"type\" in nodeToInsert && nodeToInsert.type.name === \"taskItem\" && !isTargetTaskList) {\n nodeToInsert = nodeToInsert.content;\n }\n\n // 2. Wrap incoming blocks/fragments into exactly the target list type\n const isFragment = !(\"type\" in nodeToInsert);\n const needsWrap = isFragment || (\"type\" in nodeToInsert && nodeToInsert.type.name !== \"list_item\" && nodeToInsert.type.name !== \"taskItem\");\n\n if (needsWrap) {\n if (isTargetList) {\n const listItemType = editorView.state.schema.nodes.list_item;\n if (listItemType) nodeToInsert = listItemType.create(null, nodeToInsert);\n } else if (isTargetTaskList) {\n const taskItemType = editorView.state.schema.nodes.taskItem;\n if (taskItemType) nodeToInsert = taskItemType.create({ checked: false }, nodeToInsert);\n }\n }\n\n // 3. Force insertion. tr.replace slices and splits lists. tr.insert preserves the explicit boundary.\n try {\n tr = tr.insert(mappedTarget, nodeToInsert);\n } catch (e) {\n console.warn(\"Could not insert dragged node exactly at target. Attempting fallback.\", e);\n const point = dropPoint(tr.doc, mappedTarget, slice);\n if (point !== null) {\n tr = tr.replace(point, point, slice);\n }\n }\n } else if (slice) {\n // For generic slices (e.g native image dragging), we MUST use dropPoint\n // so ProseMirror finds a schema-valid depth to insert the node structure natively.\n const point = dropPoint(tr.doc, mappedTarget, slice);\n const finalTarget = point !== null ? point : mappedTarget;\n tr = tr.replace(finalTarget, finalTarget, slice);\n }\n\n if (!tr.doc.eq(beforeInsert)) {\n editorView.dispatch(tr.setMeta(\"uiEvent\", \"drop\"));\n editorView.focus();\n }\n }\n\n (editorView as EditorViewWithDrag).dragging = null;\n };\n\n const handleDragEnd = () => {\n removeCursor();\n };\n\n window.addEventListener(\"dragover\", handleDragOver, { capture: true });\n window.addEventListener(\"drop\", handleDrop, { capture: true });\n window.addEventListener(\"dragend\", handleDragEnd, { capture: true });\n\n cleanup = () => {\n removeCursor();\n observer.disconnect();\n window.removeEventListener(\"dragover\", handleDragOver, { capture: true });\n window.removeEventListener(\"drop\", handleDrop, { capture: true });\n window.removeEventListener(\"dragend\", handleDragEnd, { capture: true });\n };\n\n return {\n destroy() {\n if (cleanup) cleanup();\n }\n };\n }\n });\n}\n\n\n","import { Plugin, PluginKey, Transaction, EditorState } from \"prosemirror-state\";\nimport { Decoration, DecorationSet } from \"prosemirror-view\";\n\nexport interface HighlightRange {\n from: number\n to: number\n}\n\ninterface AutocompleteHighlightState {\n highlight?: HighlightRange\n decorationSet?: DecorationSet\n}\n\nexport const highlightDecorationKey = new PluginKey<AutocompleteHighlightState>(\"highlightDecoration\");\n\nfunction buildDecorationSet(highlight: any, doc: any) {\n const decorations: [any?] = [];\n\n if (highlight) {\n decorations.push(\n Decoration.inline(highlight.from, highlight.to, {\n class: \"dark:bg-surface-accent-700 bg-surface-accent-300\"\n })\n );\n }\n const decorationSet = DecorationSet.create(doc, decorations);\n return decorationSet;\n}\n\n/**\n * Commands to toggle the highlight\n */\nexport const highlightCommands = {\n toggleAutocompleteHighlight: (range?: HighlightRange) => (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n const { selection } = state;\n const pos = selection.from;\n\n if (!dispatch) return false;\n\n const tr = state.tr.setMeta(highlightDecorationKey, {\n pos,\n type: \"highlightDecoration\",\n remove: false,\n range\n });\n\n dispatch(tr);\n return true;\n },\n\n removeAutocompleteHighlight: () => (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n if (!dispatch) return false;\n\n const tr = state.tr.setMeta(highlightDecorationKey, {\n pos: 0,\n type: \"highlightDecoration\",\n remove: true\n });\n\n dispatch(tr);\n return true;\n }\n}\n\n/**\n * This plugin is used to highlight the current autocomplete suggestion.\n * It allows to set a range and remove it.\n */\nexport const highlightDecorationPlugin = (initialHighlight?: HighlightRange) => {\n return new Plugin<AutocompleteHighlightState>({\n key: highlightDecorationKey,\n state: {\n init: (_, { doc }) => {\n const decorationSet = initialHighlight && doc ? buildDecorationSet(initialHighlight, doc) : DecorationSet.empty;\n return {\n decorationSet,\n highlight: initialHighlight\n };\n },\n apply(transaction, oldState) {\n const action = transaction.getMeta(highlightDecorationKey);\n const highlight = action?.range;\n if (action?.type === \"highlightDecoration\") {\n\n const doc = transaction.doc;\n const { remove } = action;\n\n if (remove) {\n return {\n decorationSet: DecorationSet.empty\n };\n }\n const decorationSet = buildDecorationSet(highlight, doc);\n return {\n decorationSet: decorationSet,\n highlight\n }\n } else {\n return oldState\n }\n }\n },\n props: {\n decorations(state) {\n const autocompleteState = this.getState(state);\n if (autocompleteState?.decorationSet) {\n return autocompleteState.decorationSet\n } else {\n return DecorationSet.empty\n }\n }\n }\n });\n};\n","import {\n inputRules,\n wrappingInputRule,\n textblockTypeInputRule,\n smartQuotes,\n emDash,\n ellipsis,\n InputRule\n} from \"prosemirror-inputrules\";\nimport { schema } from \"../schema\";\nimport { MarkType } from \"prosemirror-model\";\n\nconst blockQuoteRule = wrappingInputRule(/^\\s*>\\s$/, schema.nodes.blockquote);\n\nconst orderedListRule = wrappingInputRule(\n /^(\\d+)\\.\\s$/,\n schema.nodes.ordered_list,\n (match) => ({ order: +match[1] }),\n (match, node) => node.childCount + node.attrs.order === +match[1]\n);\n\nconst bulletListRule = wrappingInputRule(/^\\s*([-+*])\\s$/, schema.nodes.bullet_list);\n\nconst taskListRule = wrappingInputRule(/^\\s*(\\[ \\])\\s$/, schema.nodes.task_list);\n\nconst codeBlockRule = textblockTypeInputRule(/^```$/, schema.nodes.code_block);\n\nconst headingRule = textblockTypeInputRule(\n new RegExp(\"^(#{1,6})\\\\s$\"),\n schema.nodes.heading,\n (match) => ({ level: match[1].length })\n);\n\nconst horizontalRuleInputRule = new InputRule(\n /^(?:---|—-|___\\s|\\*\\*\\*\\s)$/,\n (state, match, start, end) => {\n const tr = state.tr;\n tr.replaceWith(start - 1, end, schema.nodes.horizontal_rule.create());\n return tr;\n }\n);\n\nfunction markInputRule(regexp: RegExp, markType: MarkType, getAttrs?: (match: RegExpMatchArray) => Record<string, any>) {\n return new InputRule(regexp, (state, match, start, end) => {\n const attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n const tr = state.tr;\n if (match[1]) {\n const textStart = start + match[0].indexOf(match[1]);\n const textEnd = textStart + match[1].length;\n if (textEnd < end) tr.delete(textEnd, end);\n if (textStart > start) tr.delete(start, textStart);\n end = start + match[1].length;\n }\n tr.addMark(start, end, markType.create(attrs));\n tr.removeStoredMark(markType);\n return tr;\n });\n}\n\nconst strongRule = markInputRule(/(?:\\*\\*|__)([^*_]+)(?:\\*\\*|__)$/, schema.marks.bold);\nconst emRule = markInputRule(/(?:^|[^*_])(?:\\*|_)([^*_]+)(?:\\*|_)$/, schema.marks.italic);\nconst codeRule = markInputRule(/(?:`)([^`]+)(?:`)$/, schema.marks.code);\nconst strikeRule = markInputRule(/(?:~~)([^~]+)(?:~~)$/, schema.marks.strike);\n\nexport const markdownInputRules = inputRules({\n rules: [\n ...smartQuotes,\n ellipsis,\n emDash,\n blockQuoteRule,\n orderedListRule,\n bulletListRule,\n codeBlockRule,\n headingRule,\n taskListRule,\n horizontalRuleInputRule,\n strongRule,\n emRule,\n codeRule,\n strikeRule\n ]\n});\n","import { Plugin, PluginKey } from \"prosemirror-state\";\nimport { Decoration, DecorationSet } from \"prosemirror-view\";\nimport { Node } from \"prosemirror-model\";\n\nexport const placeholderPluginKey = new PluginKey(\"placeholderPlugin\");\n\nfunction isNodeEmpty(node: Node) {\n const defaultContent = node.type.createAndFill()\n if (!defaultContent) return true\n return node.content.eq(defaultContent.content)\n}\n\nexport function placeholderPlugin(text: string) {\n return new Plugin({\n key: placeholderPluginKey,\n props: {\n decorations: (state) => {\n const doc = state.doc;\n const decorations: Decoration[] = [];\n const isEmptyDoc = doc.childCount === 1 && doc.firstChild?.isTextblock && doc.firstChild.content.size === 0;\n const { anchor } = state.selection;\n\n doc.descendants((node, pos) => {\n const isEmpty = !node.isLeaf && isNodeEmpty(node);\n\n if (isEmpty) {\n // Only show placeholder on the node that contains the cursor.\n // For a single-node empty doc, always show it (editor-empty state).\n const nodeEnd = pos + node.nodeSize;\n const hasCursor = anchor >= pos && anchor <= nodeEnd;\n\n if (!hasCursor && !isEmptyDoc) {\n return false;\n }\n\n const classes = [\"is-empty\"];\n if (isEmptyDoc) {\n classes.push(\"is-editor-empty\");\n }\n\n decorations.push(\n Decoration.node(pos, pos + node.nodeSize, {\n class: classes.join(\" \"),\n \"data-placeholder\": text\n })\n );\n }\n return false; // Stop descending\n });\n\n return DecorationSet.create(doc, decorations);\n }\n }\n });\n}\n","import { keymap } from \"prosemirror-keymap\";\nimport { history, undo, redo } from \"prosemirror-history\";\nimport { slashCommandPlugin } from \"./slashCommandPlugin\";\nimport { dragHandlePlugin, globalDragDropPlugin } from \"../extensions/drag-and-drop\";\nimport { baseKeymap, setBlockType, toggleMark, chainCommands, exitCode, joinUp, joinDown, lift, selectParentNode } from \"prosemirror-commands\";\nimport { highlightDecorationPlugin } from \"../extensions/HighlightDecorationExtension\";\nimport { textLoadingDecorationPlugin } from \"../extensions/TextLoadingDecorationExtension\";\nimport { splitListItem, liftListItem, sinkListItem } from \"prosemirror-schema-list\";\nimport { schema } from \"../schema\";\nimport { Plugin } from \"prosemirror-state\";\nimport { gapCursor } from \"prosemirror-gapcursor\";\nimport { dropCursor } from \"prosemirror-dropcursor\";\nimport { markdownInputRules } from \"./inputrules\";\nimport { placeholderPlugin } from \"./placeholderPlugin\";\nimport { goToNextCell } from \"prosemirror-tables\";\n\nconst customKeymap = {\n \"Tab\": goToNextCell(1),\n \"Shift-Tab\": goToNextCell(-1),\n \"Mod-z\": undo,\n \"Mod-y\": redo,\n \"Shift-Mod-z\": redo,\n \"Mod-b\": toggleMark(schema.marks.bold),\n \"Mod-i\": toggleMark(schema.marks.italic),\n \"Mod-u\": toggleMark(schema.marks.underline),\n \"Mod-Shift-s\": toggleMark(schema.marks.strike),\n \"Mod-e\": toggleMark(schema.marks.code),\n \"Mod-Shift-h\": toggleMark(schema.marks.highlight),\n\n \"Enter\": splitListItem(schema.nodes.list_item),\n \"Shift-Enter\": splitListItem(schema.nodes.task_item),\n\n \"Mod-[\": liftListItem(schema.nodes.list_item),\n \"Mod-]\": sinkListItem(schema.nodes.list_item),\n\n \"Shift-Mod-8\": setBlockType(schema.nodes.bullet_list),\n \"Shift-Mod-9\": setBlockType(schema.nodes.ordered_list),\n\n \"Mod-Alt-1\": setBlockType(schema.nodes.heading, { level: 1 }),\n \"Mod-Alt-2\": setBlockType(schema.nodes.heading, { level: 2 }),\n \"Mod-Alt-3\": setBlockType(schema.nodes.heading, { level: 3 }),\n\n \"Mod-Alt-0\": setBlockType(schema.nodes.paragraph)\n};\n\nexport const getCorePlugins = (): Plugin[] => [\n history(),\n keymap(customKeymap),\n keymap(baseKeymap),\n globalDragDropPlugin(),\n gapCursor(),\n slashCommandPlugin(),\n dragHandlePlugin(),\n highlightDecorationPlugin(),\n textLoadingDecorationPlugin(),\n markdownInputRules,\n placeholderPlugin(\"Press '/' for commands\")\n];\n","import React, { ReactNode } from \"react\";\nimport { createRoot, Root } from \"react-dom/client\";\nimport { Node as ProseMirrorNode } from \"prosemirror-model\";\nimport { EditorView, NodeView } from \"prosemirror-view\";\n\nexport interface ReactNodeViewProps {\n node: ProseMirrorNode;\n view: EditorView;\n getPos: () => number | undefined;\n}\n\nexport type ReactNodeViewComponent = React.FC<ReactNodeViewProps>;\n\n/**\n * A utility class that implements the ProseMirror NodeView interface but delegates rendering\n * to a React component.\n * Note: This uses createRoot, so it does not automatically inherit React Contexts.\n * If contexts are needed, wrap them manually or use a portal-based approach instead.\n */\nexport class ReactNodeView implements NodeView {\n public node: ProseMirrorNode;\n public view: EditorView;\n public getPos: () => number | undefined;\n public dom: HTMLElement;\n public contentDOM?: HTMLElement;\n private root: Root;\n private Component: ReactNodeViewComponent;\n\n constructor(\n node: ProseMirrorNode,\n view: EditorView,\n getPos: () => number | undefined,\n Component: ReactNodeViewComponent,\n as = \"div\",\n className?: string,\n contentDOMElement?: HTMLElement\n ) {\n this.node = node;\n this.view = view;\n this.getPos = getPos;\n this.Component = Component;\n\n this.dom = document.createElement(as);\n if (className) this.dom.className = className;\n if (contentDOMElement) {\n this.contentDOM = contentDOMElement;\n }\n\n const container = document.createElement(\"div\");\n // We render React next to contentDOM\n this.dom.appendChild(container);\n if (this.contentDOM) {\n this.dom.appendChild(this.contentDOM);\n }\n\n this.root = createRoot(container);\n this.render();\n }\n\n private render() {\n this.root.render(\n <this.Component\n node={this.node}\n view={this.view}\n getPos={this.getPos}\n />\n );\n }\n\n update(node: ProseMirrorNode): boolean {\n if (node.type !== this.node.type) {\n return false;\n }\n this.node = node;\n this.render();\n return true;\n }\n\n destroy() {\n this.root.unmount();\n }\n\n ignoreMutation(mutation: any) {\n if (!this.contentDOM) {\n return true;\n }\n return !this.contentDOM.contains(mutation.target);\n }\n}\n","import React from \"react\";\nimport { ReactNodeViewProps } from \"./ReactNodeView\";\n\nexport const TaskItemComponent: React.FC<ReactNodeViewProps> = ({ node, view, getPos }) => {\n const checked = node.attrs.checked;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const pos = getPos();\n if (typeof pos !== \"number\") return;\n\n view.dispatch(\n view.state.tr.setNodeMarkup(pos, undefined, {\n ...node.attrs,\n checked: e.target.checked\n })\n );\n };\n\n return (\n <label contentEditable={false} className=\"flex items-start select-none px-1\">\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={handleChange}\n className=\"mt-1 flex-shrink-0 cursor-pointer\"\n />\n </label>\n );\n};\n","import React from \"react\";\nimport { ReactNodeViewProps } from \"./ReactNodeView\";\nimport { cls, defaultBorderMixin } from \"@rebasepro/ui\";\n\nexport const ImageComponent: React.FC<ReactNodeViewProps> = ({ node, view, getPos }) => {\n // If the node is selected\n const selected = view.state.selection.from === getPos();\n\n return (\n <img\n src={node.attrs.src}\n alt={node.attrs.alt || \"\"}\n title={node.attrs.title || \"\"}\n className={cls(\n \"rounded-lg max-w-full !m-0\",\n selected ? \"\" : \"\"\n )}\n />\n );\n};\n","import { Node as ProseMirrorNode } from \"prosemirror-model\";\nimport { EditorView, NodeView } from \"prosemirror-view\";\nimport { ReactNodeView, ReactNodeViewComponent } from \"./ReactNodeView\";\nimport { TaskItemComponent } from \"./TaskItemComponent\";\nimport { ImageComponent } from \"./ImageComponent\";\n\nfunction createReactNodeView(\n Component: ReactNodeViewComponent,\n as = \"div\",\n className?: string,\n createContentDOM?: () => HTMLElement\n) {\n return (node: ProseMirrorNode, view: EditorView, getPos: () => number | undefined): NodeView => {\n const contentDOM = createContentDOM ? createContentDOM() : undefined;\n return new ReactNodeView(node, view, getPos, Component, as, className, contentDOM);\n };\n}\n\nexport const nodeViews = {\n task_item: createReactNodeView(\n TaskItemComponent,\n \"li\",\n \"flex items-start\",\n () => {\n const dom = document.createElement(\"div\");\n dom.className = \"flex-grow min-w-0\";\n return dom;\n }\n ),\n image: createReactNodeView(\n ImageComponent,\n \"span\",\n \"inline-block w-full\"\n )\n};\n","import { useState, useEffect, useRef, useLayoutEffect } from \"react\";\nimport { EditorState, Transaction, Plugin } from \"prosemirror-state\";\nimport { EditorView } from \"prosemirror-view\";\nimport { schema } from \"../schema\";\nimport { getCorePlugins } from \"../plugins\";\nimport { parser } from \"../markdown\";\nimport { nodeViews } from \"../nodeViews\";\nimport { createDropImagePlugin } from \"../extensions/Image\";\nimport { columnResizing, tableEditing } from \"prosemirror-tables\";\n\nconst trailingNodePlugin = new Plugin({\n appendTransaction: (_, oldState, newState) => {\n const doc = newState.doc;\n if (doc.lastChild && doc.lastChild.type.name !== \"paragraph\") {\n return newState.tr.insert(doc.content.size, newState.schema.nodes.paragraph.create());\n }\n return null;\n }\n});\n\ninterface UseProseMirrorProps {\n initialContent?: string | any;\n editable?: boolean;\n handleImageUpload?: (file: File) => Promise<string>;\n}\n\nexport function useProseMirror({ initialContent, editable = true, handleImageUpload }: UseProseMirrorProps) {\n const plugins = [\n ...getCorePlugins(),\n columnResizing(),\n tableEditing(),\n trailingNodePlugin\n ];\n if (handleImageUpload) {\n plugins.push(createDropImagePlugin(handleImageUpload));\n }\n\n const defaultState = EditorState.create({\n doc: typeof initialContent === \"string\"\n ? parser.parse(initialContent)\n : initialContent\n ? schema.nodeFromJSON(initialContent)\n : schema.node(\"doc\", null, [schema.node(\"paragraph\")]),\n schema,\n plugins\n });\n\n const [state, setState] = useState<EditorState>(defaultState);\n const [view, setView] = useState<EditorView | null>(null);\n\n const editorRef = useRef<HTMLDivElement>(null);\n const viewRef = useRef<EditorView | null>(null);\n\n useLayoutEffect(() => {\n if (!editorRef.current) return;\n\n const editorView = new EditorView(editorRef.current, {\n state: defaultState,\n editable: () => editable,\n dispatchTransaction: (tr: Transaction) => {\n const newState = editorView.state.apply(tr);\n editorView.updateState(newState);\n setState(newState);\n },\n nodeViews: nodeViews,\n transformPastedHTML(html: string) {\n // Strip inline styles and classes from pasted HTML so we don't\n // get textStyle marks (color, font-size, etc.) that have no\n // markdown representation. This makes paste look consistent.\n const div = document.createElement(\"div\");\n div.innerHTML = html;\n div.querySelectorAll(\"*\").forEach((el) => {\n el.removeAttribute(\"style\");\n el.removeAttribute(\"class\");\n el.removeAttribute(\"color\");\n el.removeAttribute(\"bgcolor\");\n el.removeAttribute(\"face\");\n });\n return div.innerHTML;\n }\n });\n\n // Patch posAtCoords to allow dropping/interacting anywhere horizontally natively\n const originalPosAtCoords = editorView.posAtCoords.bind(editorView);\n editorView.posAtCoords = (coords: { left: number, top: number }) => {\n const res = originalPosAtCoords(coords);\n if (!res) {\n const editorRect = editorView.dom.getBoundingClientRect();\n // If it's literally anywhere to the left of the actual ProseMirror content block\n if (coords.left <= editorRect.left) {\n const probeX = editorRect.left + Math.min(60, editorRect.width / 4);\n return originalPosAtCoords({ left: probeX,\ntop: coords.top });\n }\n // Or if it's anywhere to the right\n if (coords.left >= editorRect.right) {\n const probeX = editorRect.right - Math.min(60, editorRect.width / 4);\n return originalPosAtCoords({ left: probeX,\ntop: coords.top });\n }\n }\n return res;\n };\n\n viewRef.current = editorView;\n setView(editorView);\n\n return () => {\n editorView.destroy();\n viewRef.current = null;\n };\n }, []);\n\n // Effect to update editable status without re-mounting\n useEffect(() => {\n if (viewRef.current) {\n viewRef.current.setProps({ editable: () => editable });\n }\n }, [editable]);\n\n return {\n state,\n view,\n editorRef\n };\n}\n","\"use client\";\nimport React, { useEffect, useState, useRef, useMemo } from \"react\";\nimport { EditorState } from \"prosemirror-state\";\nimport { cls, defaultBorderMixin, Separator, useInjectStyles, TextareaAutosize } from \"@rebasepro/ui\";\nimport { useTranslation } from \"@rebasepro/core\";\nimport { EditorBubble, ImageBubble, SlashCommandMenu, TableBubble, type JSONContent } from \"./components\";\nimport { NodeSelector } from \"./selectors/node-selector\";\nimport { LinkSelector } from \"./selectors/link-selector\";\nimport { TextButtons } from \"./selectors/text-buttons\";\nimport { removeClassesFromJson } from \"./utils/remove_classes\";\nimport { parser, serializer } from \"./markdown\";\nimport { EditorAIController } from \"./types\";\nimport { useProseMirror } from \"./hooks/useProseMirror\";\nimport { ProseMirrorContext } from \"./hooks/useProseMirrorContext\";\nimport { highlightCommands } from \"./extensions/HighlightDecorationExtension\";\nimport { schema } from \"./schema\";\n\nexport type CustomEditorComponent = {\n name: string,\n component: React.FC\n};\n\nexport interface MarkdownEditorConfig {\n html?: boolean;\n transformPastedText?: boolean;\n}\n\nexport type RebaseEditorTextSize = \"sm\" | \"base\" | \"lg\";\n\nexport type RebaseEditorProps = {\n content?: JSONContent | string,\n onMarkdownContentChange?: (content: string) => void,\n onJsonContentChange?: (content: JSONContent | null) => void,\n onHtmlContentChange?: (content: string) => void,\n handleImageUpload: (file: File) => Promise<string>,\n version?: number,\n textSize?: RebaseEditorTextSize,\n highlight?: { from: number, to: number },\n aiController?: EditorAIController,\n customComponents?: CustomEditorComponent[];\n disabled?: boolean;\n markdownConfig?: MarkdownEditorConfig;\n};\n\nconst proseClasses = {\n \"sm\": \"prose-sm\",\n \"base\": \"prose-base\",\n \"lg\": \"prose-lg\"\n}\n\nexport const RebaseEditor = ({\n content,\n onJsonContentChange,\n onHtmlContentChange,\n onMarkdownContentChange,\n version,\n textSize = \"base\",\n highlight,\n handleImageUpload,\n aiController,\n disabled,\n markdownConfig\n}: RebaseEditorProps) => {\n const { t } = useTranslation();\n\n const [openNode, setOpenNode] = useState(false);\n const [openLink, setOpenLink] = useState(false);\n\n const [isMarkdownMode, setIsMarkdownMode] = useState(false);\n const [internalMarkdown, setInternalMarkdown] = useState<string>(\"\");\n\n useEffect(() => {\n if (!isMarkdownMode) return;\n const timeout = setTimeout(() => {\n if (callbacksRef.current.onMarkdownContentChange) {\n callbacksRef.current.onMarkdownContentChange(internalMarkdown);\n }\n }, 250);\n return () => clearTimeout(timeout);\n }, [internalMarkdown, isMarkdownMode]);\n\n const handleToggleMarkdown = () => {\n if (!isMarkdownMode) {\n if (view) {\n setInternalMarkdown(serializer.serialize(view.state.doc));\n }\n setIsMarkdownMode(true);\n } else {\n if (view) {\n const newDoc = parser.parse(internalMarkdown);\n if (newDoc) {\n const tr = view.state.tr.replaceWith(0, view.state.doc.content.size, newDoc.content);\n view.dispatch(tr);\n }\n }\n setIsMarkdownMode(false);\n }\n };\n\n const handleMarkdownChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setInternalMarkdown(e.target.value);\n };\n\n const handleMarkdownBlur = () => {\n const { onMarkdownContentChange, onJsonContentChange } = callbacksRef.current;\n if (onMarkdownContentChange) {\n onMarkdownContentChange(internalMarkdown);\n }\n if (onJsonContentChange) {\n try {\n const newDoc = parser.parse(internalMarkdown);\n if (newDoc) {\n onJsonContentChange(removeClassesFromJson(newDoc.toJSON()) as JSONContent);\n }\n } catch (e) {\n console.warn(\"Could not parse markdown to JSON\", e);\n }\n }\n };\n\n useInjectStyles(\"Editor\", cssStyles);\n\n const callbacksRef = useRef({ onMarkdownContentChange,\nonJsonContentChange });\n useEffect(() => {\n callbacksRef.current = { onMarkdownContentChange,\nonJsonContentChange };\n }, [onMarkdownContentChange, onJsonContentChange]);\n\n const flushChanges = (currentState: EditorState) => {\n const { onMarkdownContentChange, onJsonContentChange } = callbacksRef.current;\n if (onMarkdownContentChange) {\n try {\n const markdown = serializer.serialize(currentState.doc);\n onMarkdownContentChange(markdown);\n } catch (e) {\n console.warn(\"[RebaseEditor] Could not serialize editor state to markdown:\", e);\n }\n }\n if (onJsonContentChange) {\n const jsonContent = removeClassesFromJson(currentState.doc.toJSON()) as JSONContent;\n onJsonContentChange(jsonContent);\n }\n };\n\n const { state, view, editorRef } = useProseMirror({\n initialContent: content,\n editable: !disabled,\n handleImageUpload\n });\n\n // When `version` changes externally (e.g. form discard/reset), re-parse the\n // `content` prop and replace the ProseMirror document so the editor reflects\n // the reverted value.\n const versionRef = useRef(version);\n useEffect(() => {\n if (versionRef.current === version) return; // skip initial render\n versionRef.current = version;\n if (!view) return;\n try {\n const newDoc = typeof content === \"string\"\n ? parser.parse(content ?? \"\")\n : content\n ? schema.nodeFromJSON(content)\n : schema.node(\"doc\", null, [schema.node(\"paragraph\")]);\n if (newDoc) {\n const tr = view.state.tr.replaceWith(0, view.state.doc.content.size, newDoc.content);\n view.dispatch(tr);\n }\n } catch (e) {\n console.warn(\"[RebaseEditor] Could not reset editor content:\", e);\n }\n // Also reset raw-markdown textarea if the user is in source mode\n if (isMarkdownMode) {\n setInternalMarkdown(typeof content === \"string\" ? content : \"\");\n }\n // Reset the settling window so the replacement dispatch above is NOT\n // treated as a user edit (which would fire onChange back to the form).\n mountTimeRef.current = Date.now();\n hasUserEditedRef.current = false;\n }, [version]);\n\n const doc = state?.doc;\n // Use a time-based settling window instead of a single-skip flag.\n // The trailingNodePlugin fires appendTransaction on mount (adding a trailing\n // paragraph), which creates a second doc change after the initial parse.\n // A single-skip flag misses that second change. Instead, we skip ALL doc\n // changes within the first 500ms after the view is created.\n const mountTimeRef = useRef(Date.now());\n const hasUserEditedRef = useRef(false);\n useEffect(() => {\n if (!state) return;\n // Skip all doc changes during the initial settling window (500ms).\n // This covers both the initial parse AND the trailingNodePlugin's\n // appendTransaction that adds a trailing paragraph.\n const elapsed = Date.now() - mountTimeRef.current;\n if (elapsed < 500 && !hasUserEditedRef.current) {\n return;\n }\n hasUserEditedRef.current = true;\n const timeout = setTimeout(() => {\n flushChanges(state);\n }, 250);\n return () => clearTimeout(timeout);\n }, [doc]);\n\n useEffect(() => {\n if (!view) return;\n const dom = view.dom;\n const handleBlur = () => {\n // Don't flush during the initial settling window — the editor\n // hasn't been interacted with yet, and the serialized output\n // may differ from the input due to parse→serialize normalization.\n if (!hasUserEditedRef.current) {\n const elapsed = Date.now() - mountTimeRef.current;\n if (elapsed < 500) return;\n }\n flushChanges(view.state);\n };\n dom.addEventListener(\"blur\", handleBlur);\n return () => dom.removeEventListener(\"blur\", handleBlur);\n }, [view]);\n\n\n useEffect(() => {\n if (view) {\n if (highlight) {\n highlightCommands.toggleAutocompleteHighlight(highlight)(view.state, view.dispatch);\n } else {\n highlightCommands.removeAutocompleteHighlight()(view.state, view.dispatch);\n }\n }\n }, [highlight?.from, highlight?.to]);\n\n const proseClass = proseClasses[textSize];\n\n\n return (\n <div className=\"relative min-h-[200px] w-full\">\n <button\n type=\"button\"\n onClick={handleToggleMarkdown}\n title={isMarkdownMode ? \"Switch to Visual Editor\" : \"Switch to Markdown\"}\n className=\"absolute top-2 right-2 z-10 px-2 py-1 text-xs font-medium text-surface-400 hover:text-surface-700 dark:text-surface-600 dark:hover:text-surface-300 transition-colors opacity-50 hover:opacity-100 bg-transparent rounded\"\n >\n {isMarkdownMode ? \"Visual\" : \"Markdown\"}\n </button>\n\n <ProseMirrorContext.Provider value={useMemo(() => ({ state,\nview }), [state, view])}>\n\n <div style={{ display: isMarkdownMode ? \"none\" : \"block\" }}>\n <div\n ref={editorRef}\n className={cls(\"relative prose dark:prose-invert\", proseClass, \"prose-headings:font-title prose-headings:font-normal prose-strong:font-semibold prose-code:font-normal prose-blockquote:font-normal prose-a:font-normal font-default focus:outline-none max-w-full p-12\")}\n />\n\n {view && (\n <>\n <EditorBubble\n options={{\n placement: \"top\",\n offset: 6\n }}\n className={cls(\"flex w-fit max-w-[90vw] h-10 overflow-hidden rounded border bg-white dark:bg-surface-800 shadow\", defaultBorderMixin)}\n >\n <NodeSelector portalContainer={editorRef.current} open={openNode} onOpenChange={setOpenNode}/>\n <Separator orientation=\"vertical\"/>\n <LinkSelector open={openLink} onOpenChange={setOpenLink}/>\n <Separator orientation=\"vertical\"/>\n <TextButtons/>\n </EditorBubble>\n\n <ImageBubble\n options={{\n placement: \"bottom\",\n offset: 6\n }}\n />\n <TableBubble/>\n </>\n )}\n\n <SlashCommandMenu upload={handleImageUpload} aiController={aiController}/>\n </div>\n\n {isMarkdownMode && (\n <TextareaAutosize\n value={internalMarkdown}\n onChange={handleMarkdownChange}\n onBlur={handleMarkdownBlur}\n className={cls(\n \"w-full h-full min-h-[200px] p-12 bg-transparent resize-none font-mono focus:ring-0\",\n proseClass\n )}\n style={{\n tabSize: 4,\n outline: \"none\",\n border: \"none\",\n boxShadow: \"none\"\n }}\n />\n )}\n\n </ProseMirrorContext.Provider>\n </div>\n );\n};\n\n\nconst cssStyles = `\n.ProseMirror {\n box-shadow: none !important;\n}\n.ProseMirror .is-editor-empty:first-child::before {\n content: attr(data-placeholder);\n float: left;\n color: rgb(100 116 139); //500\n pointer-events: none;\n height: 0;\n}\n.ProseMirror .is-empty::before {\n content: attr(data-placeholder);\n float: left;\n color: rgb(100 116 139); //500\n pointer-events: none;\n height: 0;\n}\n\n[data-theme=\"dark\"] {\n .ProseMirror .is-empty::before {\n color: rgb(100 116 139); //500\n }\n}\n\n.is-empty {\n cursor: text;\n color: rgb(100 116 139); //500\n}\n\n.ProseMirror img {\n transition: filter 0.1s ease-in-out;\n}\n.ProseMirror img:hover {\n cursor: pointer;\n filter: brightness(90%);\n}\n.ProseMirror img.ProseMirror-selectednode {\n filter: brightness(90%);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000) !important;\n}\n\nul[data-type=\"taskList\"] li > label {\n margin-right: 0.2rem;\n user-select: none;\n}\n@media screen and (max-width: 768px) {\n ul[data-type=\"taskList\"] li > label {\n margin-right: 0.5rem;\n }\n}\n[data-theme=\"dark\"] ul[data-type=\"taskList\"] li > label input[type=\"checkbox\"] {\n background-color: rgb(30 41 59);\n border: 2px solid #666;\n}\n[data-theme=\"dark\"] ul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]:hover { background-color: rgb(51 65 85); }\n[data-theme=\"dark\"] ul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]:active { background-color: rgb(71 85 105); }\nul[data-type=\"taskList\"] li > label input[type=\"checkbox\"] {\n -webkit-appearance: none;\n appearance: none;\n background-color: white;\n margin: 0;\n cursor: pointer;\n width: 1.2em;\n height: 1.2em;\n position: relative;\n top: 5px;\n border: 2px solid #777;\n border-radius: 0.25em;\n margin-right: 0.3rem;\n display: grid;\n place-content: center;\n}\nul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]:hover { background-color: rgb(241 245 249); }\nul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]:active { background-color: rgb(226 232 240); }\nul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]::before {\n content: \"\";\n width: 0.65em;\n height: 0.65em;\n transform: scale(0);\n transition: 120ms transform ease-in-out;\n box-shadow: inset 1em 1em;\n transform-origin: center;\n clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%);\n}\nul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]:checked::before { transform: scale(1); }\n\n[data-theme=\"dark\"] {\n ul[data-type=\"taskList\"] li[data-checked=\"true\"] > div > p {\n color: rgb(226 232 240);\n text-decoration: line-through;\n text-decoration-thickness: 2px;\n }\n}\nul[data-type=\"taskList\"] li[data-checked=\"true\"] > div > p {\n color: rgb(51 65 85);\n text-decoration: line-through;\n text-decoration-thickness: 2px;\n}\n.tippy-box { max-width: 400px !important; }\n\n.ProseMirror:not(.dragging) .ProseMirror-selectednode {\n background-color: rgb(219 234 254);\n transition: background-color 0.2s;\n box-shadow: none;\n}\n[data-theme=\"dark\"] .ProseMirror:not(.dragging) .ProseMirror-selectednode {\n background-color: rgb(51 65 85);\n}\n.prose-base table p { margin: 0; }\n\n.drag-handle {\n position: absolute;\n opacity: 1;\n transition: opacity ease-in 0.2s;\n border-radius: 0.25rem;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10' style='fill: rgba(128, 128, 128, 0.9)'%3E%3Cpath d='M3,2 C2.44771525,2 2,1.55228475 2,1 C2,0.44771525 2.44771525,0 3,0 C3.55228475,0 4,0.44771525 4,1 C4,1.55228475 3.55228475,2 3,2 Z M3,6 C2.44771525,6 2,5.55228475 2,5 C2,4.44771525 2.44771525,4 3,4 C3.55228475,4 4,4.44771525 4,5 C4,5.55228475 3.55228475,6 3,6 Z M3,10 C2.44771525,10 2,9.55228475 2,9 C2,8.44771525 2.44771525,8 3,8 C3.55228475,8 4,8.44771525 4,9 C4,9.55228475 3.55228475,10 3,10 Z M7,2 C6.44771525,2 6,1.55228475 6,1 C6,0.44771525 6.44771525,0 7,0 C7.55228475,0 8,0.44771525 8,1 C8,1.55228475 7.55228475,2 7,2 Z M7,6 C6.44771525,6 6,5.55228475 6,5 C6,4.44771525 6.44771525,4 7,4 C7.55228475,4 8,4.44771525 8,5 C8,5.55228475 7.55228475,6 7,6 Z M7,10 C6.44771525,10 6,9.55228475 6,9 C6,8.44771525 6.44771525,8 7,8 C7,8.44771525 7,9 7,9 C7,9.55228475 7,10 7,10 Z'%3E%3C/path%3E%3C/svg%3E\");\n background-size: calc(0.5em + 0.375rem) calc(0.5em + 0.375rem);\n background-repeat: no-repeat;\n background-position: center;\n width: 1.2rem;\n height: 1.5rem;\n z-index: 100;\n cursor: grab;\n}\n.drag-handle::before {\n content: '';\n position: absolute;\n top: -10px;\n bottom: -10px;\n left: -20px; \n right: 0px;\n z-index: -1;\n}\n.drag-handle:hover { background-color: rgb(241 245 249); transition: background-color 0.2s; }\n.drag-handle:active { background-color: rgb(226 232 240); transition: background-color 0.2s; }\n.drag-handle.hide { opacity: 0; pointer-events: none; }\n@media screen and (max-width: 600px) { .drag-handle { display: none; pointer-events: none; } }\n[data-theme=\"dark\"] .drag-handle:hover { background-color: rgb(51 65 85); }\n[data-theme=\"dark\"] .drag-handle:active { background-color: rgb(51 65 85); }\n.prosemirror-dropcursor-block {\n background-color: var(--color-surface-accent-600);\n}\n[data-theme=\"dark\"] .prosemirror-dropcursor-block {\n background-color: var(--color-surface-accent-300);\n}\n\n.ProseMirror table {\n border-collapse: separate;\n border-spacing: 0;\n table-layout: fixed;\n width: 100%;\n margin: 1em 0;\n overflow: hidden;\n border-radius: 0.375rem;\n border: 1px solid #e5e7eb;\n}\n[data-theme=\"dark\"] .ProseMirror table {\n border-color: #374151;\n}\n\n.ProseMirror td, .ProseMirror th {\n min-width: 1em;\n padding: 8px 10px;\n vertical-align: top;\n box-sizing: border-box;\n position: relative;\n border-right: 1px solid #e5e7eb;\n border-bottom: 1px solid #e5e7eb;\n}\n[data-theme=\"dark\"] .ProseMirror td, [data-theme=\"dark\"] .ProseMirror th {\n border-right-color: #374151;\n border-bottom-color: #374151;\n}\n\n.ProseMirror tr:last-child td, .ProseMirror tr:last-child th {\n border-bottom: none;\n}\n.ProseMirror th:last-child, .ProseMirror td:last-child {\n border-right: none;\n}\n\n.ProseMirror td {\n background-color: transparent;\n}\n\n.ProseMirror th {\n font-weight: 600;\n text-align: left;\n background-color: #f3f4f6;\n color: #374151;\n}\n[data-theme=\"dark\"] .ProseMirror td {\n background-color: transparent;\n}\n[data-theme=\"dark\"] .ProseMirror th {\n background-color: rgba(255, 255, 255, 0.05);\n color: #d1d5db;\n}\n`;\n"],"names":["ProseMirrorContext","createContext","state","view","useProseMirrorContext","useContext","EditorBubble","forwardRef","t0","ref","$","_c","children","options","className","menuRef","useRef","show","setShow","useState","t1","t2","timer","setTimeout","selection","empty","isImage","doc","nodesBetween","from","to","node","type","name","NodeSelection","clearTimeout","useEffect","t3","offset","placement","current","start","coordsAtPos","end","virtualEl","getBoundingClientRect","top","Math","min","bottom","max","left","right","width","height","x","y","cleanup","autoUpdate","t4","computePosition","middleware","flip","shift","strategy","then","t5","Object","assign","style","visibility","Symbol","for","position","zIndex","t6","_temp","displayName","e_0","e","preventDefault","EditorBubbleItem","asChild","onSelect","rest","Comp","Slot","SlashCommandPluginKey","PluginKey","slashCommandPlugin","Plugin","key","init","active","apply","tr","value","oldState","newState","meta","getMeta","undefined","TextSelection","$anchor","parent","textBefore","textBetween","parentOffset","match","dismissed","query","pos","length","range","onFileRead","readerEvent","upload","image","schema","plugin","plugins","find","p","ImagePluginKey","console","error","decoId","random","toString","substring","placeholder","document","createElement","imageElement","setAttribute","defaultBorderMixin","src","target","result","appendChild","deco","Decoration","widget","id","decorationSet","getState","add","dispatch","setMeta","debug","replacePlaceholder","currentDecos","foundDecos","spec","warn","currentPos","imageNode","nodes","create","replaceWith","remove","preloader","Image","onload","onerror","createDropImagePlugin","DecorationSet","old","map","mapping","props","handleDOMEvents","dragover","event","dataTransfer","types","includes","drop","files","Array","images","filter","file","test","log","forEach","posAtCoords","clientX","clientY","reader","FileReader","readAsDataURL","handlePaste","html","clipboardData","getData","items","anyImageFound","item","startsWith","getAsFile","decorations","loadingDecorationKey","textLoadingCommands","toggleLoadingDecoration","loadingHtml","removeLoadingDecoration","textLoadingDecorationPlugin","hasDecoration","action","decoration","container","innerHTML","span","innerText","suggestionItems","title","description","searchTerms","icon","iconSize","small","command","deleteRange","setBlockType","paragraph","wrapInList","task_list","heading","level","bullet_list","ordered_list","wrapIn","blockquote","code_block","input","accept","onchange","f","click","aiController","setSubView","autocompleteSuggestionItem","Error","textBeforeCursor","textAfterCursor","content","size","buffer","autocomplete","delta","unescapedResult","replace","isHTML","parsedDoc","div","DOMParser","fromSchema","parse","parser","insertText","SlashCommandMenu","selectedIndex","setSelectedIndex","subView","tableGridCoords","setTableGridCoords","r","c","pluginState","isActive","filteredItems","React","useMemo","availableItems","push","inTitle","toLowerCase","some","term","handleKeyDown","stopPropagation","stopImmediatePropagation","prev","tableNode","createTableNode","setSelection","focus","window","addEventListener","capture","removeEventListener","itemRefs","scrollIntoView","block","cls","rows","cols","index","el","rowsCount","colsCount","cells","isHeader","cellType","table_header","table_cell","cell","createAndFill","row","table_row","Fragment","table","TableGridPicker","hoveredRow","hoveredCol","onHover","_","__0","ImageBubble","t","useTranslation","alt","setAlt","setTitle","imagePos","setImagePos","handleContextMenu","posInfo","inside","nodeAt","attrs","dom","handleMousedown","contains","button","newAlt","newTitle","node_0","tr_0","setNodeMarkup","handleSave","t7","t8","t9","e_3","t10","t11","t12","e_4","t13","t14","e_2","currentTarget","isSelectionInTable","$from","d","depth","TableBubble","isDestroyed","cmd","executeCommand","addRowBefore","t15","addRowAfter","t16","t17","t18","t19","t20","deleteRow","t21","t22","t23","t24","t25","t26","addColumnBefore","t27","t28","t29","t30","t31","addColumnAfter","t32","t33","t34","t35","t36","deleteColumn","t37","t38","t39","t40","t41","t42","deleteTable","t43","t44","t45","t46","isMarkActive","isInSet","storedMarks","marks","rangeHasMark","isNodeActive","keys","every","getMarkAttributes","mark","found","m","setMark","$cursor","ranges","addStoredMark","i","$to","addMark","unsetMark","markStart","markEnd","currentMarkStart","child","childStart","childEnd","nodeSize","removeMark","removeStoredMark","labelKey","TypeIcon","Heading1Icon","Heading2Icon","Heading3Icon","CheckSquareIcon","task_item","ListIcon","ListOrderedIcon","QuoteIcon","CodeIcon","NodeSelector","open","onOpenChange","portalContainer","T0","T1","activeItem","pop","Popover","Button","item_0","smallest","isValidUrl","url","URL","getUrlFromString","str","LinkSelector","inputRef","link","href","handleSubmit","handleRemoveLink","focusedDisabled","TextButtons","_temp2","BoldIcon","_temp3","_temp4","ItalicIcon","_temp5","_temp6","UnderlineIcon","_temp7","_temp8","StrikethroughIcon","_temp9","_temp0","s","bold","s_0","toggleMark","s_1","italic","s_2","dispatch_0","s_3","underline","s_4","dispatch_1","s_5","strike","s_6","dispatch_2","s_7","code","s_8","dispatch_3","removeClassesFromJson","jsonObj","isArray","class","serializeForClipboard","slice","someProp","context","openStart","openEnd","childCount","firstChild","defaultAttrs","serializer","DOMSerializer","detachedDoc","wrap","serializeFragment","needsWrap","wrappers","nodeType","wrapMap","nodeName","wrapper","JSON","stringify","text","thead","tbody","tfoot","caption","colgroup","col","td","th","_detachedDoc","implementation","createHTMLDocument","absoluteRect","element","data","ancestor","parentElement","getComputedStyle","ancestorRect","nodeDOMAtCoords","coords","editorRect","blockSelector","elem","elementFromPoint","closest","textContent","trim","li","probeX","probeElem","probeBlock","nodePosAtDOM","posAtDOM","$pos","resolve","before","dragHandlePlugin","dragHandleWidth","handleDragStart","Element","nodePos","draggedNodeSelection","clearData","setData","effectAllowed","setDragImage","dragging","move","handleClick","classList","dragHandleElement","hideDragHandle","opacity","pointerEvents","showDragHandle","draggable","dataset","dragHandle","onMouseMove","editable","compStyle","lineHeight","parseInt","paddingTop","rect","matches","destroy","keydown","mousewheel","dragstart","dragend","globalDragDropPlugin","dropCursorElement","updateDropCursorColor","isDark","documentElement","getAttribute","varName","color","getPropertyValue","backgroundColor","editorView","cssText","observer","MutationObserver","observe","attributes","attributeFilter","removeCursor","parentNode","removeChild","getBlockInsertionPoint","clampedX","blockDepth","isBlock","nodeBeforePos","nodeAfterPos","after","domNode","nodeDOM","HTMLElement","isTopHalf","handleDragOver","nodeBefore","nodeAfter","nodeRect","afterDOM","offsetParent","parentLeft","parentTop","body","parentRect","scrollLeft","scrollTop","handleDrop","targetPos","deleteSelection","mappedTarget","beforeInsert","nodeToInsert","$mapped","parentName","isTargetList","isTargetTaskList","isFragment","listItemType","list_item","taskItemType","taskItem","checked","insert","point","dropPoint","finalTarget","eq","handleDragEnd","disconnect","highlightDecorationKey","buildDecorationSet","highlight","inline","highlightCommands","toggleAutocompleteHighlight","removeAutocompleteHighlight","highlightDecorationPlugin","initialHighlight","transaction","autocompleteState","blockQuoteRule","wrappingInputRule","orderedListRule","order","bulletListRule","taskListRule","codeBlockRule","textblockTypeInputRule","headingRule","RegExp","horizontalRuleInputRule","InputRule","horizontal_rule","markInputRule","regexp","markType","getAttrs","Function","textStart","indexOf","textEnd","delete","strongRule","emRule","codeRule","strikeRule","markdownInputRules","inputRules","rules","smartQuotes","ellipsis","emDash","placeholderPluginKey","isNodeEmpty","defaultContent","placeholderPlugin","isEmptyDoc","isTextblock","anchor","descendants","isEmpty","isLeaf","nodeEnd","hasCursor","classes","join","customKeymap","goToNextCell","undo","redo","splitListItem","liftListItem","sinkListItem","getCorePlugins","history","keymap","baseKeymap","gapCursor","ReactNodeView","getPos","contentDOM","root","Component","constructor","as","contentDOMElement","createRoot","render","update","unmount","ignoreMutation","mutation","TaskItemComponent","handleChange","ImageComponent","selected","createReactNodeView","createContentDOM","nodeViews","trailingNodePlugin","appendTransaction","lastChild","useProseMirror","initialContent","handleImageUpload","columnResizing","tableEditing","EditorState","nodeFromJSON","defaultState","setState","setView","editorRef","viewRef","EditorView","dispatchTransaction","updateState","transformPastedHTML","querySelectorAll","originalPosAtCoords","bind","res","probeX_0","useLayoutEffect","setProps","removeAttribute","proseClasses","RebaseEditor","onJsonContentChange","onHtmlContentChange","onMarkdownContentChange","version","textSize","disabled","markdownConfig","openNode","setOpenNode","openLink","setOpenLink","isMarkdownMode","setIsMarkdownMode","internalMarkdown","setInternalMarkdown","timeout","callbacksRef","handleToggleMarkdown","serialize","newDoc","handleMarkdownChange","handleMarkdownBlur","toJSON","useInjectStyles","cssStyles","flushChanges","currentState","markdown","jsonContent","versionRef","mountTimeRef","Date","now","hasUserEditedRef","elapsed","handleBlur","proseClass","display","tabSize","outline","border","boxShadow"],"mappings":";;;;;;;;;;;;;;;;;;;;;AASO,MAAMA,qBAAqBC,cAAsC;AAAA,EACpEC,OAAO;AAAA,EACPC,MAAM;AACV,CAAC;AAEM,MAAMC,wBAAwBA,MAAA;AAAA,SAAMC,WAAAL,kBAA6B;AAAC;ACHlE,MAAMM,eAAeC,WACxB,CAAAC,IAAAC,QAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAC,QAAA;AAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAAAN;AACG,QAAA;AAAA,IAAAL;AAAAA,IAAAD;AAAAA,EAAAA,IAAwBE,sBAAAA;AACxB,QAAAW,UAAgBC,OAAA,IAA2B;AAC3C,QAAA,CAAAC,MAAAC,OAAA,IAAwBC,cAAc;AAAE,MAAAC;AAAA,MAAAC;AAAA,MAAAX,EAAA,CAAA,MAAAR,SAAAQ,SAAAP,MAAA;AAE9BiB,SAAAA,MAAA;AAAA,UACF,CAACjB,QAAI,CAAKD,OAAK;AAAA;AAAA,MAAA;AAGnB,YAAAoB,QAAcC,WAAA,MAAA;AACV,cAAA;AAAA,UAAAC;AAAAA,QAAAA,IAAsBtB;AACtB,cAAA;AAAA,UAAAuB;AAAAA,QAAAA,IAAkBD;AAGlB,YAAAE;AAAAA,kBAAA;AACAxB,cAAKyB,IAAAC,aAAkBJ,UAASK,MAAOL,UAASM,IAAAC,CAAAA,SAAA;AAAA,cACxCA,KAAIC,KAAAC,SAAe,SAAO;AAAEP,sBAAAA;AAAAA,UAAO;AAAA,QAAA,CAC1C;AAAC,YAEEA,WAAWD,SAASD,qBAASU,eAAyB;AACtDhB,uBAAa;AAAC;AAAA,QAAA;AAIlBA,oBAAY;AAAA,MAAC,GAAA,CACb;AAAE,aAAA,MAEOiB,aAAab,KAAK;AAAA,IAAC;AACjCD,SAAA,CAAClB,MAAMD,KAAK;AAACQ,WAAAR;AAAAQ,WAAAP;AAAAO,WAAAU;AAAAV,WAAAW;AAAAA,EAAA,OAAA;AAAAD,SAAAV,EAAA,CAAA;AAAAW,SAAAX,EAAA,CAAA;AAAA,EAAA;AAvBhB0B,YAAUhB,IAuBPC,EAAa;AAAC,MAAAgB;AAAA,MAAA3B,SAAAG,SAAAyB,UAAA5B,EAAA,CAAA,MAAAG,SAAA0B,aAAA7B,EAAA,CAAA,MAAAO,QAAAP,SAAAR,SAAAQ,EAAA,CAAA,MAAAP,MAAA;AAEPkC,SAAAA,MAAA;AAAA,UACF,CAACpB,QAAI,CAAKd,SAASD,SAAK,CAAKa,QAAOyB,SAAQ;AAAA;AAAA,MAAA;AAEhD,YAAA;AAAA,QAAAX;AAAAA,QAAAC;AAAAA,MAAAA,IAAqB5B,MAAKsB;AAG1B,UAAAiB;AAAAA,cAAYtC,KAAIuC,YAAab,IAAI;AACjC,UAAAc;AAAAA,YAAUxC,KAAIuC,YAAaZ,EAAE;AAE7B,YAAAc,YAAA;AAAA,QAAAC,wBAAA;AAEQ,gBAAAC,MAAYC,KAAAC,IAASP,MAAKK,KAAMH,IAAGG,GAAI;AACvC,gBAAAG,SAAeF,KAAAG,IAAST,MAAKQ,QAASN,IAAGM,MAAO;AAChD,gBAAAE,OAAaJ,KAAAC,IAASP,MAAKU,MAAOR,IAAGQ,IAAK;AAC1C,gBAAAC,QAAcL,KAAAG,IAAST,MAAKW,OAAQT,IAAGS,KAAM;AAAE,iBAAA;AAAA,YAAAC,OAEpCD,QAAQD;AAAAA,YAAIG,QACXL,SAASH;AAAAA,YAAGS,GACjBJ;AAAAA,YAAIK,GACJV;AAAAA,YAAGA;AAAAA,YAAAK;AAAAA,YAAAC;AAAAA,YAAAH;AAAAA,UAAAA;AAAAA,QAAA;AAAA,MAAA;AASlB,YAAAQ,UAAgBC,WAAWd,WAA6B7B,QAAOyB,SAAA,MAAA;AAAA,YAAA,CACtDzB,QAAOyB,SAAA;AAAA;AAAA,QAAA;AAAA,YAAA;AAIRC,kBAAQtC,KAAIuC,YAAaxC,MAAKsB,UAAAK,IAAe;AAC7Cc,gBAAMxC,KAAIuC,YAAaxC,MAAKsB,UAAAM,EAAa;AAAA,QAAtC,SAAA6B,KAAA;AAAA,QACG;AAIVC,wBAAgBhB,WAA6B7B,QAAOyB,SAAA;AAAA,UAAAD,WACrC1B,SAAO0B,aAAe;AAAA,UAAKsB,YAAA,CACzBvB,OAAOzB,SAAOyB,UAAA,CAAa,GAAGwB,QAAQC,OAAO;AAAA,UAAAC,UAChD;AAAA,QAAA,CACb,EAACC,KAAAC,CAAAA,QAAA;AAAO,gBAAA;AAAA,YAAAX;AAAAA,YAAAC;AAAAA,UAAAA,IAAAU;AAAQ,cACTnD,QAAOyB,SAAA;AACP2B,mBAAAC,OAAcrD,QAAOyB,QAAA6B,OAAA;AAAA,cAAAlB,MACX,GAAGI,CAAC;AAAA,cAAIT,KACT,GAAGU,CAAC;AAAA,cAAIc,YACD;AAAA,YAAA,CACf;AAAA,UAAC;AAAA,QAAA,CAET;AAAA,MAAC,CACL;AAAE,aAAA,MACUb,QAAAA;AAAAA,IAAS;AACzB/C,MAAA,CAAA,IAAAG,SAAAyB;AAAA5B,MAAA,CAAA,IAAAG,SAAA0B;AAAA7B,WAAAO;AAAAP,WAAAR;AAAAQ,WAAAP;AAAAO,WAAA2B;AAAAA,EAAA,OAAA;AAAAA,SAAA3B,EAAA,CAAA;AAAA,EAAA;AAAA,MAAAiD;AAAA,MAAAjD,EAAA,EAAA,MAAAG,WAAAH,EAAA,EAAA,MAAAO,QAAAP,EAAA,EAAA,MAAAR,SAAAQ,UAAAP,MAAA;AAAEwD,UAAC1C,MAAMd,MAAMD,OAAOW,OAAO;AAACH,YAAAG;AAAAH,YAAAO;AAAAP,YAAAR;AAAAQ,YAAAP;AAAAO,YAAAiD;AAAAA,EAAA,OAAA;AAAAA,SAAAjD,EAAA,EAAA;AAAA,EAAA;AAtD/B0B,YAAUC,IAsDPsB,EAA4B;AAAC,MAAA,CAE3B1C,MAAI;AAAA,WAAA;AAAA,EAAA;AAAA,MAAAiD;AAAA,MAAAxD,EAAA,EAAA,MAAA6D,uBAAAC,IAAA,2BAAA,GAAA;AAMMN,SAAA;AAAA,MAAAO,UAAY;AAAA,MAAOC,QAAA;AAAA,MAAAJ,YAE9B;AAAA,IAAA;AAAU5D,YAAAwD;AAAAA,EAAA,OAAA;AAAAA,SAAAxD,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAiE;AAAA,MAAAjE,EAAA,EAAA,MAAAE,YAAAF,UAAAI,WAAA;AALV6D,SAAA,oBAAA,SACS5D,KAAAA,SACMD,WACJ,OAAAoD,IAGM,aAAAU,SAIZhE,SAAAA,CACL;AAAMF,YAAAE;AAAAF,YAAAI;AAAAJ,YAAAiE;AAAAA,EAAA,OAAA;AAAAA,SAAAjE,EAAA,EAAA;AAAA,EAAA;AAAA,SAXNiE;AAWM,CAGlB;AAEArE,aAAauE,cAAc;AAzGvB,SAAAD,QAAAE,KAAA;AAgGgBC,MAACC,eAAAA;AAAiB;AClG/B,MAAMC,mBAAmB1E,WAG9B,CAAAC,IAAAC,QAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAA,MAAAuE;AAAA,MAAAtE;AAAA,MAAAuE;AAAA,MAAAC;AAAA,MAAA1E,SAAAF,IAAA;AAAC,KAAA;AAAA,MAAAI;AAAAA,MAAAsE;AAAAA,MAAAC;AAAAA,MAAA,GAAAC;AAAAA,IAAAA,IAAA5E;AAAwCE,WAAAF;AAAAE,WAAAwE;AAAAxE,WAAAE;AAAAF,WAAAyE;AAAAzE,WAAA0E;AAAAA,EAAA,OAAA;AAAAF,cAAAxE,EAAA,CAAA;AAAAE,eAAAF,EAAA,CAAA;AAAAyE,eAAAzE,EAAA,CAAA;AAAA0E,WAAA1E,EAAA,CAAA;AAAA,EAAA;AACzC,QAAA;AAAA,IAAAP;AAAAA,EAAAA,IAAiBC,sBAAAA;AACjB,QAAAiF,OAAaH,UAAOI,OAAU;AAAM,MAAA,CAE/BnF,MAAI;AAAA,WAAA;AAAA,EAAA;AAAA,MAAAiB;AAAA,MAAAV,SAAAyE,UAAA;AAMK/D,SAAAA,MAAM+D,WAAAA;AAAYzE,WAAAyE;AAAAzE,WAAAU;AAAAA,EAAA,OAAA;AAAAA,SAAAV,EAAA,CAAA;AAAA,EAAA;AAAA,MAAAW;AAAA,MAAAX,EAAA,CAAA,MAAA2E,QAAA3E,EAAA,CAAA,MAAAE,YAAAF,EAAA,CAAA,MAAAD,OAAAC,EAAA,EAAA,MAAA0E,QAAA1E,UAAAU,IAAA;AAH9BC,SAAA,oBAAC,QAAUZ,KAAG,GAAM2E,MAAmB,aAAAR,SAG3B,SAAAxD,IACTR,SAAAA,CACH;AAAOF,WAAA2E;AAAA3E,WAAAE;AAAAF,WAAAD;AAAAC,YAAA0E;AAAA1E,YAAAU;AAAAV,YAAAW;AAAAA,EAAA,OAAA;AAAAA,SAAAX,EAAA,EAAA;AAAA,EAAA;AAAA,SALPW;AAKO,CAEV;AAED4D,iBAAiBJ,cAAc;AAhB7B,SAAAD,QAAAG,GAAA;AASIA,IAACC,eAAAA;AAAiB;ACpBjB,MAAMO,wBAAwB,IAAIC,UAAU,eAAe;AAS3D,SAASC,qBAAqB;AACjC,SAAO,IAAIC,OAAO;AAAA,IACdC,KAAKJ;AAAAA,IACLrF,OAAO;AAAA,MACH0F,OAA0B;AACtB,eAAO;AAAA,UAAEC,QAAQ;AAAA,QAAA;AAAA,MACrB;AAAA,MACAC,MAAMC,IAAIC,OAAOC,UAAUC,UAA6B;AACpD,cAAMC,OAAOJ,GAAGK,QAAQb,qBAAqB;AAC7C,YAAIY,SAASE,QAAW;AACpB,iBAAOF;AAAAA,QACX;AAEA,cAAM;AAAA,UAAE3E;AAAAA,QAAAA,IAAc0E;AACtB,YAAI,EAAE1E,qBAAqB8E,kBAAkB,CAAC9E,UAAUC,OAAO;AAC3D,iBAAO;AAAA,YAAEoE,QAAQ;AAAA,UAAA;AAAA,QACrB;AAGA,cAAMU,UAAU/E,UAAU+E;AAC1B,YAAIA,QAAQC,OAAOxE,KAAKC,SAAS,cAAc;AAC3C,iBAAO;AAAA,YAAE4D,QAAQ;AAAA,UAAA;AAAA,QACrB;AAEA,cAAMY,aAAaF,QAAQC,OAAOE,YAC9B3D,KAAKG,IAAI,GAAGqD,QAAQI,eAAe,EAAE,GACrCJ,QAAQI,cACRN,QACA,GACJ;AACA,cAAMO,QAAQH,WAAWG,MAAM,6BAA6B;AAE5D,YAAI,CAACA,OAAO;AACR,iBAAO;AAAA,YAAEf,QAAQ;AAAA,UAAA;AAAA,QACrB;AAGA,YAAIG,MAAMa,WAAW;AACjB,iBAAO;AAAA,YAAEhB,QAAQ;AAAA,YACrCgB,WAAW;AAAA,UAAA;AAAA,QACK;AAGA,cAAMC,QAAQF,MAAM,CAAC;AACrB,cAAM/E,OAAO0E,QAAQQ,MAAMD,MAAME,SAAS;AAC1C,cAAMlF,KAAKyE,QAAQQ;AACnB,eAAO;AAAA,UAAElB,QAAQ;AAAA,UACjCoB,OAAO;AAAA,YAAEpF;AAAAA,YACTC;AAAAA,UAAAA;AAAAA,UACAgF;AAAAA,QAAAA;AAAAA,MACY;AAAA,IAAA;AAAA,EACJ,CACH;AACL;AC1DA,eAAsBI,WAAW/G,MAAkBgH,aAAwCJ,KAAaK,QAAkBC,OAAa;AAEnI,QAAM;AAAA,IAAEC,QAAAA;AAAAA,EAAAA,IAAWnH,KAAKD;AAGxB,QAAMqH,SAASpH,KAAKD,MAAMsH,QAAQC,KAAK,CAACC,MAAcA,EAAE/B,QAAQgC,eAAehC,GAAG;AAClF,MAAI,CAAC4B,QAAQ;AACTK,YAAQC,MAAM,wBAAwB;AACtC;AAAA,EACJ;AAEA,QAAMC,SAAS/E,KAAKgF,OAAAA,EAASC,SAAS,EAAE,EAAEC,UAAU,CAAC;AACrD,QAAMC,cAAcC,SAASC,cAAc,KAAK;AAChD,QAAMC,eAAeF,SAASC,cAAc,KAAK;AACjDC,eAAaC,aAAa,SAAS,kCAAkCC,kBAAkB;AACvFF,eAAaG,MAAMrB,YAAYsB,QAAQC;AACvCR,cAAYS,YAAYN,YAAY;AAEpC,QAAMO,OAAOC,WAAWC,OAAO/B,KAAKmB,aAAa;AAAA,IAAEa,IAAIjB;AAAAA,EAAAA,CAAQ;AAC/D,MAAIkB,gBAAgBzB,OAAO0B,SAAS9I,KAAKD,KAAK;AAC9C8I,kBAAgBA,eAAeE,IAAI/I,KAAKD,MAAMyB,KAAK,CAACiH,IAAI,CAAC;AACzDzI,OAAKgJ,SAAShJ,KAAKD,MAAM6F,GAAGqD,QAAQ7B,QAAQ;AAAA,IAAEyB;AAAAA,EAAAA,CAAe,CAAC;AAG9D,QAAMR,MAAM,MAAMpB,OAAOC,KAAK;AAC9BO,UAAQyB,MAAM,kBAAkBb,GAAG;AAEnC,QAAMc,qBAAqBA,MAAM;AAE7B,QAAIC,eAAehC,OAAO0B,SAAS9I,KAAKD,KAAK;AAC7C,UAAMsJ,aAAaD,aAAa9B,KAAKpB,QAAWA,QAAWoD,CAAAA,SAAQA,KAAKV,OAAOjB,MAAM;AAErF,QAAI0B,WAAWxC,WAAW,GAAG;AACzBY,cAAQ8B,KAAK,oDAAoD;AACjE;AAAA,IACJ;AAGA,UAAMC,aAAaH,WAAW,CAAC,EAAE3H;AAGjC,UAAM+H,YAAYzJ,KAAKD,MAAMoH,OAAOuC,MAAMxC,MAAMyC,OAAO;AAAA,MAAEtB;AAAAA,IAAAA,CAAK;AAC9D,UAAMzC,KAAK5F,KAAKD,MAAM6F,GAAGgE,YAAYJ,YAAYA,YAAYC,SAAS;AAGtEL,mBAAeA,aAAaS,OAAOR,UAAU;AAC7CzD,OAAGqD,QAAQ7B,QAAQ;AAAA,MAAEyB,eAAeO;AAAAA,IAAAA,CAAc;AAClDpJ,SAAKgJ,SAASpD,EAAE;AAAA,EACpB;AAGA,QAAMkE,YAAY,IAAIC,MAAAA;AACtBD,YAAUzB,MAAMA;AAChByB,YAAUE,SAASb;AACnBW,YAAUG,UAAUd;AACxB;AAEO,MAAM3B,iBAAiB,IAAInC,UAAU,aAAa;AAElD,MAAM6E,wBAAwBA,CAACjD,WAA6B;AAC/D,QAAMG,SAAiB,IAAI7B,OAAO;AAAA,IAC9BC,KAAKgC;AAAAA,IACLzH,OAAO;AAAA;AAAA,MAEH0F,MAAMA,MAAM0E,cAAc7I;AAAAA;AAAAA,MAE1BqE,OAAOA,CAACC,IAAIwE,QAAQ;AAEhB,cAAMpE,OAAOJ,GAAGK,QAAQmB,MAAM;AAC9B,YAAIpB,QAAQA,KAAK6C,eAAe;AAC5B,iBAAO7C,KAAK6C;AAAAA,QAChB;AAEA,eAAOuB,IAAIC,IAAIzE,GAAG0E,SAAS1E,GAAGpE,GAAG;AAAA,MACrC;AAAA,IAAA;AAAA,IAEJ+I,OAAO;AAAA,MACHC,iBAAiB;AAAA,QACbC,UAAUA,CAACzK,MAAkB0K,UAAqB;AAC9C,cAAIA,MAAMC,cAAcC,OAAOC,SAAS,OAAO,GAAG;AAC9CH,kBAAM7F,eAAAA;AACN,mBAAO;AAAA,UACX;AACA,iBAAO;AAAA,QACX;AAAA,QACAiG,MAAMA,CAAC9K,MAAkB0K,UAAqB;AAC1C,cAAI,CAACA,MAAMC,cAAcI,SAASL,MAAMC,cAAcI,MAAMlE,WAAW,GAAG;AACtE,mBAAO;AAAA,UACX;AACA6D,gBAAM7F,eAAAA;AAEN,gBAAMkG,QAAQC,MAAMtJ,KAAKgJ,MAAMC,aAAaI,KAAK;AACjD,gBAAME,SAASF,MAAMG,OAAOC,CAAAA,SAAQ,SAASC,KAAKD,KAAKtJ,IAAI,CAAC;AAE5D,cAAIoJ,OAAOpE,WAAW,GAAG;AACrBY,oBAAQ4D,IAAI,kCAAkC;AAC9C,mBAAO;AAAA,UACX;AAEAJ,iBAAOK,QAAQpE,CAAAA,UAAS;AACpB,kBAAM5C,WAAWtE,KAAKuL,YAAY;AAAA,cAC9BvI,MAAM0H,MAAMc;AAAAA,cACZ7I,KAAK+H,MAAMe;AAAAA,YAAAA,CACd;AACD,gBAAI,CAACnH,SAAU;AAEf,kBAAMoH,SAAS,IAAIC,WAAAA;AACnBD,mBAAO1B,SAAS,OAAOhD,gBAAgB;AACnC,oBAAMD,WAAW/G,MAAMgH,aAAa1C,SAASsC,KAAKK,QAAQC,KAAK;AAAA,YACnE;AACAwE,mBAAOE,cAAc1E,KAAK;AAAA,UAC9B,CAAC;AAED,iBAAO;AAAA,QACX;AAAA,MAAA;AAAA,MAEJ2E,YAAY7L,MAAkB0K,OAAuB;AACjD,cAAMoB,OAAOpB,MAAMqB,eAAeC,QAAQ,WAAW;AACrD,YAAIF,QAAQA,KAAKjB,SAAS,MAAM,GAAG;AAE/B,iBAAO;AAAA,QACX;AAEA,cAAMoB,SAAQjB,MAAMtJ,KAAKgJ,MAAMqB,eAAeE,SAAS,EAAE;AACzD,cAAMrF,MAAM5G,KAAKD,MAAMsB,UAAUK;AACjC,YAAIwK,gBAAgB;AAEpBD,QAAAA,OACKf,OAAQiB,UAASA,KAAKtK,KAAKuK,WAAW,QAAQ,CAAC,EAC/Cd,QAASa,CAAAA,SAAS;AACf,gBAAMjF,QAAQiF,KAAKE,UAAAA;AACnB,cAAInF,OAAO;AACPgF,4BAAgB;AAChB,kBAAMR,SAAS,IAAIC,WAAAA;AACnBD,mBAAO1B,SAAS,OAAOhD,gBAAgB;AACnC,oBAAMD,WAAW/G,MAAMgH,aAAaJ,KAAKK,QAAQC,KAAK;AAAA,YAC1D;AACAwE,mBAAOE,cAAc1E,KAAK;AAAA,UAC9B;AAAA,QACJ,CAAC;AAEL,eAAOgF;AAAAA,MACX;AAAA,MACAI,YAAYvM,OAAO;AACf,eAAOqH,OAAO0B,SAAS/I,KAAK;AAAA,MAChC;AAAA,IAAA;AAAA,EACJ,CACH;AAED,SAAOqH;AACX;ACxJO,MAAMmF,uBAAuB,IAAIlH,UAAkC,mBAAmB;AAOtF,MAAMmH,sBAAsB;AAAA,EAC/BC,yBAAyBA,CAAC1M,OAAoBiJ,UAAmD0D,gBAAkC;AAC/H,UAAM;AAAA,MAAErL;AAAAA,IAAAA,IAActB;AACtB,UAAM6G,MAAMvF,UAAUK;AAEtB,QAAI,CAACsH,SAAU,QAAO;AAEtB,UAAMpD,KAAK7F,MAAM6F,GAAGqD,QAAQsD,sBAAsB;AAAA,MAC9C3F;AAAAA,MACA/E,MAAM;AAAA,MACNgI,QAAQ;AAAA,MACR6C;AAAAA,IAAAA,CACH;AAED1D,aAASpD,EAAE;AACX,WAAO;AAAA,EACX;AAAA,EAEA+G,yBAAyBA,CAAC5M,OAAoBiJ,aAA+D;AACzG,QAAI,CAACA,SAAU,QAAO;AAEtB,UAAMpD,KAAK7F,MAAM6F,GAAGqD,QAAQsD,sBAAsB;AAAA,MAC9C3F,KAAK;AAAA;AAAA,MACL/E,MAAM;AAAA,MACNgI,QAAQ;AAAA,IAAA,CACX;AAEDb,aAASpD,EAAE;AACX,WAAO;AAAA,EACX;AACJ;AAKO,MAAMgH,8BAA8BA,MAAM;AAC7C,SAAO,IAAIrH,OAA+B;AAAA,IACtCC,KAAK+G;AAAAA,IAELxM,OAAO;AAAA,MACH0F,OAAO;AACH,eAAO;AAAA,UACHoD,eAAesB,cAAc7I;AAAAA,UAC7BuL,eAAe;AAAA,QAAA;AAAA,MAEvB;AAAA,MAEAlH,MAAMC,IAAIE,UAAU;AAChB,cAAMgH,SAASlH,GAAGK,QAAQsG,oBAAoB;AAE9C,YAAIO,QAAQjL,SAAS,qBAAqB;AACtC,gBAAM;AAAA,YAAE+E;AAAAA,YAAKiD;AAAAA,YAAQ6C;AAAAA,UAAAA,IAAgBI;AAErC,cAAIjD,QAAQ;AACR,mBAAO;AAAA,cACHhB,eAAesB,cAAc7I;AAAAA,cAC7BuL,eAAe;AAAA,YAAA;AAAA,UAEvB;AAEA,gBAAME,aAAarE,WAAWC,OAAO/B,KAAK,MAAM;AAC5C,kBAAMoG,YAAYhF,SAASC,cAAc,MAAM;AAC/C+E,sBAAUrM,YAAY;AAGtB,gBAAI+L,aAAa;AACbM,wBAAUC,YAAYP;AAAAA,YAC1B,OAAO;AACH,oBAAMQ,OAAOlF,SAASC,cAAc,MAAM;AAC1CiF,mBAAKC,YAAY;AACjBH,wBAAUxE,YAAY0E,IAAI;AAAA,YAC9B;AAEA,mBAAOF;AAAAA,UACX,CAAC;AAED,iBAAO;AAAA,YACHnE,eAAesB,cAAc7I,MAAMyH,IAAInD,GAAGpE,KAAK,CAACuL,UAAU,CAAC;AAAA,YAC3DF,eAAe;AAAA,UAAA;AAAA,QAEvB;AAEA,eAAO;AAAA,UACHhE,eAAe/C,SAAS+C,cAAcwB,IAAIzE,GAAG0E,SAAS1E,GAAGpE,GAAG;AAAA,UAC5DqL,eAAe/G,SAAS+G;AAAAA,QAAAA;AAAAA,MAEhC;AAAA,IAAA;AAAA,IAGJtC,OAAO;AAAA,MACH+B,YAAYvM,OAAO;AACf,eAAO,KAAK+I,SAAS/I,KAAK,GAAG8I,iBAAiBsB,cAAc7I;AAAAA,MAChE;AAAA,IAAA;AAAA,EACJ,CACH;AACL;AC1EA,MAAM8L,kBAAoC,CACtC;AAAA,EACIC,OAAO;AAAA,EACPC,aAAa;AAAA,EACbC,aAAa,CAAC,KAAK,WAAW;AAAA,EAC9BC,MAAM,oBAAC,UAAA,EAAS,MAAMC,SAASC,OAAM;AAAA,EACrCC,SAASA,CAAC3N,MAAM8G,UAAU;AACtB9G,SAAKgJ,SAAShJ,KAAKD,MAAM6F,GAAGgI,YAAY9G,MAAMpF,MAAMoF,MAAMnF,EAAE,CAAC;AAC7DkM,iBAAa1G,OAAOuC,MAAMoE,SAAS,EAAE9N,KAAKD,OAAOC,KAAKgJ,QAAQ;AAAA,EAClE;AACJ,GACA;AAAA,EACIqE,OAAO;AAAA,EACPC,aAAa;AAAA,EACbC,aAAa,CAAC,QAAQ,QAAQ,QAAQ,SAAS,UAAU;AAAA,EACzDC,MAAM,oBAAC,iBAAA,EAAgB,MAAMC,SAASC,OAAM;AAAA,EAC5CC,SAASA,CAAC3N,MAAM8G,UAAU;AACtB9G,SAAKgJ,SAAShJ,KAAKD,MAAM6F,GAAGgI,YAAY9G,MAAMpF,MAAMoF,MAAMnF,EAAE,CAAC;AAC7DoM,eAAW5G,OAAOuC,MAAMsE,SAAS,EAAEhO,KAAKD,OAAOC,KAAKgJ,QAAQ;AAAA,EAChE;AACJ,GACA;AAAA,EACIqE,OAAO;AAAA,EACPC,aAAa;AAAA,EACbC,aAAa,CAAC,SAAS,OAAO,OAAO;AAAA,EACrCC,MAAM,oBAAC,cAAA,EAAa,MAAMC,SAASC,OAAM;AAAA,EACzCC,SAASA,CAAC3N,MAAM8G,UAAU;AACtB9G,SAAKgJ,SAAShJ,KAAKD,MAAM6F,GAAGgI,YAAY9G,MAAMpF,MAAMoF,MAAMnF,EAAE,CAAC;AAC7DkM,iBAAa1G,OAAOuC,MAAMuE,SAAS;AAAA,MAAEC,OAAO;AAAA,IAAA,CAAG,EAAElO,KAAKD,OAAOC,KAAKgJ,QAAQ;AAAA,EAC9E;AACJ,GACA;AAAA,EACIqE,OAAO;AAAA,EACPC,aAAa;AAAA,EACbC,aAAa,CAAC,YAAY,QAAQ;AAAA,EAClCC,MAAM,oBAAC,cAAA,EAAa,MAAMC,SAASC,OAAM;AAAA,EACzCC,SAASA,CAAC3N,MAAM8G,UAAU;AACtB9G,SAAKgJ,SAAShJ,KAAKD,MAAM6F,GAAGgI,YAAY9G,MAAMpF,MAAMoF,MAAMnF,EAAE,CAAC;AAC7DkM,iBAAa1G,OAAOuC,MAAMuE,SAAS;AAAA,MAAEC,OAAO;AAAA,IAAA,CAAG,EAAElO,KAAKD,OAAOC,KAAKgJ,QAAQ;AAAA,EAC9E;AACJ,GACA;AAAA,EACIqE,OAAO;AAAA,EACPC,aAAa;AAAA,EACbC,aAAa,CAAC,YAAY,OAAO;AAAA,EACjCC,MAAM,oBAAC,cAAA,EAAa,MAAMC,SAASC,OAAM;AAAA,EACzCC,SAASA,CAAC3N,MAAM8G,UAAU;AACtB9G,SAAKgJ,SAAShJ,KAAKD,MAAM6F,GAAGgI,YAAY9G,MAAMpF,MAAMoF,MAAMnF,EAAE,CAAC;AAC7DkM,iBAAa1G,OAAOuC,MAAMuE,SAAS;AAAA,MAAEC,OAAO;AAAA,IAAA,CAAG,EAAElO,KAAKD,OAAOC,KAAKgJ,QAAQ;AAAA,EAC9E;AACJ,GACA;AAAA,EACIqE,OAAO;AAAA,EACPC,aAAa;AAAA,EACbC,aAAa,CAAC,aAAa,OAAO;AAAA,EAClCC,MAAM,oBAAC,UAAA,EAAS,MAAMC,SAASC,OAAM;AAAA,EACrCC,SAASA,CAAC3N,MAAM8G,UAAU;AACtB9G,SAAKgJ,SAAShJ,KAAKD,MAAM6F,GAAGgI,YAAY9G,MAAMpF,MAAMoF,MAAMnF,EAAE,CAAC;AAC7DoM,eAAW5G,OAAOuC,MAAMyE,WAAW,EAAEnO,KAAKD,OAAOC,KAAKgJ,QAAQ;AAAA,EAClE;AACJ,GACA;AAAA,EACIqE,OAAO;AAAA,EACPC,aAAa;AAAA,EACbC,aAAa,CAAC,SAAS;AAAA,EACvBC,MAAM,oBAAC,iBAAA,EAAgB,MAAMC,SAASC,OAAM;AAAA,EAC5CC,SAASA,CAAC3N,MAAM8G,UAAU;AACtB9G,SAAKgJ,SAAShJ,KAAKD,MAAM6F,GAAGgI,YAAY9G,MAAMpF,MAAMoF,MAAMnF,EAAE,CAAC;AAC7DoM,eAAW5G,OAAOuC,MAAM0E,YAAY,EAAEpO,KAAKD,OAAOC,KAAKgJ,QAAQ;AAAA,EACnE;AACJ,GACA;AAAA,EACIqE,OAAO;AAAA,EACPC,aAAa;AAAA,EACbC,aAAa,CAAC,YAAY;AAAA,EAC1BC,MAAM,oBAAC,WAAA,EAAU,MAAMC,SAASC,OAAM;AAAA,EACtCC,SAASA,CAAC3N,MAAM8G,UAAU;AACtB9G,SAAKgJ,SAAShJ,KAAKD,MAAM6F,GAAGgI,YAAY9G,MAAMpF,MAAMoF,MAAMnF,EAAE,CAAC;AAC7D0M,WAAOlH,OAAOuC,MAAM4E,UAAU,EAAEtO,KAAKD,OAAOC,KAAKgJ,QAAQ;AAAA,EAC7D;AACJ,GACA;AAAA,EACIqE,OAAO;AAAA,EACPC,aAAa;AAAA,EACbC,aAAa,CAAC,WAAW;AAAA,EACzBC,MAAM,oBAAC,UAAA,EAAS,MAAMC,SAASC,OAAM;AAAA,EACrCC,SAASA,CAAC3N,MAAM8G,UAAU;AACtB9G,SAAKgJ,SAAShJ,KAAKD,MAAM6F,GAAGgI,YAAY9G,MAAMpF,MAAMoF,MAAMnF,EAAE,CAAC;AAC7DkM,iBAAa1G,OAAOuC,MAAM6E,UAAU,EAAEvO,KAAKD,OAAOC,KAAKgJ,QAAQ;AAAA,EACnE;AACJ,GACA;AAAA,EACIqE,OAAO;AAAA,EACPC,aAAa;AAAA,EACbC,aAAa,CAAC,SAAS,WAAW,SAAS,UAAU,MAAM;AAAA,EAC3DC,MAAM,oBAAC,WAAA,EAAU,MAAMC,SAASC,OAAM;AAAA,EACtCC,SAASA,CAAC3N,MAAM8G,OAAOG,WAAW;AAC9BjH,SAAKgJ,SAAShJ,KAAKD,MAAM6F,GAAGgI,YAAY9G,MAAMpF,MAAMoF,MAAMnF,EAAE,CAAC;AAE7D,UAAM6M,QAAQxG,SAASC,cAAc,OAAO;AAC5CuG,UAAM3M,OAAO;AACb2M,UAAMC,SAAS;AACfD,UAAME,WAAW,YAAY;AACzB,UAAIF,MAAMzD,OAAOlE,QAAQ;AACrB,cAAMsE,OAAOqD,MAAMzD,MAAM,CAAC;AAC1B,YAAI,CAACI,KAAM;AACX,cAAMvE,MAAM5G,KAAKD,MAAMsB,UAAUK;AAEjC,cAAMuJ,SAASD,MAAMtJ,KAAK8M,MAAMzD,KAAK,EAAEG,OAAOyD,CAAAA,MAAK,SAASvD,KAAKuD,EAAE9M,IAAI,CAAC;AACxE,YAAIoJ,OAAOpE,WAAW,EAAG,QAAO;AAEhCoE,eAAOK,QAAQpE,CAAAA,UAAS;AACpB,gBAAMwE,SAAS,IAAIC,WAAAA;AACnBD,iBAAO1B,SAAS,OAAOhD,gBAAgB;AACnC,kBAAMD,WAAW/G,MAAMgH,aAAaJ,KAAKK,QAAQC,KAAK;AAAA,UAC1D;AACAwE,iBAAOE,cAAc1E,KAAK;AAAA,QAC9B,CAAC;AAAA,MACL;AACA,aAAO;AAAA,IACX;AACAsH,UAAMI,MAAAA;AAAAA,EACV;AACJ,GACA;AAAA,EACIvB,OAAO;AAAA,EACPC,aAAa;AAAA,EACbC,aAAa,CAAC,SAAS,QAAQ,OAAO,KAAK;AAAA,EAC3CC,MAAM,oBAAC,WAAA,EAAU,MAAMC,SAASC,OAAM;AAAA,EACtCC,SAASA,CAAC3N,MAAM8G,OAAOG,QAAQ4H,cAAcC,eAAe;AACxD,QAAIA,uBAAuB,YAAY;AAAA,EAC3C;AACJ,CAAC;AAGL,MAAMC,6BAA6C;AAAA,EAC/C1B,OAAO;AAAA,EACPC,aAAa;AAAA,EACbC,aAAa,CAAC,IAAI;AAAA,EAClBC,MAAM,oBAAC,WAAA,EAAU,MAAMC,SAASC,OAAM;AAAA,EACtCC,SAAS,OAAO3N,MAAM8G,OAAOG,QAAQ4H,iBAAiB;AAClD,QAAI,CAACA,aAAc,OAAMG,MAAM,iBAAiB;AAEhDhP,SAAKgJ,SAAShJ,KAAKD,MAAM6F,GAAGgI,YAAY9G,MAAMpF,MAAMoF,MAAMnF,EAAE,CAAC;AAC7DkM,iBAAa1G,OAAOuC,MAAMoE,SAAS,EAAE9N,KAAKD,OAAOC,KAAKgJ,QAAQ;AAE9D,UAAM;AAAA,MAAEjJ;AAAAA,IAAAA,IAAUC;AAClB,UAAM;AAAA,MAAE0B;AAAAA,MAAMC;AAAAA,IAAAA,IAAO5B,MAAMsB;AAE3B,UAAM4N,mBAAmBlP,MAAMyB,IAAI+E,YAAY,GAAG7E,MAAM,IAAI;AAC5D,UAAMwN,kBAAkBnP,MAAMyB,IAAI+E,YAAY5E,IAAI5B,MAAMyB,IAAI2N,QAAQC,MAAM,IAAI;AAE9E,QAAIC,SAAS;AACb,UAAM9G,SAAS,MAAMsG,aAAaS,aAAaL,kBAAkBC,iBAAkBK,CAAAA,UAAU;AACzFF,gBAAUE;AACV,UAAIA,MAAM1I,WAAW,GAAG;AACpB2F,4BAAoBC,wBAAwBzM,KAAKD,OAAOC,KAAKgJ,UAAUqG,MAAM;AAAA,MACjF;AAAA,IACJ,CAAC;AAGD,QAAI;AAGA,YAAMG,kBAAkBjH,OAAOkH,QAAQ,QAAQ,IAAI,EAAEA,QAAQ,QAAQ,GAAI;AAEzE,YAAMC,SAAS,qBAAqBtE,KAAKoE,eAAe;AACxD,UAAIG;AAEJ,UAAID,QAAQ;AACR,cAAME,MAAM5H,SAASC,cAAc,KAAK;AACxC2H,YAAI3C,YAAYuC;AAChBG,oBAAYE,UAAUC,WAAW9P,KAAKD,MAAMoH,MAAM,EAAE4I,MAAMH,GAAG;AAAA,MACjE,OAAO;AACHD,oBAAYK,OAAOD,MAAMP,eAAe;AAAA,MAC5C;AAEA,UAAIG,WAAW;AACX,cAAM/J,KAAK5F,KAAKD,MAAM6F,GAAGgE,YAAY5J,KAAKD,MAAMsB,UAAUK,MAAM1B,KAAKD,MAAMsB,UAAUK,MAAMiO,UAAUR,OAAO;AAC5GnP,aAAKgJ,SAASpD,EAAE;AAAA,MACpB,OAAO;AACH5F,aAAKgJ,SAAShJ,KAAKD,MAAM6F,GAAGqK,WAAWT,eAAe,CAAC;AAAA,MAC3D;AAAA,IACJ,SAAS5K,GAAG;AACR6C,cAAQC,MAAM9C,CAAC;AACf5E,WAAKgJ,SAAShJ,KAAKD,MAAM6F,GAAGqK,WAAW1H,MAAM,CAAC;AAAA,IAClD;AAAA,EACJ;AACJ;AAEO,MAAM2H,mBAAmBA,CAAC;AAAA,EAAEjJ;AAAAA,EAAQ4H;AAAsE,MAAM;AACnH,QAAM;AAAA,IAAE7O;AAAAA,IAAMD;AAAAA,EAAAA,IAAUE,sBAAAA;AACxB,QAAMW,UAAUC,OAAuB,IAAI;AAC3C,QAAM,CAACsP,eAAeC,gBAAgB,IAAIpP,SAAS,CAAC;AACpD,QAAM,CAACqP,SAASvB,UAAU,IAAI9N,SAAwB,IAAI;AAC1D,QAAM,CAACsP,iBAAiBC,kBAAkB,IAAIvP,SAAS;AAAA,IAAEwP,GAAG;AAAA,IAChEC,GAAG;AAAA,EAAA,CAAG;AAEF,QAAMC,cAAc3Q,QAAQqF,sBAAsB0D,SAAS/I,KAAK,IAAI;AACpE,QAAM4Q,WAAWD,aAAahL;AAC9B,QAAMiB,QAAQ+J,aAAa/J,SAAS;AACpC,QAAMG,QAAQ4J,aAAa5J;AAE3B,QAAM8J,gBAAgBC,eAAMC,QAAQ,MAAM;AACtC,QAAI,CAACH,SAAU,QAAO,CAAA;AACtB,UAAMI,iBAAiB,CAAC,GAAG3D,eAAe;AAC1C,QAAIyB,aAAckC,gBAAeC,KAAKjC,0BAA0B;AAEhE,WAAOgC,eAAe7F,OAAOiB,CAAAA,SAAQ;AACjC,YAAM8E,UAAU9E,KAAKkB,MAAM6D,YAAAA,EAAcrG,SAASlE,MAAMuK,aAAa;AACrE,UAAID,QAAS,QAAOA;AACpB,aAAO9E,KAAKoB,aAAa4D,KAAKC,CAAAA,SAAQA,KAAKF,YAAAA,EAAcrG,SAASlE,MAAMuK,YAAAA,CAAa,CAAC;AAAA,IAC1F,CAAC;AAAA,EACL,GAAG,CAACvK,OAAOgK,UAAU9B,YAAY,CAAC;AAElC5M,YAAU,MAAM;AACZmO,qBAAiB,CAAC;AAAA,EACtB,GAAG,CAACzJ,KAAK,CAAC;AAEV1E,YAAU,MAAM;AACZ,QAAI,CAAC0O,SAAU7B,YAAW,IAAI;AAAA,EAClC,GAAG,CAAC6B,QAAQ,CAAC;AAEb1O,YAAU,MAAM;AACZ,QAAI,CAACjC,QAAQ,CAAC2Q,YAAY,CAAC7J,SAAS,CAAClG,QAAQyB,QAAS;AAEtD,UAAMC,QAAQtC,KAAKuC,YAAYuE,MAAMpF,IAAI;AACzC,UAAMe,YAAY;AAAA,MACdC,wBAAwB;AACpB,eAAO;AAAA,UACHQ,OAAO;AAAA,UACPC,QAAQb,MAAMQ,SAASR,MAAMK;AAAAA,UAC7BS,GAAGd,MAAMU;AAAAA,UACTK,GAAGf,MAAMK;AAAAA,UACTA,KAAKL,MAAMK;AAAAA,UACXK,MAAMV,MAAMU;AAAAA,UACZC,OAAOX,MAAMU;AAAAA,UACbF,QAAQR,MAAMQ;AAAAA,QAAAA;AAAAA,MAEtB;AAAA,IAAA;AAGJ,UAAMQ,UAAUC,WAAWd,WAA6B7B,QAAQyB,SAAS,MAAM;AAC3E,UAAI,CAACzB,QAAQyB,QAAS;AACtBoB,sBAAgBhB,WAA6B7B,QAAQyB,SAAS;AAAA,QAC1DD,WAAW;AAAA,QACXsB,YAAY,CAACvB,OAAO,CAAC,GAAGwB,KAAAA,GAAQC,OAAO;AAAA,QACvCC,UAAU;AAAA,MAAA,CACb,EAAEC,KAAK,CAAC;AAAA,QAAEV;AAAAA,QAAGC;AAAAA,MAAAA,MAAQ;AAClB,YAAIzC,QAAQyB,SAAS;AACjB2B,iBAAOC,OAAOrD,QAAQyB,QAAQ6B,OAAO;AAAA,YACjClB,MAAM,GAAGI,CAAC;AAAA,YACVT,KAAK,GAAGU,CAAC;AAAA,YACTc,YAAY;AAAA,UAAA,CACf;AAAA,QACL;AAAA,MACJ,CAAC;AAAA,IACL,CAAC;AACD,WAAO,MAAMb,QAAAA;AAAAA,EACjB,GAAG,CAACtD,MAAM2Q,UAAU7J,KAAK,CAAC;AAE1B7E,YAAU,MAAM;AACZ,QAAI,CAAC0O,YAAY,CAAC3Q,KAAM;AAExB,UAAMqR,gBAAgBA,CAACzM,MAAqB;AACxC,UAAIyL,YAAY,cAAc;AAC1B,YAAIzL,EAAEY,QAAQ,UAAU;AACpBZ,YAAEC,eAAAA;AAAkBD,YAAE0M,gBAAAA;AAAmB1M,YAAE2M,yBAAAA;AAC3CzC,qBAAW,IAAI;AACfyB,6BAAmB;AAAA,YAAEC,GAAG;AAAA,YAC5CC,GAAG;AAAA,UAAA,CAAG;AAAA,QACU,WAAW7L,EAAEY,QAAQ,WAAW;AAC5BZ,YAAEC,eAAAA;AAAkBD,YAAE0M,gBAAAA;AACtBf,6BAAmBiB,CAAAA,UAAS;AAAA,YAAEhB,GAAG5N,KAAKG,IAAI,GAAGyO,KAAKhB,IAAI,CAAC;AAAA,YAC3EC,GAAGe,KAAKf;AAAAA,UAAAA,EAAI;AAAA,QACI,WAAW7L,EAAEY,QAAQ,aAAa;AAC9BZ,YAAEC,eAAAA;AAAkBD,YAAE0M,gBAAAA;AACtBf,6BAAmBiB,CAAAA,YAAS;AAAA,YAAEhB,GAAG5N,KAAKC,IAAI,GAAG2O,OAAKhB,IAAI,CAAC;AAAA,YAC3EC,GAAGe,OAAKf;AAAAA,UAAAA,EAAI;AAAA,QACI,WAAW7L,EAAEY,QAAQ,aAAa;AAC9BZ,YAAEC,eAAAA;AAAkBD,YAAE0M,gBAAAA;AACtBf,6BAAmBiB,CAAAA,YAAS;AAAA,YAAEhB,GAAGgB,OAAKhB;AAAAA,YAC1DC,GAAG7N,KAAKG,IAAI,GAAGyO,OAAKf,IAAI,CAAC;AAAA,UAAA,EAAI;AAAA,QACb,WAAW7L,EAAEY,QAAQ,cAAc;AAC/BZ,YAAEC,eAAAA;AAAkBD,YAAE0M,gBAAAA;AACtBf,6BAAmBiB,CAAAA,YAAS;AAAA,YAAEhB,GAAGgB,OAAKhB;AAAAA,YAC1DC,GAAG7N,KAAKC,IAAI,GAAG2O,OAAKf,IAAI,CAAC;AAAA,UAAA,EAAI;AAAA,QACb,WAAW7L,EAAEY,QAAQ,SAAS;AAC1BZ,YAAEC,eAAAA;AAAkBD,YAAE0M,gBAAAA;AACtB,cAAIxK,OAAO;AACP,kBAAM2K,YAAYC,gBAAgB1R,KAAKD,MAAMoH,QAAQmJ,gBAAgBE,IAAI,GAAGF,gBAAgBG,IAAI,CAAC;AACjG,kBAAM7K,KAAK5F,KAAKD,MAAM6F,GAAGgE,YAAY9C,MAAMpF,MAAMoF,MAAMnF,IAAI8P,SAAS;AACpE,gBAAI;AACA,oBAAMpQ,YAAY8E,cAAcwD,OAAO/D,GAAGpE,KAAKsF,MAAMpF,OAAO,CAAC;AAC7DkE,iBAAG+L,aAAatQ,SAAS;AAAA,YAC7B,SAASuD,KAAG;AACR6C,sBAAQ8B,KAAK,+BAA+B3E,GAAC;AAAA,YACjD;AACAgB,eAAGqD,QAAQ7D,uBAAuB;AAAA,cAAEM,QAAQ;AAAA,YAAA,CAAO;AACnD1F,iBAAKgJ,SAASpD,EAAE;AAChB5F,iBAAK4R,MAAAA;AACL9C,uBAAW,IAAI;AACfyB,+BAAmB;AAAA,cAAEC,GAAG;AAAA,cAChDC,GAAG;AAAA,YAAA,CAAG;AAAA,UACc;AAAA,QACJ;AACA;AAAA,MACJ;AAEA,UAAI7L,EAAEY,QAAQ,WAAW;AACrBZ,UAAEC,eAAAA;AACFD,UAAE0M,gBAAAA;AACFlB,yBAAiBoB,aAASA,SAAOZ,cAAc/J,SAAS,KAAK+J,cAAc/J,MAAM;AAAA,MACrF,WAAWjC,EAAEY,QAAQ,aAAa;AAC9BZ,UAAEC,eAAAA;AACFD,UAAE0M,gBAAAA;AACFlB,yBAAiBoB,CAAAA,YAASA,SAAO,KAAKZ,cAAc/J,MAAM;AAAA,MAC9D,WAAWjC,EAAEY,QAAQ,SAAS;AAC1BZ,UAAEC,eAAAA;AACFD,UAAE0M,gBAAAA;AACF,YAAIV,cAAcT,aAAa,KAAKrJ,OAAO;AACvC8J,wBAAcT,aAAa,EAAExC,QAAQ3N,MAAM8G,OAAOG,QAAQ4H,cAAcC,UAAU;AAElF1N,qBAAW,MAAM;AAAA,UACb,GACD,CAAC;AAAA,QACR;AAAA,MACJ,WAAWwD,EAAEY,QAAQ,UAAU;AAC3BZ,UAAEC,eAAAA;AACFD,UAAE0M,gBAAAA;AACF1M,UAAE2M,yBAAAA;AAEFvR,aAAKgJ,SAAShJ,KAAKD,MAAM6F,GAAGqD,QAAQ7D,uBAAuB;AAAA,UAAEM,QAAQ;AAAA,UACrFgB,WAAW;AAAA,QAAA,CAAM,CAAC;AAAA,MACN;AAAA,IACJ;AAEAmL,WAAOC,iBAAiB,WAAWT,eAAe;AAAA,MAAEU,SAAS;AAAA,IAAA,CAAM;AACnE,WAAO,MAAMF,OAAOG,oBAAoB,WAAWX,eAAe;AAAA,MAAEU,SAAS;AAAA,IAAA,CAAM;AAAA,EACvF,GAAG,CAACpB,UAAUR,eAAeS,eAAe5Q,MAAM8G,OAAOG,QAAQ4H,cAAcwB,SAASC,eAAe,CAAC;AAExG,QAAM2B,WAAWpR,OAAqC,EAAE;AAExDoB,YAAU,MAAM;AACZ,QAAIgQ,SAAS5P,QAAQ8N,aAAa,GAAG;AACjC8B,eAAS5P,QAAQ8N,aAAa,GAAG+B,eAAe;AAAA,QAAEC,OAAO;AAAA,MAAA,CAAW;AAAA,IACxE;AAAA,EACJ,GAAG,CAAChC,aAAa,CAAC;AAElBlO,YAAU,MAAM;AACZ,QAAI,CAACoO,SAAS;AACVE,yBAAmB;AAAA,QAAEC,GAAG;AAAA,QACpCC,GAAG;AAAA,MAAA,CAAG;AAAA,IACE;AAAA,EACJ,GAAG,CAACJ,OAAO,CAAC;AAEZ,MAAI,CAACM,YAAYC,cAAc/J,WAAW,EAAG,QAAO;AAEpD,MAAIwJ,YAAY,gBAAgBvJ,SAAS9G,MAAM;AAC3C,WACI,oBAAC,SACG,KAAKY,SACL,aAAcgE,CAAAA,QAAMA,IAAEC,eAAAA,GACtB,OAAO;AAAA,MAAEP,UAAU;AAAA,MACnCC,QAAQ;AAAA,MACRJ,YAAY;AAAA,IAAA,GACI,WAAWiO,IAAI,8GAA8GhK,kBAAkB,GAE/I,8BAAC,iBAAA,EACG,YAAYkI,gBAAgBE,GAC5B,YAAYF,gBAAgBG,GAC5B,SAAS,CAACD,GAAGC,OAAMF,mBAAmB;AAAA,MAAEC;AAAAA,MAC5DC,GAAAA;AAAAA,IAAAA,CAAG,GACiB,UAAU,CAAC4B,MAAMC,SAAS;AACtB,YAAMb,cAAYC,gBAAgB1R,KAAKD,MAAMoH,QAAQkL,MAAMC,IAAI;AAC/D,YAAM1M,OAAK5F,KAAKD,MAAM6F,GAAGgE,YAAY9C,MAAMpF,MAAMoF,MAAMnF,IAAI8P,WAAS;AACpE,UAAI;AACA,cAAMpQ,cAAY8E,cAAcwD,OAAO/D,KAAGpE,KAAKsF,MAAMpF,OAAO,CAAC;AAC7DkE,aAAG+L,aAAatQ,WAAS;AAAA,MAC7B,SAASuD,KAAG;AACR6C,gBAAQ8B,KAAK,+BAA+B3E,GAAC;AAAA,MACjD;AACAgB,WAAGqD,QAAQ7D,uBAAuB;AAAA,QAAEM,QAAQ;AAAA,MAAA,CAAO;AACnD1F,WAAKgJ,SAASpD,IAAE;AAChB5F,WAAK4R,MAAAA;AACL9C,iBAAW,IAAI;AAAA,IACnB,GAAE,EAAA,CAEV;AAAA,EAER;AAEA,SACI,oBAAC,OAAA,EACG,KAAKlO,SACL,OAAO;AAAA,IAAE0D,UAAU;AAAA,IAC/BC,QAAQ;AAAA,IACRJ,YAAY;AAAA,EAAA,GACA,WAAWiO,IAAI,uJAAuJhK,kBAAkB,GAEvLwI,UAAAA,cAAcvG,IAAI,CAAC8B,QAAMoG,UACtB,qBAAC,UAAA,EAEG,KAAKC,CAAAA,OAAM;AAAEP,aAAS5P,QAAQkQ,KAAK,IAAIC;AAAAA,EAAI,GAC3C,SAAU5N,CAAAA,QAAM;AACZA,QAAEC,eAAAA;AACF,QAAIiC,SAAS9G,MAAM;AACfmM,aAAKwB,QAAQ3N,MAAM8G,OAAOG,QAAQ4H,cAAcC,UAAU;AAE1D,UAAI,CAACuB,QAASrQ,MAAK4R,MAAAA;AAAAA,IACvB;AAAA,EACJ,GACA,aAAchN,CAAAA,QAAMA,IAAEC,eAAAA,GACtB,WAAWuN,IAAI,wHACXG,UAAUpC,gBAAgB,2CAA2C,EAAE,GAE3E,UAAA;AAAA,IAAA,oBAAC,SAAI,WAAWiC,IAAI,sGAAsGhK,kBAAkB,GACvI+D,iBAAKqB,MACV;AAAA,IACA,qBAAC,OAAA,EAAI,WAAU,iCACX,UAAA;AAAA,MAAA,oBAAC,KAAA,EAAE,WAAU,wBAAwBrB,UAAAA,OAAKkB,OAAM;AAAA,MAChD,oBAAC,KAAA,EAAE,WAAU,kEACRlB,iBAAKmB,YAAAA,CACV;AAAA,IAAA,EAAA,CACJ;AAAA,EAAA,EAAA,GAtBKnB,OAAKkB,KAuBd,CACH,GACL;AAER;AAEA,MAAMqE,kBAAkBA,CAACvK,SAA4CsL,WAAmBC,cAAsB;AAC1G,QAAML,OAAO,CAAA;AACb,WAAS7B,IAAI,GAAGA,IAAIiC,WAAWjC,KAAK;AAChC,UAAMmC,QAAQ,CAAA;AACd,aAASlC,KAAI,GAAGA,KAAIiC,WAAWjC,MAAK;AAChC,YAAMmC,WAAWpC,MAAM;AACvB,YAAMqC,WAAWD,WAAWzL,QAAOuC,MAAMoJ,eAAe3L,QAAOuC,MAAMqJ;AACrE,YAAMC,OAAOH,SAASI,cAAAA;AACtB,UAAID,KAAML,OAAM3B,KAAKgC,IAAI;AAAA,IAC7B;AACA,UAAME,MAAM/L,QAAOuC,MAAMyJ,UAAUxJ,OAAO,MAAMyJ,SAAS1R,KAAKiR,KAAK,CAAC;AACpEN,SAAKrB,KAAKkC,GAAG;AAAA,EACjB;AACA,SAAO/L,QAAOuC,MAAM2J,MAAM1J,OAAO,MAAMyJ,SAAS1R,KAAK2Q,IAAI,CAAC;AAC9D;AAEA,MAAMiB,kBAAkBjT,CAAAA,OAAA;AAAA,QAAAE,IAAAC,EAAA,EAAA;AAAC,QAAA;AAAA,IAAA+S;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAzO;AAAAA,EAAAA,IAAA3E;AAcR,QAAAY,KAAAuS,aAAU;AAAS,QAAAtS,KAAAqS,aAAU;AAAI,MAAArR;AAAA,MAAA3B,EAAA,CAAA,MAAAU,MAAAV,SAAAW,IAAA;AADtCgB,SAAA,qBAAA,QAAA,EAAgB,WAAA,0CACXjB,UAAAA;AAAAA,MAAAA;AAAAA,MAAe;AAAA,MAAIC;AAAAA,MAAe;AAAA,IAAA,GACvC;AAAOX,WAAAU;AAAAV,WAAAW;AAAAX,WAAA2B;AAAAA,EAAA,OAAA;AAAAA,SAAA3B,EAAA,CAAA;AAAA,EAAA;AAAA,MAAAiD;AAAA,MAAAjD,EAAA,CAAA,MAAA6D,uBAAAC,IAAA,2BAAA,GAAA;AAEFb,SAAAwH,MAAAtJ,KAAA;AAAA,MAAAmF,QAAA;AAAA,IAAA,CAAwB;AAACtG,WAAAiD;AAAAA,EAAA,OAAA;AAAAA,SAAAjD,EAAA,CAAA;AAAA,EAAA;AAAA,MAAAwD;AAAA,MAAAxD,EAAA,CAAA,MAAAiT,cAAAjT,EAAA,CAAA,MAAAgT,cAAAhT,EAAA,CAAA,MAAAkT,WAAAlT,SAAAyE,UAAA;AAD9BjB,SAAA,oBAAA,OAAA,EAAe,WAAA,uBACVP,aAAyB6G,IAAA,CAAAqJ,GAAAlD,MACtB,oBAAA,OAAA,EAAuB,WAAA,cAClBxF,gBAAAtJ,KAAA;AAAA,MAAAmF,QAAA;AAAA,IAAA,CAAwB,EAACwD,IAAA,CAAAsJ,KAAAlD,OACtB,oBAAA,OAAA,EAEe,WAAA2B,IACP,0EACA5B,KAAK+C,cAAc9C,MAAK+C,aAClB,sEACA,yFACV,GACc,cAAA,MAAMC,QAAQjD,GAAGC,EAAC,GACvB,SAAA,MAAMzL,SAASuO,aAAU,GAAMC,aAAU,CAAI,EAAA,GARjD/C,EAQkD,CAE9D,EAAA,GAbKD,CAcV,CACH,GACL;AAAMjQ,WAAAiT;AAAAjT,WAAAgT;AAAAhT,WAAAkT;AAAAlT,WAAAyE;AAAAzE,WAAAwD;AAAAA,EAAA,OAAA;AAAAA,SAAAxD,EAAA,CAAA;AAAA,EAAA;AAAA,MAAAiE;AAAA,MAAAjE,EAAA,CAAA,MAAA2B,MAAA3B,UAAAwD,IAAA;AAtBVS,SAAA,qBAAA,OAAA,EAAe,WAAA,6DACXtC,UAAAA;AAAAA,MAAAA;AAAAA,MAGA6B;AAAAA,IAAAA,GAmBJ;AAAMxD,WAAA2B;AAAA3B,YAAAwD;AAAAxD,YAAAiE;AAAAA,EAAA,OAAA;AAAAA,SAAAjE,EAAA,EAAA;AAAA,EAAA;AAAA,SAvBNiE;AAuBM;ACtfP,MAAMoP,cAAcxT,WACvB,CAAAC,IAAAC,QAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAC,QAAA;AAAA,IAAAE;AAAAA,IAAAC;AAAAA,EAAAA,IAAAN;AACG,QAAA;AAAA,IAAAL;AAAAA,IAAAD;AAAAA,EAAAA,IAAwBE,sBAAAA;AACxB,QAAA;AAAA,IAAA4T;AAAAA,EAAAA,IAAcC,eAAAA;AACd,QAAAlT,UAAgBC,OAAA,IAA2B;AAC3C,QAAA,CAAAC,MAAAC,OAAA,IAAwBC,cAAc;AACtC,QAAA,CAAA+S,KAAAC,MAAA,IAAsBhT,SAAS,EAAE;AACjC,QAAA,CAAAqM,OAAA4G,QAAA,IAA0BjT,SAAS,EAAE;AACrC,QAAA,CAAAkT,UAAAC,WAAA,IAAgCnT,aAA4B;AAAE,MAAAC;AAAA,MAAAC;AAAA,MAAAX,SAAAP,MAAA;AAEpDiB,SAAAA,MAAA;AAAA,UAAA,CACDjB,MAAI;AAAA;AAAA,MAAA;AACT,YAAAoU,oBAAAxP,CAAAA,MAAA;AACI,cAAAyP,UAAgBrU,KAAIuL,YAAA;AAAA,UAAAvI,MAAqB4B,EAAC4G;AAAAA,UAAA7I,KACrDiC,EAAC6G;AAAAA,QAAAA,CAAU;AAAE,YACE4I,WAAWA,QAAOC,UAAA,GAAY;AAC9B,gBAAA1S,OAAa5B,KAAID,MAAAyB,IAAA+S,OAAkBF,QAAOC,MAAO;AAAE,cAC/C1S,QAAQA,KAAIC,KAAAC,SAAe,SAAO;AAClC8C,cAACC,eAAAA;AACD,kBAAAe,KAAW5F,KAAID,MAAA6F,GAAA+L,aAAuB5P,cAAA4H,OAAqB3J,KAAID,MAAAyB,KAAY6S,QAAOC,MAAO,CAAC;AAC1FtU,iBAAIgJ,SAAUpD,EAAE;AAChB7E,wBAAY;AACZiT,mBAAOpS,KAAI4S,MAAAT,OAAc,EAAE;AAC3BE,qBAASrS,KAAI4S,MAAAnH,SAAgB,EAAE;AAC/B8G,wBAAYE,QAAOC,MAAO;AAAA,UAAC;AAAA,QAAA;AAAA,MAAA;AAIvCtU,WAAIyU,IAAA3C,iBAAsB,eAAesC,iBAAiB;AAE1D,YAAAM,kBAAA/P,CAAAA,QAAA;AAAA,YACQ/D,QAAOyB,WAAA,CAAazB,QAAOyB,QAAAsS,SAAkB/P,IAAC0D,MAAe,KAAK1D,IAACgQ,WAAA,GAAa;AAChF7T,uBAAa;AAAA,QAAC;AAAA,MAAA;AAGtBiH,eAAA8J,iBAA0B,aAAa4C,eAAe;AAAC,aAAA,MAAA;AAGnD1U,aAAIyU,IAAAzC,oBAAyB,eAAeoC,iBAAiB;AAC7DpM,iBAAAgK,oBAA6B,aAAa0C,eAAe;AAAA,MAAC;AAAA,IAAA;AAE/DxT,UAAClB,IAAI;AAACO,WAAAP;AAAAO,WAAAU;AAAAV,WAAAW;AAAAA,EAAA,OAAA;AAAAD,SAAAV,EAAA,CAAA;AAAAW,SAAAX,EAAA,CAAA;AAAA,EAAA;AA/BT0B,YAAUhB,IA+BPC,EAAM;AAAC,MAAAgB;AAAA,MAAA3B,SAAAG,SAAAyB,UAAA5B,EAAA,CAAA,MAAAG,SAAA0B,aAAA7B,EAAA,CAAA,MAAAO,QAAAP,SAAAR,SAAAQ,EAAA,CAAA,MAAAP,MAAA;AAEAkC,SAAAA,MAAA;AAAA,UACF,CAACpB,QAAI,CAAKd,SAASD,SAAK,CAAKa,QAAOyB,SAAQ;AAAA;AAAA,MAAA;AAEhD,YAAA;AAAA,QAAAX;AAAAA,QAAAC;AAAAA,MAAAA,IAAqB5B,MAAKsB;AAC1B,UAAAiB;AAAAA,cAAYtC,KAAIuC,YAAab,IAAI;AACjC,UAAAc;AAAAA,YAAUxC,KAAIuC,YAAaZ,EAAE;AAE7B,YAAAc,YAAA;AAAA,QAAAC,wBAAA;AAEQ,gBAAAC,MAAYC,KAAAC,IAASP,MAAKK,KAAMH,IAAGG,GAAI;AACvC,gBAAAG,SAAeF,KAAAG,IAAST,MAAKQ,QAASN,IAAGM,MAAO;AAChD,gBAAAE,OAAaJ,KAAAC,IAASP,MAAKU,MAAOR,IAAGQ,IAAK;AAC1C,gBAAAC,QAAcL,KAAAG,IAAST,MAAKW,OAAQT,IAAGS,KAAM;AAAE,iBAAA;AAAA,YAAAC,OAEpCD,QAAQD;AAAAA,YAAIG,QACXL,SAASH;AAAAA,YAAGS,GACjBJ;AAAAA,YAAIK,GACJV;AAAAA,YAAGA;AAAAA,YAAAK;AAAAA,YAAAC;AAAAA,YAAAH;AAAAA,UAAAA;AAAAA,QAAA;AAAA,MAAA;AASlB,YAAAQ,UAAgBC,WAAWd,WAA6B7B,QAAOyB,SAAA,MAAA;AAAA,YAAA,CACtDzB,QAAOyB,SAAA;AAAA;AAAA,QAAA;AAAA,YAAA;AAERC,kBAAQtC,KAAIuC,YAAaxC,MAAKsB,UAAAK,IAAe;AAC7Cc,gBAAMxC,KAAIuC,YAAaxC,MAAKsB,UAAAM,EAAa;AAAA,QAAtC,SAAA6B,KAAA;AAAA,QACG;AAIVC,wBAAgBhB,WAA6B7B,QAAOyB,SAAA;AAAA,UAAAD,WACrC1B,SAAO0B,aAAe;AAAA,UAAQsB,YAAA,CAC5BvB,OAAOzB,SAAOyB,UAAA,CAAa,GAAGwB,QAAQC,OAAO;AAAA,UAAAC,UAChD;AAAA,QAAA,CACb,EAACC,KAAAC,CAAAA,QAAA;AAAO,gBAAA;AAAA,YAAAX;AAAAA,YAAAC;AAAAA,UAAAA,IAAAU;AAAQ,cACTnD,QAAOyB,SAAA;AACP2B,mBAAAC,OAAcrD,QAAOyB,QAAA6B,OAAA;AAAA,cAAAlB,MACX,GAAGI,CAAC;AAAA,cAAIT,KACT,GAAGU,CAAC;AAAA,cAAIc,YACD;AAAA,YAAA,CACf;AAAA,UAAC;AAAA,QAAA,CAET;AAAA,MAAC,CACL;AAAE,aAAA,MACUb,QAAAA;AAAAA,IAAS;AACzB/C,MAAA,CAAA,IAAAG,SAAAyB;AAAA5B,MAAA,CAAA,IAAAG,SAAA0B;AAAA7B,WAAAO;AAAAP,WAAAR;AAAAQ,WAAAP;AAAAO,WAAA2B;AAAAA,EAAA,OAAA;AAAAA,SAAA3B,EAAA,CAAA;AAAA,EAAA;AAAA,MAAAiD;AAAA,MAAAjD,EAAA,CAAA,MAAAG,WAAAH,EAAA,EAAA,MAAAO,QAAAP,EAAA,EAAA,MAAAR,SAAAQ,UAAAP,MAAA;AAAEwD,UAAC1C,MAAMd,MAAMD,OAAOW,OAAO;AAACH,WAAAG;AAAAH,YAAAO;AAAAP,YAAAR;AAAAQ,YAAAP;AAAAO,YAAAiD;AAAAA,EAAA,OAAA;AAAAA,SAAAjD,EAAA,EAAA;AAAA,EAAA;AAlD/B0B,YAAUC,IAkDPsB,EAA4B;AAAC,MAAAO;AAAA,MAAAxD,EAAA,EAAA,MAAA2T,YAAA3T,UAAAP,MAAA;AAEb+D,SAAAA,CAAA8Q,QAAAC,aAAA;AAAA,UACXZ,aAAQ,QAAalU,MAAI;AACzB,cAAA+U,SAAa/U,KAAID,MAAAyB,IAAA+S,OAAkBL,QAAQ;AAAE,YACzCtS,UAAQA,OAAIC,KAAAC,SAAe,SAAO;AAClC,gBAAAkT,OAAWhV,KAAID,MAAA6F,GAAAqP,cAAwBf,UAAQhO,QAAA;AAAA,YAAA,GACxCtE,OAAI4S;AAAAA,YAAAT,KACFc;AAAAA,YAAMxH,OACJyH;AAAAA,UAAAA,CACV;AAEDlP,eAAE+L,aAAc5P,cAAA4H,OAAqB/D,KAAEpE,KAAM0S,QAAQ,CAAC;AACtDlU,eAAIgJ,SAAUpD,IAAE;AAAA,QAAC;AAAA,MAAA;AAAA,IAAA;AAG5BrF,YAAA2T;AAAA3T,YAAAP;AAAAO,YAAAwD;AAAAA,EAAA,OAAA;AAAAA,SAAAxD,EAAA,EAAA;AAAA,EAAA;AAdD,QAAA2U,aAAmBnR;AAcjB,MAAA,CAEGjD,MAAI;AAAA,WAAA;AAAA,EAAA;AAAA,MAAA0D;AAAA,MAAAjE,EAAA,EAAA,MAAA6D,uBAAAC,IAAA,2BAAA,GAAA;AAKMG,SAAA;AAAA,MAAAL,YAAc;AAAA,MAAQG,UACnC;AAAA,MAAOC,QAAA;AAAA,IAAA;AACLhE,YAAAiE;AAAAA,EAAA,OAAA;AAAAA,SAAAjE,EAAA,EAAA;AAAA,EAAA;AAAA,MAAA4U;AAAA,MAAA5U,UAAAI,WAAA;AACewU,SAAA/C,IAAI,wGAAsGhK,oBAAsBzH,SAAS;AAACJ,YAAAI;AAAAJ,YAAA4U;AAAAA,EAAA,OAAA;AAAAA,SAAA5U,EAAA,EAAA;AAAA,EAAA;AAAA,MAAA6U;AAAA,MAAA7U,UAAAsT,GAAA;AAYpIuB,SAAAvB,EAAE,UAAU;AAACtT,YAAAsT;AAAAtT,YAAA6U;AAAAA,EAAA,OAAA;AAAAA,SAAA7U,EAAA,EAAA;AAAA,EAAA;AAAA,MAAA8U;AAAA,MAAA9U,EAAA,EAAA,MAAA2U,cAAA3U,UAAA8M,OAAA;AAEhBgI,SAAAC,CAAAA,QAAA;AACNtB,aAAOpP,IAAC0D,OAAAzC,KAAa;AACrBqP,iBAAWtQ,IAAC0D,OAAAzC,OAAewH,KAAK;AAAA,IAAC;AACpC9M,YAAA2U;AAAA3U,YAAA8M;AAAA9M,YAAA8U;AAAAA,EAAA,OAAA;AAAAA,SAAA9U,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAgV;AAAA,MAAAhV,EAAA,EAAA,MAAAwT,OAAAxT,UAAA6U,MAAA7U,EAAA,EAAA,MAAA8U,IAAA;AAPLE,UAAA,oBAAC,aACS,MAAA,SACO,aAAAH,IACNrB,OAAAA,KACG,UAAAsB,GAAAA,CAGT;AACH9U,YAAAwT;AAAAxT,YAAA6U;AAAA7U,YAAA8U;AAAA9U,YAAAgV;AAAAA,EAAA,OAAA;AAAAA,UAAAhV,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAiV;AAAA,MAAAjV,UAAAsT,GAAA;AAGe2B,UAAA3B,EAAE,OAAO;AAACtT,YAAAsT;AAAAtT,YAAAiV;AAAAA,EAAA,OAAA;AAAAA,UAAAjV,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAkV;AAAA,MAAAlV,EAAA,EAAA,MAAAwT,OAAAxT,UAAA2U,YAAA;AAEbO,UAAAC,CAAAA,QAAA;AACNzB,eAASrP,IAAC0D,OAAAzC,KAAa;AACvBqP,iBAAWnB,KAAKnP,IAAC0D,OAAAzC,KAAa;AAAA,IAAC;AAClCtF,YAAAwT;AAAAxT,YAAA2U;AAAA3U,YAAAkV;AAAAA,EAAA,OAAA;AAAAA,UAAAlV,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAoV;AAAA,MAAApV,EAAA,EAAA,MAAAiV,OAAAjV,UAAAkV,OAAAlV,EAAA,EAAA,MAAA8M,OAAA;AAPLsI,UAAA,oBAAC,aACS,MAAA,SACO,aAAAH,KACNnI,OAAAA,OACG,UAAAoI,IAAAA,CAGT;AACHlV,YAAAiV;AAAAjV,YAAAkV;AAAAlV,YAAA8M;AAAA9M,YAAAoV;AAAAA,EAAA,OAAA;AAAAA,UAAApV,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAqV;AAAA,MAAArV,EAAA,EAAA,MAAAgV,OAAAhV,UAAAoV,OAAApV,EAAA,EAAA,MAAA4U,IAAA;AAhCNS,UAAA,qBAAA,SACShV,cACE,OAAA4D,IAGI,WAAA2Q,IACE,aAAA1Q,SASb8Q,UAAAA;AAAAA,MAAAA;AAAAA,MASAI;AAAAA,IAAAA,GASJ;AAAMpV,YAAAgV;AAAAhV,YAAAoV;AAAApV,YAAA4U;AAAA5U,YAAAqV;AAAAA,EAAA,OAAA;AAAAA,UAAArV,EAAA,EAAA;AAAA,EAAA;AAAA,SAjCNqV;AAiCM,CAGlB;AAEAhC,YAAYlP,cAAc;AAvJtB,SAAAD,QAAAoR,KAAA;AAAA,MA2HoBjR,IAAC0D,WAAY1D,IAACkR,eAAc;AAC5BlR,QAACC,eAAAA;AAAAA,EAAiB;AAAA;ACnH1C,MAAMkR,qBAAqBA,CAAChW,UAAuB;AAC/C,QAAM;AAAA,IAAEiW;AAAAA,EAAAA,IAAUjW,MAAMsB;AACxB,WAAS4U,IAAID,MAAME,OAAOD,IAAI,GAAGA,KAAK;AAClC,QAAID,MAAMpU,KAAKqU,CAAC,EAAEpU,KAAKC,SAAS,SAAS;AACrC,aAAO;AAAA,IACX;AAAA,EACJ;AACA,SAAO;AACX;AAMO,MAAMqU,cAAc/V,WACvB,CAAAC,IAAAC,QAAA;AAAA,QAAAC,IAAAC,EAAA,GAAA;AAAC,QAAA;AAAA,IAAAE;AAAAA,IAAAC;AAAAA,EAAAA,IAAAN;AACG,QAAA;AAAA,IAAAL;AAAAA,IAAAD;AAAAA,EAAAA,IAAwBE,sBAAAA;AACxB,QAAA;AAAA,IAAA4T;AAAAA,EAAAA,IAAcC,eAAAA;AACd,QAAAlT,UAAgBC,OAAA,IAA2B;AAC3C,QAAA,CAAAC,MAAAC,OAAA,IAAwBC,cAAc;AAAE,MAAAC;AAAA,MAAAV,SAAAR,OAAA;AAE9BkB,SAAAA,MAAA;AAAA,UAAA,CACDlB,OAAK;AAAA;AAAA,MAAA;AACVgB,cAAQgV,mBAAmBhW,KAAK,CAAC;AAAA,IAAC;AACrCQ,WAAAR;AAAAQ,WAAAU;AAAAA,EAAA,OAAA;AAAAA,SAAAV,EAAA,CAAA;AAAA,EAAA;AAAG,QAAAW,KAAAnB,OAAKsB;AAAW,MAAAa;AAAA,MAAA3B,SAAAW,IAAA;AAAjBgB,UAAChB,EAAgB;AAACX,WAAAW;AAAAX,WAAA2B;AAAAA,EAAA,OAAA;AAAAA,SAAA3B,EAAA,CAAA;AAAA,EAAA;AAHrB0B,YAAUhB,IAGPiB,EAAkB;AAAC,MAAAsB;AAAA,MAAAjD,SAAAG,SAAAyB,UAAA5B,EAAA,CAAA,MAAAG,SAAA0B,aAAA7B,EAAA,CAAA,MAAAO,QAAAP,SAAAR,SAAAQ,EAAA,CAAA,MAAAP,MAAA;AAEZwD,SAAAA,MAAA;AAAA,UACF,CAAC1C,QAAI,CAAKd,SAASD,SAAK,CAAKa,QAAOyB,SAAQ;AAAA;AAAA,MAAA;AAEhD,YAAA;AAAA,QAAAX;AAAAA,QAAAC;AAAAA,MAAAA,IAAqB5B,MAAKsB;AAAW,UAGjCrB,KAAIoW,aAAA;AAAA;AAAA,MAAA;AAER,UAAA9T;AAAAA,cAAYtC,KAAIuC,YAAab,IAAI;AACjC,UAAAc;AAAAA,YAAUxC,KAAIuC,YAAaZ,EAAE;AAE7B,YAAAc,YAAA;AAAA,QAAAC,wBAAA;AAEQ,gBAAAC,MAAYC,KAAAC,IAASP,MAAKK,KAAMH,IAAGG,GAAI;AACvC,gBAAAG,SAAeF,KAAAG,IAAST,MAAKQ,QAASN,IAAGM,MAAO;AAChD,gBAAAE,OAAaJ,KAAAC,IAASP,MAAKU,MAAOR,IAAGQ,IAAK;AAC1C,gBAAAC,QAAcL,KAAAG,IAAST,MAAKW,OAAQT,IAAGS,KAAM;AAAE,iBAAA;AAAA,YAAAC,OAGpCD,QAAQD;AAAAA,YAAIG,QACXL,SAASH;AAAAA,YAAGS,GACjBJ;AAAAA,YAAIK,GACJV;AAAAA,YAAGA;AAAAA,YAAAG;AAAAA,YAAAE;AAAAA,YAAAC;AAAAA,UAAAA;AAAAA,QAKE;AAAA,MAAA;AAIpB,YAAAK,UAAgBC,WAAWd,WAA6B7B,QAAOyB,SAAA,MAAA;AAAA,YACvD,CAACzB,QAAOyB,WAAYrC,KAAIoW,aAAY;AAAA;AAAA,QAAA;AAAA,YAAA;AAEpC9T,kBAAQtC,KAAIuC,YAAaxC,MAAKsB,UAAAK,IAAe;AAC7Cc,gBAAMxC,KAAIuC,YAAaxC,MAAKsB,UAAAM,EAAa;AAAA,QAAtC,SAAAoC,KAAA;AAAA,QACG;AAIVN,wBAAgBhB,WAA6B7B,QAAOyB,SAAA;AAAA,UAAAD,WACrC1B,SAAO0B,aAAe;AAAA,UAAKsB,YAAA,CACzBvB,OAAOzB,SAAOyB,UAAA,CAAa,GAAGwB,QAAQC,OAAO;AAAA,UAAAC,UAChD;AAAA,QAAA,CACb,EAACC,KAAAU,CAAAA,QAAA;AAAO,gBAAA;AAAA,YAAApB;AAAAA,YAAAC;AAAAA,UAAAA,IAAAmB;AAAQ,cACT5D,QAAOyB,SAAA;AACP2B,mBAAAC,OAAcrD,QAAOyB,QAAA6B,OAAA;AAAA,cAAAlB,MACX,GAAGI,CAAC;AAAA,cAAIT,KACT,GAAGU,CAAC;AAAA,cAAIc,YACD;AAAA,YAAA,CACf;AAAA,UAAC;AAAA,QAAA,CAET;AAAA,MAAC,CACL;AAAE,aAAA,MACUb,QAAAA;AAAAA,IAAS;AACzB/C,MAAA,CAAA,IAAAG,SAAAyB;AAAA5B,MAAA,CAAA,IAAAG,SAAA0B;AAAA7B,WAAAO;AAAAP,WAAAR;AAAAQ,WAAAP;AAAAO,WAAAiD;AAAAA,EAAA,OAAA;AAAAA,SAAAjD,EAAA,CAAA;AAAA,EAAA;AAAA,MAAAwD;AAAA,MAAAxD,EAAA,EAAA,MAAAG,WAAAH,EAAA,EAAA,MAAAO,QAAAP,EAAA,EAAA,MAAAR,SAAAQ,UAAAP,MAAA;AAAE+D,UAACjD,MAAMd,MAAMD,OAAOW,OAAO;AAACH,YAAAG;AAAAH,YAAAO;AAAAP,YAAAR;AAAAQ,YAAAP;AAAAO,YAAAwD;AAAAA,EAAA,OAAA;AAAAA,SAAAxD,EAAA,EAAA;AAAA,EAAA;AAvD/B0B,YAAUuB,IAuDPO,EAA4B;AAAC,MAE5B,CAACjD,QAAI,CAAKd,SAASD,OAAK;AAAA,WAAA;AAAA,EAAA;AAAA,MAAAyE;AAAA,MAAAjE,EAAA,EAAA,MAAAR,SAAAQ,UAAAP,MAAA;AAELwE,SAAA6R,CAAAA,QAAA;AACnBA,UAAItW,OAAOC,KAAIgJ,QAAS;AACxBhJ,WAAI4R,MAAAA;AAAAA,IAAQ;AACfrR,YAAAR;AAAAQ,YAAAP;AAAAO,YAAAiE;AAAAA,EAAA,OAAA;AAAAA,SAAAjE,EAAA,EAAA;AAAA,EAAA;AAHD,QAAA+V,iBAAuB9R;AAGrB,MAAA2Q;AAAA,MAAA5U,EAAA,EAAA,MAAA6D,uBAAAC,IAAA,2BAAA,GAAA;AAKa8Q,SAAA;AAAA,MAAAhR,YAAc;AAAA,MAAQG,UACnC;AAAA,MAAOC,QAAA;AAAA,IAAA;AACLhE,YAAA4U;AAAAA,EAAA,OAAA;AAAAA,SAAA5U,EAAA,EAAA;AAAA,EAAA;AAAA,MAAA6U;AAAA,MAAA7U,UAAAI,WAAA;AACeyU,SAAAhD,IAAI,oFAAkFhK,oBAAsBzH,SAAS;AAACJ,YAAAI;AAAAJ,YAAA6U;AAAAA,EAAA,OAAA;AAAAA,SAAA7U,EAAA,EAAA;AAAA,EAAA;AAAA,MAAA8U;AAAA,MAAA9U,UAAAsT,GAAA;AAO7GwB,SAAAxB,EAAE,gBAAgB;AAACtT,YAAAsT;AAAAtT,YAAA8U;AAAAA,EAAA,OAAA;AAAAA,SAAA9U,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAgV;AAAA,MAAAhV,UAAA+V,gBAAA;AACGf,UAAAA,MAAMe,eAAcC,YAAa;AAAChW,YAAA+V;AAAA/V,YAAAgV;AAAAA,EAAA,OAAA;AAAAA,UAAAhV,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAiV;AAAA,MAAAjV,EAAA,EAAA,MAAA6D,uBAAAC,IAAA,2BAAA,GAAA;AAChEmR,+BAAA,OAAA,EAAW,OAAA,MAAY,QAAA,MAAa,SAAA,aAAiB,MAAA,QAAc,QAAA,gBAA2B,aAAA,KAAkB,eAAA,SAAuB,gBAAA,SAAQ,UAAA;AAAA,MAAA,oBAAA,QAAA,EAAQ,GAAA,KAAM,GAAA,KAAU,OAAA,MAAY,QAAA,MAAQ,IAAA,KAAO,IAAA,KAAG;AAAA,MAAQ,oBAAA,UAAS,IAAA,MAAQ,IAAA,KAAO,IAAA,MAAQ,IAAA,KAAA,CAAI;AAAA,MAAQ,oBAAA,UAAS,IAAA,KAAO,IAAA,MAAQ,IAAA,MAAQ,IAAA,KAAA,CAAI;AAAA,MAAQ,oBAAA,UAAS,IAAA,KAAO,IAAA,KAAO,IAAA,MAAQ,IAAA,IAAA,CAAG;AAAA,IAAA,GAAQ;AAAMjV,YAAAiV;AAAAA,EAAA,OAAA;AAAAA,UAAAjV,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAkV;AAAA,MAAAlV,UAAAgV,KAAA;AADzVE,8BAAC,YAAA,EAAgB,MAAA,SAAiB,SAAAF,KAC9BC,UAAAA,KACJ;AAAajV,YAAAgV;AAAAhV,YAAAkV;AAAAA,EAAA,OAAA;AAAAA,UAAAlV,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAoV;AAAA,MAAApV,EAAA,EAAA,MAAAkV,OAAAlV,UAAA8U,IAAA;AAHjBM,UAAA,oBAAC,SAAA,EAAe,OAAAN,IACZI,UAAAA,KAGJ;AAAUlV,YAAAkV;AAAAlV,YAAA8U;AAAA9U,YAAAoV;AAAAA,EAAA,OAAA;AAAAA,UAAApV,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAqV;AAAA,MAAArV,UAAAsT,GAAA;AACM+B,UAAA/B,EAAE,eAAe;AAACtT,YAAAsT;AAAAtT,YAAAqV;AAAAA,EAAA,OAAA;AAAAA,UAAArV,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAiW;AAAA,MAAAjW,UAAA+V,gBAAA;AACIE,UAAAA,MAAMF,eAAcG,WAAY;AAAClW,YAAA+V;AAAA/V,YAAAiW;AAAAA,EAAA,OAAA;AAAAA,UAAAjW,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAmW;AAAA,MAAAnW,EAAA,EAAA,MAAA6D,uBAAAC,IAAA,2BAAA,GAAA;AAC/DqS,+BAAA,OAAA,EAAW,OAAA,MAAY,QAAA,MAAa,SAAA,aAAiB,MAAA,QAAc,QAAA,gBAA2B,aAAA,KAAkB,eAAA,SAAuB,gBAAA,SAAQ,UAAA;AAAA,MAAA,oBAAA,QAAA,EAAQ,GAAA,KAAM,GAAA,KAAU,OAAA,MAAY,QAAA,MAAQ,IAAA,KAAO,IAAA,KAAG;AAAA,MAAQ,oBAAA,UAAS,IAAA,MAAQ,IAAA,MAAQ,IAAA,MAAQ,IAAA,KAAA,CAAI;AAAA,MAAQ,oBAAA,UAAS,IAAA,KAAO,IAAA,MAAQ,IAAA,MAAQ,IAAA,KAAA,CAAI;AAAA,MAAQ,oBAAA,UAAS,IAAA,KAAO,IAAA,MAAQ,IAAA,MAAQ,IAAA,KAAA,CAAI;AAAA,IAAA,GAAQ;AAAMnW,YAAAmW;AAAAA,EAAA,OAAA;AAAAA,UAAAnW,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAoW;AAAA,MAAApW,UAAAiW,KAAA;AAD5VG,8BAAC,YAAA,EAAgB,MAAA,SAAiB,SAAAH,KAC9BE,UAAAA,KACJ;AAAanW,YAAAiW;AAAAjW,YAAAoW;AAAAA,EAAA,OAAA;AAAAA,UAAApW,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAqW;AAAA,MAAArW,EAAA,EAAA,MAAAqV,OAAArV,UAAAoW,KAAA;AAHjBC,UAAA,oBAAC,SAAA,EAAe,OAAAhB,KACZe,UAAAA,KAGJ;AAAUpW,YAAAqV;AAAArV,YAAAoW;AAAApW,YAAAqW;AAAAA,EAAA,OAAA;AAAAA,UAAArW,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAsW;AAAA,MAAAtW,UAAAsT,GAAA;AACMgD,UAAAhD,EAAE,YAAY;AAACtT,YAAAsT;AAAAtT,YAAAsW;AAAAA,EAAA,OAAA;AAAAA,UAAAtW,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAuW;AAAA,MAAAvW,UAAA+V,gBAAA;AACOQ,UAAAA,MAAMR,eAAcS,SAAU;AAACxW,YAAA+V;AAAA/V,YAAAuW;AAAAA,EAAA,OAAA;AAAAA,UAAAvW,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAyW;AAAA,MAAAzW,EAAA,EAAA,MAAA6D,uBAAAC,IAAA,2BAAA,GAAA;AAC7D2S,+BAAA,OAAA,EAAW,OAAA,MAAY,QAAA,MAAa,SAAA,aAAiB,MAAA,QAAc,QAAA,gBAA2B,aAAA,KAAkB,eAAA,SAAuB,gBAAA,SAAQ,UAAA;AAAA,MAAA,oBAAA,QAAA,EAAQ,GAAA,KAAM,GAAA,KAAU,OAAA,MAAY,QAAA,MAAQ,IAAA,KAAO,IAAA,KAAG;AAAA,MAAQ,8BAAS,IAAA,KAAO,IAAA,MAAQ,IAAA,MAAQ,IAAA,KAAA,CAAI;AAAA,MAAQ,oBAAA,UAAS,IAAA,KAAO,IAAA,MAAQ,IAAA,MAAQ,IAAA,KAAA,CAAI;AAAA,IAAA,GAAQ;AAAMzW,YAAAyW;AAAAA,EAAA,OAAA;AAAAA,UAAAzW,EAAA,EAAA;AAAA,EAAA;AAAA,MAAA0W;AAAA,MAAA1W,UAAAuW,KAAA;AAD/SG,8BAAC,YAAA,EAAgB,MAAA,SAAiB,SAAAH,KAC9BE,UAAAA,KACJ;AAAazW,YAAAuW;AAAAvW,YAAA0W;AAAAA,EAAA,OAAA;AAAAA,UAAA1W,EAAA,EAAA;AAAA,EAAA;AAAA,MAAA2W;AAAA,MAAA3W,EAAA,EAAA,MAAAsW,OAAAtW,UAAA0W,KAAA;AAHjBC,UAAA,oBAAC,SAAA,EAAe,OAAAL,KACZI,UAAAA,KAGJ;AAAU1W,YAAAsW;AAAAtW,YAAA0W;AAAA1W,YAAA2W;AAAAA,EAAA,OAAA;AAAAA,UAAA3W,EAAA,EAAA;AAAA,EAAA;AAAA,MAAA4W;AAAA,MAAA5W,EAAA,EAAA,MAAAoV,OAAApV,UAAAqW,OAAArW,EAAA,EAAA,MAAA2W,KAAA;AAfdC,wCAAe,WAAA,sDACXxB,UAAAA;AAAAA,MAAAA;AAAAA,MAKAiB;AAAAA,MAKAM;AAAAA,IAAAA,GAKJ;AAAM3W,YAAAoV;AAAApV,YAAAqW;AAAArW,YAAA2W;AAAA3W,YAAA4W;AAAAA,EAAA,OAAA;AAAAA,UAAA5W,EAAA,EAAA;AAAA,EAAA;AAAA,MAAA6W;AAAA,MAAA7W,UAAAsT,GAAA;AAGcuD,UAAAvD,EAAE,mBAAmB;AAACtT,YAAAsT;AAAAtT,YAAA6W;AAAAA,EAAA,OAAA;AAAAA,UAAA7W,EAAA,EAAA;AAAA,EAAA;AAAA,MAAA8W;AAAA,MAAA9W,UAAA+V,gBAAA;AACAe,UAAAA,MAAMf,eAAcgB,eAAgB;AAAC/W,YAAA+V;AAAA/V,YAAA8W;AAAAA,EAAA,OAAA;AAAAA,UAAA9W,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAgX;AAAA,MAAAhX,EAAA,EAAA,MAAA6D,uBAAAC,IAAA,2BAAA,GAAA;AACnEkT,+BAAA,OAAA,EAAW,OAAA,MAAY,QAAA,MAAa,SAAA,aAAiB,MAAA,QAAc,QAAA,gBAA2B,aAAA,KAAkB,eAAA,SAAuB,gBAAA,SAAQ,UAAA;AAAA,MAAA,oBAAA,QAAA,EAAQ,GAAA,KAAM,GAAA,KAAU,OAAA,MAAY,QAAA,MAAQ,IAAA,KAAO,IAAA,KAAG;AAAA,MAAQ,oBAAA,UAAS,IAAA,KAAO,IAAA,MAAQ,IAAA,MAAQ,IAAA,KAAA,CAAI;AAAA,MAAQ,oBAAA,UAAS,IAAA,MAAQ,IAAA,KAAO,IAAA,MAAQ,IAAA,KAAA,CAAI;AAAA,MAAQ,oBAAA,UAAS,IAAA,KAAO,IAAA,KAAO,IAAA,KAAO,IAAA,KAAA,CAAI;AAAA,IAAA,GAAQ;AAAMhX,YAAAgX;AAAAA,EAAA,OAAA;AAAAA,UAAAhX,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAiX;AAAA,MAAAjX,UAAA8W,KAAA;AADzVG,8BAAC,YAAA,EAAgB,MAAA,SAAiB,SAAAH,KAC9BE,UAAAA,KACJ;AAAahX,YAAA8W;AAAA9W,YAAAiX;AAAAA,EAAA,OAAA;AAAAA,UAAAjX,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAkX;AAAA,MAAAlX,EAAA,EAAA,MAAA6W,OAAA7W,UAAAiX,KAAA;AAHjBC,UAAA,oBAAC,SAAA,EAAe,OAAAL,KACZI,UAAAA,KAGJ;AAAUjX,YAAA6W;AAAA7W,YAAAiX;AAAAjX,YAAAkX;AAAAA,EAAA,OAAA;AAAAA,UAAAlX,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAmX;AAAA,MAAAnX,UAAAsT,GAAA;AACM6D,UAAA7D,EAAE,kBAAkB;AAACtT,YAAAsT;AAAAtT,YAAAmX;AAAAA,EAAA,OAAA;AAAAA,UAAAnX,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAoX;AAAA,MAAApX,UAAA+V,gBAAA;AACCqB,UAAAA,MAAMrB,eAAcsB,cAAe;AAACrX,YAAA+V;AAAA/V,YAAAoX;AAAAA,EAAA,OAAA;AAAAA,UAAApX,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAsX;AAAA,MAAAtX,EAAA,EAAA,MAAA6D,uBAAAC,IAAA,2BAAA,GAAA;AAClEwT,+BAAA,OAAA,EAAW,OAAA,MAAY,QAAA,MAAa,SAAA,aAAiB,MAAA,QAAc,QAAA,gBAA2B,aAAA,KAAkB,eAAA,SAAuB,gBAAA,SAAQ,UAAA;AAAA,MAAA,oBAAA,QAAA,EAAQ,GAAA,KAAM,GAAA,KAAU,OAAA,MAAY,QAAA,MAAQ,IAAA,KAAO,IAAA,KAAG;AAAA,MAAQ,oBAAA,UAAS,IAAA,MAAQ,IAAA,MAAQ,IAAA,MAAQ,IAAA,KAAA,CAAI;AAAA,MAAQ,oBAAA,UAAS,IAAA,MAAQ,IAAA,KAAO,IAAA,MAAQ,IAAA,KAAA,CAAI;AAAA,MAAQ,oBAAA,UAAS,IAAA,MAAQ,IAAA,KAAO,IAAA,MAAQ,IAAA,KAAA,CAAI;AAAA,IAAA,GAAQ;AAAMtX,YAAAsX;AAAAA,EAAA,OAAA;AAAAA,UAAAtX,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAuX;AAAA,MAAAvX,UAAAoX,KAAA;AAD5VG,8BAAC,YAAA,EAAgB,MAAA,SAAiB,SAAAH,KAC9BE,UAAAA,KACJ;AAAatX,YAAAoX;AAAApX,YAAAuX;AAAAA,EAAA,OAAA;AAAAA,UAAAvX,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAwX;AAAA,MAAAxX,EAAA,EAAA,MAAAmX,OAAAnX,UAAAuX,KAAA;AAHjBC,UAAA,oBAAC,SAAA,EAAe,OAAAL,KACZI,UAAAA,KAGJ;AAAUvX,YAAAmX;AAAAnX,YAAAuX;AAAAvX,YAAAwX;AAAAA,EAAA,OAAA;AAAAA,UAAAxX,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAyX;AAAA,MAAAzX,UAAAsT,GAAA;AACMmE,UAAAnE,EAAE,eAAe;AAACtT,YAAAsT;AAAAtT,YAAAyX;AAAAA,EAAA,OAAA;AAAAA,UAAAzX,EAAA,EAAA;AAAA,EAAA;AAAA,MAAA0X;AAAA,MAAA1X,UAAA+V,gBAAA;AACI2B,UAAAA,MAAM3B,eAAc4B,YAAa;AAAC3X,YAAA+V;AAAA/V,YAAA0X;AAAAA,EAAA,OAAA;AAAAA,UAAA1X,EAAA,EAAA;AAAA,EAAA;AAAA,MAAA4X;AAAA,MAAA5X,EAAA,EAAA,MAAA6D,uBAAAC,IAAA,2BAAA,GAAA;AAChE8T,+BAAA,OAAA,EAAW,OAAA,MAAY,QAAA,MAAa,SAAA,aAAiB,MAAA,QAAc,QAAA,gBAA2B,aAAA,KAAkB,eAAA,SAAuB,gBAAA,SAAQ,UAAA;AAAA,MAAA,oBAAA,QAAA,EAAQ,GAAA,KAAM,GAAA,KAAU,OAAA,MAAY,QAAA,MAAQ,IAAA,KAAO,IAAA,KAAG;AAAA,MAAQ,8BAAS,IAAA,MAAQ,IAAA,KAAO,IAAA,MAAQ,IAAA,KAAA,CAAI;AAAA,MAAQ,oBAAA,UAAS,IAAA,MAAQ,IAAA,KAAO,IAAA,MAAQ,IAAA,KAAA,CAAI;AAAA,IAAA,GAAQ;AAAM5X,YAAA4X;AAAAA,EAAA,OAAA;AAAAA,UAAA5X,EAAA,EAAA;AAAA,EAAA;AAAA,MAAA6X;AAAA,MAAA7X,UAAA0X,KAAA;AAD/SG,8BAAC,YAAA,EAAgB,MAAA,SAAiB,SAAAH,KAC9BE,UAAAA,KACJ;AAAa5X,YAAA0X;AAAA1X,YAAA6X;AAAAA,EAAA,OAAA;AAAAA,UAAA7X,EAAA,EAAA;AAAA,EAAA;AAAA,MAAA8X;AAAA,MAAA9X,EAAA,EAAA,MAAAyX,OAAAzX,UAAA6X,KAAA;AAHjBC,UAAA,oBAAC,SAAA,EAAe,OAAAL,KACZI,UAAAA,KAGJ;AAAU7X,YAAAyX;AAAAzX,YAAA6X;AAAA7X,YAAA8X;AAAAA,EAAA,OAAA;AAAAA,UAAA9X,EAAA,EAAA;AAAA,EAAA;AAAA,MAAA+X;AAAA,MAAA/X,EAAA,EAAA,MAAAkX,OAAAlX,UAAAwX,OAAAxX,EAAA,EAAA,MAAA8X,KAAA;AAfdC,wCAAe,WAAA,sDACXb,UAAAA;AAAAA,MAAAA;AAAAA,MAKAM;AAAAA,MAKAM;AAAAA,IAAAA,GAKJ;AAAM9X,YAAAkX;AAAAlX,YAAAwX;AAAAxX,YAAA8X;AAAA9X,YAAA+X;AAAAA,EAAA,OAAA;AAAAA,UAAA/X,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAgY;AAAA,MAAAhY,UAAAsT,GAAA;AAEU0E,UAAA1E,EAAE,cAAc;AAACtT,YAAAsT;AAAAtT,YAAAgY;AAAAA,EAAA,OAAA;AAAAA,UAAAhY,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAiY;AAAA,MAAAjY,UAAA+V,gBAAA;AACKkC,UAAAA,MAAMlC,eAAcmC,WAAY;AAAClY,YAAA+V;AAAA/V,YAAAiY;AAAAA,EAAA,OAAA;AAAAA,UAAAjY,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAmY;AAAA,MAAAnY,EAAA,EAAA,MAAA6D,uBAAAC,IAAA,2BAAA,GAAA;AAC/DqU,wCAAW,OAAA,MAAY,QAAA,MAAa,SAAA,aAAiB,MAAA,QAAc,QAAA,gBAA2B,aAAA,KAAkB,eAAA,SAAuB,gBAAA,SAAQ,UAAA;AAAA,MAAA,oBAAA,YAAA,EAAiB,QAAA,eAAA,CAAc;AAAA,MAAY,oBAAA,QAAA,EAAQ,GAAA,iFAAA,CAAgF;AAAA,MAAQ,8BAAS,IAAA,MAAQ,IAAA,MAAQ,IAAA,MAAQ,IAAA,KAAA,CAAI;AAAA,MAAQ,oBAAA,UAAS,IAAA,MAAQ,IAAA,MAAQ,IAAA,MAAQ,IAAA,KAAA,CAAI;AAAA,IAAA,GAAQ;AAAMnY,YAAAmY;AAAAA,EAAA,OAAA;AAAAA,UAAAnY,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAoY;AAAA,MAAApY,UAAAiY,KAAA;AAD9XG,8BAAC,YAAA,EAAgB,MAAA,SAAiB,SAAAH,KAC9BE,UAAAA,KACJ;AAAanY,YAAAiY;AAAAjY,YAAAoY;AAAAA,EAAA,OAAA;AAAAA,UAAApY,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAqY;AAAA,MAAArY,EAAA,EAAA,MAAAgY,OAAAhY,UAAAoY,KAAA;AAHjBC,UAAA,oBAAC,SAAA,EAAe,OAAAL,KACZI,UAAAA,KAGJ;AAAUpY,YAAAgY;AAAAhY,YAAAoY;AAAApY,YAAAqY;AAAAA,EAAA,OAAA;AAAAA,UAAArY,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAsY;AAAA,MAAAtY,EAAA,EAAA,MAAA4W,OAAA5W,EAAA,GAAA,MAAA+X,OAAA/X,EAAA,GAAA,MAAAqY,OAAArY,WAAA6U,IAAA;AAnDdyD,UAAA,qBAAA,SACSjY,cACE,OAAAuU,IAGI,WAAAC,IACE,aAAA3Q,SAKb0S,UAAAA;AAAAA,MAAAA;AAAAA,MAkBAmB;AAAAA,MAkBAM;AAAAA,IAAAA,GAKJ;AAAMrY,YAAA4W;AAAA5W,aAAA+X;AAAA/X,aAAAqY;AAAArY,aAAA6U;AAAA7U,aAAAsY;AAAAA,EAAA,OAAA;AAAAA,UAAAtY,EAAA,GAAA;AAAA,EAAA;AAAA,SApDNsY;AAoDM,CAGlB;AAEA1C,YAAYzR,cAAc;AArItB,SAAAD,QAAAE,KAAA;AAoFgBC,MAACC,eAAAA;AAAiB;ACtH/B,SAASiU,aAAa/Y,OAAoB8B,MAAgB;AAC7D,MAAI,CAAC9B,SAAS,CAAC8B,KAAM,QAAO;AAC5B,QAAM;AAAA,IAAEH;AAAAA,IAAMsU;AAAAA,IAAOrU;AAAAA,IAAIL;AAAAA,EAAAA,IAAUvB,MAAMsB;AACzC,MAAIC,MAAO,QAAO,CAAC,CAACO,KAAKkX,QAAQhZ,MAAMiZ,eAAehD,MAAMiD,OAAO;AACnE,SAAOlZ,MAAMyB,IAAI0X,aAAaxX,MAAMC,IAAIE,IAAI;AAChD;AAEO,SAASsX,aAAapZ,OAAoB8B,MAAgB2S,QAAiC,CAAA,GAAI;AAClG,MAAI,CAACzU,SAAS,CAAC8B,KAAM,QAAO;AAC5B,QAAMR,YAAYtB,MAAMsB;AACxB,QAAM;AAAA,IAAE2U;AAAAA,IAAOrU;AAAAA,EAAAA,IAAON;AACtB,QAAMO,OAAOP,qBAAqB8E,gBAAgBD,SAAa7E,UAAoDO;AACnH,MAAIA,MAAM;AACN,WAAOA,KAAKC,SAASA,SAAS,CAAC2S,SAASxQ,OAAOoV,KAAK5E,KAAK,EAAE6E,MAAO7T,SAAQ5D,KAAK4S,MAAMhP,GAAG,MAAMgP,MAAMhP,GAAG,CAAC;AAAA,EAC5G;AACA,SAAO7D,MAAMqU,MAAMxT,IAAAA,KAASwT,MAAM3P,OAAOxE,SAASA,SAAS,CAAC2S,SAASxQ,OAAOoV,KAAK5E,KAAK,EAAE6E,MAAO7T,CAAAA,QAAQwQ,MAAM3P,OAAOmO,MAAMhP,GAAG,MAAMgP,MAAMhP,GAAG,CAAC;AACjJ;AAEO,SAAS8T,kBAAkBvZ,OAAoB8B,MAAgB;AAClE,MAAI,CAAC9B,SAAS,CAAC8B,aAAa,CAAA;AAC5B,QAAM;AAAA,IAAEH;AAAAA,IAAMsU;AAAAA,IAAOrU;AAAAA,IAAIL;AAAAA,EAAAA,IAAUvB,MAAMsB;AACzC,MAAIkY;AACJ,MAAIjY,OAAO;AACPiY,WAAO1X,KAAKkX,QAAQhZ,MAAMiZ,eAAehD,MAAMiD,OAAO;AAAA,EAC1D,OAAO;AACH,QAAIO,QAAQ;AACZzZ,UAAMyB,IAAIC,aAAaC,MAAMC,IAAKC,CAAAA,SAAS;AACvC,UAAI4X,MAAO,QAAO;AAClB,YAAMC,IAAI5X,KAAKkX,QAAQnX,KAAKqX,KAAK;AACjC,UAAIQ,GAAG;AACHF,eAAOE;AACPD,gBAAQ;AAAA,MACZ;AACA,aAAO;AAAA,IACX,CAAC;AAAA,EACL;AACA,SAAOD,OAAOA,KAAK/E,QAAQ,CAAA;AAC/B;AAEO,SAASkF,QAAQ7X,MAAgB2S,OAAiC;AACrE,SAAO,CAACzU,OAAoBiJ,aAAyC;AACjE,UAAM3H,YAAYtB,MAAMsB;AACxB,UAAM;AAAA,MAAEC;AAAAA,MAAOqY;AAAAA,MAASC;AAAAA,IAAAA,IAAWvY;AACnC,QAAKC,SAAS,CAACqY,WAAY,CAAC9X,KAAM,QAAO;AACzC,QAAImH,UAAU;AACV,UAAI2Q,SAAS;AACT3Q,iBAASjJ,MAAM6F,GAAGiU,cAAchY,KAAK8H,OAAO6K,KAAK,CAAC,CAAC;AAAA,MACvD,OAAO;AACH,cAAM5O,KAAK7F,MAAM6F;AACjB,iBAASkU,IAAI,GAAGA,IAAIF,OAAO/S,QAAQiT,KAAK;AACpC,gBAAM;AAAA,YAAE9D;AAAAA,YAAO+D;AAAAA,UAAAA,IAAQH,OAAOE,CAAC;AAC/BlU,aAAGoU,QAAQhE,MAAMpP,KAAKmT,IAAInT,KAAK/E,KAAK8H,OAAO6K,KAAK,CAAC;AAAA,QACrD;AACAxL,iBAASpD,GAAGsM,gBAAgB;AAAA,MAChC;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AACJ;AAEO,SAAS+H,UAAUpY,MAAgB;AACtC,SAAO,CAAC9B,OAAoBiJ,aAAyC;AACjE,UAAM3H,YAAYtB,MAAMsB;AACxB,UAAM;AAAA,MAAEC;AAAAA,MAAOqY;AAAAA,MAASC;AAAAA,IAAAA,IAAWvY;AACnC,QAAKC,SAAS,CAACqY,WAAY,CAAC9X,KAAM,QAAO;AACzC,QAAImH,UAAU;AACV,YAAMpD,KAAK7F,MAAM6F;AACjB,UAAI+T,SAAS;AACT,cAAMtT,SAASsT,QAAQtT;AACvB,YAAI6T,YAAY;AAChB,YAAIC,UAAU;AACd,YAAIC,mBAAmB;AAEvB/T,eAAOiF,QAAQ,CAAC+O,OAAwBlY,YAAmB;AACvD,gBAAMmY,aAAaX,QAAQrX,MAAAA,IAAUH;AACrC,gBAAMoY,WAAWD,aAAaD,MAAMG;AAEpC,cAAI3Y,KAAKkX,QAAQsB,MAAMpB,KAAK,GAAG;AAC3B,gBAAImB,qBAAqB,GAAIA,oBAAmBE;AAChD,gBAAIX,QAAQ/S,OAAO0T,cAAcX,QAAQ/S,OAAO2T,UAAU;AACtDL,0BAAYE;AAAAA,YAChB;AAAA,UACJ,OAAO;AACH,gBAAIA,qBAAqB,IAAI;AACzB,kBAAIF,cAAc,MAAMC,YAAY,GAAIA,WAAUG;AAClDF,iCAAmB;AAAA,YACvB;AAAA,UACJ;AAAA,QACJ,CAAC;AAED,YAAIF,cAAc,MAAMC,YAAY,IAAI;AACpCA,oBAAUR,QAAQnX,IAAAA;AAAAA,QACtB;AAEA,YAAI0X,cAAc,MAAMC,YAAY,IAAI;AACpCvU,aAAG6U,WAAWP,WAAWC,SAAStY,IAAI;AAAA,QAC1C;AACA+D,WAAG8U,iBAAiB7Y,IAAI;AACxBmH,iBAASpD,GAAGsM,gBAAgB;AAAA,MAChC,OAAO;AACH,iBAAS4H,IAAI,GAAGA,IAAIF,OAAO/S,QAAQiT,KAAK;AACpC,gBAAM;AAAA,YAAE9D;AAAAA,YAAO+D;AAAAA,UAAAA,IAAQH,OAAOE,CAAC;AAC/BlU,aAAG6U,WAAWzE,MAAMpP,KAAKmT,IAAInT,KAAK/E,IAAI;AAAA,QAC1C;AACAmH,iBAASpD,GAAGsM,gBAAgB;AAAA,MAChC;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AACJ;AC3FA,MAAMjG,QAAwB,CAC1B;AAAA,EACInK,MAAM;AAAA,EACN6Y,UAAU;AAAA,EACVnN,MAAMoN;AAAAA,EACNjN,SAASA,CAAC5N,OAAOiJ,aAAa6E,aAAa1G,OAAOuC,MAAMoE,SAAS,EAAE/N,OAAOiJ,QAAQ;AAAA,EAClF2H,UAAW5Q,WACPoZ,aAAapZ,OAAOoH,OAAOuC,MAAMoE,SAAS,KAC1C,CAACqL,aAAapZ,OAAOoH,OAAOuC,MAAMyE,WAAW,KAC7C,CAACgL,aAAapZ,OAAOoH,OAAOuC,MAAM0E,YAAY;AACtD,GACA;AAAA,EACItM,MAAM;AAAA,EACN6Y,UAAU;AAAA,EACVnN,MAAMqN;AAAAA,EACNlN,SAASA,CAAC5N,OAAOiJ,aAAa6E,aAAa1G,OAAOuC,MAAMuE,SAAS;AAAA,IAAEC,OAAO;AAAA,EAAA,CAAG,EAAEnO,OAAOiJ,QAAQ;AAAA,EAC9F2H,UAAW5Q,CAAAA,UAAUoZ,aAAapZ,OAAOoH,OAAOuC,MAAMuE,SAAS;AAAA,IAAEC,OAAO;AAAA,EAAA,CAAG;AAC/E,GACA;AAAA,EACIpM,MAAM;AAAA,EACN6Y,UAAU;AAAA,EACVnN,MAAMsN;AAAAA,EACNnN,SAASA,CAAC5N,OAAOiJ,aAAa6E,aAAa1G,OAAOuC,MAAMuE,SAAS;AAAA,IAAEC,OAAO;AAAA,EAAA,CAAG,EAAEnO,OAAOiJ,QAAQ;AAAA,EAC9F2H,UAAW5Q,CAAAA,UAAUoZ,aAAapZ,OAAOoH,OAAOuC,MAAMuE,SAAS;AAAA,IAAEC,OAAO;AAAA,EAAA,CAAG;AAC/E,GACA;AAAA,EACIpM,MAAM;AAAA,EACN6Y,UAAU;AAAA,EACVnN,MAAMuN;AAAAA,EACNpN,SAASA,CAAC5N,OAAOiJ,aAAa6E,aAAa1G,OAAOuC,MAAMuE,SAAS;AAAA,IAAEC,OAAO;AAAA,EAAA,CAAG,EAAEnO,OAAOiJ,QAAQ;AAAA,EAC9F2H,UAAW5Q,CAAAA,UAAUoZ,aAAapZ,OAAOoH,OAAOuC,MAAMuE,SAAS;AAAA,IAAEC,OAAO;AAAA,EAAA,CAAG;AAC/E,GACA;AAAA,EACIpM,MAAM;AAAA,EACN6Y,UAAU;AAAA,EACVnN,MAAMwN;AAAAA,EACNrN,SAASA,CAAC5N,OAAOiJ,aAAa+E,WAAW5G,OAAOuC,MAAMsE,SAAS,EAAEjO,OAAOiJ,QAAQ;AAAA,EAChF2H,UAAW5Q,CAAAA,UAAUoZ,aAAapZ,OAAOoH,OAAOuC,MAAMuR,SAAS;AACnE,GACA;AAAA,EACInZ,MAAM;AAAA,EACN6Y,UAAU;AAAA,EACVnN,MAAM0N;AAAAA,EACNvN,SAASA,CAAC5N,OAAOiJ,aAAa+E,WAAW5G,OAAOuC,MAAMyE,WAAW,EAAEpO,OAAOiJ,QAAQ;AAAA,EAClF2H,UAAW5Q,CAAAA,UAAUoZ,aAAapZ,OAAOoH,OAAOuC,MAAMyE,WAAW;AACrE,GACA;AAAA,EACIrM,MAAM;AAAA,EACN6Y,UAAU;AAAA,EACVnN,MAAM2N;AAAAA,EACNxN,SAASA,CAAC5N,OAAOiJ,aAAa+E,WAAW5G,OAAOuC,MAAM0E,YAAY,EAAErO,OAAOiJ,QAAQ;AAAA,EACnF2H,UAAW5Q,CAAAA,UAAUoZ,aAAapZ,OAAOoH,OAAOuC,MAAM0E,YAAY;AACtE,GACA;AAAA,EACItM,MAAM;AAAA,EACN6Y,UAAU;AAAA,EACVnN,MAAM4N;AAAAA,EACNzN,SAASA,CAAC5N,OAAOiJ,aAAaqF,OAAOlH,OAAOuC,MAAM4E,UAAU,EAAEvO,OAAOiJ,QAAQ;AAAA,EAC7E2H,UAAW5Q,CAAAA,UAAUoZ,aAAapZ,OAAOoH,OAAOuC,MAAM4E,UAAU;AACpE,GACA;AAAA,EACIxM,MAAM;AAAA,EACN6Y,UAAU;AAAA,EACVnN,MAAM6N;AAAAA,EACN1N,SAASA,CAAC5N,OAAOiJ,aAAa6E,aAAa1G,OAAOuC,MAAM6E,UAAU,EAAExO,OAAOiJ,QAAQ;AAAA,EACnF2H,UAAW5Q,CAAAA,UAAUoZ,aAAapZ,OAAOoH,OAAOuC,MAAM6E,UAAU;AACpE,CAAC;AASE,MAAM+M,eAAejb,CAAAA,OAAA;AAAA,QAAAE,IAAAC,EAAA,EAAA;AAAC,QAAA;AAAA,IAAA+a;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAAApb;AAKzB,QAAA;AAAA,IAAAN;AAAAA,IAAAC;AAAAA,EAAAA,IAAwBC,sBAAAA;AACxB,QAAA;AAAA,IAAA4T;AAAAA,EAAAA,IAAcC,eAAAA;AAAiB,MAC3B,CAAC/T,SAAK,CAAKC,MAAI;AAAA,WAAA;AAAA,EAAA;AAAA,MAAA0b;AAAA,MAAAC;AAAA,MAAAC;AAAA,MAAA3a;AAAA,MAAAC;AAAA,MAAAgB;AAAA,MAAAsB;AAAA,MAAAO;AAAA,MAAAS;AAAA,MAAA2Q;AAAA,MAAAC;AAAA,MAAAC;AAAA,MAAA9U,EAAA,CAAA,MAAAkb,mBAAAlb,SAAAR,SAAAQ,EAAA,CAAA,MAAAsT,GAAA;AAEnB+H,iBAAmB3P,MAAAf,OAAAiB,CAAAA,SAAuBA,KAAIwE,SAAU5Q,KAAK,CAAC,EAAC8b,SAAM;AAAA,MAAA/Z,MAC3D;AAAA,MAAU6Y,UACN;AAAA,IAAA;AAITgB,SAAAG;AACetX,SAAA;AACN2Q,SAAA;AACWsG,SAAAA;AACPpG,SAAA;AACAqG,SAAAK;AAAe7Z,SAAA;AACXsB,SAAA;AACJO,SAAA;AACU9C,SAAA;AAA6BC,SAAA2S,EAAE+H,WAAUjB,QAAS;AAACpa,WAAAkb;AAAAlb,WAAAR;AAAAQ,WAAAsT;AAAAtT,WAAAmb;AAAAnb,WAAAob;AAAApb,WAAAqb;AAAArb,WAAAU;AAAAV,WAAAW;AAAAX,WAAA2B;AAAA3B,WAAAiD;AAAAjD,YAAAwD;AAAAxD,YAAAiE;AAAAjE,YAAA4U;AAAA5U,YAAA6U;AAAA7U,YAAA8U;AAAAA,EAAA,OAAA;AAAAqG,SAAAnb,EAAA,CAAA;AAAAob,SAAApb,EAAA,CAAA;AAAAqb,iBAAArb,EAAA,CAAA;AAAAU,SAAAV,EAAA,CAAA;AAAAW,SAAAX,EAAA,CAAA;AAAA2B,SAAA3B,EAAA,CAAA;AAAAiD,SAAAjD,EAAA,CAAA;AAAAwD,SAAAxD,EAAA,EAAA;AAAAiE,SAAAjE,EAAA,EAAA;AAAA4U,SAAA5U,EAAA,EAAA;AAAA6U,SAAA7U,EAAA,EAAA;AAAA8U,SAAA9U,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAgV;AAAA,MAAAhV,EAAA,EAAA,MAAAU,MAAAV,UAAAW,IAAA;AAAnEqU,UAAA,oBAAA,QAAA,EAAgB,WAAAtU,IAA6BC,UAAAA,IAAuB;AAAOX,YAAAU;AAAAV,YAAAW;AAAAX,YAAAgV;AAAAA,EAAA,OAAA;AAAAA,UAAAhV,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAiV;AAAA,MAAAjV,EAAA,EAAA,MAAA6D,uBAAAC,IAAA,2BAAA,GAAA;AAC3EmR,UAAA,oBAAC,iBAAA,EAAsB,MAAA/H,SAAAC,OAAc;AAAGnN,YAAAiV;AAAAA,EAAA,OAAA;AAAAA,UAAAjV,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAkV;AAAA,MAAAlV,EAAA,EAAA,MAAAmb,MAAAnb,EAAA,EAAA,MAAAgV,OAAAhV,EAAA,EAAA,MAAA2B,MAAA3B,EAAA,EAAA,MAAAiD,MAAAjD,UAAAwD,IAAA;AAJnC0R,+BAAC,IAAA,EAAe,SAAAvT,IACX,WAAAsB,IACJ,OAAAO,IACNwR,UAAAA;AAAAA,MAAAA;AAAAA,MACAC;AAAAA,IAAAA,GACJ;AAASjV,YAAAmb;AAAAnb,YAAAgV;AAAAhV,YAAA2B;AAAA3B,YAAAiD;AAAAjD,YAAAwD;AAAAxD,YAAAkV;AAAAA,EAAA,OAAA;AAAAA,UAAAlV,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAoV;AAAA,MAAApV,EAAA,EAAA,MAAAqb,cAAArb,EAAA,EAAA,MAAAib,gBAAAjb,EAAA,EAAA,MAAAsT,KAAAtT,UAAAP,MAAA;AAIR2V,UAAA1J,MAAA5B,IAAA,CAAA2R,QAAAzJ,UACG,qBAAC,kBAAA,EAEa,UAAA,MAAA;AACNpG,aAAIwB,QAAS3N,KAAID,OAAQC,KAAIgJ,QAAS;AACtChJ,WAAI4R,MAAAA;AACJ4J,wBAAkB;AAAA,IAAC,GAEb,WAAA,0JAEV,UAAA;AAAA,MAAA,qBAAA,OAAA,EAAe,WAAA,+BACX,UAAA;AAAA,QAAA,oBAAA,OAAA,MAAA,EAAiB,MAAA/N,SAAAwO,UAAiB;AAAA,QAClC,oBAAA,QAAA,EAAOpI,UAAAA,EAAE1H,OAAIwO,QAAS,EAAA,CAAE;AAAA,MAAA,GAC5B;AAAA,MACCiB,WAAU9Z,SAAUqK,OAAIrK,4BAAU,WAAA,EAAgB,MAAA2L,SAAAwO,SAAAA,CAAiB;AAAA,IAAA,EAAA,QACxE,CACH;AAAC1b,YAAAqb;AAAArb,YAAAib;AAAAjb,YAAAsT;AAAAtT,YAAAP;AAAAO,YAAAoV;AAAAA,EAAA,OAAA;AAAAA,UAAApV,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAqV;AAAA,MAAArV,EAAA,EAAA,MAAAob,MAAApb,EAAA,EAAA,MAAAib,gBAAAjb,UAAAgb,QAAAhb,EAAA,EAAA,MAAAkV,OAAAlV,EAAA,EAAA,MAAAoV,OAAApV,EAAA,EAAA,MAAAiE,MAAAjE,EAAA,EAAA,MAAA4U,MAAA5U,EAAA,EAAA,MAAA6U,MAAA7U,UAAA8U,IAAA;AA9BNO,8BAAC,IAAA,EACe,YAAApR,IACN,OAAA2Q,IACWsG,iBAAAA,IACP,WAAApG,IACD,SAAAI,KAMF,OAAA,MACD8F,MACQC,cACb7F,UAAAA,KAiBL;AAAUpV,YAAAob;AAAApb,YAAAib;AAAAjb,YAAAgb;AAAAhb,YAAAkV;AAAAlV,YAAAoV;AAAApV,YAAAiE;AAAAjE,YAAA4U;AAAA5U,YAAA6U;AAAA7U,YAAA8U;AAAA9U,YAAAqV;AAAAA,EAAA,OAAA;AAAAA,UAAArV,EAAA,EAAA;AAAA,EAAA;AAAA,SA/BVqV;AA+BU;ACtIX,SAASsG,WAAWC,KAAa;AACpC,MAAI;AACA,QAAIC,IAAID,GAAG;AACX,WAAO;AAAA,EACX,SAASvX,GAAG;AACR,WAAO;AAAA,EACX;AACJ;AAEO,SAASyX,iBAAiBC,KAAa;AAC1C,MAAIJ,WAAWI,GAAG,EAAG,QAAOA;AAC5B,MAAI;AACA,QAAIA,IAAIzR,SAAS,GAAG,KAAK,CAACyR,IAAIzR,SAAS,GAAG,GAAG;AACzC,aAAO,IAAIuR,IAAI,WAAWE,GAAG,EAAE,EAAEzU,SAAAA;AAAAA,IACrC;AACA,WAAO;AAAA,EACX,SAASjD,GAAG;AACR,WAAO;AAAA,EACX;AACJ;AAOO,MAAM2X,eAAelc,CAAAA,OAAA;AAAA,QAAAE,IAAAC,EAAA,EAAA;AAAC,QAAA;AAAA,IAAA+a;AAAAA,IAAAC;AAAAA,EAAAA,IAAAnb;AAIzB,QAAAmc,WAAiB3b,OAAA,IAA6B;AAC9C,QAAA;AAAA,IAAAd;AAAAA,IAAAC;AAAAA,EAAAA,IAAwBC,sBAAAA;AACxB,QAAA;AAAA,IAAA4T;AAAAA,EAAAA,IAAcC,eAAAA;AAAiB,MAAA7S;AAAA,MAAAC;AAAA,MAAAX,SAAAgb,MAAA;AAGrBta,SAAAA,MAAA;AAAA,UACFsa,QAAQiB,SAAQna,SAAQ;AACxBma,iBAAQna,QAAAuP,MAAAA;AAAAA,MAAgB;AAAA,IAAA;AAE7B1Q,UAACqa,IAAI;AAAChb,WAAAgb;AAAAhb,WAAAU;AAAAV,WAAAW;AAAAA,EAAA,OAAA;AAAAD,SAAAV,EAAA,CAAA;AAAAW,SAAAX,EAAA,CAAA;AAAA,EAAA;AAJT0B,YAAUhB,IAIPC,EAAM;AAAC,MAEN,CAACnB,SAAK,CAAKC,MAAI;AAAA,WAAA;AAAA,EAAA;AAAA,MAAAkC;AAAA,MAAA3B,EAAA,CAAA,MAAAib,gBAAAjb,SAAAP,MAAA;AAEEkC,SAAA0C,CAAAA,MAAA;AACjBA,QAACC,eAAAA;AACD,YAAAgB,QAAc2W,SAAQna,SAAAwD;AAAgB,UAAA,CACjCA,OAAK;AAAA;AAAA,MAAA;AACV,YAAAsW,MAAYE,iBAAiBxW,KAAK;AAAE,UAChCsW,KAAG;AACHzC,gBAAAvS,OAAA8R,MAAAwD,MAAA;AAAA,UAAAC,MAAmCP;AAAAA,QAAAA,CAAK,EAAEnc,KAAID,OAAQC,KAAIgJ,QAAS;AACnEhJ,aAAI4R,MAAAA;AACJ4J,0BAAkB;AAAA,MAAC;AAAA,IAAA;AAE1Bjb,WAAAib;AAAAjb,WAAAP;AAAAO,WAAA2B;AAAAA,EAAA,OAAA;AAAAA,SAAA3B,EAAA,CAAA;AAAA,EAAA;AAVD,QAAAoc,eAAqBza;AAUnB,MAAAsB;AAAA,MAAAjD,EAAA,CAAA,MAAAib,gBAAAjb,SAAAP,MAAA;AAEuBwD,SAAAA,MAAA;AACrByW,gBAAA9S,OAAA8R,MAAAwD,IAA2B,EAAEzc,KAAID,OAAQC,KAAIgJ,QAAS;AACtDhJ,WAAI4R,MAAAA;AACJ4J,wBAAkB;AAAA,IAAC;AACtBjb,WAAAib;AAAAjb,WAAAP;AAAAO,WAAAiD;AAAAA,EAAA,OAAA;AAAAA,SAAAjD,EAAA,CAAA;AAAA,EAAA;AAJD,QAAAqc,mBAAyBpZ;AAIvB,MAAAkY;AAAA,MAAAC;AAAA,MAAAe;AAAA,MAAAnH;AAAA,MAAAC;AAAA,MAAAC;AAAA,MAAA1R;AAAA,MAAAS;AAAA,MAAA2Q;AAAA,MAAAC;AAAA,MAAAC;AAAA,MAAA9U,EAAA,CAAA,MAAAib,gBAAAjb,UAAAgb,QAAAhb,EAAA,EAAA,MAAAR,OAAA;AAEF,UAAA4Q,WAAiBmI,aAAa/Y,OAAKoH,OAAA8R,MAAAwD,IAAmB;AAAE,QAAA9G;AAAA,QAAApV,UAAAR,OAAA;AAC3C4V,aAAA2D,kBAAkBvZ,OAAKoH,OAAA8R,MAAAwD,IAAmB,EAACC,QAAS;AAAEnc,cAAAR;AAAAQ,cAAAoV;AAAAA,IAAA,OAAA;AAAAA,aAAApV,EAAA,EAAA;AAAA,IAAA;AAAnEmc,WAAa/G;AAGRgG,SAAAG;AAAevG,UAAA;AACNgG,UAAAA;AACQC,UAAAA;AACJE,SAAAK;AAAevX,SAAA;AAChB2Q,SAAA;AACKC,SAAA;AACHC,SAAA;AACOtR,SAAAqO,IAAI,qDAAmD;AAAA,MAAA,iBAChDzB;AAAAA,IAAAA,CACpB;AAACpQ,WAAAib;AAAAjb,YAAAgb;AAAAhb,YAAAR;AAAAQ,YAAAmb;AAAAnb,YAAAob;AAAApb,YAAAmc;AAAAnc,YAAAgV;AAAAhV,YAAAiV;AAAAjV,YAAAkV;AAAAlV,YAAAwD;AAAAxD,YAAAiE;AAAAjE,YAAA4U;AAAA5U,YAAA6U;AAAA7U,YAAA8U;AAAAA,EAAA,OAAA;AAAAqG,SAAAnb,EAAA,EAAA;AAAAob,SAAApb,EAAA,EAAA;AAAAmc,WAAAnc,EAAA,EAAA;AAAAgV,UAAAhV,EAAA,EAAA;AAAAiV,UAAAjV,EAAA,EAAA;AAAAkV,UAAAlV,EAAA,EAAA;AAAAwD,SAAAxD,EAAA,EAAA;AAAAiE,SAAAjE,EAAA,EAAA;AAAA4U,SAAA5U,EAAA,EAAA;AAAA6U,SAAA7U,EAAA,EAAA;AAAA8U,SAAA9U,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAoV;AAAA,MAAApV,UAAAsT,GAAA;AACG8B,UAAA9B,EAAE,aAAa;AAACtT,YAAAsT;AAAAtT,YAAAoV;AAAAA,EAAA,OAAA;AAAAA,UAAApV,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAqV;AAAA,MAAArV,EAAA,EAAA,MAAAoV,OAAApV,UAAAwD,IAAA;AAHrB6R,UAAA,oBAAA,KAAA,EAAc,WAAA7R,IAGT4R,UAAAA,KACL;AAAIpV,YAAAoV;AAAApV,YAAAwD;AAAAxD,YAAAqV;AAAAA,EAAA,OAAA;AAAAA,UAAArV,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAiW;AAAA,MAAAjW,UAAAmb,MAAAnb,EAAA,EAAA,MAAAqV,OAAArV,EAAA,EAAA,MAAAiE,MAAAjE,EAAA,EAAA,MAAA4U,MAAA5U,UAAA6U,MAAA7U,EAAA,EAAA,MAAA8U,IAAA;AARCmB,UAAA,oBAAC,IAAA,EAAe,SAAAhS,IAChB,MAAA2Q,IACK,WAAAC,IACH,OAAAC,IACPO,UAAAA,IAAAA,CAKJ;AAASrV,YAAAmb;AAAAnb,YAAAqV;AAAArV,YAAAiE;AAAAjE,YAAA4U;AAAA5U,YAAA6U;AAAA7U,YAAA8U;AAAA9U,YAAAiW;AAAAA,EAAA,OAAA;AAAAA,UAAAjW,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAmW;AAAA,MAAAnW,UAAAsT,GAAA;AAQY6C,UAAA7C,EAAE,2BAA2B;AAACtT,YAAAsT;AAAAtT,YAAAmW;AAAAA,EAAA,OAAA;AAAAA,UAAAnW,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAoW;AAAA,MAAApW,EAAA,EAAA,MAAA6D,uBAAAC,IAAA,2BAAA,GAAA;AAEhCsS,UAAAvE,IAAI,sFAAoFyK,eAAiB;AAACtc,YAAAoW;AAAAA,EAAA,OAAA;AAAAA,UAAApW,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAqW;AAAA,MAAArW,EAAA,EAAA,MAAAmc,QAAAnc,UAAAgb,QAAAhb,EAAA,EAAA,MAAAmW,KAAA;AALzHE,UAAA,oBAAA,SAAA,EACS4F,KAAAA,UACMjB,WAAAA,MACE,aAAA7E,KACCgG,cAAAA,MACH,WAAA/F,IAAAA,CAA0G;AAAGpW,YAAAmc;AAAAnc,YAAAgb;AAAAhb,YAAAmW;AAAAnW,YAAAqW;AAAAA,EAAA,OAAA;AAAAA,UAAArW,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAsW;AAAA,MAAAtW,EAAA,EAAA,MAAAqc,oBAAArc,UAAAmc,MAAA;AAE3H7F,UAAA6F,OACG,oBAAC,QAAA,EACS,MAAA,SACE,SAAA,QACH,MAAA,UACE,OAAA,QACG,WAAA,qBACDE,SAAAA,kBAET,UAAA,oBAAC,YAAA,EAAiB,MAAAnP,SAAAC,OAAc,EAAA,CACpC,IAEA,oBAAC,QAAA,EAAa,MAAA,SACL,MAAA,UACI,SAAA,QACT,UAAA,oBAAC,WAAA,EAAgB,MAAAD,SAAAC,OAAc,GACnC;AACHnN,YAAAqc;AAAArc,YAAAmc;AAAAnc,YAAAsW;AAAAA,EAAA,OAAA;AAAAA,UAAAtW,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAuW;AAAA,MAAAvW,EAAA,EAAA,MAAAoc,gBAAApc,UAAAqW,OAAArW,EAAA,EAAA,MAAAsW,KAAA;AA5BLC,yCACc6F,UAAAA,cACA,WAAA,kBAEV/F,UAAAA;AAAAA,MAAAA;AAAAA,MAOCC;AAAAA,IAAAA,GAkBL;AAAOtW,YAAAoc;AAAApc,YAAAqW;AAAArW,YAAAsW;AAAAtW,YAAAuW;AAAAA,EAAA,OAAA;AAAAA,UAAAvW,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAyW;AAAA,MAAAzW,UAAAob,MAAApb,EAAA,EAAA,MAAAgV,OAAAhV,EAAA,EAAA,MAAAiV,OAAAjV,EAAA,EAAA,MAAAkV,OAAAlV,UAAAiW,OAAAjW,EAAA,EAAA,MAAAuW,KAAA;AA1CXE,UAAA,oBAAC,IAAA,EAAe,OAAAzB,KACNgG,MAAAA,KACQC,cAAAA,KACL,SAAAhF,KAUTM,UAAAA,IAAAA,CA8BJ;AAAUvW,YAAAob;AAAApb,YAAAgV;AAAAhV,YAAAiV;AAAAjV,YAAAkV;AAAAlV,YAAAiW;AAAAjW,YAAAuW;AAAAvW,YAAAyW;AAAAA,EAAA,OAAA;AAAAA,UAAAzW,EAAA,EAAA;AAAA,EAAA;AAAA,SA3CVyW;AA2CU;ACzGX,MAAM8F,cAAcA,MAAA;AAAA,QAAAvc,IAAAC,EAAA,CAAA;AACvB,QAAA;AAAA,IAAAT;AAAAA,IAAAC;AAAAA,EAAAA,IAAwBC,sBAAAA;AAAwB,MAC5C,CAACF,SAAK,CAAKC,MAAI;AAAA,WAAA;AAAA,EAAA;AAAA,MAAAK;AAAA,MAAAE,EAAA,CAAA,MAAAR,SAAAQ,SAAAP,MAAA;AAGnB,UAAAiM,SAAA,CAAA;AAAA,MAAAnK,MAEc;AAAA,MAAM6Y,UACF;AAAA,MAAahK,UAAAlM;AAAAA,MAAAkJ,SAAAoP;AAAAA,MAAAvP,MAAAwP;AAAAA,IAAAA,GAAA;AAAA,MAAAlb,MAMjB;AAAA,MAAQ6Y,UACJ;AAAA,MAAehK,UAAAsM;AAAAA,MAAAtP,SAAAuP;AAAAA,MAAA1P,MAAA2P;AAAAA,IAAAA,GAAA;AAAA,MAAArb,MAMnB;AAAA,MAAW6Y,UACP;AAAA,MAAkBhK,UAAAyM;AAAAA,MAAAzP,SAAA0P;AAAAA,MAAA7P,MAAA8P;AAAAA,IAAAA,GAAA;AAAA,MAAAxb,MAMtB;AAAA,MAAQ6Y,UACJ;AAAA,MAAsBhK,UAAA4M;AAAAA,MAAA5P,SAAA6P;AAAAA,MAAAhQ,MAAAiQ;AAAAA,IAAAA,GAAA;AAAA,MAAA3b,MAM1B;AAAA,MAAM6Y,UACF;AAAA,MAAahK,UAAA+M;AAAAA,MAAA/P,SAAAgQ;AAAAA,MAAAnQ,MAAA6N;AAAAA,IAAAA,CAAA;AAQ3Bhb,SAAA,oBAAA,OAAA,EAAe,WAAA,QACV4L,UAAAA,OAAK5B,IAAA,CAAA8B,MAAAoG,UACF,oBAAC,kBAAA,EAEa,UAAA,MAAA;AACNpG,WAAIwB,QAAS3N,KAAID,OAAQC,KAAIgJ,QAAS;AACtChJ,WAAI4R,MAAAA;AAAAA,IAAQ,GAGhB,UAAA,oBAAC,QAAA,EAAa,MAAA,SACJ,OAAA,QACI,WAAA,6BACF,SAAA,QACR,UAAA,oBAAA,KAAA,MAAA,EACe,WAAAQ,IAAA;AAAA,MAAA,gBAAA,CACUjG,KAAIwE,SAAU5Q,KAAK;AAAA,MAAC,iBACpBoM,KAAIwE,SAAU5Q,KAAK;AAAA,IAAA,CACvC,EAAA,CAAC,EAAA,CAEV,EAAA,GAhBKwS,KAiBT,CACH,EAAA,CACL;AAAMhS,WAAAR;AAAAQ,WAAAP;AAAAO,WAAAF;AAAAA,EAAA,OAAA;AAAAA,SAAAE,EAAA,CAAA;AAAA,EAAA;AAAA,SAtBNF;AAsBM;AAlEa,SAAAoE,QAAAmZ,GAAA;AAAA,SASe9E,aAAa8E,GAACzW,OAAA8R,MAAA4E,IAAmB;AAAC;AATjD,SAAAd,OAAAe,KAAA9U,UAAA;AAAA,SAUmD+U,WAAA5W,OAAA8R,MAAA4E,IAA4B,EAAED,KAAG5U,QAAQ;AAAC;AAV7F,SAAAiU,OAAAe,KAAA;AAAA,SAgBelF,aAAa8E,KAACzW,OAAA8R,MAAAgF,MAAqB;AAAC;AAhBnD,SAAAf,OAAAgB,KAAAC,YAAA;AAAA,SAiBmDJ,WAAA5W,OAAA8R,MAAAgF,MAA8B,EAAEL,KAAG5U,UAAQ;AAAC;AAjB/F,SAAAoU,OAAAgB,KAAA;AAAA,SAuBetF,aAAa8E,KAACzW,OAAA8R,MAAAoF,SAAwB;AAAC;AAvBtD,SAAAhB,OAAAiB,KAAAC,YAAA;AAAA,SAwBmDR,WAAA5W,OAAA8R,MAAAoF,SAAiC,EAAET,KAAG5U,UAAQ;AAAC;AAxBlG,SAAAuU,OAAAiB,KAAA;AAAA,SA8Be1F,aAAa8E,KAACzW,OAAA8R,MAAAwF,MAAqB;AAAC;AA9BnD,SAAAjB,OAAAkB,KAAAC,YAAA;AAAA,SA+BmDZ,WAAA5W,OAAA8R,MAAAwF,MAA8B,EAAEb,KAAG5U,UAAQ;AAAC;AA/B/F,SAAA0U,OAAAkB,KAAA;AAAA,SAqCe9F,aAAa8E,KAACzW,OAAA8R,MAAA4F,IAAmB;AAAC;AArCjD,SAAAlB,OAAAmB,KAAAC,YAAA;AAAA,SAsCmDhB,WAAA5W,OAAA8R,MAAA4F,IAA4B,EAAEjB,KAAG5U,UAAQ;AAAC;ACjDjH,SAASgW,sBAAsBC,SAAmB;AAErD,MAAIjU,MAAMkU,QAAQD,OAAO,GAAG;AACxB,WAAOA,QAAQ5U,IAAI8B,CAAAA,SAAQ6S,sBAAsB7S,IAAI,CAAC;AAAA,EAC1D,WAAW,OAAO8S,YAAY,YAAYA,YAAY,MAAM;AAExD,QAAIA,QAAQzK,SAAS,OAAOyK,QAAQzK,UAAU,YAAY,WAAWyK,QAAQzK,OAAO;AAChF,aAAOyK,QAAQzK,MAAM2K;AAAAA,IACzB;AAGAnb,WAAOoV,KAAK6F,OAAO,EAAE3T,QAAQ9F,CAAAA,QAAO;AAChCyZ,cAAQzZ,GAAG,IAAIwZ,sBAAsBC,QAAQzZ,GAAG,CAAC;AAAA,IACrD,CAAC;AAAA,EACL;AACA,SAAOyZ;AACX;ACbO,SAASG,sBAAsBpf,MAAkBqf,OAAc;AAClErf,OAAKsf,SAAS,mBAAmB3Q,CAAAA,MAAK;AAClC0Q,YAAQ1Q,EAAE0Q,OAAQrf,IAAI;AAAA,EAC1B,CAAC;AAED,QAAMuf,UAAU,CAAA;AAChB,MAAI;AAAA,IACApQ;AAAAA,IACAqQ;AAAAA,IACAC;AAAAA,EAAAA,IACAJ;AACJ,SAAOG,YAAY,KAAKC,UAAU,KAAKtQ,QAAQuQ,cAAc,KAAKvQ,QAAQwQ,WAAYD,cAAc,GAAG;AACnGF;AACAC;AACA,UAAM7d,OAAOuN,QAAQwQ;AAErBJ,YAAQvO,KAAKpP,KAAKC,KAAKC,MAAMF,KAAK4S,SAAS5S,KAAKC,KAAK+d,eAAehe,KAAK4S,QAAQ,IAAI;AACrFrF,cAAUvN,KAAKuN;AAAAA,EACnB;AAEA,QAAM0Q,cAAa7f,KAAKsf,SAAS,qBAAqB,KAAKQ,cAAchQ,WAAW9P,KAAKD,MAAMoH,MAAM;AACrG,QAAM3F,MAAMue,YAAAA,GAAeC,OAAOxe,IAAIyG,cAAc,KAAK;AACzD+X,OAAKxX,YAAYqX,YAAWI,kBAAkB9Q,SAAS;AAAA,IAAEnH,UAAUxG;AAAAA,EAAAA,CAAK,CAAC;AAEzE,MAAIme,aAAaK,KAAKL,YAAYO,WAAWC,WAAW;AACxD,SAAOR,cAAcA,WAAWS,YAAY,MAAMF,YAAYG,QAAQV,WAAWW,SAASpP,YAAAA,CAAa,IAAI;AACvG,aAAS4I,IAAIoG,UAAUrZ,SAAS,GAAGiT,KAAK,GAAGA,KAAK;AAC5C,YAAMyG,UAAU/e,IAAIyG,cAAciY,UAAUpG,CAAC,CAAC;AAC9C,aAAOkG,KAAKL,WAAYY,SAAQ/X,YAAYwX,KAAKL,UAAU;AAC3DK,WAAKxX,YAAY+X,OAAO;AACxBJ;AAAAA,IACJ;AACAR,iBAAaK,KAAKL;AAAAA,EACtB;AAEA,MAAIA,cAAcA,WAAWS,YAAY,EACpCT,YAA2BxX,aACxB,iBAAiB,GAAGqX,SAAS,IAAIC,OAAO,GAAGU,WAAW,KAAKA,QAAQ,KAAK,EAAE,IAAIK,KAAKC,UAAUlB,OAAO,CAAC,EAAE;AAE/G,QAAMmB,OAAO1gB,KAAKsf,SAAS,2BAA2B3Q,CAAAA,MAAKA,EAAE0Q,OAAOrf,IAAI,CAAC,KACrEqf,MAAMlQ,QAAQ5I,YAAY,GAAG8Y,MAAMlQ,QAAQC,MAAM,MAAM;AAE3D,SAAO;AAAA,IACHqF,KAAKuL;AAAAA,IACLU;AAAAA,IACArB;AAAAA,EAAAA;AAER;AAKA,MAAMgB,UAAwC;AAAA,EAC1CM,OAAO,CAAC,OAAO;AAAA,EACfC,OAAO,CAAC,OAAO;AAAA,EACfC,OAAO,CAAC,OAAO;AAAA,EACfC,SAAS,CAAC,OAAO;AAAA,EACjBC,UAAU,CAAC,OAAO;AAAA,EAClBC,KAAK,CAAC,SAAS,UAAU;AAAA,EACzBpb,IAAI,CAAC,SAAS,OAAO;AAAA,EACrBqb,IAAI,CAAC,SAAS,SAAS,IAAI;AAAA,EAC3BC,IAAI,CAAC,SAAS,SAAS,IAAI;AAC/B;AAEA,IAAIC,eAAgC;AAEpC,SAASpB,cAAc;AACnB,SAAOoB,iBAAiBA,eAAenZ,SAASoZ,eAAeC,mBAAmB,OAAO;AAC7F;AC/CA,SAASC,aAAaC,SAAkB;AACpC,QAAMC,OAAOD,QAAQ7e,sBAAAA;AAErB,MAAI+e,WAAWF,QAAQG;AACvB,SAAOD,YAAY5P,OAAO8P,iBAAiBF,QAAQ,EAAEnd,aAAa,UAAU;AACxEmd,eAAWA,SAASC;AAAAA,EACxB;AACA,QAAME,eAAeH,UAAU/e,sBAAAA;AAE/B,SAAO;AAAA,IACHC,KAAK6e,KAAK7e,OAAOif,cAAcjf,OAAO;AAAA,IACtCK,MAAMwe,KAAKxe,QAAQ4e,cAAc5e,QAAQ;AAAA,IACzCE,OAAOse,KAAKte;AAAAA,EAAAA;AAEpB;AAEA,SAAS2e,gBAAgBC,QAAkC9hB,MAAkB;AACzE,QAAM+hB,aAAa/hB,KAAKyU,IAAI/R,sBAAAA;AAG5B,MAAIof,OAAOze,IAAI0e,WAAWpf,OAAOmf,OAAOze,IAAI0e,WAAWjf,OAAQ,QAAOoD;AACtE,MAAI4b,OAAO1e,IAAI2e,WAAW/e,OAAO,OAAO8e,OAAO1e,IAAI2e,WAAW9e,QAAQ,GAAI,QAAOiD;AAEjF,QAAM8b,gBAAgB;AAGtB,QAAMC,OAAOja,SAASka,iBAAiBJ,OAAO1e,GAAG0e,OAAOze,CAAC;AACzD,QAAM8O,QAAQ8P,MAAME,QAAQH,aAAa;AACzC,MAAI7P,SAASnS,KAAKyU,IAAIE,SAASxC,KAAK,KAAKA,MAAMiQ,aAAaC,QAAQ;AAChE,UAAMC,KAAKnQ,MAAMgQ,QAAQ,IAAI;AAC7B,WAAQG,MAAMtiB,KAAKyU,IAAIE,SAAS2N,EAAE,IAAKA,KAAKnQ;AAAAA,EAChD;AAGA,QAAMoQ,SAASR,WAAW/e,OAAOJ,KAAKC,IAAI,IAAIkf,WAAW7e,QAAQ,CAAC;AAClE,MAAI4e,OAAO1e,IAAImf,OAAQ,QAAOrc;AAE9B,QAAMsc,YAAYxa,SAASka,iBAAiBK,QAAQT,OAAOze,CAAC;AAC5D,QAAMof,aAAaD,WAAWL,QAAQH,aAAa;AACnD,MAAIS,cAAcA,WAAWL,aAAaC,KAAAA,GAAQ;AAE9C,QAAIriB,KAAKyU,IAAIE,SAAS8N,UAAU,GAAG;AAC/B,YAAMH,KAAKG,WAAWN,QAAQ,IAAI;AAClC,aAAQG,MAAMtiB,KAAKyU,IAAIE,SAAS2N,EAAE,IAAKA,KAAKG;AAAAA,IAChD;AAAA,EACJ;AAEA,SAAOvc;AACX;AAEA,SAASwc,aAAa9gB,MAAe5B,MAAkBU,SAA4B;AAC/E,MAAI;AACA,QAAI,CAACV,KAAKyU,IAAIE,SAAS/S,IAAI,EAAG,QAAO;AACrC,UAAMgF,MAAM5G,KAAK2iB,SAAS/gB,MAAM,CAAC;AACjC,UAAMghB,OAAO5iB,KAAKD,MAAMyB,IAAIqhB,QAAQjc,GAAG;AAGvC,QAAIgc,KAAK1M,QAAQ,GAAG;AAChB,aAAO0M,KAAKE,OAAAA;AAAAA,IAChB;AACA,WAAOlc;AAAAA,EACX,SAAShC,GAAG;AACR,WAAO;AAAA,EACX;AACJ;AAEO,SAASme,iBAAiBriB,UAA6B;AAAA,EAAEsiB,iBAAiB;AAAG,GAAG;AACnF,WAASC,gBAAgBvY,OAAkB1K,MAAkB;AACzDA,SAAK4R,MAAAA;AAEL,QAAI,CAAClH,MAAMC,aAAc;AAEzB,UAAM/I,OAAOigB,gBAAgB;AAAA,MACzBze,GAAGsH,MAAMc;AAAAA,MACTnI,GAAGqH,MAAMe;AAAAA,IAAAA,GACVzL,IAAI;AAEP,QAAI,EAAE4B,gBAAgBshB,SAAU;AAEhC,UAAMC,UAAUT,aAAa9gB,MAAM5B,IAAa;AAChD,QAAImjB,WAAW,QAAQA,UAAU,EAAG;AAEpC,UAAMC,uBAAuBrhB,cAAc4H,OAAO3J,KAAKD,MAAMyB,KAAK2hB,OAAO;AACzEnjB,SAAKgJ,SAAShJ,KAAKD,MAAM6F,GAAG+L,aAAayR,oBAAoB,CAAC;AAE9D,UAAM/D,QAAQrf,KAAKD,MAAMsB,UAAU8N,QAAAA;AACnC,UAAM;AAAA,MACFsF;AAAAA,MACAiM;AAAAA,IAAAA,IACAtB,sBAAsBpf,MAA4Bqf,KAAK;AAE3D3U,UAAMC,aAAa0Y,UAAAA;AACnB3Y,UAAMC,aAAa2Y,QAAQ,aAAa7O,IAAIxH,SAAS;AACrDvC,UAAMC,aAAa2Y,QAAQ,cAAc5C,IAAI;AAC7ChW,UAAMC,aAAa4Y,gBAAgB;AAEnC7Y,UAAMC,aAAa6Y,aAAa5hB,MAAM,GAAG,CAAC;AAEzC5B,SAA4ByjB,WAAW;AAAA,MACpCpE;AAAAA,MACAqE,MAAM;AAAA,MACN9hB,MAAMwhB;AAAAA,IAAAA;AAAAA,EAEd;AAEA,WAASO,YAAYjZ,OAAmB1K,MAAkB;AACtDA,SAAK4R,MAAAA;AAEL5R,SAAKyU,IAAImP,UAAU/Z,OAAO,UAAU;AAEpC,UAAMjI,OAAOigB,gBAAgB;AAAA,MACzBze,GAAGsH,MAAMc;AAAAA,MACTnI,GAAGqH,MAAMe;AAAAA,IAAAA,GACVzL,IAAI;AAEP,QAAI,EAAE4B,gBAAgBshB,SAAU;AAEhC,UAAMC,UAAUT,aAAa9gB,MAAM5B,IAAa;AAChD,QAAI,CAACmjB,QAAS;AAEdnjB,SAAKgJ,SAAShJ,KAAKD,MAAM6F,GAAG+L,aAAa5P,cAAc4H,OAAO3J,KAAKD,MAAMyB,KAAK2hB,OAAO,CAAC,CAAC;AAAA,EAC3F;AAEA,MAAIU,oBAAwC;AAE5C,WAASC,iBAAiB;AACtB,QAAID,mBAAmB;AACnBA,wBAAkBD,UAAU7a,IAAI,MAAM;AACtC8a,wBAAkB3f,MAAM6f,UAAU;AAClCF,wBAAkB3f,MAAM8f,gBAAgB;AAAA,IAC5C;AAAA,EACJ;AAEA,WAASC,iBAAiB;AACtB,QAAIJ,mBAAmB;AACnBA,wBAAkBD,UAAU/Z,OAAO,MAAM;AACzCga,wBAAkB3f,MAAM6f,UAAU;AAClCF,wBAAkB3f,MAAM8f,gBAAgB;AAAA,IAC5C;AAAA,EACJ;AAEA,SAAO,IAAIze,OAAO;AAAA,IACdvF,MAAOA,CAAAA,SAAS;AACZ6jB,0BAAoB7b,SAASC,cAAc,KAAK;AAChD4b,wBAAkBK,YAAY;AAC9BL,wBAAkBM,QAAQC,aAAa;AACvCP,wBAAkBD,UAAU7a,IAAI,aAAa;AAC7C8a,wBAAkB/R,iBAAiB,aAAclN,CAAAA,MAAM;AACnDqe,wBAAgBre,GAAG5E,IAAI;AAAA,MAC3B,CAAC;AACD6jB,wBAAkB/R,iBAAiB,SAAUlN,CAAAA,MAAM;AAC/C+e,oBAAY/e,GAAG5E,IAAI;AAAA,MACvB,CAAC;AACD,YAAMqkB,cAAcA,CAAC3Z,UAAsB;AACvC,YAAI,CAAC1K,KAAKskB,UAAU;AAChB;AAAA,QACJ;AAEA,cAAM1iB,OAAOigB,gBAAgB;AAAA,UACzBze,GAAGsH,MAAMc;AAAAA,UACTnI,GAAGqH,MAAMe;AAAAA,QAAAA,GACVzL,IAAI;AAEP,YAAI,EAAE4B,gBAAgBshB,UAAU;AAC5BY,yBAAAA;AACA;AAAA,QACJ;AAEA,cAAMS,YAAY1S,OAAO8P,iBAAiB/f,IAAI;AAC9C,cAAM4iB,aAAaC,SAASF,UAAUC,YAAY,EAAE;AACpD,cAAME,aAAaD,SAASF,UAAUG,YAAY,EAAE;AAEpD,cAAMC,OAAOrD,aAAa1f,IAAI;AAC9B,YAAI,CAAC+iB,MAAM;AACPb,yBAAAA;AACA;AAAA,QACJ;AAEAa,aAAKhiB,QAAQ6hB,aAAa,MAAM;AAChCG,aAAKhiB,OAAO+hB;AAEZ,YAAI9iB,KAAKgjB,QAAQ,wCAAwC,GAAG;AACxDD,eAAK3hB,QAAQtC,QAAQsiB;AAAAA,QACzB;AACA2B,aAAKzhB,QAAQxC,QAAQsiB;AAErB,YAAI,CAACa,kBAAmB;AAExBA,0BAAkB3f,MAAMlB,OAAO,GAAG2hB,KAAK3hB,OAAO2hB,KAAKzhB,KAAK;AACxD2gB,0BAAkB3f,MAAMvB,MAAM,GAAGgiB,KAAKhiB,GAAG;AACzCshB,uBAAAA;AAAAA,MACJ;AAEApS,aAAOC,iBAAiB,aAAauS,WAAW;AAEhDP,qBAAAA;AAEA9jB,YAAMyU,KAAKiN,eAAelZ,YAAYqb,iBAAiB;AAEvD,aAAO;AAAA,QACHgB,SAASA,MAAM;AACXhT,iBAAOG,oBAAoB,aAAaqS,WAAW;AACnDR,6BAAmBha,SAAAA;AACnBga,8BAAoB;AAAA,QACxB;AAAA,MAAA;AAAA,IAER;AAAA,IACAtZ,OAAO;AAAA,MACHC,iBAAiB;AAAA,QACbsa,SAASA,MAAM;AACXhB,yBAAAA;AAAAA,QACJ;AAAA,QACAiB,YAAYA,MAAM;AACdjB,yBAAAA;AAAAA,QACJ;AAAA;AAAA,QAEAkB,WAAYhlB,CAAAA,SAAS;AACjBA,eAAKyU,IAAImP,UAAU7a,IAAI,UAAU;AAAA,QACrC;AAAA,QACA+B,MAAO9K,CAAAA,SAAS;AACZA,eAAKyU,IAAImP,UAAU/Z,OAAO,UAAU;AAAA,QACxC;AAAA,QACAob,SAAUjlB,CAAAA,SAAS;AACfA,eAAKyU,IAAImP,UAAU/Z,OAAO,UAAU;AAAA,QACxC;AAAA,MAAA;AAAA,IACJ;AAAA,EACJ,CACH;AACL;AAIO,SAASqb,uBAAuB;AACnC,MAAIC,oBAAwC;AAC5C,MAAI7hB,UAA+B;AAEnC,WAAS8hB,sBAAsB5S,IAAiB;AAC5C,UAAM6S,SAASrd,SAASsd,gBAAgBC,aAAa,YAAY,MAAM;AACvE,UAAMC,UAAUH,SAAS,+BAA+B;AACxD,UAAMI,QAAQ9D,iBAAiB3Z,SAASsd,eAAe,EAAEI,iBAAiBF,OAAO,EAAEnD,KAAAA;AACnF7P,OAAGtO,MAAMyhB,kBAAkBF,UAAUJ,SAAS,YAAY;AAAA,EAC9D;AAEA,SAAO,IAAI9f,OAAO;AAAA,IACdvF,KAAK4lB,YAAY;AACbT,0BAAoBnd,SAASC,cAAc,KAAK;AAChDkd,wBAAkBxkB,YAAY;AAC9BwkB,wBAAkBjhB,MAAM2hB,UAAU;AAClCT,4BAAsBD,iBAAiB;AAGvC,YAAMW,WAAW,IAAIC,iBAAiB,MAAM;AACxC,YAAIZ,yCAAyCA,iBAAiB;AAAA,MAClE,CAAC;AACDW,eAASE,QAAQhe,SAASsd,iBAAiB;AAAA,QAAEW,YAAY;AAAA,QACrEC,iBAAiB,CAAC,YAAY;AAAA,MAAA,CAAG;AAErB,YAAMC,eAAeA,MAAM;AACvB,YAAIhB,qBAAqBA,kBAAkBiB,YAAY;AACnDjB,4BAAkBiB,WAAWC,YAAYlB,iBAAiB;AAAA,QAC9D;AAAA,MACJ;AAEA,YAAMmB,yBAAyBA,CAAC5b,OAAkB6b,aAAqB;AACnE,cAAM3f,MAAMgf,WAAWra,YAAY;AAAA,UAAEvI,MAAMujB;AAAAA,UAC3D5jB,KAAK+H,MAAMe;AAAAA,QAAAA,CAAS;AACJ,YAAI,CAAC7E,IAAK,QAAO;AAEjB,cAAMgc,OAAOgD,WAAW7lB,MAAMyB,IAAIqhB,QAAQjc,IAAIA,GAAG;AAEjD,YAAI4f,aAAa;AACjB,iBAAS1M,IAAI8I,KAAK1M,OAAO4D,IAAI,GAAGA,KAAK;AACjC,gBAAMhY,OAAO8gB,KAAKhhB,KAAKkY,CAAC,EAAEjY,KAAKC;AAC/B,cAAIA,SAAS,eAAeA,SAAS,YAAY;AAC7C0kB,yBAAa1M;AACb;AAAA,UACJ;AACA,cAAI8I,KAAKhhB,KAAKkY,CAAC,EAAE2M,WAAW3kB,SAAS,iBAAiBA,SAAS,kBAAkBA,SAAS,YAAY;AAClG0kB,yBAAa1M;AAAAA,UACjB;AAAA,QACJ;AAEA,YAAI0M,eAAe,EAAG,QAAO5f,IAAIA;AAEjC,cAAM8f,gBAAgB9D,KAAKE,OAAO0D,UAAU;AAC5C,cAAMG,eAAe/D,KAAKgE,MAAMJ,UAAU;AAE1C,cAAMK,UAAUjB,WAAWkB,QAAQJ,aAAa;AAChD,YAAIG,mBAAmBE,aAAa;AAChC,gBAAMpC,OAAOkC,QAAQnkB,sBAAAA;AACrB,gBAAMskB,YAAYtc,MAAMe,UAAUkZ,KAAKhiB,MAAMgiB,KAAKxhB,SAAS;AAC3D,iBAAO6jB,YAAYN,gBAAgBC;AAAAA,QACvC;AACA,eAAO/f,IAAIA;AAAAA,MACf;AAEA,YAAMqgB,iBAAiBA,CAACvc,UAAqB;AACzC,YAAI,CAACkb,WAAWtB,YAAY,CAACsB,WAAWnC,SAAU;AAIlD,YAAI,CAAGmC,WAAkCnC,UAA+D7hB,MAAM;AAC1GukB,uBAAAA;AACA;AAAA,QACJ;AAEAzb,cAAM7F,eAAAA;AAEN,cAAMkd,aAAa6D,WAAWnR,IAAI/R,sBAAAA;AAClC,cAAM6jB,WAAW3jB,KAAKG,IAAIgf,WAAW/e,OAAO,IAAIJ,KAAKC,IAAI6H,MAAMc,SAASuW,WAAW9e,QAAQ,EAAE,CAAC;AAE9F,cAAMqF,SAASge,uBAAuB5b,OAAO6b,QAAQ;AACrD,YAAIje,WAAW,MAAM;AACjB6d,uBAAAA;AACA;AAAA,QACJ;AAEA,cAAMvD,OAAOgD,WAAW7lB,MAAMyB,IAAIqhB,QAAQva,MAAM;AAEhD,YAAIqc;AACJ,cAAM7B,SAASF,KAAKsE;AACpB,cAAMN,QAAQhE,KAAKuE;AAEnB,YAAIrE,UAAU8D,OAAO;AACjB,gBAAME,UAAUlB,WAAWkB,QAAQxe,UAAUwa,SAASA,OAAOtI,WAAW,EAAE;AAC1E,cAAIsM,WAAWA,mBAAmBC,aAAa;AAC3C,kBAAMK,WAAWN,QAAQpkB,sBAAAA;AACzB,gBAAIC,MAAMmgB,SAASsE,SAAStkB,SAASskB,SAASzkB;AAC9C,gBAAImgB,UAAU8D,OAAO;AACjB,oBAAMS,WAAWzB,WAAWkB,QAAQxe,MAAM;AAC1C,kBAAI+e,YAAYA,oBAAoBN,aAAa;AAC7CpkB,uBAAOA,MAAM0kB,SAAS3kB,sBAAAA,EAAwBC,OAAO;AAAA,cACzD;AAAA,YACJ;AACAgiB,mBAAO;AAAA,cAAE3hB,MAAMokB,SAASpkB;AAAAA,cAChDC,OAAOmkB,SAASnkB;AAAAA,cAChBN,KAAKA,MAAM;AAAA,cACXG,QAAQH,MAAM;AAAA,YAAA;AAAA,UACM;AAAA,QACJ;AAEA,YAAI,CAACgiB,MAAM;AACP,gBAAM7C,SAAS8D,WAAWrjB,YAAY+F,MAAM;AAC5Cqc,iBAAO;AAAA,YAAE3hB,MAAM+e,WAAW/e,OAAO;AAAA,YACrDC,OAAO8e,WAAW9e,QAAQ;AAAA,YAC1BN,KAAKmf,OAAOnf,MAAM;AAAA,YAClBG,QAAQgf,OAAOnf,MAAM;AAAA,UAAA;AAAA,QACL;AAEA,cAAM0D,SAASuf,WAAWnR,IAAI6S;AAC9B,YAAIC,aAAa;AACjB,YAAIC,YAAY;AAChB,YAAInhB,UAAUA,WAAW2B,SAASyf,QAAQ9F,iBAAiBtb,MAAM,EAAE/B,aAAa,UAAU;AACtF,gBAAMojB,aAAarhB,OAAO3D,sBAAAA;AAC1B6kB,uBAAaG,WAAW1kB,OAAOqD,OAAOshB;AACtCH,sBAAYE,WAAW/kB,MAAM0D,OAAOuhB;AAAAA,QACxC;AAEA,YAAI,CAACzC,kBAAmBiB,YAAY;AAChC/f,iBAAOmC,YAAY2c,iBAAkB;AAAA,QACzC;AAEAA,0BAAmBjhB,MAAMlB,OAAO,GAAG2hB,KAAK3hB,OAAOukB,UAAU;AACzDpC,0BAAmBjhB,MAAMvB,MAAM,GAAGgiB,KAAKhiB,MAAM6kB,SAAS;AACtDrC,0BAAmBjhB,MAAMhB,QAAQ,GAAGyhB,KAAK1hB,QAAQ0hB,KAAK3hB,IAAI;AAAA,MAC9D;AAEA,YAAM6kB,aAAaA,CAACnd,UAAqB;AACrC,YAAI,CAACkb,WAAWtB,YAAY,CAACsB,WAAWnC,SAAU;AAElD,YAAI,CAAGmC,WAAkCnC,UAA+D7hB,MAAM;AAC1GukB,uBAAAA;AACA;AAAA,QACJ;AAEAzb,cAAM7F,eAAAA;AACNshB,qBAAAA;AACAP,mBAAWnR,IAAImP,UAAU/Z,OAAO,UAAU;AAE1C,cAAMkY,aAAa6D,WAAWnR,IAAI/R,sBAAAA;AAClC,cAAM6jB,WAAW3jB,KAAKG,IAAIgf,WAAW/e,OAAO,IAAIJ,KAAKC,IAAI6H,MAAMc,SAASuW,WAAW9e,QAAQ,EAAE,CAAC;AAE9F,cAAM6kB,YAAYxB,uBAAuB5b,OAAO6b,QAAQ;AACxD,YAAIuB,cAAc,KAAM;AAExB,cAAMrE,WAAYmC,WAAkCnC;AACpD,YAAIA,YAAYA,SAASpE,OAAO;AAC5B,cAAIzZ,KAAKggB,WAAW7lB,MAAM6F;AAC1B,cAAI6d,SAASC,MAAM;AACf,kBAAM;AAAA,cAAE9hB,MAAAA;AAAAA,YAAAA,IAAS6hB;AACjB,gBAAI7hB,OAAM;AACNA,oBAAK6N,QAAQ7J,EAAE;AAAA,YACnB,OAAO;AACHA,mBAAKA,GAAGmiB,gBAAAA;AAAAA,YACZ;AAAA,UACJ;AAEA,gBAAMC,eAAepiB,GAAG0E,QAAQD,IAAIyd,SAAS;AAC7C,gBAAMG,eAAeriB,GAAGpE;AAExB,gBAAM;AAAA,YAAEI;AAAAA,YAAMyd;AAAAA,UAAAA,IAAUoE;AAExB,cAAI7hB,QAAQA,KAAKA,MAAM;AACnB,gBAAIsmB,eAAwFtmB,KAAKA;AACjG,kBAAMumB,UAAUviB,GAAGpE,IAAIqhB,QAAQmF,YAAY;AAC3C,kBAAMI,aAAaD,QAAQ9hB,OAAOxE,KAAKC;AAEvC,kBAAMumB,eAAeD,eAAe,iBAAiBA,eAAe;AACpE,kBAAME,mBAAmBF,eAAe;AAGxC,gBAAI,UAAUF,gBAAgBA,aAAarmB,KAAKC,SAAS,eAAe,CAACumB,cAAc;AACnFH,6BAAeA,aAAa/Y;AAAAA,YAChC,WAAW,UAAU+Y,gBAAgBA,aAAarmB,KAAKC,SAAS,cAAc,CAACwmB,kBAAkB;AAC7FJ,6BAAeA,aAAa/Y;AAAAA,YAChC;AAGA,kBAAMoZ,aAAa,EAAE,UAAUL;AAC/B,kBAAMhI,YAAYqI,cAAe,UAAUL,gBAAgBA,aAAarmB,KAAKC,SAAS,eAAeomB,aAAarmB,KAAKC,SAAS;AAEhI,gBAAIoe,WAAW;AACX,kBAAImI,cAAc;AACd,sBAAMG,eAAe5C,WAAW7lB,MAAMoH,OAAOuC,MAAM+e;AACnD,oBAAID,aAAcN,gBAAeM,aAAa7e,OAAO,MAAMue,YAAY;AAAA,cAC3E,WAAWI,kBAAkB;AACzB,sBAAMI,eAAe9C,WAAW7lB,MAAMoH,OAAOuC,MAAMif;AACnD,oBAAID,aAAcR,gBAAeQ,aAAa/e,OAAO;AAAA,kBAAEif,SAAS;AAAA,gBAAA,GAASV,YAAY;AAAA,cACzF;AAAA,YACJ;AAGA,gBAAI;AACAtiB,mBAAKA,GAAGijB,OAAOb,cAAcE,YAAY;AAAA,YAC7C,SAAStjB,GAAG;AACR6C,sBAAQ8B,KAAK,yEAAyE3E,CAAC;AACvF,oBAAMkkB,QAAQC,UAAUnjB,GAAGpE,KAAKwmB,cAAc3I,KAAK;AACnD,kBAAIyJ,UAAU,MAAM;AAChBljB,qBAAKA,GAAG6J,QAAQqZ,OAAOA,OAAOzJ,KAAK;AAAA,cACvC;AAAA,YACJ;AAAA,UACJ,WAAWA,OAAO;AAGd,kBAAMyJ,QAAQC,UAAUnjB,GAAGpE,KAAKwmB,cAAc3I,KAAK;AACnD,kBAAM2J,cAAcF,UAAU,OAAOA,QAAQd;AAC7CpiB,iBAAKA,GAAG6J,QAAQuZ,aAAaA,aAAa3J,KAAK;AAAA,UACnD;AAEA,cAAI,CAACzZ,GAAGpE,IAAIynB,GAAGhB,YAAY,GAAG;AAC1BrC,uBAAW5c,SAASpD,GAAGqD,QAAQ,WAAW,MAAM,CAAC;AACjD2c,uBAAWhU,MAAAA;AAAAA,UACf;AAAA,QACJ;AAECgU,mBAAkCnC,WAAW;AAAA,MAClD;AAEA,YAAMyF,gBAAgBA,MAAM;AACxB/C,qBAAAA;AAAAA,MACJ;AAEAtU,aAAOC,iBAAiB,YAAYmV,gBAAgB;AAAA,QAAElV,SAAS;AAAA,MAAA,CAAM;AACrEF,aAAOC,iBAAiB,QAAQ+V,YAAY;AAAA,QAAE9V,SAAS;AAAA,MAAA,CAAM;AAC7DF,aAAOC,iBAAiB,WAAWoX,eAAe;AAAA,QAAEnX,SAAS;AAAA,MAAA,CAAM;AAEnEzO,gBAAUA,MAAM;AACZ6iB,qBAAAA;AACAL,iBAASqD,WAAAA;AACTtX,eAAOG,oBAAoB,YAAYiV,gBAAgB;AAAA,UAAElV,SAAS;AAAA,QAAA,CAAM;AACxEF,eAAOG,oBAAoB,QAAQ6V,YAAY;AAAA,UAAE9V,SAAS;AAAA,QAAA,CAAM;AAChEF,eAAOG,oBAAoB,WAAWkX,eAAe;AAAA,UAAEnX,SAAS;AAAA,QAAA,CAAM;AAAA,MAC1E;AAEA,aAAO;AAAA,QACH8S,UAAU;AACN,cAAIvhB,QAASA,SAAAA;AAAAA,QACjB;AAAA,MAAA;AAAA,IAER;AAAA,EAAA,CACH;AACL;AC5eO,MAAM8lB,yBAAyB,IAAI/jB,UAAsC,qBAAqB;AAErG,SAASgkB,mBAAmBC,WAAgB9nB,KAAU;AAClD,QAAM8K,cAAsB,CAAA;AAE5B,MAAIgd,WAAW;AACXhd,gBAAY0E,KACRtI,WAAW6gB,OAAOD,UAAU5nB,MAAM4nB,UAAU3nB,IAAI;AAAA,MAC5Cwd,OAAO;AAAA,IAAA,CACV,CACL;AAAA,EACJ;AACA,QAAMtW,gBAAgBsB,cAAcR,OAAOnI,KAAK8K,WAAW;AAC3D,SAAOzD;AACX;AAKO,MAAM2gB,oBAAoB;AAAA,EAC7BC,6BAA6BA,CAAC3iB,UAA2B,CAAC/G,OAAoBiJ,aAAkD;AAC5H,UAAM;AAAA,MAAE3H;AAAAA,IAAAA,IAActB;AACtB,UAAM6G,MAAMvF,UAAUK;AAEtB,QAAI,CAACsH,SAAU,QAAO;AAEtB,UAAMpD,KAAK7F,MAAM6F,GAAGqD,QAAQmgB,wBAAwB;AAAA,MAChDxiB;AAAAA,MACA/E,MAAM;AAAA,MACNgI,QAAQ;AAAA,MACR/C;AAAAA,IAAAA,CACH;AAEDkC,aAASpD,EAAE;AACX,WAAO;AAAA,EACX;AAAA,EAEA8jB,6BAA6BA,MAAM,CAAC3pB,OAAoBiJ,aAAkD;AACtG,QAAI,CAACA,SAAU,QAAO;AAEtB,UAAMpD,KAAK7F,MAAM6F,GAAGqD,QAAQmgB,wBAAwB;AAAA,MAChDxiB,KAAK;AAAA,MACL/E,MAAM;AAAA,MACNgI,QAAQ;AAAA,IAAA,CACX;AAEDb,aAASpD,EAAE;AACX,WAAO;AAAA,EACX;AACJ;AAMO,MAAM+jB,4BAA4BA,CAACC,qBAAsC;AAC5E,SAAO,IAAIrkB,OAAmC;AAAA,IAC1CC,KAAK4jB;AAAAA,IACLrpB,OAAO;AAAA,MACH0F,MAAMA,CAACiO,GAAG;AAAA,QAAElS;AAAAA,MAAAA,MAAU;AAClB,cAAMqH,gBAAsFsB,cAAc7I;AAC1G,eAAO;AAAA,UACHuH;AAAAA,UACAygB,WAAWM;AAAAA,QAAAA;AAAAA,MAEnB;AAAA,MACAjkB,MAAMkkB,aAAa/jB,UAAU;AACzB,cAAMgH,SAAS+c,YAAY5jB,QAAQmjB,sBAAsB;AACzD,cAAME,YAAYxc,QAAQhG;AAC1B,YAAIgG,QAAQjL,SAAS,uBAAuB;AAExC,gBAAML,MAAMqoB,YAAYroB;AACxB,gBAAM;AAAA,YAAEqI;AAAAA,UAAAA,IAAWiD;AAEnB,cAAIjD,QAAQ;AACR,mBAAO;AAAA,cACHhB,eAAesB,cAAc7I;AAAAA,YAAAA;AAAAA,UAErC;AACA,gBAAMuH,gBAAgBwgB,mBAAmBC,WAAW9nB,GAAG;AACvD,iBAAO;AAAA,YACHqH;AAAAA,YACAygB;AAAAA,UAAAA;AAAAA,QAER,OAAO;AACH,iBAAOxjB;AAAAA,QACX;AAAA,MACJ;AAAA,IAAA;AAAA,IAEJyE,OAAO;AAAA,MACH+B,YAAYvM,OAAO;AACf,cAAM+pB,oBAAoB,KAAKhhB,SAAS/I,KAAK;AAC7C,YAAI+pB,mBAAmBjhB,eAAe;AAClC,iBAAOihB,kBAAkBjhB;AAAAA,QAC7B,OAAO;AACH,iBAAOsB,cAAc7I;AAAAA,QACzB;AAAA,MACJ;AAAA,IAAA;AAAA,EACJ,CACH;AACL;ACrGA,MAAMyoB,iBAAiBC,kBAAkB,YAAY7iB,OAAOuC,MAAM4E,UAAU;AAE5E,MAAM2b,kBAAkBD,kBACpB,eACA7iB,OAAOuC,MAAM0E,cACZ3H,CAAAA,WAAW;AAAA,EAAEyjB,OAAO,CAACzjB,MAAM,CAAC;AAAE,IAC/B,CAACA,OAAO7E,SAASA,KAAK8d,aAAa9d,KAAK4S,MAAM0V,UAAU,CAACzjB,MAAM,CAAC,CACpE;AAEA,MAAM0jB,iBAAiBH,kBAAkB,kBAAkB7iB,OAAOuC,MAAMyE,WAAW;AAEnF,MAAMic,eAAeJ,kBAAkB,kBAAkB7iB,OAAOuC,MAAMsE,SAAS;AAE/E,MAAMqc,gBAAgBC,uBAAuB,SAASnjB,OAAOuC,MAAM6E,UAAU;AAE7E,MAAMgc,cAAcD,uBAChB,IAAIE,OAAO,eAAe,GAC1BrjB,OAAOuC,MAAMuE,SACZxH,CAAAA,WAAW;AAAA,EAAEyH,OAAOzH,MAAM,CAAC,EAAEI;AAAO,EACzC;AAEA,MAAM4jB,0BAA0B,IAAIC,UAChC,+BACA,CAAC3qB,OAAO0G,OAAOnE,OAAOE,QAAQ;AAC1B,QAAMoD,KAAK7F,MAAM6F;AACjBA,KAAGgE,YAAYtH,QAAQ,GAAGE,KAAK2E,OAAOuC,MAAMihB,gBAAgBhhB,QAAQ;AACpE,SAAO/D;AACX,CACJ;AAEA,SAASglB,cAAcC,QAAgBC,UAAoBC,UAA6D;AACpH,SAAO,IAAIL,UAAUG,QAAQ,CAAC9qB,OAAO0G,OAAOnE,OAAOE,QAAQ;AACvD,UAAMgS,QAAQuW,oBAAoBC,WAAWD,SAAStkB,KAAK,IAAIskB;AAC/D,UAAMnlB,KAAK7F,MAAM6F;AACjB,QAAIa,MAAM,CAAC,GAAG;AACV,YAAMwkB,YAAY3oB,QAAQmE,MAAM,CAAC,EAAEykB,QAAQzkB,MAAM,CAAC,CAAC;AACnD,YAAM0kB,UAAUF,YAAYxkB,MAAM,CAAC,EAAEI;AACrC,UAAIskB,UAAU3oB,IAAKoD,IAAGwlB,OAAOD,SAAS3oB,GAAG;AACzC,UAAIyoB,YAAY3oB,MAAOsD,IAAGwlB,OAAO9oB,OAAO2oB,SAAS;AACjDzoB,YAAMF,QAAQmE,MAAM,CAAC,EAAEI;AAAAA,IAC3B;AACAjB,OAAGoU,QAAQ1X,OAAOE,KAAKsoB,SAASnhB,OAAO6K,KAAK,CAAC;AAC7C5O,OAAG8U,iBAAiBoQ,QAAQ;AAC5B,WAAOllB;AAAAA,EACX,CAAC;AACL;AAEA,MAAMylB,aAAaT,cAAc,mCAAmCzjB,OAAO8R,MAAM4E,IAAI;AACrF,MAAMyN,SAASV,cAAc,wCAAwCzjB,OAAO8R,MAAMgF,MAAM;AACxF,MAAMsN,WAAWX,cAAc,sBAAsBzjB,OAAO8R,MAAM4F,IAAI;AACtE,MAAM2M,aAAaZ,cAAc,wBAAwBzjB,OAAO8R,MAAMwF,MAAM;AAErE,MAAMgN,qBAAqBC,WAAW;AAAA,EACzCC,OAAO,CACH,GAAGC,aACHC,UACAC,QACA/B,gBACAE,iBACAE,gBACAE,eACAE,aACAH,cACAK,yBACAY,YACAC,QACAC,UACAC,UAAU;AAElB,CAAC;AC7EM,MAAMO,uBAAuB,IAAI1mB,UAAU,mBAAmB;AAErE,SAAS2mB,YAAYpqB,MAAY;AAC7B,QAAMqqB,iBAAiBrqB,KAAKC,KAAKoR,cAAAA;AACjC,MAAI,CAACgZ,eAAgB,QAAO;AAC5B,SAAOrqB,KAAKuN,QAAQ8Z,GAAGgD,eAAe9c,OAAO;AACjD;AAEO,SAAS+c,kBAAkBxL,MAAc;AAC5C,SAAO,IAAInb,OAAO;AAAA,IACdC,KAAKumB;AAAAA,IACLxhB,OAAO;AAAA,MACH+B,aAAcvM,CAAAA,UAAU;AACpB,cAAMyB,MAAMzB,MAAMyB;AAClB,cAAM8K,cAA4B,CAAA;AAClC,cAAM6f,aAAa3qB,IAAIke,eAAe,KAAKle,IAAIme,YAAYyM,eAAe5qB,IAAIme,WAAWxQ,QAAQC,SAAS;AAC1G,cAAM;AAAA,UAAEid;AAAAA,QAAAA,IAAWtsB,MAAMsB;AAEzBG,YAAI8qB,YAAY,CAAC1qB,MAAMgF,QAAQ;AAC3B,gBAAM2lB,UAAU,CAAC3qB,KAAK4qB,UAAUR,YAAYpqB,IAAI;AAEhD,cAAI2qB,SAAS;AAGT,kBAAME,UAAU7lB,MAAMhF,KAAK4Y;AAC3B,kBAAMkS,YAAYL,UAAUzlB,OAAOylB,UAAUI;AAE7C,gBAAI,CAACC,aAAa,CAACP,YAAY;AAC3B,qBAAO;AAAA,YACX;AAEA,kBAAMQ,UAAU,CAAC,UAAU;AAC3B,gBAAIR,YAAY;AACZQ,sBAAQ3b,KAAK,iBAAiB;AAAA,YAClC;AAEA1E,wBAAY0E,KACRtI,WAAW9G,KAAKgF,KAAKA,MAAMhF,KAAK4Y,UAAU;AAAA,cACtC2E,OAAOwN,QAAQC,KAAK,GAAG;AAAA,cACvB,oBAAoBlM;AAAAA,YAAAA,CACvB,CACL;AAAA,UACJ;AACA,iBAAO;AAAA,QACX,CAAC;AAED,eAAOvW,cAAcR,OAAOnI,KAAK8K,WAAW;AAAA,MAChD;AAAA,IAAA;AAAA,EACJ,CACH;AACL;ACtCA,MAAMugB,eAAe;AAAA,EACjB,OAAOC,aAAa,CAAC;AAAA,EACrB,aAAaA,aAAa,EAAE;AAAA,EAC5B,SAASC;AAAAA,EACT,SAASC;AAAAA,EACT,eAAeA;AAAAA,EACf,SAASjP,WAAW5W,OAAO8R,MAAM4E,IAAI;AAAA,EACrC,SAASE,WAAW5W,OAAO8R,MAAMgF,MAAM;AAAA,EACvC,SAASF,WAAW5W,OAAO8R,MAAMoF,SAAS;AAAA,EAC1C,eAAeN,WAAW5W,OAAO8R,MAAMwF,MAAM;AAAA,EAC7C,SAASV,WAAW5W,OAAO8R,MAAM4F,IAAI;AAAA,EACrC,eAAed,WAAW5W,OAAO8R,MAAMqQ,SAAS;AAAA,EAEhD,SAAS2D,cAAc9lB,OAAOuC,MAAM+e,SAAS;AAAA,EAC7C,eAAewE,cAAc9lB,OAAOuC,MAAMuR,SAAS;AAAA,EAEnD,SAASiS,aAAa/lB,OAAOuC,MAAM+e,SAAS;AAAA,EAC5C,SAAS0E,aAAahmB,OAAOuC,MAAM+e,SAAS;AAAA,EAE5C,eAAe5a,aAAa1G,OAAOuC,MAAMyE,WAAW;AAAA,EACpD,eAAeN,aAAa1G,OAAOuC,MAAM0E,YAAY;AAAA,EAErD,aAAaP,aAAa1G,OAAOuC,MAAMuE,SAAS;AAAA,IAAEC,OAAO;AAAA,EAAA,CAAG;AAAA,EAC5D,aAAaL,aAAa1G,OAAOuC,MAAMuE,SAAS;AAAA,IAAEC,OAAO;AAAA,EAAA,CAAG;AAAA,EAC5D,aAAaL,aAAa1G,OAAOuC,MAAMuE,SAAS;AAAA,IAAEC,OAAO;AAAA,EAAA,CAAG;AAAA,EAE5D,aAAaL,aAAa1G,OAAOuC,MAAMoE,SAAS;AACpD;AAEO,MAAMsf,iBAAiBA,MAAgB,CAC1CC,QAAAA,GACAC,OAAOT,YAAY,GACnBS,OAAOC,UAAU,GACjBrI,qBAAAA,GACAsI,aACAloB,mBAAAA,GACAyd,iBAAAA,GACA4G,0BAAAA,GACA/c,4BAAAA,GACA6e,oBACAS,kBAAkB,wBAAwB,CAAC;ACrCxC,MAAMuB,cAAkC;AAAA,EACpC7rB;AAAAA,EACA5B;AAAAA,EACA0tB;AAAAA,EACAjZ;AAAAA,EACAkZ;AAAAA,EACCC;AAAAA,EACAC;AAAAA,EAERC,YACIlsB,MACA5B,MACA0tB,QACAG,WACAE,KAAK,OACLptB,WACAqtB,mBACF;AACE,SAAKpsB,OAAOA;AACZ,SAAK5B,OAAOA;AACZ,SAAK0tB,SAASA;AACd,SAAKG,YAAYA;AAEjB,SAAKpZ,MAAMzM,SAASC,cAAc8lB,EAAE;AACpC,QAAIptB,UAAW,MAAK8T,IAAI9T,YAAYA;AACpC,QAAIqtB,mBAAmB;AACnB,WAAKL,aAAaK;AAAAA,IACtB;AAEA,UAAMhhB,YAAYhF,SAASC,cAAc,KAAK;AAE9C,SAAKwM,IAAIjM,YAAYwE,SAAS;AAC9B,QAAI,KAAK2gB,YAAY;AACjB,WAAKlZ,IAAIjM,YAAY,KAAKmlB,UAAU;AAAA,IACxC;AAEA,SAAKC,OAAOK,WAAWjhB,SAAS;AAChC,SAAKkhB,OAAAA;AAAAA,EACT;AAAA,EAEQA,SAAS;AACb,SAAKN,KAAKM,OACN,oBAAC,KAAK,WAAL,EACG,MAAM,KAAKtsB,MACX,MAAM,KAAK5B,MACX,QAAQ,KAAK0tB,SAErB;AAAA,EACJ;AAAA,EAEAS,OAAOvsB,MAAgC;AACnC,QAAIA,KAAKC,SAAS,KAAKD,KAAKC,MAAM;AAC9B,aAAO;AAAA,IACX;AACA,SAAKD,OAAOA;AACZ,SAAKssB,OAAAA;AACL,WAAO;AAAA,EACX;AAAA,EAEArJ,UAAU;AACN,SAAK+I,KAAKQ,QAAAA;AAAAA,EACd;AAAA,EAEAC,eAAeC,UAAe;AAC1B,QAAI,CAAC,KAAKX,YAAY;AAClB,aAAO;AAAA,IACX;AACA,WAAO,CAAC,KAAKA,WAAWhZ,SAAS2Z,SAAShmB,MAAM;AAAA,EACpD;AACJ;ACrFO,MAAMimB,oBAAkDluB,CAAAA,OAAA;AAAA,QAAAE,IAAAC,EAAA,CAAA;AAAC,QAAA;AAAA,IAAAoB;AAAAA,IAAA5B;AAAAA,IAAA0tB;AAAAA,EAAAA,IAAArtB;AAC5D,QAAAuoB,UAAgBhnB,KAAI4S,MAAAoU;AAAe,MAAA3nB;AAAA,MAAAV,EAAA,CAAA,MAAAmtB,UAAAntB,EAAA,CAAA,MAAAqB,KAAA4S,SAAAjU,EAAA,CAAA,MAAAP,MAAA;AAEdiB,SAAA2D,CAAAA,MAAA;AACjB,YAAAgC,MAAY8mB,OAAAA;AAAS,UACjB,OAAO9mB,QAAQ,UAAQ;AAAA;AAAA,MAAA;AAE3B5G,WAAIgJ,SACAhJ,KAAID,MAAA6F,GAAAqP,cAAwBrO,KAAGV,QAAA;AAAA,QAAA,GACxBtE,KAAI4S;AAAAA,QAAAoU,SACEhkB,EAAC0D,OAAAsgB;AAAAA,MAAAA,CACb,CACL;AAAA,IAAC;AACJroB,WAAAmtB;AAAAntB,MAAA,CAAA,IAAAqB,KAAA4S;AAAAjU,WAAAP;AAAAO,WAAAU;AAAAA,EAAA,OAAA;AAAAA,SAAAV,EAAA,CAAA;AAAA,EAAA;AAVD,QAAAiuB,eAAqBvtB;AAUnB,MAAAC;AAAA,MAAAX,EAAA,CAAA,MAAAqoB,WAAAroB,SAAAiuB,cAAA;AAGEttB,SAAA,oBAAA,SAAA,EAAwB,wBAAiB,WAAA,qCACrC,UAAA,oBAAA,SAAA,EACS,MAAA,YACI0nB,SACC4F,UAAAA,cACA,WAAA,qCAAmC,GAErD;AAAQjuB,WAAAqoB;AAAAroB,WAAAiuB;AAAAjuB,WAAAW;AAAAA,EAAA,OAAA;AAAAA,SAAAX,EAAA,CAAA;AAAA,EAAA;AAAA,SAPRW;AAOQ;ACtBT,MAAMutB,iBAA+CpuB,CAAAA,OAAA;AAAA,QAAAE,IAAAC,EAAA,CAAA;AAAC,QAAA;AAAA,IAAAoB;AAAAA,IAAA5B;AAAAA,IAAA0tB;AAAAA,EAAAA,IAAArtB;AAEzD,QAAAquB,WAAiB1uB,KAAID,MAAAsB,UAAAK,SAA0BgsB,OAAAA;AAIlC,QAAAzsB,KAAAW,KAAI4S,MAAAnM;AACJ,QAAAnH,KAAAU,KAAI4S,MAAAT,OAAc;AAChB,QAAA7R,KAAAN,KAAI4S,MAAAnH,SAAgB;AAGvB,QAAA7J,KAAAkrB,WAAW,KAAK;AAAE,MAAA3qB;AAAA,MAAAxD,SAAAiD,IAAA;AAFXO,SAAAqO,IACP,8BACA5O,EACJ;AAACjD,WAAAiD;AAAAjD,WAAAwD;AAAAA,EAAA,OAAA;AAAAA,SAAAxD,EAAA,CAAA;AAAA,EAAA;AAAA,MAAAiE;AAAA,MAAAjE,EAAA,CAAA,MAAAqB,KAAA4S,MAAAnM,OAAA9H,EAAA,CAAA,MAAAW,MAAAX,EAAA,CAAA,MAAA2B,MAAA3B,SAAAwD,IAAA;AAPLS,SAAA,oBAAA,SACS,KAAAvD,IACA,KAAAC,IACE,OAAAgB,IACI,WAAA6B,GAAAA,CAGV;AACHxD,MAAA,CAAA,IAAAqB,KAAA4S,MAAAnM;AAAA9H,WAAAW;AAAAX,WAAA2B;AAAA3B,WAAAwD;AAAAxD,WAAAiE;AAAAA,EAAA,OAAA;AAAAA,SAAAjE,EAAA,CAAA;AAAA,EAAA;AAAA,SARFiE;AAQE;ACXV,SAASmqB,oBACLd,WACAE,KAAK,OACLptB,WACAiuB,kBACF;AACE,SAAO,CAAChtB,MAAuB5B,MAAkB0tB,WAA+C;AAC5F,UAAMC,aAAaiB,mBAAmBA,iBAAAA,IAAqB1oB;AAC3D,WAAO,IAAIunB,cAAc7rB,MAAM5B,MAAM0tB,QAAQG,WAAWE,IAAIptB,WAAWgtB,UAAU;AAAA,EACrF;AACJ;AAEO,MAAMkB,YAAY;AAAA,EACrB5T,WAAW0T,oBACPJ,mBACA,MACA,oBACA,MAAM;AACF,UAAM9Z,MAAMzM,SAASC,cAAc,KAAK;AACxCwM,QAAI9T,YAAY;AAChB,WAAO8T;AAAAA,EACX,CACJ;AAAA,EACAvN,OAAOynB,oBACHF,gBACA,QACA,qBACJ;AACJ;ACxBA,MAAMK,qBAAqB,IAAIvpB,OAAO;AAAA,EAClCwpB,mBAAmBA,CAACrb,GAAG5N,UAAUC,aAAa;AAC1C,UAAMvE,MAAMuE,SAASvE;AACrB,QAAIA,IAAIwtB,aAAaxtB,IAAIwtB,UAAUntB,KAAKC,SAAS,aAAa;AAC1D,aAAOiE,SAASH,GAAGijB,OAAOrnB,IAAI2N,QAAQC,MAAMrJ,SAASoB,OAAOuC,MAAMoE,UAAUnE,OAAAA,CAAQ;AAAA,IACxF;AACA,WAAO;AAAA,EACX;AACJ,CAAC;AAQM,SAAAslB,eAAA5uB,IAAA;AAAA,QAAAE,IAAAC,EAAA,EAAA;AAAwB,QAAA;AAAA,IAAA0uB;AAAAA,IAAA5K,UAAArjB;AAAAA,IAAAkuB;AAAAA,EAAAA,IAAA9uB;AAAkB,QAAAikB,WAAArjB,OAAeiF,gBAAfjF;AAAe,MAAAC;AAAA,MAAAX,EAAA,CAAA,MAAA4uB,qBAAA5uB,SAAA2uB,gBAAA;AAC5D,UAAA7nB,UAAA,CAAA,GACO+lB,eAAAA,GACHgC,kBACAC,aAAAA,GAAcP,kBAAA;AAEhB,QACEK,mBAAiB;AACjB9nB,cAAO2J,KAAM9G,sBAAsBilB,iBAAiB,CAAC;AAAA,IAAC;AAGrCjuB,SAAAouB,YAAA3lB,OAAA;AAAA,MAAAnI,KACZ,OAAO0tB,mBAAmB,WACzBlf,OAAAD,MAAamf,cAAc,IAC3BA,iBACI/nB,OAAAooB,aAAoBL,cAAc,IAClC/nB,OAAAvF,KAAY,OAAK,MAAA,CAASuF,OAAAvF,KAAY,WAAW,CAAC,CAAC;AAAA,MAACuF;AAAAA,MAAAE;AAAAA,IAAAA,CAGjE;AAAC9G,WAAA4uB;AAAA5uB,WAAA2uB;AAAA3uB,WAAAW;AAAAA,EAAA,OAAA;AAAAA,SAAAX,EAAA,CAAA;AAAA,EAAA;AARF,QAAAivB,eAAqBtuB;AAUrB,QAAA,CAAAnB,OAAA0vB,QAAA,IAA0BzuB,SAAsBwuB,YAAY;AAC5D,QAAA,CAAAxvB,MAAA0vB,OAAA,IAAwB1uB,aAAgC;AAExD,QAAA2uB,YAAkB9uB,OAAA,IAA2B;AAC7C,QAAA+uB,UAAgB/uB,OAAA,IAA8B;AAAE,MAAAqB;AAAA,MAAA3B,EAAA,CAAA,MAAAivB,gBAAAjvB,SAAA+jB,UAAA;AAEhCpiB,SAAAA,MAAA;AAAA,UAAA,CACPytB,UAASttB,SAAA;AAAA;AAAA,MAAA;AAEd,YAAAujB,aAAA,IAAAiK,WAAkCF,UAASttB,SAAA;AAAA,QAAAtC,OAChCyvB;AAAAA,QAAYlL,UAAAA,MACHA;AAAAA,QAAQwL,qBAAAlqB,CAAAA,OAAA;AAEpB,gBAAAG,WAAiB6f,WAAU7lB,MAAA4F,MAAaC,EAAE;AAC1CggB,qBAAUmK,YAAahqB,QAAQ;AAC/B0pB,mBAAS1pB,QAAQ;AAAA,QAAC;AAAA,QAAA8oB;AAAAA,QAAAmB,oBAAAlkB,MAAA;AAOlB,gBAAA8D,MAAY5H,SAAAC,cAAuB,KAAK;AACxC2H,cAAG3C,YAAanB;AAChB8D,cAAGqgB,iBAAkB,GAAG,EAAC3kB,QAAA7G,KAMxB;AAAC,iBACKmL,IAAG3C;AAAAA,QAAA;AAAA,MAAA,CAAA;AAKlB,YAAAijB,sBAA4BtK,WAAUra,YAAA4kB,KAAkBvK,UAAU;AAClEA,iBAAUra,cAAAuW,CAAAA,WAAA;AACN,cAAAsO,MAAYF,oBAAoBpO,MAAM;AAAE,YAAA,CACnCsO,KAAG;AACJ,gBAAArO,aAAmB6D,WAAUnR,IAAA/R,sBAAAA;AAA6B,cAEtDof,OAAM9e,QAAS+e,WAAU/e,MAAK;AAC9B,kBAAAuf,SAAeR,WAAU/e,OAAQJ,KAAAC,IAAA,IAAakf,WAAU7e,SAAU;AAAE,mBAC7DgtB,oBAAmB;AAAA,cAAAltB,MAASuf;AAAAA,cAAM5f,KACxDmf,OAAMnf;AAAAA,YAAAA,CAAM;AAAA,UAAC;AAAA,cAGEmf,OAAM9e,QAAS+e,WAAU9e,OAAM;AAC/B,kBAAAotB,WAAetO,WAAU9e,QAASL,KAAAC,IAAA,IAAakf,WAAU7e,SAAU;AAAE,mBAC9DgtB,oBAAmB;AAAA,cAAAltB,MAASuf;AAAAA,cAAM5f,KACxDmf,OAAMnf;AAAAA,YAAAA,CAAM;AAAA,UAAC;AAAA,QAAA;AAAA,eAGCytB;AAAAA,MAAG;AAGdR,cAAOvtB,UAAWujB;AAClB8J,cAAQ9J,UAAU;AAAC,aAAA,MAAA;AAGfA,mBAAUf,QAAAA;AACV+K,gBAAOvtB,UAAA;AAAA,MAAA;AAAA,IAAA;AAEd9B,WAAAivB;AAAAjvB,WAAA+jB;AAAA/jB,WAAA2B;AAAAA,EAAA,OAAA;AAAAA,SAAA3B,EAAA,CAAA;AAAA,EAAA;AAAA,MAAAiD;AAAA,MAAAjD,EAAA,CAAA,MAAA6D,uBAAAC,IAAA,2BAAA,GAAA;AAAEb,SAAA,CAAA;AAAEjD,WAAAiD;AAAAA,EAAA,OAAA;AAAAA,SAAAjD,EAAA,CAAA;AAAA,EAAA;AA1DL+vB,kBAAgBpuB,IA0DbsB,EAAE;AAAC,MAAAO;AAAA,MAAAS;AAAA,MAAAjE,SAAA+jB,UAAA;AAGIvgB,SAAAA,MAAA;AAAA,UACF6rB,QAAOvtB,SAAA;AACPutB,gBAAOvtB,QAAAkuB,SAAA;AAAA,UAAAjM,UAAAA,MAAoCA;AAAAA,QAAAA,CAAU;AAAA,MAAC;AAAA,IAAA;AAE3D9f,UAAC8f,QAAQ;AAAC/jB,WAAA+jB;AAAA/jB,WAAAwD;AAAAxD,WAAAiE;AAAAA,EAAA,OAAA;AAAAT,SAAAxD,EAAA,CAAA;AAAAiE,SAAAjE,EAAA,CAAA;AAAA,EAAA;AAJb0B,YAAU8B,IAIPS,EAAU;AAAC,MAAA2Q;AAAA,MAAA5U,EAAA,EAAA,MAAAR,SAAAQ,UAAAP,MAAA;AAEPmV,SAAA;AAAA,MAAApV;AAAAA,MAAAC;AAAAA,MAAA2vB;AAAAA,IAAAA;AAINpvB,YAAAR;AAAAQ,YAAAP;AAAAO,YAAA4U;AAAAA,EAAA,OAAA;AAAAA,SAAA5U,EAAA,EAAA;AAAA,EAAA;AAAA,SAJM4U;AAIN;AAlGE,SAAA1Q,MAAA+N,IAAA;AA8CaA,KAAEge,gBAAiB,OAAO;AAC1Bhe,KAAEge,gBAAiB,OAAO;AAC1Bhe,KAAEge,gBAAiB,OAAO;AAC1Bhe,KAAEge,gBAAiB,SAAS;AAC5Bhe,KAAEge,gBAAiB,MAAM;AAAC;AChC9C,MAAMC,eAAe;AAAA,EACnB,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AACR;AAEO,MAAMC,eAAeA,CAAC;AAAA,EAC3BvhB;AAAAA,EACAwhB;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC,WAAW;AAAA,EACXzH;AAAAA,EACA6F;AAAAA,EACAtgB;AAAAA,EACAmiB;AAAAA,EACAC;AACiB,MAAM;AACvB,QAAM;AAAA,IAAEpd;AAAAA,EAAAA,IAAMC,eAAAA;AAEd,QAAM,CAACod,UAAUC,WAAW,IAAInwB,SAAS,KAAK;AAC9C,QAAM,CAACowB,UAAUC,WAAW,IAAIrwB,SAAS,KAAK;AAE9C,QAAM,CAACswB,gBAAgBC,iBAAiB,IAAIvwB,SAAS,KAAK;AAC1D,QAAM,CAACwwB,kBAAkBC,mBAAmB,IAAIzwB,SAAiB,EAAE;AAEnEiB,YAAU,MAAM;AACd,QAAI,CAACqvB,eAAgB;AACrB,UAAMI,UAAUtwB,WAAW,MAAM;AAC/B,UAAIuwB,aAAatvB,QAAQwuB,yBAAyB;AAChDc,qBAAatvB,QAAQwuB,wBAAwBW,gBAAgB;AAAA,MAC/D;AAAA,IACF,GAAG,GAAG;AACN,WAAO,MAAMxvB,aAAa0vB,OAAO;AAAA,EACnC,GAAG,CAACF,kBAAkBF,cAAc,CAAC;AAErC,QAAMM,uBAAuBA,MAAM;AACjC,QAAI,CAACN,gBAAgB;AACnB,UAAItxB,MAAM;AACRyxB,4BAAoB5R,WAAWgS,UAAU7xB,KAAKD,MAAMyB,GAAG,CAAC;AAAA,MAC1D;AACA+vB,wBAAkB,IAAI;AAAA,IACxB,OAAO;AACL,UAAIvxB,MAAM;AACR,cAAM8xB,SAAS9hB,OAAOD,MAAMyhB,gBAAgB;AAC5C,YAAIM,QAAQ;AACV,gBAAMlsB,KAAK5F,KAAKD,MAAM6F,GAAGgE,YAAY,GAAG5J,KAAKD,MAAMyB,IAAI2N,QAAQC,MAAM0iB,OAAO3iB,OAAO;AACnFnP,eAAKgJ,SAASpD,EAAE;AAAA,QAClB;AAAA,MACF;AACA2rB,wBAAkB,KAAK;AAAA,IACzB;AAAA,EACF;AAEA,QAAMQ,uBAAuBA,CAACntB,MAA8C;AAC1E6sB,wBAAoB7sB,EAAE0D,OAAOzC,KAAK;AAAA,EACpC;AAEA,QAAMmsB,qBAAqBA,MAAM;AAC/B,UAAM;AAAA,MAAEnB,yBAAAA;AAAAA,MAAyBF,qBAAAA;AAAAA,IAAAA,IAAwBgB,aAAatvB;AACtE,QAAIwuB,2BAAyB;AAC3BA,gCAAwBW,gBAAgB;AAAA,IAC1C;AACA,QAAIb,uBAAqB;AACvB,UAAI;AACF,cAAMmB,WAAS9hB,OAAOD,MAAMyhB,gBAAgB;AAC5C,YAAIM,UAAQ;AACVnB,gCAAoB3R,sBAAsB8S,SAAOG,OAAAA,CAAQ,CAAgB;AAAA,QAC3E;AAAA,MACF,SAASrtB,KAAG;AACV6C,gBAAQ8B,KAAK,oCAAoC3E,GAAC;AAAA,MACpD;AAAA,IACF;AAAA,EACF;AAEAstB,kBAAgB,UAAUC,SAAS;AAEnC,QAAMR,eAAe9wB,OAAO;AAAA,IAAEgwB;AAAAA,IAChCF;AAAAA,EAAAA,CAAqB;AACnB1uB,YAAU,MAAM;AACd0vB,iBAAatvB,UAAU;AAAA,MAAEwuB;AAAAA,MAC7BF;AAAAA,IAAAA;AAAAA,EACE,GAAG,CAACE,yBAAyBF,mBAAmB,CAAC;AAEjD,QAAMyB,eAAeA,CAACC,iBAA8B;AAClD,UAAM;AAAA,MAAExB,yBAAAA;AAAAA,MAAyBF,qBAAAA;AAAAA,IAAAA,IAAwBgB,aAAatvB;AACtE,QAAIwuB,2BAAyB;AAC3B,UAAI;AACF,cAAMyB,WAAWzS,WAAWgS,UAAUQ,aAAa7wB,GAAG;AACtDqvB,kCAAwByB,QAAQ;AAAA,MAClC,SAAS1tB,KAAG;AACV6C,gBAAQ8B,KAAK,gEAAgE3E,GAAC;AAAA,MAChF;AAAA,IACF;AACA,QAAI+rB,uBAAqB;AACvB,YAAM4B,cAAcvT,sBAAsBqT,aAAa7wB,IAAIywB,QAAQ;AACnEtB,4BAAoB4B,WAAW;AAAA,IACjC;AAAA,EACF;AAEA,QAAM;AAAA,IAAExyB;AAAAA,IAAOC;AAAAA,IAAM2vB;AAAAA,EAAAA,IAAcV,eAAe;AAAA,IAChDC,gBAAgB/f;AAAAA,IAChBmV,UAAU,CAAC0M;AAAAA,IACX7B;AAAAA,EAAAA,CACD;AAKD,QAAMqD,aAAa3xB,OAAOiwB,OAAO;AACjC7uB,YAAU,MAAM;AACd,QAAIuwB,WAAWnwB,YAAYyuB,QAAS;AACpC0B,eAAWnwB,UAAUyuB;AACrB,QAAI,CAAC9wB,KAAM;AACX,QAAI;AACF,YAAM8xB,WAAS,OAAO3iB,YAAY,WAC9Ba,OAAOD,MAAMZ,WAAW,EAAE,IAC1BA,UACEhI,OAAOooB,aAAapgB,OAAO,IAC3BhI,OAAOvF,KAAK,OAAO,MAAM,CAACuF,OAAOvF,KAAK,WAAW,CAAC,CAAC;AACzD,UAAIkwB,UAAQ;AACV,cAAMlsB,OAAK5F,KAAKD,MAAM6F,GAAGgE,YAAY,GAAG5J,KAAKD,MAAMyB,IAAI2N,QAAQC,MAAM0iB,SAAO3iB,OAAO;AACnFnP,aAAKgJ,SAASpD,IAAE;AAAA,MAClB;AAAA,IACF,SAAShB,KAAG;AACV6C,cAAQ8B,KAAK,kDAAkD3E,GAAC;AAAA,IAClE;AAEA,QAAI0sB,gBAAgB;AAClBG,0BAAoB,OAAOtiB,YAAY,WAAWA,UAAU,EAAE;AAAA,IAChE;AAGAsjB,iBAAapwB,UAAUqwB,KAAKC,IAAAA;AAC5BC,qBAAiBvwB,UAAU;AAAA,EAC7B,GAAG,CAACyuB,OAAO,CAAC;AAEZ,QAAMtvB,MAAMzB,OAAOyB;AAMnB,QAAMixB,eAAe5xB,OAAO6xB,KAAKC,IAAAA,CAAK;AACtC,QAAMC,mBAAmB/xB,OAAO,KAAK;AACrCoB,YAAU,MAAM;AACd,QAAI,CAAClC,MAAO;AAIZ,UAAM8yB,UAAUH,KAAKC,IAAAA,IAAQF,aAAapwB;AAC1C,QAAIwwB,UAAU,OAAO,CAACD,iBAAiBvwB,SAAS;AAC9C;AAAA,IACF;AACAuwB,qBAAiBvwB,UAAU;AAC3B,UAAMqvB,YAAUtwB,WAAW,MAAM;AAC/BgxB,mBAAaryB,KAAK;AAAA,IACpB,GAAG,GAAG;AACN,WAAO,MAAMiC,aAAa0vB,SAAO;AAAA,EACnC,GAAG,CAAClwB,GAAG,CAAC;AAERS,YAAU,MAAM;AACd,QAAI,CAACjC,KAAM;AACX,UAAMyU,MAAMzU,KAAKyU;AACjB,UAAMqe,aAAaA,MAAM;AAIvB,UAAI,CAACF,iBAAiBvwB,SAAS;AAC7B,cAAMwwB,YAAUH,KAAKC,IAAAA,IAAQF,aAAapwB;AAC1C,YAAIwwB,YAAU,IAAK;AAAA,MACrB;AACAT,mBAAapyB,KAAKD,KAAK;AAAA,IACzB;AACA0U,QAAI3C,iBAAiB,QAAQghB,UAAU;AACvC,WAAO,MAAMre,IAAIzC,oBAAoB,QAAQ8gB,UAAU;AAAA,EACzD,GAAG,CAAC9yB,IAAI,CAAC;AAGTiC,YAAU,MAAM;AACd,QAAIjC,MAAM;AACR,UAAIspB,WAAW;AACbE,0BAAkBC,4BAA4BH,SAAS,EAAEtpB,KAAKD,OAAOC,KAAKgJ,QAAQ;AAAA,MACpF,OAAO;AACLwgB,0BAAkBE,4BAAAA,EAA8B1pB,KAAKD,OAAOC,KAAKgJ,QAAQ;AAAA,MAC3E;AAAA,IACF;AAAA,EACF,GAAG,CAACsgB,WAAW5nB,MAAM4nB,WAAW3nB,EAAE,CAAC;AAEnC,QAAMoxB,aAAatC,aAAaM,QAAQ;AAGxC,SACE,qBAAC,OAAA,EAAI,WAAU,iCACb,UAAA;AAAA,IAAA,oBAAC,UAAA,EACC,MAAK,UACL,SAASa,sBACT,OAAON,iBAAiB,4BAA4B,sBACpD,WAAU,6NAETA,UAAAA,iBAAiB,WAAW,YAC/B;AAAA,yBAEC,mBAAmB,UAAnB,EAA4B,OAAOxgB,QAAQ,OAAO;AAAA,MAAE/Q;AAAAA,MAC3DC;AAAAA,IAAAA,IAAS,CAACD,OAAOC,IAAI,CAAC,GAEd,UAAA;AAAA,MAAA,qBAAC,SAAI,OAAO;AAAA,QAAEgzB,SAAS1B,iBAAiB,SAAS;AAAA,MAAA,GAC/C,UAAA;AAAA,QAAA,oBAAC,OAAA,EACC,KAAK3B,WACL,WAAWvd,IAAI,oCAAoC2gB,YAAY,yMAAyM,GAAE;AAAA,QAG3Q/yB,QACD,qBAAAoT,YAAA,EACE,UAAA;AAAA,UAAA,qBAAC,gBACC,SAAS;AAAA,YACPhR,WAAW;AAAA,YACXD,QAAQ;AAAA,UAAA,GAEV,WAAWiQ,IAAI,mGAAmGhK,kBAAkB,GAEpI,UAAA;AAAA,YAAA,oBAAC,gBAAa,iBAAiBunB,UAAUttB,SAAS,MAAM6uB,UAAU,cAAcC,aAAY;AAAA,YAC5F,oBAAC,WAAA,EAAU,aAAY,WAAA,CAAU;AAAA,YACjC,oBAAC,cAAA,EAAa,MAAMC,UAAU,cAAcC,aAAY;AAAA,YACxD,oBAAC,WAAA,EAAU,aAAY,WAAA,CAAU;AAAA,gCAChC,aAAA,CAAA,CAAW;AAAA,UAAA,GACd;AAAA,UAEA,oBAAC,eACE,SAAS;AAAA,YACRjvB,WAAW;AAAA,YACXD,QAAQ;AAAA,UAAA,GACR;AAAA,8BAEH,aAAA,CAAA,CAAW;AAAA,QAAA,GACd;AAAA,QAGF,oBAAC,kBAAA,EAAiB,QAAQgtB,mBAAmB,aAAA,CAA2B;AAAA,MAAA,GACxE;AAAA,MAECmC,kBACC,oBAAC,kBAAA,EACC,OAAOE,kBACP,UAAUO,sBACV,QAAQC,oBACR,WAAW5f,IACT,sFACA2gB,UACF,GACA,OAAO;AAAA,QACLE,SAAS;AAAA,QACTC,SAAS;AAAA,QACTC,QAAQ;AAAA,QACRC,WAAW;AAAA,MAAA,EACb,CAAE;AAAA,IAAA,EAAA,CAIR;AAAA,EAAA,GACF;AAEJ;AAGA,MAAMjB,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
|