{ "version": 3, "sources": ["../../Core/lib/Core/helper/BrowserHelper.js", "../../Core/lib/Core/helper/StringHelper.js", "../../Core/lib/Core/helper/util/Objects.js", "../../Core/lib/Core/helper/VersionHelper.js", "../../Core/lib/Core/Config.js", "../../Core/lib/Core/Base.js", "../../Core/lib/Core/helper/ArrayHelper.js", "../../Core/lib/Core/helper/FunctionHelper.js", "../../Core/lib/Core/mixin/Events.js", "../../Core/lib/Core/helper/AsyncHelper.js", "../../Core/lib/Core/helper/AjaxHelper.js", "../../Core/lib/Core/localization/LocaleHelper.js", "../../Core/lib/Core/localization/LocaleManager.js", "../../Core/lib/Core/localization/Localizable.js", "../../Core/lib/Core/localization/En.js", "../../Core/lib/Core/helper/DateHelper.js", "../../Core/lib/Core/helper/ObjectHelper.js", "../../Core/lib/Core/helper/util/Rectangle.js", "../../Core/lib/Core/helper/util/DomClassList.js", "../../Core/lib/Core/helper/EventHelper.js", "../../Core/lib/Core/helper/DomHelper.js", "../../Core/lib/Core/GlobalEvents.js", "../../Core/lib/Core/mixin/InstancePlugin.js", "../../Core/lib/Core/mixin/Pluggable.js", "../../Core/lib/Core/mixin/Delayable.js", "../../Core/lib/Core/state/StateStorage.js", "../../Core/lib/Core/state/StateProvider.js", "../../Core/lib/Core/mixin/State.js", "../../Core/lib/Core/mixin/Identifiable.js", "../../Core/lib/Core/data/stm/mixin/ModelStm.js", "../../Core/lib/Core/data/mixin/TreeNode.js", "../../Core/lib/Core/data/mixin/ModelLink.js", "../../Core/lib/Core/mixin/Factoryable.js", "../../Core/lib/Core/data/field/DataField.js", "../../Core/lib/Core/data/field/ArrayDataField.js", "../../Core/lib/Core/data/field/BooleanDataField.js", "../../Core/lib/Core/data/field/DateDataField.js", "../../Core/lib/Core/data/field/StringDataField.js", "../../Core/lib/Core/data/field/DurationUnitDataField.js", "../../Core/lib/Core/data/field/IntegerDataField.js", "../../Core/lib/Core/data/field/ModelDataField.js", "../../Core/lib/Core/data/field/NumberDataField.js", "../../Core/lib/Core/data/field/ObjectDataField.js", "../../Core/lib/Core/data/field/StoreDataField.js", "../../Core/lib/Core/data/Model.js", "../../Core/lib/Core/helper/util/Formatter.js", "../../Core/lib/Core/helper/util/NumberFormat.js", "../../Core/lib/Core/data/Duration.js", "../../Core/lib/Core/util/CollectionFilter.js", "../../Core/lib/Core/helper/IdHelper.js", "../../Core/lib/Core/util/CollectionSorter.js", "../../Core/lib/Core/util/Collection.js", "../../Core/lib/Core/util/Bag.js", "../../Core/lib/Core/data/StoreBag.js", "../../Core/lib/Core/data/mixin/StoreCRUD.js", "../../Core/lib/Core/data/mixin/StoreChanges.js", "../../Core/lib/Core/data/mixin/StoreFilter.js", "../../Core/lib/Core/data/mixin/StoreGroup.js", "../../Core/lib/Core/data/mixin/StoreProxy.js", "../../Core/lib/Core/data/mixin/StoreRelation.js", "../../Core/lib/Core/data/mixin/StoreSum.js", "../../Core/lib/Core/data/mixin/StoreSearch.js", "../../Core/lib/Core/data/mixin/StoreSort.js", "../../Core/lib/Core/data/mixin/StoreChained.js", "../../Core/lib/Core/data/mixin/StoreState.js", "../../Core/lib/Core/data/Wbs.js", "../../Core/lib/Core/data/mixin/StoreTree.js", "../../Core/lib/Core/helper/WalkHelper.js", "../../Core/lib/Core/data/mixin/StoreSync.js", "../../Core/lib/Core/data/stm/mixin/StoreStm.js", "../../Core/lib/Core/data/Store.js", "../../Core/lib/Core/data/AjaxStore.js", "../../Core/lib/Core/data/DomDataStore.js", "../../Core/lib/Core/data/stm/state/StateBase.js", "../../Core/lib/Core/data/stm/Props.js", "../../Core/lib/Core/data/stm/state/Registry.js", "../../Core/lib/Core/data/stm/Helpers.js", "../../Core/lib/Core/data/stm/state/DisabledState.js", "../../Core/lib/Core/data/stm/Transaction.js", "../../Core/lib/Core/data/stm/state/ReadyState.js", "../../Core/lib/Core/data/stm/state/RecordingState.js", "../../Core/lib/Core/data/stm/state/RestoringState.js", "../../Core/lib/Core/data/stm/state/AutoReadyState.js", "../../Core/lib/Core/data/stm/state/AutoRecordingState.js", "../../Core/lib/Core/data/stm/action/ActionBase.js", "../../Core/lib/Core/data/stm/action/UpdateAction.js", "../../Core/lib/Core/data/stm/action/InsertChildAction.js", "../../Core/lib/Core/data/stm/action/RemoveChildAction.js", "../../Core/lib/Core/data/stm/action/AddAction.js", "../../Core/lib/Core/data/stm/action/InsertAction.js", "../../Core/lib/Core/data/stm/action/RemoveAction.js", "../../Core/lib/Core/data/stm/action/RemoveAllAction.js", "../../Core/lib/Core/data/stm/StateTrackingManager.js", "../../Core/lib/Core/helper/CSSHelper.js", "../../Core/lib/Core/helper/DomSync.js", "../../Core/lib/Core/helper/util/Fullscreen.js", "../../Core/lib/Core/helper/ResizeMonitor.js", "../../Core/lib/Core/helper/util/Scroller.js", "../../Core/lib/Core/helper/util/Promissory.js", "../../Core/lib/Core/widget/Renderable.js", "../../Core/lib/Core/widget/Mask.js", "../../Core/lib/Core/widget/mixin/KeyMap.js", "../../Core/lib/Core/widget/mixin/RTL.js", "../../Core/lib/Core/widget/Widget.js", "../../Core/lib/Core/widget/layout/Layout.js", "../../Core/lib/Core/widget/Ripple.js", "../../Core/lib/Core/widget/Container.js", "../../Core/lib/Core/util/Animator.js", "../../Core/lib/Core/util/ClickRepeater.js", "../../Core/lib/Core/widget/mixin/Rotatable.js", "../../Core/lib/Core/widget/Tool.js", "../../Core/lib/Core/widget/panel/CollapseTool.js", "../../Core/lib/Core/widget/panel/PanelCollapser.js", "../../Core/lib/Core/util/DynamicObject.js", "../../Core/lib/Core/widget/mixin/Toolable.js", "../../Core/lib/Core/widget/layout/Box.js", "../../Core/lib/Core/widget/layout/VBox.js", "../../Core/lib/Core/widget/mixin/Badge.js", "../../Core/lib/Core/widget/Button.js", "../../Core/lib/Core/widget/Toolbar.js", "../../Core/lib/Core/widget/Panel.js", "../../Core/lib/Core/widget/Popup.js", "../../Core/lib/Core/widget/MenuItem.js", "../../Core/lib/Core/widget/Menu.js", "../../Core/lib/Core/feature/base/ContextMenuBase.js", "../../Core/lib/Core/helper/mixin/DragHelperContainer.js", "../../Core/lib/Core/helper/mixin/DragHelperTranslate.js", "../../Core/lib/Core/helper/DragHelper.js", "../../Core/lib/Core/helper/ResizeHelper.js", "../../Core/lib/Core/helper/TemplateHelper.js", "../../Core/lib/Core/helper/TimeZoneHelper.js", "../../Core/lib/Core/widget/Toast.js", "../../Core/lib/Core/helper/WidgetHelper.js", "../../Core/lib/Core/helper/XMLHelper.js", "../../Core/lib/Core/helper/util/RandomGenerator.js", "../../Core/lib/Core/helper/util/DataGenerator.js", "../../Core/lib/Core/helper/util/DemoBot.js", "../../Core/lib/Core/helper/util/Navigator.js", "../../Core/lib/Core/util/WebSocketManager.js", "../../Core/lib/Core/mixin/Clipboardable.js", "../../Core/lib/Core/mixin/Finalizable.js", "../../Core/lib/Core/util/drag/DragContext.js", "../../Core/lib/Core/util/drag/DragProxy.js", "../../Core/lib/Core/mixin/Draggable.js", "../../Core/lib/Core/mixin/Droppable.js", "../../Core/lib/Core/mixin/Featureable.js", "../../Core/lib/Core/mixin/Hoverable.js", "../../Core/lib/Core/mixin/LoadMaskable.js", "../../Core/lib/Core/mixin/Override.js", "../../Core/lib/Core/mixin/Fencible.js", "../../Core/lib/Core/util/DayTime.js", "../../Core/lib/Core/util/Month.js", "../../Core/lib/Core/util/Parser.js", "../../Core/lib/Core/util/ScrollManager.js", "../../Core/lib/Core/widget/Tooltip.js", "../../Core/lib/Core/util/drag/DragTipProxy.js", "../../Core/lib/Core/widget/mixin/Labelable.js", "../../Core/lib/Core/widget/FieldContainer.js", "../../Core/lib/Core/widget/Field.js", "../../Core/lib/Core/widget/TextField.js", "../../Core/lib/Core/widget/PickerField.js", "../../Core/lib/Core/widget/List.js", "../../Core/lib/Core/widget/ChipView.js", "../../Core/lib/Core/widget/Combo.js", "../../Core/lib/Core/widget/base/UndoRedoBase.js", "../../Core/lib/Core/widget/BooleanCombo.js", "../../Core/lib/Core/widget/ButtonGroup.js", "../../Core/lib/Core/widget/CalendarPanel.js", "../../Core/lib/Core/widget/Checkbox.js", "../../Core/lib/Core/widget/ColorPicker.js", "../../Core/lib/Core/widget/ColorField.js", "../../Core/lib/Core/widget/YearPicker.js", "../../Core/lib/Core/widget/DisplayField.js", "../../Core/lib/Core/widget/DatePicker.js", "../../Core/lib/Core/widget/DateField.js", "../../Core/lib/Core/widget/NumberField.js", "../../Core/lib/Core/widget/TimePicker.js", "../../Core/lib/Core/widget/TimeField.js", "../../Core/lib/Core/widget/DateTimeField.js", "../../Core/lib/Core/widget/DurationField.js", "../../Core/lib/Core/widget/layout/Fit.js", "../../Core/lib/Core/widget/Editor.js", "../../Core/lib/Core/widget/FieldFilterPicker.js", "../../Core/lib/Core/widget/Label.js", "../../Core/lib/Core/widget/FieldFilterPickerGroup.js", "../../Core/lib/Core/widget/FieldSet.js", "../../Core/lib/Core/widget/FileField.js", "../../Core/lib/Core/widget/FilePicker.js", "../../Core/lib/Core/widget/FilterField.js", "../../Core/lib/Core/widget/MessageDialog.js", "../../Core/lib/Core/widget/PagingToolbar.js", "../../Core/lib/Core/widget/panel/PanelCollapserOverlay.js", "../../Core/lib/Core/widget/PasswordField.js", "../../Core/lib/Core/widget/Radio.js", "../../Core/lib/Core/widget/RadioGroup.js", "../../Core/lib/Core/widget/Slider.js", "../../Core/lib/Core/widget/SlideToggle.js", "../../Core/lib/Core/widget/Splitter.js", "../../Core/lib/Core/widget/Tab.js", "../../Core/lib/Core/widget/TabBar.js", "../../Core/lib/Core/widget/layout/Card.js", "../../Core/lib/Core/widget/TabPanel.js", "../../Core/lib/Core/widget/TextAreaField.js", "../../Core/lib/Core/widget/TextAreaPickerField.js", "../../Core/lib/Core/widget/mixin/Minifiable.js", "../../Core/lib/Core/widget/mixin/Responsive.js", "../../Core/lib/Core/widget/mixin/Styleable.js", "../../Core/lib/Core/widget/graph/Histogram.js", "../../Core/lib/Core/widget/graph/Scale.js", "../../Core/lib/Core/widget/util/AvatarRendering.js", "../../Core/bundle/entry.thin.js", "../../Grid/lib/Grid/util/Location.js", "../../Grid/lib/Grid/column/Column.js", "../../Grid/lib/Grid/data/ColumnStore.js", "../../Grid/lib/Grid/column/ActionColumn.js", "../../Grid/lib/Grid/column/NumberColumn.js", "../../Grid/lib/Grid/column/AggregateColumn.js", "../../Grid/lib/Grid/column/WidgetColumn.js", "../../Grid/lib/Grid/column/CheckColumn.js", "../../Grid/lib/Grid/column/ColorColumn.js", "../../Grid/lib/Grid/column/DateColumn.js", "../../Grid/lib/Grid/column/PercentColumn.js", "../../Grid/lib/Grid/column/RatingColumn.js", "../../Grid/lib/Grid/column/RowNumberColumn.js", "../../Grid/lib/Grid/column/TemplateColumn.js", "../../Grid/lib/Grid/column/TimeColumn.js", "../../Grid/lib/Grid/column/TreeColumn.js", "../../Grid/lib/Grid/data/GridRowModel.js", "../../Grid/lib/Grid/feature/base/CopyPasteBase.js", "../../Grid/lib/Grid/feature/GridFeatureManager.js", "../../Grid/lib/Grid/feature/CellCopyPaste.js", "../../Grid/lib/Grid/feature/CellEdit.js", "../../Grid/lib/Grid/feature/CellMenu.js", "../../Grid/lib/Grid/feature/CellTooltip.js", "../../Grid/lib/Grid/feature/ColumnAutoWidth.js", "../../Grid/lib/Grid/feature/ColumnDragToolbar.js", "../../Grid/lib/Grid/feature/ColumnPicker.js", "../../Grid/lib/Grid/feature/ColumnRename.js", "../../Grid/lib/Grid/feature/ColumnReorder.js", "../../Grid/lib/Grid/feature/ColumnResize.js", "../../Grid/lib/Grid/feature/FillHandle.js", "../../Grid/lib/Grid/widget/GridFieldFilterPicker.js", "../../Grid/lib/Grid/widget/GridFieldFilterPickerGroup.js", "../../Grid/lib/Grid/feature/Filter.js", "../../Grid/lib/Grid/feature/FilterBar.js", "../../Grid/lib/Grid/feature/Group.js", "../../Grid/lib/Grid/feature/mixin/SummaryFormatter.js", "../../Grid/lib/Grid/feature/GroupSummary.js", "../../Grid/lib/Grid/feature/HeaderMenu.js", "../../Grid/lib/Grid/feature/MergeCells.js", "../../Grid/lib/Grid/feature/QuickFind.js", "../../Grid/lib/Grid/feature/RegionResize.js", "../../Grid/lib/Grid/feature/RowCopyPaste.js", "../../Grid/lib/Grid/feature/RowExpander.js", "../../Grid/lib/Grid/feature/RowReorder.js", "../../Grid/lib/Grid/feature/RowResize.js", "../../Grid/lib/Grid/feature/Search.js", "../../Grid/lib/Grid/feature/Sort.js", "../../Grid/lib/Grid/feature/StickyCells.js", "../../Grid/lib/Grid/feature/Stripe.js", "../../Grid/lib/Grid/feature/Split.js", "../../Grid/lib/Grid/feature/Summary.js", "../../Grid/lib/Grid/feature/Tree.js", "../../Grid/lib/Grid/feature/TreeGroup.js", "../../Grid/lib/Grid/feature/export/Utils.js", "../../Grid/lib/Grid/view/export/field/ExportRowsCombo.js", "../../Grid/lib/Grid/view/export/field/ExportOrientationCombo.js", "../../Grid/lib/Grid/view/export/ExportDialog.js", "../../Grid/lib/Grid/feature/export/exporter/Exporter.js", "../../Grid/lib/Grid/feature/export/exporter/MultiPageExporter.js", "../../Grid/lib/Grid/feature/export/exporter/MultiPageVerticalExporter.js", "../../Grid/lib/Grid/feature/export/exporter/SinglePageExporter.js", "../../Grid/lib/Grid/feature/export/PdfExport.js", "../../Grid/lib/Grid/feature/export/mixin/PrintMixin.js", "../../Grid/lib/Grid/feature/export/Print.js", "../../Grid/lib/Grid/util/TableExporter.js", "../../Grid/lib/Grid/util/BooleanUnicodeSymbol.js", "../../Grid/lib/Grid/feature/experimental/ExcelExporter.js", "../../Grid/lib/Grid/feature/experimental/FileDrop.js", "../../Grid/lib/Grid/row/Row.js", "../../Grid/lib/Grid/view/Bar.js", "../../Grid/lib/Grid/view/Footer.js", "../../Grid/lib/Grid/row/RowManager.js", "../../Grid/lib/Grid/util/GridScroller.js", "../../Grid/lib/Grid/view/Header.js", "../../Grid/lib/Grid/view/mixin/GridElementEvents.js", "../../Grid/lib/Grid/view/mixin/GridFeatures.js", "../../Grid/lib/Grid/view/mixin/GridNavigation.js", "../../Grid/lib/Grid/view/mixin/GridResponsive.js", "../../Grid/lib/Grid/view/mixin/GridSelection.js", "../../Grid/lib/Grid/view/mixin/GridState.js", "../../Grid/lib/Grid/util/SubGridScroller.js", "../../Grid/lib/Grid/view/SubGrid.js", "../../Grid/lib/Grid/view/mixin/GridSubGrids.js", "../../Grid/lib/Grid/localization/En.js", "../../Grid/lib/Grid/view/GridBase.js", "../../Grid/lib/Grid/view/Grid.js", "../../Grid/lib/Grid/view/TreeGrid.js", "../../Grid/lib/Grid/widget/GroupBar.js", "../../Grid/lib/Grid/widget/TreeCombo.js", "../../Scheduler/lib/Scheduler/column/DurationColumn.js", "../../Scheduler/lib/Scheduler/model/mixin/TimeZonedDatesMixin.js", "../../Scheduler/lib/Scheduler/model/TimeSpan.js", "../../Scheduler/lib/Scheduler/preset/ViewPreset.js", "../../Scheduler/lib/Scheduler/localization/En.js", "../../Scheduler/lib/Scheduler/preset/PresetStore.js", "../../Scheduler/lib/Scheduler/preset/PresetManager.js", "../../Scheduler/lib/Scheduler/data/TimeAxis.js", "../../Scheduler/lib/Scheduler/view/model/TimeAxisViewModel.js", "../../Scheduler/lib/Scheduler/view/mixin/TimelineDateMapper.js", "../../Scheduler/lib/Scheduler/view/mixin/TimelineDomEvents.js", "../../Scheduler/lib/Scheduler/view/mixin/TimelineViewPresets.js", "../../Scheduler/lib/Scheduler/view/mixin/TimelineZoomable.js", "../../Scheduler/lib/Scheduler/view/recurrence/RecurrenceConfirmationPopup.js", "../../Scheduler/lib/Scheduler/view/mixin/RecurringEvents.js", "../../Scheduler/lib/Scheduler/view/mixin/TimelineEventRendering.js", "../../Scheduler/lib/Scheduler/view/mixin/TimelineScroll.js", "../../Scheduler/lib/Scheduler/view/mixin/TimelineState.js", "../../Scheduler/lib/Scheduler/view/Header.js", "../../Scheduler/lib/Scheduler/view/TimeAxisSubGrid.js", "../../Scheduler/lib/Scheduler/view/TimelineBase.js", "../../Scheduler/lib/Scheduler/data/mixin/ResourceStoreMixin.js", "../../Scheduler/lib/Scheduler/data/mixin/PartOfProject.js", "../../Scheduler/lib/Scheduler/model/mixin/ResourceModelMixin.js", "../../chronograph/src/collection/Iterator.js", "../../chronograph/src/class/Mixin.js", "../../chronograph/src/class/Base.js", "../../Engine/lib/Engine/quark/AbstractPartOfProjectGenericMixin.js", "../../Engine/lib/Engine/quark/CorePartOfProjectGenericMixin.js", "../../Engine/lib/Engine/quark/store/mixin/AbstractPartOfProjectStoreMixin.js", "../../Engine/lib/Engine/quark/model/mixin/AbstractPartOfProjectModelMixin.js", "../../Engine/lib/Engine/quark/model/mixin/CorePartOfProjectModelMixin.js", "../../Engine/lib/Engine/quark/model/scheduler_core/CoreResourceMixin.js", "../../Scheduler/lib/Scheduler/model/ResourceModel.js", "../../Engine/lib/Engine/quark/store/mixin/CorePartOfProjectStoreMixin.js", "../../Engine/lib/Engine/quark/store/AbstractResourceStoreMixin.js", "../../Engine/lib/Engine/quark/store/CoreResourceStoreMixin.js", "../../Scheduler/lib/Scheduler/data/mixin/PartOfBaseProject.js", "../../Scheduler/lib/Scheduler/data/ResourceStore.js", "../../Scheduler/lib/Scheduler/data/mixin/EventStoreMixin.js", "../../Scheduler/lib/Scheduler/data/mixin/GetEventsMixin.js", "../../Scheduler/lib/Scheduler/data/util/EventDayIndex.js", "../../Scheduler/lib/Scheduler/data/mixin/DayIndexMixin.js", "../../Scheduler/lib/Scheduler/data/mixin/RecurringTimeSpansMixin.js", "../../Scheduler/lib/Scheduler/data/mixin/RecurringEventsMixin.js", "../../Scheduler/lib/Scheduler/data/util/recurrence/RecurrenceDayRuleEncoder.js", "../../Scheduler/lib/Scheduler/data/util/recurrence/AbstractRecurrenceIterator.js", "../../Scheduler/lib/Scheduler/data/util/recurrence/DailyRecurrenceIterator.js", "../../Scheduler/lib/Scheduler/data/util/recurrence/WeeklyRecurrenceIterator.js", "../../Scheduler/lib/Scheduler/data/util/recurrence/MonthlyRecurrenceIterator.js", "../../Scheduler/lib/Scheduler/data/util/recurrence/YearlyRecurrenceIterator.js", "../../Scheduler/lib/Scheduler/model/RecurrenceModel.js", "../../Scheduler/lib/Scheduler/model/mixin/RecurringTimeSpan.js", "../../Scheduler/lib/Scheduler/model/mixin/EventModelMixin.js", "../../Engine/lib/Engine/quark/model/scheduler_core/CoreEventMixin.js", "../../Engine/lib/Engine/quark/model/AbstractHasAssignmentsMixin.js", "../../Engine/lib/Engine/quark/model/scheduler_core/CoreHasAssignmentsMixin.js", "../../Engine/lib/Engine/quark/model/scheduler_core/CoreHasDependenciesMixin.js", "../../Engine/lib/Engine/quark/model/scheduler_core/SchedulerCoreEvent.js", "../../Scheduler/lib/Scheduler/model/EventModel.js", "../../Engine/lib/Engine/quark/store/AbstractEventStoreMixin.js", "../../Engine/lib/Engine/quark/store/CoreEventStoreMixin.js", "../../Scheduler/lib/Scheduler/data/EventStore.js", "../../Scheduler/lib/Scheduler/model/mixin/AssignmentModelMixin.js", "../../Engine/lib/Engine/quark/model/scheduler_core/CoreAssignmentMixin.js", "../../Scheduler/lib/Scheduler/model/AssignmentModel.js", "../../Scheduler/lib/Scheduler/data/mixin/AssignmentStoreMixin.js", "../../Engine/lib/Engine/util/Functions.js", "../../Engine/lib/Engine/quark/store/AbstractAssignmentStoreMixin.js", "../../Engine/lib/Engine/quark/store/CoreAssignmentStoreMixin.js", "../../Scheduler/lib/Scheduler/data/AssignmentStore.js", "../../Scheduler/lib/Scheduler/model/DependencyBaseModel.js", "../../Engine/lib/Engine/quark/model/scheduler_core/CoreDependencyMixin.js", "../../Scheduler/lib/Scheduler/model/DependencyModel.js", "../../Scheduler/lib/Scheduler/data/mixin/DependencyStoreMixin.js", "../../Engine/lib/Engine/quark/store/AbstractDependencyStoreMixin.js", "../../Engine/lib/Engine/quark/store/CoreDependencyStoreMixin.js", "../../Scheduler/lib/Scheduler/data/DependencyStore.js", "../../Scheduler/lib/Scheduler/crud/mixin/AbstractCrudManagerValidation.js", "../../Scheduler/lib/Scheduler/crud/AbstractCrudManagerMixin.js", "../../Scheduler/lib/Scheduler/crud/transport/AjaxTransport.js", "../../Scheduler/lib/Scheduler/crud/encoder/JsonEncoder.js", "../../Scheduler/lib/Scheduler/data/mixin/ProjectCrudManager.js", "../../Scheduler/lib/Scheduler/crud/AbstractCrudManager.js", "../../Scheduler/lib/Scheduler/model/mixin/ProjectModelCommon.js", "../../Scheduler/lib/Scheduler/model/ResourceTimeRangeModel.js", "../../Scheduler/lib/Scheduler/data/ResourceTimeRangeStore.js", "../../Scheduler/lib/Scheduler/data/plugin/StoreTimeZonePlugin.js", "../../Scheduler/lib/Scheduler/model/mixin/ProjectModelTimeZoneMixin.js", "../../Scheduler/lib/Scheduler/model/TimeRangeModel.js", "../../Scheduler/lib/Scheduler/data/TimeRangeStore.js", "../../Scheduler/lib/Scheduler/model/mixin/ProjectModelMixin.js", "../../Scheduler/lib/Scheduler/model/mixin/ProjectCurrentConfig.js", "../../Scheduler/lib/Scheduler/data/util/ModelPersistencyManager.js", "../../Engine/lib/Engine/vendor/later/later.js", "../../Engine/lib/Engine/calendar/CalendarIntervalMixin.js", "../../Engine/lib/Engine/calendar/CalendarIntervalStore.js", "../../Engine/lib/Engine/scheduling/Types.js", "../../Engine/lib/Engine/util/Constants.js", "../../Engine/lib/Engine/util/Types.js", "../../Engine/lib/Engine/calendar/CalendarCache.js", "../../Engine/lib/Engine/util/StripDuplicates.js", "../../Engine/lib/Engine/calendar/CalendarCacheInterval.js", "../../Engine/lib/Engine/util/BinarySearch.js", "../../Engine/lib/Engine/calendar/SortedMap.js", "../../Engine/lib/Engine/calendar/IntervalCache.js", "../../Engine/lib/Engine/calendar/CalendarCacheSingle.js", "../../Engine/lib/Engine/calendar/UnspecifiedTimeIntervalModel.js", "../../Engine/lib/Engine/quark/model/AbstractCalendarMixin.js", "../../Engine/lib/Engine/quark/model/scheduler_core/CoreCalendarMixin.js", "../../Engine/lib/Engine/quark/store/AbstractCalendarManagerStoreMixin.js", "../../Engine/lib/Engine/quark/store/CoreCalendarManagerStoreMixin.js", "../../Engine/lib/Engine/quark/model/AbstractProjectMixin.js", "../../Engine/lib/Engine/quark/model/scheduler_core/SchedulerCoreProjectMixin.js", "../../Scheduler/lib/Scheduler/model/ProjectModel.js", "../../Scheduler/lib/Scheduler/data/CrudManager.js", "../../Scheduler/lib/Scheduler/view/mixin/CurrentConfig.js", "../../Scheduler/lib/Scheduler/view/mixin/Describable.js", "../../Scheduler/lib/Scheduler/view/mixin/SchedulerDom.js", "../../Scheduler/lib/Scheduler/view/mixin/SchedulerDomEvents.js", "../../Scheduler/lib/Scheduler/eventlayout/HorizontalLayout.js", "../../Scheduler/lib/Scheduler/eventlayout/HorizontalLayoutStack.js", "../../Scheduler/lib/Scheduler/eventlayout/PackMixin.js", "../../Scheduler/lib/Scheduler/eventlayout/HorizontalLayoutPack.js", "../../Scheduler/lib/Scheduler/view/mixin/SchedulerResourceRendering.js", "../../Scheduler/lib/Scheduler/view/mixin/SchedulerEventRendering.js", "../../Scheduler/lib/Scheduler/data/mixin/ProjectConsumer.js", "../../Scheduler/lib/Scheduler/view/mixin/SchedulerStores.js", "../../Scheduler/lib/Scheduler/view/mixin/SchedulerScroll.js", "../../Scheduler/lib/Scheduler/view/mixin/SchedulerRegions.js", "../../Scheduler/lib/Scheduler/view/mixin/SchedulerState.js", "../../Scheduler/lib/Scheduler/view/mixin/EventSelection.js", "../../Scheduler/lib/Scheduler/view/mixin/EventNavigation.js", "../../Scheduler/lib/Scheduler/view/mixin/TransactionalFeatureMixin.js", "../../Scheduler/lib/Scheduler/crud/mixin/CrudManagerView.js", "../../Scheduler/lib/Scheduler/data/mixin/AttachToProjectMixin.js", "../../Scheduler/lib/Scheduler/view/orientation/HorizontalRendering.js", "../../Scheduler/lib/Scheduler/eventlayout/VerticalLayout.js", "../../Scheduler/lib/Scheduler/view/orientation/VerticalRendering.js", "../../Scheduler/lib/Scheduler/view/TimeAxisBase.js", "../../Scheduler/lib/Scheduler/view/HorizontalTimeAxis.js", "../../Scheduler/lib/Scheduler/view/ResourceHeader.js", "../../Scheduler/lib/Scheduler/column/TimeAxisColumn.js", "../../Scheduler/lib/Scheduler/view/VerticalTimeAxis.js", "../../Scheduler/lib/Scheduler/column/VerticalTimeAxisColumn.js", "../../Scheduler/lib/Scheduler/view/SchedulerBase.js", "../../Scheduler/lib/Scheduler/widget/EventColorPicker.js", "../../Scheduler/lib/Scheduler/column/EventColorColumn.js", "../../Scheduler/lib/Scheduler/column/ResourceCollapseColumn.js", "../../Scheduler/lib/Scheduler/column/ResourceInfoColumn.js", "../../Scheduler/lib/Scheduler/column/ScaleColumn.js", "../../Scheduler/lib/Scheduler/data/util/recurrence/RecurrenceLegend.js", "../../Scheduler/lib/Scheduler/tooltip/ClockTemplate.js", "../../Scheduler/lib/Scheduler/feature/base/DragBase.js", "../../Scheduler/lib/Scheduler/feature/EventResize.js", "../../Scheduler/lib/Scheduler/feature/mixin/TaskEditStm.js", "../../Scheduler/lib/Scheduler/feature/mixin/TaskEditTransactional.js", "../../Scheduler/lib/Scheduler/feature/mixin/TransactionalFeature.js", "../../Scheduler/lib/Scheduler/feature/base/DragCreateBase.js", "../../Scheduler/lib/Scheduler/feature/base/EditBase.js", "../../Scheduler/lib/Scheduler/feature/base/ResourceTimeRangesBase.js", "../../Scheduler/lib/Scheduler/feature/base/TimeSpanMenuBase.js", "../../Scheduler/lib/Scheduler/feature/base/TooltipBase.js", "../../Scheduler/lib/Scheduler/feature/AbstractTimeRanges.js", "../../Scheduler/lib/Scheduler/feature/ColumnLines.js", "../../Scheduler/lib/Scheduler/feature/mixin/DependencyCreation.js", "../../Scheduler/lib/Scheduler/feature/mixin/DependencyGridCache.js", "../../Scheduler/lib/Scheduler/util/RectangularPathFinder.js", "../../Scheduler/lib/Scheduler/feature/mixin/DependencyLineGenerator.js", "../../Scheduler/lib/Scheduler/feature/mixin/DependencyTooltip.js", "../../Scheduler/lib/Scheduler/feature/Dependencies.js", "../../Scheduler/lib/Scheduler/view/DependencyEditor.js", "../../Scheduler/lib/Scheduler/feature/DependencyEdit.js", "../../Scheduler/lib/Scheduler/feature/ScheduleContext.js", "../../Scheduler/lib/Scheduler/feature/EventCopyPaste.js", "../../Scheduler/lib/Scheduler/feature/EventDrag.js", "../../Scheduler/lib/Scheduler/feature/EventDragCreate.js", "../../Scheduler/lib/Scheduler/feature/EventDragSelect.js", "../../Scheduler/lib/Scheduler/view/EventEditor.js", "../../Scheduler/lib/Scheduler/view/recurrence/field/RecurrenceFrequencyCombo.js", "../../Scheduler/lib/Scheduler/view/recurrence/field/RecurrenceCombo.js", "../../Scheduler/lib/Scheduler/view/recurrence/RecurrenceLegendButton.js", "../../Scheduler/lib/Scheduler/view/recurrence/field/RecurrenceDaysCombo.js", "../../Scheduler/lib/Scheduler/view/recurrence/field/RecurrenceDaysButtonGroup.js", "../../Scheduler/lib/Scheduler/view/recurrence/field/RecurrenceMonthDaysButtonGroup.js", "../../Scheduler/lib/Scheduler/view/recurrence/field/RecurrenceMonthsButtonGroup.js", "../../Scheduler/lib/Scheduler/view/recurrence/field/RecurrenceStopConditionCombo.js", "../../Scheduler/lib/Scheduler/view/recurrence/field/RecurrencePositionsCombo.js", "../../Scheduler/lib/Scheduler/view/recurrence/RecurrenceEditorPanel.js", "../../Scheduler/lib/Scheduler/view/recurrence/RecurrenceEditor.js", "../../Scheduler/lib/Scheduler/feature/mixin/RecurringEventEdit.js", "../../Scheduler/lib/Scheduler/widget/ResourceCombo.js", "../../Scheduler/lib/Scheduler/widget/EventColorField.js", "../../Scheduler/lib/Scheduler/feature/EventEdit.js", "../../Scheduler/lib/Scheduler/feature/EventFilter.js", "../../Scheduler/lib/Scheduler/feature/EventMenu.js", "../../Scheduler/lib/Scheduler/feature/mixin/NonWorkingTimeMixin.js", "../../Scheduler/lib/Scheduler/feature/EventNonWorkingTime.js", "../../Scheduler/lib/Scheduler/feature/EventTooltip.js", "../../Scheduler/lib/Scheduler/feature/GroupSummary.js", "../../Scheduler/lib/Scheduler/feature/HeaderZoom.js", "../../Scheduler/lib/Scheduler/feature/Labels.js", "../../Scheduler/lib/Scheduler/feature/NonWorkingTime.js", "../../Scheduler/lib/Scheduler/feature/Pan.js", "../../Scheduler/lib/Scheduler/feature/ResourceMenu.js", "../../Scheduler/lib/Scheduler/feature/ResourceTimeRanges.js", "../../Scheduler/lib/Scheduler/feature/RowReorder.js", "../../Scheduler/lib/Scheduler/feature/RowResize.js", "../../Scheduler/lib/Scheduler/feature/ScheduleMenu.js", "../../Scheduler/lib/Scheduler/feature/ScheduleTooltip.js", "../../Scheduler/lib/Scheduler/feature/SimpleEventEdit.js", "../../Scheduler/lib/Scheduler/feature/Split.js", "../../Scheduler/lib/Scheduler/feature/StickyEvents.js", "../../Scheduler/lib/Scheduler/feature/TimelineSummary.js", "../../Scheduler/lib/Scheduler/feature/Summary.js", "../../Scheduler/lib/Scheduler/feature/TimeAxisHeaderMenu.js", "../../Scheduler/lib/Scheduler/feature/TimeRanges.js", "../../Scheduler/lib/Scheduler/feature/TimeSelection.js", "../../Scheduler/lib/Scheduler/feature/export/Utils.js", "../../Scheduler/lib/Scheduler/feature/export/exporter/SchedulerExporterMixin.js", "../../Scheduler/lib/Scheduler/feature/export/exporter/MultiPageExporter.js", "../../Scheduler/lib/Scheduler/feature/export/exporter/MultiPageVerticalExporter.js", "../../Scheduler/lib/Scheduler/view/export/field/ScheduleRangeCombo.js", "../../Scheduler/lib/Scheduler/view/export/SchedulerExportDialog.js", "../../Scheduler/lib/Scheduler/feature/export/exporter/SinglePageExporter.js", "../../Scheduler/lib/Scheduler/feature/export/PdfExport.js", "../../Scheduler/lib/Scheduler/feature/export/Print.js", "../../Scheduler/lib/Scheduler/util/ScheduleTableExporter.js", "../../Scheduler/lib/Scheduler/feature/experimental/ExcelExporter.js", "../../Scheduler/lib/Scheduler/view/Scheduler.js", "../../Scheduler/lib/Scheduler/view/mixin/DelayedRecordsRendering.js", "../../Scheduler/lib/Scheduler/view/TimelineHistogramRendering.js", "../../Scheduler/lib/Scheduler/view/TimelineHistogramBase.js", "../../Scheduler/lib/Scheduler/view/mixin/TimelineHistogramGrouping.js", "../../Scheduler/lib/Scheduler/view/mixin/TimelineHistogramScaleColumn.js", "../../Scheduler/lib/Scheduler/view/TimelineHistogram.js", "../../Scheduler/lib/Scheduler/widget/ProjectCombo.js", "../../Scheduler/lib/Scheduler/widget/ResourceFilter.js", "../../Scheduler/lib/Scheduler/widget/SchedulerDatePicker.js", "../../Scheduler/lib/Scheduler/widget/UndoRedo.js", "../../Scheduler/lib/Scheduler/widget/ViewPresetCombo.js", "../../Engine/lib/Engine/calendar/CalendarCacheIntervalMultiple.js", "../../Engine/lib/Engine/calendar/CalendarCacheMultiple.js", "../lib/Calendar/column/AgendaColumn.js", "../lib/Calendar/column/EventColumn.js", "../lib/Calendar/model/TimeRangeModel.js", "../lib/Calendar/data/TimeRangeStore.js", "../lib/Calendar/model/ProjectModel.js", "../lib/Calendar/data/CrudManager.js", "../lib/Calendar/feature/CalendarFeature.js", "../lib/Calendar/feature/CalendarZone.js", "../lib/Calendar/widget/ResourceChipView.js", "../lib/Calendar/widget/EventTip.js", "../lib/Calendar/feature/CalendarDrag.js", "../lib/Calendar/widget/EventEditor.js", "../lib/Calendar/feature/EventEdit.js", "../lib/Calendar/feature/EventMenu.js", "../lib/Calendar/feature/EventTooltip.js", "../lib/Calendar/feature/ExternalEventSource.js", "../lib/Calendar/feature/LoadOnDemand.js", "../lib/Calendar/feature/print/printer/Printer.js", "../lib/Calendar/feature/print/printer/CalendarPrinter.js", "../lib/Calendar/feature/print/Print.js", "../lib/Calendar/feature/ScheduleMenu.js", "../lib/Calendar/layout/LayoutDim.js", "../lib/Calendar/feature/TimeRanges.js", "../lib/Calendar/feature/WeekExpander.js", "../lib/Calendar/layout/day/DayLayout.js", "../lib/Calendar/layout/day/FluidDayLayout.js", "../lib/Calendar/mixin/CalendarStores.js", "../lib/Calendar/util/EventSlots.js", "../lib/Calendar/util/EventSorter.js", "../lib/Calendar/mixin/SchedulerInterface.js", "../lib/Calendar/widget/mixin/EventRenderer.js", "../lib/Calendar/localization/En.js", "../lib/Calendar/widget/mixin/CalendarMixin.js", "../lib/Calendar/widget/mixin/DayCellCollecter.js", "../lib/Calendar/widget/OverflowPopup.js", "../lib/Calendar/widget/mixin/DayCellRenderer.js", "../lib/Calendar/widget/mixin/DateRangeOwner.js", "../lib/Calendar/widget/CalendarRow.js", "../lib/Calendar/widget/DaySelector.js", "../lib/Calendar/widget/mixin/DaySelectable.js", "../lib/Calendar/widget/EventList.js", "../lib/Calendar/widget/AgendaView.js", "../lib/Calendar/widget/CalendarDatePicker.js", "../lib/Calendar/widget/DayView.js", "../lib/Calendar/widget/DayResourceCalendarRow.js", "../lib/Calendar/widget/DayResourceView.js", "../lib/Calendar/widget/ModeSelector.js", "../lib/Calendar/widget/MonthView.js", "../lib/Calendar/widget/ResourceView.js", "../lib/Calendar/widget/Sidebar.js", "../lib/Calendar/widget/WeekView.js", "../lib/Calendar/widget/YearView.js", "../lib/Calendar/view/mixin/EventNavigation.js", "../lib/Calendar/view/mixin/EventSelection.js", "../lib/Calendar/view/Calendar.js"], "sourcesContent": ["/**\n * @module Core/helper/BrowserHelper\n */\n/**\n * Static helper class that does browser or platform detection and provides other helper functions.\n */\nexport default class BrowserHelper {\n static supportsPointerEvents = Boolean(globalThis.PointerEvent || globalThis.MSPointerEvent);\n // Locker Service does not allow to instantiate PointerEvents. LWS apparently does, however.\n // https://github.com/bryntum/support/issues/5578\n static supportsPointerEventConstructor = typeof PointerEvent !== 'undefined';\n static PointerEventConstructor = globalThis.PointerEvent || globalThis.CustomEvent;\n //region Init\n /**\n * Yields `true` if the platform running is a phone (screen width or height <= 414 CSS pixels)\n * @property {Boolean}\n * @readonly\n * @static\n * @category Platform\n */\n static isPhone = globalThis.matchMedia?.('(max-height:414px) or (max-width:414px)').matches;\n static cacheFlags(platform = navigator.platform, userAgent = navigator.userAgent) {\n const me = this;\n // os\n me._isLinux = Boolean(platform.match(/Linux/));\n me._isMac = Boolean(platform.match(/Mac/));\n me._isWindows = Boolean(platform.match(/Win32/));\n me._isMobile = Boolean(userAgent.match(/Mobile|Opera Mini|Opera Mobi|Puffin/) || typeof globalThis.orientation === 'number');\n // Edge user agent contains webkit too.\n // This is not a typo. Edge has \"Safari/537.36 Edg/96.0.1054.34\"\n me._isWebkit = Boolean(userAgent.match(/WebKit/) && !userAgent.match(/Edg/));\n me._firefoxVersion = me.getVersion(userAgent, /Firefox\\/(\\d+)\\./);\n me._isFirefox = me._firefoxVersion > 0;\n me._chromeVersion = me.getVersion(userAgent, /Chrom(?:e|ium)\\/(\\d+)\\./);\n me._isChrome = me._chromeVersion > 0;\n me._isSafari = Boolean(userAgent.match(/Safari/)) && !me._isChrome;\n me._isMobileSafari = Boolean(userAgent.match(/Mobile.*Safari/));\n me._safariVersion = me.getVersion(userAgent, /Version\\/(.*).Safari/);\n me._isAndroid = Boolean(userAgent.match(/Android/g));\n }\n //endregion\n //region Device\n /**\n * Yields `true` if the current browser supports CSS style `overflow:clip`.\n * @property {Boolean}\n * @readonly\n * @internal\n */\n static get supportsOverflowClip() {\n if (this._supportsOverflowClip == null) {\n const div = document.createElement('div');\n div.style.overflow = 'clip';\n div.style.display = 'none';\n // If we're called before DOMContentLoaded, body won't be available.\n // HTML element works for style calcs.\n document.documentElement.appendChild(div);\n this._supportsOverflowClip = div.ownerDocument.defaultView.getComputedStyle(div).getPropertyValue('overflow') === 'clip';\n div.remove();\n }\n return this._supportsOverflowClip;\n }\n /**\n * Yields `true` if the current browser supports CSS style `position:sticky`.\n * @property {Boolean}\n * @readonly\n * @internal\n */\n static get supportsSticky() {\n return true;\n }\n /**\n * Returns matched version for userAgent.\n * @param {String} versionRe version match regular expression\n * @returns {Number} matched version\n * @readonly\n * @internal\n */\n static getVersion(userAgent, versionRe) {\n const match = userAgent.match(versionRe);\n return match ? parseFloat(match[1]) : 0;\n }\n /**\n * Determines if the user is using a touch device.\n * @property {Boolean}\n * @readonly\n * @internal\n */\n static get isTouchDevice() {\n // Allow tests or client code to set\n if (this._isTouchDevice === undefined) {\n this._isTouchDevice = globalThis.matchMedia('(any-pointer:coarse)').matches;\n }\n return this._isTouchDevice;\n }\n // Reports true by default for our tests\n static get isHoverableDevice() {\n if (this._isHoverableDevice === undefined) {\n this._isHoverableDevice = globalThis.matchMedia('(any-hover: hover)').matches;\n }\n return this._isHoverableDevice;\n }\n //endregion\n //region Platform\n static get isBrowserEnv() {\n // This window reference is left on purpose, globalThis is always defined\n // eslint-disable-next-line bryntum/no-window-in-lib\n return typeof window !== 'undefined';\n }\n /**\n * Checks if platform is Mac.\n * @property {Boolean}\n * @readonly\n * @category Platform\n */\n static get isMac() {\n return this._isMac;\n }\n /**\n * Checks if platform is Windows.\n * @property {Boolean}\n * @readonly\n * @category Platform\n */\n static get isWindows() {\n return this._isWindows;\n }\n /**\n * Checks if platform is Linux.\n * @property {Boolean}\n * @readonly\n * @category Platform\n */\n static get isLinux() {\n return this._isLinux;\n }\n /**\n * Checks if platform is Android.\n * @property {Boolean}\n * @readonly\n * @category Platform\n */\n static get isAndroid() {\n return this._isAndroid;\n }\n //endregion\n //region Browser\n /**\n * Checks if browser is Webkit.\n * @property {Boolean}\n * @readonly\n * @category Browser\n */\n static get isWebkit() {\n return this._isWebkit;\n }\n /**\n * Checks if browser is Chrome or Chromium based browser.\n * Returns truthy value for Edge Chromium.\n * @property {Boolean}\n * @readonly\n * @category Browser\n */\n static get isChrome() {\n return this._isChrome;\n }\n /**\n * Returns the major Chrome version or 0 for other browsers.\n * @property {Number}\n * @readonly\n * @category Browser\n */\n static get chromeVersion() {\n return this._chromeVersion;\n }\n /**\n * Checks if browser is Firefox.\n * @property {Boolean}\n * @readonly\n * @category Browser\n */\n static get isFirefox() {\n return this._isFirefox;\n }\n /**\n * Returns the major Firefox version or 0 for other browsers.\n * @property {Number}\n * @readonly\n * @category Browser\n */\n static get firefoxVersion() {\n return this._firefoxVersion;\n }\n /**\n * Checks if browser is Safari.\n * @property {Boolean}\n * @readonly\n * @category Browser\n */\n static get isSafari() {\n return this._isSafari;\n }\n static get safariVersion() {\n return this._safariVersion;\n }\n /**\n * Checks if browser is mobile Safari\n * @property {Boolean}\n * @readonly\n * @category Browser\n */\n static get isMobileSafari() {\n return this._isMobileSafari;\n }\n /**\n * Checks if the active device is a mobile device\n * @property {Boolean}\n * @readonly\n * @category Browser\n */\n static get isMobile() {\n return this._isMobile;\n }\n static get platform() {\n const me = this;\n return me._isLinux ? 'linux'\n : me._isMac ? 'mac'\n : me._isWindows ? 'windows'\n : me._isAndroid ? 'android'\n : me._isMobileSafari ? 'ios'\n : null;\n }\n /**\n * Returns `true` if the browser supports passive event listeners.\n * @property {Boolean}\n * @internal\n * @deprecated Since 5.0. All modern browsers now support passive event listeners.\n * @category Browser\n */\n static get supportsPassive() {\n return true;\n }\n // Only works in secure contexts\n static get supportsRandomUUID() {\n if (this._supportsRandomUUID === undefined) {\n try {\n this._supportsRandomUUID = Boolean(globalThis.crypto.randomUUID().length > 0);\n }\n catch (e) {\n this._supportsRandomUUID = false;\n }\n }\n return this._supportsRandomUUID;\n }\n //endregion\n //region Storage\n // https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API\n static get storageAvailable() {\n let storage, x;\n try {\n storage = localStorage;\n x = '__storage_test__';\n storage.setItem(x, x);\n storage.removeItem(x);\n return true;\n }\n catch (e) {\n return e instanceof DOMException && (\n // everything except Firefox\n e.code === 22 ||\n // Firefox\n e.code === 1014 ||\n // test name field too, because code might not be present\n // everything except Firefox\n e.name === 'QuotaExceededError' ||\n // Firefox\n e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&\n // acknowledge QuotaExceededError only if there's something already stored\n storage.length !== 0;\n }\n }\n static setLocalStorageItem(key, value) {\n this.storageAvailable && localStorage.setItem(key, value);\n }\n static getLocalStorageItem(key) {\n return this.storageAvailable && localStorage.getItem(key);\n }\n static removeLocalStorageItem(key) {\n this.storageAvailable && localStorage.removeItem(key);\n }\n //endregion\n //region Helpers\n /**\n * Returns parameter value from search string by parameter name.\n * @param {String} paramName search parameter name\n * @param {String} [defaultValue] default value if parameter not found\n * @param {String} [search] search string. Defaults to `document.location.search`\n * @returns {String} search parameter string value\n * @category Helper\n */\n static searchParam(paramName, defaultValue = null, search = document.location.search) {\n const\n re = new RegExp(`[?&]${paramName}=?([^&]*)`),\n match = search.match(re);\n return (match && match[1]) || defaultValue;\n }\n /**\n * Returns cookie by name.\n * @param {String} name cookie name\n * @returns {String} cookie string value\n * @category Helper\n */\n static getCookie(name) {\n const\n nameEq = encodeURIComponent(name) + '=',\n cookieItems = document.cookie.split(';');\n for (let i = 0; i < cookieItems.length; i++) {\n let c = cookieItems[i];\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEq) === 0) {\n return decodeURIComponent(c.substring(nameEq.length, c.length));\n }\n }\n return '';\n }\n /**\n * Triggers a download of a file with the specified name / URL.\n * @param {String} filename The filename of the file to be downloaded\n * @param {String} [url] The URL where the file is to be downloaded from\n * @internal\n * @category Download\n */\n static download(filename, url) {\n const a = document.createElement('a');\n a.download = filename;\n a.href = url || filename;\n a.style.cssText = 'display:none';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n }\n /**\n * Triggers a download of a Blob with the specified name.\n * @param {Blob} blob The Blob to be downloaded\n * @param {String} filename The filename of the file to be downloaded\n * @internal\n * @category Download\n */\n static downloadBlob(blob, filename) {\n const url = globalThis.URL.createObjectURL(blob);\n this.download(filename, url);\n globalThis.URL.revokeObjectURL(url);\n }\n static get queryString() {\n // new URLSearchParams throws in salesforce\n // https://github.com/salesforce/lwc/issues/1812\n const params = new URL(globalThis.location.href).searchParams;\n // ?. to be nice to users with Chrome versions < 73\n return Object.fromEntries?.(params.entries());\n }\n // Used by docs fiddle\n static copyToClipboard(code) {\n let success = true;\n const textArea = document.createElement('textarea');\n textArea.value = code;\n textArea.style.height = textArea.style.width = 0;\n document.body.appendChild(textArea);\n textArea.select();\n try {\n document.execCommand('copy');\n }\n catch (e) {\n success = false;\n }\n textArea.remove();\n return success;\n }\n static isBryntumOnline(searchStrings) {\n searchStrings = Array.isArray(searchStrings) ? searchStrings : [searchStrings];\n return Boolean(/^(www\\.)?bryntum\\.com/.test(globalThis.location.host) || searchStrings?.some(str => this.queryString[str] != null));\n }\n /**\n * Returns truthy value if page contains Content Security Policy meta tag or globalThis.bryntum.CSP is truthy value\n * @returns {Boolean}\n * @internal\n **/\n static get isCSP() {\n const { bryntum, document } = globalThis;\n if (bryntum.CSP == null) {\n bryntum.CSP = Boolean(document.querySelector('meta[http-equiv=\"Content-Security-Policy\"]'));\n }\n return bryntum.CSP;\n }\n //endregion\n}\nif (BrowserHelper.isBrowserEnv) {\n BrowserHelper.cacheFlags();\n}\nBrowserHelper._$name = 'BrowserHelper';", "// IMPORTANT - adding imports here can create problems for Base class\nimport Objects from './util/Objects.js';\nimport BrowserHelper from './BrowserHelper.js';\n/**\n * @module Core/helper/StringHelper\n */\nlet charsToEncode, entitiesToDecode, htmlEncodeRe, htmlDecodeRe;\nconst\n camelLettersRe = /([a-z])([A-Z])/g,\n crlfRe = /[\\n\\r]/g,\n escapeRegExpRe = /[.*+?^${}()|[\\]\\\\]/g, // same as NPM escape-string-regexp\n htmlRe = /[&<]/,\n idRe = /(^[^a-z]+[^\\w]+)/gi,\n whiteSpaceRe = /\\s+/,\n domIdRe = /^[^a-z]+|[^\\w:.-]+/gi,\n htmlDecoder = (m, captured) => entitiesToDecode[captured.toLowerCase()] || String.fromCharCode(parseInt(captured.substr(2), 10)),\n htmlEncoder = (m, captured) => charsToEncode[captured],\n hyphenateCamelLetters = (all, g1, g2) => {\n return `${g1}-${g2.toLowerCase()}`;\n },\n separateCamelLetters = (all, g1, g2) => {\n return `${g1} ${g2.toLowerCase()}`;\n },\n replaceNonIdChar = c => {\n if (c) {\n return `_x${[...c].map((ch) => ch.charCodeAt(0).toString(16)).join('')}`;\n }\n return '__blank__';\n },\n hyphenateCache = {},\n separatedCache = {},\n // Adopted from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value\n ancestors = [],\n circularReplacer = function(key, value) {\n if (value && typeof value === 'object') {\n // `this` is the object that value is contained in, i.e., its direct parent.\n while (ancestors.length && ancestors[ancestors.length - 1] !== this) {\n ancestors.pop();\n }\n if (ancestors.includes(value)) {\n return '[Circular]';\n }\n ancestors.push(value);\n }\n return value;\n };\n/**\n * Helper for string manipulation.\n */\nexport default class StringHelper {\n //region Transform\n /**\n * Capitalizes the first letter of a string, \"myString\" -> \"MyString\".\n * @param {String} string The string to capitalize\n * @returns {String} The capitalized string or the value of `string` if falsy.\n * @category String formatting\n */\n static capitalize(string) {\n return string && (string[0].toUpperCase() + string.substr(1));\n }\n /**\n * Makes the first letter of a string lowercase, \"MyString\" -> \"myString\".\n * @param {String} string The string to un-capitalize.\n * @returns {String} The un-capitalized string or the value of `string` if falsy.\n * @category String formatting\n */\n static uncapitalize(string) {\n return string && (string[0].toLowerCase() + string.substr(1));\n }\n /**\n * Converts the passed camelCased string to a hyphen-separated string. eg \"minWidth\" -> \"min-width\"\n * @param {String} string The string to convert.\n * @returns {String} The string with adjoining lower and upper case letters\n * separated by hyphens and converted to lower case.\n * @category String formatting\n * @internal\n */\n static hyphenate(string) {\n // Cached since it is used heavily with DomHelper.sync()\n const cached = hyphenateCache[string];\n if (cached) {\n return cached;\n }\n return hyphenateCache[string] = string.replace(camelLettersRe, hyphenateCamelLetters);\n }\n /**\n * Converts the passed camelCased string to a capitalized, space-separated string. eg \"startDate\" -> \"Start date\".\n * @param {String} string The string to convert.\n * @returns {String} The string with spaces separating words.\n * @category String formatting\n * @internal\n */\n static separate(string) {\n // Cached since it may be used heavily\n const cached = separatedCache[string];\n if (cached) {\n return cached;\n }\n return separatedCache[string] = this.capitalize(string.replace(camelLettersRe, separateCamelLetters));\n }\n /**\n * Creates an alphanumeric identifier from any passed string. Encodes spaces and non-alpha characters.\n * @param {String} inString The string from which to strip non-identifier characters.\n * @returns {String}\n * @category Misc\n * @internal\n */\n static createId(inString) {\n return String(inString).replace(idRe, replaceNonIdChar);\n }\n static makeValidDomId(id, replaceValue = '') {\n if (id == null) {\n return null;\n }\n return String(id).replace(domIdRe, replaceValue);\n }\n //endregion\n //region Html\n /**\n * Escapes special RegExp characters.\n * @param {String} string String to escape\n * @privateparam {String} [flags] Optional flags\n * @returns {String} Escaped string\n */\n static escapeRegExp(string, flags) {\n // $& means the whole matched string\n let ret = string.replace(escapeRegExpRe, '\\\\$&');\n if (flags !== undefined) {\n ret = new RegExp(ret, flags);\n }\n return ret;\n }\n /**\n * This method decodes HTML entities and returns the original HTML.\n *\n * See also {@link #function-encodeHtml-static}.\n * @param {String} str\n * @returns {String}\n * @category HTML\n */\n static decodeHtml(str) {\n return str && String(str).replace(htmlDecodeRe, htmlDecoder);\n }\n /**\n * This method encodes HTML entities and returns a string that can be placed in the document and produce the\n * original text rather than be interpreted as HTML. Using this method with user-entered values prevents those\n * values from executing as HTML (i.e., a cross-site scripting or \"XSS\" security issue).\n *\n * See also {@link #function-decodeHtml-static}.\n * @param {String|Number} str\n * @returns {String}\n * @category HTML\n */\n static encodeHtml(str = '') {\n return str && String(str).replace(htmlEncodeRe, htmlEncoder);\n }\n /**\n * This method is similar to {@link #function-encodeHtml-static} except that `\\n` and `\\r` characters in the\n * given `str` are replaced by `
` tags _after_ first being encoded by {@link #function-encodeHtml-static}.\n * @param {String} str\n * @returns {String}\n * @category HTML\n * @internal\n */\n static encodeHtmlBR(str) {\n return StringHelper.encodeHtml(str)?.replace(crlfRe, '
');\n }\n /**\n * Returns `true` if the provided `text` contains special HTML characters.\n * @param {String} text\n * @returns {Boolean}\n * @category HTML\n * @internal\n */\n static isHtml(text) {\n return typeof text === 'string' && htmlRe.test(text || '');\n }\n /**\n * Initializes HTML entities used by {@link #function-encodeHtml-static} and {@link #function-decodeHtml-static}.\n * @param {Object} [mappings] An object whose keys are characters that should be encoded and values are the HTML\n * entity for the character.\n * @private\n */\n static initHtmlEntities(mappings) {\n mappings = mappings || {\n '&' : '&',\n '>' : '>',\n '<' : '<',\n '\"' : '"',\n \"'\" : '''\n };\n const chars = Object.keys(mappings);\n // Maps '<' to '<'\n charsToEncode = mappings;\n // Inverts the mapping so we can convert '<' to '<'\n entitiesToDecode = chars.reduce((prev, val) => {\n prev[mappings[val]] = val;\n return prev;\n }, {});\n // Creates a regex char set like /([<&>])/g to match the characters that need to be encoded (escaping any of\n // the regex charset special chars '[', ']' and '-'):\n htmlEncodeRe = new RegExp(`([${chars.map(c => '[-]'.includes(c) ? '\\\\' + c : c).join('')}])`, 'g');\n // Creates a regex like /(<|&|>)/ig to match encoded entities... good news is that (valid) HTML\n // entities do not contain any regex special characters:\n htmlDecodeRe = new RegExp(`(${Object.values(mappings).join('|')}|&#[0-9]+;)`, 'ig');\n }\n //endregion\n //region JSON\n /**\n * Parses JSON inside a try-catch block. Returns null if the string could not be parsed.\n *\n * @param {String} string String to parse\n * @returns {Object} Resulting object or `null` if parse failed\n * @category JSON\n */\n static safeJsonParse(string) {\n let parsed = null;\n try {\n parsed = JSON.parse(string);\n }\n catch (e) {\n }\n return parsed;\n }\n /**\n * Stringifies an object inside a try-catch block. Returns null if an exception is encountered.\n *\n * See [JSON.stringify on MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)\n * for more information on the arguments.\n *\n * @param {Object} object The object to stringify\n * @param {Function|'circular'|String[]|Number[]} [replacer] A function or array of string/number used to determine\n * properties to include in the JSON string. Also accepts the string 'circular' to use a built-in replacer handling\n * circular references, by replacing them with `'[Circular]'`.\n * See [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value) for more\n * information.\n * @param {String|Number} [space] Number of spaces to indent or string used as whitespace\n * @returns {String} Resulting object or null if stringify failed\n * @category JSON\n */\n static safeJsonStringify(object, replacer = null, space = null) {\n let result = null;\n try {\n if (replacer === 'circular') {\n ancestors.length = 0;\n replacer = circularReplacer;\n }\n result = JSON.stringify(object, replacer, space);\n }\n catch {}\n return result;\n }\n //endregion\n //region Split & join\n /**\n * Joins all given paths together using the separator as a delimiter and normalizes the resulting path.\n * @param paths {Array} array of paths to join\n * @param pathSeparator [{String}] path separator. Default value is '/'\n * @returns {String}\n * @category Misc\n * @internal\n */\n static joinPaths(paths, pathSeparator = '/') {\n return paths.join(pathSeparator).replace(new RegExp('\\\\' + pathSeparator + '+', 'g'), pathSeparator);\n }\n /**\n * Returns the provided string split on whitespace. If the string is empty or consists of only whitespace, the\n * returned array will be empty. If `str` is not a string, it is simply returned. This allows `null` or already\n * split strings (arrays) to be passed through.\n *\n * For example:\n * ```\n * console.log(StringHelper.split(' abc def xyz '));\n * > ['abc', 'def', 'xyz']\n * console.log(StringHelper.split(''));\n * > []\n * ```\n * Compare to the standard `split()` method:\n * ```\n * console.log(' abc def xyz '.split(/\\s+/));\n * > ['', 'abc', 'def', 'xyz', '']\n * console.log(''.split(/\\s+/));\n * > ['']\n * ```\n * @param {String} str\n * @param {String|RegExp} delimiter\n * @returns {String[]}\n * @category Misc\n * @internal\n */\n static split(str, delimiter = whiteSpaceRe) {\n let ret = str;\n if (typeof ret === 'string') {\n ret = str.trim(); // w/o trim() whitespace on the ends will give us '' in the array\n ret = ret ? ret.split(delimiter) : []; // also ''.split() = ['']\n }\n return ret;\n }\n //endregion\n //region XSS\n /**\n * This is a tagged template function that performs HTML encoding on replacement values to avoid XSS (Cross-Site\n * Scripting) attacks.\n *\n * For example:\n *\n * ```javascript\n * eventRenderer(eventRecord) {\n * return StringHelper.xss`${eventRecord.name}`;\n * }\n * ```\n *\n * @param {TemplateStringsArray} strings The template string array\n * @param {...any} values The interpolated values in the template string\n * @returns {String} The encoded string\n * See {@link Core.helper.StringHelper#function-encodeHtml-static}.\n */\n static xss(strings, ...values) {\n const buf = [];\n let i = values.length;\n buf[i] = strings[i];\n while (i-- > 0) {\n buf[i] = strings[i] + StringHelper.encodeHtml(values[i]);\n }\n return buf.join('');\n }\n /**\n * This is a tagged template function that performs HTML encoding on replacement values to avoid XSS (Cross-Site\n * Scripting) attacks. Unlike {@link Core.helper.StringHelper#function-xss-static}, this method converts `\\n` and\n * `\\r` characters into `
` tags.\n *\n * For example:\n *\n * ```javascript\n * eventRenderer(eventRecord) {\n * return StringHelper.xssBR`${eventRecord.name}`;\n * }\n * ```\n *\n * See {@link Core.helper.StringHelper#function-encodeHtmlBR-static}.\n * @internal\n */\n static xssBR(strings, ...values) {\n const buf = [];\n let i = values.length;\n buf[i] = strings[i];\n while (i-- > 0) {\n buf[i] = strings[i] + StringHelper.encodeHtmlBR(values[i]);\n }\n return buf.join('');\n }\n //endregion\n //region JavaScript string\n /**\n * Converts a value to a JavaScript string (not JSON).\n *\n * For example a date to `\"new Date(y, m, d)\"`, an array to `\"[...]\"` etc.\n *\n * @param {*} value\n * @param {Object} [options]\n * @returns {String}\n * @internal\n */\n static toJavaScriptValue(value, options) {\n const type = Objects.typeOf(value);\n if (type === 'boolean' || type === 'string' || type === 'number' || value === null) {\n return StringHelper.safeJsonStringify(value);\n }\n if (value === globalThis) {\n return 'window';\n }\n if (type === 'date') {\n return `new Date(${value.getFullYear()}, ${value.getMonth()}, ${value.getDate()}, ${value.getHours()}, ${value.getMinutes()}, ${value.getSeconds()}, ${value.getMilliseconds()})`;\n }\n if (type === 'array') {\n return `[${value.map(v => StringHelper.toJavaScriptValue(v, options))}]`;\n }\n if (type === 'object' || type === 'instance') {\n return this.toJavaScriptString(value, options);\n }\n if (type === 'function') {\n let contents = value.toString();\n // async myFunction() {} => async function() {}\n if (contents.match(/^async (\\w+?)\\(/)) {\n contents = contents.replace(/^async (\\w+?)\\(/, 'async function(');\n }\n // Not an arrow fn? Replace name with function since we always add prop name prior to getting here\n // eventRenderer() {} -> function() {}\n else if (!contents.startsWith('async(') && contents.match(/^(\\w+?)\\(/)) {\n contents = contents.replace(/^(\\w+?)\\(/, 'function(');\n }\n return contents;\n }\n if (type === 'class') {\n if (value.toJavaScriptValue) {\n return value.toJavaScriptValue(options);\n }\n return Object.prototype.hasOwnProperty.call(value, '$name') ? value.$name : value.name;\n }\n }\n /**\n * Converts an object into a JavaScript string (not JSON).\n *\n * For example `{ a: 1, b: [2, 3] }` -> `\"'{ a: 1, b: [2, 3] }'\"`\n *\n * @param {Object} obj\n * @param {Object} [options]\n * @returns {String}\n * @internal\n */\n static toJavaScriptString(obj, options = {}) {\n const\n level = options.level ?? 0,\n intendSize = 2;\n // Not using template strings to have control over indentation\n return '{\\n' +\n Object.keys(obj).map(key =>\n // All properties in an object are indented one step further than the object itself\n ' '.repeat((level + 1) * intendSize) + (key.match(/[- *]/) ? `\"${key}\"` : key) + `: ${StringHelper.toJavaScriptValue(obj[key], { ...options, level : level + 1 })}`\n ).join(',\\n') +\n // Closing brace is indented to same level as the object\n '\\n' + ' '.repeat((level) * intendSize) + '}';\n }\n /**\n * Escapes \" and \\ in CSS attribute selectors, e.g. [data-id=\"somevalue\"]\n *\n * Usage:\n * ```javascript\n * document.querySelector(StringHelper.cssAttributeQuery('data-id', 'id with & \\\\ chars'))\n * ```\n *\n * @param {String} attr\n * @param {String|Number} value\n * @returns {String}\n */\n static encodeAttributeSelector(attr, value) {\n return `[${attr}=\"${String(value).replace(/[\"\\\\]/g, '\\\\$&')}\"]`;\n }\n //endregion\n //region UUID\n static fakeNodeUUIDIndex = 0;\n /**\n * Generates a UUID. Uses `Crypto.randomUUID()` if available, otherwise generates a random UUID using\n * `Crypto.getRandomValues()`.\n *\n * @returns {String}\n */\n static generateUUID() {\n if (BrowserHelper.supportsRandomUUID) {\n return globalThis.crypto.randomUUID();\n }\n // Node does not have crypto built-in\n if (globalThis.crypto?.getRandomValues) {\n // https://stackoverflow.com/questions/105034/how-do-i-create-a-guid-uuid\n return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>\n (c ^ globalThis.crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)\n );\n }\n // Node specific code, should never get here outside of node. Not actually a UUID, but should still be unique\n // enough for our purposes, as long as value is not serialized\n return `${Date.now()}-${++StringHelper.fakeNodeUUIDIndex}`;\n }\n //endregion\n}\nStringHelper.initHtmlEntities();\nStringHelper._$name = 'StringHelper';", "// IMPORTANT - adding imports here can create problems for Base class\n// That is why this file was split from ObjectHelper\nimport StringHelper from '../StringHelper.js';\n/**\n * @module Core/helper/util/Objects\n */\nconst\n { hasOwnProperty, toString } = Object.prototype,\n { isFrozen } = Object,\n afterRe = /\\s*<\\s*/,\n beforeRe = /\\s*>\\s*/,\n blendOptions = {},\n typeCache = {},\n emptyObject = Object.freeze({});\n// Static methods are not displayed in derived class documentation. Therefore, since this is an internal class, the\n// workaround is to copy method documentation to ObjectHelper (the public interface). Also tried making ObjectHelper\n// a singleton.\n/**\n * Helper for low-level Object manipulation.\n *\n * While documented on {@link Core.helper.ObjectHelper}, the following static methods are implemented by this class:\n *\n * - `{@link Core.helper.ObjectHelper#function-assign-static}`\n * - `{@link Core.helper.ObjectHelper#function-assignIf-static}`\n * - `{@link Core.helper.ObjectHelper#function-clone-static}`\n * - `{@link Core.helper.ObjectHelper#function-createTruthyKeys-static}`\n * - `{@link Core.helper.ObjectHelper#function-getPath-static}`\n * - `{@link Core.helper.ObjectHelper#function-getTruthyKeys-static}`\n * - `{@link Core.helper.ObjectHelper#function-getTruthyValues-static}`\n * - `{@link Core.helper.ObjectHelper#function-isEmpty-static}`\n * - `{@link Core.helper.ObjectHelper#function-isObject-static}`\n * - `{@link Core.helper.ObjectHelper#function-merge-static}`\n * - `{@link Core.helper.ObjectHelper#function-setPath-static}`\n * - `{@link Core.helper.ObjectHelper#function-typeOf-static}`\n * @internal\n */\nexport default class Objects {\n static assign(dest, ...sources) {\n for (let source, key, i = 0; i < sources.length; i++) {\n source = sources[i];\n if (source) {\n for (key in source) {\n dest[key] = source[key];\n }\n }\n }\n return dest;\n }\n static assignIf(dest, ...sources) {\n for (let source, key, i = 0; i < sources.length; i++) {\n source = sources[i];\n if (source) {\n for (key in source) {\n if (!(key in dest) || dest[key] === undefined) {\n dest[key] = source[key];\n }\n }\n }\n }\n return dest;\n }\n static blend(dest, source, options) {\n options = options || blendOptions;\n dest = dest || {};\n const { clone = Objects.clone, merge = Objects.blend } = options;\n if (Array.isArray(source)) {\n if (source.length > 1) {\n source.forEach(s => {\n dest = Objects.blend(dest, s, options);\n });\n return dest;\n }\n source = source[0];\n }\n if (source) {\n let destValue, key, value;\n for (key in source) {\n value = source[key];\n if (value && Objects.isObject(value)) {\n destValue = dest[key];\n options.key = key;\n if (destValue && Objects.isObject(destValue)) {\n if (isFrozen(destValue)) {\n dest[key] = destValue = clone(destValue, options);\n }\n value = merge(destValue, value, options);\n }\n else {\n // We don't need to clone frozen objects, but we do clone mutable objects as they get\n // applied to the dest.\n value = isFrozen(value) ? value : clone(value, options);\n }\n }\n dest[key] = value;\n }\n }\n return dest;\n }\n static clone(value, handler) {\n let cloned = value,\n key;\n if (value && typeof value === 'object') {\n const options = handler && typeof handler === 'object' && handler;\n if (options) {\n // When using blend(), the 2nd argument is the options object, so ignore that case\n handler = null;\n }\n if (Objects.isObject(value)) {\n // When using DomSync, DomConfigs are usually recreated from scratch on each sync, we allow opting out\n // of cloning them (costly for many elements)\n if (value.skipClone) {\n cloned = value;\n }\n else {\n cloned = {};\n for (key in value) {\n cloned[key] = Objects.clone(value[key]);\n }\n }\n }\n else if (Array.isArray(value)) {\n cloned = [];\n // Loop backwards to:\n // 1. read source.length once\n // 2. get result array sized on first pass (avoid growing)\n for (key = value.length; key-- > 0; /* empty */) {\n cloned[key] = Objects.clone(value[key]);\n }\n }\n else if (Objects.isDate(value)) {\n cloned = new Date(value.getTime());\n }\n else if (handler) {\n // Allow other types to be handled (e.g., DOM nodes).\n cloned = handler(value);\n }\n }\n return cloned;\n }\n static createTruthyKeys(source) {\n const\n keys = StringHelper.split(source),\n result = keys && {};\n if (keys) {\n for (const key of keys) {\n // StringHelper.split won't return empty keys if passed a string, but we\n // could have been passed a String[]\n if (key) {\n result[key] = true;\n }\n }\n }\n return result;\n }\n /**\n * Returns value for a given path in the object\n * @param {Object} object Object to check path on\n * @param {String} path Dot-separated path, e.g. 'object.childObject.someKey'\n * @returns {*} Value associated with passed key\n */\n static getPath(object, path) {\n return path.split('.').reduce((result, key) => {\n return (result || emptyObject)[key];\n }, object);\n }\n /**\n * Returns value for a given path in the object, placing a passed default value in at the\n * leaf property and filling in undefined properties all the way down.\n * @param {Object} object Object to get path value for.\n * @param {String|Number|String[]|Number[]} path Dot-separated path, e.g. 'firstChild.childObject.someKey',\n * or the key path as an array, e.g. ['firstChild', 'childObject', 'someKey'].\n * @param {*} [defaultValue] Optionally the value to put in as the `someKey` property.\n * @returns {*} Value at the leaf position of the path.\n */\n static getPathDefault(object, path, defaultValue) {\n const\n keys = Array.isArray(path) ? path : typeof path === 'string' ? path.split('.') : [path],\n length = keys.length - 1;\n return keys.reduce((result, key, index) => {\n if (defaultValue && !(key in result)) {\n // Can't use emptyObject here, we are creating a node in the object tree\n result[key] = index === length ? defaultValue : {};\n }\n return (result || emptyObject)[key];\n }, object);\n }\n /**\n * Finds a property descriptor for the passed object from all inheritance levels.\n * @param {Object} object The Object whose property to find.\n * @param {String} propertyName The name of the property to find.\n * @returns {Object} An ECMA property descriptor is the property was found, otherwise `null`\n */\n static getPropertyDescriptor(object, propertyName) {\n let result = null;\n for (let o = object; o && !result && !Objects.hasOwn(o, 'isBase'); o = Object.getPrototypeOf(o)) {\n result = Object.getOwnPropertyDescriptor(o, propertyName);\n }\n return result;\n }\n /**\n * Determines if the specified path exists\n * @param {Object} object Object to check path on\n * @param {String} path Dot-separated path, e.g. 'object.childObject.someKey'\n * @returns {Boolean}\n */\n static hasPath(object, path) {\n return path.split('.').every(key => {\n if (object && key in object) {\n object = object[key];\n return true;\n }\n return false;\n });\n }\n static getTruthyKeys(source) {\n const keys = [];\n for (const key in source) {\n if (source[key]) {\n keys.push(key);\n }\n }\n return keys;\n }\n static getTruthyValues(source) {\n const values = [];\n for (const key in source) {\n if (source[key]) {\n values.push(source[key]);\n }\n }\n return values;\n }\n static isClass(object) {\n if (typeof object === 'function' && object.prototype?.constructor === object) {\n return true;\n }\n return false;\n }\n static isDate(object) {\n // A couple quick rejections but only sure way is typeOf:\n return Boolean(object?.getUTCDate) && Objects.typeOf(object) === 'date';\n }\n /**\n * Check if passed object is a Promise or contains `then` method.\n * Used to fix problems with detecting promises in code with `instance of Promise` when\n * Promise class is replaced with any other implementation like `ZoneAwarePromise` in Angular.\n * Related to these issues:\n * https://github.com/bryntum/support/issues/791\n * https://github.com/bryntum/support/issues/2990\n *\n * @param {Object} object object to check\n * @returns {Boolean} truthy value if object is a Promise\n * @internal\n */\n static isPromise(object) {\n if (Promise && Promise.resolve) {\n return Promise.resolve(object) === object || typeof object?.then === 'function';\n }\n throw new Error('Promise not supported in your environment');\n }\n static isEmpty(object) {\n if (object && typeof object === 'object') {\n // noinspection LoopStatementThatDoesntLoopJS\n for (const p in object) { // eslint-disable-line no-unused-vars,no-unreachable-loop\n return false;\n }\n }\n return true;\n }\n static isObject(value) {\n const C = value?.constructor;\n return Boolean(C\n // Most things have a .constructor property\n ? (\n // An in-frame instance of Object\n C === Object ||\n // Detect cross-frame objects, but exclude instance of custom classes named Object. typeOf(value) is\n // \"object\" even for instances of a class and typeOf(C) is \"function\" for all constructors. We'll have\n // to settle for relying on the fact that getPrototypeOf(Object.prototype) === null.\n // NOTE: this issue does come up in Scheduler unit tests at least.\n (C.getPrototypeOf && C.prototype && !Object.getPrototypeOf(C.prototype))\n )\n // Since all classes have a constructor property, an object w/o one is likely from Object.create(null). Of\n // course, primitive types do not have \".constructor\"\n : (value && typeof value === 'object')\n );\n }\n static isInstantiated(object) {\n return object ? typeof object === 'object' && !Objects.isObject(object) : false;\n }\n static merge(dest, ...sources) {\n return Objects.blend(dest, sources);\n }\n /**\n * Merges two \"items\" objects. An items object is a simple object whose keys act as identifiers and whose values\n * are \"item\" objects. An item can be any object type. This method is used to merge such objects while maintaining\n * their property order. Special key syntax is used to allow a source object to insert a key before or after a key\n * in the `dest` object.\n *\n * For example:\n * ```javascript\n * let dest = {\n * foo : {},\n * bar : {},\n * fiz : {}\n * }\n *\n * console.log(Object.keys(dest));\n * > [\"foo\", \"bar\", \"fiz\"]\n *\n * dest = mergeItems(dest, {\n * 'zip > bar' : {} // insert \"zip\" before \"bar\"\n * 'bar < zap' : {} // insert \"zap\" after \"bar\"\n * });\n *\n * console.log(Object.keys(dest));\n * > [\"foo\", \"zip\", \"bar\", \"zap\", \"fiz\"]\n * ```\n *\n * @param {Object} dest The destination object.\n * @param {Object|Object[]} src The source object or array of source objects to merge into `dest`.\n * @param {Object} [options] The function to use to merge items.\n * @param {Function} [options.merge] The function to use to merge items.\n * @returns {Object} The merged object. This will be the `dest` object.\n * @internal\n */\n static mergeItems(dest, src, options) {\n options = options || blendOptions;\n let anchor, delta, index, indexMap, key, shuffle, srcVal;\n const { merge = Objects.blend } = options;\n dest = dest || {};\n if (Array.isArray(src)) {\n src.forEach(s => {\n dest = Objects.mergeItems(dest, s, options);\n });\n }\n else if (src) {\n // https://2ality.com/2015/10/property-traversal-order-es6.html\n // Bottom line: Object keys are iterated in declared/insertion order... unless the key is an integer or\n // Symbol, but we don't care about those generally.\n for (key in src) {\n srcVal = src[key];\n anchor = null;\n // Allow a key to be added before or after another:\n //\n // {\n // 'foo > bar' : {\n // ...\n // },\n // 'bar < derp' : {\n // ...\n // }\n // }\n //\n // The goal above is to add a 'foo' key before the existing 'bar' key while adding a 'derp' key after\n // 'bar'.\n if (key.includes('>')) {\n [key, anchor] = key.split(beforeRe);\n delta = 0;\n }\n else if (key.includes('<')) {\n [anchor, key] = key.split(afterRe);\n delta = 1;\n }\n if (key in dest) {\n // Changing the value of a key does not change its iteration order. Since \"key in dest\" we can do\n // what we need directly.\n if (srcVal && dest[key] && merge) {\n options.key = key;\n srcVal = merge(dest[key], srcVal, options);\n }\n dest[key] = srcVal;\n }\n else if (!anchor) {\n dest[key] = srcVal;\n indexMap?.set(key, indexMap.size);\n }\n else {\n // Lazily sprout the item index map. When we first merge an item into an items object, we create this\n // Map to control the ordering. This is because any keys we add would necessarily be iterated after\n // the original properties.\n if (!indexMap) {\n indexMap = new Map();\n index = 0;\n for (const k in dest) {\n indexMap.set(k, index++);\n }\n }\n index = indexMap.get(anchor);\n dest[key] = srcVal;\n if (index == null && delta) {\n index = indexMap.size;\n }\n else {\n shuffle = shuffle || [];\n index = (index || 0) + delta;\n // Adjust all key indices >= index up by 1 to maintain integer indices (required by the above\n // use case).\n for (const item of indexMap) {\n const [k, v] = item;\n if (index <= v) {\n /*\n Consider object w/the following order:\n {\n foo : {}',\n bar : {},\n baz : {},\n zip : {},\n goo : {},\n fiz : {}\n }\n The indexMap is:\n foo : 0\n bar : 1\n baz : 2\n zip : 3\n goo : 4\n fiz : 5\n To insert before goo, we populate shuffle thusly (to set up for popping):\n +-----+-----+\n | fiz | goo |\n +-----+-----+\n 0 1\n =6-5-1 =6-4-1\n */\n shuffle && (shuffle[indexMap.size - v - 1] = k);\n indexMap.set(k, v + 1);\n }\n }\n // Delete and re-add the keys that should follow the new key to establish the iteration order\n // we need:\n if (shuffle) {\n while (shuffle.length) {\n const\n k = shuffle.pop(),\n v = dest[k];\n delete dest[k];\n dest[k] = v;\n }\n }\n }\n indexMap.set(key, index);\n }\n }\n }\n return dest;\n }\n /**\n * Sets value for a given path in the object\n * @param {Object} object Target object\n * @param {String} path Dot-separated path, e.g. 'object.childObject.someKey'\n * @param {*} value Value for a given path\n * @returns {Object} Returns passed object\n */\n static setPath(object, path, value) {\n path.split('.').reduce((result, key, index, array) => {\n const isLast = index === array.length - 1;\n if (isLast) {\n return result[key] = value;\n }\n else if (!(result[key] instanceof Object)) {\n result[key] = {};\n }\n return result[key];\n }, object);\n return object;\n }\n static typeOf(value) {\n let trueType, type;\n if (value === null) {\n type = 'null';\n }\n // NaN is the only value that is !== to itself\n else if (value !== value) { // eslint-disable-line no-self-compare\n type = 'nan';\n }\n else {\n type = typeof value;\n if (type === 'object') {\n if (value.isBase) {\n type = 'instance';\n }\n else if (Array.isArray(value)) {\n type = 'array';\n }\n else if (!(type = typeCache[trueType = toString.call(value)])) {\n typeCache[trueType] = type = trueType.slice(8, -1).toLowerCase(); // '[object Date]' => 'date'\n }\n }\n else if (type === 'function' && value.isBase) {\n type = 'class';\n }\n }\n return type;\n }\n}\nObject.defineProperty(Objects, 'hasOwn', {\n // When available, this avoids an extra layer of function call around it:\n value : Object.hasOwn || ((object, property) => hasOwnProperty.call(object, property))\n});\nObjects._$name = 'Objects';", "import BrowserHelper from './BrowserHelper.js';\nimport StringHelper from './StringHelper.js';\n/**\n * @module Core/helper/VersionHelper\n */\n/**\n * Helper for version handling\n *\n * ```javascript\n * VersionHelper.setVersion('grid', '1.5');\n * if (VersionHelper.getVersion('grid').isNewerThan('1.0')) {\n * ...\n * }\n * ```\n *\n * @private\n */\nexport default class VersionHelper {\n /**\n * Set version for specified product\n * @private\n * @param {String} product\n * @param {String} version\n */\n static setVersion(product, version) {\n product = product.toLowerCase();\n VH[product] = {\n version,\n isNewerThan(otherVersion) {\n return VersionHelper.semanticCompareVersion(otherVersion, version, '<');\n },\n isOlderThan(otherVersion) {\n return VersionHelper.semanticCompareVersion(otherVersion, version, '>');\n }\n };\n let bundleFor = '';\n // Var productName is only defined in bundles, it is internal to bundle so not available on window. Used to\n // tell importing combinations of grid/scheduler/gantt bundles apart from loading same bundle twice\n if (typeof productName !== 'undefined') {\n // eslint-disable-next-line no-undef\n bundleFor = productName;\n }\n // Set \"global\" flag to detect bundle being loaded twice\n const globalKey = `${bundleFor}.${product}${version.replace(/\\./g, '-')}`;\n if (BrowserHelper.isBrowserEnv && !globalThis.bryntum.silenceBundleException) {\n if (globalThis.bryntum[globalKey] === true) {\n if (this.isTestEnv) {\n globalThis.BUNDLE_EXCEPTION = true;\n }\n else {\n let errorProduct = bundleFor || product;\n if (errorProduct === 'core') {\n errorProduct = 'grid';\n }\n let capitalized = StringHelper.capitalize(errorProduct);\n if (errorProduct === 'schedulerpro') {\n capitalized = 'SchedulerPro';\n }\n throw new Error(\n `The Bryntum ${capitalized} bundle was loaded multiple times by the application.\\n\\n` +\n `Common reasons you are getting this error includes:\\n\\n` +\n `* Imports point to different types of the bundle (e.g. *.module.js and *.umd.js)\\n` +\n `* Imports point to both sources and bundle\\n` +\n `* Imports do not use the shortest relative path, JS treats them as different files\\n` +\n `* Cache busters differ between imports, JS treats ${errorProduct}.module.js?1 and ${errorProduct}.module.js?2 as different files\\n` +\n `* Imports missing file type, verify they all end in .js\\n\\n` +\n `See https://bryntum.com/products/${errorProduct}/docs/guide/${capitalized}/gettingstarted/es6bundle#troubleshooting for more information\\n\\n`\n );\n }\n }\n else {\n globalThis.bryntum[globalKey] = true;\n }\n }\n }\n /**\n * Get (previously set) version for specified product\n * @private\n * @param {String} product\n */\n static getVersion(product) {\n product = product.toLowerCase();\n if (!VH[product]) {\n throw new Error('No version specified! Please check that you import VersionHelper correctly into the class from where you call `deprecate` function.');\n }\n return VH[product].version;\n }\n /**\n * Checks the version1 against the passed version2 using the comparison operator.\n * Supports `rc`, `beta`, `alpha` release states. Eg. `1.2.3-alpha-1`.\n * State which is not listed above means some version below `alpha`.\n * @param {String} version1 The version to test against\n * @param {String} version2 The version to test against\n * @param {String} [comparison] The comparison operator, `<=`, `<`, `=`, `>` or `>=`.\n * @returns {Boolean} `true` if the test passes.\n * @internal\n */\n static semanticCompareVersion(version1, version2, comparison = '=') {\n version1 = version1 || '';\n version2 = version2 || '';\n const\n version1Arr = version1.split(/[-.]/),\n version2Arr = version2.split(/[-.]/),\n isLower = comparison.includes('<'),\n normalizeArr = (arr, maxLength) => {\n const\n states = ['rc', 'beta', 'alpha'],\n result = arr.map(v => {\n if (states.includes(v)) {\n return -states.indexOf(v) - 2;\n }\n const res = Number.parseInt(v);\n return Number.isNaN(res) ? -states.length : res;\n });\n while (result.length < maxLength) {\n result.push(-1);\n }\n return result;\n },\n compareArr = () => {\n const\n maxLength = Math.max(version1Arr.length, version2Arr.length),\n arr1 = normalizeArr(version1Arr, maxLength),\n arr2 = normalizeArr(version2Arr, maxLength);\n for (let i = 0; i < maxLength; i++) {\n if (arr1[i] !== arr2[i]) {\n return isLower ? arr1[i] < arr2[i] : arr1[i] > arr2[i];\n }\n }\n return true;\n };\n switch (comparison) {\n case '=':\n return version1 === version2;\n case '<=':\n case '>=':\n return (version1 === version2) || compareArr();\n case '<':\n case '>':\n return (version1 !== version2) && compareArr();\n }\n return false;\n }\n /**\n * Checks the passed product against the passed version using the passed test.\n * @param {String} product The name of the product to test the version of\n * @param {String} version The version to test against\n * @param {String} operator The test operator, `<=`, `<`, `=`, `>` or `>=`.\n * @returns {Boolean} `true` if the test passes.\n * @internal\n */\n static checkVersion(product, version, operator) {\n return VersionHelper.semanticCompareVersion(VH.getVersion(product), version, operator);\n }\n /**\n * Based on a comparison of current product version and the passed version this method either outputs a console.warn\n * or throws an error.\n * @param {String} product The name of the product\n * @param {String} invalidAsOfVersion The version where the offending code is invalid (when any compatibility layer\n * is actually removed).\n * @param {String} message Required! A helpful warning message to show to the developer using a deprecated API.\n * @internal\n */\n static deprecate(product, invalidAsOfVersion, message) {\n const justWarn = VH.checkVersion(product, invalidAsOfVersion, '<');\n if (justWarn) {\n // During the grace period (until the next major release following the deprecated code), just show a console warning\n console.warn(`Deprecation warning: You are using a deprecated API which will change in v${invalidAsOfVersion}. ${message}`);\n }\n else {\n throw new Error(`Deprecated API use. ${message}`);\n }\n }\n /**\n * Returns truthy value if environment is in testing mode\n * @returns {Boolean}\n * @internal\n **/\n static get isTestEnv() {\n const isTestEnv = Boolean(globalThis.bryntum?.isTestEnv);\n try {\n return isTestEnv || Boolean(globalThis.parent?.bryntum?.isTestEnv);\n }\n catch (e) {\n // Accessing parent may cause CORS violation\n return isTestEnv;\n }\n }\n static get isDebug() {\n let result = false;\n return result;\n }\n}\nconst VH = VersionHelper;\nif (BrowserHelper.isBrowserEnv) {\n if (VH.isTestEnv) {\n BrowserHelper._isHoverableDevice = true;\n }\n globalThis.bryntum = Object.assign(globalThis.bryntum || {}, {\n getVersion : VH.getVersion.bind(VH),\n checkVersion : VH.checkVersion.bind(VH),\n deprecate : VH.deprecate.bind(VH),\n license : '%LICENSE%'\n });\n}\nVersionHelper._$name = 'VersionHelper';", "import Objects from './helper/util/Objects.js';\n// We cannot import ObjectHelper because of the import cycle:\n// ObjectHelper -> DateHelper -> LocaleManager -> Base -> us\n/**\n * @module Core/Config\n */\nconst\n { defineProperty, getOwnPropertyDescriptor } = Reflect,\n { hasOwnProperty, toString } = Object.prototype,\n instancePropertiesSymbol = Symbol('instanceProperties'),\n configuringSymbol = Symbol('configuring'),\n lazyConfigValues = Symbol('lazyConfigValues'),\n DATE_TYPE = toString.call(new Date()),\n whitespace = /\\s+/,\n createClsProps = (result, cls) => {\n result[cls] = 1;\n return result;\n };\n/**\n * This class holds the description of a config property. Only one instance of this class is needed for each config\n * name (e.g., \"text\"). If config options are supplied, however, they also contribute to the cached instance.\n *\n * Instances should always be retrieved by calling `Config.get()`.\n *\n * The **Configs** of this class correspond to `options` that can be supplied to the `get()` method. These affect the\n * behavior of the config property in some way, as descried by their respective documentation.\n *\n * This class is not used directly.\n *\n * ## The Setter\n * The primary functionality provided by `Config` is its standard setter. This setter function ensures consistent\n * behavior when modifying config properties.\n *\n * The standard setter algorithm is as follows (using the `'text'` config for illustration):\n *\n * - If the class defines a `changeText()` method, call it passing the new value and the current value:\n * `changeText(newText, oldText)`.
\n * Then:\n * * If `changeText()` exits without returning a value (i.e., `undefined`), exit and do nothing further. The\n * assumption is that the changer method has done all that is required.\n * * Otherwise, the return value of `changeText()` replaces the incoming value passed to the setter.\n * - If the new value (or the value returned by `changeText()`) is `!==` to the current value:\n * * Update the stored config value in `this._text`.\n * * If the class defines an `updateText()` method, call it passing the new value and the previous value.\n * `updateText(newText, oldText)`\n * * If the class defines an `onConfigChange()` method, call it passing an object with the following properties:\n * - `name` - The config's name\n * - `value` - The new value\n * - `was` - The previous value\n * - `config` - The `Config` instance.\n *\n * NOTE: unlike `changeText()` and `updateText()`, the name of the `onConfigChange()` method is unaffected by the\n * config's name.\n *\n * @internal\n */\nexport default class Config {\n /**\n * Returns the `Config` instance for the given `name` and `options`.\n * @param {String} name The name of the config (e.g., 'text' for the text config).\n * @param {Object} [options] Config behavior options.\n * @returns {Core.Config}\n * @internal\n */\n static get(name, options) {\n const\n { cache } = this,\n baseCfg = cache[name] || (cache[name] = new Config(name));\n let cfg = baseCfg,\n key;\n if (options) {\n key = Config.makeCacheKey(name, options);\n if (!(cfg = key && cache[key])) {\n cfg = baseCfg.extend(options);\n if (key) {\n cache[key] = cfg;\n }\n }\n }\n return cfg;\n }\n constructor(name) {\n const\n me = this,\n cap = name[0].toUpperCase() + name.substr(1);\n me.base = me; // so extend()ed configs have a link to the base definition\n me.name = name;\n me.field = '_' + name;\n me.capName = cap;\n me.changer = 'change' + cap;\n me.initializing = 'initializing' + cap;\n me.updater = 'update' + cap;\n }\n /**\n * The descriptor to use with `Reflect.defineProperty()` for defining this config's getter and setter.\n * @property {Object}\n * @private\n */\n get descriptor() {\n let descriptor = this._descriptor;\n if (!descriptor || !hasOwnProperty.call(this, '_descriptor')) {\n // lazily make the descriptor\n this._descriptor = descriptor = this.makeDescriptor();\n }\n return descriptor;\n }\n /**\n * The descriptor to use with `Reflect.defineProperty()` for defining this config's initter.\n * @property {Object}\n * @private\n */\n get initDescriptor() {\n let descriptor = this._initDescriptor;\n if (!descriptor || !hasOwnProperty.call(this, '_initDescriptor')) {\n // lazily make the descriptor\n this._initDescriptor = descriptor = this.makeInitter();\n }\n return descriptor;\n }\n /**\n * This method compares two values for semantic equality. By default, this is based on the `===` operator. This\n * is often overridden for configs that accept `Date` or array values.\n * @param {*} value1\n * @param {*} value2\n * @returns {Boolean}\n * @internal\n */\n equal(value1, value2) {\n return value1 === value2;\n }\n /**\n * Extends this config with a given additional set of options. These objects are just prototype extensions of this\n * instance.\n * @param {Object} options\n * @returns {Core.Config}\n * @internal\n */\n extend(options) {\n const\n cfg = Object.assign(Object.create(this), options),\n { equal, merge } = options,\n { equalityMethods } = Config;\n if (typeof equal === 'string') {\n if (equal.endsWith('[]')) {\n cfg.equal = Config.makeArrayEquals(equalityMethods[equal.substr(0, equal.length - 2)]);\n }\n else {\n cfg.equal = equalityMethods[equal];\n }\n }\n if (typeof merge === 'string') {\n // Base uses { merge : 'replace' } for defaultConfig properties\n cfg.merge = Config.mergeMethods[merge];\n }\n return cfg;\n }\n /**\n * Defines the property on a given target object via `Reflect.defineProperty()`. If the object has its own getter,\n * it will be preserved. It is invalid to define a setter.\n * @param {Object} target\n * @internal\n */\n define(target) {\n const existing = getOwnPropertyDescriptor(target, this.name);\n let descriptor = this.descriptor;\n if (existing && existing.get) {\n descriptor = Object.assign({}, descriptor);\n descriptor.get = existing.get;\n }\n defineProperty(target, this.name, descriptor);\n }\n /**\n * Defines the property initter on the `target`. This is a property getter/setter that propagates the configured\n * value when the property is read.\n * @param {Object} target\n * @param {*} value\n * @internal\n */\n defineInitter(target, value) {\n const\n { name } = this,\n properties = target[instancePropertiesSymbol];\n let lazyValues, prop;\n // If there is an existing property with a getter/setter, *not* a value\n // defined on the object for this config we must call it in our injected getter/setter.\n if (!properties[name] && (/* assign */prop = getOwnPropertyDescriptor(target, name)) && !('value' in prop)) {\n properties[name] = prop;\n }\n // Set up a temporary instance property which will pull in the value from the initialConfig if the getter\n // is called first.\n defineProperty(target, name, this.initDescriptor);\n if (this.lazy) {\n lazyValues = target[lazyConfigValues] || (target[lazyConfigValues] = new Map());\n lazyValues.set(name, value);\n }\n }\n /**\n * Returns an equality function for arrays of a base type, for example `'date'`.\n * @param {Function} [fn] The function to use to compare array elements. By default, operator `===` is used.\n * @returns {Function}\n * @private\n */\n static makeArrayEquals(fn) {\n return (value1, value2) => {\n let i,\n equal = value1 && value2 && value1.length === (i = value2.length);\n if (equal && Array.isArray(value1) && Array.isArray(value2)) {\n if (fn) {\n while (equal && i-- > 0) {\n equal = fn(value1[i], value2[i]);\n }\n }\n else {\n while (equal && i-- > 0) {\n equal = value1[i] === value2[i];\n }\n }\n }\n else {\n equal = fn ? fn(value1, value2) : (value1 === value2);\n }\n return equal;\n };\n }\n /**\n * Returns the key to use in the Config `cache`.\n * @param {String} name The name of the config property.\n * @param {Object} options The config property options.\n * @returns {String}\n * @private\n */\n static makeCacheKey(name, options) {\n const keys = Object.keys(options).sort();\n for (let key, type, value, i = keys.length; i-- > 0; /* empty */) {\n value = options[key = keys[i]];\n if (value == null && value === false) {\n keys.splice(i, 1);\n }\n else {\n type = typeof value;\n if (type === 'function') {\n return null;\n }\n if (type === 'string') {\n keys[i] = `${key}:\"${value}\"`;\n }\n else if (type === 'number') {\n keys[i] = `${key}:${value}`;\n }\n // that leaves bool and object, but there are no (valid) config options that are objects... so ignore\n }\n }\n return keys.length ? `${name}>${keys.join('|')}` : name; // eg: 'text>render|merge:v => v|bar'\n }\n /**\n * Creates and returns a property descriptor for this config suitable to be passed to `Reflect.defineProperty()`.\n * @returns {Object}\n * @private\n */\n makeDescriptor() {\n const\n config = this,\n { base, field, changer, updater, name } = config;\n if (base !== config && base.equal === config.equal) {\n // At present only the equal option affects the setter, so all configs can share the\n // descriptor of the base-most config definition unless their equality test fns differ.\n return base.descriptor;\n }\n return {\n get() {\n // Allow folks like Widget.compose() to monitor getter calls\n this.configObserver?.get(name, this);\n return this[field];\n },\n set(value) {\n const me = this;\n let was = me[field],\n applied, newValue;\n // Resolve values starting with 'up.' by traversing owners to find it\n if (typeof value === 'string') {\n let resolvedValue = value;\n if (value.startsWith('up.')) {\n resolvedValue = me.owner?.resolveProperty(value.slice(3));\n }\n else if (value.startsWith('this.')) {\n resolvedValue = me.resolveProperty(value.slice(5));\n }\n if (resolvedValue !== undefined && typeof resolvedValue !== 'function') {\n value = resolvedValue;\n }\n }\n // If the \"changeTitle()\" fellow falls off the end, it must have changed all the needful things.\n // Otherwise, it returned the final config value (it may have changed it instead, for example, making\n // an instance from a config object).\n if (me[changer]) {\n applied = (newValue = me[changer](value, was)) === undefined;\n if (!applied) {\n value = newValue;\n was = me[field]; // in case it was modified by the changer fn...\n }\n }\n // inline the default equal() for better perf:\n if (!applied && !((config.equal === equal) ? was === value : config.equal(was, value))) {\n me[field] = value;\n applied = true;\n // Check for a \"updateTitle()\" method and call it if present.\n me[updater]?.(value, was);\n }\n // Trigger config change if the value changed, and updater did not lead to our destruction\n if (applied && !me.isDestroyed && !me.onConfigChange.$nullFn) {\n me.onConfigChange({ name, value, was, config });\n }\n }\n };\n }\n /**\n * Creates and returns a property descriptor for this config's initter suitable to pass to\n * `Reflect.defineProperty()`.\n * @returns {Object}\n * @private\n */\n makeInitter() {\n const config = this;\n if (config !== config.base) {\n if (config.lazy) {\n return config.makeLazyInitter();\n }\n // At present no other options affect the setter, so all configs can share the descriptor of the base-most\n // config definition.\n return config.base.initDescriptor;\n }\n return config.makeBasicInitter();\n }\n makeBasicInitter() {\n const\n config = this,\n { initializing, name } = config;\n return {\n configurable : true,\n get() {\n const me = this;\n config.removeInitter(me);\n // Set the value from the configuration.\n me[initializing] = true;\n me[name] = me[configuringSymbol][name];\n me[initializing] = false;\n // The property has been *pulled* from the configuration.\n // Prevent the setting loop in configure from setting it again.\n me.configDone[name] = true;\n // Finally, allow the prototype getter to return the value.\n return me[name];\n },\n set(value) {\n config.removeInitter(this);\n // The config has been set (some internal code may have called the setter)\n // so prevent it from being called again and overwritten with data from initialConfig.\n this.configDone[name] = true;\n // Set the property normally (Any prototype setter will be invoked)\n this[name] = value;\n }\n };\n }\n makeLazyInitter() {\n const\n config = this,\n { initializing, name } = config;\n return {\n configurable : true,\n get() {\n const\n me = this,\n value = me[lazyConfigValues].get(name);\n config.removeInitter(me);\n if (!me.isDestroying) {\n // Set the value from the lazy config object.\n me[initializing] = true;\n me[name] = value;\n me[initializing] = false;\n }\n // Finally, allow the prototype getter to return the value.\n return me[name];\n },\n set(value) {\n config.removeInitter(this);\n // Set the property normally (Any prototype setter will be invoked)\n this[name] = value;\n }\n };\n }\n /**\n * Removes the property initter and restores the instance to its original form.\n * @param {Object} instance\n * @private\n */\n removeInitter(instance) {\n const\n { name } = this,\n instanceProperty = instance[instancePropertiesSymbol][name],\n lazyValues = instance[lazyConfigValues];\n // If we took over from an instance property, replace it\n if (instanceProperty) {\n defineProperty(instance, name, instanceProperty);\n }\n // Otherwise just delete the instance property who's getter we are in.\n else {\n delete instance[name];\n }\n if (lazyValues?.delete(name) && !lazyValues.size) {\n // we delete the keys so that we can tell if this particular lazy config has been initialized\n delete instance[lazyConfigValues];\n }\n }\n setDefault(cls, value) {\n defineProperty(cls.prototype, this.field, {\n configurable : true,\n writable : true, // or else \"this._value = x\" will fail\n value\n });\n }\n /**\n * This method combines (merges) two config values. This is called in two cases:\n *\n * - When a derived class specifies the value of a config defined in a super class.\n * - When a value is specified in the instance config object.\n *\n * @param {*} newValue In the case of derived classes, this is the config value of the derived class. In the case\n * of the instance config, this is the instance config value.\n * @param {*} currentValue In the case of derived classes, this is the config value of the super class. In the case\n * of the instance config, this is the class config value.\n * @param {Object} metaNew The class meta object from which the `newValue` is coming. This parameter is `null` if\n * the `newValue` is from an instance configuration.\n * @param {Object} metaCurrent The class meta object from which the `currentValue` is coming. This parameter is\n * `null` if the `currentValue` is not from a class configuration.\n * @returns {*}\n * @internal\n */\n merge(newValue, currentValue) {\n if (currentValue && newValue && Objects.isObject(newValue)) {\n // If existing value is a class instance, clone and merge won't work. Set the configs.\n if (currentValue.isBase) {\n return currentValue.setConfig(newValue);\n }\n if (Objects.isObject(currentValue)) {\n newValue = Objects.merge(Objects.clone(currentValue), newValue);\n }\n }\n return newValue;\n }\n}\nconst\n { prototype } = Config,\n { equal } = prototype;\nConfig.symbols = {\n configuring : configuringSymbol,\n instanceProperties : instancePropertiesSymbol,\n lazyConfigs : lazyConfigValues\n};\n/**\n * This object holds `Config` instances keyed by their name. For example:\n *\n * ```javascript\n * Config.cache = {\n * disabled : Config.get('disabled'),\n * text : Config.get('text'),\n * title : Config.get('title')\n * };\n * ```\n *\n * @member {Object} cache\n * @static\n * @private\n */\nConfig.cache = Object.create(null); // object w/no properties not even inherited ones\n/**\n * This object holds config value equality methods. By default, the `===` operator is used to compare config values for\n * semantic equality. When an `equal` option is specified as a string, that string is used as a key into this object.\n *\n * All equality methods in this object have the same signature as the {@link #function-equal equal()} method.\n *\n * This object has the following equality methods:\n *\n * - `array` : Compares arrays of values using `===` on each element.\n * - `date` : Compares values of `Date` type.\n * - `strict` : The default equal algorithm based on `===` operator.\n * @member {Object} equalityMethods\n * @static\n * @private\n */\nConfig.equalityMethods = {\n array : Config.makeArrayEquals(),\n date(value1, value2) {\n if (value1 === value2) {\n return true;\n }\n // see DateHelper.isDate() but cannot import due to circularity\n if (value1 && value2 && toString.call(value1) === DATE_TYPE && toString.call(value2) === DATE_TYPE) {\n // https://jsbench.me/ltkb3vk0ji/1 - getTime is >2x faster vs valueOf/Number/op+\n return value1.getTime() === value2.getTime();\n }\n return false;\n },\n strict : Config.equal = equal\n};\n/**\n * This object holds config value merge methods. By default, {@link Core.helper.ObjectHelper#function-merge-static} is\n * used to merge object's by their properties. Config merge methods are used to combine config values from derived\n * classes with config values from super classes, as well as instance config values with those of the class.\n *\n * All merge methods in this object have the same signature as the {@link #function-merge merge()} method.\n *\n * This object has the following merge methods:\n *\n * - `distinct` : Combines arrays of values ensuring that no value is duplicated. When given an object, its truthy\n * keys are included, while its falsy keys are removed from the result.\n * - `merge` : The default merge algorithm for `configurable()` properties, based on\n * {@link Core.helper.ObjectHelper#function-merge-static}.\n * - `items` : Similar to `merge`, but allows reordering (see `Objects.mergeItems`).\n * - `objects` : The same as to `merge` except this method promotes `true` to an empty object.\n * - 'classList' : Incoming strings are converted to an object where the string is a property name with a truthy value.\n * - `replace` : Always returns `newValue` to replace the super class value with the derived class value, or the\n * class value with the instance value.\n * @member {Object} mergeMethods\n * @static\n * @internal\n */\nConfig.mergeMethods = {\n distinct(newValue, oldValue) {\n let ret = oldValue ? oldValue.slice() : [];\n if (newValue != null) {\n if (Objects.isObject(newValue)) {\n if (oldValue === undefined) {\n ret = newValue;\n }\n else {\n let key, index;\n for (key in newValue) {\n index = ret.indexOf(key);\n if (newValue[key]) {\n if (index < 0) {\n ret.push(key);\n }\n }\n else if (index > -1) {\n ret.splice(index, 1);\n }\n }\n }\n }\n else if (Array.isArray(newValue)) {\n newValue.forEach(v => !ret.includes(v) && ret.push(v));\n }\n else if (!ret.includes(newValue)) {\n ret.push(newValue);\n }\n }\n return ret;\n },\n merge : Config.merge = prototype.merge,\n classList(newValue, oldValue) {\n // 'foo bar' -> { foo : 1, bar : 1 }\n if (typeof newValue === 'string') {\n if (!newValue.length) {\n return oldValue;\n }\n newValue = newValue.split(whitespace);\n }\n if (Array.isArray(newValue)) {\n newValue = newValue.reduce(createClsProps, {});\n }\n return Config.merge(newValue, oldValue);\n },\n objects(newValue, oldValue) {\n return (newValue === true) ? oldValue || {} : Config.merge(newValue, oldValue);\n },\n replace(newValue) {\n return newValue;\n },\n items(newValue, oldValue, metaNew, metaCurrent) {\n if (metaCurrent) {\n // When we have metaCurrent, we are merging with a class config object, so we apply the smart merge algo\n // only in that case. Merging instance configs would lose the 'clever > syntax' info needed when the\n // time comes to actually configure an instance.\n return Objects.mergeItems(oldValue, newValue, {\n merge : (oldValue, newValue) => prototype.merge(newValue, oldValue)\n });\n }\n return prototype.merge(newValue, oldValue);\n }\n};\nObject.assign(prototype, {\n _descriptor : null,\n _initDescriptor : null,\n /**\n * A function that compares values for equality. This test is used to determine if the `update` method should be\n * called when the setter is invoked.\n *\n * To handle `Date` values:\n * ```\n * class Foo extends Base {\n * static get configurable() {\n * return {\n * date : {\n * $config : {\n * equal : 'date'\n * },\n *\n * value : null\n * }\n * }\n * }\n *\n * updateDate(date) {\n * // date has changed\n * }\n * }\n * ```\n *\n * Also useful for some configs:\n * ```\n * class Foo extends Base {\n * static get configurable() {\n * return {\n * bar : {\n * $config : {\n * equal : ObjectHelper.isEqual\n * },\n *\n * value : null\n * }\n * }\n * }\n *\n * updateBar(value) {\n * // value has changed\n * }\n * }\n * ```\n * @config {Function} equal\n * @internal\n */\n /**\n * Indicates that this config property should not automatically initialize during construction. When this property\n * is set to `true`, initialization is triggered by the first use of the config property's getter.\n *\n * This property can alternatively be set to a string, in which case it can be initialized as a group using the\n * {@link Core.Base#function-triggerConfigs} method which will initialize all lazy configs with the same value for\n * this property. Note: the config will still initialize on first use if that occurs prior to the call to\n * `triggerConfigs`.\n * @config {Boolean|String}\n * @default\n * @internal\n */\n lazy : false,\n /**\n * Indicates that this config property should automatically be set to `null` on destroy.\n * @config {Boolean}\n * @default\n * @internal\n */\n nullify : false,\n /**\n * Indicates that this config participates in rendering. This has does not affect the behavior of the property\n * directly, but allows classes that perform rendering to detect which config changes will affect the rendered\n * result.\n * @config {Boolean}\n * @default\n * @internal\n */\n render : false\n});\nConfig._$name = 'Config';", "/**\n * @module Core/Base\n */\nimport Objects from './helper/util/Objects.js';\nimport StringHelper from './helper/StringHelper.js';\nimport VersionHelper from './helper/VersionHelper.js';\nimport BrowserHelper from './helper/BrowserHelper.js';\nimport Config from './Config.js';\nclass MetaClass {\n constructor(options) {\n options && Object.assign(this, options);\n }\n getInherited(name, create = true) {\n let ret = this[name];\n // We use \"in this\" to allow the object to be set to null\n if (!(name in this)) {\n // If there is no object on this metaclass, but there may be one on a super class. If create=false, the\n // idea is that a super class object will be \"properly\" inherited but otherwise no object will be created.\n ret = this.super?.getInherited(name, create);\n if (ret || create) {\n this[name] = ret = Object.create(ret || null);\n }\n }\n return ret;\n }\n}\nconst\n // Using Object.getPrototypeOf instead of Reflect.getPrototypeOf because:\n // 1. They are almost the same, according to the MDN difference is handling getPrototypeOf('string')\n // 2. It allows us to pass security check in SalesForce environment\n { getPrototypeOf } = Object,\n { hasOwn } = Objects,\n { defineProperty } = Reflect,\n metaSymbol = Symbol('classMetaData'),\n mixinTagSymbol = Symbol('mixinTag'),\n originalConfigSymbol = Symbol('originalConfig'),\n createdAtSymbol = Symbol('createdAt'),\n configuringSymbol = Config.symbols.configuring,\n instancePropertiesSymbol = Config.symbols.instanceProperties,\n lazyConfigsSymbol = Config.symbols.lazyConfigs,\n defaultConfigOptions = { merge : 'replace', simple : true },\n emptyFn = () => {},\n newMeta = o => new MetaClass(o),\n setupNames = { /* foo : 'setupFoo' */ },\n emptyObject = Object.freeze({}),\n emptyArray = Object.freeze([]);\n/**\n * Base class for all configurable classes.\n *\n * Subclasses do not have to implement a constructor with its restriction of having to call super()\n * before there is a `this` reference. Subclasses instead implement a `construct` method which is\n * called by the `Base` constructor. This may call its `super` implementation at any time.\n *\n * The `Base` constructor applies all configs to properties of the new instance. The instance\n * will have been configured after the `super.construct(config)` is called.\n *\n * See the Class System documentation in the guides for more information.\n *\n * @abstract\n */\nexport default class Base {\n static get isBase() {\n return true;\n }\n get isBase() {\n return true;\n }\n // defaultConfig & properties made private to not spam all other classes\n /**\n * A class property getter to add additional, special class properties.\n *\n * For example, a class adds a `declarable` class property like so:\n * ```\n * class Something extends Base {\n * static get declarable() {\n * return ['extra'];\n * }\n *\n * static setupExtra(cls, meta) {\n * // use cls.extra\n * }\n * }\n * ```\n * A derived class can then specify this property like so:\n * ```\n * class Derived extends Something {\n * static get extra() {\n * // return extra information\n * }\n * }\n * ```\n * When the `Derived` class is initialized, the `setupExtra()` method is called and `Derived` is passed as the\n * argument. It is also the `this` pointer, but the parameter is minifiable. The second argument passed is the\n * `$meta` object for the class.\n *\n * Classes are initialized at the first occurrence of the following:\n *\n * - An instance is created\n * - The class `$meta` property is accessed\n *\n * @member {String[]} declarable\n * @static\n * @category Configuration\n * @internal\n */\n static get declarable() {\n return [\n 'declarable',\n /**\n * A class property getter for the configuration properties of the class, which can be overridden by\n * configurations passed at construction time.\n *\n * Unlike a normal `static` property, this property is only ever used for the class that defines it (as in,\n * `hasOwnProperty`). It is retrieved for all classes in a class hierarchy, to gather their configs\n * individually and then combine them with those of derived classes.\n *\n * For example, a `Label` might declare a `text` config like so:\n * ```javascript\n * class Label extends Base {\n * static get configurable() {\n * return {\n * text : null\n * };\n * }\n * }\n * ```\n * The `text` config is automatically inherited by classes derived from Label. By implementing\n * `get configurable()`, derived classes can change the default value of inherited configs, or define new\n * configs, or both.\n *\n * When a config property is declared in this way, the class author can also implement either of two\n * special methods that will be called when the config property is assigned a new value:\n *\n * - `changeText()`\n * - `updateText()`\n *\n * In the example above, the `Label` class could implement a `changeText()` method, an `updateText()`\n * method, or both. The generated property setter ensures these methods will be called when the `text`\n * property is assigned.\n *\n * The generated setter (for `text` in this example) performs the following steps:\n *\n * - If the class defines a `changeText()` method, call it passing the new value and the current value:\n * `changeText(newText, oldText)`.
\n * Then:\n * * If `changeText()` exits without returning a value (i.e., `undefined`), exit and do nothing\n * further. The assumption is that the changer method has done all that is required.\n * * Otherwise, the return value of `changeText()` replaces the incoming value passed to the setter.\n * - If the new value (or the value returned by `changeText()`) is `!==` to the current value:\n * * Update the stored config value in `this._text`.\n * * If the class defines an `updateText()` method, call it passing the new value and the previous value.\n * `updateText(newText, oldText)`\n *\n * #### Resolving a value from an owner\n * By specifying a value starting with `'up.'` for a config, the config system will resolve that value by\n * examining the ownership hierarchy. It will walk up the hierarchy looking for a property matching the name\n * (or dot separated path) after 'up.'. If one is found, the value will be read and used as the initial\n * value.\n *\n * ```javascript\n * class Parent extends Base {\n * static get configurable() {\n * return [\n * 'importantValue'\n * ]\n * }\n * }\n *\n * class Child extends Base {\n * static get configurable() {\n * return [\n * 'value'\n * ]\n * }\n * }\n *\n * const parent = new Parent({\n * importantValue : 123\n * });\n *\n * const child = new Child({\n * owner : parent,\n * // Will be resolved from the owner\n * value : 'up.importantValue'\n * });\n *\n * console.log(child.value); // logs 123\n * ```\n * Please note that this is for now a one way one time binding, the value will only be read initially and\n * not kept up to date on later changes.\n *\n * #### Value Merging\n * When a config property value is an object, the value declared by the base class is merged with values\n * declared by derived classes and the value passed to the constructor.\n * ```javascript\n * class Example extends Base {\n * static get configurable() {\n * return {\n * config : {\n * foo : 1,\n * bar : 2\n * }\n * };\n * }\n * }\n *\n * class Example2 extends Example {\n * static get configurable() {\n * return {\n * config : {\n * bar : 42,\n * zip : 'abc'\n * }\n * };\n * }\n * }\n *\n * let ex = new Example2({\n * config : {\n * zip : 'xyz'\n * }\n * });\n * ```\n * The result of the merge would set `config` to:\n * ```javascript\n * ex.foo = {\n * foo : 1, // from Example\n * bar : 42, // from Example2\n * zip : 'xyz' // from constructor\n * }\n * ```\n *\n * #### Config Options\n * Some config properties require additional options such as declarative information about the config that\n * may be useful to automate some operation. Consider a `Button`. It could declare that its `text` config\n * affects the rendered HTML by applying a `render` property to the config definition. Its base class could\n * then examine the config definition to find this property.\n *\n * To support this, config options ca be declared like so:\n * ```javascript\n * class Button extends Widget {\n * static get configurable() {\n * return {\n * text : {\n * value : null,\n * $config : {\n * render : true\n * }\n * }\n * };\n * }\n * }\n * ```\n * The `$config` property can alternatively be just the names of the options that should be enabled (set\n * to `true`).\n *\n * For example, the following is equivalent to the above:\n * ```javascript\n * class Button extends Widget {\n * static get configurable() {\n * return {\n * text : {\n * value : null,\n * $config : 'render'\n * }\n * };\n * }\n * ```\n *\n * #### Default Value\n * It is common to set a config to a `null` value to take advantage of internal optimizations for `null`\n * values. In most cases the fact that this produces `undefined` as the actual initial value of the config\n * is acceptable. When this is not acceptable, a config can be declared like so:\n * ```javascript\n * class Widget {\n * static get configurable() {\n * return {\n * disabled : {\n * $config : null,\n * value : null,\n * default : false\n * }\n * };\n * }\n * ```\n * The `default` property above determines the value of the config while still gaining the benefits of\n * minimal processing due to the `null` value of the `value` property.\n * @member {Object} configurable\n * @static\n * @category Configuration\n * @internal\n */\n 'configurable',\n /**\n * A class property getter for the default configuration of the class, which can be overridden by\n * configurations passed at construction time.\n *\n * Unlike a normal `static` property, this property is only ever used for the class that defines it (as in,\n * `hasOwnProperty`). It is retrieved for all classes in a class hierarchy, to gather their configs\n * individually and then combine them with those of derived classes.\n *\n * For example, a `Store` might declare its `url` config like so:\n * ```\n * class Store extends Base {\n * static get defaultConfig() {\n * return {\n * url : null\n * };\n * }\n * }\n * ```\n * The `url` config is automatically inherited by classes derived from Store. By implementing\n * `get defaultConfig()`, derived classes can change the default value of inherited configs, or define new\n * configs, or both. When defining new configs, however, `configurable` is preferred.\n *\n * Config properties introduced to a class by this declaration do not participate in value merging and do\n * not get a generated setter. Config properties introduced by a base class using `configurable` can be\n * set to a different value using `defaultConfig` and in doing so, the values will be merged as appropriate\n * for `configurable`.\n *\n * @member {Object} defaultConfig\n * @static\n * @category Configuration\n * @internal\n */\n 'defaultConfig',\n /**\n * A class property getter for the default values of internal properties for this class.\n * @member {Object} properties\n * @static\n * @category Configuration\n * @internal\n */\n 'properties',\n /**\n * A class property getter for properties that will be applied to the class prototype.\n * @member {Object} prototypeProperties\n * @static\n * @category Configuration\n * @internal\n */\n 'prototypeProperties'\n ];\n }\n /**\n * Base constructor, passes arguments to {@link #function-construct}.\n * @param {...Object} [args] Usually called with a config object, but accepts any params\n * @function constructor\n * @category Lifecycle\n * @advanced\n */\n constructor(...args) {\n const\n me = this,\n C = me.constructor;\n if (me.$meta.class !== C) {\n // This will happen only once for each class. We need to call the C.$meta getter which puts $meta on our\n // prototype. Since that alone would be optimized away (and would generate IDE and lint warnings), we call\n // emptyFn and simply pass the value.\n emptyFn(C.$meta);\n }\n // Allow subclasses to have a pseudo constructor with \"this\" already set:\n me.construct(...args);\n me.afterConstruct();\n me.isConstructing = false;\n }\n /**\n * Factory version of the Base constructor. Merges all arguments to create a config object that is passed along to\n * the constructor.\n * @param {...Object} [configs] Allows passing multiple config objects\n * @returns {Core.Base} New instance\n * @private\n */\n static new(...configs) {\n configs = configs.filter(c => c);\n return new this(configs.length > 1 ? this.mergeConfigs(...configs) : configs[0]);\n }\n /**\n * Base implementation applies configuration.\n *\n * Subclasses need only implement this if they have to initialize instance specific\n * properties required by the class. Often a `construct` method is\n * unnecessary. All initialization of incoming configuration properties can be\n * done in a `set propName` implementation.\n * @param {...Object} [args] Usually called with a config object, but accepts any params\n * @category Lifecycle\n * @advanced\n */\n construct(...args) {\n // Passing null to base construct means bypass the config system and stack creation (to gain performance)\n if (args[0] !== null) {\n this.configure(...args);\n }\n this.afterConfigure();\n }\n /**\n * Destroys the provided objects by calling their {@link #function-destroy} method.\n * Skips empty values or objects that are already destroyed.\n *\n * ```javascript\n * Base.destroy(myButton, toolbar1, helloWorldMessageBox);\n * ```\n * @param {...Object} [args] Objects to be destroyed\n * @category Lifecycle\n * @advanced\n */\n static destroy(...args) {\n const shredder = object => {\n if (object?.destroy) {\n object.destroy();\n }\n else if (Array.isArray(object)) {\n object.forEach(shredder);\n }\n };\n shredder(args);\n }\n /**\n * Destroys this object.\n *\n * {@advanced}\n * This is primarily accomplished by calling {@link #function-doDestroy}, however, prior to\n * calling `doDestroy`, {@link #property-isDestroying} is set to `true`. After {@link #function-doDestroy} returns,\n * {@link #property-isDestroyed} is set to `true`.\n *\n * Do not override this method in subclasses. To provide class-specific cleanup, implement {@link #function-doDestroy}\n * instead.\n * {/@advanced}\n *\n * @category Lifecycle\n */\n destroy() {\n const\n me = this,\n { id } = me;\n // Let everyone know the object is going inert:\n me.isDestroying = true;\n // Make calling destroy() harmless:\n me.destroy = emptyFn;\n me.doDestroy();\n Object.setPrototypeOf(me, null);\n // Clear all remaining instance properties.\n for (const key in me) {\n if (key !== 'destroy' && key !== 'isDestroying') {\n delete me[key];\n }\n }\n delete me[originalConfigSymbol];\n // Let everyone know the object is inert:\n me.isDestroyed = true;\n me.id = id; // for diagnostic reasons\n }\n /**\n * This method is required to help `unused` getters to survive production build process. Some tools, like angular,\n * will remove `unused` code in production build, making our side-effected getters behind, breaking code heavily.\n * @internal\n * @param getter Getter to evaluate\n */\n _thisIsAUsedExpression(getter) {}\n static get $$name() {\n return hasOwn(this, '$name') && this.$name ||\n // _$name is filled by webpack for every class (cls._$name = '...')\n hasOwn(this, '_$name') && this._$name ||\n this.name;\n }\n get $$name() {\n return this.constructor.$$name;\n }\n /**\n * Base implementation so that all subclasses and mixins may safely call super.startConfigure.\n *\n * This is called by the Base class before setting configuration properties, but after\n * the active initial getters have been set, so all configurations are available.\n *\n * This method allows all classes in the hierarchy to force some configs to be evaluated before others.\n * @internal\n * @category Lifecycle\n * @params {Object} config The configuration object use to set the initial state.\n */\n startConfigure(config) {\n }\n /**\n * Base implementation so that all subclasses and mixins may safely call super.finishConfigure.\n *\n * This is called by the Base class before exiting the {@link #function-configure} method.\n *\n * At this point, all configs have been applied, but the `isConfiguring` property is still set.\n *\n * This method allows all classes in the hierarchy to inject functionality\n * into the config phase.\n * @internal\n * @category Lifecycle\n * @params {Object} config The configuration object use to set the initial state.\n */\n finishConfigure(config) {\n }\n /**\n * Base implementation so that all subclasses and mixins may safely call `super.afterConfigure`. This is called by the Base class after the {@link #function-configure} method has been\n * called. At this point, all configs have been applied.\n *\n * This method allows all classes in the hierarchy to inject functionality\n * either before or after the super.afterConstruct();\n * @internal\n * @category Lifecycle\n */\n afterConfigure() {\n }\n /**\n * Base implementation so that all subclasses and mixins may safely call super.afterConstruct.\n *\n * This is called by the Base class after the {@link #function-construct} method has been\n * called.\n *\n * At this point, all configs have been applied.\n *\n * This method allows all classes in the hierarchy to inject functionality\n * either before or after the super.afterConstruct();\n * @internal\n * @function afterConstruct\n * @category Lifecycle\n */\n afterConstruct() {\n }\n /**\n * Provides a way of calling callbacks which may have been specified as the _name_ of a function\n * and optionally adds scope resolution.\n *\n * For example, if the callback is specified as a string, then if it is prefixed with `'this.'`\n * then the function is resolved in this object. This is useful when configuring listeners\n * at the class level.\n *\n * If the callback name is prefixed with `'up.'` then the ownership hierarchy is queried\n * using the `owner` property until an object with the named function is present, then the\n * named function is called upon that object.\n *\n * If a named function is not found, an error is thrown. If the function should be only called when present,\n * and may not be present, add a `?` as a suffix.\n *\n * @param {String|Function} fn The function to call, or the name of the function to call.\n * @param {Object} thisObject The `this` object of the function.\n * @param {Object[]} args The argument list to pass.\n * @category Misc\n * @advanced\n */\n callback(fn, thisObject, args = emptyArray) { // Maintainer: do not make args ...args. This method may acquire more arguments\n const { handler, thisObj } = this.resolveCallback(fn, thisObject === 'this' ? this : thisObject) || emptyObject;\n return handler?.apply(thisObj, args);\n }\n resolveProperty(propertyPath) {\n let thisObj = this;\n while (thisObj) {\n if (Base.hasConfigPath(thisObj, propertyPath, true)) {\n return Objects.getPath(thisObj, propertyPath);\n }\n thisObj = thisObj.owner;\n }\n return undefined;\n }\n /**\n * Provides a way of locating callbacks which may have been specified as the _name_ of a function\n * and optionally adds scope resolution.\n *\n * For example, if the callback is specified as a string, then if it is prefixed with `'this.'`\n * then the function is resolved in this object. This is useful when configuring listeners\n * at the class level.\n *\n * If the callback name is prefixed with `'up.'` then the ownership hierarchy is queried\n * using the `owner` property until an object with the named function is present, then the\n * named function is called upon that object.\n * @param {String|Function} handler The function to call, or the name of the function to call.\n * @param {Object} thisObj The `this` object of the function.\n * @param {Boolean} [enforceCallability = true] Pass `false` if the function may not exist, and a null return value is acceptable.\n * @returns {Object} `{ handler, thisObj }`\n * @category Misc\n * @advanced\n */\n resolveCallback(handler, thisObj = this, enforceCallability = true) {\n // It's a string, we find it in its own thisObj\n if (handler?.substring) {\n if (handler.endsWith('?')) {\n enforceCallability = false;\n handler = handler.substring(0, handler.length - 1);\n }\n if (handler.startsWith('up.')) {\n handler = handler.substring(3);\n // Empty loop until we find the function owner\n for (thisObj = this.owner; thisObj && !thisObj[handler]; thisObj = thisObj.owner);\n if (!thisObj) {\n return;\n }\n }\n else if (handler.startsWith('this.')) {\n handler = handler.substring(5);\n thisObj = this;\n }\n if (!thisObj || !(thisObj instanceof Object)) {\n return;\n }\n handler = thisObj[handler];\n }\n // Any other type than string or function results in unresolved callback\n if (typeof handler === 'function') {\n return { handler, thisObj };\n }\n if (enforceCallability) {\n throw new Error(`No method named ${handler} on ${thisObj.$$name || 'thisObj object'}`);\n }\n }\n bindCallback(inHandler, inThisObj = this) {\n if (inHandler) {\n const { handler, thisObj } = this.resolveCallback(inHandler, inThisObj);\n if (handler) {\n return handler.bind(thisObj);\n }\n }\n }\n /**\n * Delays the execution of the passed function by the passed time quantum, or if the time is omitted\n * or not a number, delays until the next animation frame. Note that this will use\n * {@link Core.mixin.Delayable#function-setTimeout} || {@link Core.mixin.Delayable#function-requestAnimationFrame}\n * if this class mixes in `Delayable`, otherwise it uses the global methods. The function will\n * be called using `this` object as its execution scope.\n * @param {Function} fn The function to call on a delay.\n * @param {Number} [delay] The number of milliseconds to delay.\n * @param {String} [name] The name of delay\n * @returns {Number} The created timeout id.\n * @private\n */\n delay(fn, delay, name = fn.name || fn) {\n // Force scope on the fn if we are not a Delayable\n fn = this.setTimeout ? fn : fn.bind(this);\n const invoker = this.setTimeout ? this : globalThis;\n return invoker[typeof delay === 'number' ? 'setTimeout' : 'requestAnimationFrame'](fn, delay, name);\n }\n /**\n * Classes implement this method to provide custom cleanup logic before calling `super.doDestroy()`. The general\n * pattern is as follows:\n *\n * ```javascript\n * class Foo extends Base {\n * doDestroy() {\n * // perform custom cleanup\n *\n * super.doDestroy();\n * }\n * }\n * ```\n *\n * This method is called by {@link #function-destroy} which also prevents multiple calls from reaching `doDestroy`.\n * Prior to calling `doDestroy`, {@link #property-isDestroying} is set to `true`. Upon return, the object is fully\n * destructed and {@link #property-isDestroyed} is set to `true`.\n *\n * Do not call this method directly. Instead call {@link #function-destroy}.\n * @category Lifecycle\n * @advanced\n */\n doDestroy() {\n const\n me = this,\n { nullify } = me.$meta;\n if (nullify) {\n for (let i = 0; i < nullify.length; ++i) {\n if (me[nullify[i].field] != null) { // if backing property is null/undefined then skip\n me[nullify[i].name] = null; // else, call setter to run through change/update\n }\n }\n }\n }\n /**\n * Destroys the named properties if they have been initialized, and if they have a `destroy` method.\n * Deletes the property from this object. For example:\n *\n * this.destroyProperties('store', 'resourceStore', 'eventStore', 'dependencyStore', 'assignmentStore');\n *\n * @param {String} properties The names of the properties to destroy.\n * @internal\n * @category Lifecycle\n */\n destroyProperties(...properties) {\n const me = this;\n let key;\n for (key of properties) {\n // If the value has *not* been pulled in from the configuration object yet\n // we must not try to access it, as that will cause the property to be initialized.\n if (key in me && (!me[configuringSymbol] || !me[configuringSymbol][key])) {\n me[key]?.destroy?.();\n delete me[key];\n }\n }\n }\n /**\n * Called by the Base constructor to apply configs to this instance. This must not be called.\n * @param {Object} config The configuration object from which instance properties are initialized.\n * @private\n * @category Lifecycle\n */\n configure(config = {}) {\n const\n me = this,\n meta = me.$meta,\n { beforeConfigure } = config,\n configs = meta.configs,\n fullConfig = me.getDefaultConfiguration();\n let cfg, key, value;\n me.initialConfig = config;\n // Important flag for setters to know whether they are being called during\n // configuration when this object is not fully alive, or whether it's being reconfigured.\n me.isConfiguring = true;\n // Assign any instance properties declared by the class.\n Object.assign(me, me.getProperties());\n // Apply configuration to default from class definition. This is safe because it's either chained from or a\n // fork of the class values.\n for (key in config) {\n value = config[key];\n cfg = configs[key];\n fullConfig[key] = cfg ? cfg.merge(value, fullConfig[key], null, meta) : value;\n }\n if (beforeConfigure) {\n delete fullConfig.beforeConfigure;\n // noinspection JSValidateTypes\n beforeConfigure(me, fullConfig);\n }\n // Cache me.config for use by get config.\n me.setConfig(me[originalConfigSymbol] = fullConfig, true);\n me.isConfiguring = false;\n }\n /**\n * Returns the value of the specified config property. This is a method to allow\n * property getters to be explicitly called in a way that does not get optimized out.\n *\n * The following triggers the getter call, but optimizers will remove it:\n *\n * inst.foo; // also raises \"expression has no side-effects\" warning\n *\n * Instead, do the following to trigger a getter:\n *\n * inst.getConfig('foo');\n *\n * @param {String} name\n * @internal\n * @category Configuration\n */\n getConfig(name) {\n return this[name];\n }\n /**\n * Sets configuration options this object with all the properties passed in the parameter object.\n * Timing is taken care of. If the setter of one config is called first, and references\n * the value of another config which has not yet been set, that config will be set just\n * in time, and the *new* value will be used.\n * @param {Object} config An object containing configurations to change.\n * @category Lifecycle\n * @advanced\n */\n setConfig(config, isConstructing) {\n const\n me = this,\n wasConfiguring = me[configuringSymbol],\n configDone = wasConfiguring ? me.configDone : (me.configDone = {}),\n configs = me.$meta.configs,\n pendingLazy = me[lazyConfigsSymbol];\n let cfg, key;\n me[instancePropertiesSymbol] = {};\n // Cache configuration for use by injected property initializers.\n me[configuringSymbol] = wasConfiguring ? Object.setPrototypeOf(Object.assign({}, config), wasConfiguring) : config;\n // For each incoming non-null configuration, create a temporary getter which will\n // pull the value in from the initialConfig so that it doesn't matter in\n // which order properties are set. You can access any property at any time.\n for (key in config) {\n // Don't default null configs in unless it's a direct property of the\n // the passed configuration. When used at construct time, defaultConfigs\n // will be prototype-chained onto the config.\n if (config[key] != null || hasOwn(config, key)) {\n cfg = configs[key] || Config.get(key);\n if (!pendingLazy?.has(key)) {\n cfg.defineInitter(me, config[key]);\n }\n if (!isConstructing) {\n configDone[key] = false;\n }\n // else if (cfg.lazy) {\n // // This was done originally to prevent our for-loop below from poking the value on the instance\n // // at this stage. It was removed since it confused triggerConfig, and it just isn't true that the\n // // lazy config is done...\n // configDone[key] = true;\n // }\n }\n else {\n configDone[key] = true;\n }\n }\n if (isConstructing) {\n me.startConfigure(config);\n }\n // Set all our properties from the config object.\n // If one of the properties needs to access a property that has not\n // yet been set, the above temporary property will pull it through.\n // Can't use Object.assign because that only uses own properties.\n // config value blocks are prototype chained subclass->superclass\n for (key in config) {\n // Only push the value through if the property initializer is still present.\n // If it gets triggered to pull the configuration value in, it deleted itself.\n // Only skip lazy configs if we're being called from the constructor.\n if (!configDone[key] && !(isConstructing && configs[key]?.lazy)) {\n me[key] = config[key];\n }\n }\n if (wasConfiguring) {\n me[configuringSymbol] = wasConfiguring;\n }\n else {\n delete me[configuringSymbol];\n }\n if (isConstructing) {\n me.finishConfigure(config);\n }\n return me;\n }\n /**\n * Returns `true` if this instance has a non-null value for the specified config. This will not activate a lazy\n * config.\n *\n * @param {String} name The name of the config property.\n * @returns {Boolean}\n * @internal\n */\n hasConfig(name) {\n const\n me = this,\n config = me[configuringSymbol];\n return Boolean(\n (me['_' + name] != null) || // value has been assigned to backing property\n me[lazyConfigsSymbol]?.get(name) != null || // a lazy value is pending\n (\n // config value has not been assigned but will be\n !me.configDone[name] &&\n config && (config[name] != null || hasOwn(config, name))\n )\n );\n }\n /**\n * Determines if the specified config property exists in an instance of {@link Core.Base}\n * @param {Object} object Object to check path on\n * @param {String} path Dot-separated path, e.g. 'object.childObject.someKey'\n * @returns {Boolean}\n * @internal\n */\n static hasConfigPath(object, path) {\n return path.split('.').every(key => {\n // We check for config presence if the property is a config, *and* there has not been\n // a new getter injected - the getter is the config's getter.\n const\n config = object?.$meta?.configs?.[key],\n isConfig = config && config.descriptor.get === Objects.getPropertyDescriptor(object, key)?.get;\n // If it is a \"configurable\" object, we need to use hasConfig,\n // otherwise we just use \"key in\"\n if (isConfig ? object.hasConfig(key) : (key in object)) {\n object = object[key];\n return Object !== undefined;\n }\n return false;\n });\n }\n /**\n * Returns the value of an uningested config *without* ingesting the config or transforming\n * it from its raw value using its `changeXxxxx` method.\n *\n * @param {String} name The name of the config property.\n * @returns {*} The raw incoming config value.\n * @internal\n */\n peekConfig(name) {\n const\n me = this,\n lazyConfig = me[lazyConfigsSymbol],\n config = me[configuringSymbol];\n // It's waiting in the lazy configs\n if (lazyConfig?.has(name)) {\n return lazyConfig.get(name);\n }\n if (config && (name in config)) {\n // It's been read in, so use the current value\n if (me.configDone[name]) {\n return me[name];\n }\n if (config[name] != null || hasOwn(config, name)) {\n return config[name];\n }\n }\n }\n /**\n * Ensures that the specified config is initialized if it is needed. If there is a config value specified, and it\n * was initialized by this call, this method returns `true`. If there was a config value specified, and it was\n * already initialized, this method returns `false`. If there was no value specified for the given config, this\n * method returns `null`.\n *\n * This is not the same as just reading the property, because some property getters exist that do not actually just\n * read the config value back, but instead produce some result. Reading such properties to incidentally trigger a\n * possible config initializer can lead to incorrect results. For example, the Combo items config.\n *\n * @param {String} name The name of the config property.\n * @returns {Boolean}\n * @internal\n */\n triggerConfig(name) {\n const\n me = this,\n { configDone } = me,\n lazyConfig = me[lazyConfigsSymbol],\n config = me[configuringSymbol],\n triggered = (lazyConfig?.has(name) || (config && (config[name] != null || hasOwn(config, name))))\n ? !configDone[name] : null;\n if (triggered) {\n me.getConfig(name);\n }\n return triggered;\n }\n /**\n * This call will activate any pending {@link Core.Config#config-lazy} configs that were assigned a string value\n * equal to the `group` parameter.\n *\n * @param {String} group The config property group as defined by a matching {@link Core.Config#config-lazy} value.\n * @returns {String[]} The names of any configs triggered by this call or `null` if no configs were triggered.\n * @internal\n */\n triggerConfigs(group) {\n const\n me = this,\n configs = me.$meta.configs,\n lazyConfigs = me[lazyConfigsSymbol],\n triggered = lazyConfigs ? [...lazyConfigs.keys()].filter(k => configs[k].lazy === group) : emptyArray;\n for (const key of triggered) {\n me.triggerConfig(key);\n }\n return triggered.length ? triggered : null;\n }\n onConfigChange() {} // declared above because lint/IDE get angry about not declaring the args...\n /**\n * This method is called when any config changes.\n * @param {Object} info Object containing information regarding the config change.\n * @param {String} info.name The name of the config that changed.\n * @param {*} info.value The new value of the config.\n * @param {*} info.was The previous value of the config.\n * @param {Core.Config} info.config The `Config` object for the changed config property.\n * @method onConfigChange\n * @internal\n * @category Configuration\n */\n /**\n * Returns a *copy* of the full configuration which was used to configure this object.\n * @property {Object}\n * @category Lifecycle\n * @readonly\n * @advanced\n */\n get config() {\n const\n result = {},\n myConfig = this[originalConfigSymbol];\n // The configuration was created as a prototype chain of the class hierarchy's\n // defaultConfig values hanging off a copy of the initialConfig object, so\n // we must loop and copy since Object.assign only copies own properties.\n for (const key in myConfig) {\n result[key] = myConfig[key];\n }\n return result;\n }\n // region Extract config\n static processConfigValue(currentValue, options) {\n if (currentValue === globalThis) {\n return globalThis;\n }\n else if (Array.isArray(currentValue)) {\n return currentValue.map(v => Base.processConfigValue(v, options));\n }\n // Not using isBase to avoid classes (modelClass for example)\n else if (currentValue instanceof Base) {\n if (options.visited.has(currentValue)) {\n return;\n }\n return currentValue.getCurrentConfig(options);\n }\n // appendTo, floatRoot etc\n else if (currentValue instanceof HTMLElement || currentValue instanceof DocumentFragment) {\n return null;\n }\n // Go deeply into objects, might have instances of our classes in them\n else if (Objects.isObject(currentValue)) {\n const result = {};\n for (const key in currentValue) {\n // Only step \"down\", not \"up\"\n if (key !== 'owner') {\n result[key] = Base.processConfigValue(currentValue[key], options);\n }\n }\n return result;\n }\n return currentValue;\n };\n // Recursively get the value of a config. Only intended to be called by getCurrentConfig()\n getConfigValue(name, options) {\n const\n me = this,\n lazyConfigs = me[lazyConfigsSymbol];\n // Do not trigger lazy configs\n if (!me.$meta.configs[name]?.lazy) {\n return Base.processConfigValue(me[name], options);\n }\n // Instead pull their initial config in\n if (lazyConfigs?.has(name)) {\n return Base.processConfigValue(lazyConfigs.get(name), options);\n }\n }\n // Allows removing / adding configs before values are extracted\n preProcessCurrentConfigs() {}\n // Extract the current values for all initially used configs, in a format that can be used to create a new instance.\n // Not intended to be called by any other code than getConfigString()\n getCurrentConfig(options = { }) {\n const\n me = this,\n configs = options.configs === 'all' ? me.config : Objects.clone(me.initialConfig),\n skip = options.skip || { },\n visited = options.visited || (options.visited = new Set()),\n depth = options.depth || (options.depth = 0),\n result = {};\n if (visited.has(me)) {\n return undefined;\n }\n visited.add(me);\n this.preProcessCurrentConfigs(configs);\n for (const name in configs) {\n if (skip[name]) {\n continue;\n }\n const value = me.getConfigValue(name, { ...options, depth : depth + 1 });\n if (value !== undefined) {\n result[name] = value;\n }\n }\n return result;\n }\n // Extract the current values for all initially used configs and convert them to a JavaScript string\n getConfigString(options = {}) {\n return StringHelper.toJavaScriptString(this.getCurrentConfig(options));\n }\n // Experimental helper function, extracts the currently used configs and wraps them as an app, returning code as a\n // string.\n //\n // This function is intended to simplify creating test cases for issue reporting on Bryntum's support forum.\n //\n getTestCase(options = {}) {\n //\n const Product = this.isGantt ? 'Gantt' : this.isSchedulerPro ? 'SchedulerPro' : this.isCalendar ? 'Calendar' : this.isScheduler ? 'Scheduler' : this.isGrid ? 'Grid' : this.isTaskBoard ? 'TaskBoard' : null;\n if (Product) {\n const\n product = Product.toLowerCase(),\n // bundlePath = `https://bryntum.com/dist/${product}/build/${product}.module.js`,\n bundlePath = `../../build/${product}.module.js`;\n let preamble, postamble;\n if (options.import === 'static') {\n preamble =\n `import * as module from \"${bundlePath}\";` +\n 'Object.assign(window, module);'; // for (const c in module) window[c] = module[c];\n postamble = '';\n }\n else {\n preamble = `import(\"${bundlePath}\").then(module => { Object.assign(window, module);\\n`;\n postamble = '});';\n }\n const version = VersionHelper.getVersion(product);\n if (version) {\n preamble += `\\nconsole.log('${Product} ${version}');\\n`;\n }\n // De-indented on purpose\n return `${preamble} \\nconst ${product} = new ${Product}(${this.getConfigString(options)});\\n${postamble}`;\n }\n //\n }\n /**\n * Experimental helper function, extracts the currently used configs and wraps them as an app, downloading the\n * resulting JS file.\n *\n * This function is intended to simplify creating test cases for issue reporting on Bryntum's support forum.\n * @category Misc\n */\n downloadTestCase(options = {}) {\n options.output = 'return';\n const app = this.getTestCase(options);\n BrowserHelper.download(`app.js`, 'data:application/javascript;charset=utf-8,' + escape(app));\n }\n //endregion\n /**\n * Registers this class type with its Factory\n * @category Misc\n * @advanced\n */\n static initClass() {\n return this.$meta.class;\n }\n /**\n * The class's {@link #property-$meta-static meta} object.\n * @member {Object} $meta\n * @internal\n * @category Misc\n */\n /**\n * An object owned by this class that does not share properties with its super class.\n *\n * This object may contain other properties which are added as needed and are not documented here.\n *\n * @property {Object} $meta The class meta object.\n * @property {Function} $meta.class The class constructor that owns the meta object.\n * @property {Object} $meta.super The `$meta` object for the super class. This is `null` for `Base`.\n * @property {Object} $meta.config The object holding the default configuration values for this class.\n * @property {Object} $meta.configs An object keyed by config name that holds the defined configs for the class.\n * The value of each property is a {@link Core/Config} instance.\n * @property {Boolean} $meta.forkConfigs This will be `true` if the default configuration values for this class\n * (in the `config` property of the meta object) must be forked to avoid object sharing, or if the object can be\n * passed to `Object.create()` for efficiency.\n * @property {Function[]} $meta.hierarchy The array of classes in the ancestry of this class. This will start with\n * `Base` at index 0 and ends with this class.\n * @property {Function[]} $meta.properties The array of classes that define a \"static get properties()\" getter.\n * @internal\n * @static\n * @category Misc\n */\n static get $meta() {\n if (!hasOwn(this, metaSymbol)) {\n const meta = this[metaSymbol] = new MetaClass();\n meta.class = this;\n this.setupClass(meta);\n return meta;\n }\n return this[metaSymbol];\n }\n /**\n * This optional class method is called when a class is mixed in using the {@link #function-mixin-static mixin()}\n * method.\n * @internal\n */\n static onClassMixedIn() {\n // empty\n }\n /**\n * Returns the merge of the `baseConfig` and `config` config objects based on the configs defined by this class.\n * @param {Object} baseConfig The base config or defaults.\n * @param {...Object} configs One or more config objects that takes priority over `baseConfig`.\n * @returns {Object}\n * @internal\n */\n static mergeConfigs(baseConfig, ...configs) {\n const\n classConfigs = this.$meta.configs,\n result = Objects.clone(baseConfig) || {};\n let config, i, key, value;\n for (i = 0; i < configs.length; ++i) {\n config = configs[i];\n if (config) {\n for (key in config) {\n value = config[key];\n if (classConfigs[key]) {\n value = classConfigs[key].merge(value, result[key]);\n }\n else if (result[key] && value) {\n value = Config.merge(value, result[key]);\n }\n result[key] = value;\n }\n }\n }\n return result;\n }\n /**\n * Applies one or more `mixins` to this class and returns the produced class constructor.\n *\n * For example, instead of writing this:\n * ```\n * class A extends Delayable(Events(Localizable(Base))) {\n * // ...\n * }\n * ```\n *\n * Using this method, one would write this:\n * ```\n * class A extends Base.mixin(Localizable, Events, Delayable) {\n * // ...\n * }\n * ```\n * If one of the mixins specified has already been mixed into the class, it will be ignored and not mixed in a\n * second time.\n * @param {...Function} mixins\n * @returns {Function}\n * @category Misc\n * @advanced\n */\n static mixin(...mixins) {\n // Starting w/the first class C = this\n let C = this,\n i;\n // wrap each class C using mixins[i] to produce the next class\n for (i = 0; i < mixins.length; ++i) {\n const\n mixin = mixins[i],\n // Grab or create a unique Symbol for this mixin so we can tell if we've already mixed it in\n tag = mixin[mixinTagSymbol] || (mixin[mixinTagSymbol] = Symbol('mixinTag'));\n if (C[tag]) {\n continue;\n }\n C = mixin(C);\n C[tag] = true; // properties on the constructor are inherited to subclass constructors...\n if (hasOwn(C, 'onClassMixedIn')) {\n C.onClassMixedIn();\n }\n }\n return C;\n }\n /**\n * This method is called only once for any class. This can occur when the first instance is created or when the\n * `$meta` object is first requested.\n * @param {Object} meta The `$meta` object for the class.\n * @internal\n * @category Misc\n */\n static setupClass(meta) {\n const\n cls = meta.class,\n // Trigger setupClass on the super class (if it has yet to happen):\n base = getPrototypeOf(cls).$meta,\n name = cls.$$name,\n names = base.names,\n proto = cls.prototype;\n defineProperty(proto, '$meta', {\n value : meta\n });\n Object.assign(meta, {\n super : base,\n config : Object.create(base.config),\n configs : Object.create(base.configs),\n declarables : base.declarables,\n forkConfigs : base.forkConfigs,\n hierarchy : Object.freeze([...base.hierarchy, cls]),\n names : names.includes(name) ? names : Object.freeze([...names, name]),\n properties : base.properties,\n nullify : base.nullify?.slice()\n });\n if (names !== meta.names) {\n const\n isName = `is${name}`,\n defineIsProperty = obj => {\n if (!hasOwn(obj, isName)) {\n defineProperty(obj, isName, {\n get() {\n return true;\n }\n });\n }\n };\n defineIsProperty(proto);\n defineIsProperty(cls);\n }\n // NOTE: we always use meta.declarables because setupDeclarable() can replace the array on the meta object\n // when new declarable properties are added...\n for (let decl, setupName, i = 0; i < meta.declarables.length; ++i) {\n decl = meta.declarables[i];\n if (hasOwn(cls, decl)) {\n setupName = setupNames[decl] || (setupNames[decl] = `setup${StringHelper.capitalize(decl)}`);\n cls[setupName](cls, meta);\n }\n }\n /* Add slash to the front of this line to enable the diagnostic block:\n /**/\n }\n /**\n * This method is called as part of `setupClass()`. It will process the `configurable()` return object and the\n * `defaultConfig` return object.\n * @param {Object} meta The `meta` object for this class.\n * @param {Object} configs The config definition object.\n * @param {Boolean} simple `true` when processing `defaultConfig` and `false` when processing `configurable`.\n * @private\n * @category Configuration\n */\n static setupConfigs(meta, configs, simple) {\n const\n classConfigValues = meta.config,\n classConfigs = meta.configs,\n cls = meta.class,\n superMeta = meta.super;\n let { nullify } = meta,\n cfg, defaultValue, options, setDefault, value, wasNullify;\n for (const name in configs) {\n value = configs[name];\n if (simple) {\n // Using \"defaultConfig\"\n if (!(cfg = classConfigs[name])) {\n cfg = Config.get(name, defaultConfigOptions);\n }\n else {\n // The property may be declared in a base class using configurable(), so it may have special\n // merge processing:\n value = cfg.merge(value, classConfigValues[name], meta, superMeta);\n }\n /* Add slash to the front of this line to enable the diagnostic block:\n /**/\n }\n else {\n // Using \"configurable\"\n defaultValue = options = setDefault = undefined;\n if (value && typeof value === 'object' && '$config' in value) {\n options = value.$config;\n if (options && !Objects.isObject(options)) {\n options = Objects.createTruthyKeys(options);\n }\n setDefault = 'default' in value;\n defaultValue = setDefault ? value.default : defaultValue;\n value = value.value;\n }\n if (!(cfg = classConfigs[name])) {\n cfg = Config.get(name, options);\n cfg.define(cls.prototype);\n setDefault = !(cfg.field in cls.prototype); // reduce object shape changes (helps JIT)\n wasNullify = false;\n }\n else {\n wasNullify = cfg.nullify;\n if (options) {\n // Defined by a base class, but maybe being adjusted by derived.\n cfg = cfg.extend(options);\n // In the future, we may need to redefine the property here if options affect the descriptor (such\n // as event firing)\n }\n value = cfg.merge(value, classConfigValues[name], meta, superMeta);\n }\n if (setDefault) {\n cfg.setDefault(cls, defaultValue);\n }\n if (cfg.nullify && !wasNullify) {\n (nullify || (nullify = (meta.nullify || (meta.nullify = [])))).push(cfg);\n }\n }\n // If any default properties are *mutable* Objects or Array we need to clone them.\n // so that instances do not share configured values.\n if (value && (Objects.isObject(value) || Array.isArray(value)) && !Object.isFrozen(value)) {\n meta.forkConfigs = true;\n }\n classConfigs[name] = cfg;\n classConfigValues[name] = value;\n }\n }\n static setupConfigurable(cls, meta) {\n cls.setupConfigs(meta, cls.configurable, false);\n }\n static setupDefaultConfig(cls, meta) {\n cls.setupConfigs(meta, cls.defaultConfig, true);\n }\n static setupDeclarable(cls, meta) {\n const declarable = cls.declarable;\n let all = meta.declarables,\n forked, i;\n for (i = 0; i < declarable.length; ++i) {\n if (!all.includes(declarable[i])) {\n if (!forked) {\n meta.declarables = forked = all = all.slice();\n }\n all.push(declarable[i]);\n }\n }\n }\n static setupProperties(cls, meta) {\n meta.properties = meta.super.properties.slice();\n meta.properties.push(cls);\n Object.freeze(meta.properties);\n }\n static setupPrototypeProperties(cls) {\n Object.assign(cls.prototype, cls.prototypeProperties);\n }\n /**\n * Gets the full {@link #property-defaultConfig-static} block for this object's entire inheritance chain\n * all the way up to but not including {@link Core.Base}\n * @returns {Object} All default config values for this class.\n * @private\n * @category Configuration\n */\n getDefaultConfiguration() {\n return this.constructor.getDefaultConfiguration();\n }\n /**\n * Gets the full {@link #property-defaultConfig-static} block for the entire inheritance chain for this class\n * all the way up to but not including {@link Core.Base}\n * @returns {Object} All default config values for this class.\n * @private\n * @category Configuration\n */\n static getDefaultConfiguration() {\n const\n meta = this.$meta,\n config = meta.forkConfigs ? Base.fork(meta.config) : Object.create(meta.config);\n if (VersionHelper.isTestEnv && BrowserHelper.isBrowserEnv &&\n config.testConfig && globalThis.__applyTestConfigs) {\n for (const o in config.testConfig) {\n config[o] = config.testConfig[o];\n }\n }\n return config;\n }\n static fork(obj) {\n let ret = obj,\n key, value;\n if (obj && Objects.isObject(obj) && !Object.isFrozen(obj)) {\n ret = Object.create(obj);\n for (key in obj) {\n value = obj[key];\n if (value) {\n if (Objects.isObject(value)) {\n ret[key] = Base.fork(value);\n }\n else if (Array.isArray(value)) {\n ret[key] = value.slice();\n }\n }\n }\n }\n return ret;\n }\n /**\n * Gets the full {@link #property-properties-static} block for this class's entire inheritance chain\n * all the way up to but not including {@link Core.Base}\n * @returns {Object} All default config values for this class.\n * @private\n * @category Configuration\n */\n getProperties() {\n const\n // The meta.properties array is an array of classes that define \"static get properties()\"\n hierarchy = this.$meta.properties,\n result = {};\n for (let i = 0; i < hierarchy.length; i++) {\n // Gather the class result in top-down order so that subclass properties override superclass properties\n Object.assign(result, hierarchy[i].properties);\n }\n return result;\n }\n static get superclass() {\n return getPrototypeOf(this);\n }\n /**\n * Used by the Widget and GridFeatureManager class internally. Returns the class hierarchy of this object\n * starting from the `topClass` class (which defaults to `Base`).\n *\n * For example `classHierarchy(Widget)` on a Combo would yield `[Widget, Field, TextField, PickerField, Combo]`\n * @param {Function} [topClass] The topmost class constructor to start from.\n * @returns {Function[]} The class hierarchy of this instance.\n * @private\n * @category Configuration\n */\n classHierarchy(topClass) {\n const\n hierarchy = this.$meta.hierarchy,\n index = topClass ? hierarchy.indexOf(topClass) : 0;\n return (index > 0) ? hierarchy.slice(index) : hierarchy;\n }\n /**\n * Checks if an obj is of type using object's $$name property and doing string comparison of the property with the\n * type parameter.\n *\n * @param {String} type\n * @returns {Boolean}\n * @category Misc\n * @advanced\n */\n static isOfTypeName(type) {\n return this.$meta.names.includes(type);\n }\n /**\n * Removes all event listeners that were registered with the given `name`.\n * @param {String|Symbol} name The name of the event listeners to be removed.\n * @category Events\n * @advanced\n */\n detachListeners(name) {\n let detachers = this.$detachers;\n detachers = detachers?.[name];\n if (detachers) {\n while (detachers.length) {\n detachers.pop()();\n }\n }\n }\n /**\n * Tracks a detacher function for the specified listener name.\n * @param {String} name The name assigned to the associated listeners.\n * @param {Function} detacher The detacher function.\n * @private\n */\n trackDetacher(name, detacher) {\n const\n detachers = this.$detachers || (this.$detachers = {}),\n bucket = detachers[name] || (detachers[name] = []);\n bucket.push(detacher);\n }\n /**\n * Removes all detacher functions for the specified `Events` object. This is called\n * by the `removeAllListeners` method on that object which is typically called by its\n * `destroy` invocation.\n * @param {Core.mixin.Events} eventer The `Events` instance to untrack.\n * @private\n */\n untrackDetachers(eventer) {\n const detachers = this.$detachers;\n if (detachers) {\n for (const name in detachers) {\n const bucket = detachers[name];\n for (let i = bucket.length; i-- > 0; /* empty */) {\n if (bucket[i].eventer === eventer) {\n bucket.splice(i, 1);\n }\n }\n }\n }\n }\n}\nconst proto = Base.prototype;\n// Informs the standard config setter there is no need to call this fn:\nproto.onConfigChange.$nullFn = emptyFn.$nullFn = true;\nBase[metaSymbol] = proto.$meta = newMeta({\n class : Base,\n config : Object.freeze({}),\n configs : Object.create(null),\n declarables : Base.declarable,\n forkConfigs : false,\n hierarchy : Object.freeze([Base]),\n names : Object.freeze(['Base']),\n nullify : null,\n properties : Object.freeze([]),\n super : null\n});\n// Avoid some object shape changes:\nObject.assign(proto, {\n $detachers : null,\n configObserver : null,\n /**\n * This property is set to `true` before the `constructor` returns.\n * @member {Boolean}\n * @readonly\n * @category Lifecycle\n * @advanced\n */\n isConstructing : true,\n /**\n * This property is set to `true` by {@link #function-destroy} after destruction.\n *\n * It is also one of the few properties that remains on the object after returning from `destroy()`. This property\n * is often checked in code paths that may encounter a destroyed object (like some event handlers) or in the\n * destruction path during cleanup.\n *\n * @member {Boolean}\n * @readonly\n * @category Lifecycle\n */\n isDestroyed : false,\n /**\n * This property is set to `true` on entry to the {@link #function-destroy} method. It remains on the objects after\n * returning from `destroy()`. If {@link #property-isDestroyed} is `true`, this property will also be `true`, so\n * there is no need to test for both (for example, `comp.isDestroying || comp.isDestroyed`).\n * @member {Boolean}\n * @readonly\n * @category Lifecycle\n * @advanced\n */\n isDestroying : false\n});\nBase.emptyFn = emptyFn;\nVersionHelper.setVersion('core', '5.6.6');\nBase._$name = 'Base';", "/**\n * @module Core/helper/ArrayHelper\n */\n/**\n * Helper with useful functions for handling Arrays\n * @internal\n */\nexport default class ArrayHelper {\n static clean(array) {\n return array.reduce((res, item) => {\n if (item !== null && item !== undefined && !(Array.isArray(item) && item.length === 0) && item !== '') res.push(item);\n return res;\n }, []);\n }\n /**\n * Similar to [`Array.from()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from)\n * this method creates an array from an `iterable` object. Where `Array.from()` accepts a mapper function as the\n * second argument, this method accepts a `filter` function as its second argument. If a mapper function is also\n * needed, it can be passed as the third argument. Unlike `Array.from()`, if this method is passed `null`, it will\n * return an empty array.\n * @param {Array} iterable The iterable object to convert (must support `for-of` loop iteration).\n * @param {Function} [filter] A function to apply to each item of the `iterable` which must return a truthy value\n * to include that item in the resulting array.\n * @param {Function} [map] A function to apply to each item of the `iterable` that returns the actual value to put\n * into the returned array. If a `filter` is also supplied, this method is only called for those items that pass\n * the filter test.\n * @returns {Array}\n */\n static from(iterable, filter, map) {\n const array = [];\n if (iterable) {\n for (const it of iterable) {\n if (!filter || filter(it)) {\n array.push(map ? map(it) : it);\n }\n }\n }\n return array;\n }\n /**\n * Remove one or more items from an array\n * @param {Array} array Array to remove from\n * @param {Object[]|Set} items One or more items to remove, or one Set containing items to remove\n * @returns {Boolean} Returns true if any item was removed\n */\n static remove(array, ...items) {\n let index,\n item,\n removed = false;\n items = items[0] instanceof Set ? [...items[0]] : items;\n for (let i = 0; i < items.length; i++) {\n item = items[i];\n if ((index = array.indexOf(item)) !== -1) {\n array.splice(index, 1);\n removed = true;\n }\n }\n return removed;\n }\n /**\n * Calculates the insertion index of a passed object into the passed Array according\n * to the passed comparator function. Note that the passed Array *MUST* already be ordered.\n * @param {Object} item The item to calculate the insertion index for.\n * @param {Array} array The array into which the item is to be inserted.\n * @param {Function} comparatorFn The comparison function. Must return -1 or 0 or 1.\n * @param {Object} comparatorFn.lhs The left object to compare.\n * @param {Object} comparatorFn.rhs The right object to compare.\n * @param {Number} index The possible correct index to try first before a binary\n * search is instigated.\n * @internal\n */\n static findInsertionIndex(item, array, comparatorFn = this.lexicalCompare, index) {\n const len = array.length;\n let beforeCheck, afterCheck;\n if (index < len) {\n beforeCheck = index > 0 ? comparatorFn(array[index - 1], item) : 0;\n afterCheck = index < len - 1 ? comparatorFn(item, array[index]) : 0;\n if (beforeCheck < 1 && afterCheck < 1) {\n return index;\n }\n }\n return this.binarySearch(array, item, comparatorFn);\n }\n /**\n * Similar to the native `Array.find()` call, but this finds the *last* element in the array for which\n * the passed function returns a truthy value.\n * @param {Object[]} array The array to find in.\n * @param {Function} fn The testing function.\n * @param {Object} [thisObj] The scope (`this` reference) in which to call the function.\n */\n static findLast(array, fn, thisObj) {\n for (let { length } = array, i = length - 1; i >= 0; i--) {\n if (fn.call(thisObj, array[i], i, array)) {\n return array[i];\n }\n }\n }\n /**\n * This method returns the index that a given item would be inserted into the\n * given (sorted) `array`. Note that the given `item` may or may not be in the\n * array. This method will return the index of where the item *should* be.\n *\n * For example:\n *\n * var array = [ 'A', 'D', 'G', 'K', 'O', 'R', 'X' ];\n * var index = ArrayHelper.binarySearch(array, 'E');\n *\n * console.log('index: ' + index);\n * // logs \"index: 2\"\n *\n * array.splice(index, 0, 'E');\n *\n * console.log('array : ' + array.join(''));\n * // logs \"array: ADEGKORX\"\n *\n * @param {Object[]} array The array to search.\n * @param {Object} item The item that you want to insert into the `array`.\n * @param {Number} [begin=0] The first index in the `array` to consider.\n * @param {Number} [end=array.length] The index that marks the end of the range\n * to consider. The item at this index is *not* considered.\n * @param {Function} [compareFn] The comparison function that matches the sort\n * order of the `array`. The default `compareFn` compares items using less-than\n * and greater-than operators.\n * @returns {Number} The index for the given item in the given array based on\n * the passed `compareFn`.\n */\n static binarySearch(array, item, begin = 0, end = array.length, compareFn = this.lexicalCompare) {\n const length = array.length;\n let middle, comparison;\n if (begin instanceof Function) {\n compareFn = begin;\n begin = 0;\n }\n else if (end instanceof Function) {\n compareFn = end;\n end = length;\n }\n --end;\n while (begin <= end) {\n middle = (begin + end) >> 1;\n comparison = compareFn(item, array[middle]);\n if (comparison >= 0) {\n begin = middle + 1;\n }\n else if (comparison < 0) {\n end = middle - 1;\n }\n }\n return begin;\n }\n magnitudeCompare(lhs, rhs) {\n return (lhs < rhs) ? -1 : ((lhs > rhs) ? 1 : 0);\n }\n lexicalCompare(lhs, rhs) {\n lhs = String(lhs);\n rhs = String(rhs);\n return (lhs < rhs) ? -1 : ((lhs > rhs) ? 1 : 0);\n }\n /**\n * Similar to Array.prototype.fill(), but constructs a new array with the specified item count and fills it with\n * clones of the supplied item.\n * @param {Number} count Number of entries to create\n * @param {Object|Array} itemOrArray Item or array of items to clone (uses object spread to create shallow clone)\n * @param {Function} [fn] An optional function that is called for each item added, to allow processing\n * @returns {Array} A new populated array\n */\n static fill(count, itemOrArray = {}, fn = null) {\n const\n result = [],\n items = Array.isArray(itemOrArray) ? itemOrArray : [itemOrArray];\n for (let i = 0; i < count; i++) {\n for (const item of items) {\n // Using object spread here forces us to use more babel plugins and will make\n // react_typescript demo very difficult to setup\n const processedItem = Object.assign({}, item);\n if (fn) {\n fn(processedItem, i);\n }\n result.push(processedItem);\n }\n }\n return result;\n }\n /**\n * Populates an array with the return value from `fn`.\n * @param {Number} count Number of entries to create\n * @param {Function} fn A function that is called `count` times, return value is added to array\n * @param {Number} fn.index Current index in the array\n * @privateparam {Boolean} [oneBased] Add 1 to the index before calling the fn (making it 1 based)\n * @returns {Array} A new populated array\n */\n static populate(count, fn, oneBased = false) {\n const items = [];\n for (let i = 0; i < count; i++) {\n items.push(fn(i + (oneBased ? 1 : 0)));\n }\n return items;\n }\n /**\n * Pushes `item` on to the `array` if not already included\n * @param {Array} array Array to push to\n * @param {...Object} items Item(s) to push if not already included\n */\n static include(array, ...items) {\n for (const item of items) {\n if (!array.includes(item)) {\n array.push(item);\n }\n }\n }\n /**\n * Returns a new array with the unique items from the supplied array.\n * @param {Array} array Input array\n * @returns {Array} New array with unique items\n */\n static unique(array) {\n return [...new Set(array)];\n }\n // Kept for future reference : Wanted to create an indexer on Stores.\n static allowNegative(array) {\n // From https://github.com/sindresorhus/negative-array\n return new Proxy(array, {\n get(target, name, receiver) {\n if (typeof name !== 'string') {\n return Reflect.get(target, name, receiver);\n }\n const index = Number(name);\n if (Number.isNaN(index)) {\n return Reflect.get(target, name, receiver);\n }\n return target[index < 0 ? target.length + index : index];\n },\n set(target, name, value, receiver) {\n if (typeof name !== 'string') {\n return Reflect.set(target, name, value, receiver);\n }\n const index = Number(name);\n if (Number.isNaN(index)) {\n return Reflect.set(target, name, value, receiver);\n }\n target[index < 0 ? target.length + index : index] = value;\n return true;\n }\n });\n }\n static delta(a, b, useRelativeNaming = false) {\n // Nicer syntax but about 40% slower (an extra iteration)\n // const\n // onlyInA = a.filter(item => !b.includes(item)),\n // onlyInB = b.filter(item => !a.includes(item)),\n // inBoth = a.filter(item => b.includes(item));\n // Quick bailout for nonexisting target array\n if (!b) {\n return useRelativeNaming\n ? { toAdd : a, toRemove : [], toKeep : [] }\n : { onlyInA : a, onlyInB : [], inBoth : [] };\n }\n const\n onlyInA = [],\n onlyInB = [],\n inBoth = new Set(),\n bSet = new Set(b);\n for (let i = 0; i < a.length; i++) {\n const item = a[i];\n if (bSet.has(item)) {\n inBoth.add(item);\n }\n else {\n onlyInA.push(item);\n }\n }\n for (let i = 0; i < b.length; i++) {\n const item = b[i];\n if (!inBoth.has(item)) {\n onlyInB.push(item);\n }\n }\n if (useRelativeNaming) {\n return { toAdd : onlyInA, toRemove : onlyInB, toKeep : inBoth };\n }\n return { onlyInA, onlyInB, inBoth : [...inBoth] };\n }\n /**\n * Returns the passed object wrapped in an array. Special handling of the following cases:\n * * Passing an array returns it as is\n * * Passing a `Set` returns it converted to an Array\n * * Passing `null`/`undefined` returns the passed value\n *\n * ```javascript\n * const records = ArrayHelper.asArray(record);\n *\n * // { id : 1 } -> [{ id : 1 }]\n * // [{ id : 1 }] -> [{ id : 1 }]\n * ```\n *\n * @param {*} arrayOrObject\n * @returns {Array|null}\n * @internal\n */\n static asArray(arrayOrObject) {\n if (arrayOrObject == null) {\n return arrayOrObject;\n }\n if (arrayOrObject instanceof Set) {\n return Array.from(arrayOrObject);\n }\n return Array.isArray(arrayOrObject) ? arrayOrObject : [arrayOrObject];\n }\n /**\n * Identity function that returns its input.\n * @param {*} Any value\n * @returns {*} The input value\n * @internal\n */\n static identity(x) {\n return x;\n }\n /**\n * Transform an array into a key:value dictionary using the specified\n * key and value getters. Does not group values, so only one result will\n * appear in the output for a given key.\n *\n * ```javascript\n * const input = [{\n * id: '1',\n * other: 'one'\n * },{\n * id: '2',\n * other: 'two'\n * }];\n *\n * keyBy(input, rec => rec.id)\n *\n * // {\n * // '1': { id: '1', other: 'one' },\n * // '2': { id: '2', other: 'two' }\n * // }\n * ```\n *\n * @param {Array} array Array from which to build dictionary\n * @param {Function|String} getKey Function to produce the key for a given array entry, or a string property name to read\n * @param {Function} getValue Optional function to transform array elements. Defaults to returning the element itself\n * @returns {Object} A key->value dictionary with keys as returned by `getKey` and values returned by `getValue`\n * @internal\n */\n static keyBy(array, keyGetter, valueGetter = ArrayHelper.identity) {\n const\n getKey = typeof keyGetter === 'string' ? o => o?.[keyGetter] : keyGetter,\n getValue = typeof valueGetter === 'string' ? o => o?.[valueGetter] : valueGetter;\n return array.reduce((dict, next) => {\n dict[getKey(next)] = getValue(next);\n return dict;\n }, {});\n }\n /**\n * Combines provided arrays of by aggregating their element values.\n * For example the below code sums up numeric elements of the arrays:\n *\n * ```javascript\n * ArrayHelper.aggregate(\n * [\n * [0, 1, 2, 33]\n * [10, 1, -1],\n * [100, 1, -1]\n * ],\n * entry => entry || 0, // \"|| 0\" here to make it work for different array sizes\n * (aggregated, entry) => aggregated + entry, // aggregate by summing up\n * () => 0 //initial value is zero\n * );\n *\n * // returns [111, 3, 0, 33] array\n * ```\n *\n * @param {Array[]} arrays Array to combine\n * @param {Function} getEntryValueFn Function that extracts an array entry for aggregating.\n * @param {Function} aggregatorFn A function to execute for each element in the arrays. It's purpose is to\n * aggregate the element value to the corresponding entry of the resulting array.\n * The function's return value becomes the value of the `aggregated` parameter on the next invocation of\n * `aggregatorFn`.\n * The function is called with the following arguments:\n *\n * @param {Object} aggregatorFn.aggregated Resulting array entry value. On the first call\n * `getInitialValueFn` result.\n * @param {Object} aggregatorFn.entry Current entry to aggregate into `aggregated`.\n * @param {Number} aggregatorFn.arrayIndex Index of current array (in the provided `arrays`).\n * @param {Object[]} aggregatorFn.entryIndex Index of the current entry.\n * @param {Object} aggregationContext A shared object providing extra aggregation call context.\n * @param {Function} getInitialValueFn Function that returns an initial value for the combined array entries.\n * @param {Object} [aggregationContext] Optional object that is passed to all of the above functions that can\n * be used for keeping some additional parameters used when aggregating.\n * Out of the box the object will contain `arrays` and `targetArray` properties containing\n * input and resulting arrays respectively.\n */\n static aggregate(arrays, getEntryValueFn, aggregatorFn, getInitialValueFn, aggregationContext = {}) {\n const\n rowLength = arrays.length,\n columnLength = arrays[0].length,\n result = [];\n // provide some context by default\n // the resulting array reference and list of array given for aggregating\n aggregationContext.targetArray = result;\n aggregationContext.arrays = arrays;\n for (let colIndex = 0; colIndex < columnLength; colIndex++) {\n aggregationContext.entryIndex = colIndex;\n result.push(getInitialValueFn(colIndex, aggregationContext));\n }\n // iterate provided arrays\n for (let rowIndex = 0; rowIndex < rowLength; rowIndex++) {\n const row = arrays[rowIndex];\n aggregationContext.rowIndex = rowIndex;\n for (let colIndex = 0; colIndex < columnLength; colIndex++) {\n aggregationContext.entryIndex = colIndex;\n const entryValue = getEntryValueFn(row[colIndex], aggregationContext);\n // aggregate them\n result[colIndex] = aggregatorFn(result[colIndex], entryValue, rowIndex, colIndex, aggregationContext);\n }\n }\n return result;\n }\n /**\n * Group an array by keys (either the values in a specified property name, or the results of a string-generating function accepting\n * an array entry as input), returning an Object with those keys, whose values are arrays containing the array entries that\n * produced that key.\n *\n * ```javascript\n * const input = [{\n * id: 1,\n * color: 'red'\n * },{\n * id: 2,\n * color: 'green'\n * },{\n * id: 3,\n * color: 'green'\n * }];\n *\n * groupBy(input, 'color')\n *\n * // {\n * // 'red': [ { id: '1', color: 'red' } ],\n * // 'green': [ { id: '2', color: 'green' }, { id: '3', color: 'green' } ]\n * // }\n *\n * groupBy(input, rec => rec.color?.substr(0, 1))\n *\n * // {\n * // 'r': [ { id: '1', color: 'red' } ],\n * // 'g': [ { id: '2', color: 'green' }, { id: '3', color: 'green' } ]\n * // }\n * ```\n *\n * @param {Object} array Array from which to build dictionary\n * @param {Function|String} getGroupKey Function to produce the key for a given array entry, or a string property name to read\n * @returns {Object} A key->value[] dictionary with keys as returned by `getKey` and arrays of matching items in original order as values\n * @internal\n */\n static groupBy(array, groupKeyGetter) {\n const getKey = typeof groupKeyGetter === 'string' ? o => o?.[groupKeyGetter] : groupKeyGetter;\n return array.reduce((grouped, value) => {\n const key = getKey(value);\n (grouped[key] = grouped[key] || []).push(value);\n return grouped;\n }, {});\n }\n}\nArrayHelper._$name = 'ArrayHelper';", "/**\n * @module Core/helper/FunctionHelper\n */\nconst\n commaSepRe = /,\\s*/,\n decompiledSym = Symbol('decompiled'),\n // [async] p => ...\n fnRe1 = /^\\s*(async\\s+)?([a-z_]\\w*)\\s*=>([\\s\\S]+)$/i,\n // [async] (p1?[, px]*) => ...\n fnRe2 = /^\\s*(async\\s*)?\\s*\\(((?:[a-z_]\\w*(?:, [a-z_]\\w*)*)?)\\)\\s+=>([\\s\\S]+)$/i,\n // [async] [function] [name] (p1?[, px]*) ...\n fnRe3 = /^(\\s*async)?(?:\\s*function)?(?:\\s*([a-z_]\\w*))?\\s*\\(((?:[a-z_]\\w*(?:, [a-z_]\\w*)*)?)\\)([\\s\\S]+)$/i,\n { hasOwnProperty } = Object.prototype;\n/**\n * Provides functionality for working with functions\n * @internal\n */\nexport default class FunctionHelper {\n /**\n * Inserts a function after the specified `method` is called on an `object`. To remove this hook, invoke the\n * function returned by this method.\n * ```\n * class A {\n * method() {\n * console.log('method');\n * }\n * }\n *\n * let instance = new A();\n *\n * let detach = FunctionHelper.after(instance, 'method', () => { console.log('after') });\n *\n * instance.method();\n * > method\n * > after\n *\n * detach();\n * instance.method();\n * > method\n * ```\n * The value returned by the original method is passed as the first argument to `fn` followed by all the arguments\n * passed by the caller.\n *\n * If `fn` returns a value (not `undefined`), that value is returned from the method call instead of the value\n * returned by the original method.\n * ```\n * class A {\n * method(x) {\n * console.log('method', x);\n * return x * 2\n * }\n * }\n *\n * let instance = new A();\n *\n * let detach = FunctionHelper.after(instance, 'method', (ret, x) => {\n * console.log('after', ret, x);\n * return x / 2;\n * });\n *\n * console.log(instance.method(50));\n * > method 50\n * > after 100 50\n * > 25\n *\n * detach();\n * console.log(instance.method(50));\n * > method 50\n * > 100\n * ```\n *\n * @param {Object} object The object to hook.\n * @param {String} method The name of the method on `object` to hook.\n * @param {Function|String} fn The function or method name (on `thisObj`) to call after `method`.\n * @param {Object} [thisObj] The `this` pointer value for calling `fn`.\n * @param {Object} [options] Additional options\n * @param {Boolean} [options.return=true] Specify `false` to not include the return value of the hooked method as\n * the first argument to `fn`.\n * @returns {Function} The function to call to remove the hook.\n */\n static after(object, method, fn, thisObj, options) {\n const\n named = typeof fn === 'string',\n withReturn = options?.return !== false,\n hook = (...args) => {\n const\n // if object.destroy() occurs, our hook will be removed, so this fn won't be called in that case\n origResult = hook.$nextHook.call(object, ...args),\n hookResult = thisObj?.isDestroyed ? undefined : (withReturn\n ? (named ? thisObj[fn](origResult, ...args) : fn.call(thisObj, origResult, ...args))\n : (named ? thisObj[fn](...args) : fn.call(thisObj, ...args))\n );\n return (hookResult === undefined) ? origResult : hookResult;\n };\n return FunctionHelper.hookMethod(object, method, hook);\n }\n /**\n * Inserts a function before the specified `method` is called on an `object`. To remove this hook, invoke the\n * function returned by this method.\n * ```\n * class A {\n * method() {\n * console.log('method');\n * }\n * }\n *\n * let instance = new A();\n *\n * let detach = FunctionHelper.before(instance, 'method', () => { console.log('before') });\n *\n * instance.method();\n * > before\n * > method\n *\n * detach();\n * instance.method();\n * > method\n * ```\n * If `fn` returns `false`, the original method is not invoked and `false` is returned to the caller.\n * ```\n * class A {\n * method(x) {\n * console.log('method', x);\n * return x * 2;\n * }\n * }\n *\n * let instance = new A();\n *\n * let detach = FunctionHelper.before(instance, 'method', x => {\n * console.log('before', x);\n * return false;\n * });\n *\n * console.log(instance.method(50));\n * > before 50\n * > false\n *\n * detach();\n * console.log(instance.method(50));\n * > method 50\n * > 100\n * ```\n *\n * @param {Object} object The object to hook.\n * @param {String} method The name of the method on `object` to hook.\n * @param {Function|String} fn The function or method name (on `thisObj`) to call before `method`.\n * @param {Object} [thisObj] The `this` pointer value for calling `fn`.\n * @returns {Function} The function to call to remove the hook.\n */\n static before(object, method, fn, thisObj) {\n const\n named = typeof fn === 'string',\n hook = (...args) => {\n const ret = (thisObj?.isDestroyed\n ? 0\n : (named ? thisObj[fn](...args) : fn.call(thisObj, ...args))\n );\n return (ret === false) ? ret : hook.$nextHook.call(object, ...args);\n };\n return FunctionHelper.hookMethod(object, method, hook);\n }\n static curry(func) {\n return function curried(...args) {\n if (args.length >= func.length) {\n return func.apply(this, args);\n }\n else {\n return function(...args2) {\n return curried.apply(this, args.concat(args2));\n };\n }\n };\n }\n static bindAll(obj) {\n for (const key in obj) {\n if (typeof obj[key] === 'function') {\n obj[key] = obj[key].bind(obj);\n }\n }\n }\n /**\n * Returns a function which calls the passed `interceptor` function first, and the passed `original` after\n * as long as the `interceptor` does not return `false`.\n * @param {Function} original The function to call second.\n * @param {Function} interceptor The function to call first.\n * @param {Object} [thisObj] The `this` reference when the functions are called.\n * @returns {Function} A function which yields the return value from the `original` function **if it was called**, else `false`.\n */\n static createInterceptor(original, interceptor, thisObj) {\n return function(...args) {\n const theThis = thisObj || this;\n if (interceptor.call(theThis, ...args) !== false) {\n return original.call(theThis, ...args);\n }\n return false;\n };\n }\n /**\n * Returns a function which calls the passed `sequence` function after calling\n * the passed `original`.\n * @param {Function} original The function to call first.\n * @param {Function} sequence The function to call second.\n * @param {Object} [thisObj] The `this` reference when the functions are called.\n * @returns {Function} A function which yields the value returned from the sequence if it returned a value, else the return\n * value from the original function.\n */\n static createSequence(original, sequence, thisObj) {\n return (...args) => {\n const origResult = original.call(thisObj, ...args),\n sequenceResult = sequence.call(thisObj, ...args);\n return (sequenceResult === undefined) ? origResult : sequenceResult;\n };\n }\n /**\n * Create a \"debounced\" function which will call on the \"leading edge\" of a timer period.\n * When first invoked will call immediately, but invocations after that inside its buffer\n * period will be rejected, and *one* invocation will be made after the buffer period has expired.\n *\n * This is useful for responding immediately to a first mousemove, but from then on, only\n * calling the action function on a regular timer while the mouse continues to move.\n *\n * @param {Function} fn The function to call.\n * @param {Number} buffer The milliseconds to wait after each execution before another execution takes place.\n * @param {Object} [thisObj] `this` reference for the function.\n * @param {Array} [extraArgs] The argument list to append to those passed to the function.\n * @param {Function} [alt] A function to call when the invocation is rejected due to buffer time not having expired.\n * @returns {Function} A function which calls the passed `fn` only if at least the passed `buffer`\n * milliseconds has elapsed since its last invocation.\n */\n static createThrottled(fn, buffer, thisObj, extraArgs, alt) {\n let lastCallTime = -Number.MAX_VALUE,\n callArgs,\n timerId;\n const\n invoke = () => {\n timerId = 0;\n lastCallTime = performance.now();\n callArgs.push.apply(callArgs, extraArgs);\n fn.apply(thisObj, callArgs);\n },\n result = function(...args) {\n const elapsed = performance.now() - lastCallTime;\n callArgs = args;\n // If it's been more then the buffer period since we invoked, we can call it now\n if (elapsed >= buffer) {\n clearTimeout(timerId);\n invoke();\n }\n // Otherwise, kick off a timer for the requested period.\n else {\n if (!timerId) {\n timerId = setTimeout(invoke, buffer - elapsed);\n }\n if (alt) {\n callArgs.push.apply(callArgs, extraArgs);\n alt.apply(thisObj, callArgs);\n }\n }\n };\n result.cancel = () => clearTimeout(timerId);\n return result;\n }\n /**\n * Create a \"debounced\" function which will call on the \"trailing edge\" of a timer period.\n * When first invoked will wait until the buffer period has expired to call the function, and\n * more calls within that time will restart the timer.\n *\n * This is useful for responding to keystrokes, but deferring action until the user pauses typing.\n *\n * @param {Function} fn The function to call.\n * @param {Number} buffer The milliseconds to wait after each execution before another execution takes place.\n * @param {Object} [thisObj] `this` reference for the function.\n * @param {Array} [args] The argument list to append to those passed to the function.\n * @returns {Function} A function which calls the passed `fn` when at least the passed `buffer`\n * milliseconds has elapsed since its last invocation.\n */\n static createBuffered(fn, buffer, thisObj, args) {\n let callArgs,\n timerId;\n const\n invoke = () => {\n timerId = 0;\n result.isPending = false;\n callArgs.push.apply(callArgs, args);\n fn.apply(thisObj, callArgs);\n },\n result = function(...args) {\n callArgs = args;\n // Cancel any impending invocation. It's pushed out for ms from each call\n if (timerId) {\n clearTimeout(timerId);\n }\n result.isPending = true;\n timerId = setTimeout(invoke, buffer);\n };\n result.cancel = () => {\n result.isPending = false;\n clearTimeout(timerId);\n };\n return result;\n }\n static decompile(fn) {\n if (!(decompiledSym in fn)) {\n const code = fn.toString();\n let m = fnRe1.exec(code),\n args, body, name, decompiled, t;\n if (m) {\n // [async] p => ...\n // [1] [2] [3]\n args = [m[2]];\n body = m[3];\n }\n else if ((m /* assignment */ = fnRe2.exec(code))) {\n // [async] (p1?[, px]*) => ...\n // [1] [2] [3]\n t = m[2].trim();\n args = t ? t.split(commaSepRe) : [];\n body = m[3];\n }\n else if ((m /* assignment */ = fnRe3.exec(code))) {\n // [async] [function] [name] (p1?[, px]*) ...\n // [1] [2] [3] [4]\n name = m[2];\n t = m[3].trim();\n args = t ? t.split(commaSepRe) : [];\n body = m[4];\n }\n body = body?.trim();\n fn[decompiledSym] = decompiled = m && {\n args,\n async : Boolean(m[1]),\n body : body?.startsWith('{') ? body.substring(1, body.length - 1).trim() : body\n };\n if (name) {\n decompiled.name = name;\n }\n }\n return fn[decompiledSym];\n }\n static hookMethod(object, method, hook) {\n hook.$nextHook = object[method];\n object[method] = hook;\n return () => {\n // Object will have no hooks on the instance if it is destroyed (perhaps other reasons too)\n if (hasOwnProperty.call(object, method)) {\n let f = object[method],\n next;\n if (f === hook) {\n // When this is the outermost hook, we may be the last hook. If $nextHook is found on the object's\n // prototype, simply delete the slot to expose it. Otherwise, there's another hook, so make it the\n // outermost.\n if (Object.getPrototypeOf(object)?.[method] === hook.$nextHook) {\n delete object[method];\n }\n else {\n object[method] = hook.$nextHook;\n }\n }\n else {\n // Not being the outermost hook means we have outer hooks that should chain to the one we want to\n // remove. Be cautious because the object could be destroyed.\n for (; (next = f?.$nextHook); f = next) {\n if (next === hook) {\n f.$nextHook = hook.$nextHook;\n break;\n }\n }\n }\n }\n };\n }\n /**\n * Protects the specified `method` on a given `object` such that calling it will not throw exceptions.\n * @param {Object} object The object whose method is to be protected.\n * @param {String} method The name of the method to protect.\n * @param {Function} [handler] An optional function to call for any thrown exceptions.\n * @internal\n */\n static noThrow(object, method, handler) {\n const fn = object[method];\n object[method] = (...args) => {\n try {\n return fn.apply(object, args);\n }\n catch (e) {\n return handler?.(e);\n }\n };\n }\n static returnTrue() {\n return true;\n }\n static animate(duration, fn, thisObj, easing = 'linear') {\n let cancel = false;\n const result = new Promise(resolve => {\n const start = performance.now(),\n iterate = () => {\n const progress = Math.min((performance.now() - start) / duration, 1),\n delayable = thisObj && thisObj.setTimeout ? thisObj : globalThis;\n if (!cancel) {\n if (fn.call(thisObj, this.easingFunctions[easing](progress)) === false) {\n resolve();\n }\n }\n if (cancel || progress === 1) {\n // Push resolution into the next animation frame so that\n // this frame completes before the resolution handler runs.\n delayable.requestAnimationFrame(() => resolve());\n }\n else {\n delayable.requestAnimationFrame(iterate);\n }\n };\n iterate();\n });\n result.cancel = () => {\n cancel = true;\n result.cancelled = true;\n return false;\n };\n return result;\n }\n}\nconst\n half = 0.5,\n e1 = 1.70158,\n e2 = 7.5625,\n e3 = 1.525,\n e4 = 2 / 2.75,\n e5 = 2.25 / 2.75,\n e6 = 1 / 2.75,\n e7 = 1.5 / 2.75,\n e8 = 2.5 / 2.75,\n e9 = 2.625 / 2.75,\n e10 = 0.75,\n e11 = 0.9375,\n e12 = 0.984375,\n s1 = 1.70158,\n s2 = 1.70158;\nFunctionHelper.easingFunctions = {\n linear : t => t,\n easeInQuad : t => Math.pow(t, 2),\n easeOutQuad : t => -(Math.pow((t - 1), 2) - 1),\n easeInOutQuad : t => (t /= half) < 1 ? half * Math.pow(t, 2) : -half * ((t -= 2) * t - 2),\n easeInCubic : t => Math.pow(t, 3),\n easeOutCubic : t => Math.pow((t - 1), 3) + 1,\n easeInOutCubic : t => (t /= half) < 1 ? half * Math.pow(t, 3) : half * (Math.pow((t - 2), 3) + 2),\n easeInQuart : t => Math.pow(t, 4),\n easeOutQuart : t => -(Math.pow((t - 1), 4) - 1),\n easeInOutQuart : t => (t /= half) < 1 ? half * Math.pow(t, 4) : -half * ((t -= 2) * Math.pow(t, 3) - 2),\n easeInQuint : t => Math.pow(t, 5),\n easeOutQuint : t => (Math.pow((t - 1), 5) + 1),\n easeInOutQuint : t => (t /= half) < 1 ? half * Math.pow(t, 5) : half * (Math.pow((t - 2), 5) + 2),\n easeInSine : t => -Math.cos(t * (Math.PI / 2)) + 1,\n easeOutSine : t => Math.sin(t * (Math.PI / 2)),\n easeInOutSine : t => -half * (Math.cos(Math.PI * t) - 1),\n easeInExpo : t => t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo : t => t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo : t => (t === 0) ? 0 : (t === 1) ? 1 : ((t /= half) < 1) ? half * Math.pow(2, 10 * (t - 1)) : half * (-Math.pow(2, -10 * --t) + 2),\n easeInCirc : t => -(Math.sqrt(1 - (t * t)) - 1),\n easeOutCirc : t => Math.sqrt(1 - Math.pow((t - 1), 2)),\n easeInOutCirc : t => (t /= half) < 1 ? -half * (Math.sqrt(1 - t * t) - 1) : half * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeOutBounce : t => ((t) < e6) ? (e2 * t * t) : (t < e4) ? (e2 * (t -= e7) * t + e10) : (t < e8) ? (e2 * (t -= e5) * t + e11) : (e2 * (t -= e9) * t + e12),\n easeInBack : t => (t) * t * ((e1 + 1) * t - e1),\n easeOutBack : t => (t = t - 1) * t * ((e1 + 1) * t + e1) + 1,\n easeInOutBack : t => {\n let v1 = s1;\n return ((t /= half) < 1) ? half * (t * t * (((v1 *= (e3)) + 1) * t - v1)) : half * ((t -= 2) * t * (((v1 *= (e3)) + 1) * t + v1) + 2);\n },\n elastic : t => -1 * Math.pow(4, -8 * t) * Math.sin((t * 6 - 1) * (2 * Math.PI) / 2) + 1,\n swingFromTo : t => {\n let v2 = s2;\n return ((t /= half) < 1) ? half * (t * t * (((v2 *= (e3)) + 1) * t - v2)) : half * ((t -= 2) * t * (((v2 *= (e3)) + 1) * t + v2) + 2);\n },\n swingFrom : t => t * t * ((e1 + 1) * t - e1),\n swingTo : t => (t -= 1) * t * ((e1 + 1) * t + e1) + 1,\n bounce : t => (t < e6) ? (e2 * t * t) : (t < e4) ? (e2 * (t -= e7) * t + e10) : (t < e8) ? (e2 * (t -= e5) * t + e11) : (e2 * (t -= e9) * t + e12),\n bouncePast : t => (t < e6) ? (e2 * t * t) : (t < e4) ? 2 - (e2 * (t -= e7) * t + e10) : (t < e8) ? 2 - (e2 * (t -= e5) * t + e11) : 2 - (e2 * (t -= e9) * t + e12),\n easeFromTo : t => (t /= half) < 1 ? half * Math.pow(t, 4) : -half * ((t -= 2) * Math.pow(t, 3) - 2),\n easeFrom : t => Math.pow(t, 4),\n easeTo : t => Math.pow(t, 0.25)\n};\nFunctionHelper._$name = 'FunctionHelper';", "/* eslint-disable bryntum/no-listeners-in-lib,bryntum/no-on-in-lib */\nimport Base from '../Base.js';\nimport ArrayHelper from '../helper/ArrayHelper.js';\nimport StringHelper from '../helper/StringHelper.js';\nimport VersionHelper from '../helper/VersionHelper.js';\nimport BrowserHelper from '../helper/BrowserHelper.js';\nimport FunctionHelper from '../helper/FunctionHelper.js';\nimport Objects from '../helper/util/Objects.js';\n/**\n * @module Core/mixin/Events\n */\n/**\n * @typedef {Object.} BryntumListenerConfig\n * @property {Object} [thisObj] The `this` reference for all listeners. May be overridden if a handler is specified in object form.\n * @property {Boolean} [once] Specify as `true` to remove the listener as soon as it is invoked.\n * @property {Number|Object} [expires] The listener only waits for a specified time before\n * being removed. The value may be a number or an object containing an expiry handler.\n * @property {Number} [expires.delay] How long to wait for the event for.\n * @property {String|Function} [expires.alt] The function to call when the listener expires **without having been triggered**.\n * @property {Object[]} [args] An array of arguments to be passed to the handler before the event object.\n * @property {Number} [prio] The priority for all listeners; higher priority listeners are called before lower.\n * @property {Number} [buffer] A buffer time in milliseconds to wait after last event trigger to call the handler, to reduce the amount of handler calls for frequent events.\n * @property {Number} [throttle] A millisecond timeout value to throttle event triggering. With it specified a handler\n * will be called once immediately and then all following calls during the timeout period will be grouped together into one call once per throttle period.\n */\nconst\n // Used by the config system to flatten configs from the class hierarchy.\n // In this case, a pure merge is not wanted. Listener definitions from\n // every class level are collected up into an array.\n // addListener iterates any passed array, adding each element.\n { isArray } = Array,\n { hasOwnProperty } = Object.prototype,\n // Used to distinguish event names from listener options in addListener object config.\n specialProperties = {\n thisObj : 1,\n detachable : 1,\n once : 1,\n detacher : 1,\n prio : 1,\n args : 1,\n expires : 1,\n buffer : 1,\n throttle : 1,\n name : 1,\n $internal : 1\n },\n priorityComparator = (a, b) => b.prio - a.prio;\n/**\n * Mix this into another class to enable event handling.\n *\n * ## Basic usage\n * Listeners can be added either through config:\n *\n * ```javascript\n * let button = new Button({\n * listeners: {\n * click: () => {},\n * press: () => {},\n * ...\n * }\n * });\n * ```\n *\n * *NOTE*: Do not reuse listeners config object, use new every time:\n * ```javascript\n * // wrong\n * let config = { click : () => {} }\n * new Button({\n * listeners : config\n * })\n * new Button({\n * listeners : config\n * })\n * // right\n * new Button({\n * listeners : { click : () => {} }\n * })\n * new Button({\n * listeners : { click : () => {} }\n * })\n * ```\n *\n * Or by calling on()/addListener():\n *\n * ```javascript\n * let button = new Button();\n *\n * button.addListener('press', () => {});\n * // on is an alias for addListener\n * button.on('click', () => {});\n * ```\n *\n * This style also accepts multiple listeners in same way as when using config:\n *\n * ```javascript\n * button.on({\n * click: () => {},\n * press: () => {},\n * ...\n * });\n * ```\n *\n * ### Handlers as function name\n *\n * Event handlers may be specified as a function __name__. If a string is specified, it is the name\n * of the function in the `thisObj` object.\n *\n * If the string begins with `up.`, the owning object's ownership hierarchy\n * (if present) is scanned for an object which implements that function name:\n *\n * ```javascript\n * new Popup({\n * tbar : {\n * items : {\n * myCombo : {\n * type : 'combo',\n * editable : false,\n * label : 'Type',\n * listeners : {\n * // Look in owner chain for this function name\n * change : 'up.onFilterChange'\n * },\n * items : [\n * 'Event',\n * 'Task',\n * 'Appointment'\n * ]\n * }\n * }\n * },\n * items : {\n * ...\n * },\n * onFilterChange({ value }) {\n * // Handle event type selection here\n * }\n * });\n *```\n *\n * ## Listener options\n * ### Once\n * Listeners can be configured to automatically deregister after first trigger by specifying config option `once`:\n *\n * ```javascript\n * button.on({\n * click: () => {},\n * once: true\n * });\n * ```\n *\n * ### Priority\n * Specifying priority affects the order in which listeners are called when triggering an event. Higher priorities will be\n * called before lower. Default value is 0.\n *\n * ```javascript\n * button.on({\n * click: this.onClick,\n * prio: 1\n * });\n * ```\n *\n * ### This reference\n * If desired, you can specify thisObj when configuring listeners. There is no need if you are using arrow functions as\n * listeners, but might be handy in other cases. Of course, you can also use bind to set `this` reference.\n *\n * ```javascript\n * button.on({\n * click: this.onClick,\n * thisObj: this\n * });\n *\n * // or\n *\n * button.on({\n * click: this.onClick.bind(this)\n * });\n * ```\n *\n * ### Buffering\n * By specifying a `buffer` events that fire frequently can be grouped together and delayed. A handler for the event will be called once only, when no new event has been fired during the specified buffer time:\n *\n * ```javascript\n * button.on({\n * click : this.onClick,\n * buffer : 200 // in milliseconds\n * });\n * ```\n *\n * In this example, if a user clicked the button 6 times very fast (<200ms between each click),\n * the `this.onClick` handler would be called only once 200 milliseconds after the last click.\n *\n * ### Throttling\n * Create a \"debounced\" function which will call on the \"leading edge\" of a timer period.\n * When first invoked will call immediately, but invocations after that inside its buffer\n * period will be rejected, and *one* invocation will be made after the buffer period has expired.\n *\n * This is useful for responding immediately to a first mousemove, but from then on, only\n * calling the action function on a regular timer while the mouse continues to move.\n * ```javascript\n * button.on({\n * click : this.onClick,\n * throttle : 200 // in milliseconds\n * });\n * ```\n *\n * In this example, if a user clicked the button 6 times very fast, the `this.onClick` handler would be called once immediately on the first click and a second time 200 milliseconds after the **first** click.\n * So in reality the `click` event handler will be called every 200ms independent of amount of click in a middle, if the event was triggered at least once during the `throttle` timeout.\n *\n * ### Detacher\n * A convenient way of unregistering events is to use a detacher, a function returned when adding listeners that you\n * call later to deregister them. As of version 1.0, detachable defaults to true.\n *\n * ```javascript\n * let detacher = button.on({\n * click: () => {},\n * press: () => {},\n * detachable: true\n * });\n *\n * // when you want to detach, for example in destroy()\n * detacher();\n * ```\n *\n * ### Auto detaching\n * When listeners are bound to a class instance using `thisObj`, the `thisObj`'s `doDestroy` method\n * is overridden to remove the listeners before calling the overridden doDestroy.\n *\n * ```javascript\n * class MyClass extends Base {\n * construct() {\n * let button = new Button({\n * listeners: {\n * click: () => {},\n * thisObj: this\n * }\n * });\n * }\n *\n * doDestroy() {\n * // clean up stuff\n * }\n * }\n *\n * let myObj = new MyClass();\n * // clean up, also removes listeners\n * myObj.destroy();\n * ```\n *\n * ### On-functions\n * When mixing Events into another class it can be configured to call on-functions when events are triggered.\n * On-functions are functions named 'onEventName', for example 'onClick', 'onPress' declared on the class triggering\n * the event.\n *\n * ```javascript\n * // mix Events in with on-functions activated\n * let button = new Button({\n * callOnFunctions: true,\n *\n * onClick: () => {}\n * });\n *\n * // or add a getter in class declaration\n * ```\n *\n * Returning `false` from an on-function will prevent triggering listeners for the event.\n *\n * ### Catching all events\n * By specifying a listener for {@link #event-catchAll catchAll} a function can be notified when any event is triggered:\n *\n * ```javascript\n * const button = new Button({\n * listeners : {\n * catchAll(event) {\n * // All events on the button will pass through here\n * }\n * }\n * });\n * ```\n *\n * ## Preventable events\n *\n * By returning `false` from a listener for an event documented as `preventable` the action that would otherwise be\n * executed after the event is prevented. These events are usually named `beforeXX`, for example `beforeRemove`,\n * `beforeDragStart` etc.\n *\n *
Note that Angular does not support return values from listeners. Instead, assign to\n * event.returnValue as shown in the Angular snippet below
\n *\n * {@frameworktabs}\n * {@js}\n * ```javascript\n * taskBoard.on({\n * beforeColumnDrag({ columnRecord }) {\n * if (columnRecord.locked) {\n * return false;\n * }\n * }\n * });\n * ```\n *\n * {@endjs}\n * {@react}\n *\n * ```jsx\n * const App = props => {\n * function onBeforeColumnDrag({ columnRecord }) {\n * if (columnRecord.locked) {\n * return false;\n * }\n * }\n *\n * return (\n * <>\n * \n * \n * )\n * }\n * ```\n *\n * {@endreact}\n * {@vue}\n *\n * ```html\n * \n * ```\n *\n * ```javascript\n * export default {\n * methods : {\n * onBeforeColumnDrag({ columnRecord }) {\n * if (columnRecord.locked) {\n * return false;\n * }\n * }\n * }\n * }\n * ```\n *\n * {@endvue}\n * {@angular}\n *\n * ```html\n * \n * ```\n *\n * ```typescript\n * export class AppComponent {\n * onBeforeColumnDrag({ event }: { event: any }): void {\n * event.returnValue = !event.columnRecord.locked;\n * }\n * }\n * ```\n *\n * {@endangular}\n * {@endframeworktabs}\n *\n * @mixin\n */\nexport default Target => class Events extends (Target || Base) {\n eventsSuspended = null;\n static get $name() {\n return 'Events';\n }\n //region Events\n /**\n * Fires before an object is destroyed.\n * @event beforeDestroy\n * @param {Core.Base} source The Object that is being destroyed.\n */\n /**\n * Fires when an object is destroyed.\n * @event destroy\n * @param {Core.Base} source The Object that is being destroyed.\n */\n /**\n * Fires when any other event is fired from the object.\n *\n * **Note**: `catchAll` is fired for both public and private events. Please rely on the public events only.\n * @event catchAll\n * @param {Object} event The Object that contains event details\n * @param {String} event.type The type of the event which is caught by the listener\n * @typings event -> {{[key: string]: any, type: string}}\n */\n //endregion\n static get declarable() {\n return [\n /**\n * The list of deprecated events as an object, where `key` is an event name which is deprecated and\n * `value` is an object which contains values for\n * {@link Core.helper.VersionHelper#function-deprecate-static VersionHelper}:\n * - product {String} The name of the product;\n * - invalidAsOfVersion {String} The version where the offending code is invalid (when any compatibility\n * layer is actually removed);\n * - message {String} Warning message to show to the developer using a deprecated API;\n *\n * For example:\n *\n * ```javascript\n * return {\n * click : {\n * product : 'Grid',\n * invalidAsOfVersion : '1.0.0',\n * message : 'click is deprecated!'\n * }\n * }\n * ```\n *\n * @name deprecatedEvents\n * @returns {Object}\n * @static\n * @internal\n */\n 'deprecatedEvents'\n ];\n }\n static setupDeprecatedEvents(cls, meta) {\n const\n all = meta.getInherited('deprecatedEvents'),\n add = cls.deprecatedEvents;\n for (const eventName in add) {\n // Event names are case-insensitive so build our map using toLowerCased names (but keep true case too):\n all[eventName.toLowerCase()] = all[eventName] = add[eventName];\n }\n }\n //region Config\n static get configurable() {\n return {\n /**\n * Set to true to call onXXX method names (e.g. `onShow`, `onClick`), as an easy way to listen for events.\n *\n * ```javascript\n * const container = new Container({\n * callOnFunctions : true\n *\n * onHide() {\n * // Do something when the 'hide' event is fired\n * }\n * });\n * ```\n *\n * @config {Boolean} callOnFunctions\n * @category Misc\n * @default false\n */\n /**\n * The listener set for this object.\n *\n * An object whose property names are the names of events to handle, or options which modifiy\n * __how__ the handlers are called.\n *\n * See {@link #function-addListener} for details about the options.\n *\n * Listeners can be specified in target class config and they will be merged with any listeners specified in\n * the instantiation config. Class listeners will be fired first:\n *\n * ```javascript\n * class MyStore extends Store({\n * static get configurable() {\n * return {\n * listeners : {\n * myCustomEvent() {\n * },\n * load : {\n * prio : 10000,\n * fn() { // this load listener handles things first }\n * }\n * }\n * }\n * }\n * });\n *\n * let store = new MyStore({\n * listeners: {\n * load: () => { // This load listener runs after the class's },\n * ...\n * }\n * });\n * ```\n *\n * ### Handlers as function name\n *\n * Object event handlers may be specified as a function __name__. If a string is specified, it is the name\n * of the function in the `thisObj` object.\n *\n * If the string begins with `up.`, this object's ownership hierarchy\n * (if present) is scanned for an object which implements that function name:\n *\n * ```javascript\n * new Popup({\n * tbar : {\n * items : {\n * myCombo : {\n * type : 'combo',\n * editable : false,\n * label : 'Type',\n * listeners : {\n * // Look in owner chain for this function name\n * change : 'up.onFilterChange'\n * },\n * items : [\n * 'Event',\n * 'Task',\n * 'Appointment'\n * ]\n * }\n * }\n * },\n * items : {\n * ...\n * },\n * onFilterChange({ value }) {\n * // Handle event type selection here\n * }\n * });\n *```\n *\n * @config {Object}\n * @category Common\n */\n listeners : {\n value : null,\n $config : {\n merge(newValue, currentValue) {\n if (newValue !== null) {\n if (!newValue) {\n return currentValue;\n }\n if (currentValue) {\n newValue = newValue ? [newValue] : [];\n newValue.push[isArray(currentValue) ? 'apply' : 'call'](newValue, currentValue);\n }\n }\n return newValue;\n }\n }\n },\n /**\n * Internal listeners, that cannot be removed by the user.\n * @config {Object}\n * @internal\n */\n internalListeners : null,\n /**\n * An object where property names with a truthy value indicate which events should bubble up the ownership\n * hierarchy when triggered.\n *\n * ```javascript\n * const container = new Container({\n * items : [\n * { type : 'text', bubbleEvents : { change : true }}\n * ],\n *\n * listeners : {\n * change() {\n * // Will catch change event from the text field\n * }\n * }\n * });\n * ```\n *\n * @config {Object}\n * @category Misc\n */\n bubbleEvents : null\n };\n }\n destroy() {\n this.trigger('beforeDestroy');\n super.destroy();\n }\n //endregion\n //region Init\n construct(config, ...args) {\n // Configured listeners use this as the thisObj\n if ((this.configuredListeners /* assignment */ = config?.listeners)) {\n // We have to copy in case listeners have been forked\n config = Objects.assign({}, config);\n delete config.listeners;\n }\n super.construct(config, ...args);\n // Apply configured listeners after construction.\n // Note that some classes invoke this during parts of their construction.\n // Store invokes this prior to setting data so that observers are notified of data load.\n this.processConfiguredListeners();\n }\n processConfiguredListeners() {\n // This can only happen once\n if (this.configuredListeners) {\n const\n me = this,\n { isConfiguring } = me;\n // If called from config ingestion during configuration, listeners must be added\n // so temporarily clear the isConfiguring flag.\n me.isConfiguring = false;\n me.listeners = me.configuredListeners;\n me.configuredListeners = null;\n me.isConfiguring = isConfiguring;\n }\n }\n /**\n * Auto detaches listeners registered from start, if set as detachable\n * @internal\n */\n doDestroy() {\n this.trigger('destroy');\n this.removeAllListeners(false);\n super.doDestroy();\n }\n static setupClass(meta) {\n super.setupClass(meta);\n Events.prototype.onListen.$nullFn = true;\n Events.prototype.onUnlisten.$nullFn = true;\n }\n //endregion\n //region Listeners\n /**\n * Adds an event listener. This method accepts parameters in the following format:\n *\n * ```javascript\n * myObject.addListener({\n * thisObj : this, // The this reference for the handlers\n * eventname2 : 'functionName' // Resolved at invocation time using the thisObj,\n * otherevent : {\n * fn : 'handlerFnName',\n * once : true // Just this handler is auto-removed on fire\n * },\n * yetanother : {\n * fn : 'yetAnotherHandler',\n * args : [ currentState1, currentState2 ] // Capture info to be passed to handler\n * },\n * prio : 100 // Higher prio listeners are called before lower\n * });\n * ```\n *\n * When listeners have a `thisObj` option, they are linked to the lifecycle of that object.\n * When it is destroyed, those listeners are removed.\n *\n * The `config` parameter allows supplying options for the listener(s), for available options see {@link #typedef-BryntumListenerConfig}.\n *\n * A simpler signature may be used when only adding a listener for one event and no extra options\n * (such as `once` or `delay`) are required:\n *\n * ```javascript\n * myObject.addListener('click', myController.handleClicks, myController);\n * ```\n *\n * The args in this simple case are `eventName`, `handler` and `thisObj`\n *\n * @param {BryntumListenerConfig|String} config An object containing listener definitions, or the event name to listen for\n * @param {Object|Function} [thisObj] Default `this` reference for all listeners in the config object, or the handler\n * function to call if providing a string as the first arg.\n * @param {Object} [oldThisObj] The `this` reference if the old signature starting with a string event name is used..\n * @returns {Function} Returns a detacher function unless configured with `detachable: false`. Call detacher to remove listeners\n */\n addListener(config, thisObj, oldThisObj) {\n if (isArray(config)) {\n for (let i = 0, { length } = config; i < length; i++) {\n this.addListener(config[i], thisObj);\n }\n return;\n }\n const\n me = this,\n deprecatedEvents = me.$meta.getInherited('deprecatedEvents');\n if (typeof config === 'string') {\n // arguments[2] is thisObj if (eventName, handler, thisObj) form called.\n // Note that the other side of the if-statement compares to undefined, so this will work.\n return me.addListener({\n [config] : thisObj,\n detachable : thisObj.detachable !== false,\n thisObj : oldThisObj\n });\n }\n else {\n // Capture the default thisObj.\n thisObj = config.thisObj = config.thisObj !== undefined ? config.thisObj : thisObj;\n for (const key in config) {\n // Skip special properties or events without handlers (convenient syntax with optional handlers)\n if (!specialProperties[key] && config[key] != null) {\n const\n // Comparing should be case-insensitive\n eventName = key.toLowerCase(),\n deprecatedEvent = deprecatedEvents?.[eventName],\n events = me.eventListeners || (me.eventListeners = {}),\n // When cloning listeners, there might be multiple listeners for the same event\n specs = ArrayHelper.asArray(config[key]);\n if (deprecatedEvent) {\n const { product, invalidAsOfVersion, message } = deprecatedEvent;\n VersionHelper.deprecate(product, invalidAsOfVersion, message);\n }\n for (const listenerSpec of specs) {\n const\n expires = listenerSpec.expires || config.expires,\n listener = {\n fn : typeof listenerSpec === 'object' ? listenerSpec.fn : listenerSpec,\n thisObj : listenerSpec.thisObj !== undefined ? listenerSpec.thisObj : thisObj,\n args : listenerSpec.args || config.args,\n prio : listenerSpec.prio !== undefined ? listenerSpec.prio : config.prio !== undefined ? config.prio : 0,\n once : listenerSpec.once !== undefined ? listenerSpec.once : config.once !== undefined ? config.once : false,\n buffer : listenerSpec.buffer || config.buffer,\n throttle : listenerSpec.throttle || config.throttle,\n $internal : config.$internal,\n catchAll : key === 'catchAll'\n };\n if (expires) {\n // Extract expires : { delay : 100, alt : 'onExpireFn' }\n const\n { alt } = expires,\n delay = alt ? expires.delay : expires,\n name = config.name || key,\n fn = () => {\n me.un(eventName, listener);\n // If we make it here and the handler has not been called, invoke the alt handler\n if (alt && !listener.called) {\n me.callback(alt, thisObj);\n }\n };\n if (me.isDelayable) {\n me.setTimeout({\n fn,\n name,\n cancelOutstanding : true,\n delay\n });\n }\n else {\n globalThis.setTimeout(fn, delay);\n }\n }\n let listeners = events[eventName] || (events[eventName] = []);\n if (listeners.$firing) {\n events[eventName] = listeners = listeners.slice();\n }\n // Insert listener directly in prio order\n listeners.splice(\n ArrayHelper.findInsertionIndex(listener, listeners, priorityComparator, listeners.length),\n 0, listener);\n if (!me.onListen.$nullFn && listeners.length < 2) {\n me.onListen(eventName);\n }\n // Hook to call when a listener is added\n me.afterAddListener?.(eventName, listener);\n }\n }\n }\n if (config.relayAll) {\n me.relayAll(config.relayAll);\n }\n // Hook into the thisObj's destruction sequence to remove these listeners.\n // Pass the default thisObj in for use when it comes to destruction time.\n if (thisObj && thisObj !== me) {\n me.attachAutoDetacher(config, thisObj);\n }\n const\n detachable = config.detachable !== false,\n name = config.name,\n destroy = (config.expires || detachable || name) ? () => {\n // drop listeners if not destroyed yet\n if (!me.isDestroyed) {\n me.removeListener(config, thisObj);\n }\n } : null;\n if (destroy) {\n destroy.eventer = me;\n destroy.listenerName = name;\n if (name && thisObj?.trackDetacher) {\n thisObj.trackDetacher(name, destroy);\n }\n if (config.expires) {\n // handle expires : { alt : timeoutHandler, delay : 2000 }\n me.delay(destroy, isNaN(config.expires) ? config.expires.delay : config.expires, name);\n }\n if (detachable) {\n return destroy;\n }\n }\n }\n }\n /**\n * Alias for {@link #function-addListener}. Adds an event listener. This method accepts parameters in the following format:\n *\n * ```javascript\n * myObject.on({\n * thisObj : this, // The this reference for the handlers\n * eventname2 : 'functionName' // Resolved at invocation time using the thisObj,\n * otherevent : {\n * fn : 'handlerFnName',\n * once : true // Just this handler is auto-removed on fire\n * },\n * yetanother : {\n * fn : 'yetAnotherHandler',\n * args : [ currentState1, currentState2 ] // Capture info to be passed to handler\n * },\n * prio : 100 // Higher prio listeners are called before lower\n * });\n * ```\n *\n * When listeners have a `thisObj` option, they are linked to the lifecycle of that object.\n * When it is destroyed, those listeners are removed.\n *\n * The `config` parameter allows supplying options for the listener(s), for available options see {@link #typedef-BryntumListenerConfig}.\n *\n * A simpler signature may be used when only adding a listener for one event and no extra options\n * (such as `once` or `delay`) are required:\n *\n * ```javascript\n * myObject.on('click', myController.handleClicks, myController);\n * ```\n *\n * The args in this simple case are `eventName`, `handler` and `thisObj`\n *\n * @param {BryntumListenerConfig|String} config An object containing listener definitions, or the event name to listen for\n * @param {Object|Function} [thisObj] Default `this` reference for all listeners in the config object, or the handler\n * function to call if providing a string as the first arg.\n * @param {Object} [oldThisObj] The `this` reference if the old signature starting with a string event name is used..\n * @returns {Function} Returns a detacher function unless configured with `detachable: false`. Call detacher to remove listeners\n */\n on(config, thisObj, oldThisObj) {\n return this.addListener(config, thisObj, oldThisObj);\n }\n /**\n * Internal convenience method for adding an internal listener, that cannot be removed by the user.\n *\n * Alias for `on({ $internal : true, ... })`. Only supports single argument form.\n *\n * @internal\n */\n ion(config) {\n config.$internal = true;\n return this.on(config);\n }\n /**\n * Shorthand for {@link #function-removeListener}\n * @param {Object|String} config A config object or the event name\n * @param {Object|Function} [thisObj] `this` reference for all listeners, or the listener function\n * @param {Object} [oldThisObj] `this` The `this` object for the legacy way of adding listeners\n */\n un(...args) {\n this.removeListener(...args);\n }\n updateInternalListeners(internalListeners, oldInternalListeners) {\n oldInternalListeners?.detach();\n if (internalListeners) {\n internalListeners.detach = this.ion(internalListeners);\n }\n }\n get listeners() {\n return this.eventListeners;\n }\n changeListeners(listeners) {\n // If we are receiving class listeners, add them early, and they do not become\n // the configured listeners, and are not removed by setting listeners during the lifecycle.\n if (this.isConfiguring) {\n // Pull in internal listeners first\n this.getConfig('internalListeners');\n if (listeners) {\n this.on(listeners, this);\n }\n }\n // Setting listeners after config time clears the old set and adds the new.\n // This will initially happen at the tail end of the constructor when config\n // listeners are set.\n else {\n // Configured listeners use this as the thisObj by default.\n // Flatten using Objects.assign because it may have been part of\n // a prototype chained default configuration of another object.\n // eg: the tooltip config of a Widget.\n // listener object blocks from multiple configuration levels are pushed\n // onto an array (see listeners merge function in configurable block above).\n // If this has happened, each entry must be processed like this.\n if (Array.isArray(listeners)) {\n for (let i = 0, l = listeners[0], { length } = listeners; i < length; l = listeners[++i]) {\n if (!('thisObj' in l)) {\n listeners[i] = Objects.assign({ thisObj : this }, l);\n }\n }\n }\n else if (listeners && !('thisObj' in listeners)) {\n listeners = Objects.assign({ thisObj : this }, listeners);\n }\n return listeners;\n }\n }\n updateListeners(listeners, oldListeners) {\n // Only configured listeners get here. Class listeners are added by changeListeners.\n oldListeners && this.un(oldListeners);\n listeners && this.on(listeners);\n }\n /**\n * Removes an event listener. Same API signature as {@link #function-addListener}\n * @param {Object|String} config A config object or the event name\n * @param {Object|Function} thisObj `this` reference for all listeners, or the listener function\n * @param {Object} oldThisObj `this` The `this` object for the legacy way of adding listeners\n */\n removeListener(config, thisObj = config.thisObj, oldThisObj) {\n const me = this;\n if (typeof config === 'string') {\n return me.removeListener({ [config] : thisObj }, oldThisObj);\n }\n Object.entries(config).forEach(([eventName, listenerToRemove]) => {\n if (!specialProperties[eventName] && listenerToRemove != null) {\n eventName = eventName.toLowerCase();\n const\n { eventListeners } = me,\n index = me.findListener(eventName, listenerToRemove, thisObj);\n if (index >= 0) {\n let listeners = eventListeners[eventName];\n // Hook to call when a listener is removed (slightly before removing for now)\n me.afterRemoveListener?.(eventName, listeners[index]);\n if (listeners.length > 1) {\n if (listeners.$firing) {\n eventListeners[eventName] = listeners = listeners.slice();\n }\n // NOTE: we cannot untrack any detachers here because we may only be\n // removing some of its listeners\n listeners.splice(index, 1);\n }\n else {\n delete eventListeners[eventName];\n if (!me.onUnlisten.$nullFn) {\n me.onUnlisten(eventName);\n }\n }\n }\n }\n });\n if (config.thisObj && !config.thisObj.isDestroyed) {\n me.detachAutoDetacher(config);\n }\n }\n /**\n * Finds the index of a particular listener to the named event. Returns `-1` if the passed\n * function/thisObj listener is not present.\n * @param {String} eventName The name of an event to find a listener for.\n * @param {String|Function} listenerToFind The handler function to find.\n * @param {Object} defaultThisObj The `thisObj` for the required listener.\n * @internal\n */\n findListener(eventName, listenerToFind, defaultThisObj) {\n const\n eventListeners = this.eventListeners?.[eventName],\n fn = listenerToFind.fn || listenerToFind,\n thisObj = listenerToFind.thisObj || defaultThisObj;\n if (eventListeners) {\n for (let listenerEntry, i = 0, { length } = eventListeners; i < length; i++) {\n listenerEntry = eventListeners[i];\n if (listenerEntry.fn === fn && listenerEntry.thisObj === thisObj) {\n return i;\n }\n }\n }\n return -1;\n }\n /**\n * Check if any listener is registered for the specified eventName\n * @param {String} eventName\n * @returns {Boolean} `true` if listener is registered, otherwise `false`\n * @advanced\n */\n hasListener(eventName) {\n return Boolean(this.eventListeners?.[eventName?.toLowerCase()]);\n }\n /**\n * Relays all events through another object that also implements Events mixin. Adds a prefix to the event name\n * before relaying, for example add -> storeAdd\n * ```\n * // Relay all events from store through grid, will make it possible to listen for store events prefixed on grid:\n * 'storeLoad', 'storeChange', 'storeRemoveAll' etc.\n * store.relayAll(grid, 'store');\n *\n * grid.on('storeLoad', () => console.log('Store loaded');\n * ```\n * @param {Core.mixin.Events} through Object to relay the events through, needs to mix Events mixin in\n * @param {String} prefix Prefix to add to event name\n * @param {Boolean} [transformCase] Specify false to prevent making first letter of event name uppercase\n * @advanced\n */\n relayAll(through, prefix, transformCase = true) {\n if (!this.relayAllTargets) {\n this.relayAllTargets = [];\n }\n const { relayAllTargets } = this;\n through.ion({\n beforeDestroy : ({ source }) => {\n if (source === through) {\n const configs = relayAllTargets.filter(r => r.through === through);\n configs.forEach(config => ArrayHelper.remove(relayAllTargets, config));\n }\n }\n });\n relayAllTargets.push({ through, prefix, transformCase });\n }\n /**\n * Removes all listeners registered to this object by the application.\n */\n removeAllListeners(preserveInternal = true) {\n const listeners = this.eventListeners;\n let i, thisObj;\n for (const event in listeners) {\n const bucket = listeners[event];\n // We iterate backwards since we call removeListener which will splice out of\n // this array as we go...\n for (i = bucket.length; i-- > 0; /* empty */) {\n const cfg = bucket[i];\n if (!cfg.$internal || !preserveInternal) {\n this.removeListener(event, cfg);\n thisObj = cfg.thisObj;\n thisObj?.untrackDetachers?.(this);\n }\n }\n }\n }\n relayEvents(source, eventNames, prefix = '') {\n const listenerConfig = { detachable : true, thisObj : this };\n eventNames.forEach(eventName => {\n listenerConfig[eventName] = (event, ...params) => {\n return this.trigger(prefix + eventName, event, ...params);\n };\n });\n return source.on(listenerConfig);\n }\n /**\n * This method is called when the first listener for an event is added.\n * @param {String} eventName\n * @internal\n */\n onListen() {}\n /**\n * This method is called when the last listener for an event is removed.\n * @param {String} eventName\n * @internal\n */\n onUnlisten() {}\n destructorInterceptor() {\n const { autoDetachers, target, oldDestructor } = this;\n // Remove listeners first, so that they do not fire during destruction.\n // The observable being listened to by the thisObj may already have\n // been destroyed in a clean up sequence\n for (let i = 0; i < autoDetachers.length; i++) {\n const { dispatcher, config } = autoDetachers[i];\n if (!dispatcher.isDestroyed) {\n dispatcher.removeListener(config, target);\n }\n }\n oldDestructor.call(target);\n }\n /**\n * Internal function used to hook destroy() calls when using thisObj\n * @private\n */\n attachAutoDetacher(config, thisObj) {\n const\n target = config.thisObj || thisObj,\n // If it's a Bryntum Base subclass, hook doDestroy, otherwise, destroy\n destructorName = ('doDestroy' in target) ? 'doDestroy' : 'destroy';\n if (destructorName in target) {\n let { $autoDetachers } = target;\n if (!$autoDetachers) {\n target.$autoDetachers = $autoDetachers = [];\n }\n if (!target.$oldDestructor) {\n target.$oldDestructor = target[destructorName];\n // Binding instead of using closure (used to use FunctionHelper.createInterceptor) to not retain target\n // when detaching manually\n target[destructorName] = this.destructorInterceptor.bind({\n autoDetachers : $autoDetachers,\n oldDestructor : target.$oldDestructor,\n target\n });\n }\n $autoDetachers.push({ config, dispatcher : this });\n }\n else {\n target[destructorName] = () => {\n this.removeListener(config);\n };\n }\n }\n /**\n * Internal function used restore hooked destroy() calls when using thisObj\n * @private\n */\n detachAutoDetacher(config) {\n const target = config.thisObj;\n // Restore old destructor and remove from auto detachers only if we are not called as part of destruction.\n // (Altering $autoDetachers affects destruction iterating over them, breaking it. It is pointless to clean up\n // during destruction anyway, since everything gets removed)\n if (target.$oldDestructor && !target.isDestroying) {\n ArrayHelper.remove(\n target.$autoDetachers,\n target.$autoDetachers.find(detacher => detacher.config === config && detacher.dispatcher === this)\n );\n if (!target.$autoDetachers.length) {\n target['doDestroy' in target ? 'doDestroy' : 'destroy'] = target.$oldDestructor;\n target.$oldDestructor = null;\n }\n }\n }\n /**\n * Internal function used to run a callback function after an event is triggered\n * @private\n */\n once(eventName, callback) {\n return this.on({\n [eventName] : () => this.callback(callback),\n once : true\n });\n }\n //endregion\n //region Promise based workflow\n // experimental, used in tests to support async/await workflow\n await(eventName, options = { checkLog : true, resetLog : true, args : null }) {\n const me = this;\n if (options === false) {\n options = { checkLog : false };\n }\n const { args } = options;\n return new Promise(resolve => {\n // check if previously triggered?\n if (options.checkLog && me._triggered?.[eventName]) {\n // resolve immediately, no params though...\n resolve();\n // reset log to be able to await again\n if (options.resetLog) {\n me.clearLog(eventName);\n }\n }\n // This branch will listen for events until catches one with specific arguments\n if (args) {\n const detacher = me.on({\n [eventName] : (...params) => {\n // if args is a function use it to match arguments\n const argsOk = typeof args === 'function' ? args(...params) : Object.keys(args).every(key => {\n return key in params[0] && params[0][key] === args[key];\n });\n if (argsOk) {\n // resolve when event is fired with required arguments\n resolve(...params);\n // reset log to be able to await again\n if (options.resetLog) {\n me.clearLog(eventName);\n }\n detacher();\n }\n },\n prio : -10000 // Let others do their stuff first\n });\n }\n else {\n me.on({\n [eventName] : (...params) => {\n // resolve when event is caught\n resolve(...params);\n // reset log to be able to await again\n if (options.resetLog) {\n me.clearLog(eventName);\n }\n },\n prio : -10000, // Let others do their stuff first\n once : true // promises can only be resolved once anyway\n });\n }\n });\n }\n clearLog(eventName) {\n if (this._triggered) {\n if (eventName) {\n delete this._triggered[eventName];\n }\n else {\n this._triggered = {};\n }\n }\n }\n //endregion\n //region Trigger\n /**\n * Triggers an event, calling all registered listeners with the supplied arguments. Returning false from any listener\n * makes function return false.\n * @param {String} eventName Event name for which to trigger listeners\n * @param {Object} [param] Single parameter passed on to listeners, source property will be added to it (this)\n * @param {Boolean} [param.bubbles] Pass as `true` to indicate that the event will bubble up the widget\n * ownership hierarchy. For example up a `Menu`->`parent` Menu tree, or a `Field`->`Container` tree.\n * @typings param -> {{bubbles?: boolean, [key: string]: any}}\n * @returns {Boolean|Promise} Returns false if any listener returned `false`, or a `Promise` yielding\n * `true` / `false` based on what is returned from the async listener functions, otherwise `true`\n * @async\n * @advanced\n */\n trigger(eventName, param) {\n const\n me = this,\n name = eventName.toLowerCase(),\n {\n eventsSuspended,\n relayAllTargets,\n callOnFunctions\n } = me;\n let listeners = me.eventListeners?.[name],\n handlerPromises;\n // log trigger, used by experimental promise support to resolve immediately when needed\n if (!me._triggered) {\n me._triggered = {};\n }\n me._triggered[eventName] = true;\n if (eventsSuspended) {\n if (eventsSuspended.shouldQueue) {\n eventsSuspended.queue.push(arguments);\n }\n return true;\n }\n // Include catchall listener for all events.\n // Do not push the catchAll listeners onto the events own listener array.\n if (me.eventListeners?.catchall) {\n (listeners = (listeners ? listeners.slice() : [])).push(...me.eventListeners.catchall);\n // The catchAll listeners must honour their prio settings.\n listeners.sort(priorityComparator);\n }\n if (!listeners && !relayAllTargets && !callOnFunctions) {\n return true;\n }\n // default to include source : this in param\n if (param) {\n if (!('source' in param)) {\n if (Object.isExtensible(param)) {\n param.source = me;\n }\n else {\n param = Object.setPrototypeOf({\n source : me\n }, param);\n }\n }\n }\n else {\n param = {\n source : me\n };\n }\n // Lowercased event name should be the \"type\" property in keeping with DOM events.\n if (param.type !== name) {\n // Create instance property because \"type\" is read only\n if (param.constructor !== Object) {\n Reflect.defineProperty(param, 'type', { get : () => name });\n }\n else {\n param.type = name;\n }\n }\n param.eventName = eventName;\n // Bubble according to `bubbleEvents` config if `bubbles` is not explicitly set\n if (!('bubbles' in param) && me.bubbleEvents?.[eventName]) {\n param.bubbles = me.bubbleEvents[eventName];\n }\n if (callOnFunctions) {\n const fnName = 'on' + StringHelper.capitalize(eventName);\n if (fnName in me) {\n // Return true if the on[fnName] is not set to keep default behavior\n const result = me[fnName] ? me.callback(me[fnName], me, [param]) : true;\n let inhibit;\n if (Objects.isPromise(result)) {\n (handlerPromises || (handlerPromises = [])).push(result);\n }\n else {\n inhibit = result === false || inhibit;\n }\n // See if the called function was injected into the instance\n // masking an implementation in the prototype.\n // we must call the class's implementation after the injected one.\n // unless it's an injected chained function, in which case it will have been called above.\n // Note: The handler may have resulted in destruction.\n if (!me.isDestroyed && hasOwnProperty.call(me, fnName) && !me.pluginFunctionChain?.[fnName]) {\n const myProto = Object.getPrototypeOf(me);\n if (fnName in myProto) {\n const result = myProto[fnName].call(me, param);\n if (Objects.isPromise(result)) {\n (handlerPromises || (handlerPromises = [])).push(result);\n }\n else {\n inhibit = result === false || inhibit;\n }\n // A handler may have resulted in destruction.\n if (me.isDestroyed) {\n return;\n }\n }\n }\n // Returning false from an on-function prevents further triggering\n if (inhibit) {\n return false;\n }\n }\n }\n let ret;\n if (listeners) {\n let i = 0, internalAbort = false;\n // Let add/removeListener know that we're using the array to protect against a situation where an event\n // listener changes the listeners when triggering the event.\n listeners.$firing = true;\n // If any listener resulted in our destruction, abort.\n for (i; i < listeners.length && !me.isDestroyed && !internalAbort; i++) {\n const listener = listeners[i];\n // Previously, returning false would abort all further listeners. But now internal listeners\n // are allowed to run anyway\n if (ret === false && !listener.$internal) {\n continue;\n }\n let handler,\n thisObj = listener.thisObj;\n // Listeners that have thisObj are auto removed when thisObj is destroyed. If thisObj is destroyed from\n // a listener we might still end up here, since listeners are sliced and not affected by the removal\n if (!thisObj || !thisObj.isDestroyed) {\n // Flag for the expiry timer\n listener.called = true;\n if (listener.once) {\n me.removeListener(name, listener);\n }\n // prepare handler function\n if (typeof listener.fn === 'string') {\n if (thisObj) {\n handler = thisObj[listener.fn];\n }\n // keep looking for the callback in the hierarchy\n if (!handler) {\n const result = me.resolveCallback(listener.fn);\n handler = result.handler;\n thisObj = result.thisObj;\n }\n }\n else {\n handler = listener.fn;\n }\n // if `buffer` option is provided, the handler will be wrapped into buffer function,\n // but only once on the first call\n if (listener.buffer) {\n if (!listener.bufferFn) {\n const buffer = Number(listener.buffer);\n if (typeof buffer !== 'number' || isNaN(buffer)) {\n throw new Error(`Incorrect type for buffer, got \"${buffer}\" (expected a Number)`);\n }\n listener.bufferFn = FunctionHelper.createBuffered(handler, buffer, thisObj, listener.args);\n }\n handler = listener.bufferFn;\n }\n // if `throttle` option is provided, the handler will be called immediately, but all the rest calls\n // that happened during time specified in `throttle`, will be delayed and glued into 1 call\n if (listener.throttle) {\n const throttle = Number(listener.throttle);\n if (typeof throttle !== 'number' || isNaN(throttle)) {\n throw new Error(`Incorrect type for throttle, got \"${throttle}\" (expected a Number)`);\n }\n if (!listener.throttledFn) {\n listener.throttledFn = FunctionHelper.createThrottled(handler, throttle, thisObj, listener.args);\n }\n handler = listener.throttledFn;\n }\n const result = handler.call(thisObj || me, ...(listener.args || []), param);\n // Store result until we get a false return value, to mimic the old behavior from before we carried\n // on with calling internal listeners\n if (ret !== false) {\n ret = result;\n }\n if (listener.$internal && result === false) {\n internalAbort = true;\n }\n if (Objects.isPromise(result)) {\n result.$internal = listener.$internal;\n // If a handler is async (returns a Promise), then collect all Promises.\n // At the end we return a Promise which encapsulates all returned Promises\n // or, if only one handler was async, *the* Promise.\n // Don't allocate an Array until we have to.\n (handlerPromises || (handlerPromises = [])).push(result);\n }\n }\n }\n listeners.$firing = false;\n // An internal listener returned `false`, abort before relaying events etc.\n if (internalAbort) {\n return false;\n }\n }\n // relay all?\n relayAllTargets?.forEach(config => {\n let name = eventName;\n if (config.transformCase) {\n name = StringHelper.capitalize(name);\n }\n if (config.prefix) {\n name = config.prefix + name;\n }\n if (config.through.trigger(name, param) === false) {\n return false;\n }\n });\n // Use DOM standard event property name to indicate that the event\n // bubbles up the owner axis.\n // False from any handler cancels the bubble.\n // Must also avoid owner if any handlers destroyed the owner.\n if (param.bubbles && me.owner && !me.owner.isDestroyed) {\n return me.owner.trigger(eventName, param);\n }\n // Run internal promises even if external listener returned false\n handlerPromises = handlerPromises?.filter(p => ret !== false || p.$internal);\n // If any handlers were async functions (returned a Promise), then return a Promise\n // which resolves when they all resolve.\n if (handlerPromises?.length) {\n return new Promise(resolve => {\n Promise.all(handlerPromises).then(promiseResults => {\n const finalResult = !promiseResults.some(result => result === false);\n resolve(finalResult);\n });\n });\n }\n return ret !== false;\n }\n /**\n * Prevents events from being triggered until {@link #function-resumeEvents()} is called. Optionally queues events that are triggered while\n * suspended. Multiple calls stack to require matching calls to `resumeEvents()` before actually resuming.\n * @param {Boolean} queue Specify true to queue events triggered while suspended\n * @advanced\n */\n suspendEvents(queue = false) {\n const eventsSuspended = this.eventsSuspended || (this.eventsSuspended = { shouldQueue : queue, queue : [], count : 0 });\n eventsSuspended.count++;\n }\n /**\n * Resume event triggering after a call to {@link #function-suspendEvents()}. If any triggered events were queued they will be triggered.\n * @returns {Boolean} `true` if events have been resumed (multiple calls to suspend require an equal number of resume calls to resume).\n * @advanced\n */\n resumeEvents() {\n const suspended = this.eventsSuspended;\n if (suspended) {\n if (--suspended.count === 0) {\n this.eventsSuspended = null;\n if (suspended.shouldQueue) {\n for (const queued of suspended.queue) {\n this.trigger(...queued);\n }\n }\n }\n }\n return !Boolean(this.eventsSuspended);\n }\n //endregion\n};\n", "/**\n * @module Core/helper/AsyncHelper\n */\n/**\n * A helper class to make asynchronous tasks `await` friendly.\n */\nexport default class AsyncHelper {\n /**\n * Returns a promise that resolves on next animation frame.\n * ```\n * async method() {\n * // do work\n * await AsyncHelper.animationFrame();\n * // do more work\n * }\n * ```\n * @async\n */\n static animationFrame() {\n return new Promise(resolve => {\n requestAnimationFrame(resolve);\n });\n }\n /**\n * Returns a promise that resolves after a specified number of milliseconds.\n * ```\n * async method() {\n * await AsyncHelper.sleep(10);\n * // ...\n * }\n * ```\n * @param {Number} millis The number of milliseconds to sleep.\n * @async\n */\n static sleep(millis) {\n return new Promise(resolve => {\n setTimeout(() => {\n resolve();\n }, millis);\n });\n }\n /**\n * Returns a promise that resolves as soon as possible, allowing the browser to minimally process other messages.\n * This is the shortest possible delay the browser offers, so be aware that it does not necessarily allow the\n * browser to paint or reflow if used in a long loop. It does, however, allow other async methods to execute.\n * ```\n * async method() {\n * await AsyncHelper.yield();\n * // ...\n * }\n * ```\n * @async\n */\n static yield() {\n return Promise.resolve();\n }\n}\nAsyncHelper._$name = 'AsyncHelper';", "/**\n * @module Core/helper/AjaxHelper\n */\nimport Objects from './util/Objects.js';\n/**\n * Options for the requests. Please see\n * [fetch API](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch) for details\n *\n * To set default values for the options please use {@link #property-DEFAULT_FETCH_OPTIONS-static} property:\n *\n * ```javascript\n * // enable passing parameters in request body by default\n * AjaxHelper.DEFAULT_FETCH_OPTIONS = { addQueryParamsToBody : true };\n * ```\n *\n * @typedef {Object} FetchOptions\n * @property {'GET'|'POST'|'PUT'|'PATCH'|'DELETE'} [method] The request method, e.g., `GET`, `POST`\n * @property {Object} [queryParams] A key-value pair Object containing the params to add to the query string\n * @property {Object} [headers] Any headers you want to add to your request, contained within a `Headers` object or an\n * object literal with ByteString values\n * @property {Object} [body] Any body that you want to add to your request: this can be a `Blob`, `BufferSource`,\n * `FormData`, `URLSearchParams`, or `USVString` object. Note that a request using the `GET` or `HEAD` method cannot have a body.\n * @property {Boolean} [addQueryParamsToBody=false] Indicates whether `queryParams` should be passed in the request\n * body. Adding them to the body applies for `application/x-www-form-urlencoded` and `multipart/form-data`\n * content types only, so make sure to pass corresponding `Content-Type` header to `headers`.\n *\n * When the argument is `true` and:\n * - if `application/x-www-form-urlencoded` content-type header is passed\n * the method will make a `URLSearchParams` instance with `queryParams` and set it as the request body.\n * And if `body` already has a `URLSearchParams` instance provided the parameters will be set there.\n * - if `multipart/form-data` content-type header is passed\n * the method will make a `FormData` instance with `queryParams` and set it as the request body.\n * And if `body` already has a `FormData` instance provided the parameters will be set there.\n *\n * Otherwise, `queryParams` are added to the query string.\n * @property {'cors'|'no-cors'|'same-origin'} [mode] The mode you want to use for the request, e.g., `'cors'`, `'no-cors'`, or `'same-origin'`.\n * @property {'omit'|'same-origin'|'include'} [credentials] The request credentials you want to use for the request: `'omit'`, `'same-origin'`, or\n * `'include'`. To automatically send cookies for the current domain, this option must be provided\n * @property {Boolean} [parseJson] Specify `true` to parses the response and attach the resulting object to the\n * `Response` object as `parsedJson`\n */\nconst\n paramValueRegExp = /^(\\w+)=(.*)$/,\n parseParams = function(paramString) {\n const\n result = {},\n params = paramString.split('&');\n // loop through each 'filter={\"field\":\"name\",\"operator\":\"=\",\"value\":\"Sweden\",\"caseSensitive\":true}' string\n // So we cannot use .split('=')\n for (const nameValuePair of params) {\n const\n [match, name, value] = paramValueRegExp.exec(nameValuePair),\n decodedName = decodeURIComponent(name),\n decodedValue = decodeURIComponent(value);\n if (match) {\n let paramValue = result[decodedName];\n if (paramValue) {\n if (!Array.isArray(paramValue)) {\n paramValue = result[decodedName] = [paramValue];\n }\n paramValue.push(decodedValue);\n }\n else {\n result[decodedName] = decodedValue;\n }\n }\n }\n return result;\n };\n/**\n * Simplifies Ajax requests. Uses fetch & promises.\n *\n * ```javascript\n * AjaxHelper.get('some-url').then(response => {\n * // process request response here\n * });\n * ```\n *\n * Uploading file to server via FormData interface.\n * Please visit [FormData](https://developer.mozilla.org/en-US/docs/Web/API/FormData) for details.\n *\n * ```javascript\n * const formData = new FormData();\n * formData.append('file', 'fileNameToUpload');\n * AjaxHelper.post('file-upload-url', formData).then(response => {\n * // process request response here\n * });\n * ```\n *\n */\nexport default class AjaxHelper {\n /**\n * Sets default options for {@link #function-fetch-static AjaxHelper#fetch()} calls. Please see\n * {@link #typedef-FetchOptions} and\n * [fetch API](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch) for details.\n *\n * ```javascript\n * // default content-type for all requests will be \"application/json\"\n * AjaxHelper.DEFAULT_FETCH_OPTIONS = {\n * headers : {\n * 'content-type' : 'application/json'\n * }\n * };\n * ```\n * @member {FetchOptions} DEFAULT_FETCH_OPTIONS\n * @static\n */\n static DEFAULT_FETCH_OPTIONS = {};\n /**\n * Make a request (using GET) to the specified url.\n * @param {String} url URL to `GET` from\n * @param {FetchOptions} [options] The options for the `fetch` API\n * @returns {Promise} The fetch Promise, which can be aborted by calling a special `abort` method\n * @async\n */\n static get(url, options) {\n return this.fetch(url, options);\n }\n /**\n * POST data to the specified URL.\n * @param {String} url URL to `POST` to\n * @param {String|Object|FormData} payload The data to post. If an object is supplied, it will be stringified\n * @param {FetchOptions} [options] The options for the `fetch` API\n * @returns {Promise} The fetch Promise, which can be aborted by calling a special `abort` method\n * @async\n */\n static post(url, payload, options = {}) {\n if (!(payload instanceof FormData) && !(typeof payload === 'string')) {\n payload = JSON.stringify(payload);\n options.headers = options.headers || {};\n options.headers['Content-Type'] = options.headers['Content-Type'] || 'application/json';\n }\n return this.fetch(url, Object.assign({\n method : 'POST',\n body : payload\n }, options));\n }\n /**\n * Fetch the specified resource using the `fetch` API.\n * @param {String} url URL to fetch from\n * @param {FetchOptions} [options] The options for the `fetch` API\n * @returns {Promise} The fetch Promise, which can be aborted by calling a special `abort` method\n * @async\n */\n static fetch(url, options) {\n let controller;\n // inherit global options\n options = Objects.merge({}, AjaxHelper.DEFAULT_FETCH_OPTIONS, options);\n // AbortController is not supported by LockerService\n // https://github.com/bryntum/support/issues/3689\n if (typeof AbortController !== 'undefined') {\n controller = options.abortController = new AbortController();\n options.signal = controller.signal;\n }\n if (!('credentials' in options)) {\n options.credentials = 'include';\n }\n if (options.queryParams) {\n const params = Object.entries(options.queryParams);\n if (params.length) {\n let paramsAdded = false;\n // for some content types we are going to add parameters to body (if that's not disabled)\n if (options.headers && options.addQueryParamsToBody === true) {\n const contentType = new Headers(options.headers).get('Content-Type');\n let bodyClass;\n switch (contentType) {\n case 'application/x-www-form-urlencoded':\n bodyClass = URLSearchParams;\n break;\n case 'multipart/form-data':\n bodyClass = FormData;\n break;\n }\n // if that's one of supported content types\n if (bodyClass) {\n const body = options.body || (options.body = new bodyClass());\n // put parameters to body if it's of supported type\n if (body instanceof bodyClass) {\n params.forEach(([key, value]) => body.set(key, value));\n // remember parameters are already added\n paramsAdded = true;\n }\n }\n }\n // if parameters are not added yet append them to the query string\n if (!paramsAdded) {\n url += (url.includes('?') ? '&' : '?') + params.map(([param, value]) =>\n `${param}=${encodeURIComponent(value)}`\n ).join('&');\n }\n }\n }\n // Promise that will be resolved either when network request is finished or when json is parsed\n const promise = new Promise((resolve, reject) => {\n fetch(url, options).then(\n response => {\n if (options.parseJson) {\n response.json().then(json => {\n response.parsedJson = json;\n resolve(response);\n }).catch(error => {\n response.parsedJson = null;\n response.error = error;\n reject(response);\n });\n }\n else {\n resolve(response);\n }\n }\n ).catch(error => {\n error.stack = promise.stack;\n reject(error);\n });\n });\n promise.stack = new Error().stack;\n promise.abort = function() {\n controller?.abort();\n };\n return promise;\n }\n /**\n * Registers the passed URL to return the passed mocked up Fetch Response object to the\n * AjaxHelper's promise resolve function.\n * @param {String} url The url to return mock data for\n * @param {Object|Function} response A mocked up Fetch Response object which must contain\n * at least a `responseText` property, or a function to which the `url` and a `params` object\n * and the `Fetch` `options` object is passed which returns that.\n * @param {String} response.responseText The data to return.\n * @param {Boolean} [response.synchronous] resolve the Promise immediately\n * @param {Number} [response.delay=100] resolve the Promise after this number of milliseconds.\n */\n static mockUrl(url, response) {\n const me = this;\n (me.mockAjaxMap || (me.mockAjaxMap = {}))[url] = response;\n // Inject the override into the AjaxHelper instance\n if (!AjaxHelper.originalFetch) {\n AjaxHelper.originalFetch = AjaxHelper.fetch;\n AjaxHelper.fetch = me.mockAjaxFetch.bind(me);\n }\n }\n static async mockAjaxFetch(url, options) {\n const urlAndParams = url.split('?');\n let result = this.mockAjaxMap[urlAndParams[0]],\n parsedJson = null;\n if (result) {\n if (typeof result === 'function') {\n result = await result(urlAndParams[0], urlAndParams[1] && parseParams(urlAndParams[1]), options);\n }\n try {\n parsedJson = options?.parseJson && JSON.parse(result.responseText);\n }\n catch (error) {\n parsedJson = null;\n result.error = error;\n }\n result = Object.assign({\n status : 200,\n ok : true,\n headers : new Headers(),\n statusText : 'OK',\n url,\n parsedJson,\n text : () => new Promise((resolve) => {\n resolve(result.responseText);\n }),\n json : () => new Promise((resolve) => {\n resolve(parsedJson);\n })\n }, result);\n return new Promise(function(resolve, reject) {\n if (result.synchronous) {\n resolve(result);\n }\n else {\n setTimeout(function() {\n resolve(result);\n }, ('delay' in result ? result.delay : 100));\n }\n });\n }\n else {\n return AjaxHelper.originalFetch(url, options);\n }\n }\n}\nAjaxHelper._$name = 'AjaxHelper';", "/**\n * @module Core/localization/LocaleHelper\n */\n/**\n * @typedef {Object} LocaleKeys\n * Object which contains `key: value` localization pairs.\n * Key value may have `String`, `Function`, `LocaleKeys` or `Object` type.\n *\n * Example:\n *\n * ```javascript\n * {\n * title : 'Title',\n * count : number => `Count is ${number}`,\n * MyClass : {\n * foo : 'bar'\n * }\n * }\n * ```\n *\n * @property {String|Function|LocaleKeys|Object} key localization key\n * @typings {[key: string]}:{string|number|Function|LocaleKeys|object}\n */\n/**\n * @typedef {LocaleKeys} Locale\n * Locale configuration object which contains locale properties alongside with localization pairs.\n *\n * Example:\n *\n * ```javascript\n {\n * localeName : 'En',\n * localeDesc : 'English (US)',\n * localeCode : 'en-US',\n * ... (localization key:value pairs)\n * }\n * ```\n *\n * @property {String} localeName Locale name. For example: \"En\"\n * @property {String} localeDesc Locale description to be shown in locale picker list. For example: \"English (US)\"\n * @property {String} localeCode Locale code. Two letter locale code or two letter locale and two letter country code.\n * For example: \"en\" or 'en_US'\n * @property {String} [localePath] Locale path for asynchronous loading using\n * AjaxHelper {@link Core.helper.AjaxHelper#function-get-static} request\n */\n/**\n * @typedef {Object} Locales\n * Object which contains locales. Each object key represents published locale by its `localeName`.\n *\n * Example:\n *\n * ```javascript\n * // This returns English locale.\n * const englishLocale = LocaleHelper.locales.En;\n * ```\n *\n * @property {Locale} key localization object\n * @typings {[key: string]}:{Locale}\n */\nconst global = typeof self !== 'undefined'\n ? self\n : typeof globalThis !== 'undefined'\n ? globalThis\n : null;\n/**\n * Thin class which provides locale management methods.\n * Class doesn't import other API classes and can be used separately for publishing locales before importing product classes.\n *\n * Locale should be published with {@link ##function-publishLocale-static} method before it is available for localizing of Bryntum API classes and widgets.\n *\n * Example:\n *\n * ```javascript\n * LocaleHelper.publishLocale({\n * localeName : 'En',\n * localeDesc : 'English (US)',\n * localeCode : 'en-US',\n * ... (localization key:value pairs)\n * });\n * ```\n *\n * or for asynchronous loading from remote path on applying locale\n *\n * ```javascript\n *LocaleHelper.publishLocale({\n * localeName : 'En',\n * localeDesc : 'English (US)',\n * localeCode : 'en-US',\n * localePath : 'https://my-server/localization/en.js'\n * });\n * ```\n */\nexport default class LocaleHelper {\n static skipLocaleIntegrityCheck = false;\n /**\n * Merges all properties of provided locale objects into new locale object.\n * Locales are merged in order they provided and locales which go later replace\n * same properties of previous locales.\n * @param {...Object} locales Locales to merge\n * @returns {Object} Merged locale\n */\n static mergeLocales(...locales) {\n const result = {};\n locales.forEach(locale => {\n Object.keys(locale).forEach(key => {\n if (typeof locale[key] === 'object') {\n result[key] = { ...result[key], ...locale[key] };\n }\n else {\n result[key] = locale[key];\n }\n });\n });\n return result;\n }\n /**\n * Removes all properties from `locale` that are present in the provided `toTrim`.\n * @param {Object} locale Locale to process\n * @param {Object} toTrim Object enumerating properties that should be removed.\n * When `false` throws exceptions in such cases.\n */\n static trimLocale(locale, toTrim) {\n const remove = (key, subKey) => {\n if (locale[key]) {\n if (subKey) {\n if (locale[key][subKey]) {\n delete locale[key][subKey];\n }\n }\n else {\n delete locale[key];\n }\n }\n };\n Object.keys(toTrim).forEach(key => {\n if (Object.keys(toTrim[key]).length > 0) {\n Object.keys(toTrim[key]).forEach(subKey => remove(key, subKey));\n }\n else {\n remove(key);\n }\n });\n }\n /**\n * Normalizes locale object to {@link Locale} type.\n *\n * Supported configs:\n *\n * ```javascript\n * LocaleHelper.normalizeLocale({\n * localeName : 'En',\n * localeDesc : 'English (US)',\n * localeCode : 'en-US',\n * ... (localization key:value pairs)\n * });\n * ```\n *\n * and for backward compatibility\n *\n * ```javascript\n * LocaleHelper.normalizeLocale('En', {\n * name : 'En',\n * desc : 'English (US)',\n * code : 'en-US',\n * locale : {\n * ... (localization key:value pairs)\n * }\n * });\n * ```\n * @param {String|Object} nameOrConfig String name of locale or locale object\n * @param {Object} [config] Locale object\n * @returns {Locale} Locale object\n * @internal\n */\n static normalizeLocale(nameOrConfig, config) {\n if (!nameOrConfig) {\n throw new Error(`\"nameOrConfig\" parameter can not be empty`);\n }\n if (typeof nameOrConfig === 'string') {\n if (!config) {\n throw new Error(`\"config\" parameter can not be empty`);\n }\n if (config.locale) {\n // Matches legacy locale type\n config.name = nameOrConfig || config.name;\n }\n else {\n config.localeName = nameOrConfig;\n }\n }\n else {\n config = nameOrConfig;\n }\n let locale = {};\n if (config.name || config.locale) {\n // Matches legacy locale type\n locale = Object.assign({\n localeName : config.name\n }, config.locale);\n config.desc && (locale.localeDesc = config.desc);\n config.code && (locale.localeCode = config.code);\n config.path && (locale.localePath = config.path);\n }\n else {\n if (!config.localeName) {\n throw new Error(`\"config\" parameter doesn't have \"localeName\" property`);\n }\n // Extract locale config from name object\n locale = Object.assign({}, config);\n }\n // Cleanup result\n for (const key of ['name', 'desc', 'code', 'path']) {\n if (locale[key]) {\n delete locale[key];\n }\n }\n if (!locale.localeName) {\n throw new Error(`Locale name can not be empty`);\n }\n return locale;\n }\n /**\n * Get/set currently published locales.\n * Returns an object with locales.\n *\n * Example:\n *\n * ```javascript\n * const englishLocale = LocaleHelper.locales.En;\n * ```\n *\n * `englishLocale` contains {@link Locale} object.\n *\n * @readonly\n * @member {Locales} locales\n * @static\n */\n static get locales() {\n return global.bryntum.locales || {};\n }\n static set locales(locales) {\n global.bryntum.locales = locales;\n }\n /**\n * Get/set current locale name. Defaults to \"En\"\n * @member {String} localeName\n * @static\n */\n static get localeName() {\n return global.bryntum.locale || 'En';\n }\n static set localeName(localeName) {\n global.bryntum.locale = localeName || LocaleHelper.localeName;\n }\n /**\n * Get current locale config specified by {@link ##property-localeName-static}.\n * If no current locale specified, returns default `En` locale or first published locale\n * or empty locale object if no published locales found.\n * @readonly\n * @member {Locales} locale\n * @static\n */\n static get locale() {\n return LocaleHelper.localeName && this.locales[LocaleHelper.localeName] || this.locales.En || Object.values(this.locales)[0] || { localeName : '', localeDesc : '', localeCoode : '' };\n }\n /**\n * Publishes a locale to make it available for applying.\n * Published locales are available in {@link ##property-locales-static}.\n *\n * Recommended usage:\n *\n * ```javascript\n * LocaleHelper.publishLocale({\n * localeName : 'En',\n * localeDesc : 'English (US)',\n * localeCode : 'en-US',\n * ... (localization key:value pairs)\n * });\n * ```\n *\n * for backward compatibility (prior to `5.3.0` version):\n *\n * ```javascript\n * LocaleHelper.publishLocale('En', {\n * name : 'En',\n * desc : 'English (US)',\n * code : 'en-US',\n * locale : {\n * ... (localization key:value pairs)\n * }\n * });\n * ```\n *\n * Publishing a locale will automatically merge it's localization keys with existing locale matching by locale name,\n * replacing existing one with new. To replace existing locale entirely pass `true` to optional `config` parameter.\n *\n * Example:\n *\n * ```javascript\n * LocaleHelper.publishLocale({\n * localeName : 'En',\n * localeDesc : 'English (US)',\n * localeCode : 'en-US',\n * ... (localization key:value pairs)\n * }, true);\n * ```\n *\n * @param {String|Locale} nameOrConfig String name of locale (for example `En` or `SvSE`) or locale object\n * @param {Locale|Boolean} [config] Locale object.\n * Not used if locale object is passed as first method parameter.\n * Path `true` value and locale object as first method parameter to publish locale without merging with existing one.\n * @returns {Locale} Locale object\n */\n static publishLocale(nameOrConfig, config) {\n const\n { locales } = global.bryntum,\n locale = LocaleHelper.normalizeLocale(nameOrConfig, config),\n { localeName } = locale;\n if (!locales[localeName] || config === true) {\n locales[localeName] = locale;\n }\n else {\n locales[localeName] = this.mergeLocales(locales[localeName] || {}, locale || {});\n }\n return locales[localeName];\n }\n}\nglobal.bryntum = global.bryntum || {};\nglobal.bryntum.locales = global.bryntum.locales || {};\nLocaleHelper._$name = 'LocaleHelper';", "import Base from '../Base.js';\nimport AjaxHelper from '../helper/AjaxHelper.js';\nimport Events from '../mixin/Events.js';\nimport BrowserHelper from '../helper/BrowserHelper.js';\nimport LocaleHelper from '../localization/LocaleHelper.js';\nimport VersionHelper from '../helper/VersionHelper.js';\n/**\n * @module Core/localization/LocaleManager\n */\n// Documented at the export below, to work for singleton\nclass LocaleManager extends Events(Base) {\n static get defaultConfig() {\n return {\n // Enable strict locale checking by default for tests\n throwOnMissingLocale : VersionHelper.isTestEnv\n };\n }\n construct(...args) {\n const me = this;\n super.construct(...args);\n if (BrowserHelper.isBrowserEnv) {\n // Try get locale name from script's `default-locale` tag\n const scriptTag = document.querySelector('script[data-default-locale]');\n if (scriptTag) {\n me.applyLocale(scriptTag.dataset.defaultLocale);\n }\n else if (me.locale?.localeName) {\n me.applyLocale(me.locale.localeName);\n }\n }\n }\n /**\n * Get/set currently registered locales.\n * Alias for {@link Core.localization.LocaleHelper#property-locales-static LocaleHelper.locales}.\n * @readonly\n * @member {Locales} locales\n */\n get locales() {\n return LocaleHelper.locales;\n }\n set locales(locales) {\n LocaleHelper.locales = locales;\n }\n /**\n * Get/set currently used locale.\n * Setter calls {@link #function-applyLocale}.\n * @member {Locales} locale\n * @accepts {String|Locale}\n */\n set locale(nameOrConfig) {\n this.applyLocale(nameOrConfig);\n }\n get locale() {\n return LocaleHelper.locale;\n }\n /**\n * Publishes a locale to make it available for applying.\n * @deprecated Since 5.3.0. Use {@link Core.localization.LocaleHelper#function-publishLocale-static LocaleHelper.publishLocale} instead.\n *\n * @param {String|Locale} nameOrConfig String name of locale (for example `En` or `SvSE`) or locale object.\n * @param {Locale} [config] Locale object. Not used if object is passed as first method parameter\n * @returns {Locale} published locale object is passed as first method parameter\n * @function registerLocale\n */\n registerLocale(nameOrConfig, config) {\n VersionHelper.deprecate('Core', '6.0.0', 'LocaleManager.registerLocale deprecated, use LocaleHelper.publishLocale instead');\n LocaleHelper.publishLocale(nameOrConfig, config);\n }\n /**\n * Extends locale specified by name to add additional translations and applies it.\n * @deprecated Since 5.3.0. Use {@link ##function-applyLocale} instead.\n *\n * @param {String} name Name of locale (for example `En` or `SvSE`).\n * @param {Locale} config Locale object\n * @returns {Locale|Promise} locale object or Promise which resolves with locale object after it was loaded\n * @function extendLocale\n */\n extendLocale(name, config) {\n VersionHelper.deprecate('Core', '6.0.0', 'LocaleManager.extendLocale deprecated, use LocaleManager.applyLocale instead');\n const locale = LocaleHelper.publishLocale(name, config);\n return this.applyLocale(locale, true);\n }\n /**\n * Applies a locale by string name or publishes new locale configuration with\n * {@link Core.localization.LocaleHelper#function-publishLocale-static} and applies it.\n * If locale is specified by string name, like 'En', it must be published before applying it.\n *\n * @param {String|Locale} nameOrConfig String name of locale (for example `En` or `SvSE`) or locale object\n * @param {Locale|Boolean} [config] Locale object. Pass `true` to reapply locale which is passed as first method parameter.\n * @returns {Locale|Promise} locale object or Promise which resolves with locale object after it was loaded\n * @fires locale\n * @async\n * @function applyLocale\n */\n applyLocale(nameOrConfig, config, ignoreError = false) {\n const me = this;\n let localeConfig;\n if (typeof nameOrConfig === 'string') {\n if (typeof config !== 'object') {\n localeConfig = me.locales[nameOrConfig];\n if (!localeConfig) {\n if (ignoreError) {\n return true;\n }\n throw new Error(`Locale \"${nameOrConfig}\" is not published. Publish with LocaleHelper.publishLocale() before applying.`);\n }\n }\n else {\n localeConfig = LocaleHelper.publishLocale(nameOrConfig, config);\n }\n }\n else {\n localeConfig = LocaleHelper.publishLocale(nameOrConfig);\n }\n if (me.locale.localeName && me.locale.localeName === localeConfig.localeName && config !== true) {\n // no need to apply same locale again\n return me.locale;\n }\n // Set current locale name\n LocaleHelper.localeName = localeConfig.localeName;\n const triggerLocaleEvent = () => {\n /**\n * Fires when a locale is applied\n * @event locale\n * @param {Core.localization.LocaleManager} source The Locale manager instance.\n * @typings source -> {typeof LocaleManager}\n * @param {Locale} locale Locale configuration\n */\n me.trigger('locale', localeConfig);\n };\n if (localeConfig.localePath) {\n return new Promise((resolve, reject) => {\n me.loadLocale(localeConfig.localePath).then(response => {\n response.text().then(text => {\n const parseLocale = new Function(text);\n parseLocale();\n if (BrowserHelper.isBrowserEnv) {\n localeConfig = me.locales[localeConfig.localeName];\n // Avoid loading next time\n if (localeConfig) {\n delete localeConfig.localePath;\n }\n }\n triggerLocaleEvent();\n resolve(localeConfig);\n });\n }).catch(response => reject(response));\n });\n }\n triggerLocaleEvent();\n return localeConfig;\n }\n /**\n * Loads a locale using AjaxHelper {@link Core.helper.AjaxHelper#function-get-static} request.\n * @private\n * @param {String} path Path to locale file\n * @async\n */\n loadLocale(path) {\n return AjaxHelper.get(path);\n }\n /**\n * Specifies if {@link Core.localization.Localizable#function-L-static Localizable.L()} function would throw error if no localization found at runtime.\n *\n * @member {Boolean} throwOnMissingLocale\n * @default false\n */\n set throwOnMissingLocale(value) {\n this._throwOnMissingLocale = value;\n }\n get throwOnMissingLocale() {\n return this._throwOnMissingLocale;\n }\n}\nconst LocaleManagerSingleton = new LocaleManager();\n/**\n * Singleton that handles switching locale.\n * Locales can be included on page with `\n * ```\n *\n * ```javascript\n * // importing from package\n * import zipcelx from 'zipcelx';\n *\n * const grid = new Grid({\n * features : {\n * excelExporter : {\n * zipcelx\n * }\n * }\n * })\n * ```\n *\n * Here is an example of how to add the feature:\n *\n * ```javascript\n * const grid = new Grid({\n * features : {\n * excelExporter : {\n * // Choose the date format for date fields\n * dateFormat : 'YYYY-MM-DD HH:mm',\n *\n * exporterConfig : {\n * // Choose the columns to include in the exported file\n * columns : ['name', 'role'],\n * // Optional, export only selected rows\n * rows : grid.selectedRecords\n * }\n * }\n * }\n * });\n * ```\n *\n * And how to call it:\n *\n * ```javascript\n * grid.features.excelExporter.export({\n * filename : 'Export',\n * exporterConfig : {\n * columns : [\n * { text : 'First Name', field : 'firstName', width : 90 },\n * { text : 'Age', field : 'age', width : 40 },\n * { text : 'Starts', field : 'start', width : 140 },\n * { text : 'Ends', field : 'finish', width : 140 }\n * ]\n * }\n * })\n * ```\n *\n * Exporting to CSV is done with the `csv` config:\n *\n * ```javascript\n * grid.features.excelExporter.export({\n * filename : 'myfile',\n * csv : true\n * })\n * ```\n *\n * This feature is **disabled** by default.\n * For info on enabling it, see {@link Grid/view/mixin/GridFeatures}.\n *\n * {@note}This class requires a 3rd party library to export to XLSX{@/note}\n *\n *\n * @extends Core/mixin/InstancePlugin\n * @demo Grid/exporttoexcel\n * @classtype excelExporter\n * @feature\n */\nexport default class ExcelExporter extends InstancePlugin {\n static get $name() {\n return 'ExcelExporter';\n }\n static get defaultConfig() {\n return {\n /**\n * Name of the exported file\n * @config {String} filename\n * @default\n */\n filename : null,\n /**\n * Defines how dates in a cell will be formatted\n * @config {String} dateFormat\n * @default\n */\n dateFormat : 'YYYY-MM-DD',\n /**\n * Exporter class to use as a data provider. {@link Grid.util.TableExporter} by default.\n * @config {Grid.util.TableExporter}\n * @typings {typeof TableExporter}\n * @default\n */\n exporterClass : TableExporter,\n /**\n * Configuration object for {@link #config-exporterClass exporter class}.\n * @config {Object}\n */\n exporterConfig : null,\n /**\n * Reference to zipcelx library. If not provided, exporter will look in the global scope.\n * @config {Object}\n */\n zipcelx : null,\n /**\n * If this config is true, exporter will convert all empty values to ''. Empty values are:\n * * undefined, null, NaN\n * * Objects/class instances that do not have toString method defined and are stringified to [object Object]\n * * functions\n * @config {Boolean}\n */\n convertEmptyValueToEmptyString : true\n };\n }\n processValue(value) {\n if (\n value === undefined ||\n value === null ||\n Number.isNaN(value) ||\n typeof value === 'function' ||\n (typeof value === 'object' && String(value) === '[object Object]')\n ) {\n return '';\n }\n else {\n return value;\n }\n }\n generateExportData(config) {\n const\n me = this,\n { rows, columns } = me.exporter.export(config.exporterConfig);\n return {\n rows : rows.map(row => {\n return row.map((value, index) => {\n if (value instanceof Date) {\n value = DateHelper.format(value, config.dateFormat);\n }\n else if (typeof value === 'boolean') {\n value = new BooleanUnicodeSymbol(value);\n }\n if (me.convertEmptyValueToEmptyString) {\n value = me.processValue(value);\n }\n const type = columns[index]?.type === 'number' ? 'number' : 'string';\n return { value, type };\n });\n }),\n columns : columns.map(col => {\n let { field, value, width, type } = col;\n // when number column is exported with zipcelx, excel warns that sheet is broken and asks for repair\n // repair works, but having error on open doesn't look acceptable\n // type = type === 'number' ? 'number' : 'string';\n type = 'string';\n return { field, value, width, type };\n })\n };\n }\n /**\n * Generate and download an Excel (.xslx), or CSV file (.csv).\n * @param {Object} config Optional configuration object, which overrides initial settings of the feature/exporter.\n * @param {String} [config.filename] Name of the exported file\n * @param {String} [config.dateFormat] Defines how dates in a cell will be formatted\n * @param {Boolean|Object} [config.csv] Set to true to output as a CSV file, or as an object where you can specify\n * delimiters.\n * @param {String} [config.csv.columnDelimiter] The CSV delimiter to separate values on one line, defaults to `,`.\n * @param {String} [config.csv.lineDelimiter] The CSV delimiter to separate lines, defaults to `\\n`.\n * @param {String[]|Object[]} [config.columns] An array of column configuration objects\n * @param {Core.data.Model[]} [config.rows] An array of records to export\n * @returns {Promise} Promise that resolves when the export is completed\n */\n export(config = {}) {\n const\n me = this,\n zipcelx = me.zipcelx || globalThis.zipcelx;\n if (!zipcelx) {\n throw new Error('ExcelExporter: \"zipcelx\" library is required');\n }\n if (me.disabled) {\n return;\n }\n config = ObjectHelper.assign({}, me.config, config);\n if (!config.filename) {\n config.filename = me.client.$$name;\n }\n const\n { filename } = config,\n { rows, columns } = me.generateExportData(config);\n if (config.csv) {\n const\n columnDelimiter = config.csv.columnDelimiter || ',',\n lineDelimiter = config.csv.lineDelimiter || '\\n',\n headers = columns.map(col => this.processCsvValue(col.value)).join(columnDelimiter) + lineDelimiter,\n text = rows.map(rowValues => rowValues.map(obj => this.processCsvValue(obj.value)).join(`${columnDelimiter}`)).join(lineDelimiter),\n blob = new Blob([headers + text], { type : 'text/csv' });\n BrowserHelper.downloadBlob(blob, filename);\n return Promise.resolve();\n }\n return zipcelx({\n filename,\n sheet : {\n data : [columns].concat(rows),\n cols : columns\n }\n });\n }\n processCsvValue(text = '') {\n return `\"${String(text).replace(/\"/g, '\"\"')}\"`;\n }\n construct(grid, config) {\n super.construct(grid, config);\n if (!this.zipcelx) {\n if (typeof zipcelx !== 'undefined') {\n this.zipcelx = globalThis.zipcelx;\n }\n }\n }\n get exporter() {\n const me = this;\n return me._exporter || (me._exporter = me.exporterClass.new({ target : me.client }, me.exporterConfig));\n }\n}\nExcelExporter._$name = 'ExcelExporter'; GridFeatureManager.registerFeature(ExcelExporter, false, 'Grid');\n", "import InstancePlugin from '../../../Core/mixin/InstancePlugin.js';\nimport GridFeatureManager from '../GridFeatureManager.js';\nimport EventHelper from '../../../Core/helper/EventHelper.js';\n/**\n * @module Grid/feature/experimental/FileDrop\n */\n/**\n * An experimental feature that lets users drop files on a Widget. The widget fires an event when a file is dropped onto it.\n * In the event, you get access to the raw files as strings, that were parsed by calling `readAsBinaryString`.\n *\n * This feature is **disabled** by default.\n * For info on enabling it, see {@link Grid/view/mixin/GridFeatures}.\n *\n * NOTE: Currently only supports dropping one file at a time.\n *\n * @experimental\n * @extends Core/mixin/InstancePlugin\n * @classtype fileDrop\n * @feature\n */\nexport default class FileDrop extends InstancePlugin {\n static $name = 'FileDrop';\n construct(client, config) {\n const me = this;\n super.construct(client, config);\n // Setup event listeners for dragging files onto the grid element\n EventHelper.on({\n element : client.element,\n thisObj : me,\n drop : me.onFileDrop,\n dragover : me.onFileDragOver,\n dragenter : me.onFileDragEnter,\n dragleave : me.onFileDragLeave\n });\n }\n onFileLoad(domEvent) {\n this.client.trigger('fileDrop', {\n file : this.file, domEvent\n });\n }\n onFileDragEnter() {\n // Mouse over styling while dragging a file\n this.client.element.classList.add('b-dragging-file');\n }\n onFileDragOver(event) {\n event.preventDefault();\n }\n onFileDragLeave(event) {\n const { element } = this.client;\n if (event.relatedTarget && !element.contains(event.relatedTarget)) {\n this.client.element.classList.remove('b-dragging-file');\n }\n }\n onFileDrop(domEvent) {\n // Prevent default behavior (prevents the file from being opened)\n domEvent.preventDefault();\n const file = domEvent.dataTransfer.items[0].getAsFile();\n /**\n * Fired when a file is dropped on the widget element\n * @event fileDrop\n * @param {Grid.view.Grid} source The owning Grid instance\n * @param {DataTransferItem} file The dropped file descriptor\n * @param {DragEvent} domEvent The native DragEvent\n * @on-owner\n */\n this.client.trigger('fileDrop', { file, domEvent });\n this.onFileDragLeave(domEvent);\n }\n}\nFileDrop._$name = 'FileDrop'; GridFeatureManager.registerFeature(FileDrop, false, 'Grid');\n", "import Base from '../../Core/Base.js';\nimport DomDataStore from '../../Core/data/DomDataStore.js';\nimport ArrayHelper from '../../Core/helper/ArrayHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport DomSync from '../../Core/helper/DomSync.js';\nimport DomClassList from '../../Core/helper/util/DomClassList.js';\nimport Location from '../util/Location.js';\nimport Rectangle from '../../Core/helper/util/Rectangle.js';\n/**\n * @module Grid/row/Row\n */\nconst cellContentRange = document.createRange();\n/**\n * Represents a single rendered row in the grid. Consists of one row element for each SubGrid in use. The grid only\n * creates as many rows as needed to fill the current viewport (and a buffer). As the grid scrolls\n * the rows are repositioned and reused, there is not a one-to-one relation between rows and records.\n *\n * For normal use cases you should not have to use this class directly. Rely on using renderers instead.\n * @extends Core/Base\n */\nexport default class Row extends Base {\n static $name = 'Row';\n static get configurable() {\n return {\n /**\n * When __read__, this a {@link Core.helper.util.DomClassList} of class names to be\n * applied to this Row's elements.\n *\n * It can be __set__ using Object notation where each property name with a truthy value is added as\n * a class, or as a regular space-separated string.\n *\n * @member {Core.helper.util.DomClassList} cls\n * @accepts {Core.helper.util.DomClassList|Object}\n */\n /**\n * The class name to initially add to all row elements\n * @config {String|Core.helper.util.DomClassList|Object}\n */\n cls : {\n $config : {\n equal : (c1, c2) => c1?.isDomClassList && c2?.isDomClassList && c1.isEqual(c2)\n }\n }\n };\n }\n //region Init\n /**\n * Constructs a Row setting its index.\n * @param {Object} config A configuration object which must contain the following two properties:\n * @param {Grid.view.Grid} config.grid The owning Grid.\n * @param {Grid.row.RowManager} config.rowManager The owning RowManager.\n * @param {Number} config.index The index of the row within the RowManager's cache.\n * @function constructor\n * @internal\n */\n construct(config) {\n // Set up defaults and properties\n Object.assign(this, {\n _elements : {},\n _elementsArray : [],\n _cells : {},\n _allCells : [],\n _regions : [],\n lastHeight : 0,\n lastTop : -1,\n _dataIndex : 0,\n _top : 0,\n _height : 0,\n _id : null,\n forceInnerHTML : false,\n isGroupFooter : false,\n // Create our cell rendering context\n cellContext : new Location({\n grid : config.grid,\n id : null,\n columnIndex : 0\n })\n });\n super.construct(config);\n // For performance, the element translation method is set at Row consruct time.\n // The default uses transform : translate(), it can be overridden if rows need\n // to be positioned using layout, such as when sticky elements are used in cells.\n if (this.grid.positionMode === 'position') {\n this.translateElements = this.positionElements;\n }\n }\n doDestroy() {\n const me = this;\n // No need to clean elements up if the entire thing is being destroyed\n if (!me.rowManager.isDestroying) {\n me.removeElements();\n if (me.rowManager.idMap[me.id] === me) {\n delete me.rowManager.idMap[me.id];\n }\n }\n super.doDestroy();\n }\n //endregion\n //region Data getters/setters\n /**\n * Get index in RowManagers rows array\n * @property {Number}\n * @readonly\n */\n get index() {\n return this._index;\n }\n set index(index) {\n this._index = index;\n }\n /**\n * Get/set this rows current index in grids store\n * @property {Number}\n */\n get dataIndex() {\n return this._dataIndex;\n }\n set dataIndex(dataIndex) {\n if (this._dataIndex !== dataIndex) {\n this._dataIndex = dataIndex;\n this.eachElement(element => {\n element.dataset.index = dataIndex;\n element.ariaRowIndex = this.grid.hideHeaders ? dataIndex + 1 : dataIndex + 2;\n });\n }\n }\n /**\n * Get/set id for currently rendered record\n * @property {String|Number}\n */\n get id() {\n return this._id;\n }\n set id(id) {\n const\n me = this,\n idObj = { id },\n idMap = me.rowManager.idMap;\n if (me._id !== id || idMap[id] !== me) {\n if (idMap[me._id] === me) delete idMap[me._id];\n idMap[id] = me;\n me._id = id;\n me.eachElement(element => {\n DomDataStore.assign(element, idObj);\n element.dataset.id = id;\n });\n me.eachCell(cell => DomDataStore.assign(cell, idObj));\n }\n }\n //endregion\n //region Row elements\n /**\n * Add a row element for specified region.\n * @param {String} region Region to add element for\n * @param {HTMLElement} element Element\n * @private\n */\n addElement(region, element) {\n const\n me = this,\n { dataIndex } = me;\n let cellElement = element.firstElementChild;\n me._elements[region] = element;\n me._elementsArray.push(element);\n me._regions.push(region);\n DomDataStore.assign(element, { index : me.index });\n me._cells[region] = [];\n while (cellElement) {\n me._cells[region].push(cellElement);\n me._allCells.push(cellElement);\n DomDataStore.set(cellElement, {\n column : cellElement.dataset.column,\n columnId : cellElement.dataset.columnId,\n rowElement : cellElement.parentNode,\n row : me\n });\n cellElement = cellElement.nextElementSibling;\n }\n // making css selectors simpler, dataset has bad performance but it is only set once and never read\n element.dataset.index = dataIndex;\n element.ariaRowIndex = me.grid.hideHeaders ? dataIndex + 1 : dataIndex + 2;\n if (me.top !== null) {\n me.translateElements(true);\n }\n }\n /**\n * Get the element for the specified region.\n * @param {String} region\n * @returns {HTMLElement}\n */\n getElement(region) {\n return this._elements[region];\n }\n /**\n * Get the {@link Core.helper.util.Rectangle element bounds} for the specified region of this Row.\n * @param {String} region\n * @returns {Core.helper.util.Rectangle}\n */\n getRectangle(region) {\n return Rectangle.from(this.getElement(region));\n }\n /**\n * Execute supplied function for each regions element.\n * @param {Function} fn\n */\n eachElement(fn) {\n this._elementsArray.forEach(fn);\n }\n /**\n * Execute supplied function for each cell.\n * @param {Function} fn\n */\n eachCell(fn) {\n this._allCells.forEach(fn);\n }\n /**\n * An object, keyed by region name (for example `locked` and `normal`) containing the elements which comprise the full row.\n * @type {Object}\n * @readonly\n */\n get elements() {\n return this._elements;\n }\n /**\n * The row element, only applicable when not using multiple grid sections (see {@link #property-elements})\n * @type {HTMLElement}\n * @readonly\n */\n get element() {\n const region = Object.keys(this._elements)[0];\n return this._elements[region];\n }\n //endregion\n //region Cell elements\n /**\n * Row cell elements\n * @property {HTMLElement[]}\n * @readonly\n */\n get cells() {\n return this._allCells;\n }\n /**\n * Get cell elements for specified region.\n * @param {String} region Region to get elements for\n * @returns {HTMLElement[]} Array of cell elements\n */\n getCells(region) {\n return this._cells[region];\n }\n /**\n * Get the cell element for the specified column.\n * @param {String|Number} columnId Column id\n * @returns {HTMLElement} Cell element\n */\n getCell(columnId, strict = false) {\n return this._allCells.find(cell => {\n const cellData = DomDataStore.get(cell);\n // cellData will always have String type, use == to handle a column with Number type\n return cellData.columnId == columnId || (!strict && cellData.column == columnId);\n });\n }\n removeElements(onlyRelease = false) {\n const me = this;\n // Triggered before the actual remove to allow cleaning up elements etc.\n me.rowManager.trigger('removeRow', { row : me });\n if (!onlyRelease) {\n me.eachElement(element => element.remove());\n }\n me._elements = {};\n me._cells = {};\n me._elementsArray.length = me._regions.length = me._allCells.length = me.lastHeight = me.height = 0;\n me.lastTop = -1;\n }\n //endregion\n //region Height\n /**\n * Get/set row height\n * @property {Number}\n */\n get height() {\n return this._height;\n }\n set height(height) {\n this._height = height;\n }\n /**\n * Get row height including border\n * @property {Number}\n */\n get offsetHeight() {\n // me.height is specified height, add border height to it to get cells height to match specified rowHeight\n // border height is measured in Grid#get rowManager\n return this.height + this.grid._rowBorderHeight;\n }\n /**\n * Sync elements height to rows height\n * @private\n */\n updateElementsHeight(isExport) {\n const me = this;\n if (!isExport) {\n me.rowManager.storeKnownHeight(me.id, me.height);\n }\n // prevent unnecessary style updates\n if (me.lastHeight !== me.height) {\n this.eachElement(element => element.style.height = `${me.offsetHeight}px`);\n me.lastHeight = me.height;\n }\n }\n //endregion\n //region CSS\n /**\n * Add CSS classes to each element.\n * @param {...String|Object|Core.helper.util.DomClassList} classes\n */\n addCls(classes) {\n this.updateCls(this.cls.add(classes));\n }\n /**\n * Remove CSS classes from each element.\n * @param {...String|Object|Core.helper.util.DomClassList} classes\n */\n removeCls(classes) {\n this.updateCls(this.cls.remove(classes));\n }\n /**\n * Toggle CSS classes for each element.\n * @param {Object|Core.helper.util.DomClassList|...String} classes\n * @param {Boolean} add\n */\n toggleCls(classes, add) {\n this.updateCls(this.cls[add ? 'add' : 'remove'](classes));\n }\n /**\n * Adds/removes class names according to the passed object's properties.\n *\n * Properties with truthy values are added.\n * Properties with false values are removed.\n * @param {Object} classes Object containing properties to set/clear\n */\n assignCls(classes) {\n this.updateCls(this.cls.assign(classes));\n }\n changeCls(cls) {\n return cls?.isDomClassList ? cls : new DomClassList(cls);\n }\n updateCls(cls) {\n this.eachElement(element => DomHelper.syncClassList(element, cls));\n }\n setAttribute(attribute, value) {\n this.eachElement(element => element.setAttribute(attribute, value));\n }\n removeAttribute(attribute) {\n this.eachElement(element => element.removeAttribute(attribute));\n }\n //endregion\n //region Position\n /**\n * Is this the very first row?\n * @property {Boolean}\n * @readonly\n */\n get isFirst() {\n return this.dataIndex === 0;\n }\n /**\n * Row top coordinate\n * @property {Number}\n * @readonly\n */\n get top() {\n return this._top;\n }\n /**\n * Row bottom coordinate\n * @property {Number}\n * @readonly\n */\n get bottom() {\n return this._top + this._height + this.grid._rowBorderHeight;\n }\n /**\n * Sets top coordinate, translating elements position.\n * @param {Number} top Top coordinate\n * @param {Boolean} [silent] Specify `true` to not trigger translation event\n * @internal\n */\n setTop(top, silent) {\n if (this._top !== top) {\n this._top = top;\n this.translateElements(silent);\n }\n }\n /**\n * Sets bottom coordinate, translating elements position.\n * @param {Number} bottom Bottom coordinate\n * @param {Boolean} [silent] Specify `true` to not trigger translation event\n * @private\n */\n setBottom(bottom, silent) {\n this.setTop(bottom - this.offsetHeight, silent);\n }\n // Used by export feature to position individual row\n translate(top, silent = false) {\n this.setTop(top, silent);\n return top + this.offsetHeight;\n }\n /**\n * Sets css transform to position elements at correct top position (translateY)\n * @private\n */\n translateElements(silent) {\n const\n me = this,\n { top, _elementsArray } = me;\n if (me.lastTop !== top) {\n for (let i = 0, { length } = _elementsArray; i < length; i++) {\n _elementsArray[i].style.transform = `translate(0,${top}px)`;\n }\n !silent && me.rowManager.trigger('translateRow', { row : me });\n me.lastTop = top;\n }\n }\n /**\n * Sets css top to position elements at correct top position\n * @private\n */\n positionElements(silent) {\n const\n me = this,\n { top, _elementsArray } = me;\n if (me.lastTop !== top) {\n for (let i = 0, { length } = _elementsArray; i < length; i++) {\n _elementsArray[i].style.top = `${top}px`;\n }\n !silent && me.rowManager.trigger('translateRow', { row : me });\n me.lastTop = top;\n }\n }\n /**\n * Moves all row elements up or down and updates model.\n * @param {Number} offsetTop Pixels to offset the elements\n * @private\n */\n offset(offsetTop) {\n let newTop = this._top + offsetTop;\n // Not allowed to go below zero (won't be reachable on scroll in that case)\n if (newTop < 0) {\n offsetTop -= newTop;\n newTop = 0;\n }\n this.setTop(newTop);\n return offsetTop;\n }\n //endregion\n //region Render\n /**\n * Renders a record into this rows elements (trigger event that subgrids catch to do the actual rendering).\n * @param {Number} recordIndex\n * @param {Core.data.Model} record\n * @param {Boolean} [updatingSingleRow]\n * @param {Boolean} [batch]\n * @private\n */\n render(recordIndex, record, updatingSingleRow = true, batch = false, isExport = false) {\n const\n me = this,\n {\n cellContext,\n cls,\n elements,\n grid,\n rowManager,\n height : oldHeight,\n _id : oldId\n } = me,\n rowElData = DomDataStore.get(me._elementsArray[0]),\n rowHeight = rowManager._rowHeight,\n { store } = grid,\n { isTree } = store;\n let i = 0,\n size;\n // no record specified, try looking up in store (false indicates empty row, don't do lookup)\n if (!record && record !== false) {\n record = grid.store.getById(rowElData.id);\n recordIndex = grid.store.indexOf(record);\n }\n // Bail out if record is not resolved\n if (!record) {\n return;\n }\n // Now we have acquired a record, see what classes it requires on the\n const\n rCls = record?.cls,\n recordCls = rCls ? (rCls.isDomClassList ? rCls : new DomClassList(rCls)) : null;\n cls.assign({\n // do not put updating class if we're exporting the row\n 'b-grid-row-updating' : updatingSingleRow && grid.transitionDuration && !isExport,\n 'b-selected' : grid.isSelected(record?.id),\n 'b-readonly' : record.readOnly,\n 'b-linked' : record.isLinked,\n 'b-original' : record.hasLinks\n });\n // These are DomClassLists, so they have to have their properties processed by add/remove\n if (me.lastRecordCls) {\n cls.remove(me.lastRecordCls);\n }\n // Assign our record's cls to the row, and cache the value so it can be removed next time round\n if (recordCls) {\n cls.add(recordCls);\n me.lastRecordCls = Object.assign({}, recordCls);\n }\n else {\n me.lastRecordCls = null;\n }\n // used by GroupSummary feature to clear row before\n rowManager.trigger('beforeRenderRow', { row : me, record, recordIndex, oldId });\n grid.beforeRenderRow({ row : me, record, recordIndex, oldId, cls });\n // Flush any changes to our DomClassList to the Row's DOM\n me.updateCls(cls);\n if (updatingSingleRow && grid.transitionDuration && !isExport) {\n grid.setTimeout(() => {\n if (!me.isDestroyed) {\n cls.remove('b-grid-row-updating');\n me.updateCls(cls);\n }\n }, grid.transitionDuration + 50);\n }\n me.id = record.id;\n me.dataIndex = recordIndex;\n // Configured height, used as row height if renderers do not specify otherwise\n const height = (!grid.fixedRowHeight && grid.getRowHeight(record)) || rowHeight;\n // Max height returned by renderers\n let maxRequestedHeight = me.maxRequestedHeight = null;\n // Keep ARIA ownership up to date\n if (isTree) {\n for (const region in elements) {\n const el = elements[region];\n el.id = `${grid.id}-${region}-${me.id}`;\n DomHelper.setAttributes(el, {\n 'aria-level' : record.childLevel + 1,\n 'aria-setsize' : record.parent.children.length,\n 'aria-posinset' : record.parentIndex + 1\n });\n if (record.isExpanded(store)) {\n DomHelper.setAttributes(el, {\n 'aria-expanded' : true,\n // A branch node may be configured expanded, but yet have no children.\n // They may be added dynamically.\n 'aria-owns' : record.children?.length ? record.children?.map(r => `${grid.id}-${region}-${r.id}`).join(' ') : null\n });\n }\n else {\n if (record.isLeaf) {\n el.removeAttribute('aria-expanded');\n }\n else {\n el.setAttribute('aria-expanded', false);\n }\n el.removeAttribute('aria-owns');\n }\n }\n }\n cellContext._record = record;\n cellContext._id = record.id;\n cellContext._rowIndex = recordIndex;\n for (i = 0; i < grid.columns.visibleColumns.length; i++) {\n const column = grid.columns.visibleColumns[i];\n cellContext._columnId = column.id;\n cellContext._column = column;\n cellContext._columnIndex = i;\n cellContext._cell = me.getCell(column.id, true);\n cellContext.height = height;\n cellContext.maxRequestedHeight = maxRequestedHeight;\n cellContext.updatingSingleRow = updatingSingleRow;\n size = me.renderCell(cellContext);\n if (!rowManager.fixedRowHeight) {\n // We want to make row in all regions as tall as the tallest cell\n if (size.height != null) {\n maxRequestedHeight = Math.max(maxRequestedHeight, size.height);\n // Do not store a max height set by schedulers rendering, it has to base its layouts on the\n // original row height / that returned by other cells\n if (!size.transient) {\n me.maxRequestedHeight = maxRequestedHeight;\n }\n }\n }\n }\n const useHeight = maxRequestedHeight ?? height;\n me.height = grid.processRowHeight(record, useHeight) ?? useHeight;\n // Height gets set during render, reflect on elements\n me.updateElementsHeight(isExport);\n // Rerendering a row might change its height, which forces translation of all following rows\n if (updatingSingleRow && !isExport) {\n if (oldHeight !== me.height) {\n rowManager.translateFromRow(me, batch);\n }\n rowManager.trigger('updateRow', { row : me, record, recordIndex, oldId });\n rowManager.trigger('renderDone');\n }\n grid.afterRenderRow({ row : me, record, recordIndex, oldId, oldHeight, isExport });\n rowManager.trigger('renderRow', { row : me, record, recordIndex, oldId, isExport });\n if (oldHeight && me.height !== oldHeight) {\n rowManager.trigger('rowRowHeight', { row : me, record, height : me.height, oldHeight });\n }\n me.forceInnerHTML = false;\n }\n /**\n * Renders a single cell, calling features to allow them to hook\n * @param {Grid.util.Location|HTMLElement} cellContext A {@link Grid.util.Location} which contains rendering\n * options, or a cell element which can be used to initialize a {@link Grid.util.Location}\n * @param {Number} [cellContext.height] Configured row height\n * @param {Number} [cellContext.maxRequestedHeight] Maximum proposed row height from renderers\n * @param {Boolean} [cellContext.updatingSingleRow] Rendered as part of updating a single row\n * @param {Boolean} [cellContext.isMeasuring] Rendered as part of a measuring operation\n * @internal\n */\n renderCell(cellContext) {\n if (!cellContext.isLocation) {\n cellContext = new Location(cellContext);\n }\n let {\n cell : cellElement,\n record\n } = cellContext;\n const\n me = this,\n {\n grid,\n column,\n height,\n maxRequestedHeight,\n updatingSingleRow = true,\n isMeasuring = false\n } = cellContext,\n cellEdit = grid.features?.cellEdit,\n cellElementData = DomDataStore.get(cellElement),\n rowElement = cellElementData.rowElement,\n rowElementData = DomDataStore.get(rowElement);\n if (!record) {\n record = cellContext._record = grid.store.getById(rowElementData.id);\n if (!record) {\n return;\n }\n }\n let cellContent = column.getRawValue(record);\n const\n dataField = record.fieldMap[column.field],\n size = { configuredHeight : height, height : null, maxRequestedHeight },\n cellCls = column.getCellClass(cellContext),\n rendererData = {\n cellElement,\n dataField,\n rowElement,\n value : cellContent,\n record,\n column,\n size,\n grid,\n row : cellElementData.row,\n updatingSingleRow,\n isMeasuring\n },\n useRenderer = column.renderer || column.defaultRenderer;\n // Hook to allow processing cell before render, used by QuickFind & MergeCells\n grid.beforeRenderCell(rendererData);\n // Allow hook to redirect cell output\n if (rendererData.cellElement !== cellElement) {\n // Render to redirected target\n cellElement = rendererData.cellElement;\n }\n DomHelper.syncClassList(cellElement, cellCls);\n let shouldSetContent = true;\n // By default, `cellContent` is raw value extracted from Record based on Column field.\n // Call `renderer` if present, otherwise set innerHTML directly.\n if (useRenderer) {\n // `cellContent` could be anything here:\n // - null\n // - undefined when nothing is returned, used when column modifies cell content, for example Widget column\n // - number as cell value, to be converted to string\n // - string as cell value\n // - string which contains custom DOM element which is handled by Angular after we render it as cell value\n // - object with special $$typeof property equals to Symbol(react.element) handled by React when JSX is returned\n // - object which has no special properties but understood by Vue because the column is marked as \"Vue\" column\n // - object that should be passed to the `DomSync.sync` to update the cell content\n cellContent = column.callback(useRenderer, column, [rendererData]);\n if (cellContent === undefined) {\n if (record.generatedParent && column.rendererReturningContent) {\n cellContent = '';\n }\n else if (column.alwaysClearCell === false) {\n shouldSetContent = false;\n }\n }\n }\n else if (dataField) {\n cellContent = dataField.print(cellContent);\n }\n // Check if the cell content is going to be rendered by framework\n const hasFrameworkRenderer = grid.hasFrameworkRenderer?.({ cellContent, column });\n // This is exceptional case, using framework rendering while grouping is not supported.\n // Need to reset the content in case of JSX is returned from the renderer.\n // Normally, if a renderer returns some content, the Grouping feature will overwrite it with the grouped value.\n // But useRenderer cannot be ignored completely, since a column might want to render additional content to the\n // grouped row. For example, Action Column may render an action button the grouped row.\n if (hasFrameworkRenderer && record.isSpecialRow) {\n cellContent = '';\n }\n // If present, framework may decide if it wants our renderer to prerender the cell content or not.\n // In case of normal cells in flat grids, React and Vue perform the full rendering into the root cell element.\n // But in case of tree cell in tree grids, React and Vue require our renderer to prerender internals,\n // and they perform rendering into inner \"b-tree-cell-value\" element. This way we can see our expand controls,\n // bullets, etc.\n const frameworkPerformsFullRendering = hasFrameworkRenderer && !column.data.tree && !record.isSpecialRow;\n // `shouldSetContent` false means content is already set by the column (i.e. Widget column).\n // `frameworkPerformsFullRendering` true means full cell content is set by framework renderer.\n if (shouldSetContent && !frameworkPerformsFullRendering) {\n let renderTarget = cellElement;\n // If the cell is being edited, we render to a separate div and carefully\n // insert the contents into a Range which excludes the editor.\n if (cellEdit?.editorContext?.equals(cellContext) && !cellEdit.editor.isFinishing) {\n renderTarget = me.moveContentFromCell(cellElement, cellEdit.editor.element);\n }\n const\n hasObjectContent = cellContent != null && typeof cellContent === 'object',\n hasStringContent = typeof cellContent === 'string',\n text = (hasObjectContent || cellContent == null) ? '' : String(cellContent);\n // row might be flagged by GroupSummary to require full \"redraw\"\n if (me.forceInnerHTML) {\n // To allow minimal updates below, we must remove custom markup inserted by the GroupSummary feature\n renderTarget.innerHTML = '';\n // Delete cached content value\n delete renderTarget._content;\n cellElement.lastDomConfig = null;\n }\n // display cell contents as text or use actual html?\n // (disableHtmlEncode set by features that decorate cell contents)\n if (!hasObjectContent && column.htmlEncode && !column.disableHtmlEncode) {\n // Set innerText if cell currently has html content.\n if (cellElement._hasHtml) {\n renderTarget.innerText = text;\n cellElement._hasHtml = false;\n }\n else {\n DomHelper.setInnerText(renderTarget, text);\n }\n }\n else {\n if (column.autoSyncHtml && (!hasStringContent || DomHelper.getChildElementCount(renderTarget))) {\n // String content in html column is handled as a html template string\n if (hasStringContent) {\n // update cell with only changed attributes etc.\n DomHelper.sync(text, renderTarget.firstElementChild);\n }\n // Other content is considered to be a DomHelper config object\n else if (hasObjectContent) {\n DomSync.sync({\n domConfig : cellContent,\n targetElement : renderTarget\n });\n }\n }\n // Consider all returned plain objects to be DomHelper configs for cell content\n else if (hasObjectContent) {\n DomSync.sync({\n targetElement : renderTarget,\n domConfig : {\n onlyChildren : true,\n children : ArrayHelper.asArray(cellContent)\n }\n });\n }\n // Apply text as innerHTML only if it has changed\n else if (renderTarget._content !== text) {\n renderTarget.innerHTML = renderTarget._content = text;\n }\n }\n // If we had to render to a separate div to avoid the cell editor, insert the result now.\n if (renderTarget !== cellElement) {\n const { firstChild } = cellElement;\n for (const node of renderTarget.childNodes) {\n cellElement.insertBefore(node, firstChild);\n }\n }\n }\n // If present, framework renders content into the cell element.\n // Ignore special rows, like grouping.\n if (!record.isSpecialRow) {\n // processCellContent is implemented in the framework wrappers\n grid.processCellContent?.({\n cellElementData,\n rendererData,\n // In case of TreeColumn we should prerender inner cell content like expand controls, bullets, etc\n // Then the framework renders the content into the nested \"b-tree-cell-value\" element.\n // rendererHtml is set in TreeColumn.treeRenderer\n rendererHtml : rendererData.rendererHtml || cellContent\n });\n }\n if (column.autoHeight && size.height == null) {\n cellElement.classList.add('b-measuring-auto-height');\n // Shrinkwrap autoHeight must not allow a row's height to drop below the configured row height\n size.height = Math.max(cellElement.offsetHeight, grid.rowHeight);\n cellElement.classList.remove('b-measuring-auto-height');\n }\n if (!isMeasuring) {\n // Allow others to affect rendering\n me.rowManager.trigger('renderCell', rendererData);\n }\n return size;\n }\n //#region Hooks for salesforce\n moveContentFromCell(cellElement, editorElement) {\n cellContentRange.setStart(cellElement, 0);\n cellContentRange.setEndBefore(editorElement);\n const renderTarget = document.createElement('div');\n renderTarget.appendChild(cellContentRange.extractContents());\n return renderTarget;\n }\n //#endregion\n//endregion\n}\nRow.initClass();\nRow._$name = 'Row';", "import Widget from '../../Core/widget/Widget.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\n/**\n * @module Grid/view/Bar\n */\n/**\n * Base class used by Header and Footer. Holds an element for each column. Not intended to be used directly.\n *\n * @extends Core/widget/Widget\n * @internal\n * @abstract\n */\nexport default class Bar extends Widget {\n static get $name() {\n return 'Bar';\n }\n // Factoryable type name\n static get type() {\n return 'gridbar';\n }\n static get defaultConfig() {\n return {\n htmlCls : '',\n scrollable : {\n overflowX : 'hidden-scroll'\n }\n };\n }\n //region Init\n get columns() {\n return this._columns || this.subGrid.columns;\n }\n // Only needed for tests which create standalone Headers with no owning SubGrid.\n set columns(columns) {\n this._columns = columns;\n }\n //endregion\n /**\n * Fix cell widths (flex or fixed width) after rendering.\n * Not a part of template any longer because of CSP\n * @private\n */\n fixCellWidths() {\n const\n me = this,\n { hasFlex } = me.columns;\n let flexBasis;\n // single header \"cell\"\n me.columns.traverse(column => {\n const\n cellEl = me.getBarCellElement(column.id),\n domWidth = DomHelper.setLength(column.width),\n domMinWidth = DomHelper.setLength(column.minWidth),\n domMaxWidth = DomHelper.setLength(column.maxWidth);\n if (cellEl) {\n flexBasis = domWidth;\n cellEl.style.maxWidth = domMaxWidth;\n // Parent column without any specified width and flex should have flex calculated if any child has flex\n if (column.isParent && column.width == null && column.flex == null) {\n const flex = column.children.reduce((result, child) => (result += !child.hidden && child.flex || 0), 0);\n // Do not want to store this flex value on the column since it is always calculated\n cellEl.style.flex = flex > 0 ? `${flex} 0 auto` : '';\n // minWidth might leak from other column when reordering, reset it\n cellEl.style.minWidth = null;\n if (flex > 0) {\n column.traverse(col => col.data.minWidth = null);\n }\n }\n // Normal case, set flex, width etc.\n else {\n if (parseInt(column.minWidth) >= 0) {\n cellEl.style.minWidth = domMinWidth;\n }\n // Clear all the things we might have to set to correct cell widths\n cellEl.style.flex = cellEl.style.flexBasis = cellEl.style.width = '';\n if (column.flex) {\n // If column has children we need to give it\n // flex-shrink: 0, flex-basis: auto so that it always\n // shrinkwraps its children without shrinking\n if (!isNaN(parseInt(column.flex)) && column.children) {\n cellEl.style.flex = `${column.flex} 0 auto`;\n }\n else {\n cellEl.style.flex = column.flex;\n }\n }\n else if (parseInt(column.width) >= 0) {\n const parent = column.parent;\n // Only grid header bar has a notion of group headers\n // Column is a child of an unwidthed group. We have to use width\n // to stretch it.\n if (me.isHeader && !parent.isRoot && !parent.width) {\n cellEl.style.width = domWidth;\n }\n else {\n // Column header widths must be set using flex-basis.\n // Using width means that wide widths cause a flexed SubGrid\n // to bust the flex rules.\n // Note that grid in Grid#onColumnsResized and SubGrid#fixCellWidths,\n // cells MUST still be sized using width since rows\n // are absolutely positioned and will not cause the busting out\n // problem, and rows will not stretch to shrinkwrap the cells\n // unless they are widthed with width.\n cellEl.style.flexBasis = flexBasis;\n }\n }\n }\n if (column.height >= 0) {\n cellEl.style.height = DomHelper.setLength(column.height);\n }\n }\n });\n me.scrollable.element.classList.toggle('b-has-flex', hasFlex);\n }\n getLrPadding(cellEl) {\n if (!this.cellLrPadding) {\n const s = cellEl.ownerDocument.defaultView.getComputedStyle(cellEl);\n this.cellLrPadding = parseInt(s.getPropertyValue('padding-left')) + parseInt(s.getPropertyValue('padding-right')) +\n parseInt(s.getPropertyValue('border-left-width')) + parseInt(s.getPropertyValue('border-right-width'));\n }\n return this.cellLrPadding;\n }\n /**\n * Get the header or footer cell element for the specified column.\n * @param {String} columnId Column id\n * @returns {HTMLElement} Header or footer element, depending on which subclass is in use.\n * @private\n */\n getBarCellElement(columnId) {\n return this.element.querySelector(`[data-column-id=\"${columnId}\"]`);\n }\n}\n// Register this widget type with its Factory\nBar.initClass();\nBar._$name = 'Bar';", "import TemplateHelper from '../../Core/helper/TemplateHelper.js';\nimport Bar from './Bar.js';\n//import styles from '../../../resources/sass/grid/view/footer.scss';\n/**\n * @module Grid/view/Footer\n */\n/**\n * Grid footer, used by Summary feature. You should not need to create instances manually.\n *\n * @extends Grid/view/Bar\n * @internal\n */\nexport default class Footer extends Bar {\n static get $name() {\n return 'Footer';\n }\n // Factoryable type name\n static get type() {\n return 'gridfooter';\n }\n get subGrid() {\n return this._subGrid;\n }\n set subGrid(subGrid) {\n this._subGrid = this.owner = subGrid;\n }\n refreshContent() {\n this.element.firstElementChild.innerHTML = this.contentTemplate();\n this.fixFooterWidths();\n }\n onInternalPaint({ firstPaint }) {\n if (firstPaint) {\n this.refreshContent();\n }\n }\n template() {\n const region = this.subGrid.region;\n return TemplateHelper.tpl`\n \n `;\n }\n get overflowElement() {\n return this.footersElement;\n }\n //region Getters\n /**\n * Get the footer cell element for the specified column.\n * @param {String} columnId Column id\n * @returns {HTMLElement} Footer cell element\n */\n getFooter(columnId) {\n return this.getBarCellElement(columnId);\n }\n //endregion\n /**\n * Footer template. Iterates leaf columns to create content.\n * Style not included because of CSP. Widths are fixed up in\n * {@link #function-fixFooterWidths}\n * @private\n */\n contentTemplate() {\n const me = this;\n return me.columns.visibleColumns.map(column => {\n return TemplateHelper.tpl`\n \n ${column.footerText || ''}\n `;\n }).join('');\n }\n /**\n * Fix footer widths (flex or fixed width) after rendering. Not a part of template any longer because of CSP\n * @private\n */\n fixFooterWidths() {\n this.fixCellWidths();\n }\n}\n// Register this widget type with its Factory\nFooter.initClass();\nFooter._$name = 'Footer';", "import Rectangle from '../../Core/helper/util/Rectangle.js';\nimport InstancePlugin from '../../Core/mixin/InstancePlugin.js';\nimport Row from './Row.js';\nimport ArrayHelper from '../../Core/helper/ArrayHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport VersionHelper from '../../Core/helper/VersionHelper.js';\nimport Location from '../util/Location.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport EventHelper from '../../Core/helper/EventHelper.js';\n/**\n * @module Grid/row/RowManager\n */\nconst cloneRowEl = el => {\n const\n p = el.parentElement,\n result = el.cloneNode(true);\n result.classList.add('b-removing');\n p.insertBefore(result, el);\n return result;\n};\nlet nodeAnimationCleanup, nodeAnimationCleanupListener;\n/**\n * Virtual representation of the grid, using {@link Grid.row.Row} to represent rows. Plugs into {@link Grid.view.Grid}\n * and exposes the following functions on grid itself:\n * * {@link #function-getRecordCoords()}\n * * {@link #function-getRowById()}\n * * {@link #function-getRow()}\n * * {@link #function-getRowFor()}\n * * {@link #function-getRowFromElement()}\n *\n * ```javascript\n * let row = grid.getRowById(1);\n * ```\n *\n * @plugin\n * @private\n */\nexport default class RowManager extends InstancePlugin {\n //region Config\n // Plugin configuration.\n static get pluginConfig() {\n return {\n chain : [\n 'destroy'\n ],\n assign : [\n 'topRow', 'bottomRow', 'firstVisibleRow', 'lastVisibleRow', 'firstFullyVisibleRow', 'lastFullyVisibleRow',\n 'getRowById', 'getRecordCoords', 'getRow', 'getRowFor', 'getRowFromElement'\n ]\n };\n }\n static get defaultConfig() {\n return {\n rowClass : Row,\n /**\n * Number of rows to render above current viewport\n * @config {Number}\n * @default\n */\n prependRowBuffer : 5,\n /**\n * Number of rows to render below current viewport\n * @config {Number}\n * @default\n */\n appendRowBuffer : 5,\n /**\n * Default row height, assigned from Grid at construction (either from config\n * {@link Grid.view.Grid#config-rowHeight} or CSS). Can be set from renderers\n * @config {Number}\n * @default\n */\n rowHeight : null,\n /**\n * Set to `true` to get a small performance boost in applications that uses fixed row height\n * @config {Boolean}\n */\n fixedRowHeight : null,\n autoHeight : false\n };\n }\n static get properties() {\n return {\n idMap : {},\n topIndex : 0,\n lastScrollTop : 0,\n _rows : [],\n // Record id -> row height mapping\n heightMap : new Map(),\n // Sum of entries in heightMap\n totalKnownHeight : 0,\n // Will be calculated in `estimateTotalHeight()`, as totalKnownHeight + an estimate for unknown rows\n _totalHeight : 0,\n // Average of the known heights, kept up to date when entries in the heightMap are updated\n averageRowHeight : 0,\n scrollTargetRecordId : null,\n refreshDetails : {\n topRowIndex : 0,\n topRowTop : 0\n }\n };\n }\n //endregion\n //region Init\n construct(config) {\n config.grid._rowManager = this;\n super.construct(config.grid, config);\n }\n // Chained to client grid's doDestroy\n doDestroy() {\n // Run full cleanup on destroy.\n this.removeAllRows();\n super.doDestroy();\n }\n /**\n * Initializes the RowManager with Rows to fit specified height.\n * @param {Number} height\n * @param {Boolean} [isRendering]\n * @private\n * @category Init\n */\n initWithHeight(height, isRendering = false) {\n const me = this;\n // no valid height, make room for all rows\n if (me.autoHeight) {\n height = me.store.allCount * me.preciseRowOffsetHeight;\n }\n me.viewHeight = height;\n me.calculateRowCount(isRendering);\n return height;\n }\n /**\n * Releases all elements (not from dom), calculates how many are needed, creates those and renders\n */\n reinitialize(returnToTop = false) {\n const me = this;\n // Calculate and correct the amount of rows needed (without triggering render)\n // Rows which are found to be surplus are destroyed.\n me.calculateRowCount(false, true, true);\n // If our row range is outside the store's range, force a return to top\n if (me.topIndex + me.rowCount - 1 > me.store.count) {\n returnToTop = true;\n }\n if (returnToTop) {\n me.topIndex = me.lastScrollTop = 0;\n }\n me.scrollTargetRecordId = null;\n const { topRow } = me;\n if (topRow) {\n // Ensure rendering from the topRow starts at the correct position\n topRow.dataIndex = me.topIndex;\n topRow.setTop(me.calculateTop(me.topIndex), true);\n }\n // Need to estimate height in case we have Grid using autoHeight\n me.estimateTotalHeight();\n me.renderFromRow(topRow);\n }\n //endregion\n //region Rows\n /**\n * Add or remove rows to fit row count\n * @private\n * @category Rows\n */\n matchRowCount(skipRender = false) {\n const\n me = this,\n { rows, grid, rowClass } = me,\n numRows = rows.length,\n delta = numRows - me.rowCount;\n if (delta) {\n if (delta < 0) {\n const newRows = [];\n // add rows\n for (let index = numRows, dataIndex = numRows ? rows[numRows - 1].dataIndex + 1 : 0; index < me.rowCount; index++, dataIndex++) {\n newRows.push(rowClass.new({\n cls : grid.rowCls,\n rowManager : me,\n grid,\n index,\n dataIndex\n }));\n }\n rows.push.apply(rows, newRows);\n // and elements (by triggering event used by SubGrid to add elements)\n me.trigger('addRows', { rows : newRows });\n if (!skipRender) {\n // render\n me.renderFromRow(rows[Math.max(0, numRows - 1)]);\n }\n }\n else {\n // Remove rows from bottom\n const\n // Not using grid.focusedCell here, since it wont be accurate during the removal\n activeCell = DomHelper.getActiveElement(grid)?.closest('.b-grid-cell'),\n removedRows = rows.splice(numRows - delta, delta);\n // Focus is in the zone being removed, move focus up to new last row\n if (numRows !== delta && removedRows.some(row => row.cells.includes(activeCell))) {\n rows[rows.length - 1].cells[grid.focusedCell.columnIndex].focus();\n }\n // Trigger event in case some feature needs to clean up when removing (widget column might be interested)\n me.trigger('removeRows', { rows : removedRows });\n removedRows.forEach(row => row.destroy());\n // No need to rerender or such when removing from bottom. all is good :)\n }\n }\n }\n /**\n * Calculates how many rows fit in the available height (view height)\n * @private\n * @category Rows\n */\n calculateRowCount(skipMatchRowCount = false, allowRowCountShrink = true, skipRender = false) {\n const\n me = this,\n { store } = me,\n visibleRowCount = Math.ceil(me.viewHeight / me.minRowOffsetHeight), // Want whole rows\n maxRenderRowCount = visibleRowCount + me.prependRowBuffer + me.appendRowBuffer;\n // If RowManager is reinitialized in a hidden state the view might not have a height\n if (!me.grid.columns?.count || isNaN(visibleRowCount)) {\n me.rowCount = 0;\n return 0;\n }\n // when for example jumping we do not want to remove excess rows,\n // since we know they are needed at other scroll locations\n if (maxRenderRowCount < me.rowCount && !allowRowCountShrink) {\n return me.rowCount;\n }\n me.visibleRowCount = visibleRowCount;\n me.rowCount = Math.min(store.count, maxRenderRowCount); // No need for more rows than data\n // If the row count doesn't match the calculated, ensure it matches,\n if (!skipMatchRowCount) {\n if (me.rows && me.rowCount !== me.rows.length) {\n me.matchRowCount(skipRender);\n // Rows might be pointing to data indices no longer available (when resetting to top topRow is already\n // adjusted, we don't need to take action here)\n if (me.bottomRow?.dataIndex >= store.count && me.topRow.dataIndex !== 0) {\n const indexDelta = me.bottomRow.dataIndex - store.count + 1;\n for (const row of me.rows) {\n row.dataIndex -= indexDelta;\n }\n me.topIndex -= indexDelta;\n }\n }\n else if (!me.rowCount) {\n me.trigger('changeTotalHeight', { totalHeight : me.totalHeight });\n }\n me.grid.toggleEmptyText();\n }\n return me.rowCount;\n }\n /**\n * Animate adding or removing rows to/from the rows array.\n * @internal\n * @param {Number} index The index at which to insert or remove\n * @param {Number} count The number of rows to add. May be negative to remove.\n */\n insert(index, count) {\n // If the last insert has not been cleaned up, do it now, so we have a stable set of rows.\n nodeAnimationCleanup?.();\n const\n me = this,\n {\n rows,\n rowCount,\n rowClass,\n grid\n } = me,\n { element } = grid,\n { rowCls } = grid,\n newRowDataIndex = rows[index - 1]?.dataIndex + 1 || 0,\n addedRows = [],\n durationMS = DateHelper.as('ms', DomHelper.getStyleValue(grid.element, '--row-splice-duration')),\n visibleRowsBelow = me.lastVisibleRow.index + 1 - index;\n let needsPrune;\n // Removing a block of rows\n if (count < 0) {\n count = Math.abs(count);\n const\n visualRemoveCount = newRowDataIndex >= grid.store.count ? count : Math.min(count, visibleRowsBelow),\n visuallyRemovedRows = rows.slice(index, index + visualRemoveCount),\n visuallyRemovedHeight = visualRemoveCount ? visuallyRemovedRows[visuallyRemovedRows.length - 1].bottom - visuallyRemovedRows[0].top : 0,\n outgoingElements = [],\n outgoingRows = [],\n repositioningRows = [];\n // Leave clones of the outgoing rows in place so that the repurposed rows\n // will move up into that space without it looking blank\n for (let i = 0, { length } = visuallyRemovedRows; i < length; i++) {\n const outgoingEls = visuallyRemovedRows[i]._elementsArray.map(cloneRowEl);\n outgoingRows.push(rowClass.new({\n rowManager : me,\n _elementsArray : outgoingEls,\n grid\n }));\n outgoingElements.push(...outgoingEls);\n }\n // Adjust positions of rows after the remove block so that when refreshed\n // they appear to move up from after the remove block\n for (let i = index; i < rowCount; i++) {\n repositioningRows.push(rows[i]);\n rows[i].addCls('b-repositioning');\n rows[i].setTop(rows[i].top + visuallyRemovedHeight);\n }\n // Prune the rows\n needsPrune = rows.length > grid.store.count;\n // Ensure the translations done above have been flushed to the layout so that animations\n // into place can now happen.\n outgoingElements[0]?.getBoundingClientRect();\n // Makes the row top positioning animate\n element.classList.add('b-splicing-rows');\n // Slide outgoing clones upwards\n for (let i = 0, { length } = visuallyRemovedRows; i < length; i++) {\n outgoingRows[i].setTop((rows[index - 1]?.bottom || 0), true);\n }\n nodeAnimationCleanup = () => {\n if (nodeAnimationCleanupListener && !me.isDestroyed) {\n nodeAnimationCleanupListener = nodeAnimationCleanupListener();\n nodeAnimationCleanup = null;\n element.classList.remove('b-splicing-rows');\n outgoingElements.forEach(e => e.remove());\n repositioningRows.forEach(e => e.removeCls?.('b-repositioning'));\n }\n };\n }\n // Adding a block of rows\n else if (count > 0) {\n const repositioningRows = [];\n count = me.grid.hasVerticalOverflow ? Math.min(count, me.lastVisibleRow.index + 1 - index) : Math.min(count, Math.ceil((me.grid.scrollable.clientHeight - (rows[index - 1]?.bottom || 0)) / me.rowHeight));\n let newIndex = index,\n dataIndex = newRowDataIndex;\n for (let i = 0; i < count; i++, newIndex++, dataIndex++) {\n addedRows.push(rowClass.new({\n cls : `${rowCls} b-adding`,\n rowManager : me,\n _top : (rows[index - 1]?.bottom || 0),\n grid,\n index : newIndex,\n dataIndex\n }));\n }\n // Shift the rows which will become the rows following the new block down\n for (let i = index; i < me.rowCount; i++, newIndex++, dataIndex++) {\n repositioningRows.push(rows[i]);\n rows[i].addCls('b-repositioning');\n rows[i].index = newIndex;\n rows[i].dataIndex = dataIndex;\n }\n // We inserted a bunch of new rows. Have the RowManager\n // prune back to the calculated value.\n needsPrune = addedRows.length;\n nodeAnimationCleanup = () => {\n if (nodeAnimationCleanupListener && !me.isDestroyed) {\n nodeAnimationCleanupListener = nodeAnimationCleanupListener();\n nodeAnimationCleanup = null;\n element.classList.remove('b-splicing-rows');\n addedRows.forEach(r => !r.isDestroyed && r.removeCls('b-adding'));\n repositioningRows.forEach(e => e.removeCls?.('b-repositioning'));\n }\n };\n // Insert the new block.\n rows.splice(index, 0, ...addedRows);\n // Add elements (by triggering event used by SubGrid to add elements)\n if (count > 0) {\n me.rowCount += count;\n me.trigger('addRows', { rows : addedRows });\n }\n // Makes the row top positioning animate\n element.classList.add('b-splicing-rows');\n }\n // Clean up DOM after the animation delay, or on any animation cancel.\n // The cleaner must itself ensure that it does not execute more than once\n // if multiple things kick it off.\n nodeAnimationCleanupListener = EventHelper.on({\n element : grid.element,\n animationcancel : nodeAnimationCleanup,\n transitioncancel : nodeAnimationCleanup,\n once : true,\n expires : {\n delay : durationMS,\n alt : nodeAnimationCleanup\n }\n });\n me.renderFromRow(rows[index], true);\n if (needsPrune) {\n me.calculateRowCount(false, true, true);\n }\n me.estimateTotalHeight();\n return addedRows;\n }\n removeAllRows() {\n // remove rows from bottom\n const\n me = this,\n { topRow } = me,\n result = topRow ? (me.refreshDetails = {\n topRowIndex : topRow.dataIndex,\n topRowTop : topRow.top\n }) : me.refreshDetails,\n removedRows = me.rows.slice();\n // trigger event in case some feature needs to cleanup when removing (widget column might be interested)\n me.trigger('removeRows', { rows : removedRows });\n me.rows.forEach(row => row.destroy());\n me.rows.length = 0;\n me.idMap = {};\n // We return a descriptor of the last rendered block before the remove.\n // This is primarily for a full GridBase#renderContents to be able to perform a correct refresh.\n return result;\n }\n setPosition(refreshDetails) {\n // Sets up the rendering position for the next call to reinitialize\n const\n { topRow } = this,\n { topRowIndex, topRowTop } = refreshDetails;\n // Top row might be missing if trial has expired\n if (topRow) {\n topRow.setTop(topRowTop);\n topRow.dataIndex = topRowIndex;\n }\n }\n //endregion\n //region Rows - Getters\n get store() {\n return this.client.store;\n }\n /**\n * Get all Rows\n * @property {Grid.row.Row[]}\n * @readonly\n * @category Rows\n */\n get rows() {\n return this._rows;\n }\n /**\n * Get the Row at a specified store index. Returns `undefined` if the row index is not rendered.\n * @param {Number} index\n * @returns {Grid.row.Row|undefined}\n * @category Rows\n */\n getRow(index) {\n if (this.rowCount) {\n return this.rows[index - this.topIndex];\n }\n }\n /**\n * Get Row for specified record id\n * @param {Core.data.Model|String|Number} recordOrId Record id (or a record)\n * @returns {Grid.row.Row|null} Found Row or null if record not rendered\n * @category Rows\n */\n getRowById(recordOrId) {\n if (recordOrId && recordOrId.isModel) {\n recordOrId = recordOrId.id;\n }\n return this.idMap[recordOrId];\n }\n /**\n * Get a Row from an HTMLElement\n * @param {HTMLElement} element\n * @returns {Grid.row.Row|null} Found Row or null if record not rendered\n * @category Rows\n */\n getRowFromElement(element) {\n element = element.closest('.b-grid-row');\n return element && this.getRow(element.dataset.index);\n }\n /**\n * Get the row at the specified Y coordinate, which is by default viewport-based.\n * @param {Number} y The `Y` coordinate to find the Row for.\n * @param {Boolean} [local=false] Pass `true` if the `Y` coordinate is local to the SubGrid's element.\n * @returns {Grid.row.Row} Found Row or null if no row is rendered at that point.\n */\n getRowAt(y, local = false) {\n // Make it local.\n if (!local) {\n // Because this is used with event Y positions which are integers, we must\n // round the Rectangle to the closest integer.\n y -= Rectangle.from(this.grid.bodyContainer, null, true).roundPx(1).top;\n // Adjust for scrolling\n y += this.grid.scrollable.y;\n }\n y = DomHelper.roundPx(y);\n return this.rows.find(r => y >= r.top && y < r.bottom);\n }\n /**\n * Get a Row for either a record, a record id or an HTMLElement\n * @param {HTMLElement|Core.data.Model|String|Number} recordOrId Record or record id or HTMLElement\n * @returns {Grid.row.Row} Found Row or null if record not rendered\n * @category Rows\n */\n getRowFor(recordOrId) {\n if (recordOrId instanceof HTMLElement) {\n return this.getRowFromElement(recordOrId);\n }\n return this.getRowById(recordOrId);\n }\n /**\n * Gets the Row following the specified Row (by index or object). Wraps around the end.\n * @param {Number|Grid.row.Row} indexOrRow index or Row\n * @returns {Grid.row.Row}\n * @category Rows\n */\n getNextRow(indexOrRow) {\n const index = typeof indexOrRow === 'number' ? indexOrRow : indexOrRow.index;\n return this.getRow((index + 1) % this.rowCount);\n }\n /**\n * Get the Row that is currently displayed at top.\n * @property {Grid.row.Row}\n * @readonly\n * @category Rows\n */\n get topRow() {\n return this.rows[0];\n }\n /**\n * Get the Row currently displayed furthest down.\n * @property {Grid.row.Row}\n * @readonly\n * @category Rows\n */\n get bottomRow() {\n const rowCount = Math.min(this.rowCount, this.store.count);\n return this.rows[rowCount - 1];\n }\n /**\n * Get the topmost visible Row\n * @property {Grid.row.Row}\n * @readonly\n * @category Rows\n */\n get firstVisibleRow() {\n // Ceil scroll position to make behavior consistent on a scaled display\n return this.rows.find(r => r.bottom > Math.ceil(this.grid.scrollable.y));\n }\n get firstFullyVisibleRow() {\n // Ceil scroll position to make behavior consistent on a scaled display\n return this.rows.find(r => r.top >= Math.ceil(this.grid.scrollable.y));\n }\n /**\n * Get the last visible Row\n * @property {Grid.row.Row}\n * @readonly\n * @category Rows\n */\n get lastVisibleRow() {\n const { grid } = this;\n // We need the last row who's top is inside the scrolling viewport\n return ArrayHelper.findLast(this.rows, r => r.top < grid.scrollable.y + grid.bodyHeight);\n }\n get lastFullyVisibleRow() {\n const { grid } = this;\n // We need the last row who's bottom is inside the scrolling viewport\n return ArrayHelper.findLast(this.rows, r => r.bottom < grid.scrollable.y + grid.bodyHeight);\n }\n /**\n * Calls offset() for each Row passing along offset parameter\n * @param {Number} offset Pixels to translate Row elements.\n * @private\n * @category Rows\n */\n offsetRows(offset) {\n if (offset !== 0) {\n const\n { rows } = this,\n { length } = rows;\n for (let i = 0; i < length; i++) {\n rows[i].offset(offset);\n }\n }\n this.trigger('offsetRows', { offset });\n }\n //endregion\n //region Row height\n get prependBufferHeight() {\n return this.prependRowBuffer * this.rowOffsetHeight;\n }\n get appendBufferHeight() {\n return this.appendRowBuffer * this.rowOffsetHeight;\n }\n /**\n * Set a fixed row height (can still be overridden by renderers) or get configured row height. Setting refreshes all rows\n * @type {Number}\n * @on-owner\n * @category Rows\n */\n get rowHeight() {\n return this._rowHeight;\n }\n set rowHeight(height) {\n const\n me = this,\n { grid, fixedRowHeight } = me,\n oldHeight = me.rowHeight;\n // Do not force redraw if row height has not actually changed. Covered by GridState.t\n if (oldHeight === height) {\n return;\n }\n ObjectHelper.assertNumber(height, 'rowHeight');\n if (height < 10) {\n height = 10;\n }\n me.trigger('beforeRowHeight', { height });\n me.minRowHeight = me._rowHeight = height;\n if (fixedRowHeight) {\n me.averageRowHeight = height;\n }\n if (me.rows.length) {\n const\n oldY = grid.scrollable.y,\n topRow = me.getRowAt(oldY, true),\n // When changing rowHeight in a scrolled grid, there might no longer be a row at oldY\n edgeOffset = topRow ? topRow.top - oldY : 0;\n let average, oldAverage;\n // When using fixedRowHeight there is no need to update an average\n if (fixedRowHeight) {\n average = height;\n oldAverage = oldHeight;\n }\n else {\n oldAverage = average = me.averageRowHeight;\n me.clearKnownHeights();\n // Scale the average height in proportion to the row height change\n average *= height / oldHeight;\n }\n // Adjust number of rows, since it is only allowed to shrink in refresh()\n me.calculateRowCount(false, true, true);\n // Reposition the top row since it is used to position the rest\n me.topRow.setTop(me.topRow.dataIndex * (average + grid._rowBorderHeight), true);\n me.refresh();\n const newY = oldY * (average / oldAverage);\n // Scroll top row to the same position.\n if (newY !== oldY) {\n grid.scrollRowIntoView(topRow.id, {\n block : 'start',\n edgeOffset\n });\n }\n }\n // Note that `rowRowHeight` below is triggered in Row.js, but it needs to be documented here since it is\n // triggered on the RowManager\n /**\n * Triggered when an individual rendered {@link Grid.row.Row} has its height changed.\n * @event rowRowHeight\n * @param {Grid.row.RowManager} source The firing RowManager instance.\n * @param {Grid.row.Row} row The row which is changing.\n * @param {Core.data.Model} record The row's record.\n * @param {Number} height The row's new height.\n * @param {Number} oldHeight The row's old height.\n * @private\n */\n /**\n * Triggered when the owning Grid's {@link Grid.view.Grid#property-rowHeight} is changed.\n * @event rowHeight\n * @param {Grid.row.RowManager} source The firing RowManager instance.\n * @param {Number} height The RowManager's new default row height.\n * @param {Number} oldHeight The RowManager's old default row height.\n * @private\n */\n me.trigger('rowHeight', { height, oldHeight });\n }\n /**\n * Get actually used row height, which includes any border and might be an average if using variable row height.\n * @property {Number}\n */\n get rowOffsetHeight() {\n return Math.floor(this.preciseRowOffsetHeight);\n }\n get preciseRowOffsetHeight() {\n return (this.averageRowHeight || this._rowHeight) + this.grid._rowBorderHeight;\n }\n get minRowOffsetHeight() {\n return (this.minRowHeight || this._rowHeight) + this.grid._rowBorderHeight;\n }\n /*\n * How store CRUD affects the height map:\n *\n * | Operation | Result |\n * |-----------|-----------------------------------|\n * | add | No. Appears on render |\n * | insert | No. Appears on render |\n * | remove | Remove entry |\n * | removeAll | Clear |\n * | update | No |\n * | replace | Height might differ, remove entry |\n * | move | No |\n * | filter | No |\n * | sort | No |\n * | group | No |\n * | dataset | Clear |\n *\n * The above is handled in GridBase\n */\n /**\n * Returns `true` if all rows have a known height. They do if all rows are visited, or if RowManager is configured\n * with `fixedRowHeight`. If so, all tops can be calculated exactly, no guessing needed\n * @property {Boolean}\n * @private\n */\n get allHeightsKnown() {\n return this.fixedRowHeight || this.heightMap.size >= this.store.count;\n }\n /**\n * Store supplied `height` using `id` as key in the height map. Called by `Row` when it gets its height.\n * Keeps `averageRowHeight` and `totalKnownHeight` up to date. Ignored when configured with `fixedRowHeight`\n * @param {String|Number} id\n * @param {Number} height\n * @internal\n */\n storeKnownHeight(id, height) {\n const\n me = this,\n { heightMap } = me;\n if (!me.fixedRowHeight) {\n // Decrease know height with old value\n if (heightMap.has(id)) {\n me.totalKnownHeight -= heightMap.get(id);\n }\n // Height here is \"clientHeight\"\n heightMap.set(id, height);\n // And increase with new\n me.totalKnownHeight += height;\n if (height < me.minRowHeight) {\n me.minRowHeight = height;\n }\n me.averageRowHeight = me.totalKnownHeight / heightMap.size;\n }\n }\n /**\n * Get the known or estimated offset height for the specified record id\n * @param {Core.data.Model} record\n * @returns {Number}\n * @private\n */\n getOffsetHeight(record) {\n const me = this;\n // record may not be there if height gets from row with already removed from the store record\n return ((record && me.heightMap.get(record.id)) || (record && me.grid.getRowHeight(record)) || me.averageRowHeight || me.rowHeight) + me.grid._rowBorderHeight;\n }\n /**\n * Invalidate cached height for a record. Removing it from `totalKnownHeight` and factoring it out of\n * `averageRowHeight`.\n * @param {Core.data.Model|Core.data.Model[]} records\n */\n invalidateKnownHeight(records) {\n const me = this;\n if (!me.fixedRowHeight) {\n const { heightMap } = me;\n records = ArrayHelper.asArray(records);\n records.forEach(record => {\n if (record) {\n if (heightMap.has(record.id)) {\n // Known height decreases when invalidating\n me.totalKnownHeight -= heightMap.get(record.id);\n heightMap.delete(record.id);\n }\n }\n });\n me.averageRowHeight = me.totalKnownHeight / heightMap.size;\n }\n }\n /**\n * Invalidates all cached height and resets `averageRowHeight` and `totalKnownHeight`\n */\n clearKnownHeights() {\n this.heightMap.clear();\n this.averageRowHeight = this.totalKnownHeight = 0;\n }\n /**\n * Calculates a row top from its data index. Uses known values from the height map, unknown are substituted with\n * the average row height. When configured with `fixedRowHeight`, it will always calculate a correct value\n * @param {Number} index Index in store\n * @private\n */\n calculateTop(index) {\n // When using fixed row height, life is easy\n if (this.fixedRowHeight) {\n return index * this.rowOffsetHeight;\n }\n const { store } = this;\n let top = 0;\n // When not using fixed row height, we make an educated guess at the top. The more rows have been visited, the\n // more correct the guess is (fully correct if all rows visited)\n for (let i = 0; i < index; i++) {\n const record = store.getAt(i);\n top += this.getOffsetHeight(record);\n }\n return Math.floor(top);\n }\n //endregion\n //region Calculations\n /**\n * Returns top and bottom for rendered row or estimated coordinates for unrendered.\n * @param {Core.data.Model|String|Number} recordOrId Record or record id\n * @param {Boolean} [local] Pass true to get relative record coordinates\n * @param {Boolean} [roughly] Pass true to allow a less exact but cheaper estimate\n * @returns {Core.helper.util.Rectangle} Record bounds with format { x, y, width, height, bottom, right }\n * @category Calculations\n */\n getRecordCoords(recordOrId, local = false, roughly = false) {\n const\n me = this,\n row = me.getRowById(recordOrId);\n let scrollingViewport = me.client._bodyRectangle;\n // _bodyRectangle is not updated on page/containing element scroll etc. Need to make sure it is correct in case\n // that has happend. This if-statement should be removed when fixing\n if (!local) {\n scrollingViewport = me.client.refreshBodyRectangle();\n }\n // Rendered? Then we know position for certain\n if (row) {\n return new Rectangle(\n scrollingViewport.x,\n local ? Math.round(row.top) : Math.round(row.top + scrollingViewport.y - me.client.scrollable.y),\n scrollingViewport.width,\n row.offsetHeight\n );\n }\n return me.getRecordCoordsByIndex(me.store.indexOf(recordOrId), local, roughly);\n }\n /**\n * Returns estimated top and bottom coordinates for specified row.\n * @param {Number} recordIndex Record index\n * @param {Boolean} [local]\n * @returns {Core.helper.util.Rectangle} Estimated record bounds with format { x, y, width, height, bottom, right }\n * @category Calculations\n */\n getRecordCoordsByIndex(recordIndex, local = false, roughly = false) {\n const\n me = this,\n { topRow, bottomRow } = me,\n scrollingViewport = me.client._bodyRectangle,\n { id } = me.store.getAt(recordIndex),\n // Not using rowOffsetHeight since it floors the value and that rounding might give big errors far down\n height = me.preciseRowOffsetHeight,\n currentTopIndex = topRow.dataIndex,\n currentBottomIndex = bottomRow.dataIndex,\n // Instead of estimating top from the very top, use closest known coordinate. Makes sure a coordinate is not\n // estimated on wrong side of rendered rows, needed to correctly draw dependencies where one event is located\n // on a unrendered row\n calculateFrom =\n // bottomRow is closest, calculate from it\n recordIndex > currentBottomIndex\n ? { index : recordIndex - currentBottomIndex - 1, y : bottomRow.bottom, from : 'bottomRow' }\n // closer to topRow than 0, use topRow\n : recordIndex > currentTopIndex / 2\n ? { index : recordIndex - currentTopIndex, y : topRow.top, from : 'topRow' }\n // closer to the very top, use it\n : { index : recordIndex, y : 0, from : 'top' },\n top = me.allHeightsKnown && !roughly\n // All heights are known (all rows visited or fixed row height), get actual top coord\n ? me.calculateTop(recordIndex)\n // Otherwise estimate\n : Math.floor(calculateFrom.y + calculateFrom.index * height),\n // Either known height or average\n maybeKnownHeight = Math.floor(me.heightMap.get(id) ?? height),\n recordY = local\n ? calculateFrom.from === 'topRow'\n // here, when are moving from the top row above, we want to be calculating things from bottom to top,\n // so we first arrive at expected bottom (`top + height`), then deduct the row height from that -\n // either known or average\n // if row height is not known that is equivalent of just using `top`\n ? top + height - maybeKnownHeight\n : top\n : top + scrollingViewport.y - me.client.scrollable.y,\n result = new Rectangle(scrollingViewport.x, recordY, scrollingViewport.width, maybeKnownHeight);\n // Signal that it's not based on an element, so is only approximate.\n // Grid.scrollRowIntoView will have to go round again using the block options below to ensure it's correct.\n result.virtual = true;\n // When the block becomes visible, scroll it to the logical position using the scrollIntoView's block\n // option. If it's above, use block: 'start', if below, use block: 'end'.\n result.block = result.bottom < scrollingViewport.y ? 'start' : (result.y > scrollingViewport.bottom ? 'end' : 'nearest');\n return result;\n }\n /**\n * Total estimated grid height (used for scroller)\n * @property {Number}\n * @readonly\n * @category Calculations\n */\n get totalHeight() {\n return this._totalHeight;\n }\n //endregion\n //region Iteration etc.\n /**\n * Calls a function for each Row\n * @param {Function} fn Function that will be called with Row as first parameter\n * @category Iteration\n */\n forEach(fn) {\n this.rows.forEach(fn);\n }\n /**\n * Iterator that allows you to do for (let row of rowManager)\n * @category Iteration\n */\n [Symbol.iterator]() {\n return this.rows[Symbol.iterator]();\n }\n //endregion\n //region Scrolling & rendering\n /**\n * Refresh a single cell.\n * @param {Core.data.Model} record Record for row holding the cell that should be updated\n * @param {String|Number} columnId Column id to identify the cell within the row\n * @returns {Boolean} Returns `true` if cell was found and refreshed, `false` if not\n */\n refreshCell(record, columnId) {\n const cellContext = new Location({ grid : this.grid, record, columnId });\n return Boolean(cellContext.cell && cellContext.row.renderCell(cellContext));\n }\n /**\n * Renders from the top of the grid, also resetting scroll to top. Used for example when collapsing all groups.\n * @category Scrolling & rendering\n */\n returnToTop() {\n const me = this;\n me.topIndex = 0;\n me.lastScrollTop = 0;\n if (me.topRow) {\n me.topRow.dataIndex = 0;\n // Force the top row to the top of the scroll range\n me.topRow.setTop(0, true);\n }\n me.refresh();\n // Rows rendered from top, make sure grid is scrolled to top also\n me.grid.scrollable.y = 0;\n }\n /**\n * Renders from specified records row and down (used for example when collapsing a group, does not affect rows above).\n * @param {Core.data.Model} record Record of first row to render\n * @category Scrolling & rendering\n */\n renderFromRecord(record) {\n const row = this.getRowById(record.id);\n if (row) {\n this.renderFromRow(row);\n }\n }\n /**\n * Renders from specified row and down (used for example when collapsing a group, does not affect rows above).\n * @param {Grid.row.Row} fromRow First row to render\n * @category Scrolling & rendering\n */\n renderFromRow(fromRow = null, animatingRowPosition) {\n const\n me = this,\n {\n rows,\n store,\n topIndex,\n topRow\n } = me,\n storeCount = store.count;\n let fromRowIndex = fromRow ? rows.indexOf(fromRow) : 0;\n // Calculate row count, adding rows if needed, but do not rerender - we are going to do that below.\n // Bail out if no rows. Allow removing rows if we have more than store have rows\n if (me.calculateRowCount(false, storeCount < rows.length && !animatingRowPosition, true) === 0) {\n // Reestimate total height. Possible if all tasks deleted\n me.estimateTotalHeight(true);\n return;\n }\n // Removed block is in zone that was pruned out by calculateRowCount\n if (fromRowIndex >= rows.length) {\n return;\n }\n // If the topIndex has decreased (rows above has been removed) we need to recalculate the top, and render from\n // there\n if (me.topIndex < topIndex) {\n me.topRow.setTop(me.calculateTop(me.topIndex), true);\n fromRowIndex = 0;\n fromRow = me.topRow;\n }\n // If the fromRow has been removed by calculateRowCount, use row at same index or top row\n else if (fromRow && rows.indexOf(fromRow) < 0) {\n fromRow = rows[fromRowIndex] || topRow;\n }\n // starting either from its specified dataIndex or from its index (happens on first render, no dataIndex yet)\n let dataIndex = fromRow ? fromRow.dataIndex : rows[0].dataIndex;\n const\n // amount of records after this one in store\n recordsAfter = storeCount - dataIndex - 1,\n // render to this row, either the last row or the row which will hold the last record available\n toRowIndex = Math.min(rows.length - 1, fromRowIndex + recordsAfter);\n let\n // amount of rows which won't be rendered below last record (if we have fewer records than topRow + row count)\n leftOverCount = rows.length - toRowIndex - 1,\n // Start with top correctly just below the previous row's bottom\n top = fromRowIndex > 0 ? rows[fromRowIndex - 1].bottom : rows[fromRowIndex].top,\n row,\n newTops = [];\n // _rows array is ordered in display order, just iterate to the end\n // Render first, then set top in order not to break fragile CSS transitions\n for (let i = fromRowIndex; i <= toRowIndex; i++) {\n row = rows[i];\n // Needed in scheduler when translating events, happens before render\n row.dataIndex = dataIndex;\n if (animatingRowPosition) {\n newTops[i] = top;\n }\n else {\n row.setTop(top, true);\n }\n row.render(dataIndex, store.getAt(dataIndex++), false);\n top += row.offsetHeight;\n }\n if (animatingRowPosition) {\n rows[fromRowIndex].element.getBoundingClientRect();\n // Set tops as a single operation\n for (let i = fromRowIndex; i <= toRowIndex; i++) {\n rows[i].setTop(newTops[i], true);\n }\n }\n // if number for records to display has decreased, for example by collapsing a node, we might get unused rows\n // below bottom. move those to top to not have unused rows laying around\n while (leftOverCount-- > 0) {\n me.displayRecordAtTop();\n }\n // Renderers might yield a lower row height than the configured, leaving blank space at bottom\n if (me.bottomRow.bottom < me.viewHeight) {\n me.calculateRowCount();\n }\n // Reestimate total height\n me.estimateTotalHeight(true);\n me.trigger('renderDone');\n }\n /**\n * Renders the passed array (or [Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set)) of {@link Grid.row.Row rows}\n * @param {Grid.row.Row[]|Set} rows The rows to render\n * @category Scrolling & rendering\n */\n renderRows(rows) {\n let oldHeight,\n heightChanged = false;\n rows = Array.from(rows);\n // Sort topmost row first\n rows.sort((a, b) => a.dataIndex - b.dataIndex);\n // Render the requested rows.\n for (const row of rows) {\n oldHeight = row.height;\n // Pass updatingSingleRow as false, so that it does not shuffle following\n // rows downwards on each render. We do that once here after the rows are all refreshed.\n row.render(null, null, false);\n heightChanged |= row.height !== oldHeight;\n }\n // If this caused a height change, shuffle following rows.\n if (heightChanged) {\n this.translateFromRow(rows[0]);\n }\n this.trigger('renderDone');\n }\n /**\n * Translates all rows after the specified row. Used when a single rows height is changed and the others should\n * rearrange. (Called from Row#render)\n * @param {Grid.row.Row} fromRow\n * @private\n * @category Scrolling & rendering\n */\n translateFromRow(fromRow, batch = false) {\n const me = this;\n let top = fromRow.bottom,\n row, index;\n for (index = fromRow.dataIndex + 1, row = me.getRow(index); row; row = me.getRow(++index)) {\n top = row.translate(top);\n }\n // Reestimate total height\n if (!batch) {\n me.estimateTotalHeight(true);\n }\n }\n /**\n * Rerender all rows\n * @category Scrolling & rendering\n * @privateparam {Boolean} force Force re-rendering even if there are no rows currently\n */\n refresh(force = false) {\n const\n me = this,\n { topRow } = me;\n // too early\n if ((!topRow && !force) || me.grid.refreshSuspended) {\n return;\n }\n me.idMap = {};\n me.renderFromRow(topRow);\n me.trigger('refresh');\n }\n /**\n * Makes sure that specified record is displayed in view\n * @param newScrollTop Top of visible section\n * @param [forceRecordIndex] Index of record to display at center\n * @private\n * @category Scrolling & rendering\n */\n jumpToPosition(newScrollTop, forceRecordIndex) {\n // There are two very different requirements here.\n // If there is a forceRecordIndex, that takes precedence to get it into the center of the\n // viewport, and wherever we render the calculated row block, we may then *adjust the scrollTop*\n // to get that row to the center.\n //\n // If there's no forceRecordIndex, then the scroll position is the primary objective and\n // we must render what we calculate to be correct at that viewport position.\n const\n me = this,\n { store, heightMap } = me,\n storeCount = store.count;\n if (me.allHeightsKnown && !me.fixedRowHeight) {\n const\n top = newScrollTop - me.prependBufferHeight,\n border = me.grid._rowBorderHeight;\n let accumulated = 0,\n targetIndex = 0;\n while (accumulated < top) {\n const record = store.getAt(targetIndex);\n accumulated += heightMap.get(record.id) + border;\n targetIndex++;\n }\n const startIndex = Math.max(Math.min(targetIndex, storeCount - me.rowCount), 0);\n me.lastScrollTop = newScrollTop;\n me.topRow.dataIndex = me.topIndex = startIndex;\n me.topRow.setTop(me.calculateTop(startIndex), false);\n // render entire buffer\n me.refresh();\n }\n else {\n const\n rowHeight = me.preciseRowOffsetHeight,\n // Calculate index of the top of the rendered block.\n // If we are targeting the scrollTop, this will be the top index at the scrollTop minus prepend count.\n // If we are targeting a recordIndex, this will attempt to place that in the center of the rendered block.\n targetIndex = forceRecordIndex == null ? Math.floor(newScrollTop / rowHeight) - me.prependRowBuffer : forceRecordIndex - Math.floor(me.rowCount / 2),\n startIndex = Math.max(Math.min(targetIndex, storeCount - me.rowCount), 0),\n viewportTop = me.client.scrollable.y,\n viewportBottom = Math.min(me.client._bodyRectangle.height + viewportTop + me.appendBufferHeight, me.totalHeight);\n me.lastScrollTop = newScrollTop;\n me.topRow.dataIndex = me.topIndex = startIndex;\n me.topRow.setTop(Math.floor(startIndex * rowHeight), false);\n // render entire buffer\n me.refresh();\n // Not filled all the way down?\n if (me.bottomRow.bottom < viewportBottom) {\n // Might have jumped into a section of low heights. Needs to be done after the refresh, since heights\n // are not known before it\n me.calculateRowCount(false, false, false);\n // Fill with available rows (might be available above buffer because of var row height), stop if we run out of records :)\n while (me.bottomRow.bottom < viewportBottom && me._rows[me.prependRowBuffer].top < viewportTop && me.bottomRow.dataIndex < storeCount - 1) {\n me.displayRecordAtBottom();\n }\n }\n me.estimateTotalHeight();\n }\n // If the row index is our priority, then scroll it into the center\n if (forceRecordIndex != null) {\n const\n { scrollable } = me.grid,\n targetRow = me.getRow(forceRecordIndex),\n // When coming from a block of high rowHeights to one with much lower we might still miss the target...\n rowCenter = targetRow && Rectangle.from(targetRow._elementsArray[0]).center.y,\n viewportCenter = scrollable.viewport.center.y;\n // Scroll the targetRow into the center of the viewport\n if (targetRow) {\n scrollable.y = newScrollTop = Math.floor(scrollable.y + (rowCenter - viewportCenter));\n }\n }\n return newScrollTop;\n }\n /**\n * Jumps to a position if it is far enough from current position. Otherwise does nothing.\n * @private\n * @category Scrolling & rendering\n */\n warpIfNeeded(newScrollTop) {\n const\n me = this,\n result = { newScrollTop, deltaTop : newScrollTop - me.lastScrollTop };\n // if gap to fill is large enough, better to jump there than to fill row by row\n if (Math.abs(result.deltaTop) > (me.rowCount * me.rowOffsetHeight) * 3) {\n // no specific record targeted\n let index;\n // Specific record specified as target of scroll?\n if (me.scrollTargetRecordId) {\n index = me.store.indexOf(me.scrollTargetRecordId);\n // since scroll is happening async record might have been removed after requesting scroll,\n // in that case we rely on calculated index (as when scrolling without target)\n }\n // We are jumping, so the focused row will derender\n me.grid.onFocusedRowDerender();\n // perform the jump and return results\n result.newScrollTop = me.jumpToPosition(newScrollTop, index);\n result.deltaTop = 0; // no extra filling needed\n }\n return result;\n }\n /**\n * Handles virtual rendering (only visible rows + buffer are in dom) for rows\n * @param {Number} newScrollTop The `Y` scroll position for which to render rows.\n * @param {Boolean} [force=false] Pass `true` to update the rendered row block even if the scroll position has not changed.\n * @returns {Number} Adjusted height required to fit rows\n * @private\n * @category Scrolling & rendering\n */\n updateRenderedRows(newScrollTop, force, ignoreError = false) {\n const\n me = this,\n clientRect = me.client._bodyRectangle;\n // Might be triggered after removing all records, should not crash\n if (me.rowCount === 0) {\n return 0;\n }\n let result = me.totalHeight;\n if (\n force ||\n // Only react if we have scrolled by one row or more\n Math.abs(newScrollTop - me.lastScrollTop) >= me.rowOffsetHeight ||\n // or if we have a gap at top/bottom (#9375)\n me.topRow.top > newScrollTop ||\n me.bottomRow.bottom < newScrollTop + clientRect.height\n ) {\n // If scrolled by a large amount, jump instead of rendering each row\n const posInfo = me.warpIfNeeded(newScrollTop);\n me.scrollTargetRecordId = null;\n // Cache the last correct render scrollTop before fill.\n // it can be adjusted to hide row position corrections.\n me.lastScrollTop = posInfo.newScrollTop;\n if (posInfo.deltaTop > 0) {\n // Scrolling down\n me.fillBelow(posInfo.newScrollTop);\n }\n else if (posInfo.deltaTop < 0) {\n // Scrolling up\n me.fillAbove(posInfo.newScrollTop);\n }\n if (!me.fixedRowHeight && !ignoreError) {\n me.correctError(posInfo, clientRect, newScrollTop);\n }\n // Calculate the new height based on new content\n result = me.estimateTotalHeight();\n }\n return result;\n }\n correctError(posInfo, clientRect, newScrollTop) {\n const me = this;\n let error = 0;\n // When we transition from not knowing all heights to doing so, the old estimate will likely have positioned\n // rows a bit off. Compensate for that here.\n if (me.allHeightsKnown) {\n error = me.topRow.top - me.calculateTop(me.topRow.dataIndex);\n }\n // If it's a temporary scroll, we can be told to ignore the drift.\n // Apart from that, we must correct keep the rendered block position correct.\n // Otherwise, when rolling upwards after a teleport, we may not be able to reach\n // the top. Some rows may end up at -ve positions.\n else {\n // Only correct the rendered block position if we are in danger of running out of scroll space.\n // That is if we are getting towards the top or bottom of the scroll range.\n if (\n // Scrolling up within top zone\n (posInfo.deltaTop < 0 && newScrollTop < clientRect.height * 2) ||\n // Scrolling down within bottom zone\n (posInfo.deltaTop > 0 && newScrollTop > me.totalHeight - clientRect.height * 2 - 3)\n ) {\n error = me.topRow.top - me.calculateTop(me.topRow.dataIndex); //me.topIndex * me.rowOffsetHeight;\n }\n }\n if (error) {\n // Correct the rendered block position if it's not at the calculated position.\n // Keep the visual position correct by adjusting the scrollTop by the same amount.\n // When variable row heights are used, this will keep the rendered block top correct.\n me.offsetRows(-error);\n me.grid.scrollable.y = me.lastScrollTop = me.grid.scrollable.y - error;\n }\n }\n /**\n * Moves as many rows from the bottom to the top that are needed to fill to current scroll pos.\n * @param newTop Scroll position\n * @private\n * @category Scrolling & rendering\n */\n fillAbove(newTop) {\n const\n me = this,\n fillHeight = newTop - me.topRow.top - me.prependBufferHeight;\n let accumulatedHeight = 0;\n while (accumulatedHeight > fillHeight && me.topIndex > 0) {\n // We want to show prev record at top of rows\n accumulatedHeight -= me.displayRecordAtTop();\n }\n me.trigger('renderDone');\n }\n /**\n * Moves as many rows from the top to the bottom that are needed to fill to current scroll pos.\n * @param newTop Scroll position\n * @private\n * @category Scrolling & rendering\n */\n fillBelow(newTop) {\n const\n me = this,\n fillHeight = newTop - me.topRow.top - me.prependBufferHeight,\n recordCount = me.store.count,\n rowCount = me.rowCount;\n let accumulatedHeight = 0;\n // Repeat until we have filled empty height\n while (\n accumulatedHeight < fillHeight && // fill empty height\n me.topIndex + rowCount < recordCount && // as long as we have records left\n me.topRow.top + me.topRow.offsetHeight < newTop // and do not move top row fully into view (can happen with var row height)\n ) {\n // We want to show next record at bottom of rows\n accumulatedHeight += me.displayRecordAtBottom();\n }\n me.trigger('renderDone');\n }\n /**\n * Estimates height needed to fit all rows, based on average row height. Also offsets rows if needed to not be above\n * the reachable area of the view.\n * @param {Boolean} [immediate] Specify true to pass the `immediate` flag on to any listeners (probably only Grid\n * cares. Used to bypass buffered element resize)\n * @returns {Number}\n * @private\n * @category Scrolling & rendering\n */\n estimateTotalHeight(immediate = false) {\n const me = this;\n if (me.grid.renderingRows) {\n return;\n }\n const\n recordCount = me.store.count,\n unknownCount = recordCount - me.heightMap.size,\n { bottomRow } = me;\n let estimate;\n // No need to estimate when using fixed row height\n if (me.fixedRowHeight) {\n estimate = recordCount * me.rowOffsetHeight;\n }\n else {\n estimate =\n // Known height, from entries in heightMap\n me.totalKnownHeight +\n // Those heights are \"clientHeights\", estimate needs to include borders\n me.heightMap.size * me.grid._rowBorderHeight +\n // Add estimate for rows with unknown height\n unknownCount * me.preciseRowOffsetHeight;\n // No bottomRow yet if estimating initial height in autoHeight grid\n if (bottomRow && unknownCount) {\n const bottom = bottomRow.bottom;\n // Too low estimate or reached the end with scroll left, adjust to fit current bottom\n if (bottom > estimate || (me.topIndex + me.rowCount >= recordCount && estimate > bottom && bottom > 0)) {\n estimate = bottom;\n // estimate all the way down\n if (bottomRow.dataIndex < recordCount - 1) {\n estimate += (recordCount - 1 - bottomRow.dataIndex) * me.preciseRowOffsetHeight;\n }\n }\n }\n estimate = Math.floor(estimate);\n }\n if (estimate !== me.totalHeight) {\n if (me.trigger('changeTotalHeight', { totalHeight : estimate, immediate }) !== false) {\n me._totalHeight = estimate;\n }\n }\n return estimate;\n }\n /**\n * Moves a row from bottom to top and renders the corresponding record to it.\n * @returns {Number} New row height\n * @private\n * @category Scrolling & rendering\n */\n displayRecordAtTop() {\n const\n me = this,\n { grid } = me,\n recordIndex = me.topIndex - 1,\n record = me.store.getAt(recordIndex),\n // Row currently rendered at the bottom, the row we want to move\n bottomRow = me.bottomRow,\n bottomRowTop = bottomRow.top;\n me.trigger('beforeTranslateRow', {\n row : bottomRow,\n newRecord : record\n });\n // If focused cell is being scrolled off...\n if (bottomRow.dataIndex === grid.focusedCell?.rowIndex) {\n grid.onFocusedRowDerender();\n }\n // estimated top, for rendering that depends on having top\n bottomRow._top = me.topRow.top - me.getOffsetHeight(record);\n // if configured with fixed row height, it will be the correct value\n bottomRow.estimatedTop = !me.fixedRowHeight;\n // Render row\n bottomRow.render(recordIndex, record, false);\n // Move it to top. Restore top so that the setter won't reject non-change\n // if the estimate happened to be correct.\n bottomRow._top = bottomRowTop;\n bottomRow.setBottom(me.topRow.top);\n bottomRow.estimatedTop = false;\n // Prev row is now at top\n me.topIndex--;\n // move to start of array (bottomRow becomes topRow)\n me._rows.unshift(me._rows.pop());\n me.fixIndices();\n return bottomRow.offsetHeight;\n }\n /**\n * Moves a row from top to bottom and renders the corresponding record to it.\n * @returns {Number} New row height\n * @private\n * @category Scrolling & rendering\n */\n displayRecordAtBottom() {\n const\n me = this,\n { grid } = me,\n recordIndex = me.topIndex + me.rowCount,\n record = me.store.getAt(recordIndex),\n // Row currently rendered on the top, the row we want to move\n topRow = me.topRow;\n me.trigger('beforeTranslateRow', {\n row : topRow,\n newRecord : record\n });\n // If focused cell is being scrolled off...\n if (topRow.dataIndex === grid.focusedCell?.rowIndex) {\n grid.onFocusedRowDerender();\n }\n topRow.dataIndex = recordIndex;\n // Move it to bottom\n topRow.setTop(me.bottomRow.bottom);\n // Render row\n topRow.render(recordIndex, record, false);\n // Next row is now at top\n me.topIndex++;\n // move to end of array (topRow becomes bottomRow)\n me._rows.push(me._rows.shift());\n me.fixIndices();\n return topRow.offsetHeight;\n }\n fixIndices() {\n for (let i = 0, { rows } = this, { length } = rows; i < length; i++) {\n rows[i].index = i;\n }\n }\n //endregion\n}\nRowManager.featureClass = '';\nRowManager._$name = 'RowManager';", "import Scroller from '../../Core/helper/util/Scroller.js';\n/**\n * @module Grid/util/GridScroller\n */\nconst\n xAxis = {\n x : 1\n },\n subGridFilter = w => w.isSubGrid;\n/**\n * A Scroller subclass which handles scrolling in a grid.\n *\n * If the grid has no parallel scrolling grids (No locked columns), then this functions\n * transparently as a Scroller.\n *\n * If there are locked columns, then scrolling to an _element_ will invoke the scroller\n * of the subgrid which contains that element.\n * @internal\n */\nexport default class GridScroller extends Scroller {\n addScroller(scroller) {\n (this.xScrollers || (this.xScrollers = [])).push(scroller);\n }\n addPartner(otherScroller, axes = xAxis) {\n if (typeof axes === 'string') {\n axes = {\n [axes] : 1\n };\n }\n // Link up all our X scrollers\n if (axes.x) {\n // Ensure the other grid has set up its scrollers. This is done on first paint\n // so may not have been executed yet.\n otherScroller.owner.initScroll();\n const\n subGrids = this.widget.items.filter(subGridFilter),\n otherSubGrids = otherScroller.widget.items.filter(subGridFilter);\n // Loop through SubGrids to ensure that we partner their scrollers up correctly\n for (let i = 0, { length } = subGrids; i < length; i++) {\n subGrids[i].scrollable.addPartner(otherSubGrids[i].scrollable, 'x');\n }\n }\n // We are the only Y scroller\n if (axes.y) {\n super.addPartner(otherScroller, 'y');\n }\n }\n removePartner(otherScroller) {\n this.xScrollers.forEach((scroller, i) => {\n if (!scroller.isDestroyed) {\n scroller.removePartner(otherScroller.xScrollers[i]);\n }\n });\n super.removePartner(otherScroller);\n }\n updateOverflowX(overflowX) {\n const hideScroll = overflowX === false;\n this.xScrollers?.forEach(s => s.overflowX = hideScroll ? 'hidden' : 'hidden-scroll');\n this.widget.virtualScrollers.classList.toggle('b-hide-display', hideScroll);\n }\n scrollIntoView(element, options) {\n // If we are after an element, we have to ask the scroller of the SubGrid\n // that the element is in. It will do the X scrolling and delegate the Y\n // scrolling up to this GridScroller.\n if (element.nodeType === Element.ELEMENT_NODE && this.element.contains(element)) {\n for (const subGridScroller of this.xScrollers) {\n if (subGridScroller.element.contains(element)) {\n return subGridScroller.scrollIntoView(element, options);\n }\n }\n }\n else {\n return super.scrollIntoView(element, options);\n }\n }\n hasOverflow(axis = 'y') {\n return axis === 'y' ? this.scrollHeight > this.clientHeight : false;\n }\n set x(x) {\n if (this.xScrollers) {\n this.xScrollers[0].x = x;\n }\n }\n get x() {\n // when trying to scroll grid with no columns xScrollers do not exist\n return this.xScrollers ? this.xScrollers[0].x : 0;\n }\n}\nGridScroller._$name = 'GridScroller';", "import Bar from './Bar.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\nimport DomSync from '../../Core/helper/DomSync.js';\nimport Tooltip from '../../Core/widget/Tooltip.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\n/**\n * @module Grid/view/Header\n */\n/**\n * The Grid header, which contains simple columns but also allows grouped columns. One instance is created and used per SubGrid\n * automatically, you should not need to instantiate this class manually. See {@link Grid.column.Column} for information about\n * column configuration.\n *\n * {@inlineexample Grid/view/Header.js}\n *\n * @extends Grid/view/Bar\n * @internal\n */\nexport default class Header extends Bar {\n static $name = 'Header';\n static type = 'gridheader';\n get subGrid() {\n return this._subGrid;\n }\n set subGrid(subGrid) {\n this._subGrid = this.owner = subGrid;\n }\n get region() {\n return this.subGrid?.region;\n }\n changeElement(element, was) {\n const { region } = this;\n // Columns must be examined for maxDepth\n this.getConfig('columns');\n return super.changeElement({\n className : {\n 'b-grid-header-scroller' : 1,\n [`b-grid-header-scroller-${region}`] : region\n },\n children : [{\n reference : 'headersElement',\n className : {\n 'b-grid-headers' : 1,\n [`b-grid-headers-${region}`] : region\n },\n dataset : {\n region,\n reference : 'headersElement',\n maxDepth : this.maxDepth\n }\n }]\n }, was);\n }\n get overflowElement() {\n return this.headersElement;\n }\n /**\n * Recursive column header config creator.\n * Style not included because of CSP. Widths are fixed up in\n * {@link #function-fixHeaderWidths}\n * @private\n */\n getColumnConfig(column) {\n const\n {\n id,\n align,\n resizable,\n isLeaf,\n isParent,\n isLastInSubGrid,\n cls,\n childLevel,\n field,\n tooltip,\n children,\n isFocusable,\n grid\n } = column,\n // Headers tested standalone - may be no grid\n focusedCell = grid?.focusedCell,\n isFocused = focusedCell?.rowIndex === -1 && focusedCell?.column === column,\n style = {};\n if (column.isVisible) {\n if (column.flex) {\n style.flex = column.flex;\n }\n else if (column.width) {\n style.width = DomHelper.setLength(column.width);\n }\n return {\n style,\n className : {\n 'b-grid-header' : 1,\n 'b-grid-header-parent' : isParent,\n [`b-level-${childLevel}`] : 1,\n [`b-depth-${column.meta.depth}`] : 1,\n [`b-grid-header-align-${align}`] : align,\n 'b-grid-header-resizable' : resizable && isLeaf,\n [cls] : cls,\n 'b-collapsible' : column.collapsible,\n 'b-last-parent' : isParent && isLastInSubGrid,\n 'b-last-leaf' : isLeaf && isLastInSubGrid\n },\n role : isFocusable ? 'columnheader' : 'presentation',\n 'aria-sort' : 'none',\n 'aria-label' : column.ariaLabel,\n [isFocusable ? 'tabIndex' : ''] : isFocused ? 0 : -1,\n dataset : {\n ...Tooltip.encodeConfig(tooltip),\n columnId : id,\n [field ? 'column' : ''] : field\n },\n children : [{\n className : 'b-grid-header-text',\n children : [{\n [grid && isFocusable ? 'id' : ''] : `${grid?.id}-column-${column.id}`,\n className : 'b-grid-header-text-content'\n }]\n }, children ? {\n className : 'b-grid-header-children',\n children : children.map(child => this.getColumnConfig(child)),\n syncOptions : {\n syncIdField : 'columnId'\n }\n } : null,\n {\n className : 'b-grid-header-resize-handle'\n }]\n };\n }\n }\n // used by safari to fix flex when rows width shrink below this value\n calculateMinWidthForSafari() {\n let minWidth = 0;\n this.columns.visibleColumns.forEach(column => {\n minWidth += column.calculateMinWidth();\n });\n return minWidth;\n }\n /**\n * Fix header widths (flex or fixed width) after rendering. Not a part of template any longer because of CSP\n * @private\n */\n fixHeaderWidths() {\n this.fixCellWidths();\n }\n refreshHeaders() {\n const me = this;\n // run renderers, not done from template to work more like cell rendering\n me.columns.traverse(column => me.refreshColumn(column));\n me.fixHeaderWidths();\n }\n refreshColumn(column) {\n const\n me = this,\n headerElement = me.getBarCellElement(column.id);\n if (headerElement) {\n let html = column.headerText;\n if (column.headerRenderer) {\n html = column.headerRenderer.call(column.thisObj || me, { column, headerElement });\n }\n if (column.headerWidgetMap) {\n Object.values(column.headerWidgetMap).forEach(widget => {\n widget.render(column.textWrapper);\n });\n }\n if (column.icon) {\n html = `` + (html || '');\n }\n const innerEl = headerElement.querySelector('.b-grid-header-text-content');\n if (innerEl) {\n innerEl.innerHTML = html || '';\n }\n }\n }\n get columns() {\n const\n me = this,\n result = super.columns;\n if (!me.columnsDetacher) {\n // columns is a chained store, it will be repopulated from master when columns change.\n // That action always triggers change with action dataset.\n me.columnsDetacher = result.ion({\n change() {\n me.initDepths();\n },\n thisObj : me\n });\n me.initDepths();\n }\n return result;\n }\n set columns(columns) {\n super.columns = columns;\n }\n /**\n * Depths are used for styling of grouped headers. Sets them on meta.\n * @private\n */\n initDepths(columns = this.columns.topColumns, parent = null) {\n const me = this;\n let maxDepth = 0;\n if (parent?.meta) {\n parent.meta.depth++;\n }\n for (const column of columns) {\n const { meta } = column;\n meta.depth = 0;\n if (column.children) {\n me.initDepths(column.children.filter(me.columns.chainedFilterFn), column);\n if (meta.depth && parent) {\n parent.meta.depth += meta.depth;\n }\n }\n if (meta.depth > maxDepth) {\n maxDepth = meta.depth;\n }\n }\n if (!parent) {\n me.maxDepth = maxDepth;\n }\n return maxDepth;\n }\n //endregion\n //region Getters\n /**\n * Get the header cell element for the specified column.\n * @param {String} columnId Column id\n * @returns {HTMLElement} Header cell element\n */\n getHeader(columnId) {\n return this.getBarCellElement(columnId);\n }\n //endregion\n get contentElement() {\n return this.element.firstElementChild;\n }\n refreshContent() {\n const me = this;\n DomSync.sync({\n domConfig : {\n children : me.columns.topColumns.map(col => me.getColumnConfig(col)),\n onlyChildren : true\n },\n targetElement : me.contentElement,\n strict : true,\n syncIdField : 'columnId',\n releaseThreshold : 0\n });\n me.refreshHeaders();\n }\n onInternalPaint({ firstPaint }) {\n if (firstPaint) {\n this.refreshContent();\n }\n }\n}\n// Register this widget type with its Factory\nHeader.initClass();\nHeader._$name = 'Header';", "import Base from '../../../Core/Base.js';\nimport DomDataStore from '../../../Core/data/DomDataStore.js';\nimport DomHelper from '../../../Core/helper/DomHelper.js';\nimport Rectangle from '../../../Core/helper/util/Rectangle.js';\nimport EventHelper from '../../../Core/helper/EventHelper.js';\nimport StringHelper from '../../../Core/helper/StringHelper.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\nimport BrowserHelper from '../../../Core/helper/BrowserHelper.js';\nimport Location from '../../util/Location.js';\nconst gridBodyElementEventHandlers = {\n touchstart : 'onElementTouchStart',\n touchmove : 'onElementTouchMove',\n touchend : 'onElementTouchEnd',\n pointerover : 'onElementMouseOver',\n mouseout : 'onElementMouseOut',\n mousedown : 'onElementMouseDown',\n mousemove : 'onElementMouseMove',\n mouseup : 'onElementMouseUp',\n click : 'onHandleElementClick',\n dblclick : 'onElementDblClick',\n keyup : 'onElementKeyUp',\n keypress : 'onElementKeyPress',\n contextmenu : 'onElementContextMenu',\n pointerdown : 'onElementPointerDown',\n pointerup : 'onElementPointerUp'\n },\n eventProps = [\n 'pageX',\n 'pageY',\n 'clientX',\n 'clientY',\n 'screenX',\n 'screenY'\n ],\n textInputs = 'input:is(:not([type]),[type=\"text\"],[type=\"number\"],[type=\"date\"],[type=\"datetime-local\"],[type=\"email\"],[type=\"month\"],[type=\"password\"],[type=\"range\"],[type=\"search\"],[type=\"tel\"],[type=\"time\"],[type=\"url\"],[type=\"week\"])',\n textKeys = {\n ArrowUp : 1,\n ArrowDown : 1,\n ArrowLeft : 1,\n ArrowRight : 1,\n Backspace : 1,\n Delete : 1\n };\nfunction toggleHover(element, add = true) {\n element?.classList.toggle('b-hover', add);\n}\nfunction setCellHover(columnId, row, add = true) {\n row && columnId && toggleHover(row.getCell(columnId), add);\n}\n/**\n * @module Grid/view/mixin/GridElementEvents\n */\n/**\n * Mixin for Grid that handles dom events. Some listeners fire own events but all can be chained by features. None of\n * the functions in this class are indented to be called directly.\n *\n * See {@link Grid.view.Grid} for more information on grid keyboard interaction.\n *\n * @mixin\n */\nexport default Target => class GridElementEvents extends (Target || Base) {\n static get $name() {\n return 'GridElementEvents';\n }\n //region Config\n static get configurable() {\n return {\n /**\n * The currently hovered grid cell\n * @member {HTMLElement}\n * @readonly\n * @category Misc\n */\n hoveredCell : null,\n /**\n * Time in ms until a longpress is triggered\n * @prp {Number}\n * @default\n * @category Misc\n */\n longPressTime : 400,\n /**\n * Set to true to listen for CTRL-Z (CMD-Z on Mac OS) keyboard event and trigger undo (redo when SHIFT is\n * pressed). Only applicable when using a {@link Core.data.stm.StateTrackingManager}.\n * @prp {Boolean}\n * @default\n * @category Misc\n */\n enableUndoRedoKeys : true,\n keyMap : {\n 'Ctrl+z' : 'undoRedoKeyPress',\n 'Ctrl+Shift+z' : 'undoRedoKeyPress',\n ' ' : { handler : 'clickCellByKey', weight : 1000 }\n }\n };\n }\n //endregion\n //region Events\n /**\n * Fired when user clicks in a grid cell\n * @event cellClick\n * @param {Grid.view.Grid} grid The grid instance\n * @param {Core.data.Model} record The record representing the row\n * @param {Grid.column.Column} column The column to which the cell belongs\n * @param {HTMLElement} cellElement The cell HTML element\n * @param {HTMLElement} target The target element\n * @param {MouseEvent} event The native DOM event\n */\n /**\n * Fired when user double clicks a grid cell\n * @event cellDblClick\n * @param {Grid.view.Grid} grid The grid instance\n * @param {Core.data.Model} record The record representing the row\n * @param {Grid.column.Column} column The column to which the cell belongs\n * @param {HTMLElement} cellElement The cell HTML element\n * @param {HTMLElement} target The target element\n * @param {MouseEvent} event The native DOM event\n */\n /**\n * Fired when user activates contextmenu in a grid cell\n * @event cellContextMenu\n * @param {Grid.view.Grid} grid The grid instance\n * @param {Core.data.Model} record The record representing the row\n * @param {Grid.column.Column} column The column to which the cell belongs\n * @param {HTMLElement} cellElement The cell HTML element\n * @param {HTMLElement} target The target element\n * @param {MouseEvent} event The native DOM event\n */\n /**\n * Fired when user moves the mouse over a grid cell\n * @event cellMouseOver\n * @param {Grid.view.Grid} grid The grid instance\n * @param {Core.data.Model} record The record representing the row\n * @param {Grid.column.Column} column The column to which the cell belongs\n * @param {HTMLElement} cellElement The cell HTML element\n * @param {HTMLElement} target The target element\n * @param {MouseEvent} event The native DOM event\n */\n /**\n * Fired when a user moves the mouse out of a grid cell\n * @event cellMouseOut\n * @param {Grid.view.Grid} grid The grid instance\n * @param {Core.data.Model} record The record representing the row\n * @param {Grid.column.Column} column The column to which the cell belongs\n * @param {HTMLElement} cellElement The cell HTML element\n * @param {HTMLElement} target The target element\n * @param {MouseEvent} event The native DOM event\n */\n /**\n * Fired when the mouse enters a row\n * @event rowMouseEnter\n * @param {Grid.view.Grid} source The grid instance\n * @param {Core.data.Model} record The record representing the hovered row\n * @param {Grid.column.Column} column The column currently hovered\n * @param {HTMLElement} cellElement The cell HTML element\n * @param {MouseEvent} event The native DOM event\n */\n /**\n * Fired when the mouse leaves a row\n * @event rowMouseLeave\n * @param {Grid.view.Grid} source The grid instance\n * @param {Core.data.Model} record The record representing the row that the mouse left\n * @param {HTMLElement} cellElement The cell HTML element that the mouse left\n * @param {MouseEvent} event The native DOM event\n */\n /**\n * Fired when the mouse enters a cell\n * @event cellMouseEnter\n * @param {Grid.view.Grid} source The grid instance\n * @param {Core.data.Model} record The record representing the hovered cell\n * @param {Grid.column.Column} column The column currently hovered\n * @param {HTMLElement} cellElement The cell HTML element\n * @param {MouseEvent} event The native DOM event\n */\n /**\n * Fired when the mouse leaves a cell\n * @event cellMouseLeave\n * @param {Grid.view.Grid} source The grid instance\n * @param {Core.data.Model} record The record representing the cell that the mouse left\n * @param {Grid.column.Column} column The column representing the cell that the mouse left\n * @param {HTMLElement} cellElement The cell HTML element that the mouse left\n * @param {MouseEvent} event The native DOM event\n */\n //endregion\n //region Event handling\n /**\n * Init listeners for a bunch of dom events. All events are handled by handleEvent().\n * @private\n * @category Events\n */\n initInternalEvents() {\n const\n handledEvents = Object.keys(gridBodyElementEventHandlers),\n len = handledEvents.length,\n listeners = {\n element : this.bodyElement,\n thisObj : this\n };\n // Route all events through handleEvent, so that we can capture this.event\n // before we route to the handlers\n for (let i = 0; i < len; i++) {\n const eventName = handledEvents[i];\n listeners[eventName] = {\n handler : 'handleEvent'\n };\n // Override default for touch events.\n // Other event types already have correct default.\n if (eventName.startsWith('touch')) {\n listeners[eventName].passive = false;\n }\n }\n EventHelper.on(listeners);\n EventHelper.on({\n mouseenter : 'onGridBodyMouseEnterOrLeave',\n mouseleave : 'onGridBodyMouseEnterOrLeave',\n focusin : 'onGridBodyFocusIn',\n element : this.bodyElement,\n thisObj : this,\n capture : true\n });\n }\n /**\n * This method finds the cell location of the passed event. It returns an object describing the cell.\n * @param {Event} event A Mouse, Pointer or Touch event targeted at part of the grid.\n * @param {Boolean} [includeSingleAxisMatch] Set to `true` to return a cell from xy either above or below the Grid's\n * body or to the left or right.\n * @returns {Object} An object containing the following properties:\n * - `cellElement` - The cell element clicked on.\n * - `column` - The {@link Grid.column.Column column} clicked under.\n * - `columnId` - The `id` of the {@link Grid.column.Column column} clicked under.\n * - `record` - The {@link Core.data.Model record} clicked on.\n * - `id` - The `id` of the {@link Core.data.Model record} clicked on.\n * @internal\n * @category Events\n */\n getCellDataFromEvent(event, includeSingleAxisMatch = false) {\n const\n me = this,\n { target } = event,\n targetIsRow = target.classList.contains('b-grid-row');\n let cellElement = target.closest('.b-grid-cell');\n if (!cellElement && includeSingleAxisMatch && !targetIsRow &&\n !target.classList.contains('b-grid-subgrid')\n ) {\n const\n { columns } = me,\n {\n top,\n left,\n right,\n bottom\n } = me.bodyContainer.getBoundingClientRect();\n let match,\n { x, y } = event;\n // X axis correct\n if (x >= left && x <= right) {\n // y will match row either at the top or at the bottom, dependent on what the provided x is\n y = match = Math.ceil(me[`${y < top ? 'first' : 'last'}FullyVisibleRow`].element.getBoundingClientRect().y);\n }\n // Y axis correct\n else if (y >= top && y <= bottom) {\n // x will match row either at to the left or to the right, dependent on what the provided y is\n x = match = Math.ceil(columns.visibleColumns[x < left ? 0 : columns.visibleColumns.length - 1].element.getBoundingClientRect().x);\n }\n if (match !== undefined) {\n cellElement = DomHelper.childFromPoint(target, event.offsetX, event.offsetY)?.closest('.b-grid-cell');\n }\n }\n else if (targetIsRow) {\n // Peek at vertical center of the row element\n cellElement = DomHelper.childFromPoint(target, event.offsetX, event.offsetY - (target.offsetHeight / 2))?.closest('.b-grid-cell');\n }\n if (cellElement) {\n return me.getCellDataFromElement(cellElement);\n }\n }\n /**\n * This method finds the cell location of the passed element. It returns an object describing the cell.\n * @param {HTMLElement} cellElement A cell element or any element inside a cell.\n * @returns {Object} An object containing the following properties:\n * - `cellElement` - The cell element clicked on.\n * - `column` - The {@link Grid.column.Column column} clicked under.\n * - `columnId` - The `id` of the {@link Grid.column.Column column} clicked under.\n * - `record` - The {@link Core.data.Model record} clicked on.\n * - `id` - The `id` of the {@link Core.data.Model record} clicked on.\n * @internal\n * @category Events\n */\n getCellDataFromElement(cellElement) {\n const me = this;\n // eslint-disable-next-line no-cond-assign\n if (cellElement /* assignment */ = cellElement.closest('.b-grid-cell')) {\n const\n cellData = DomDataStore.get(cellElement),\n { id, columnId } = cellData,\n record = me.store.getById(id),\n column = me.columns.getById(columnId);\n // Row might not have a record, since we transition record removal\n return record ? {\n cellElement,\n cellData,\n columnId,\n id,\n record,\n column,\n cellSelector : { id, columnId }\n } : null;\n }\n }\n /**\n * This method finds the header location of the passed event. It returns an object describing the header.\n * @param {Event} event A Mouse, Pointer or Touch event targeted at part of the grid.\n * @returns {Object} An object containing the following properties:\n * - `headerElement` - The header element clicked on.\n * - `column` - The {@link Grid.column.Column column} clicked under.\n * - `columnId` - The `id` of the {@link Grid.column.Column column} clicked under.\n * @internal\n * @category Events\n */\n getHeaderDataFromEvent(event) {\n const headerElement = event.target.closest('.b-grid-header');\n // There is a header\n if (headerElement) {\n const\n headerData = ObjectHelper.assign({}, headerElement.dataset),\n { columnId } = headerData,\n column = this.columns.getById(columnId);\n return column ? {\n headerElement,\n headerData,\n columnId,\n column\n } : null;\n }\n }\n /**\n * Handles all dom events, routing them to correct functions (touchstart -> onElementTouchStart)\n * @param event\n * @private\n * @category Events\n */\n handleEvent(event) {\n if (!this.disabled && gridBodyElementEventHandlers[event.type]) {\n this[gridBodyElementEventHandlers[event.type]](event);\n }\n }\n //endregion\n //region Touch events\n /**\n * Touch start, chain this function in features to handle the event.\n * @param event\n * @category Touch events\n * @internal\n */\n onElementTouchStart(event) {\n const me = this;\n DomHelper.isTouchEvent = true;\n if (event.touches.length === 1) {\n me.longPressTimeout = me.setTimeout(() => {\n me.onElementLongPress(event);\n event.preventDefault();\n me.longPressPerformed = true;\n }, me.longPressTime);\n }\n }\n /**\n * Touch move, chain this function in features to handle the event.\n * @param event\n * @category Touch events\n * @internal\n */\n onElementTouchMove(event) {\n const\n me = this,\n {\n lastTouchTarget\n } = me,\n touch = event.changedTouches[0],\n {\n pageX,\n pageY\n } = touch,\n touchTarget = document.elementFromPoint(pageX, pageY);\n if (me.longPressTimeout) {\n me.clearTimeout(me.longPressTimeout);\n me.longPressTimeout = null;\n }\n // Keep grid informed about mouseover/outs during touch-based dragging\n if (touchTarget !== lastTouchTarget) {\n if (lastTouchTarget) {\n const mouseoutEvent = new MouseEvent('mouseout', ObjectHelper.copyProperties({\n relatedTarget : touchTarget,\n pointerType : 'touch',\n bubbles : true\n }, touch, eventProps));\n mouseoutEvent.preventDefault = () => event.preventDefault();\n lastTouchTarget?.dispatchEvent(mouseoutEvent);\n }\n if (touchTarget) {\n const mouseoverEvent = new MouseEvent('mouseover', ObjectHelper.copyProperties({\n relatedTarget : lastTouchTarget,\n pointerType : 'touch',\n bubbles : true\n }, touch, eventProps));\n mouseoverEvent.preventDefault = () => event.preventDefault();\n touchTarget?.dispatchEvent(mouseoverEvent);\n }\n }\n me.lastTouchTarget = touchTarget;\n }\n /**\n * Touch end, chain this function in features to handle the event.\n * @param event\n * @category Touch events\n * @internal\n */\n onElementTouchEnd(event) {\n const me = this;\n if (me.longPressPerformed) {\n if (event.cancelable) {\n event.preventDefault();\n }\n me.longPressPerformed = false;\n }\n if (me.longPressTimeout) {\n me.clearTimeout(me.longPressTimeout);\n me.longPressTimeout = null;\n }\n }\n onElementLongPress(event) {}\n //endregion\n //region Mouse events\n // Trigger events in same style when clicking, dblclicking and for contextmenu\n triggerCellMouseEvent(name, event, cellData = this.getCellDataFromEvent(event), target = 'cell') {\n const me = this;\n // There is a cell\n if (cellData) {\n const\n column = me.columns.getById(cellData.columnId),\n eventData = {\n grid : me,\n record : cellData.record,\n column,\n cellSelector : cellData.cellSelector,\n cellElement : cellData.cellElement,\n target : event.target,\n event\n };\n me.trigger(target + StringHelper.capitalize(name), eventData);\n if (target === 'cell' && name === 'click') {\n column.onCellClick?.(eventData);\n }\n }\n }\n /**\n * Mouse down, chain this function in features to handle the event.\n * @param event\n * @category Mouse events\n * @internal\n */\n onElementMouseDown(event) {\n const\n me = this,\n cellData = me.getCellDataFromEvent(event);\n me.skipFocusSelection = true;\n // If click was on a scrollbar or splitter, preventDefault to not steal focus\n if (me.isScrollbarOrRowBorderOrSplitterClick(event)) {\n event.preventDefault();\n }\n else {\n me.triggerCellMouseEvent('mousedown', event, cellData);\n // Browser event unification fires a mousedown on touch tap prior to focus.\n if (cellData && !event.defaultPrevented) {\n me.onFocusGesture(event);\n }\n }\n }\n isScrollbarOrRowBorderOrSplitterClick({ target, x, y }) {\n // Normally cells catch the click, directly on row = user clicked border, which we ignore.\n // Also ignore clicks on the virtual width element used to stretch fake scrollbar\n if (target.closest('.b-grid-splitter') || target.matches('.b-grid-row, .b-virtual-width')) {\n return true;\n }\n if (target.matches('.b-vertical-overflow')) {\n const rect = target.getBoundingClientRect();\n return x > rect.right - DomHelper.scrollBarWidth;\n }\n else if (target.matches('.b-horizontal-overflow')) {\n const rect = target.getBoundingClientRect();\n return y > rect.bottom - DomHelper.scrollBarWidth - 1; // -1 for height of virtualScrollerWidth element\n }\n }\n /**\n * Mouse move, chain this function in features to handle the event.\n * @param event\n * @category Mouse events\n * @internal\n */\n onElementMouseMove(event) {\n // Keep track of the last mouse position in case, due to OSX sloppy focusing,\n // focus is moved into the browser before a mousedown is delivered.\n // The cached mousemove event will provide the correct target in\n // GridNavigation#onGridElementFocus.\n this.mouseMoveEvent = event;\n }\n /**\n * Mouse up, chain this function in features to handle the event.\n * @param event\n * @category Mouse events\n * @internal\n */\n onElementMouseUp(event) {}\n onElementPointerDown(event) {}\n /**\n * Pointer up, chain this function in features to handle the event.\n * @param event\n * @category Mouse events\n * @internal\n */\n onElementPointerUp(event) {}\n /**\n * Called before {@link #function-onElementClick}.\n * Fires 'beforeElementClick' event which can return false to cancel further onElementClick actions.\n * @param event\n * @fires beforeElementClick\n * @category Mouse events\n * @internal\n */\n onHandleElementClick(event) {\n if (this.trigger('beforeElementClick', { event }) !== false) {\n this.onElementClick(event);\n }\n }\n /**\n * Click, select cell on click and also fire 'cellClick' event.\n * Chain this function in features to handle the dom event.\n * @param event\n * @fires cellClick\n * @category Mouse events\n * @internal\n */\n onElementClick(event) {\n const\n me = this,\n cellData = me.getCellDataFromEvent(event);\n // There is a cell\n if (cellData) {\n return me.triggerCellMouseEvent('click', event, cellData);\n }\n else {\n const\n header = event.target?.closest('.b-grid-header'),\n column = header && me.columns.getById(header.dataset.columnId);\n if (column) {\n /**\n * Fired when a grid header is clicked on.\n *\n * Returning `false` from a handler prevents any features (such as {@link Grid.feature.Sort})\n * from recieving and processing the click event.\n * @event headerClick\n * @param {Event} domEvent The triggering DOM event.\n * @param {Grid.column.Column} column The column clicked on.\n * @preventable\n */\n return me.trigger('headerClick', {\n domEvent : event,\n column\n });\n }\n }\n }\n onFocusGesture(event) {\n const\n me = this,\n { navigationEvent } = me,\n { target } = event,\n isContextMenu = event.button === 2,\n // Interaction with tree expand/collapse icons doesn't focus\n isTreeExpander = !isContextMenu && target.matches('.b-icon-tree-expand, .b-icon-tree-collapse'),\n // Mac OS specific behaviour: when you right click a non-active window, the window does not receive focus, but the context menu is shown.\n // So for Mac OS we treat the right click as a non-focusable action, if window is not active\n isUnfocusedRightClick = !document.hasFocus() && BrowserHelper.isMac && isContextMenu;\n // Tree expander clicks and contextmenus on unfocused windows don't focus\n if (isTreeExpander || isUnfocusedRightClick) {\n event.preventDefault();\n }\n else {\n // Used by the GridNavigation mixin to detect what interaction event if any caused\n // the focus to be moved. If it's a programmatic focus, there won't be one.\n // Grid doesn't use a Navigator which maintains this property, so we need to set it.\n me.navigationEvent = event;\n const location = new Location(target);\n // Context menu doesn't focus by default, so that needs to explicitly focus.\n // If they're re-clicking the current focus, GridNavigation#focusCell\n // still needs to know. It's a no-op, but it informs the GridSelection of the event.\n if (isContextMenu || me.focusedCell?.equals(location)) {\n const focusOptions = { scroll : false };\n // If current event is a MouseEvent and previous event is a TouchEvent on same target, this event is\n // most likely a MouseEvent triggered by a TouchEvent, which should not trigger selection\n if (globalThis.TouchEvent && event instanceof MouseEvent && navigationEvent instanceof TouchEvent &&\n target === navigationEvent.target\n ) {\n focusOptions.doSelect = false;\n }\n me.focusCell(location, focusOptions);\n }\n }\n }\n /**\n * Double click, fires 'cellDblClick' event.\n * Chain this function in features to handle the dom event.\n * @param {Event} event\n * @fires cellDblClick\n * @fires columnResize\n * @category Mouse events\n * @internal\n */\n onElementDblClick(event) {\n const { target } = event;\n this.triggerCellMouseEvent('dblClick', event);\n if (target.classList.contains('b-grid-header-resize-handle')) {\n const\n header = target.closest('.b-grid-header'),\n column = this.columns.getById(header.dataset.columnId);\n if (column.resizeToFitContent()) {\n this.trigger('columnResize', { column, domEvent : event });\n }\n }\n }\n /**\n * Mouse over, adds 'hover' class to elements.\n * @param event\n * @fires mouseOver\n * @category Mouse events\n * @internal\n */\n onElementMouseOver(event) {\n // bail out early if scrolling\n if (!this.scrolling) {\n const\n me = this,\n { hoveredCell } = me,\n // No hover effect needed if a mouse button is pressed (like when resizing window, region, or resizing something etc).\n // NOTE: 'buttons' not supported in Safari\n shouldHover = (typeof event.buttons !== 'number' || event.buttons === 0) && event.pointerType !== 'touch';\n let cellElement = event.target.closest('.b-grid-cell');\n me._lastMouseOverOutEvent = event;\n // If we are entering a grid row (which probably is a row border), we should hover\n // cell/row above so not to get a blinking hovering, especially on column header\n if (!cellElement && event.target.classList.contains('b-grid-row')) {\n cellElement = DomHelper.childFromPoint(event.target, event.offsetX, event.offsetY - 2)?.closest('.b-grid-cell');\n }\n if (cellElement) {\n if (shouldHover) {\n me.hoveredCell = cellElement;\n }\n if (hoveredCell !== me.hoveredCell) {\n me.triggerCellMouseEvent('mouseOver', event);\n }\n }\n /**\n * Mouse moved in over element in grid\n * @event mouseOver\n * @param {MouseEvent} event The native browser event\n */\n me.trigger('mouseOver', { event });\n }\n }\n /**\n * Mouse out, removes 'hover' class from elements.\n * @param event\n * @fires mouseOut\n * @category Mouse events\n * @internal\n */\n onElementMouseOut(event) {\n const\n me = this,\n {\n target,\n relatedTarget\n } = event,\n // No hover effect needed if a mouse button is pressed\n shouldHover = (typeof event.buttons !== 'number' || event.buttons === 0) && event.pointerType !== 'touch';\n me._lastMouseOverOutEvent = event;\n // If we have not moved onto a grid row\n // (meaning over its border which is handled by getCellDataFromEvent)\n // hover any new cell we are over.\n if (shouldHover && relatedTarget && target.matches('.b-grid-cell') && !target.contains(relatedTarget)) {\n if (!relatedTarget.matches('.b-grid-row')) {\n me.hoveredCell = relatedTarget.closest('.b-grid-cell');\n }\n }\n else if (!relatedTarget?.matches('.b-grid-row,.b-grid-cell') && !me.hoveredCell?.contains(relatedTarget)) {\n me.hoveredCell = null;\n }\n // bail out early if scrolling\n if (!me.scrolling) {\n // Check that we are not within the same grid cell\n if (relatedTarget?.closest('.b-grid-cell') !== target?.closest('.b-grid-cell')) {\n if (target?.closest('.b-grid-cell')) {\n me.triggerCellMouseEvent('mouseOut', event);\n }\n }\n /**\n * Mouse moved out from element in grid\n * @event mouseOut\n * @param {MouseEvent} event The native browser event\n */\n me.trigger('mouseOut', { event });\n }\n }\n // The may be chained in features\n updateHoveredCell(cellElement, was) {\n const\n me = this,\n { selectionMode } = me,\n rowNumberColumnId = selectionMode.rowNumber && me.columns.find(c => c.type == 'rownumber')?.id,\n checkboxSelectionColumnId = selectionMode.checkbox && me.checkboxSelectionColumn?.id;\n let prevRow, row;\n // Clear last hovered cell\n if (was) {\n toggleHover(was, false);\n // Also remove hovered class on checkcol, rownumbercol and column header\n const\n prevSelector = DomDataStore.get(was);\n prevRow = prevSelector.row;\n if (prevRow && !prevRow.isDestroyed) {\n setCellHover(rowNumberColumnId, prevRow, false);\n setCellHover(checkboxSelectionColumnId, prevRow, false);\n }\n if (prevSelector?.columnId) {\n toggleHover(me.columns.getById(prevSelector.columnId)?.element, false);\n }\n }\n // Clears hovered row\n // Only remove cls if row isn't destroyed\n if (me._hoveredRow && !me._hoveredRow.isDestroyed) {\n me._hoveredRow.removeCls('b-hover');\n }\n me._hoveredRow = null;\n // Set hovered\n if (cellElement && !me.scrolling) {\n const\n selector = DomDataStore.get(cellElement);\n row = selector.row;\n if (row) {\n // Set cell if cell selection mode is on\n if (selectionMode.cell && selector.columnId !== rowNumberColumnId && selector.columnId !== checkboxSelectionColumnId) {\n const column = me.columns.getById(selector.columnId);\n toggleHover(cellElement);\n // In cell selection mode:\n // Also \"hover\" checkcolumn cell if such exists\n setCellHover(checkboxSelectionColumnId, row);\n // And also rownumbercolumn cell\n setCellHover(rowNumberColumnId, row);\n // And also column header\n if (column?.element && column.headerHoverable !== false) {\n toggleHover(column.element);\n }\n }\n // Else row\n else {\n me._hoveredRow = row;\n row.addCls('b-hover');\n }\n }\n else {\n me.hoveredCell = null;\n }\n }\n // Trigger rowMouseEnter/rowMouseLeave events manually\n if (row !== prevRow) {\n const { _lastMouseOverOutEvent } = me;\n if (prevRow && !prevRow.isDestroyed) {\n me.trigger('rowMouseLeave', { event : _lastMouseOverOutEvent, record : prevRow.cellContext.record, cellElement : was });\n }\n if (row) {\n const cellData = me.getCellDataFromEvent(_lastMouseOverOutEvent);\n me.triggerCellMouseEvent('mouseEnter', _lastMouseOverOutEvent, cellData, 'row');\n }\n }\n }\n //endregion\n //region Keyboard events\n // Hooks on to keyMaps keydown-listener to be able to run before\n keyMapOnKeyDown(event) {\n const { target } = event;\n if (this.element.contains(target)) {\n this.onElementKeyDown(event);\n // Prevents keys from editable input fields which the Grid handles from reaching grid's KeyMap.\n if (textKeys[event.key] && DomHelper.isEditable(target) && !target.getAttribute('readOnly') && this.matchKeyMapEntry(event) && target.matches(textInputs)) {\n // Don't allow browser key commands such as PAGE-UP, PAGE-DOWN to continue.\n if (!event.key.startsWith('Arrow') && !event.key === 'Backspace') {\n event.preventDefault();\n }\n event.handled = true;\n event.stopPropagation();\n return false;\n }\n else {\n super.keyMapOnKeyDown(event);\n }\n }\n }\n /**\n * To catch all keydowns. For more specific keydown actions, use keyMap.\n * @param event\n * @category Keyboard events\n * @internal\n */\n onElementKeyDown(event) {\n // If some other function flagged the event as handled, we ignore it.\n if (event.handled || !this.element.contains(event.target)) {\n return;\n }\n const\n me = this,\n // Read this to refresh cached reference in case this keystroke lead to the removal of current row\n focusedCell = me.focusedCell;\n if (focusedCell?.isCell && !focusedCell.isActionable) {\n const data = event.target.closest('.b-grid-cell') ? me.getCellDataFromEvent(event) : me.getCellDataFromElement(focusedCell.cell);\n // If a cell is focused and column is interested - call special callback\n data.column.onCellKeyDown?.({ ...data, event });\n }\n }\n undoRedoKeyPress(event) {\n const { stm } = this.store;\n if (stm && this.enableUndoRedoKeys && !this.features.cellEdit?.isEditing) {\n stm.onUndoKeyPress(event);\n return true;\n }\n return false;\n }\n // Trigger column.onCellClick when space bar is pressed\n clickCellByKey(event) {\n const\n me = this,\n // Read this to refresh cached reference in case this keystroke lead to the removal of current row\n focusedCell = me.focusedCell,\n cellElement = focusedCell?.cell,\n column = me.columns.getById(cellElement.dataset.columnId);\n if (focusedCell?.isCell && !focusedCell.isActionable) {\n if (column.onCellClick) {\n column.onCellClick({\n grid : me,\n column,\n record : me.store.getById(focusedCell.id),\n cellElement,\n target : event.target,\n event\n });\n return true;\n }\n }\n return false;\n }\n /**\n * Key press, chain this function in features to handle the dom event.\n * @param event\n * @category Keyboard events\n * @internal\n */\n onElementKeyPress(event) {}\n /**\n * Key up, chain this function in features to handle the dom event.\n * @param event\n * @category Keyboard events\n * @internal\n */\n onElementKeyUp(event) {}\n //endregion\n //region Other events\n /**\n * Context menu, chain this function in features to handle the dom event.\n * In most cases, include ContextMenu feature instead.\n * @param event\n * @category Other events\n * @internal\n */\n onElementContextMenu(event) {\n const\n me = this,\n cellData = me.getCellDataFromEvent(event);\n // There is a cell\n if (cellData) {\n me.triggerCellMouseEvent('contextMenu', event, cellData);\n // Focus on tap for touch events.\n // Selection follows from focus.\n if (DomHelper.isTouchEvent) {\n me.onFocusGesture(event);\n }\n }\n }\n onGridBodyMouseEnterOrLeave(event) {\n const cellData = event.target.classList.contains('b-grid-cell') && this.getCellDataFromEvent(event);\n if (cellData) {\n this.triggerCellMouseEvent(event.type, event, cellData);\n }\n }\n /**\n * Overrides empty base function in View, called when view is resized.\n * @fires resize\n * @param element\n * @param width\n * @param height\n * @param oldWidth\n * @param oldHeight\n * @category Other events\n * @internal\n */\n onInternalResize(element, width, height, oldWidth, oldHeight) {\n const me = this;\n if (me._devicePixelRatio && me._devicePixelRatio !== globalThis.devicePixelRatio) {\n // Pixel ratio changed, likely because of browser zoom. This affects the relative scrollbar width also\n DomHelper.resetScrollBarWidth();\n }\n me._devicePixelRatio = globalThis.devicePixelRatio;\n // cache to avoid recalculations in the middle of rendering code (RowManger#getRecordCoords())\n me._bodyRectangle = Rectangle.client(me.bodyContainer);\n super.onInternalResize(...arguments);\n if (height !== oldHeight) {\n me._bodyHeight = me.bodyContainer.offsetHeight;\n if (me.isPainted) {\n // initial height will be set from render(),\n // it reaches onInternalResize too early when rendering, headers/footers are not sized yet\n me.rowManager.initWithHeight(me._bodyHeight);\n }\n }\n me.refreshVirtualScrollbars();\n if (width !== oldWidth) {\n // Slightly delay to avoid resize loops.\n me.setTimeout(() => {\n if (!me.isDestroyed) {\n me.updateResponsive(width, oldWidth);\n }\n }, 0);\n }\n }\n //endregion\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "import Base from '../../../Core/Base.js';\nimport StringHelper from '../../../Core/helper/StringHelper.js';\nimport GridFeatureManager from '../../feature/GridFeatureManager.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\n/**\n * @module Grid/view/mixin/GridFeatures\n */\nconst validConfigTypes = {\n string : 1,\n object : 1,\n function : 1 // used by CellTooltip\n};\n/**\n * Mixin for Grid that handles features. Features are plugins that add functionality to the grid. Feature classes should\n * register with Grid by calling {@link Grid.feature.GridFeatureManager#function-registerFeature-static registerFeature}. This\n * enables features to be specified and configured in grid\n * config.\n *\n * Define which features to use:\n *\n * ```javascript\n * // specify which features to use (note that some features are used by default)\n * const grid = new Grid({\n * features: {\n * sort: 'name',\n * search: true\n * }\n * });\n * ```\n *\n * Access a feature in use:\n *\n * ```javascript\n * grid.features.search.search('cat');\n * ```\n *\n * Basic example of implementing a feature:\n *\n * ```javascript\n * class MyFeature extends InstancePlugin {\n *\n * }\n *\n * GridFeatures.registerFeature(MyFeature);\n *\n * // using the feature\n * const grid = new Grid({\n * features: {\n * myFeature: true\n * }\n * });\n * ```\n *\n * ## Enable and disable features at runtime\n *\n * Each feature is either \"enabled\" (included by default), or \"off\" (excluded completely). You can always check the docs\n * of a specific feature to find out how it is configured by default.\n *\n * Features which are \"off\" completely are not available and cannot be enabled at runtime.\n *\n * For a feature that is **off** by default that you want to enable later during runtime,\n * configure it with `disabled : true`:\n * ```javascript\n * const grid = new Grid({\n * featureName : {\n * disabled : true // on and disabled, can be enabled later\n * }\n * });\n *\n * // enable the feature\n * grid.featureName.disabled = false;\n * ```\n *\n * If the feature is **disabled** by default, and you want to include and enable the feature, configure it as `true`:\n * ```javascript\n * const grid = new Grid({\n * featureName : true // on and enabled, can be disabled later\n * });\n *\n * // disable the feature\n * grid.featureName.disabled = true;\n * ```\n *\n * If the feature is **on** by default, but you want to turn it **off**, configure it as `false`:\n * ```javascript\n * const grid = new Grid({\n * featureName : false // turned off, not included at all\n * });\n * ```\n *\n * If the feature is **enabled** by default and you have no need of reconfiguring it,\n * you can omit the feature configuration.\n *\n * @mixin\n */\nexport default Target => class GridFeatures extends (Target || Base) {\n static get $name() {\n return 'GridFeatures';\n }\n //region Init\n /**\n * Specify which features to use on the grid. Most features accepts a boolean, some also accepts a config object.\n * Please note that if you are not using the bundles you might need to import the features you want to use.\n *\n * ```javascript\n * const grid = new Grid({\n * features : {\n * stripe : true, // Enable stripe feature\n * sort : 'name', // Configure sort feature\n * group : false // Disable group feature\n * }\n * }\n * ```\n *\n * @config {Object} features\n * @category Common\n */\n /**\n * Map of the features available on the grid. Use it to access them on your grid object\n *\n * ```javascript\n * grid.features.group.expandAll();\n * ```\n *\n * @readonly\n * @member {Object} features\n * @category Common\n */\n set features(features) {\n const\n me = this,\n defaultFeatures = GridFeatureManager.getInstanceDefaultFeatures(this);\n features = me._features = ObjectHelper.assign({}, features);\n // default features, enabled unless otherwise specified\n if (defaultFeatures) {\n Object.keys(defaultFeatures).forEach(feature => {\n if (!(feature in features)) {\n features[feature] = true;\n }\n });\n }\n // We *prime* the features so that if any configuration code accesses a feature, it\n // will self initialize, but if not, they will remain in a primed state until afterConfigure.\n const registeredInstanceFeatures = GridFeatureManager.getInstanceFeatures(this);\n for (const featureName of Object.keys(features)) {\n const config = features[featureName];\n // Create feature initialization property if config is truthy.\n // Config must be a valid configuration value for the feature class.\n if (config) {\n const throwIfError = !globalThis.__bryntum_code_editor_changed;\n // Feature configs name must start with lowercase letter to be valid\n if (StringHelper.uncapitalize(featureName) !== featureName) {\n const errorMessage = `Invalid feature name '${featureName}', must start with a lowercase letter`;\n if (throwIfError) {\n throw new Error(errorMessage);\n }\n console.error(errorMessage);\n me._errorDuringConfiguration = errorMessage;\n }\n const featureClass = registeredInstanceFeatures[featureName];\n if (!featureClass) {\n const errorMessage = `Feature '${featureName}' not available, make sure you have imported it`;\n if (throwIfError) {\n throw new Error(errorMessage);\n }\n console.error(errorMessage);\n me._errorDuringConfiguration = errorMessage;\n return;\n }\n // Create a self initializing property on the features object named by the feature name.\n // when accessed, it will create and return the real feature.\n // Now, if some Feature initialization code attempt to access a feature which has not yet been initialized\n // it will be initialized just in time.\n Reflect.defineProperty(features, featureName, me.createFeatureInitializer(features, featureName,\n featureClass, config));\n }\n }\n }\n get features() {\n return this._features;\n }\n createFeatureInitializer(features, featureName, featureClass, config) {\n const\n constructorArgs = [this],\n construct = featureClass.prototype.construct;\n // Config arg must be processed if feature is just requested with true\n // so that default configurable values are processed.\n if (config === true) {\n config = {};\n }\n // Only pass config if there is one.\n // The constructor(config = {}) only works for undefined config\n if (validConfigTypes[typeof config]) {\n constructorArgs[1] = config;\n }\n return {\n configurable : true,\n get() {\n // Delete this defined property and replace it with the Feature instance.\n delete features[featureName];\n // Ensure the feature is injected into the features object before initialization\n // so that it is available from call chains from its initialization.\n featureClass.prototype.construct = function(...args) {\n features[featureName] = this;\n construct.apply(this, args);\n featureClass.prototype.construct = construct;\n };\n // Return the Feature instance\n return new featureClass(...constructorArgs);\n }\n };\n }\n //endregion\n //region Other stuff\n /**\n * Check if a feature is included\n * @param {String} name Feature name, as registered with `GridFeatureManager.registerFeature()`\n * @returns {Boolean}\n * @category Misc\n */\n hasFeature(name) {\n const { features } = this;\n if (features) {\n const featureProp = Object.getOwnPropertyDescriptor(this.features, name);\n if (featureProp) {\n // Do not actually force creation of the feature\n return Boolean(featureProp.value || featureProp.get);\n }\n }\n return false;\n }\n hasActiveFeature(name) {\n return Boolean(this.features?.[name] && !this.features?.[name].disabled);\n }\n //endregion\n //region Extract config\n // This function is not meant to be called by any code other than Base#getCurrentConfig().\n // It extracts the current configs for the features\n getConfigValue(name, options) {\n if (name === 'features') {\n const result = {};\n for (const feature in this.features) {\n // Feature might be configured as `false`\n const featureConfig = this.features[feature]?.getCurrentConfig?.(options);\n if (featureConfig) {\n // Use `true` for empty feature configs `{ stripe : true }`\n if (ObjectHelper.isEmpty(featureConfig)) {\n // Exclude default features to not spam the config\n if (!GridFeatureManager.isDefaultFeatureForInstance(this.features[feature].constructor, this)) {\n result[feature] = true;\n }\n }\n else {\n result[feature] = featureConfig;\n }\n }\n else {\n result[feature] = false;\n }\n }\n return result;\n }\n return super.getConfigValue(name, options);\n }\n //endregion\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "import Base from '../../../Core/Base.js';\nimport Rectangle from '../../../Core/helper/util/Rectangle.js';\nimport Location from '../../util/Location.js';\nimport DomHelper from '../../../Core/helper/DomHelper.js';\nimport GlobalEvents from '../../../Core/GlobalEvents.js';\nimport VersionHelper from '../../../Core/helper/VersionHelper.js';\n/**\n * @module Grid/view/mixin/GridNavigation\n */\nconst\n defaultFocusOptions = Object.freeze({}),\n disableScrolling = Object.freeze({\n x : false,\n y : false\n }),\n containedFocusable = function(e) {\n // When we step outside of the target cell, throw.\n // The TreeWalker silences the exception and terminates the traverse.\n if (!this.focusableFinderCell.contains(e)) {\n return DomHelper.NodeFilter.FILTER_REJECT;\n }\n if (DomHelper.isFocusable(e) && !e.disabled) {\n return DomHelper.NodeFilter.FILTER_ACCEPT;\n }\n return DomHelper.NodeFilter.FILTER_SKIP;\n };\n/**\n * Mixin for Grid that handles cell to cell navigation.\n *\n * See {@link Grid.view.Grid} for more information on grid cell keyboard navigation.\n *\n * @mixin\n */\nexport default Target => class GridNavigation extends (Target || Base) {\n static get $name() {\n return 'GridNavigation';\n }\n static configurable = {\n focusable : false,\n focusableSelector : '.b-grid-cell,.b-grid-header.b-depth-0',\n // Set to true to revert focus on Esc or on ArrowUp/ArrowDown above/below first/last row\n isNested : false,\n // Documented on Grid\n keyMap : {\n ArrowUp : { handler : 'navigateUp', weight : 10 },\n ArrowRight : { handler : 'navigateRight', weight : 10 },\n ArrowDown : { handler : 'navigateDown', weight : 10 },\n ArrowLeft : { handler : 'navigateLeft', weight : 10 },\n 'Ctrl+Home' : 'navigateFirstCell',\n Home : 'navigateFirstColumn',\n 'Ctrl+End' : 'navigateLastCell',\n End : 'navigateLastColumn',\n PageUp : 'navigatePrevPage',\n PageDown : 'navigateNextPage',\n Enter : 'activateHeader',\n // Private\n Escape : { handler : 'onEscape', weight : 10 },\n 'Shift+Tab' : { handler : 'onShiftTab', preventDefault : false, weight : 200 },\n Tab : { handler : 'onTab', preventDefault : false, weight : 200 },\n ' ' : { handler : 'onSpace', preventDefault : false }\n }\n };\n onStoreRecordIdChange(event) {\n super.onStoreRecordIdChange?.(event);\n const\n { focusedCell } = this,\n { oldValue, value } = event;\n // https://github.com/bryntum/support/issues/4935\n if (focusedCell && focusedCell.id === oldValue) {\n focusedCell._id = value;\n }\n }\n /**\n * Called by the RowManager when the row which contains the focus location is derendered.\n *\n * This keeps focus in a consistent place.\n * @protected\n */\n onFocusedRowDerender() {\n const\n me = this,\n { focusedCell } = me;\n if (focusedCell?.id != null && focusedCell.cell) {\n const isActive = focusedCell.cell.contains(DomHelper.getActiveElement(me));\n if (me.hideHeaders) {\n if (isActive) {\n me.revertFocus();\n }\n }\n else {\n const headerContext = me.normalizeCellContext({\n rowIndex : -1,\n columnIndex : isActive ? focusedCell.columnIndex : 0\n });\n // The row contained focus, focus the corresponding header\n if (isActive) {\n me.focusCell(headerContext);\n }\n else {\n headerContext.cell.tabIndex = 0;\n }\n }\n focusedCell.cell.tabIndex = -1;\n }\n }\n navigateFirstCell() {\n this.focusCell(Location.FIRST_CELL);\n }\n navigateFirstColumn() {\n this.focusCell(Location.FIRST_COLUMN);\n }\n navigateLastCell() {\n this.focusCell(Location.LAST_CELL);\n }\n navigateLastColumn() {\n this.focusCell(Location.LAST_COLUMN);\n }\n navigatePrevPage() {\n this.focusCell(Location.PREV_PAGE);\n }\n navigateNextPage() {\n this.focusCell(Location.NEXT_PAGE);\n }\n activateHeader(keyEvent) {\n if (keyEvent.target.classList.contains('b-grid-header') && this.focusedCell.isColumnHeader) {\n const { column } = this.focusedCell;\n column.onKeyDown?.(keyEvent);\n this.getHeaderElement(column.id).click();\n }\n return false;\n }\n onEscape(keyEvent) {\n const\n me = this,\n { focusedCell } = me;\n if (!keyEvent.target.closest('.b-dragging') && focusedCell?.isActionable) {\n // The escape must not be processed by handlers for the cell we are about to focus.\n // We need to just push focus upwards to the cell, and stop there.\n keyEvent.stopImmediatePropagation();\n // To prevent the focusCell from being rejected as a no-op\n me._focusedCell = null;\n // Focus the cell with an explicit request to not jump in\n me.focusCell({\n rowIndex : focusedCell.rowIndex,\n column : focusedCell.column\n }, {\n disableActionable : true\n });\n }\n // If configured as nested, revert focus to outer widget\n // The owner can supply a function to catch the focus. Used in rowExpander.\n else if (me.isNested && me.owner && !me.owner.catchFocus?.({ source : me })) {\n me.revertFocus(true);\n }\n }\n onTab(keyEvent) {\n const\n { target } = keyEvent,\n {\n focusedCell,\n bodyElement\n } = this,\n {\n isActionable,\n actionTargets = []\n } = focusedCell,\n isEditable = isActionable && DomHelper.isEditable(target) && !target.readOnly;\n // If we're on the last editable in a cell, TAB navigates right\n if (isEditable && target === actionTargets[actionTargets.length - 1]) {\n keyEvent.preventDefault();\n this.navigateRight(keyEvent);\n }\n // If we're *on* a cell, or on last subtarget, TAB moves off the grid.\n // Temporarily hide the grid body, and let TAB take effect from there\n else if (!isActionable || target === actionTargets[actionTargets.length - 1]) {\n bodyElement.style.display = 'none';\n this.requestAnimationFrame(() => bodyElement.style.display = '');\n // So that Navigator#onKeyDown does not continue to preventDefault;\n return false;\n }\n }\n onShiftTab(keyEvent) {\n const\n me = this,\n { target } = keyEvent,\n {\n focusedCell,\n bodyElement\n } = me,\n {\n cell,\n isActionable,\n actionTargets\n } = focusedCell,\n isEditable = isActionable && DomHelper.isEditable(target) && !target.readOnly,\n onFirstCell = focusedCell.columnIndex === 0 && focusedCell.rowIndex === (me.hideHeaders ? 0 : -1);\n // If we're on the first editable in a cell that is not the first cell, SHIFT+TAB navigates left\n if (!onFirstCell && isEditable && target === actionTargets[0]) {\n keyEvent.preventDefault();\n me.navigateLeft(keyEvent);\n }\n // If we're *on* a cell, or on first subtarget, SHIFT+TAB moves off the grid.\n else if (!isActionable || target === actionTargets[0]) {\n // Focus the first header cell and then let the key's default action take its course\n const f = !onFirstCell && !me.hideHeaders && me.focusCell({\n rowIndex : -1,\n column : 0\n }, {\n disableActionable : true\n });\n // If that was successful then reset the tabIndex\n if (f) {\n f.cell.tabIndex = -1;\n cell.tabIndex = 0;\n me._focusedCell = focusedCell;\n }\n // Otherwise, temporarily hide the grid body, and let TAB take effect from there\n else {\n bodyElement.style.display = 'none';\n me.requestAnimationFrame(() => bodyElement.style.display = '');\n }\n // So that Navigator#onKeyDown does not continue to preventDefault;\n return false;\n }\n }\n onSpace(keyEvent) {\n // SPACE scrolls, so disable that\n if (!this.focusedCell.isActionable) {\n keyEvent.preventDefault();\n }\n // Return false to tell keyMap that any other actions should be called\n return false;\n }\n //region Cell\n /**\n * Triggered when a user navigates to a grid cell\n * @event navigate\n * @param {Grid.view.Grid} grid The grid instance\n * @param {Grid.util.Location} last The previously focused location\n * @param {Grid.util.Location} location The new focused location\n * @param {Event} [event] The UI event which caused navigation.\n */\n /**\n * Grid Location which encapsulates the currently focused cell.\n * Set to focus a cell or use {@link #function-focusCell}.\n * @property {Grid.util.Location}\n */\n get focusedCell() {\n return this._focusedCell;\n }\n /**\n * This property is `true` if an element _within_ a cell is focused.\n * @property {Boolean}\n * @readonly\n */\n get isActionableLocation() {\n return this._focusedCell?.isActionable;\n }\n set focusedCell(cellSelector) {\n this.focusCell(cellSelector);\n }\n get focusedRecord() {\n return this._focusedCell?.record;\n }\n /**\n * CSS selector for currently focused cell. Format is \"[data-index=index] [data-column-id=columnId]\".\n * @property {String}\n * @readonly\n */\n get cellCSSSelector() {\n const cell = this._focusedCell;\n return cell ? `[data-index=${cell.rowIndex}] [data-column-id=${cell.columnId}]` : '';\n }\n afterHide() {\n super.afterHide(...arguments);\n // Do not scroll back to the last focused cell/last moused over cell upon reshow\n this.lastFocusedCell = null;\n }\n /**\n * Checks whether a cell is focused.\n * @param {LocationConfig|String|Number} cellSelector Cell selector { id: x, columnId: xx } or row id\n * @returns {Boolean} true if cell or row is focused, otherwise false\n */\n isFocused(cellSelector) {\n return Boolean(this._focusedCell?.equals(this.normalizeCellContext(cellSelector)));\n }\n get focusElement() {\n if (!this.isDestroying) {\n let focusCell;\n // If the store is not empty, focusedCell can return the closest cell\n if (this.store.count && this._focusedCell) {\n focusCell = this._focusedCell.target;\n }\n // If the store is empty, or we have had no focusedCell set, focus a column header.\n else {\n focusCell = this.normalizeCellContext({\n rowIndex : -1,\n columnIndex : this._focusedCell?.columnIndex || 0\n }).target;\n }\n const superFocusEl = super.focusElement;\n // If there's no cell, or the Container's focus element is before the cell\n // use the Container's focus element.\n // For example, we may have a top toolbar.\n if (superFocusEl && (!focusCell || focusCell.compareDocumentPosition(superFocusEl) === Node.DOCUMENT_POSITION_PRECEDING)) {\n return superFocusEl;\n }\n return focusCell;\n }\n }\n onInternalPaint({ firstPaint }) {\n const me = this;\n super.onInternalPaint?.(...arguments);\n // Make the grid initally tabbable into.\n // The first cell has to have the initial roving tabIndex set into it.\n const defaultFocus = this.normalizeCellContext({\n rowIndex : me.hideHeaders ? 0 : -1,\n column : me.hideHeaders ? 0 : me.columns.find(col => !col.hidden && col.isFocusable)\n });\n if (defaultFocus.cell) {\n defaultFocus._isDefaultFocus = true;\n me._focusedCell = defaultFocus;\n const { target } = defaultFocus;\n // If cell doesn't contain a focusable target, it needs tabIndex 0.\n if (target === defaultFocus.cell) {\n defaultFocus.cell.tabIndex = 0;\n }\n }\n }\n /**\n * This function handles focus moving into, or within the grid.\n * @param {Event} focusEvent\n * @private\n */\n onGridBodyFocusIn(focusEvent) {\n const\n me = this,\n { bodyElement } = me,\n lastFocusedCell = me.focusedCell,\n lastTarget = lastFocusedCell?.initialTarget || lastFocusedCell?.target,\n {\n target,\n relatedTarget\n } = focusEvent,\n targetCell = target.closest(me.focusableSelector),\n targetRow = target.closest('.b-grid-row');\n // If focus moved into a valid cell...\n // Only allows mouse left och right clicks (no other mouse buttons)\n if (targetCell &&\n (!GlobalEvents.currentMouseDown || GlobalEvents.isMouseDown(0) || GlobalEvents.isMouseDown(2))\n ) {\n const\n cellSelector = new Location(target),\n { cell } = cellSelector,\n lastCell = lastFocusedCell?.cell,\n actionTargets = cellSelector.actionTargets = me.findFocusables(targetCell),\n // Don't select on focus on a contained actionable location\n doSelect = (!me._fromFocusCell || me.selectOnFocus) && (target === cell || me._selectActionCell) && !target?._isRevertingFocus;\n // Asked for a row that no longer exists, location resolved to header but focus is not there.\n // Resolve by moving focus\n if (targetRow && cellSelector.rowIndex === -1) {\n cell.focus({ preventScroll : true });\n return;\n }\n if (target.matches(me.focusableSelector)) {\n if (me.disableActionable) {\n cellSelector._target = cell;\n }\n // Focus first focusable target if we are configured to.\n else if (actionTargets.length) {\n me._selectActionCell = GlobalEvents.currentMouseDown?.target === target;\n actionTargets[0].focus();\n delete me._selectActionCell;\n return;\n }\n }\n else {\n // If we have tabbed in and *NOT* mousedowned in, and hit a tabbable element which was not our\n // last focused cell, go back to last focused cell.\n if (lastFocusedCell?.target &&\n relatedTarget &&\n (!GlobalEvents.isMouseDown() || !bodyElement.contains(GlobalEvents.currentMouseDown?.target)) &&\n !bodyElement.contains(relatedTarget) &&\n !cellSelector.equals(lastFocusedCell)\n ) {\n lastTarget.focus();\n return;\n }\n cellSelector._target = target;\n }\n if (lastCell) {\n lastCell.classList.remove('b-focused');\n lastCell.tabIndex = -1;\n }\n if (cell) {\n cell.classList.add('b-focused');\n // Column may update DOM on cell focus for A11Y purposes.\n cellSelector.column.onCellFocus(cellSelector);\n // Only switch the cell to be tabbable if focus was not directed to an inner focusable.\n if (cell === target) {\n cell.tabIndex = 0;\n }\n // Moving back to a cell from a cell-contained Editor\n if (cell.contains(focusEvent.relatedTarget)) {\n if (lastTarget === target) {\n return;\n }\n }\n }\n //Remember\n me._focusedCell = cellSelector;\n me.onCellNavigate?.(me, lastFocusedCell, cellSelector, doSelect);\n me.trigger('navigate', { lastFocusedCell, focusedCell : cellSelector, event : focusEvent });\n }\n // Focus not moved into a valid cell, refocus last cell's target\n // if there was a previously focused cell.\n // Allow text selection inside a row expander body\n else if (!target.closest('.b-rowexpander-body')) {\n lastTarget?.focus({ preventScroll : true });\n }\n }\n findFocusables(cell) {\n const\n { focusableFinder } = this,\n result = [];\n focusableFinder.currentNode = this.focusableFinderCell = cell;\n for (let focusable = focusableFinder.nextNode(); focusable; focusable = focusableFinder.nextNode()) {\n result.push(focusable);\n }\n return result;\n }\n get focusableFinder() {\n const me = this;\n if (!me._focusableFinder) {\n me._focusableFinder = me.setupTreeWalker(me.bodyElement, DomHelper.NodeFilter.SHOW_ELEMENT, {\n acceptNode : containedFocusable.bind(me)\n });\n }\n return me._focusableFinder;\n }\n /**\n * Sets the passed record as the current focused record for keyboard navigation and selection purposes.\n * This API is used by Combo to activate items in its picker.\n * @param {Core.data.Model|Number|String} activeItem The record, or record index, or record id to highlight as the active (\"focused\") item.\n * @internal\n */\n restoreActiveItem(item = this._focusedCell) {\n if (this.rowManager.count) {\n // They sent a row number.\n if (!isNaN(item)) {\n item = this.store.getAt(item);\n }\n // Still not a record, treat it as a record ID.\n else if (!item.isModel) {\n item = this.store.getById(item);\n }\n return this.focusCell(item);\n }\n }\n /**\n * Navigates to a cell and/or its row (depending on selectionMode)\n * @param {LocationConfig} cellSelector Cell location descriptor\n * @param {Object} options Modifier options for how to deal with focusing the cell. These\n * are used as the {@link Core.helper.util.Scroller#function-scrollTo} options.\n * @param {BryntumScrollOptions|Boolean} [options.scroll=true] Pass `false` to not scroll the cell into view, or a\n * scroll options object to affect the scroll.\n * @returns {Grid.util.Location} A Location object representing the focused location.\n * @fires navigate\n */\n focusCell(cellSelector, options = defaultFocusOptions) {\n const\n me = this,\n { _focusedCell } = me,\n {\n scroll,\n disableActionable\n } = options,\n isDown = cellSelector === Location.DOWN,\n isUp = cellSelector === Location.UP;\n // If we're being asked to go to a nonexistent header row, revert focus outwards\n if (cellSelector?.rowIndex === -1 && me.hideHeaders) {\n me.revertFocus();\n return;\n }\n // Get a Grid Location.\n // If the cellSelector is a number, it is taken to be a \"relative\" location as defined\n // in the Location class eg Location.UP, and we move the current focus accordingly.\n cellSelector = typeof cellSelector === 'number' && _focusedCell?.isLocation ? _focusedCell.move(cellSelector) : me.normalizeCellContext(cellSelector);\n const doSelect = ('doSelect' in options) ? options.doSelect\n : (!cellSelector.isActionable || cellSelector.initialTarget === cellSelector.cell);\n if (cellSelector.equals(_focusedCell)) {\n // If configured as nested, revert focus outside if navigating by keyboard below last row or above headers\n if (me.isNested && (isDown || isUp)) {\n // The owner can supply a function to catch the focus. Used in rowExpander.\n if (!me.owner?.catchFocus?.({ source : me, navigationDirection : isDown ? 'down' : 'up' })) {\n me.revertFocus(true);\n }\n }\n else {\n // Request is a no-op, but it's still a navigate request which selection processing needs to know about\n me.onCellNavigate?.(me, _focusedCell, cellSelector, doSelect);\n }\n return _focusedCell;\n }\n const\n subGrid = me.getSubGridFromColumn(cellSelector.columnId),\n { cell } = cellSelector,\n testCell = cell || me.getCell({\n rowIndex : me.rowManager.topIndex,\n columnId : cellSelector.columnId\n }),\n subGridRect = Rectangle.from(subGrid.element),\n bodyRect = Rectangle.from(me.bodyElement),\n cellRect = Rectangle.from(testCell).moveTo(null, subGridRect.y);\n // No scrolling possible if we're moving to a column header\n if (scroll === false || cellSelector.rowIndex === -1) {\n options = Object.assign({}, options, disableScrolling);\n }\n else {\n options = Object.assign({}, options, scroll);\n // If the test cell is larger than the subGrid, in any dimension, disable scrolling\n if (cellRect.width > subGridRect.width || cellRect.height > bodyRect.height) {\n options.x = options.y = false;\n }\n // Else ask for the column to be scrolled into view\n else {\n options.column = cellSelector.columnId;\n }\n me.scrollRowIntoView(cellSelector.id, options);\n }\n // Clear hovering upon navigating so to not have hover style stick around when keyboard navigating away\n if (me._hoveredRow || me.hoveredCell) {\n me.hoveredCell = null;\n }\n // Disable auto stepping into the focused cell.\n me.disableActionable = disableActionable;\n // Go through select pathway upon focus\n me.selectOnFocus = doSelect;\n // To let onGridBodyFocusIn know where the focus originates\n me._fromFocusCell = true;\n // Focus the location's target, be it a cell, or an interior element.\n // The onFocusIn element in this module responds to this.\n cellSelector[disableActionable ? 'cell' : 'target']?.focus({ preventScroll : true });\n me.disableActionable = me.selectOnFocus = false;\n delete me._fromFocusCell;\n return cellSelector;\n }\n blurCell(cellSelector) {\n const me = this,\n cell = me.getCell(cellSelector);\n if (cell) {\n cell.classList.remove('b-focused');\n }\n }\n clearFocus(fullClear) {\n const me = this;\n if (me._focusedCell) {\n // set last to have focus return to previous cell when alt tabbing\n me.lastFocusedCell = fullClear ? null : me._focusedCell;\n me.blurCell(me._focusedCell);\n me._focusedCell = null;\n }\n }\n // For override-ability\n catchFocus() {}\n /**\n * Selects the cell before or after currently focused cell.\n * @private\n * @param next Specify true to select the next cell, false to select the previous\n * @returns {Object} Used cell selector\n */\n internalNextPrevCell(next = true) {\n const\n me = this,\n cellSelector = me._focusedCell;\n if (cellSelector) {\n return me.focusCell({\n id : cellSelector.id,\n columnId : me.columns.getAdjacentVisibleLeafColumn(cellSelector.column, next, true).id\n });\n }\n return null;\n }\n /**\n * Select the cell after the currently focused one.\n * @param {Event} [event] [DEPRECATED] unused param\n * @returns {Grid.util.Location} Cell selector\n */\n navigateRight() {\n if (arguments[0]?.fromKeyMap) {\n return this.focusCell(this.rtl ? Location.PREV_CELL : Location.NEXT_CELL);\n }\n if (arguments[0]) {\n VersionHelper.deprecate('Grid', '6.0.0', 'Event argument removed, unused param');\n }\n return this.internalNextPrevCell(!this.rtl);\n }\n /**\n * Select the cell before the currently focused one.\n * @param {Event} [event] [DEPRECATED] unused param\n * @returns {Grid.util.Location} Cell selector\n */\n navigateLeft() {\n if (arguments[0]?.fromKeyMap) {\n return this.focusCell(this.rtl ? Location.NEXT_CELL : Location.PREV_CELL);\n }\n if (arguments[0]) {\n VersionHelper.deprecate('Grid', '6.0.0', 'Event argument removed, unused param');\n }\n return this.internalNextPrevCell(Boolean(this.rtl));\n }\n //endregion\n //region Row\n /**\n * Selects the next or previous record in relation to the current selection. Scrolls into view if outside.\n * @private\n * @param next Next record (true) or previous (false)\n * @param {Boolean} [skipSpecialRows=true] True to not return specialRows like headers\n * @param {Boolean} [moveToHeader=true] True to allow focus to move to a header\n * @returns {Grid.util.Location|Boolean} Selection context for the focused row (& cell) or false if no selection was made\n */\n internalNextPrevRow(next, skipSpecialRows = true, moveToHeader = true) {\n const\n me = this,\n cell = me._focusedCell;\n if (!cell) return false;\n const record = me.store[`get${next ? 'Next' : 'Prev'}`](cell.id, false, skipSpecialRows);\n if (record) {\n return me.focusCell({\n id : record.id,\n columnId : cell.columnId,\n scroll : {\n x : false\n }\n });\n }\n else if (!next && moveToHeader && !cell.isColumnHeader) {\n this.clearFocus();\n this.getHeaderElement(cell.columnId).focus();\n }\n return false;\n }\n /**\n * Navigates to the cell below the currently focused cell\n * @param {Event} [event] [DEPRECATED] unused param\n * @returns {Grid.util.Location} Selector for focused row (& cell)\n */\n navigateDown() {\n if (arguments[0]?.fromKeyMap) {\n return this.focusCell(Location.DOWN);\n }\n if (arguments[0]) {\n VersionHelper.deprecate('Grid', '6.0.0', 'Event argument removed, unused param');\n }\n return this.internalNextPrevRow(true, false);\n }\n /**\n * Navigates to the cell above the currently focused cell\n * @param {Event} [event] [DEPRECATED] unused param\n * @returns {Grid.util.Location} Selector for focused row (& cell)\n */\n navigateUp() {\n if (arguments[0]?.fromKeyMap) {\n return this.focusCell(Location.UP);\n }\n if (arguments[0]) {\n VersionHelper.deprecate('Grid', '6.0.0', 'Event argument removed, unused param');\n }\n return this.internalNextPrevRow(false, false);\n }\n //endregion\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "import Base from '../../../Core/Base.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\n/**\n * @module Grid/view/mixin/GridResponsive\n */\n/**\n * Simplifies making grid responsive. Supply levels as {@link #config-responsiveLevels} config, default levels are:\n *
\n *
small
< 400px,\n *
medium
< 600px\n *
large
> 600px\n *
\n *\n * Columns can define configs per level to be resized etc:\n *\n * ```javascript\n * let grid = new Grid({\n * responsiveLevels: {\n * small: 300,\n * medium: 400,\n * large: '*' // everything above 400\n * },\n *\n * columns: [\n * {\n * field: 'name',\n * text: 'Name',\n * responsiveLevels: {\n * small: { hidden: true },\n * '*': { hidden: false } // all other levels\n * }\n * },\n * { field: 'xx', ... }\n * ]\n * });\n * ```\n *\n * It is also possible to give a [Grid state](#Grid/view/mixin/GridState) object instead of a level width, but in that\n * case the object must contain a `levelWidth` property:\n *\n * ```javascript\n * let grid = new Grid({\n * responsiveLevels: {\n * small: {\n * // Width is required\n * levelWidth : 400,\n * // Other configs are optional, see GridState for available options\n * rowHeight : 30\n * },\n * medium : {\n * levelWidth : 600,\n * rowHeight : 40\n * },\n * large: {\n * levelWidth : '*', // everything above 300\n * rowHeight : 45\n * }\n * }\n * });\n * ```\n * {@inlineexample Grid/view/mixin/Responsive.js}\n *\n * @demo Grid/responsive\n *\n * @mixin\n */\nexport default Target => class GridResponsive extends (Target || Base) {\n static get $name() {\n return 'GridResponsive';\n }\n static get defaultConfig() {\n return {\n /**\n * \"Break points\" for which responsive config to use for columns and css.\n * @config {Object}\n * @category Misc\n * @default { small : 400, medium : 600, large : '*' }\n */\n responsiveLevels : Object.freeze({\n small : 400,\n medium : 600,\n large : '*'\n })\n };\n }\n /**\n * Find closes bigger level, aka level we want to use.\n * @private\n * @category Misc\n */\n getClosestBiggerLevel(width) {\n const\n me = this,\n levels = Object.keys(ObjectHelper.assign({}, me.responsiveLevels));\n let useLevel = null,\n minDelta = 99995,\n biggestLevel = null;\n levels.forEach(level => {\n let levelSize = me.responsiveLevels[level];\n // responsiveLevels can contains config objects, in which case we should use width from it\n if (!['number', 'string'].includes(typeof levelSize)) {\n levelSize = levelSize.levelWidth;\n }\n if (levelSize === '*') {\n biggestLevel = level;\n }\n else if (width < levelSize) {\n const delta = levelSize - width;\n if (delta < minDelta) {\n minDelta = delta;\n useLevel = level;\n }\n }\n });\n return useLevel || biggestLevel;\n }\n /**\n * Get currently used responsive level (as string)\n * @property {String}\n * @readonly\n * @category Misc\n */\n get responsiveLevel() {\n return this.getClosestBiggerLevel(this.width);\n }\n /**\n * Check if resize lead to a new responsive level and take appropriate actions\n * @private\n * @fires responsive\n * @param width\n * @param oldWidth\n * @category Misc\n */\n updateResponsive(width, oldWidth) {\n const me = this,\n oldLevel = me.getClosestBiggerLevel(oldWidth),\n level = me.getClosestBiggerLevel(width);\n // On first render oldWidth is 0, in such case we need to apply level anyway\n if (oldWidth === 0 || oldLevel !== level) {\n // Level might be a state object\n const levelConfig = me.responsiveLevels[level];\n if (!['number', 'string'].includes(typeof levelConfig)) {\n me.applyState(levelConfig);\n }\n // check columns for responsive config\n me.columns.forEach(column => {\n const levels = column.responsiveLevels;\n if (levels) {\n if (levels[level]) {\n // using state to apply responsive config, since it already does what we want...\n column.applyState(levels[level]);\n }\n else if (levels['*']) {\n column.applyState(levels['*']);\n }\n }\n });\n me.element.classList.remove('b-responsive-' + oldLevel);\n me.element.classList.add('b-responsive-' + level);\n /**\n * Grid resize lead to a new responsive level being applied\n * @event responsive\n * @param {Grid.view.Grid} grid Grid that was resized\n * @param {String} level New responsive level (small, large, etc)\n * @param {Number} width New width in px\n * @param {String} oldLevel Old responsive level\n * @param {Number} oldWidth Old width in px\n */\n me.trigger('responsive', { level, width, oldLevel, oldWidth });\n }\n }\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "import Base from '../../../Core/Base.js';\nimport GlobalEvents from '../../../Core/GlobalEvents.js';\nimport ArrayHelper from '../../../Core/helper/ArrayHelper.js';\nimport EventHelper from '../../../Core/helper/EventHelper.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\nimport Collection from '../../../Core/util/Collection.js';\nimport ColumnStore from '../../data/ColumnStore.js';\nimport Location from '../../util/Location.js';\nimport '../../column/RowNumberColumn.js';\nconst\n validIdTypes = {\n string : 1,\n number : 1\n },\n isDataLoadAction = {\n dataset : 1,\n batch : 1\n };\n/**\n * @module Grid/view/mixin/GridSelection\n */\n/**\n * @typedef {Object} GridSelectionMode\n * @property {Boolean} selectionMode.cell Set to `true` to enable cell selection. This takes precedence over\n * row selection, but rows can still be selected programmatically or with checkbox or RowNumber selection.\n * Required for `column` selection\n * @property {Boolean} selectionMode.multiSelect Allow multiple selection with ctrl and shift+click or with\n * `checkbox` selection. Required for `dragSelect` and `column` selection\n * @property {Boolean|CheckColumnConfig} selectionMode.checkbox Set to `true` to add a checkbox selection column to\n * the grid, or pass a config object for the {@link Grid.column.CheckColumn}.\n *\n * *Note that the checkbox selection column should not be configured with a `field`, since it is linked to grid\n * selection and not to record data.*\n * @property {Number|String} selectionMode.checkboxIndex Positions the checkbox column at the provided index or to\n * the right of a provided column id. Defaults to 0 or to the right of an included `RowNumberColumn`\n * @property {Boolean} selectionMode.checkboxOnly Select rows only when clicking in the checkbox column. Requires\n * cell selection config to be `false` and checkbox to be set to `true`. This setting was previously named\n * `rowCheckboxSelection`\n * @property {Boolean} selectionMode.showCheckAll Set to `true` to add a checkbox to the selection column header to\n * select/deselect all rows. Requires checkbox to also be set to `true`\n * @property {Boolean} selectionMode.deselectFilteredOutRecords Set to `true` to deselect records when they are\n * filtered out\n * @property {Boolean|String} selectionMode.includeChildren Set to `true` to also select/deselect child nodes\n * when a parent node is selected by toggling the checkbox. Set to `always` to always select/deselect child\n * nodes.\n * @property {Boolean|'all'|'some'} selectionMode.includeParents Set to `all` or `true` to auto select\n * parent if all its children gets selected. If one gets deselected, the parent will also be deselected. Set to\n * 'some' to select parent if one of its children gets selected. The parent will be deselected if all children\n * gets deselected.\n * @property {Boolean} selectionMode.preserveSelectionOnPageChange In `row` selection mode, this flag controls\n * whether the Grid should preserve its selection when loading a new page of a paged data store. Defaults to `false`\n * @property {Boolean} selectionMode.preserveSelectionOnDatasetChange In `row` selection mode, this flag\n * controls whether the Grid should preserve its selection of cells / rows when loading a new dataset\n * (assuming the selected records are included in the newly loaded dataset)\n * @property {Boolean} selectionMode.deselectOnClick Toggles whether the Grid should deselect a selected row or\n * cell when clicking it\n * @property {Boolean} selectionMode.dragSelect Set to `true` to enable multiple selection by dragging.\n * Requires `multiSelect` to also be set to `true`. Also requires the {@link Grid.feature.RowReorder} feature\n * to be set to {@link Grid.feature.RowReorder#config-gripOnly}.\n * @property {Boolean} selectionMode.selectOnKeyboardNavigation Set to `false` to disable auto-selection by keyboard\n * navigation. This will activate the `select` keyboard shortcut.\n * @property {Boolean} selectionMode.column Set to `true` to be able to select whole columns of cells by clicking the header.\n * Requires cell to be set to `true`\n * @property {Boolean|RowNumberColumnConfig} selectionMode.rowNumber Set to `true` or a config object to add a\n * `RowNumberColumn` which, when clicked, selects the row.\n * @property {Boolean} selectionMode.selectRecordOnCell Set to `false` not to include the record in the\n * `selectedRecords` array when one of the record row's cells is selected.\n */\n/**\n * A mixin for Grid that handles row and cell selection. See {@link #config-selectionMode} for details on how to control\n * what should be selected (rows or cells)\n *\n * ```javascript\n * // select a row\n * grid.selectedRow = 7;\n *\n * // select a cell\n * grid.selectedCell = { id: 5, columnId: 'column1' }\n *\n * // select a record\n * grid.selectedRecord = grid.store.last;\n *\n * // select multiple records by ids\n * grid.selectedRecords = [1, 2, 4, 6]\n * ```\n *\n * @mixin\n */\nexport default Target => class GridSelection extends (Target || Base) {\n static get $name() {\n return 'GridSelection';\n }\n static configurable = {\n /**\n * The selection settings, where you can set these boolean flags to control what is selected. Options below:\n * @prp {GridSelectionMode} selectionMode\n * @default\n * @category Selection\n */\n selectionMode : {\n cell : false,\n multiSelect : true,\n checkboxOnly : false,\n checkbox : false,\n checkboxPosition : null,\n showCheckAll : false,\n deselectFilteredOutRecords : false,\n includeChildren : false,\n includeParents : false,\n preserveSelectionOnPageChange : false,\n preserveSelectionOnDatasetChange : true,\n deselectOnClick : false,\n dragSelect : false,\n selectOnKeyboardNavigation : true,\n column : false,\n rowNumber : false,\n selectRecordOnCell : true\n },\n keyMap : {\n 'Shift+ArrowUp' : 'extendSelectionUp',\n 'Shift+ArrowDown' : 'extendSelectionDown',\n 'Shift+ArrowLeft' : 'extendSelectionLeft',\n 'Shift+ArrowRight' : 'extendSelectionRight',\n ' ' : { handler : 'toggleSelection', weight : 10 }\n },\n selectedRecordCollection : {},\n selectionDisabled : false\n };\n construct(config) {\n this._selectedCells = [];\n this._selectedRows = [];\n super.construct(config);\n if (config?.selectedRecords) {\n this.selectedRecords = config.selectedRecords;\n }\n }\n //region Init\n getDefaultGridSelection(clas) {\n if (clas.$name === 'GridSelection') {\n return clas.configurable.selectionMode;\n }\n else if (clas.superclass) {\n return this.getDefaultGridSelection(clas.superclass);\n }\n }\n changeSelectionMode(mode) {\n const me = this;\n // If changing the selectionMode config object after creation\n if (me.selectionMode) {\n ObjectHelper.assign(me.selectionMode, mode);\n return me.selectionMode;\n }\n me.$defaultGridSelection = me.getDefaultGridSelection(me.constructor);\n // Wraps changeSelectionMode object in a proxy to monitor property changes.\n return new Proxy(mode, {\n set(obj, prop, value) {\n const old = ObjectHelper.assign({}, obj);\n obj[prop] = value;\n // Calls selectionMode's update method on property change\n me.updateSelectionMode(obj, old);\n return true;\n }\n });\n }\n /**\n * The selectionMode configuration has been changed.\n * @event selectionModeChange\n * @param {Object} selectionMode The new {@link #config-selectionMode}\n */\n // Will be called if selectionMode config object changes or if one of its properties changes\n updateSelectionMode(mode, oldMode = this.$defaultGridSelection) {\n const\n me = this,\n {\n columns,\n checkboxSelectionColumn\n } = me,\n changed = {},\n { rowReorder } = me.features;\n for (const property in mode) {\n if (mode[property] != oldMode[property]) {\n changed[property] = mode[property];\n }\n }\n // Backwards compatibility. Remove on 7.X?\n if (mode.rowCheckboxSelection && !mode.checkboxOnly) {\n mode.checkboxOnly = true;\n delete mode.rowCheckboxSelection;\n }\n // If column config has been activated, activate cell and multiSelect\n if (changed.column) {\n mode.cell = true;\n mode.multiSelect = true;\n }\n // If cell config has been activated, deactivate checkboxOnly\n if (changed.cell) {\n mode.checkboxOnly = false;\n }\n // If cell config has been deactivated, deactivate column\n if (changed.cell === false) {\n mode.column = false;\n }\n // If checkboxOnly config has been activated, activate checkbox and deactivate cell\n if (changed.checkboxOnly) {\n if (!mode.checkbox) {\n // checkbox can be a CheckboxColumnConfig\n mode.checkbox = true;\n }\n mode.cell = false;\n }\n // If checkbox config has been deactivated, deactivate checkboxOnly and showCheckAll\n if (changed.checkbox === false) {\n changed.checkboxOnly = false;\n changed.showCheckAll = false;\n }\n // If showCheckAll has been activated, activate checkbox and multiselect\n if (changed.showCheckAll) {\n mode.checkbox = mode.checkbox || true;\n mode.multiSelect = true;\n }\n // If includeChildren config has been activated, activate multiselect\n if (changed.includeChildren || changed.includeParents) {\n mode.multiSelect = true;\n }\n // If multiSelect has been deactivated, deactivate column, showCheckAll, dragSelect and includeChildren\n if (changed.multiSelect === false) {\n mode.column = mode.showCheckAll = mode.dragSelect = mode.includeChildren = mode.includeParents = false;\n }\n if (changed.dragSelect) {\n if (rowReorder?.enabled && rowReorder.gripOnly !== true) {\n rowReorder.showGrip = rowReorder.gripOnly = true;\n }\n mode.multiSelect = true;\n me._selectionListenersDetachers = {};\n }\n if (changed.dragSelect === false && me._selectionListenersDetachers) {\n me._selectionListenersDetachers.selectiondrag?.();\n delete me._selectionListenersDetachers.selectiondrag;\n }\n // Deselect all when switching between row or cell selection mode\n // Deselect all when switching from multiselect to singleselect\n // Deselect all when changing deselectFilteredOutRecords\n if (oldMode && (\n changed.cell !== undefined ||\n changed.deselectFilteredOutRecords !== undefined ||\n changed.multiSelect !== undefined\n )) {\n me.deselectAll();\n }\n // Row number selection\n if (changed.rowNumber) {\n if (!columns.findRecord('type', 'rownumber')) {\n columns.insert(0, {\n ...(typeof mode.rowNumber == 'object' ? mode.rowNumber : {}),\n type : 'rownumber'\n });\n me._selectionAddedRowNumberColumn = true;\n }\n }\n else if (changed.rowNumber === false && me._selectionAddedRowNumberColumn) {\n columns.remove(columns.findRecord('type', 'rownumber'));\n delete me._selectionAddedRowNumberColumn;\n }\n // Add or remove checkbox column\n if (mode.checkbox !== oldMode?.checkbox ||\n (mode.checkbox && (mode.showCheckAll !== oldMode?.showCheckAll))\n ) {\n // See to it that were done configuring when initCheckboxSelection is called.\n if (me.isConfiguring) {\n me.shouldInitCheckboxSelection = true;\n }\n else {\n if (oldMode) {\n me.deselectAll();\n }\n me.initCheckboxSelection();\n }\n }\n // If only checkboxIndex has changed\n if (oldMode && mode.checkbox && oldMode.checkbox &&\n mode.checkboxIndex !== oldMode.checkboxIndex && checkboxSelectionColumn) {\n checkboxSelectionColumn.parent.insertChild(checkboxSelectionColumn, columns.getAt(me.checkboxSelectionColumnInsertIndex));\n }\n me.trigger('selectionModeChange', ObjectHelper.clone(mode));\n me.afterSelectionModeChange(mode);\n }\n afterConfigure() {\n const me = this;\n // See to it that were done configuring when initCheckboxSelection is called.\n if (me.shouldInitCheckboxSelection) {\n me.shouldInitCheckboxSelection = false;\n me.initCheckboxSelection();\n }\n me.scrollManager.ion({\n scroll : ({ event, deltaY }) => {\n if (deltaY !== 0) {\n me.onSelectionDrag(event);\n }\n }\n });\n super.afterConfigure();\n }\n initCheckboxSelection() {\n const\n me = this,\n {\n selectionMode,\n columns,\n checkboxSelectionColumn\n } = me,\n { checkbox } = selectionMode;\n // Always remove checkbox column when config changes\n if (checkboxSelectionColumn) {\n // Need to remove this handle because GridBase restores it if it exists.\n me.checkboxSelectionColumn = null;\n columns.remove(checkboxSelectionColumn);\n checkboxSelectionColumn.destroy();\n }\n // Inject our CheckColumn into the ColumnStore\n if (checkbox) {\n const\n checkColumnClass = ColumnStore.getColumnClass('check'),\n config = checkbox === true ? null : checkbox;\n if (!checkColumnClass) {\n throw new Error('CheckColumn must be imported for checkbox selection mode to work');\n }\n const col = me.checkboxSelectionColumn = new checkColumnClass(ObjectHelper.assign({\n id : `${me.id}-selection-column`,\n width : '4em',\n minWidth : '4em', // Needed because 4em is below Column's default minWidth\n field : null,\n sortable : false,\n filterable : false,\n hideable : false,\n cellCls : 'b-checkbox-selection',\n // Always put the checkcolumn in the first region\n region : me.items?.[0]?.region,\n showCheckAll : selectionMode.showCheckAll,\n draggable : false,\n resizable : false,\n widgets : [{\n type : 'checkbox',\n valueProperty : 'checked',\n ariaLabel : 'L{Checkbox.toggleRowSelect}'\n }]\n }, config), columns, { isSelectionColumn : true });\n col.meta.depth = 0;\n // This is assigned in Column.js for normal columns\n col._grid = me;\n // Override renderer to inject the rendered record's selected status into the value\n const checkboxRenderer = col.renderer;\n col.setData('renderer', renderData => {\n renderData.value = me.isSelected(renderData.record);\n checkboxRenderer.call(col, renderData);\n });\n col.ion({\n toggle : 'onCheckChange',\n toggleAll : 'onCheckAllChange',\n thisObj : me\n });\n columns.insert(me.checkboxSelectionColumnInsertIndex, col);\n }\n }\n // Used internally to get the index where to insert checkboxselectioncolumn\n // Default : Insert the checkbox after any rownumber column. If not there, -1 means in at 0.\n // If provided, insert at provided index\n get checkboxSelectionColumnInsertIndex() {\n const\n { columns } = this;\n let { checkboxIndex } = this.selectionMode;\n if (!checkboxIndex) {\n checkboxIndex = columns.indexOf(columns.findRecord('type', 'rownumber')) + 1;\n }\n else if (typeof checkboxIndex === 'string') {\n checkboxIndex = columns.indexOf(columns.getById(checkboxIndex));\n }\n return checkboxIndex;\n }\n //endregion\n // region Events docs & Hooks\n /**\n * The selection has been changed.\n * @event selectionChange\n * @param {'select'|'deselect'} action `'select'`/`'deselect'`\n * @param {'row'|'cell'} mode `'row'`/`'cell'`\n * @param {Grid.view.Grid} source\n * @param {Core.data.Model[]} deselected The records deselected in this operation.\n * @param {Core.data.Model[]} selected The records selected in this operation.\n * @param {Core.data.Model[]} selection The records in the new selection.\n * @param {Grid.util.Location[]} deselectedCells The cells deselected in this operation.\n * @param {Grid.util.Location[]} selectedCells The cells selected in this operation.\n * @param {Grid.util.Location[]} cellSelection The cells in the new selection.\n */\n /**\n * Fires before the selection changes. Returning `false` from a listener prevents the change\n * @event beforeSelectionChange\n * @preventable\n * @param {String} action `'select'`/`'deselect'`\n * @param {'row'|'cell'} mode `'row'`/`'cell'`\n * @param {Grid.view.Grid} source\n * @param {Core.data.Model[]} deselected The records to be deselected in this operation.\n * @param {Core.data.Model[]} selected The records to be selected in this operation.\n * @param {Core.data.Model[]} selection The records in the current selection, before applying `selected` and\n * `deselected`\n * @param {Grid.util.Location[]} deselectedCells The cells to be deselected in this operation.\n * @param {Grid.util.Location[]} selectedCells The cells to be selected in this operation.\n * @param {Grid.util.Location[]} cellSelection The cells in the current selection, before applying `selectedCells`\n * and `deselectedCells`\n */\n afterSelectionChange() {}\n afterSelectionModeChange() {}\n // endregion\n // region selectedRecordCollection\n changeSelectedRecordCollection(collection) {\n if (collection?.isCollection) {\n if (!collection.owner) {\n collection.owner = this;\n }\n return collection;\n }\n return Collection.new(collection, { owner : this });\n }\n updateSelectedRecordCollection(collection) {\n collection.ion({\n change : 'onSelectedRecordCollectionChange',\n thisObj : this\n });\n }\n onSelectedRecordCollectionChange({ added = [], removed }) {\n if (this.selectedRecordCollection._fromSelection !== this) {\n // Filter out unselectable rows\n added = added.filter(row => this.isSelectable(row));\n this.performSelection({\n selectedCells : [],\n deselectedCells : [],\n selectedRecords : added,\n deselectedRecords : removed\n });\n }\n }\n changeSelectedRecordCollectionSilent(fn) {\n this.selectedRecordCollection._fromSelection = this;\n const result = fn(this.selectedRecordCollection);\n delete this.selectedRecordCollection._fromSelection;\n return result;\n }\n // endregion\n // region Store\n bindStore(store) {\n this.detachListeners('selectionStoreFilter');\n store.ion({\n name : 'selectionStoreFilter',\n filter : 'onStoreFilter',\n thisObj : this\n });\n super.bindStore?.(store);\n }\n unbindStore(oldStore) {\n this.detachListeners('selectionStoreFilter');\n super.unbindStore(oldStore);\n }\n onStoreFilter({ source }) {\n const\n me = this,\n deselect = [];\n // Look for selected records which is not in the store\n for (const selectedRecord of me.selectedRows) {\n if (!source.includes(selectedRecord)) {\n // Should be deselected\n deselect.push(selectedRecord);\n }\n }\n // Deselects\n const selectionChange = me.prepareSelection(me.selectionMode.deselectFilteredOutRecords ? deselect : []);\n // If cell mode, always deselect cells\n if (me.isCellSelectionMode) {\n const { deselectedCells } = me.prepareSelection(me.getSelectedCellsForRecords(deselect));\n if (deselectedCells?.length) {\n selectionChange.deselectedCells = (selectionChange.deselectedCells || []).concat(deselectedCells);\n }\n }\n if (selectionChange.deselectedCells.length || selectionChange.deselectedRecords.length) {\n // Trigger deselect event\n me.performSelection(selectionChange, false);\n me.updateCheckboxHeader();\n }\n }\n /**\n * Triggered from Grid view when the id of a record has changed.\n * Update the collection indices.\n * @private\n * @category Selection\n */\n onStoreRecordIdChange({ record, oldValue }) {\n // If the next mixin up the inheritance chain has an implementation, call it\n super.onStoreRecordIdChange?.(...arguments);\n const item = this.selectedRecordCollection.get(oldValue);\n // having the record registered by the oldValue means we need to rebuild indices\n if (item === record) {\n this.selectedRecordCollection.rebuildIndices();\n }\n }\n /**\n * Triggered from Grid view when records get removed from the store.\n * Deselects all records which have been removed.\n * @private\n * @category Selection\n */\n onStoreRemove(event) {\n // If the next mixin up the inheritance chain has an implementation, call it\n super.onStoreRemove?.(event);\n if (!event.isCollapse) {\n const\n me = this,\n deselectedRecords = event.records.filter(rec => this.isSelected(rec));\n if (deselectedRecords.length) {\n const selectionChange = me.prepareSelection(deselectedRecords);\n // If cell selection mode, also deselect cells for removed records\n // No need to update ui as grid will refresh\n if (me.isCellSelectionMode) {\n const { deselectedCells } = me.prepareSelection(me.getSelectedCellsForRecords(deselectedRecords));\n if (deselectedCells?.length) {\n selectionChange.deselectedCells = (selectionChange.deselectedCells || []).concat(deselectedCells);\n }\n }\n me.performSelection(selectionChange);\n }\n }\n }\n /**\n * Triggered from Grid view when the store changes. This might happen\n * if store events are batched and then resumed.\n * Deselects all records which have been removed.\n * @private\n * @category Selection\n */\n onStoreDataChange({ action, source : store }) {\n const\n me = this,\n { selectionMode } = me;\n let selectionChange;\n // If the next mixin up the inheritance chain has an implementation, call it\n super.onStoreDataChange?.(...arguments);\n if (action === 'pageLoad') {\n // on page load, clear selection if not `preserverSelectionOnPageChange` is true\n if (!selectionMode.preserveSelectionOnPageChange) {\n selectionChange = me.prepareSelection(null, null, true);\n }\n // For paged grid scenario, we need to update the check-all checkbox in the checkbox column header\n // as we move between store pages\n me.updateCheckboxHeader();\n }\n else if (isDataLoadAction[action]) {\n const deselect = [];\n if (selectionMode.preserveSelectionOnDatasetChange === false) {\n selectionChange = me.prepareSelection(null, null, true);\n }\n else {\n // Update selected records\n deselect.push(...me.changeSelectedRecordCollectionSilent(c => c.match(store.storage)));\n for (const selectedCell of me._selectedCells) {\n if (!store.getById(selectedCell.id)) {\n deselect.push(selectedCell);\n }\n }\n selectionChange = me.prepareSelection(deselect);\n }\n }\n if (selectionChange && (selectionChange.deselectAll || selectionChange.deselectedCells.length || selectionChange.deselectedRecords.length || selectionChange.selectedCells.length || selectionChange.selectedRecords.length)) {\n me.performSelection(selectionChange, false);\n me.updateCheckboxHeader();\n }\n }\n /**\n * Triggered from Grid view when all records get removed from the store.\n * Deselects all records.\n * @private\n * @category Selection\n */\n onStoreRemoveAll() {\n // If the next mixin up the inheritance chain has an implementation, call it\n super.onStoreRemoveAll?.();\n this.performSelection(this.prepareSelection(null, null, true), false);\n }\n //endregion\n // region Checkbox selection\n onCheckChange({ checked, record, checkbox }) {\n const\n me = this,\n { multiSelect } = me.selectionMode,\n deselectAll = !multiSelect && checked,\n deselect = !deselectAll && !checked ? [record] : null,\n select = checked ? [record] : null;\n me._isCheckboxSelecting = true;\n // Saves previously non-shift checked checkbox\n if (checked && !GlobalEvents.shiftKeyDown) {\n me._lastSelectionChecked = record;\n }\n // Shift range select\n if (checked && multiSelect && me._lastSelectionChecked && GlobalEvents.shiftKeyDown) {\n me.performSelection(me.internalSelectRange(me._lastSelectionChecked, record, true));\n }\n // Regular selection, updates UI and triggers events\n else if (me.performSelection(me.prepareSelection(deselect, select, deselectAll, true)) === false) {\n // Need to manually reset checkbox in case outside world returns false from beforeSelectionChange\n checkbox.checked = !checkbox.checked;\n }\n me._isCheckboxSelecting = false;\n }\n // Update header checkbox\n updateCheckboxHeader() {\n const { selectionMode, checkboxSelectionColumn, store } = this;\n if (!this._isCheckAllSelecting && selectionMode.checkbox && selectionMode.showCheckAll && checkboxSelectionColumn?.headerCheckbox) {\n const allSelected = store.count && !store.some(record => this.isSelectable(record) && !this.isSelected(record));\n if (checkboxSelectionColumn.headerCheckbox.checked !== allSelected) {\n checkboxSelectionColumn.suspendEvents();\n checkboxSelectionColumn.headerCheckbox.checked = allSelected;\n checkboxSelectionColumn.resumeEvents();\n }\n }\n }\n onCheckAllChange({ checked }) {\n const me = this;\n me._isCheckboxSelecting = me._isCheckAllSelecting = true;\n me[checked ? 'selectAll' : 'deselectAll'](me.store.isPaged && me.selectionMode.preserveSelectionOnPageChange);\n me._isCheckboxSelecting = me._isCheckAllSelecting = false;\n }\n //endregion\n // region Selection drag\n // Hook for SalesForce-code to overwrite\n get selectionDragMouseEventListenerElement() {\n return globalThis;\n }\n // Creates new selection range on mouseover. Listener is initiated on mousedown\n onSelectionDrag(event) {\n const\n me = this,\n isScroll = event.type === 'scroll',\n { _selectionStartCell, lastPointerMoveEvent } = me;\n if (isScroll && !me._isSelectionDragging) {\n return;\n }\n // If we're here but there's no mouse button down for some reason, cancel\n if (!GlobalEvents.isMouseDown()) {\n me.onSelectionEnd();\n }\n // No start cell, ignore\n if (!_selectionStartCell) {\n return;\n }\n const\n { items, _lastSelectionDragRegion } = me;\n let cellData, region, cellSelector;\n if (isScroll && lastPointerMoveEvent) {\n const\n el = document.elementFromPoint(lastPointerMoveEvent.clientX, lastPointerMoveEvent.clientY),\n cellEl = el?.closest('.b-grid-cell');\n if (cellEl) {\n region = me._lastSelectionDragRegion;\n cellSelector = me.normalizeCellContext({\n columnId : cellEl.dataset.columnId,\n record : me.store.getById(cellEl.parentElement.dataset.id)\n });\n }\n }\n else {\n cellData = me.getCellDataFromEvent(event, true);\n region = cellData?.column.region;\n cellSelector = cellData?.cellSelector && me.normalizeCellContext(cellData.cellSelector);\n if (cellData) {\n me.lastPointerMoveEvent = event;\n }\n }\n // If mouse enters new cell\n if (cellSelector && !cellSelector.equals(me._lastSelectionDragCell, true)) {\n if (!me._isSelectionDragging) {\n // When starting selection, start monitoring for near edge scrolling\n me.enableScrollingCloseToEdges(items);\n }\n // If we start a new selection drag on already selected cell, the default (de)selection is delayed until\n // mouseup. If we detect that a drag range is indeed what the user intends, deselect immediately\n if (me._clearSelectionOnSelectionDrag && !_selectionStartCell.equals(cellSelector, true)) {\n me.deselectAll();\n delete me._clearSelectionOnSelectionDrag;\n }\n // A grid with multiple regions need to handle selection and scrolling moving between regions\n if (_lastSelectionDragRegion && region !== _lastSelectionDragRegion) {\n const\n leavingSubGrid = me.subGrids[_lastSelectionDragRegion],\n enteringSubGrid = me.subGrids[region],\n leavingScrollable = leavingSubGrid.scrollable,\n enteringScrollable = enteringSubGrid.scrollable,\n goingForward = items.indexOf(leavingSubGrid) - items.indexOf(enteringSubGrid) < 0;\n // Immediately scrolls an entering subgrid to either start or end depending on direction\n enteringScrollable.x = goingForward ? 0 : enteringScrollable.maxX;\n // Waiting for grid to scroll to start/end (handled by scrollmanager)\n if (goingForward ? leavingScrollable.x < leavingScrollable.maxX - 1 : leavingScrollable.x > 1) {\n return;\n }\n // Forces the previous subgrid to stop reserving horizontal scroll\n const activeHorizontalScroll = me.scrollManager._activeScroll?.horizontal;\n if (activeHorizontalScroll && activeHorizontalScroll.element !== enteringScrollable.element) {\n activeHorizontalScroll.stopScroll(true);\n }\n }\n me._lastSelectionDragRegion = region;\n me._lastSelectionDragCell = cellSelector;\n me._isSelectionDragging = true;\n const selectionChange = me._lastSelectionDragChange = me.internalSelectRange(_selectionStartCell,\n cellSelector, me.isRowNumberSelecting(cellSelector) || me.isRowNumberSelecting(_selectionStartCell));\n // As selection at this point is UI only, we don't want to affect already selected records\n selectionChange.deselectedCells = selectionChange.deselectedCells.filter(cell => !me.isCellSelected(cell));\n selectionChange.deselectedRecords = selectionChange.deselectedRecords.filter(record => !me.isSelected(record));\n // Clear any hovered cell\n me.hoveredCell = null;\n // selectionChange event fires onSelectionEnd\n me.refreshGridSelectionUI(selectionChange);\n /**\n * Fires while drag selecting. UI will update with current range, but the cells will not be selected until\n * mouse up. This event can be listened for to perform actions while drag selecting.\n * @event dragSelecting\n * @param {Grid.view.Grid} source\n * @param {Core.data.Model[]|Object} selectedCells The cells that is currently being dragged over\n */\n me.trigger('dragSelecting', selectionChange);\n }\n }\n // Tells onSelectionDrag that it's not dragging any longer\n onSelectionEnd() {\n const\n me = this,\n lastChange = me._lastSelectionDragChange;\n if (me._isSelectionDragging && !me._selectionStartCell.equals(me._lastSelectionDragCell, true) && lastChange) {\n me.performSelection(lastChange, false);\n }\n me.disableScrollingCloseToEdges(me.items);\n me._isSelectionDragging = false;\n me._lastSelectionDragChange = me._lastSelectionDragCell = me._lastSelectionDragRegion = null;\n // Remove listeners\n me._selectionListenersDetachers.selectiondrag?.();\n delete me._selectionListenersDetachers.selectiondrag;\n }\n // endregion\n // region Column selection\n onHandleElementClick(event) {\n const me = this;\n // If rownumber column is clicked, toggle selectAll\n if (me.selectionMode.rowNumber && event.target.closest('.b-rownumber-header')) {\n event.handled = true;\n if (me.store.count && me.store.some(record => !me.isSelected(record))) {\n me.selectAll();\n }\n else {\n me.deselectAll();\n }\n }\n // In column selection mode, and we clicked a header, the column should be selected\n else if (me.selectionMode.column && event.target.closest('.b-grid-header')) {\n event.handled = true;\n me.selectColumn(event, event.ctrlKey);\n }\n super.onHandleElementClick(event);\n }\n selectColumn(event, addToSelection = false) {\n const\n me = this,\n { store } = me,\n { columnId } = me.getHeaderDataFromEvent(event);\n // internalSelectRange uses this to remember last range, we have no need for that here\n me._shiftSelectRange = null;\n if (!event.shiftKey) {\n me._shiftSelectColumn = columnId;\n }\n const\n fromColumnId = (event.shiftKey && me._shiftSelectColumn) || columnId,\n selectionChange = me.internalSelectRange(\n me.normalizeCellContext({ id : store.first.id, columnId : fromColumnId }),\n me.normalizeCellContext({ id : store.last.id, columnId })\n );\n // If we are selecting a column that is already selected, deselect it\n if (addToSelection && !selectionChange.selectedCells.some(sc => !me.isCellSelected(sc))) {\n selectionChange.deselectedCells = selectionChange.selectedCells;\n selectionChange.selectedCells = [];\n }\n if (!addToSelection) {\n selectionChange.deselectedCells = me._selectedCells;\n }\n me.cleanSelectionChange(selectionChange);\n me.performSelection(selectionChange);\n }\n // endregion\n // region Public row/record selection\n /**\n * Checks whether a row is selected. Will not check if any of a row's cells are selected.\n * @param {LocationConfig|String|Number|Core.data.Model} cellSelectorOrId Cell selector { id: x, column: xx } or row\n * id, or record\n * @returns {Boolean} true if row is selected, otherwise false\n * @category Selection\n */\n isSelected(cellSelectorOrId) {\n // Not a selected cell, check recoWds\n if (cellSelectorOrId?.id) {\n cellSelectorOrId = cellSelectorOrId.id;\n }\n if (validIdTypes[typeof cellSelectorOrId]) {\n return this.selectedRows.some(rec => rec.id === cellSelectorOrId);\n }\n return false;\n }\n /**\n * Checks whether a cell is selected.\n * @param {LocationConfig|Location} cellSelector Cell selector { id: x, column: xx }\n * @param {Boolean} includeRow to also check if row is selected\n * @returns {Boolean} true if cell is selected, otherwise false\n * @category Selection\n */\n isCellSelected(cellSelector, includeRow) {\n cellSelector = this.normalizeCellContext(cellSelector);\n return (this.isCellSelectionMode && this._selectedCells.some(cell => cellSelector.equals(cell, true))) ||\n (includeRow && this.isSelected(cellSelector));\n }\n /**\n * Checks whether a cell or row can be selected.\n * @param {Core.data.Model|LocationConfig|String|Number} recordCellOrId Record or cell or record id\n * @returns {Boolean} true if cell or row can be selected, otherwise false\n * @category Selection\n */\n isSelectable(recordCellOrId) {\n return this.normalizeCellContext({ id : recordCellOrId.id || recordCellOrId }).isSelectable;\n }\n /**\n * The last selected record. Set to select a row or use Grid#selectRow. Set to null to\n * deselect all\n * @property {Core.data.Model}\n * @category Selection\n */\n get selectedRecord() {\n return this.selectedRecords[this.selectedRecords.length - 1] || null;\n }\n set selectedRecord(record) {\n this.selectRow({ record });\n }\n /**\n * Selected records.\n *\n * If {@link #config-selectionMode deselectFilteredOutRecords} is `false` (default) this will include selected\n * records which has been filtered out.\n *\n * If {@link #config-selectionMode preserveSelectionOnPageChange} is `true` (defaults to `false`) this will include\n * selected records on all pages.\n *\n * If {@link #config-selectionMode selectRecordOnCell} is `true` (default) this will include any record which has at\n * least one cell selected.\n *\n * Can be set as array of ids:\n *\n * ```javascript\n * grid.selectedRecords = [1, 2, 4, 6]\n * ```\n *\n * @property {Core.data.Model[]}\n * @accepts {Core.data.Model[]|Number[]}\n * @category Selection\n */\n get selectedRecords() {\n return this.selectedRecordCollection.values;\n }\n set selectedRecords(selectedRecords) {\n this.selectRows(selectedRecords);\n }\n /**\n * Selected records. Records selected via cell selection is excluded.\n *\n * If {@link #config-selectionMode deselectFilteredOutRecords} is `false` (default) this will include selected\n * records which has been filtered out.\n *\n * If {@link #config-selectionMode preserveSelectionOnPageChange} is `true` (defaults to `false`) this will include\n * selected records on all pages.\n *\n * if {@link #config-selectionMode selectRecordOnCell} is `false` this will return same records as\n * {@link #property-selectedRecords}.\n *\n * Can be set as array of ids:\n *\n * ```javascript\n * grid.selectedRecords = [1, 2, 4, 6]\n * ```\n *\n * @property {Core.data.Model[]}\n * @accepts {Core.data.Model[]|Number[]}\n * @category Selection\n */\n get selectedRows() {\n return [...this._selectedRows];\n }\n set selectedRows(selectedRows) {\n this.selectRows(selectedRows);\n }\n /**\n * Removes and adds records to/from the selection at the same time. Analogous\n * to the `Array` `splice` method.\n *\n * Note that if items that are specified for removal are also in the `toAdd` array,\n * then those items are *not* removed then appended. They remain in the same position\n * relative to all remaining items.\n *\n * @param {Number} index Index at which to remove a block of items. Only valid if the\n * second, `toRemove` argument is a number.\n * @param {Object[]|Number} toRemove Either the number of items to remove starting\n * at the passed `index`, or an array of items to remove (If an array is passed, the `index` is ignored).\n * @param {Object[]|Object} toAdd An item, or an array of items to add.\n * @category Selection\n */\n spliceSelectedRecords(index, toRemove, toAdd) {\n const me = this;\n if (typeof toRemove == 'number') {\n const select = [...me.selectedRecords];\n select.splice(index, toRemove, ...ArrayHelper.asArray(toAdd));\n me.performSelection(me.prepareSelection(null, select, true, true));\n }\n else {\n // Just add and remove\n me.performSelection(me.prepareSelection(toRemove, toAdd, false, true));\n }\n }\n /**\n * Select one row\n * @param {Object|Core.data.Model|String|Number} options A record or id to select or a config object describing the\n * selection\n * @param {Core.data.Model|String|Number} options.record Record or record id, specifying null will deselect all\n * @param {Grid.column.Column} [options.column] The column to scroll into view if `scrollIntoView` is not specified as\n * `false`. Defaults to the grid's first column.\n * @param {Boolean} [options.scrollIntoView] Specify `false` to prevent row from being scrolled into view\n * @param {Boolean} [options.addToSelection] Specify `true` to add to selection, defaults to `false` which replaces\n * @fires selectionChange\n * @category Selection\n */\n selectRow(options) {\n // Make sure we have an object\n if (typeof options === 'number' || options.isModel || !('record' in options)) {\n options = {\n records : [options]\n };\n }\n // scrollIntoView is default here\n ObjectHelper.assignIf(options, {\n scrollIntoView : true\n });\n this.selectRows(options);\n }\n /**\n * Select one or more rows\n * @param {Object|Core.data.Model[]|String[]|Number[]} options An array of records or ids for a record or a\n * config object describing the selection\n * @param {Core.data.Model[]|String[]|Number[]} options.records An array of records or ids for a record\n * @param {Grid.column.Column} options.column The column to scroll into view if `scrollIntoView` is not specified as\n * `false`. Defaults to the grid's first column.\n * @param {Boolean} [options.scrollIntoView] Specify `false` to prevent row from being scrolled into view\n * @param {Boolean} [options.addToSelection] Specify `true` to add to selection, defaults to `false` which replaces\n * @category Selection\n */\n selectRows(options) {\n // Got a single or an array of records/ids, convert it to an object\n if (!options || Array.isArray(options) || options.isModel || typeof options === 'number' ||\n (!('records' in options) && !('record' in options))\n ) {\n options = {\n records : ArrayHelper.asArray(options) || []\n };\n }\n const\n me = this,\n { store } = me,\n toSelect = [],\n {\n records = options.record ? [options.record] : [], // Got a record instead of records\n column = me.columns.visibleColumns[0], // Default\n scrollIntoView,\n addToSelection = arguments[1] // Backwards compatibility\n } = options;\n for (let record of records) {\n record = store.getById(record);\n if (record) {\n toSelect.push(record);\n }\n }\n if (!addToSelection) {\n me._shiftSelectRange = null;\n }\n me.performSelection(me.prepareSelection(null, toSelect, !addToSelection, true));\n if (toSelect.length && scrollIntoView) {\n me.scrollRowIntoView(toSelect[0].id, {\n column\n });\n }\n }\n /**\n * This selects all rows. If store is filtered, this will merge the selection of all visible rows with any selection\n * made prior to filtering.\n * @privateparam {Boolean} [silent] Pass `true` not to fire any event upon selection change\n * @category Selection\n */\n selectAll(silent = false) {\n const\n { store } = this,\n records = (store.isGrouped ? store.getAllDataRecords() : store.records).filter(r => !r.isSpecialRow);\n // If store is grouped, store.records excludes collapsed records and allRecords excludes filtered out records\n // Else, store records holds what we're after\n this.performSelection(this.prepareSelection(null, records, false, true), true, silent);\n }\n /**\n * Deselects all selected rows and cells. If store is filtered, this will unselect all visible rows only. Any\n * selections made prior to filtering remains.\n * @param {Boolean} [removeCurrentRecordsOnly] Pass `false` to clear all selected records, and `true` to only\n * clear selected records in the current set of records\n * @param {Boolean} [silent] Pass `true` not to fire any event upon selection change\n * @category Selection\n */\n deselectAll(removeCurrentRecordsOnly = false, silent = false) {\n const\n { store } = this,\n records = removeCurrentRecordsOnly\n ? (store.isGrouped ? store.getAllDataRecords() : store.records).filter(r => !r.isSpecialRow) : null;\n this.performSelection(this.prepareSelection(records, null, !removeCurrentRecordsOnly), true, silent);\n }\n /**\n * Deselect one row\n * @param {Core.data.Model|String|Number} recordOrId Record or an id for a record\n * @category Selection\n */\n deselectRow(record) {\n this.deselectRows(record);\n }\n /**\n * Deselect one or more rows\n * @param {Core.data.Model|String|Number|Core.data.Model[]|String[]|Number[]} recordOrIds An array of records or ids\n * for a record\n * @category Selection\n */\n deselectRows(recordsOrIds) {\n // Ignore any non-existing row records passed\n const\n { store } = this,\n records = ArrayHelper.asArray(recordsOrIds).map(recordOrId => store.getById(recordOrId)).filter(rec => rec);\n this.performSelection(this.prepareSelection(records));\n }\n /**\n * Selects rows corresponding to a range of records (from fromId to toId)\n * @param {String|Number} fromId\n * @param {String|Number} toId\n * @category Selection\n */\n selectRange(fromId, toId, addToSelection = false) {\n const\n me = this,\n { store } = me,\n selection = me.internalSelectRange(store.getById(fromId), store.getById(toId), true);\n me._shiftSelectRange = null; // For below function to not replace last range with new one\n me.performSelection(selection);\n }\n // endregion\n // region Public cell selection\n /**\n * In cell selection mode, this will get the cell selector for the (last) selected cell. Set to an available cell\n * selector to select only that cell. Or use {@link #function-selectCell()} instead.\n * @property {Grid.util.Location}\n * @category Selection\n */\n get selectedCell() {\n return this._selectedCells[this._selectedCells.length - 1];\n }\n set selectedCell(cellSelector) {\n this.selectCells([cellSelector]);\n }\n /**\n * In cell selection mode, this will get the cell selectors for all selected cells. Set to an array of available\n * cell selectors. Or use {@link #function-selectCells()} instead.\n * @property {Grid.util.Location[]}\n * @category Selection\n */\n get selectedCells() {\n return [...this._selectedCells];\n }\n set selectedCells(cellSelectors) {\n this.selectCells(cellSelectors);\n }\n /**\n * CSS selector for the currently selected cell. Format is \"[data-index=index] [data-column-id=column]\".\n * @type {String}\n * @category Selection\n * @readonly\n */\n get selectedCellCSSSelector() {\n const\n cell = this.selectedCell,\n row = cell && this.getRowById(cell.id);\n if (!cell || !row) return '';\n return `[data-index=${row.dataIndex}] [data-column-id=${cell.columnId}]`;\n }\n /**\n * If in cell selection mode, this selects one cell. If not, this selects the cell's record.\n * @param {LocationConfig|Object} options A cell selector ({ id: rowId, columnId: 'columnId' }) or a config object\n * @param {LocationConfig} options.cell A cell selector ({ id: rowId, columnId: 'columnId' })\n * @param {Boolean} [options.scrollIntoView] Specify `false` to prevent row from being scrolled into view\n * @param {Boolean} [options.addToSelection] Specify `true` to add to selection, defaults to `false` which replaces\n * @param {Boolean} [options.silent] Specify `true` to not trigger any events when selecting the cell\n * @returns {Grid.util.Location} Cell selector\n * @fires selectionChange\n * @category Selection\n */\n selectCell(options) {\n // Got a cell selector as first argument\n if ('id' in options) {\n options = {\n cell : options\n };\n // Arguments backward's compability\n options = Object.assign({\n scrollIntoView : arguments[1],\n addToSelection : arguments[2],\n silent : arguments[3]\n }, options);\n }\n return this.selectCells(options)?.[0];\n }\n /**\n * If in cell selection mode, this selects a number of cells. If not, this selects corresponding records.\n * @param {Object|LocationConfig[]} options An array of cell selectors ({ id: rowId, columnId: 'columnId' }) or a config\n * object\n * @param {LocationConfig[]} options.cells An array of cell selectors { id: rowId, columnId: 'columnId' }\n * @param {Boolean} [options.scrollIntoView] Specify `false` to prevent row from being scrolled into view\n * @param {Boolean} [options.addToSelection] Specify `true` to add to selection, defaults to `false` which replaces\n * @param {Boolean} [options.silent] Specify `true` to not trigger any events when selecting the cell\n * @returns {Grid.util.Location[]} Cell selectors\n * @returns {Grid.util.Location[]} Cell selectors\n * @fires selectionChange\n * @category Selection\n */\n selectCells(options) {\n // Got a cell selector array as first argument\n if (Array.isArray(options)) {\n options = {\n cells : options\n };\n }\n const\n me = this,\n {\n cells = options.cell ? [options.cell] : [], // Got a cell instead of cells\n scrollIntoView = true,\n addToSelection = false,\n silent = false\n } = options,\n selectionChange = me.prepareSelection(null, cells, !addToSelection);\n if (!addToSelection) {\n me._shiftSelectRange = null;\n }\n me.performSelection(selectionChange, true, silent);\n if (scrollIntoView) {\n me.scrollRowIntoView(cells[0].id, {\n column : cells[0].columnId\n });\n }\n return me.isCellSelectionMode ? selectionChange.selectedCells : selectionChange.selectedRecords;\n }\n /**\n * If in cell selection mode, this deselects one cell. If not, this deselects the cell's record.\n * @param {LocationConfig} cellSelector\n * @returns {Grid.util.Location} Normalized cell selector\n * @category Selection\n */\n deselectCell(cellSelector) {\n return this.deselectCells([cellSelector])?.[0];\n }\n /**\n * If in cell selection mode, this deselects a number of cells. If not, this deselects corresponding records.\n * @param {LocationConfig[]} cellSelectors\n * @returns {Grid.util.Location[]} Normalized cell selectors\n * @category Selection\n */\n deselectCells(cellSelectors) {\n const selectionChange = this.prepareSelection(cellSelectors);\n this.performSelection(selectionChange);\n return this.isCellSelectionMode ? selectionChange.deselectedCells : selectionChange.deselectedRecords;\n }\n // Used by keymap to toggle selection of currently focused cell.\n toggleSelection(keyEvent) {\n const\n me = this,\n {\n _focusedCell,\n selectionMode\n } = me,\n isRowNumber = me.isRowNumberSelecting(_focusedCell),\n isSelected = me.isCellSelected(_focusedCell, true);\n // Only if keyboardNavigation selection is deactivated and were not focusing an actionable cell\n if (selectionMode.selectOnKeyboardNavigation === true || _focusedCell.isActionable) {\n // Return false to ley keyMap know we didn't handle this event\n return false;\n }\n me.performSelection(\n me.prepareSelection(\n isSelected ? _focusedCell : null,\n isSelected ? null : _focusedCell,\n !selectionMode.multiSelect,\n isRowNumber\n ));\n // Space key has preventDefault = false somewhere\n keyEvent.preventDefault();\n }\n /**\n * Selects a range of cells, from a cell selector (Location) to another\n * @param {Grid.util.Location|LocationConfig} from\n * @param {Grid.util.Location|LocationConfig} to\n * @category Selection\n */\n selectCellRange(from, to) {\n this.performSelection(this.internalSelectRange(from, to));\n }\n // endregion\n // region Private convenience functions & properties\n getSelection() {\n if (this.isRowSelectionMode) {\n return this.selectedRecords;\n }\n else {\n return this.selectedCells;\n }\n }\n // Makes sure the same record or cell isn't deselected and selected at the same time. Selection will take precedence\n cleanSelectionChange(selectionChange) {\n const\n {\n deselectedRecords,\n deselectedCells,\n selectedCells,\n deselectedCellRecords\n } = selectionChange,\n selectedRecordIds = selectionChange.selectedRecords?.map(r => r.id),\n selectedCellRecordIds = selectionChange.selectedCellRecords?.map(r => r.id);\n // Filter out records which is both selected and deselected\n if (deselectedRecords?.length && selectedRecordIds?.length) {\n selectionChange.deselectedRecords = deselectedRecords.filter(dr => !selectedRecordIds.includes(dr.id));\n }\n // Filter out cells which is both selected and deselected\n if (deselectedCells?.length && selectedCells?.length) {\n selectionChange.deselectedCells = deselectedCells.filter(dc => !selectedCells.some(sc => dc.equals(sc, true)));\n }\n // Filter out cell-selected records that is being selected\n if (deselectedCellRecords.length && (selectedCellRecordIds.length || selectedRecordIds?.length)) {\n selectionChange.deselectedCellRecords = deselectedCellRecords.filter(dcr => {\n return !selectedCellRecordIds.includes(dcr.id) && !selectedRecordIds.includes(dcr.id);\n });\n }\n return selectionChange;\n }\n getSelectedCellsForRecords(records) {\n return this._selectedCells.filter(cell => cell.id && records.some(record => record.id === cell.id));\n }\n delayUntilMouseUp(fn) {\n const detacher = EventHelper.on({\n element : globalThis,\n blur : ev => fn(ev, detacher),\n mouseup : ev => fn(ev, detacher),\n thisObj : this,\n once : true\n });\n }\n get isRowSelectionMode() {\n return !this.isCellSelectionMode;\n }\n get isCellSelectionMode() {\n return this.selectionMode.cell === true;\n }\n // Checks if rowNumber is activated and that all arguments (cellselectors) is of type rownumber\n isRowNumberSelecting(...selectors) {\n return this.selectionMode.rowNumber && !selectors.some(cs => cs.column.type !== 'rownumber');\n }\n selectionShouldIncludeChildren(record) {\n const { includeChildren, multiSelect } = this.selectionMode;\n return (includeChildren === 'always' || (includeChildren === true && this._isCheckboxSelecting)) &&\n multiSelect && !record.isLeaf && record.allChildren?.length;\n }\n // endregion\n //region Navigation\n // Used by keyMap to extend selection range\n extendSelectionLeft() {\n this.extendSelection('Left');\n }\n // Used by keyMap to extend selection range\n extendSelectionRight() {\n this.extendSelection('Right');\n }\n // Used by keyMap to extend selection range\n extendSelectionUp() {\n this.extendSelection('Up');\n }\n // Used by keyMap to extend selection range\n extendSelectionDown() {\n this.extendSelection('Down');\n }\n // Used by keyMap to extend selection range\n extendSelection(dir) {\n this._isKeyboardRangeSelecting = true;\n this['navigate' + dir]();\n this._isKeyboardRangeSelecting = false;\n }\n // Called from GridNavigation on mouse or keyboard events\n // Single entry point for all default user selection actions\n onCellNavigate(me, fromCellSelector, toCellSelector, doSelect) {\n const\n {\n selectionMode,\n _selectionListenersDetachers\n } = me,\n { multiSelect, deselectOnClick, dragSelect } = selectionMode,\n { ctrlKeyDown, shiftKeyDown } = GlobalEvents,\n isMouseLeft = GlobalEvents.isMouseDown(),\n isMouseRight = GlobalEvents.isMouseDown(2),\n currentEvent = GlobalEvents.currentMouseDown || GlobalEvents.currentKeyDown;\n // To be sure we got Locations\n toCellSelector = me.normalizeCellContext(toCellSelector);\n if (\n me.selectionDisabled ||\n !doSelect ||\n // Do not affect selection if navigating into header row.\n toCellSelector.rowIndex === -1 ||\n toCellSelector.record?.isGroupHeader ||\n // Don't allow keyboard selection if keyboardNavigation is deactivated\n (currentEvent?.fromKeyMap && !selectionMode.selectOnKeyboardNavigation) ||\n // CheckColumn events are handled by the CheckColumn itself.\n me.columns.getById(toCellSelector.columnId) === me.checkboxSelectionColumn ||\n selectionMode.checkboxOnly ||\n // Don't select if event was handled elsewhere\n currentEvent?.handled === true\n ) {\n return;\n }\n // Save adding state unless shift key\n if (!shiftKeyDown) {\n me._isAddingToSelection = ctrlKeyDown && multiSelect;\n me._selectionStartCell = toCellSelector; // To be able to begin a new range\n }\n // Flags that it's possible for onSelectDrag to apply its logic if the right conditions are met\n // (preventDragSelect is set by RowReorder if mousedown on the grip with gripOnly configured. also set in\n // DragCreateBase and EventDragSelect)\n if (multiSelect && dragSelect && isMouseLeft && !_selectionListenersDetachers.selectiondrag && !me.preventDragSelect) {\n _selectionListenersDetachers.selectiondrag = EventHelper.on({\n name : 'selectiondrag',\n element : me.selectionDragMouseEventListenerElement,\n blur : 'onSelectionEnd',\n mouseup : {\n handler : 'onSelectionEnd',\n element : globalThis\n },\n mousemove : 'onSelectionDrag',\n thisObj : me\n });\n }\n me.preventDragSelect = false;\n const\n startCell = me._selectionStartCell,\n adding = me._isAddingToSelection;\n // Select range on shiftKey\n if (((shiftKeyDown && isMouseLeft) || me._isKeyboardRangeSelecting) && startCell && multiSelect) {\n me.performSelection(\n me.internalSelectRange(\n startCell,\n toCellSelector,\n me.isRowNumberSelecting(startCell, toCellSelector)\n )\n );\n }\n else {\n let delay = false,\n continueSelecting = true,\n deselect;\n // If current is already selected\n if (me.isCellSelected(toCellSelector, true)) {\n // Do nothing if we right-clicked already selected row/cell\n if (isMouseRight) {\n return;\n }\n // Deselect current if selected and multiselecting or deselect all if deselectOnClick is true\n if ((adding || deselectOnClick)) {\n deselect = deselectOnClick ? null : [toCellSelector];\n continueSelecting = false; // Only deselect at this code path\n }\n // If this is only row or cell that's selected\n else if (me.selectedRecords.length + (me.isCellSelectionMode ? me._selectedCells.length : 0) <= 1) {\n // Should stay selected, do no more\n return;\n }\n // Delay if click a selected cell which will be deselected (for dragging)\n delay = deselectOnClick || multiSelect;\n }\n // deselect all if not multiselecting\n if (!deselect && !adding) {\n deselect = null;\n // Set flag so that dragselection functionality know to clear selection if needed\n if (dragSelect && delay && _selectionListenersDetachers.selectiondrag) {\n me._clearSelectionOnSelectionDrag = true;\n }\n }\n // Wrapping selection in a function to be called either directly or on mouse up\n const finishSelection = (mouseUpEvent, detacher) => {\n detacher?.();\n if (mouseUpEvent?.target?.nodeType === Node.ELEMENT_NODE) {\n // If we are waiting for mouseUp and have moved to a different cell, abort selection change\n const mouseUpSelector = new Location(mouseUpEvent.target);\n if (mouseUpSelector?.grid && !mouseUpSelector.equals(toCellSelector, true)) {\n return;\n }\n }\n if (!shiftKeyDown) {\n me._shiftSelectRange = null; // Clear any previous range selected\n }\n me.performSelection(\n me.prepareSelection(\n deselect,\n continueSelecting && [toCellSelector],\n deselect === null,\n continueSelecting && me.isRowNumberSelecting(toCellSelector)\n )\n );\n };\n if (me.features.rowReorder?.isDragging) {\n return;\n }\n // Delay doing the selection until mouse up for allowing drag of row in certain cases\n if (delay) {\n me.delayUntilMouseUp(finishSelection);\n }\n else {\n finishSelection();\n }\n }\n }\n // endregion\n // region Internal selection & deselection functions\n /**\n * Used internally to prepare a number of cells or records for selection/deselection depending on if cell\n * selectionMode is activated. This function will not select/deselect anything by itself\n * (that's done in performSelection).\n * @param {LocationConfig[]|Core.data.Model[]} cellSelectorsToDeselect Array of cell selectors or records.\n * @param {LocationConfig[]|Core.data.Model[]} cellSelectorsToSelect Array of cell selectors or records.\n * @param {Boolean} deselectAll Set to `true` to clear all selected records and cells.\n * @param {Boolean} forceRecordSelection Set to `true` to force record selection even if cell selection is active.\n * @returns {Object} selectionChange object to use for UI update\n * @private\n * @category Selection\n */\n prepareSelection(cellSelectorsToDeselect, cellSelectorsToSelect, deselectAll = false, forceRecordSelection = false) {\n const\n me = this,\n isDragging = me._isSelectionDragging,\n {\n includeParents,\n selectRecordOnCell\n } = me.selectionMode,\n selectedCells = [],\n deselectedCells = deselectAll ? me._selectedCells : [],\n selectedRecords = [],\n deselectedRecords = deselectAll ? me._selectedRows : [],\n deselectedRecordIndex = ArrayHelper.keyBy(deselectedRecords, 'id', () => 1), // For performance\n deselectedCellRecords = deselectAll ? me.selectedRecords.filter(r => !deselectedRecordIndex[r.id]) : [];\n let selectedCellRecords = [];\n if (!deselectAll && cellSelectorsToDeselect) {\n for (const selector of ArrayHelper.asArray(cellSelectorsToDeselect)) {\n const\n cellSelector = me.normalizeCellContext(selector),\n record = cellSelector?.record ||\n (selector.isModel ? selector : me.store.getById(cellSelector.id));\n if (cellSelector.isSpecialRow) {\n continue;\n }\n deselectedCells.push(cellSelector);\n if (record && !deselectedRecordIndex[record.id]) {\n // When dragging, this path is taken but nothing is actually selected until mouseup\n // So should check if selected for dragselection (until mouseup)\n if (isDragging || me.isSelected(record)) {\n deselectedRecords.push(record);\n deselectedRecordIndex[record.id] = 1;\n }\n // If not directly selected, but selected by cell, deselect by cell\n else if (selectRecordOnCell && me.selectedRecordCollection.get(record.id) &&\n !deselectedCellRecords.some(dr => dr.id === record.id)\n ) {\n deselectedCellRecords.push(record);\n }\n // If configured, also deselect children\n if (me.selectionShouldIncludeChildren(record)) {\n for (const child of record.allChildren) {\n if (!deselectedRecordIndex[child.id] &&\n (isDragging || me.isSelected(child))\n ) {\n deselectedRecords.push(child);\n deselectedRecordIndex[record.id] = 1;\n }\n }\n }\n }\n }\n }\n if (cellSelectorsToSelect) {\n const selectedRecordIndex = {}; // For performance\n for (const selector of ArrayHelper.asArray(cellSelectorsToSelect)) {\n const\n cellSelector = me.normalizeCellContext(selector),\n record = cellSelector?.record ||\n (selector.isModel ? selector : me.store.getById(cellSelector.id));\n if (!record || cellSelector.isSpecialRow) {\n continue;\n }\n // Only select cells if in cell selection mode and not forcing record selection\n if (me.isCellSelectionMode && !forceRecordSelection) {\n selectedCells.push(cellSelector);\n }\n if ((me.isRowSelectionMode || forceRecordSelection) && !selectedRecordIndex[record.id]) {\n selectedRecords.push(record);\n selectedRecordIndex[record.id] = 1;\n // If configured, also select children\n if (me.selectionShouldIncludeChildren(record)) {\n for (const child of record.allChildren) {\n if (!selectedRecordIndex[child.id]) {\n selectedRecords.push(child);\n selectedRecordIndex[child.id] = 1;\n }\n }\n }\n }\n }\n if (selectRecordOnCell && selectedCells.length) {\n selectedCellRecords = ArrayHelper.unique(selectedCells.map(c => c.record))\n .filter(r => !selectedRecordIndex[r.id]);\n }\n }\n // This setting could be either off, or true/'all' or 'some'\n if (includeParents && (deselectedRecords.length || selectedRecords.length)) {\n const\n allChanges = [...deselectedRecords, ...selectedRecords],\n lowestLevelParents = ArrayHelper.unique(\n allChanges.filter(rec =>\n rec.parent && !rec.allChildren.some(child =>\n allChanges.includes(child))).map(rec => rec.parent));\n lowestLevelParents.forEach(parent => me.toggleParentSelection(parent, selectedRecords, deselectedRecords));\n }\n return me.cleanSelectionChange({\n selectedCells,\n selectedRecords,\n deselectedCells,\n deselectedRecords,\n deselectAll,\n action : selectedRecords?.length || selectedCells?.length ? 'select' : 'deselect',\n selectedCellRecords,\n deselectedCellRecords\n });\n }\n toggleParentSelection(parent, toSelect, toDeselect) {\n if (!parent || parent.isRoot) {\n return;\n }\n const\n isSelected = this.isSelected(parent),\n inToSelect = toSelect.includes(parent),\n inToDeselect = toDeselect.includes(parent),\n childIsSelected = child => (this.isSelected(child) && !toDeselect.includes(child)) || toSelect.includes(child);\n if (this.selectionMode.includeParents === 'some') {\n // If any children are selected\n if (parent.allChildren.some(childIsSelected)) {\n // And parent is not being deselected => select\n if ((!isSelected || inToDeselect) && !inToSelect) {\n toSelect.push(parent);\n }\n }\n // No children are selected and parent is selected => deselect\n else if (isSelected && !inToDeselect) {\n toDeselect.push(parent);\n }\n }\n else { // includeParents = true/'all'\n if (isSelected) {\n // If previously selected, and some child is to be deselected => deselect\n if (!inToDeselect && !inToSelect && parent.allChildren.some(child => toDeselect.includes(child))) {\n toDeselect.push(parent);\n }\n }\n else if (!inToSelect) {\n // If not previously selected, select if all children are selected\n if (parent.allChildren.every(childIsSelected)) {\n toSelect.push(parent);\n }\n }\n }\n // Go up one level if it exists\n if (parent.parent) {\n this.toggleParentSelection(parent.parent, toSelect, toDeselect);\n }\n }\n /**\n * Used internally to select a range of cells or records depending on selectionMode. Used in both shift-selection\n * and for drag selection. Will remember current selection range and replace it with new one when it changes. But a\n * range which is completed (drag select mouse up or a new shift range starting point has been set) will remain.\n * This function will not update UI (that's done in refreshGridSelectionUI).\n * @param {LocationConfig} fromSelector\n * @param {LocationConfig} toSelector\n * @returns {Object} selectionChange object to use for UI update\n * @private\n * @category Selection\n */\n internalSelectRange(fromSelector, toSelector, forceRecordSelection = false) {\n const\n me = this,\n selectRecords = me.isRowSelectionMode || forceRecordSelection,\n selectionChange = me.prepareSelection(me._shiftSelectRange,\n me.getRange(fromSelector, toSelector, selectRecords), false, forceRecordSelection);\n me._shiftSelectRange = selectionChange[`selected${selectRecords ? 'Records' : 'Cells'}`];\n return selectionChange;\n }\n /**\n * Used internally to get a range of cell selectors from a start selector to an end selector.\n * @private\n */\n getRange(fromSelector, toSelector, selectRecords = false) {\n const\n me = this,\n { store } = me,\n fromCell = me.normalizeCellContext(fromSelector),\n toCell = me.normalizeCellContext(toSelector),\n startRowIndex = Math.min(fromCell.rowIndex, toCell.rowIndex),\n endRowIndex = Math.max(fromCell.rowIndex, toCell.rowIndex),\n toSelect = [],\n startColIndex = Math.min(fromCell.columnIndex, toCell.columnIndex),\n endColIndex = Math.max(fromCell.columnIndex, toCell.columnIndex);\n if (startRowIndex === -1 || endRowIndex === -1) {\n throw new Error('Record not found in selectRange');\n }\n // Row selection\n if (selectRecords) {\n const range = store.getRange(startRowIndex, endRowIndex + 1, false);\n // To make selectedRecords in correct order when range selecting upwards\n if (toCell.rowIndex < fromCell.rowIndex) {\n range.reverse();\n }\n toSelect.push(...range);\n }\n // Cell selection\n else {\n // Loops from start cell to end cell and creates selectors for all containing cells\n for (let rIx = startRowIndex; rIx <= endRowIndex; rIx++) {\n for (let cIx = startColIndex; cIx <= endColIndex; cIx++) {\n toSelect.push({ rowIndex : rIx, columnIndex : cIx });\n }\n }\n }\n return toSelect.map(s => me.normalizeCellContext(s));\n }\n // endregion\n // region Update UI & trigger events\n performSelection(selectionChange, updateUI = true, silent = false) {\n const\n me = this,\n {\n selectedRecords = [],\n selectedCells = [],\n selectedCellRecords = [],\n deselectedRecords = [],\n deselectedCells = [],\n deselectedCellRecords = [],\n action\n } = selectionChange,\n allSelectedRecords = [...selectedRecords, ...selectedCellRecords],\n allDeselectedRecords = [...deselectedRecords, ...deselectedCellRecords],\n rowMode = me.isRowSelectionMode;\n // Fire event to be able to prevent selection\n if (me.trigger('beforeSelectionChange', {\n mode : rowMode ? 'row' : 'cell',\n action,\n selected : allSelectedRecords,\n deselected : allDeselectedRecords,\n selection : me.selectedRecords,\n selectedCells,\n deselectedCells,\n cellSelection : me.selectedCells\n }) === false) {\n return false;\n }\n // If deselecting all cells\n if (me._selectedCells === deselectedCells) {\n me._selectedCells = [];\n }\n // Not deselecting all cells\n else {\n const keepCells = [];\n for (const selectedCell of me._selectedCells) {\n if (!deselectedCells.some(cellSelector => selectedCell.equals(cellSelector, true))) {\n keepCells.push(selectedCell);\n }\n }\n me._selectedCells = keepCells;\n }\n selectionChange.deselectedRecords = [...selectionChange.deselectedRecords];\n // If deselecting all rows\n if (deselectedRecords === me._selectedRows) {\n me.changeSelectedRecordCollectionSilent(c => c.clear());\n me._selectedRows.length = 0;\n }\n // Not deselecting all rows\n else {\n const\n keepRecords = [],\n keepInCollection = [],\n allDeselectedRecordsIndex = ArrayHelper.keyBy(allDeselectedRecords, 'id', () => 1); // For performance\n for (const selectedRecord of me.selectedRecords) {\n if (!allDeselectedRecordsIndex[selectedRecord.id]) {\n if (me.isSelected(selectedRecord)) {\n keepRecords.push(selectedRecord);\n }\n else {\n keepInCollection.push(selectedRecord);\n }\n }\n }\n me.changeSelectedRecordCollectionSilent(c => c.values = [...keepRecords, ...keepInCollection]);\n me._selectedRows = keepRecords;\n }\n // New selection\n if (selectedCells.length) {\n for (const selectedCell of selectedCells) {\n if (!me._selectedCells.some(cellSelector => cellSelector.equals(selectedCell, true))) {\n me._selectedCells.push(selectedCell);\n }\n }\n }\n if (selectedRecords.length) {\n me.changeSelectedRecordCollectionSilent(c => c.add(...selectedRecords));\n me._selectedRows.push(...selectedRecords.filter(r => !me._selectedRows.some(sr => sr.id === r.id)));\n }\n if (selectedCellRecords.length) {\n me.changeSelectedRecordCollectionSilent(c => c.add(...selectedCellRecords));\n }\n if (updateUI) {\n me.refreshGridSelectionUI(selectionChange);\n }\n me.afterSelectionChange(selectionChange);\n if (!silent) {\n me.triggerSelectionChangeEvent(selectionChange);\n }\n }\n // Makes sure the DOM is up-to-date with current selection.\n refreshGridSelectionUI({ selectedRecords, selectedCells, deselectedRecords, deselectedCells }) {\n const\n me = this,\n { checkboxSelectionColumn } = me;\n // Row selection\n checkboxSelectionColumn?.suspendEvents();\n me.updateGridSelectionRecords(selectedRecords, true);\n me.updateGridSelectionRecords(deselectedRecords, false);\n me.updateCheckboxHeader();\n checkboxSelectionColumn?.resumeEvents();\n // Cell selection\n if (me.isCellSelectionMode) {\n me.updateGridSelectionCells(selectedCells, true);\n if (me.selectionMode.column) {\n me.updateGridSelectionColumns(selectedCells);\n }\n }\n me.updateGridSelectionCells(deselectedCells, false);\n }\n // Loops through records and updates Grid rows\n updateGridSelectionRecords(records, selected) {\n const { checkboxSelectionColumn } = this;\n if (records?.length) {\n for (let i = 0; i < records.length; i++) {\n const row = this.getRowFor(records[i]);\n if (row) {\n row.toggleCls('b-selected', selected);\n row.setAttribute('aria-selected', selected);\n if (checkboxSelectionColumn && !checkboxSelectionColumn.hidden && !records[i].isSpecialRow) {\n row.getCell(checkboxSelectionColumn.id).widget.checked = selected;\n }\n }\n }\n }\n }\n // Loops through cell selectors and updates Grid cell's\n updateGridSelectionCells(cells, selected) {\n if (cells?.length) {\n for (let i = 0; i < cells.length; i++) {\n const cell = this.getCell(cells[i]);\n if (cell) {\n cell.setAttribute('aria-selected', selected);\n cell.classList.toggle('b-selected', selected);\n }\n }\n }\n }\n // Loops through columns to toggle their selected state\n updateGridSelectionColumns(selectedCells) {\n const { count } = this.store;\n for (const column of this.columns.visibleColumns) {\n column.element?.classList.toggle(\n 'b-selected',\n selectedCells?.filter(s => s.columnId === column.id).length === count\n );\n }\n }\n triggerSelectionChangeEvent(selectionChange) {\n const\n {\n selectedRecords = [],\n selectedCells = [],\n selectedCellRecords = [],\n deselectedRecords = [],\n deselectedCells = [],\n deselectedCellRecords = []\n } = selectionChange,\n allSelectedRecords = [...selectedRecords, ...selectedCellRecords],\n allDeselectedRecords = [...deselectedRecords, ...deselectedCellRecords],\n rowMode = this.isRowSelectionMode;\n this.trigger('selectionChange', {\n mode : rowMode ? 'row' : 'cell',\n action : selectionChange.action,\n selected : allSelectedRecords,\n deselected : allDeselectedRecords,\n selection : this.selectedRecords,\n selectedCells,\n deselectedCells,\n cellSelection : this.selectedCells\n });\n }\n //endregion\n doDestroy() {\n this.selectedRecordCollection?.owner === this && this.selectedRecordCollection.destroy();\n this._selectedCells.length = 0;\n this._selectedRows.length = 0;\n for (const detacher in this._selectionListenersDetachers) {\n this._selectionListenersDetachers[detacher]();\n }\n super.doDestroy();\n }\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "import Base from '../../../Core/Base.js';\nimport WidgetHelper from '../../../Core/helper/WidgetHelper.js';\n/**\n * @module Grid/view/mixin/GridState\n */\nconst\n suspendStoreEvents = subGrid => subGrid.columns.suspendEvents(),\n resumeStoreEvents = subGrid => subGrid.columns.resumeEvents(),\n fillSubGridColumns = subGrid => {\n subGrid.columns.clearCaches();\n subGrid.columns.fillFromMaster();\n },\n compareStateSortIndex = (a, b) => a.stateSortIndex - b.stateSortIndex;\n/**\n * Mixin for Grid that handles state. It serializes the following grid properties:\n *\n * * rowHeight\n * * selectedCell\n * * selectedRecords\n * * columns (order, widths, visibility)\n * * store (sorters, groupers, filters)\n * * scroll position\n * * collapsed group records\n *\n * See {@link Core.mixin.State} for more information on state.\n *\n * {@inlineexample Grid/view/mixin/GridState.js}\n *\n * @demo Grid/state\n *\n * @mixin\n */\nexport default Target => class GridState extends (Target || Base) {\n static $name = 'GridState';\n static configurable = {\n statefulEvents : [\n 'subGridCollapse',\n 'subGridExpand',\n 'horizontalScrollEnd',\n 'stateChange',\n 'selectionChange',\n 'collapseAllGroups',\n 'expandAllGroups'\n ]\n };\n /**\n * Gets or sets grid's state. Check out {@link Grid.view.mixin.GridState} mixin for details.\n * @member {Object} state\n * @property {Object[]} state.columns\n * @property {Number} state.rowHeight\n * @property {Object} state.scroll\n * @property {Number} state.scroll.scrollLeft\n * @property {Number} state.scroll.scrollTop\n * @property {Array} state.selectedRecords\n * @property {String} state.style\n * @property {String} state.selectedCell\n * @property {Object} state.store\n * @property {Sorter[]} state.store.sorters\n * @property {Grouper[]} state.store.groupers\n * @property {CollectionFilterConfig[]} state.store.filters\n * @property {String[]} state.store.collapsedGroups\n * @property {Object} state.subGrids\n * @category State\n */\n updateStore(store, was) {\n super.updateStore?.(store, was);\n this.detachListeners('stateStoreListeners');\n store?.ion({\n name : 'stateStoreListeners',\n filter : 'triggerUpdate',\n group : 'triggerUpdate',\n sort : 'triggerUpdate',\n thisObj : this\n });\n }\n updateColumns(columns, was) {\n super.updateColumns?.(columns, was);\n this.detachListeners('stateColumnListeners');\n columns.ion({\n name : 'stateColumnListeners',\n change : 'triggerUpdate',\n thisObj : this\n });\n }\n updateRowManager(manager, was) {\n super.updateRowManager?.(manager, was);\n this.detachListeners('stateRowManagerListeners');\n manager.ion({\n name : 'stateRowManagerListeners',\n rowHeight : 'triggerUpdate',\n thisObj : this\n });\n }\n triggerUpdate() {\n this.trigger('stateChange');\n }\n finalizeInit() {\n super.finalizeInit();\n this.ion({\n toggleGroup : ({ allRecords }) => !allRecords && this.triggerUpdate(),\n thisObj : this\n });\n }\n /**\n * Get grid's current state for serialization. State includes rowHeight, headerHeight, selectedCell,\n * selectedRecordId, column states and store state etc.\n * @returns {Object} State object to be serialized\n * @private\n */\n getState() {\n const\n me = this,\n style = me.element.style.cssText,\n state = {\n rowHeight : me.rowHeight\n };\n if (style) {\n state.style = style;\n }\n if (me.selectedCell) {\n const { id, columnId } = me.selectedCell;\n state.selectedCell = { id, columnId };\n }\n state.selectedRecords = me.selectedRecords.map(entry => entry.id);\n state.columns = me.columns.allRecords.map(column => column.getState());\n state.store = me.store.state;\n state.scroll = me.storeScroll();\n state.subGrids = {};\n me.eachSubGrid(subGrid => {\n const config = state.subGrids[subGrid.region] = state.subGrids[subGrid.region] || {};\n if (subGrid.isPainted) {\n if (subGrid.flex == null) {\n config.width = subGrid.width;\n }\n }\n else {\n if (subGrid.config.width != null) {\n config.width = subGrid.config.width;\n }\n else {\n config.flex = subGrid.config.flex;\n }\n }\n config.collapsed = subGrid.collapsed ?? false;\n // Part of a collapsed SubGrid's state is the state to restore to when expanding again.\n if (config.collapsed) {\n config._beforeCollapseState = subGrid._beforeCollapseState;\n }\n });\n return state;\n }\n /**\n * Apply previously stored state.\n * @param {Object} state\n * @private\n */\n applyState(state) {\n const me = this;\n // Applying state will call row renderer at least 7 times. Suspending refresh helps to save some time.\n // Roughly on default testing grid apply state takes 26ms without suspend and 16ms with it.\n me.suspendRefresh();\n // Do this first since it might perform full rendering of contents, recreating filterbar header fields\n if ('columns' in state) {\n let columnsChanged = false,\n needSort = false;\n // We're going to renderContents anyway, so stop the ColumnStores from updating the UI\n me.columns.suspendEvents();\n me.eachSubGrid(suspendStoreEvents);\n // each column triggers rerender at least once...\n state.columns.forEach((columnState, index) => {\n const column = me.columns.getById(columnState.id);\n if (column) {\n const columnGeneration = column.generation;\n // If column region is missing in the current config, clear it from the column state and\n // stick to the default configuration\n if ('region' in columnState && !(columnState.region in me.subGrids)) {\n delete columnState.region;\n delete columnState.locked;\n }\n column.applyState(columnState);\n columnsChanged = columnsChanged || (column.generation !== columnGeneration);\n // In case a sort is needed, stamp in the ordinal position.\n column.stateSortIndex = index;\n // If we find one out of order, only then do we need to sort\n if (column.allIndex !== index) {\n needSort = columnsChanged = true;\n }\n }\n });\n if (columnsChanged) {\n me.eachSubGrid(fillSubGridColumns);\n }\n if (needSort) {\n me.eachSubGrid(subGrid => {\n subGrid.columns.records.sort(compareStateSortIndex);\n subGrid.columns.allRecords.sort(compareStateSortIndex);\n });\n me.columns.sort({\n fn : compareStateSortIndex,\n // always sort ascending\n ascending : true\n });\n }\n // If we have been painted, and column restoration changed the column layout, refresh contents\n if (me.isPainted && columnsChanged) {\n me.renderContents();\n }\n // Allow ColumnStores to update the UI again\n me.columns.resumeEvents();\n me.eachSubGrid(resumeStoreEvents);\n }\n if ('subGrids' in state) {\n me.eachSubGrid(subGrid => {\n if (subGrid.region in state.subGrids) {\n const subGridState = state.subGrids[subGrid.region];\n if ('width' in subGridState) {\n subGrid.width = subGridState.width;\n }\n else if ('flex' in subGridState) {\n subGrid.flex = subGridState.flex;\n }\n if ('collapsed' in subGridState) {\n subGrid.collapsed = subGridState.collapsed;\n subGrid._beforeCollapseState = subGridState._beforeCollapseState;\n }\n }\n subGrid.clearWidthCache();\n });\n }\n if ('rowHeight' in state) {\n me.rowHeight = state.rowHeight;\n }\n if ('style' in state) {\n me.style = state.style;\n }\n if ('selectedCell' in state) {\n me.selectedCell = state.selectedCell;\n }\n if ('store' in state) {\n me.store.state = state.store;\n }\n if ('selectedRecords' in state) {\n me.selectedRecords = state.selectedRecords;\n }\n me.resumeRefresh(true);\n me.whenVisible(() => me.applyScrollState(state));\n }\n applyScrollState(state) {\n const me = this;\n // Update scroll state\n me.eachSubGrid(s => s.refreshFakeScroll());\n if ('scroll' in state) {\n me.restoreScroll(state.scroll);\n // We need to force resize handler on all observable elements, because vertical scroll triggered by the\n // previous method will suspend the listener. So by the time ResizeObserver triggers mutation handler\n // listener won't actually update widget size.\n // Handler works here because we haven't _yet_ suspended it, it will happen one animation frame after\n // scroll event is triggered\n if (state.scroll.scrollTop) {\n me.element.querySelectorAll('.b-resize-monitored').forEach(element => {\n const widget = WidgetHelper.fromElement(element);\n if (widget) {\n widget.onElementResize(element);\n }\n });\n }\n }\n }\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {\n }\n};\n", "/**\n * @module Grid/util/SubGridScroller\n */\nimport Scroller from '../../Core/helper/util/Scroller.js';\nimport Rectangle from '../../Core/helper/util/Rectangle.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nconst\n immediatePromise = Promise.resolve(),\n defaultScrollOptions = {\n block : 'nearest'\n };\n/**\n * A Scroller subclass which handles scrolling in a SubGrid. Needs special treatment since the SubGrid itself only\n * allows horizontal scrolling, while the vertical scrolling is done by an outer element containing all subgrids.\n *\n * @internal\n */\nexport default class SubGridScroller extends Scroller {\n // SubGrids do not drive the scrollWidth of their partners (Header and Footer)\n // SubGrids scrollWidth is propagated from the Header by SubGrid.refreshFakeScroll.\n static configurable = {\n propagate : false,\n overflowX : 'hidden-scroll',\n yScroller : null\n };\n // The Grid's main Y scroller keeps a list of the X scrollers\n updateYScroller(yScroller) {\n yScroller?.addScroller(this);\n }\n scrollIntoView(element, options = defaultScrollOptions) {\n const\n me = this,\n { xDelta, yDelta } = me.getDeltaTo(element, options);\n let result = (xDelta || yDelta) ? me.scrollBy(xDelta, yDelta, options) : immediatePromise;\n if (options.highlight || options.focus) {\n const scrollPromise = result;\n result = result.then(() => {\n if (scrollPromise.cancelled) {\n return;\n }\n element = element instanceof Rectangle\n ? element\n : options.elementAfterScroll?.() ?? element;\n if (options.highlight) {\n if (element instanceof Rectangle) {\n element.translate(-xDelta, -yDelta).highlight();\n }\n else {\n DomHelper.highlight(element);\n }\n }\n if (options.focus) {\n element.focus({ preventScroll : true });\n }\n });\n result.cancel = () => scrollPromise.cancel?.();\n }\n return result;\n }\n scrollBy(xDelta, yDelta, options) {\n const\n yPromise = yDelta && this.yScroller.scrollBy(0, yDelta, options),\n xPromise = xDelta && super.scrollBy(xDelta, 0, options),\n result = Promise.all([xPromise, yPromise]);\n // Set up cross canceling\n result.cancel = () => {\n xPromise?.cancel?.();\n yPromise?.cancel?.();\n result.cancelled = true;\n };\n if (xPromise?.cancel && yPromise?.cancel) {\n // Make sure a side effect of scrolling in one direction does not disturb the other\n options.force = true;\n }\n return result;\n }\n scrollTo(toX, toY, options) {\n const\n yPromise = (toY != null) && this.yScroller.scrollTo(null, toY, options),\n xPromise = (toX != null) && super.scrollTo(toX, null, options);\n // Keep partners in sync immediately unless we are going to animate our position.\n // There are potentially three: The header, the footer and the docked fake horizontal scroller.\n // It will be more efficient and maintain correct state doing it now.\n if (!(options && options.animate)) {\n this.syncPartners();\n }\n const result = Promise.all([xPromise, yPromise]);\n // Set up cross canceling\n result.cancel = () => {\n xPromise?.cancel?.();\n yPromise?.cancel?.();\n result.cancelled = true;\n };\n if (xPromise?.cancel && yPromise?.cancel) {\n // Make sure a side effect of scrolling in one direction does not disturb the other\n options.force = true;\n }\n return result;\n }\n get viewport() {\n const\n elementBounds = Rectangle.from(this.element),\n viewport = elementBounds.intersect(Rectangle.from(this.yScroller.element));\n // For 0 height subgrids, viewport will be `false` but we still expect a Rectangle to be returned\n return viewport || new Rectangle(elementBounds.x, elementBounds.y, elementBounds.width, 0);\n }\n set y(y) {\n if (this.yScroller) {\n this.yScroller.y = y;\n }\n }\n get y() {\n return this.yScroller ? this.yScroller.y : 0;\n }\n get maxY() {\n return this.yScroller ? this.yScroller.maxY : 0;\n }\n get scrollHeight() {\n return this.yScroller ? this.yScroller.scrollHeight : 0;\n }\n get clientHeight() {\n return this.yScroller ? this.yScroller.clientHeight : 0;\n }\n suspendEvents() {\n super.suspendEvents();\n this.yScroller?.suspendEvents();\n }\n resumeEvents() {\n super.resumeEvents();\n this.yScroller?.resumeEvents();\n }\n}\nSubGridScroller._$name = 'SubGridScroller';", "import BrowserHelper from '../../Core/helper/BrowserHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport VersionHelper from '../../Core/helper/VersionHelper.js';\nimport Widget from '../../Core/widget/Widget.js';\nimport Column from '../column/Column.js';\nimport SubGridScroller from '../util/SubGridScroller.js';\nimport Rectangle from '../../Core/helper/util/Rectangle.js';\nimport Scroller from '../../Core/helper/util/Scroller.js';\nimport EventHelper from '../../Core/helper/EventHelper.js';\n/**\n * @module Grid/view/SubGrid\n */\nconst sumWidths = (t, e) => t + e.getBoundingClientRect().width;\n/**\n * A SubGrid is a part of the grid (it has at least one and normally no more than two, called locked and normal). It\n * has its own header, which holds the columns to display rows for in the SubGrid. SubGrids are created by Grid, you\n * should not need to create instances directly.\n *\n * If not configured with a width or flex, the SubGrid will be sized to fit its columns. In this case, if all columns\n * have a fixed width (not using flex) then toggling columns will also affect the width of the SubGrid.\n *\n * @extends Core/widget/Widget\n */\nexport default class SubGrid extends Widget {\n //region Config\n static get $name() {\n return 'SubGrid';\n }\n // Factoryable type name\n static get type() {\n return 'subgrid';\n }\n /**\n * Region (name) for this SubGrid\n * @config {String} region\n */\n /**\n * Column store, a store containing the columns for this SubGrid\n * @config {Grid.data.ColumnStore} columns\n */\n static get defaultConfig() {\n return {\n insertRowsBefore : null,\n appendTo : null,\n monitorResize : true,\n headerClass : null,\n footerClass : null,\n /**\n * The subgrid \"weight\" determines its position among its SubGrid siblings.\n * Higher weights go further right.\n * @config {Number}\n * @category Layout\n */\n weight : null,\n /**\n * Set `true` to start subgrid collapsed. To operate collapsed state on subgrid use\n * {@link #function-collapse}/{@link #function-expand} methods.\n * @config {Boolean}\n * @default false\n */\n collapsed : null,\n scrollable : {\n // Each SubGrid only handles scrolling in the X axis.\n // The owning Grid handles the Y axis.\n overflowX : 'hidden-scroll'\n },\n scrollerClass : SubGridScroller,\n // Will be set to true by GridSubGrids if it calculates the subgrids width based on its columns.\n // Used to determine if hiding a column should affect subgrids width\n hasCalculatedWidth : null,\n /**\n * Set `true` to disable moving columns into or out of this SubGrid.\n * @config {Boolean}\n * @default false\n * @private\n */\n sealedColumns : null\n };\n }\n static get configurable() {\n return {\n element : true,\n header : {},\n footer : {},\n virtualScrollerElement : true,\n splitterElement : true,\n headerSplitter : true,\n scrollerSplitter : true,\n footerSplitter : true,\n /**\n * Set to `false` to prevent this subgrid being resized with the {@link Grid.feature.RegionResize} feature\n * @config {Boolean}\n * @default true\n */\n resizable : null,\n role : 'presentation'\n };\n }\n static delayable = {\n // This uses a shorter delay for tests, see construct()\n hideOverlayScroller : 1000\n };\n //endregion\n //region Init\n /**\n * SubGrid constructor\n * @param config\n * @private\n */\n construct(config) {\n super.construct(config);\n this.rowManager.ion({ addRows : 'onAddRow', thisObj : this });\n if (VersionHelper.isTestEnv) {\n this.hideOverlayScroller.delay = 50;\n }\n }\n doDestroy() {\n const me = this;\n me.header.destroy();\n me.footer.destroy();\n me.fakeScroller?.destroy();\n me.virtualScrollerElement.remove();\n me.splitterElements.forEach(element => element.remove());\n super.doDestroy();\n }\n get barConfig() {\n const\n me = this,\n { width, flex } = me.element.style,\n config = {\n subGrid : me,\n parent : me, // Contained widgets need to know their parents\n maxWidth : me.maxWidth || undefined,\n minWidth : me.minWidth || undefined\n };\n // If we have been configured with sizing, construct the Bar in sync.\n if (flex) {\n config.flex = flex;\n }\n else if (width) {\n config.width = width;\n }\n return config;\n }\n changeHeader(header) {\n return new this.headerClass(ObjectHelper.assign({\n id : this.id + '-header'\n }, this.barConfig, header));\n }\n changeFooter(footer) {\n return new this.footerClass(ObjectHelper.assign({\n id : this.id + '-footer'\n }, this.barConfig, footer));\n }\n //endregion\n //region Splitters\n get splitterElements() {\n return [this.splitterElement, this.headerSplitter, this.scrollerSplitter, this.footerSplitter];\n }\n /**\n * Toggle (add/remove) class for splitters\n * @param {String} cls class name\n * @param {Boolean} [add] Set to `true` to add class, `false` to remove\n * @param {Boolean} [includePartners] Set to `true` to also process partners\n * @private\n */\n toggleSplitterCls(cls, add = true, includePartners = true) {\n this.splitterElements.forEach(el => el?.classList[add ? 'add' : 'remove'](cls));\n if (includePartners) {\n this.scrollable.eachPartner(({ scroller }) => {\n if (scroller.owner !== this) {\n scroller.owner.toggleSplitterCls?.(cls === 'b-hover' ? 'b-partner-splitter-hover' : 'b-hover', add, false);\n }\n });\n }\n }\n hideSplitter() {\n this.splitterElements.forEach(el => el.classList.add('b-hide-display'));\n this.$showingSplitter = false;\n }\n showSplitter() {\n this.splitterElements.forEach(el => el.classList.remove('b-hide-display'));\n this.$showingSplitter = true;\n }\n //endregion\n //region Template\n changeElement(element, was) {\n const { region } = this;\n return super.changeElement({\n 'aria-label' : region,\n className : {\n 'b-grid-subgrid' : 1,\n [`b-grid-subgrid-${region}`] : region,\n 'b-grid-subgrid-collapsed' : this.collapsed\n },\n dataset : {\n region\n }\n }, was);\n }\n get rowElementConfig() {\n const { grid } = this;\n return {\n role : 'row',\n className : grid.rowCls,\n children : this.columns.visibleColumns.map((column, columnIndex) => ({\n role : 'gridcell',\n 'aria-colindex' : columnIndex + 1,\n tabIndex : grid.cellTabIndex,\n className : 'b-grid-cell',\n dataset : {\n column : column.field || '',\n columnId : column.id\n }\n }))\n };\n }\n // Added to DOM in Grid `get bodyConfig`\n changeVirtualScrollerElement() {\n const references = DomHelper.createElement({\n role : 'presentation',\n reference : 'virtualScrollerElement',\n className : 'b-virtual-scroller',\n tabIndex : -1,\n dataset : {\n region : this.region\n },\n children : [\n {\n reference : 'virtualScrollerWidth',\n className : 'b-virtual-width'\n }\n ]\n });\n this.virtualScrollerWidth = references.virtualScrollerWidth;\n return references.virtualScrollerElement;\n }\n changeSplitterElement() {\n const references = DomHelper.createElement({\n reference : 'splitterElement',\n className : {\n 'b-grid-splitter' : 1,\n 'b-grid-splitter-collapsed' : this.collapsed,\n 'b-hide-display' : 1 // GridSubGrids determines visibility\n },\n dataset : {\n region : this.region\n },\n children : [\n BrowserHelper.isTouchDevice ? { className : 'b-splitter-touch-area' } : null,\n {\n className : 'b-grid-splitter-inner b-grid-splitter-main',\n children : [\n {\n className : 'b-grid-splitter-buttons',\n reference : 'splitterButtons',\n children : [\n {\n className : 'b-grid-splitter-button-collapse',\n children : [\n BrowserHelper.isTouchDevice ? { className : 'b-splitter-button-touch-area' } : null,\n {\n tag : 'svg',\n ns : 'http://www.w3.org/2000/svg',\n version : '1.1',\n className : 'b-grid-splitter-button-icon b-gridregion-collapse-arrow',\n viewBox : '0 0 256 512',\n children : [\n {\n tag : 'path',\n d : 'M192 448c-8.188 0-16.38-3.125-22.62-9.375l-160-160c-12.5-1' +\n '2.5-12.5-32.75 0-45.25l160-160c12.5-12.5 32.75-12.5 45.25 0s' +\n '12.5 32.75 0 45.25L77.25 256l137.4 137.4c12.5 12.5 12.5 32.7' +\n '5 0 45.25C208.4 444.9 200.2 448 192 448z'\n }\n ]\n }\n ]\n },\n {\n className : 'b-grid-splitter-button-expand',\n children : [\n BrowserHelper.isTouchDevice ? { className : 'b-splitter-button-touch-area' } : null,\n {\n tag : 'svg',\n ns : 'http://www.w3.org/2000/svg',\n version : '1.1',\n className : 'b-grid-splitter-button-icon b-gridregion-expand-arrow',\n viewBox : '0 0 256 512',\n children : [\n {\n tag : 'path',\n d : 'M64 448c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-3' +\n '2.75 0-45.25L178.8 256L41.38 118.6c-12.5-12.5-12.5-32.75 0-4' +\n '5.25s32.75-12.5 45.25 0l160 160c12.5 12.5 12.5 32.75 0 45.25' +\n 'l-160 160C80.38 444.9 72.19 448 64 448z'\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n });\n this.splitterButtons = references.splitterButtons;\n return references.splitterElement;\n }\n get splitterConfig() {\n return {\n className : this.splitterElement.className.trim(),\n children : [\n BrowserHelper.isTouchDevice ? { className : 'b-splitter-touch-area' } : null,\n {\n className : 'b-grid-splitter-inner'\n }\n ],\n dataset : {\n region : this.region\n }\n };\n }\n changeHeaderSplitter() {\n return DomHelper.createElement(this.splitterConfig);\n }\n changeScrollerSplitter() {\n return DomHelper.createElement(this.splitterConfig);\n }\n changeFooterSplitter() {\n return DomHelper.createElement(this.splitterConfig);\n }\n //endregion\n //region Render\n render(...args) {\n const me = this;\n super.render(...args);\n // Unit tests create naked SubGrids so we have to do this.\n if (me.grid) {\n me.updateHasFlex();\n me.element.parentNode.insertBefore(me.splitterElement, me.element.nextElementSibling);\n // Cant use \"global\" listener with delegate for mouseenter, since mouseenter only fires on target\n me.splitterElements.forEach(element =>\n EventHelper.on({\n element,\n mouseenter : 'onSplitterMouseEnter',\n mouseleave : 'onSplitterMouseLeave',\n thisObj : me\n })\n );\n me._collapsed && me.collapse();\n }\n }\n toggleHeaders(hide) {\n const me = this;\n if (hide) {\n me.headerSplitter.remove();\n me.header.element.remove();\n me.scrollable.removePartner(me.header.scrollable, 'x');\n }\n else {\n const { grid } = me;\n // Header elements are always created in GridSubGrids.js\n if (!me.isConfiguring) {\n const index = grid.items.indexOf(me) * 2;\n DomHelper.insertAt(grid.headerContainer, me.headerSplitter, index);\n DomHelper.insertAt(grid.headerContainer, me.header.element, index);\n me.refreshHeader();\n }\n me.scrollable.addPartner(me.header.scrollable, 'x');\n }\n }\n refreshHeader() {\n this.header.refreshContent();\n }\n refreshColumnHeader(column) {\n this.header.refreshColumn(column);\n }\n refreshFooter() {\n this.footer?.refreshContent();\n }\n // Override to iterate header and footer.\n eachWidget(fn, deep = true) {\n const\n me = this,\n widgets = [me.header, me.footer];\n for (let i = 0; i < widgets.length; i++) {\n const widget = widgets[i];\n if (fn(widget) === false) {\n return;\n }\n if (deep && widget.eachWidget) {\n widget.eachWidget(fn, deep);\n }\n }\n }\n //endregion\n //region Size & resize\n /**\n * Sets cell widths. Cannot be done in template because of CSP\n * @private\n */\n fixCellWidths(rowElement) {\n const { visibleColumns } = this.columns;\n // fix cell widths, no longer allowed in template because of CSP\n let cell = rowElement.firstElementChild,\n i = 0;\n while (cell) {\n const\n column = visibleColumns[i],\n { element } = column;\n if (column.minWidth) {\n cell.style.minWidth = DomHelper.setLength(column.minWidth);\n }\n if (column.maxWidth) {\n cell.style.maxWidth = DomHelper.setLength(column.maxWidth);\n }\n // either flex or width, flex has precedence\n if (column.flex) {\n // Nested flex - we have to match the column's header width because it's flexing\n // a different available space - the space in its owning column header.\n if (column.childLevel && element) {\n cell.style.flex = `0 0 ${element.getBoundingClientRect().width}px`;\n cell.style.width = '';\n }\n else {\n cell.style.flex = column.flex;\n cell.style.width = '';\n }\n }\n else if (column.width) {\n // Although header and footer elements must be sized using flex-basis to avoid the busting out problem,\n // grid cells MUST be sized using width since rows are absolutely positioned and will not cause the\n // busting out problem, and rows will not stretch to shrinkwrap the cells unless they are widthed with\n // width.\n cell.style.width = DomHelper.setLength(column.width);\n }\n else {\n cell.style.flex = cell.style.width = cell.style.minWidth = '';\n }\n cell = cell.nextElementSibling;\n i++;\n }\n }\n get totalFixedWidth() {\n return this.columns.totalFixedWidth;\n }\n get headerScrollWidth() {\n return [...this.header.contentElement.children].reduce(sumWidths, 0) || this.columns.totalFixedWidth;\n }\n /**\n * Sets header width and scroller width (if needed, depending on if using flex). Might also change the subgrids\n * width, if it uses a width calculated from its columns.\n * @private\n */\n fixWidths() {\n const\n me = this,\n {\n element,\n header,\n footer\n } = me;\n if (!me.collapsed) {\n if (me.flex) {\n header.flex = me.flex;\n if (footer) {\n footer.flex = me.flex;\n }\n element.style.flex = me.flex;\n }\n else {\n // If width is calculated and no column is using flex, check if total width is less than width. If so,\n // recalculate width and bail out of further processing (since setting width will trigger again)\n if (\n me.hasCalculatedWidth &&\n !me.columns.some(col => !col.hidden && col.flex) &&\n me.totalFixedWidth !== me.width\n ) {\n me.width = me.totalFixedWidth;\n // Setting width above clears the hasCalculatedWidth flag, but we want to keep it set to react\n // correctly next time\n me.hasCalculatedWidth = true;\n return;\n }\n let totalWidth = me.width;\n // Calculate width from our total column width if we are supposed to have a calculated width\n if (!totalWidth && me.hasCalculatedWidth) {\n totalWidth = 0;\n // summarize column widths, needed as container width when not using flex widths.\n for (const col of me.columns) {\n if (!col.flex && !col.hidden) totalWidth += col.width;\n }\n }\n // rows are absolutely positioned, meaning that their width won't affect container width\n // hence we must set it, if not using flex\n element.style.width = `${totalWidth}px`;\n header.width = totalWidth;\n if (footer) {\n footer.width = totalWidth;\n }\n }\n me.handleHorizontalScroll(false);\n }\n }\n // Safari does not shrink cells the same way as chrome & ff does without having a width set on the row\n fixRowWidthsInSafariEdge() {\n if (BrowserHelper.isSafari) {\n const\n me = this,\n { region, header } = me,\n minWidth = header.calculateMinWidthForSafari();\n // fix row widths for safari, it does not size flex cells correctly at small widths otherwise.\n // there should be a css solution, but I have failed to find it\n me.rowManager.forEach(row => {\n // This function runs on resize and rendering a SubGrid triggers a resize. When adding a new SubGrid\n // on the fly elements won't exists for it yet, so ignore...\n const element = row.getElement(region);\n // it is worth noting that setting a width does not prevent the row from growing beyond that with\n // when making view wider, it is used in flex calculation more like a min-width\n if (element) {\n element.style.width = `${minWidth}px`;\n }\n });\n header.headersElement.style.width = `${minWidth}px`;\n }\n }\n /**\n * Get/set SubGrid width, which also sets header and footer width (if available).\n * @property {Number}\n */\n set width(width) {\n const me = this;\n // Width explicitly set, remember that\n me.hasCalculatedWidth = false;\n super.width = width;\n me.header.width = width;\n me.footer.width = width;\n // When we're live, we can't wait until the throttled resize occurs - it looks bad.\n if (me.isPainted) {\n me.onElementResize();\n }\n // Sync width of same subgrid in other splits, but not during expand / resize since those are also synced\n if (!me.isExpanding && !me.isCollapsing && !me.isConfiguring) {\n me.grid.syncSplits?.(other => other.subGrids[me.region] && (other.subGrids[me.region].width = width));\n }\n }\n get width() {\n return super.width;\n }\n /**\n * Get/set SubGrid flex, which also sets header and footer flex (if available).\n * @property {Number|String}\n */\n set flex(flex) {\n const me = this;\n // Width explicitly set, remember that\n me.hasCalculatedWidth = false;\n me.header.flex = flex;\n me.footer.flex = flex;\n super.flex = flex;\n // When we're live, we can't wait until the throttled resize occurs - it looks bad.\n if (me.isPainted) {\n me.onElementResize();\n }\n // Sync width of same subgrid in other splits, but not during expand / resize since those are also synced\n if (!me.isExpanding && !me.isCollapsing && !me.isConfiguring) {\n me.grid.syncSplits?.(other => other.subGrids[me.region] && (other.subGrids[me.region].flex = flex));\n }\n }\n get flex() {\n return super.flex;\n }\n /**\n * Called when grid changes size. SubGrid determines if it has changed size and triggers scroll (for virtual\n * rendering in cells to work when resizing etc.)\n * @private\n */\n onInternalResize(element, newWidth, newHeight, oldWidth, oldHeight) {\n const\n me = this,\n { grid } = me;\n // Widget caches dimensions\n super.onInternalResize(...arguments);\n // Unit tests create naked SubGrids so we have to do this.\n if (grid?.isPainted) {\n me.syncSplitterButtonPosition();\n if (newWidth !== oldWidth) {\n // Merged cells needs to react before we update scrollbars\n me.trigger('beforeInternalResize', me);\n // trigger scroll, in case anything is done on scroll it needs to be done now also\n grid.trigger('horizontalScroll', {\n grid,\n subGrid : me,\n scrollLeft : me.scrollable.scrollLeft,\n scrollX : me.scrollable.x\n });\n // ditto for scrollEnd (state tests expect saving on resize, and that now happens on scrollEnd)\n grid.trigger('horizontalScrollEnd', { subGrid : me });\n // Update virtual scrollers, if they are ready\n me.fakeScroller && me.refreshFakeScroll();\n // Columns which are flexed, but as part of a grouped column cannot just have their flex\n // value reflected in the flex value of its cells. They are flexing a different available space.\n // These have to be set to the exact width and kept synced.\n grid.syncFlexedSubCols();\n me.fixRowWidthsInSafariEdge();\n }\n if (newHeight !== oldHeight) {\n // Call this to update cached _bodyHeight\n grid.onHeightChange();\n }\n me.trigger('afterInternalResize', me);\n }\n }\n /**\n * Keeps the parallel splitters in the header, footer and fake scroller synced in terms\n * of being collapsed or not.\n * @private\n */\n syncParallelSplitters(collapsed) {\n const\n me = this,\n { grid } = me;\n if (me.splitterElement && me.$showingSplitter) {\n me.toggleSplitterCls('b-grid-splitter-collapsed', collapsed);\n }\n else {\n // If we're the last, we don't own a splitter, we use the previous region's splitter\n const prevGrid = grid.getSubGrid(grid.getPreviousRegion(me.region));\n // If there's a splitter before us, sync it with our state.\n if (prevGrid && prevGrid.splitterElement) {\n prevGrid.syncParallelSplitters(collapsed);\n }\n }\n }\n onSplitterMouseEnter() {\n const\n me = this,\n { nextSibling } = me;\n // No hover effect when collapsed\n if (!me.collapsed && (!nextSibling || !nextSibling.collapsed)) {\n me.toggleSplitterCls('b-hover');\n }\n me.startSplitterButtonSyncing();\n }\n onSplitterMouseLeave() {\n const\n me = this,\n { nextSibling } = me;\n me.toggleSplitterCls('b-hover', false);\n if (!me.collapsed && (!nextSibling || !nextSibling.collapsed)) {\n me.stopSplitterButtonSyncing();\n }\n }\n startSplitterButtonSyncing() {\n const me = this;\n if (me.splitterElement) {\n me.syncSplitterButtonPosition();\n if (!me.splitterSyncScrollListener) {\n me.splitterSyncScrollListener = me.grid.scrollable.ion({\n scroll : 'syncSplitterButtonPosition',\n thisObj : me\n });\n }\n }\n }\n stopSplitterButtonSyncing() {\n if (this.splitterSyncScrollListener) {\n this.splitterSyncScrollListener();\n this.splitterSyncScrollListener = null;\n }\n }\n syncSplitterButtonPosition() {\n const { grid } = this;\n this.splitterButtons.style.top = `${grid.scrollable.y + ((grid.bodyHeight - (this.headerSplitter ? grid.headerHeight : 0)) / 2)}px`;\n }\n /**\n * Get the \"viewport\" for the SubGrid as a Rectangle\n * @property {Core.helper.util.Rectangle}\n * @readonly\n */\n get viewRectangle() {\n const { scrollable } = this;\n return new Rectangle(scrollable.x, scrollable.y, this.width || 0, this.rowManager.viewHeight);\n }\n /**\n * Called when updating column widths to apply 'b-has-flex' which is used when fillLastColumn is configured.\n * @internal\n */\n updateHasFlex() {\n this.scrollable.element.classList.toggle('b-has-flex', this.columns.hasFlex);\n }\n updateResizable(resizable) {\n this.splitterElements.forEach(splitter => DomHelper.toggleClasses(splitter, ['b-disabled'], !resizable));\n }\n /**\n * Resize all columns in the SubGrid to fit their width, according to their configured\n * {@link Grid.column.Column#config-fitMode}\n */\n resizeColumnsToFitContent() {\n this.grid.beginGridMeasuring();\n this.columns.visibleColumns.forEach(column => {\n column.resizeToFitContent(null, null, true);\n });\n this.grid.endGridMeasuring();\n }\n //endregion\n //region Scroll\n get overflowingHorizontally() {\n // We are not overflowing if collapsed.\n // It is the columns which dictate the content width, so the header\n // will know about overflow first.\n return !this.collapsed && (this.hideHeaders ? this.scrollable.hasOverflow('x') : this.header.scrollable.hasOverflow('x'));\n }\n get overflowingVertically() {\n // SubGrids never overflow vertically. They are full calculated content height.\n // The owning Grid scrolls all SubGrids vertically in its own overflowElement.\n return false;\n }\n /**\n * Fixes widths of fake scrollers\n * @private\n */\n refreshFakeScroll() {\n const\n me = this,\n {\n element,\n virtualScrollerElement,\n virtualScrollerWidth,\n header,\n footer,\n scrollable\n } = me,\n // Cannot use scrollWidth because its an integer and we need exact content size\n totalFixedWidth = [...header.contentElement.children].reduce(sumWidths, 0);\n // Use a fixed scroll width so that when grid is empty (e.g after filtering with no matches),\n // it is able to it maintain its scroll-x position and magic mouse swiping\n // in the grid area will produce horizontal scrolling.\n // https://github.com/bryntum/support/issues/3247\n scrollable.scrollWidth = totalFixedWidth;\n // This style property ensures all rows expand to accommodate the visible columns\n // And that headers, footers, and virtual scroller have scroll range.\n element.style.setProperty('--total-column-width', `${me.headerScrollWidth}px`);\n // Scroller lays out in the same way as subgrid.\n // If we are flexed, the scroller is flexed etc.\n virtualScrollerElement.style.width = element.style.width;\n virtualScrollerElement.style.flex = element.style.flex;\n virtualScrollerElement.style.minWidth = element.style.minWidth;\n virtualScrollerElement.style.maxWidth = element.style.maxWidth;\n header.scrollable.syncOverflowState();\n footer.scrollable.syncOverflowState();\n if (!me.collapsed) {\n if (me.overflowingHorizontally) {\n virtualScrollerWidth.style.width = `${scrollable.scrollWidth || 0}px`;\n // If *any* SubGrids have horizontal overflow, the main grid\n // has to show its virtual horizontal scrollbar.\n me.grid.virtualScrollers.classList.remove('b-hide-display');\n }\n else {\n virtualScrollerWidth.style.width = 0;\n }\n }\n }\n /**\n * Init scroll syncing for header and footer (if available).\n * @private\n */\n initScroll() {\n const\n me = this,\n {\n scrollable,\n virtualScrollerElement,\n grid\n } = me;\n // Create a Scroller for the fake horizontal scrollbar so that it can partner\n me.fakeScroller = new Scroller({\n element : virtualScrollerElement,\n overflowX : true,\n widget : me // To avoid more expensive style lookup for RTL\n });\n // Sync scrolling partners (header, footer) when our xScroller reports a scroll.\n // Also fires horizontalscroll\n scrollable.ion({\n scroll : 'onSubGridScroll',\n scrollend : 'onSubGridScrollEnd',\n thisObj : me\n });\n if (!grid.hideHorizontalScrollbar) {\n scrollable.addPartner(me.fakeScroller, 'x');\n // Update virtual scrollers (previously updated too early from onInternalResize)\n me.refreshFakeScroll();\n }\n if (!grid.hideHeaders) {\n scrollable.addPartner(me.header.scrollable, 'x');\n }\n if (!grid.hideFooters) {\n scrollable.addPartner(me.footer.scrollable, 'x');\n }\n }\n onSubGridScrollEnd(event) {\n const\n me = this,\n { grid } = me;\n me.scrollingToCenter = event?.scrollingToCenter;\n me.scrolling = false;\n me.handleHorizontalScroll(false);\n if (!DomHelper.scrollBarWidth) {\n grid.virtualScrollers.classList.remove('b-scrolling');\n // Remove interactivity a while after scrolling ended\n me.hideOverlayScroller();\n }\n // Used by GridState\n grid.trigger('horizontalScrollEnd', { subGrid : me });\n }\n onSubGridScroll(event) {\n const me = this;\n me.scrollingToCenter = event?.scrollingToCenter;\n me.handleHorizontalScroll();\n }\n showOverlayScroller() {\n this.hideOverlayScroller.cancel();\n this.virtualScrollerElement.classList.add('b-show-virtual-scroller');\n }\n // Buffered 1500ms, hides virtual scrollers after scrolling has ended\n hideOverlayScroller() {\n this.virtualScrollerElement.classList.remove('b-show-virtual-scroller');\n }\n set scrolling(scrolling) {\n this._scrolling = scrolling;\n }\n get scrolling() {\n return this._scrolling;\n }\n /**\n * Triggers the 'horizontalScroll' event + makes sure overlay scrollbar is reachable with pointer for a substantial\n * amount of time after scrolling starts\n * @internal\n */\n handleHorizontalScroll(addCls = true) {\n const\n subGrid = this,\n { grid } = subGrid;\n if (!subGrid.scrolling && addCls) {\n subGrid.scrolling = true;\n // Allow interacting with overlaid scrollbar after scrolling starts\n if (!DomHelper.scrollBarWidth) {\n // Cls indicating that we are actively scrolling\n grid.virtualScrollers.classList.add('b-scrolling');\n // Cls sticking around longer to keep overlay scrollbar visible longer, allowing users to more easily\n // grab it to drag more\n subGrid.showOverlayScroller();\n }\n }\n grid.trigger('horizontalScroll', {\n subGrid,\n grid,\n scrollLeft : subGrid.scrollable.scrollLeft,\n scrollX : subGrid.scrollable.x,\n scrollingToCenter : subGrid?.scrollingToCenter\n });\n }\n /**\n * Scrolls a column into view (if it is not already). Called by Grid#scrollColumnIntoView, use it instead to not\n * have to care about which SubGrid contains a column.\n * @param {Grid.column.Column|String|Number} column Column name (data) or column index or actual column object.\n * @param {BryntumScrollOptions} [options] How to scroll.\n * @returns {Promise} If the column exists, a promise which is resolved when the column header element has been\n * scrolled into view.\n */\n scrollColumnIntoView(column, options) {\n const\n { columns, header } = this,\n scroller = header.scrollable;\n // Allow column,column id,or column index to be passed\n column = (column instanceof Column) ? column : columns.get(column) || columns.getById(column) || columns.getAt(column);\n if (column) {\n // Get the current column header element.\n const columnHeaderElement = header.getHeader(column.id);\n if (columnHeaderElement) {\n return scroller.scrollIntoView(Rectangle.from(columnHeaderElement, null, true), options);\n }\n }\n }\n //endregion\n //region Rows\n /**\n * Creates elements for the new rows when RowManager has determined that more rows are needed\n * @private\n */\n onAddRow({ source = this.grid.rowManager, rows, isExport }) {\n const\n me = this,\n { region } = me,\n config = me.rowElementConfig,\n frag = document.createDocumentFragment(),\n insertRowsBefore = source.rows[rows[rows.length - 1].index + 1]?.elements[region];\n rows.forEach(row => {\n const rowElement = DomHelper.createElement(config);\n DomHelper.syncClassList(rowElement, row.cls);\n frag.appendChild(rowElement);\n row.addElement(region, rowElement);\n me.fixCellWidths(rowElement);\n });\n // Do not insert elements to DOM if we're exporting them\n if (!isExport) {\n me.fixRowWidthsInSafariEdge();\n // Put the row elements into the SubGrid en masse.\n // If 2nd param is null, insertBefore appends.\n me.element.insertBefore(frag, insertRowsBefore || me.insertRowsBefore);\n }\n }\n /**\n * Get all row elements for this SubGrid.\n * @property {HTMLElement[]}\n * @readonly\n */\n get rowElements() {\n return this.fromCache('.b-grid-row', true);\n }\n /**\n * Removes all row elements from the subgrids body and empties cache\n * @private\n */\n clearRows() {\n this.emptyCache();\n const\n all = this.element.querySelectorAll('.b-grid-row'),\n range = document.createRange();\n if (all.length) {\n range.setStartBefore(all[0]);\n range.setEndAfter(all[all.length - 1]);\n range.deleteContents();\n }\n }\n // only called when RowManager.rowScrollMode = 'dom', which is not intended to be used\n addNewRowElement() {\n const rowElement = DomHelper.append(this.element, this.rowElementConfig);\n this.fixCellWidths(rowElement);\n return rowElement;\n }\n get store() {\n return this.grid.store;\n }\n get rowManager() {\n return this.grid?.rowManager;\n }\n //endregion\n // region Expand/collapse\n /**\n * Get/set collapsed state\n * @property {Boolean}\n */\n get collapsed() {\n return this._collapsed;\n }\n set collapsed(collapsed) {\n if (this.isConfiguring) {\n this._collapsed = collapsed;\n }\n else {\n if (collapsed) {\n this.collapse();\n }\n else {\n this.expand();\n }\n }\n }\n /**\n * Collapses subgrid. If collapsing subgrid is the only one expanded, next subgrid to the right (or previous) will\n * be expanded.\n *\n * ```javascript\n * let locked = grid.getSubGrid('locked');\n * locked.collapse().then(() => {\n * console.log(locked.collapsed); // Logs 'True'\n * });\n *\n * let normal = grid.getSubGrid('normal');\n * normal.collapse().then(() => {\n * console.log(locked.collapsed); // Logs 'False'\n * console.log(normal.collapsed); // Logs 'True'\n * });\n * ```\n *\n * @returns {Promise} A Promise which resolves when this SubGrid is fully collapsed.\n */\n async collapse(animate) {\n const\n me = this,\n { grid, element } = me,\n nextRegion = grid.getSubGrid(grid.getNextRegion(me.region)),\n splitterOwner = me.splitterElement ? me : me.previousSibling;\n let { _beforeCollapseState } = me,\n // Count all expanded regions. Grid must always have at least one expanded region\n expandedRegions = 0;\n // Animation only supported for 2 sub grids for now\n animate = animate && Object.keys(grid.subGrids).length <= 2;\n if (grid.rendered && me._collapsed === true) {\n return;\n }\n if (animate) {\n return grid.runWithTransition(() => me.collapse());\n }\n me.isCollapsing = true;\n grid.eachSubGrid(subGrid => {\n subGrid !== me && !subGrid._collapsed && ++expandedRegions;\n });\n grid.syncSplits?.(other => other.subGrids[me.region]?.collapse());\n // Current region is the only one expanded, expand next region\n if (expandedRegions === 0) {\n // When splitting, not all splits will have all regions\n if (!nextRegion) {\n return;\n }\n // expandPromise = nextRegion.expand();\n await nextRegion.expand();\n }\n let widthChanged = false;\n if (!_beforeCollapseState) {\n _beforeCollapseState = me._beforeCollapseState = {};\n // If current width is zero, the resize event will not be fired. In such case we want to trigger callback immediately\n if (me.width) {\n widthChanged = true;\n }\n // When trying to collapse region we need its partner to occupy free space. Considering multiple\n // regions, several cases are possible:\n // 1) Both left and right regions have fixed width\n // 2) Left region has fixed width, right region is flexed\n // 3) Left region is flexed, right region has fixed width\n // 4) Both regions are flexed\n //\n // To collapse flexed region we need to remove flex style, remember it somehow and set fixed width.\n // If another region is flexed, it will fill the space. If it has fixed width, we need to increase\n // its width by collapsing region width. Same logic should be applied to headers.\n //\n // Save region width first\n _beforeCollapseState.width = me.width;\n _beforeCollapseState.elementWidth = element.style.width;\n // Current region is flexed, store style to restore on expand\n if (element.style.flex !== '') {\n _beforeCollapseState.flex = element.style.flex;\n // remove flex state to reduce width later\n me.header.element.style.flex = element.style.flex = '';\n }\n // Next region is not flexed, need to make it fill the space\n if (nextRegion.element.style.flex === '') {\n _beforeCollapseState.nextRegionWidth = nextRegion.width;\n nextRegion.width = '';\n nextRegion.flex = `1 1 ${_beforeCollapseState.nextRegionWidth}px`;\n }\n // Sets the grid to its collapsed width as defined in SASS: zero\n element.classList.add('b-grid-subgrid-collapsed');\n // The parallel elements which must be in sync width-wise must know about collapsing\n me.virtualScrollerElement.classList.add('b-collapsed');\n me.header.element.classList.add('b-collapsed');\n me.footer.element.classList.add('b-collapsed');\n me._collapsed = true;\n me.width = '';\n if (!widthChanged) {\n // sync splitters in case subGrid was collapsed by state (https://github.com/bryntum/support/issues/1857)\n me.syncParallelSplitters(true);\n }\n }\n // Check if grid is animating before awaiting animations. This ensures synchronous execution\n // when there's no animation, as the initial call expects synchronous behavior.\n // Without this check, hitting 'await' shifts execution to microtasks, altering the execution flow.\n if (grid.isAnimating) {\n await grid.waitForAnimations();\n }\n grid.trigger('subGridCollapse', { subGrid : me });\n grid.afterToggleSubGrid({ subGrid : me, collapsed : true });\n me.isCollapsing = false;\n grid.trigger('afterInternalResize');\n if (!me.isDestroyed) {\n if (widthChanged) {\n grid.refreshVirtualScrollbars();\n me.syncParallelSplitters(true);\n // Our splitter is permanently visible when collapsed, so keep splitter button set\n // synced in the vertical centre of the view just in time for paint.\n // Uses translateY so will not cause a further layout.\n splitterOwner.startSplitterButtonSyncing?.();\n }\n }\n }\n /**\n * Expands subgrid.\n *\n * ```javascript\n * grid.getSubGrid('locked').expand().then(() => console.log('locked grid expanded'));\n * ```\n *\n * @returns {Promise} A Promise which resolves when this SubGrid is fully expanded.\n */\n async expand(animate) {\n const\n me = this,\n {\n grid,\n _beforeCollapseState\n } = me,\n nextRegion = grid.getSubGrid(grid.getNextRegion(me.region)),\n splitterOwner = me.splitterElement ? me : me.previousSibling;\n // Animation only supported for 2 sub grids for now\n animate = animate && Object.keys(grid.subGrids).length <= 2;\n if (grid.rendered && me._collapsed !== true) {\n return;\n }\n if (animate) {\n return grid.runWithTransition(() => me.expand());\n }\n me.isExpanding = true;\n grid.syncSplits?.(other => other.subGrids[me.region]?.expand());\n if (_beforeCollapseState != null) {\n // If current width matches width expected after expand resize event will not be fired. In such case\n // we want to trigger callback immediately\n let widthChanged = false;\n // See similar clause in collapse method above\n if (me.width !== _beforeCollapseState.elementWidth) {\n widthChanged = true;\n }\n // previous region is not flexed, reduce its width as it was increased in collapse\n if (_beforeCollapseState.nextRegionWidth) {\n nextRegion.width = _beforeCollapseState.nextRegionWidth;\n nextRegion.flex = null;\n }\n me.element.classList.remove('b-grid-subgrid-collapsed');\n me._collapsed = false;\n // The parallel elements which must be in sync width-wise must know about collapsing\n me.virtualScrollerElement.classList.remove('b-collapsed');\n me.header.element.classList.remove('b-collapsed');\n me.footer.element.classList.remove('b-collapsed');\n // This region used to be flex, let's restore it\n if (_beforeCollapseState.flex) {\n // Always restore width, restoring flex won't trigger resize otherwise\n me.width = _beforeCollapseState.width;\n // Widget flex setting clears style width\n me.header.flex = me.flex = _beforeCollapseState.flex;\n me.footer.flex = _beforeCollapseState.flex;\n me._width = null;\n }\n else {\n me.width = _beforeCollapseState.elementWidth;\n }\n me.element.classList.remove('b-grid-subgrid-collapsed');\n me._collapsed = false;\n if (widthChanged) {\n // Our splitter buttons are hidden when expanded, so we no longer need to keep splitter button set\n // synced in the vertical centre of the view.\n splitterOwner.stopSplitterButtonSyncing();\n me.syncParallelSplitters(false);\n }\n delete me._beforeCollapseState;\n }\n // Check if grid is animating before awaiting animations. This ensures synchronous execution\n // when there's no animation, as the initial call expects synchronous behavior.\n // Without this check, hitting 'await' shifts execution to microtasks, altering the execution flow.\n if (grid.isAnimating) {\n await grid.waitForAnimations();\n }\n grid.trigger('subGridExpand', { subGrid : me });\n grid.afterToggleSubGrid({ subGrid : me, collapsed : false });\n me.isExpanding = false;\n grid.trigger('afterInternalResize');\n }\n hide() {\n this.header?.hide();\n this.footer?.hide();\n this.hideSplitter();\n return super.hide();\n }\n show() {\n const me = this;\n me.header?.show();\n me.footer?.show();\n // Show splitter if not last region\n if (me.region !== me.grid.regions[me.grid.regions.length - 1]) {\n me.showSplitter();\n }\n return super.show();\n }\n //endregion\n}\n// Register this widget type with its Factory\nSubGrid.initClass();\nSubGrid._$name = 'SubGrid';", "import Base from '../../../Core/Base.js';\nimport Column from '../../column/Column.js';\nimport SubGrid from '../SubGrid.js';\nimport ArrayHelper from '../../../Core/helper/ArrayHelper.js';\nimport DomHelper from '../../../Core/helper/DomHelper.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\n/**\n * @module Grid/view/mixin/GridSubGrids\n */\n/**\n * Mixin for grid that handles SubGrids. Each SubGrid is scrollable horizontally separately from the other SubGrids.\n * Having two SubGrids allows you to achieve what is usually called locked or frozen columns.\n *\n * By default a Grid has two SubGrids, one named 'locked' and one 'normal'. The `locked` region has fixed width, while\n * the `normal` region grows to fill all available width (flex).\n *\n * Which SubGrid a column belongs to is determined using its {@link Grid.column.Column#config-region} config. For\n * example to put a column into the locked region, specify `{ region: 'locked' }`. For convenience, a column can be put\n * in the locked region using `{ locked: true }`.\n *\n * ```javascript\n * new Grid({\n * columns : [\n * // These two columns both end up in the \"locked\" region\n * { field: 'name', text: 'Name', locked: true }\n * { field: 'age', text: 'Age', region: 'locked' }\n * ]\n * });\n * ```\n *\n * To customize the SubGrids, use {@link Grid.view.Grid#config-subGridConfigs}:\n *\n * ```javascript\n * // change the predefined subgrids\n * new Grid({\n * subGridConfigs : {\n * locked : { flex : 1 } ,\n * normal : { flex : 3 }\n * }\n * })\n *\n * // or define your own entirely\n * new Grid({\n * subGridConfigs : {\n * a : { width : 150 } ,\n * b : { flex : 1 },\n * c : { width : 150 }\n * },\n *\n * columns : [\n * { field : 'name', text : 'Name', region : 'a' },\n * ...\n * ]\n * })\n * ```\n *\n * @demo Grid/lockedcolumns\n * @mixin\n */\nexport default Target => class GridSubGrids extends (Target || Base) {\n static get $name() {\n return 'GridSubGrids';\n }\n static get properties() {\n return {\n /**\n * An object containing the {@link Grid.view.SubGrid} region instances, indexed by subGrid id ('locked', normal'...)\n * @member {Object} subGrids\n * @readonly\n * @category Common\n */\n subGrids : {}\n };\n }\n //region Init\n changeSubGridConfigs(configs) {\n const\n me = this,\n usedRegions = new Set();\n for (const column of me.columns) {\n const { region } = column;\n // Allow specifying regions for undefined subgrids\n if (region) {\n if (!configs[region]) {\n configs[region] = {};\n }\n usedRegions.add(region);\n }\n }\n // Implementer has provided configs for other subGrids but not normal, put defaults in place\n if (configs.normal && ObjectHelper.isEmpty(configs.normal)) {\n configs.normal = { flex : 1 };\n }\n for (const region of usedRegions) {\n me.createSubGrid(region, configs[region]);\n }\n // Add them to Grid\n me.items = me.subGrids;\n return configs;\n }\n createSubGrid(region, config = null) {\n const\n me = this,\n subGridColumns = me.columns.makeChained(column => column.region === region, ['region']),\n subGridConfig = ObjectHelper.assign({\n type : 'subgrid',\n id : `${me.id}-${region}Subgrid`,\n parent : me,\n grid : me,\n region,\n headerClass : me.headerClass,\n footerClass : me.footerClass,\n columns : subGridColumns,\n // Sort by region unless weight is explicitly defined\n weight : region,\n // SubGridScrollers know about the main grid's scroller so that if asked to\n // scroll vertically they know how to do it.\n scrollable : {\n yScroller : me.scrollable\n }\n }, config || me.subGridConfigs[region]);\n let hasCalculatedWidth = false;\n if (!subGridConfig.flex && !subGridConfig.width) {\n subGridConfig.width = subGridColumns.totalFixedWidth;\n hasCalculatedWidth = true;\n }\n // Subclasses may inject a type property to create custom SubGrids\n const subGrid = me.subGrids[region] = SubGrid.create(subGridConfig);\n subGrid.element.style.setProperty('--total-column-width', subGridColumns.totalFixedWidth);\n // Must be set after creation, otherwise reset in SubGrid#set width\n subGrid.hasCalculatedWidth = hasCalculatedWidth;\n if (region === me.regions[0]) {\n // Have already done lookups for this in a couple of places, might as well store it...\n subGrid.isFirstRegion = true;\n }\n return subGrid;\n }\n // A SubGrid is added to Grid, add its header etc. too\n onChildAdd(subGrid) {\n if (subGrid.isSubGrid) {\n const\n me = this,\n {\n items,\n headerContainer,\n virtualScrollers,\n footerContainer\n } = me,\n // 2 elements per index, actual element + splitter\n index = items.indexOf(subGrid) * 2;\n // If some columns flex, they must be rendered since these widths as rendered\n // will define the total column width which must be applied to the rows.\n if (!me.hideHeaders || me.columns.some(c => c.flex)) {\n DomHelper.insertAt(headerContainer, subGrid.headerSplitter, index);\n DomHelper.insertAt(headerContainer, subGrid.header.element, index);\n }\n DomHelper.insertAt(virtualScrollers, subGrid.scrollerSplitter, index);\n DomHelper.insertAt(virtualScrollers, subGrid.virtualScrollerElement, index);\n DomHelper.insertAt(footerContainer, subGrid.footerSplitter, index);\n DomHelper.insertAt(footerContainer, subGrid.footer.element, index);\n // Show splitter for all except last (new might not sort last, depending on weight)\n items.forEach((subGrid, i) => {\n if (i < items.length - 1) {\n subGrid.showSplitter();\n }\n });\n // Empty text should be displayed in the first subgrid\n if (index === 0 && me.emptyTextEl) {\n subGrid.element.appendChild(me.emptyTextEl);\n }\n }\n return super.onChildAdd(subGrid);\n }\n // A SubGrid is remove from grid, remove its header etc. too\n onChildRemove(subGrid) {\n super.onChildRemove(subGrid);\n if (subGrid.isSubGrid) {\n const { items } = this;\n delete this.subGrids[subGrid.region];\n ArrayHelper.remove(this.regions, subGrid.region);\n subGrid.destroy();\n // Make sure the new last splitter is hidden\n if (items.length) {\n items[items.length - 1].hideSplitter();\n }\n }\n }\n doDestroy() {\n this.eachSubGrid(subGrid => subGrid.destroy());\n super.doDestroy();\n }\n //endregion\n //region Iteration & calling\n /**\n * Iterate over all subGrids, calling the supplied function for each.\n * @param {Function} fn Function to call for each instance\n * @param {Object} thisObj `this` reference to call the function in, defaults to the subGrid itself\n * @category SubGrid\n * @internal\n */\n eachSubGrid(fn, thisObj = null) {\n this.items.forEach((subGrid, i) => {\n subGrid.isSubGrid && fn.call(thisObj || subGrid, subGrid, i++);\n });\n }\n /**\n * Call a function by name for all subGrids (that have the function).\n * @param {String} fnName Name of function to call, uses the subGrid itself as `this` reference\n * @param params Parameters to call the function with\n * @returns {*} Return value from first SubGrid is returned\n * @category SubGrid\n * @internal\n */\n callEachSubGrid(fnName, ...params) {\n let returnValue = null;\n this.items.forEach((subGrid, i) => {\n if (subGrid.isSubGrid && subGrid[fnName]) {\n const partialReturnValue = subGrid[fnName](...params);\n if (i === 0) returnValue = partialReturnValue;\n }\n });\n return returnValue;\n }\n //endregion\n //region Getters\n get regions() {\n return this.items.map(item => item.region);\n }\n /**\n * This method should return names of the two last regions in the grid as they are visible in the UI. In case\n * `regions` property cannot be trusted, use different approach. Used by SubGrid and RegionResize to figure out\n * which region should collapse or expand.\n * @returns {String[]}\n * @private\n * @category SubGrid\n */\n getLastRegions() {\n const result = this.regions.slice(-2);\n // ALWAYS return array of length 2 in order to avoid extra conditions. Normally should not be called with 1 region\n return result.length === 2 ? result : [result[0], result[0]];\n }\n /**\n * This method should return right neighbour for passed region, or left neighbour in case last visible region is passed.\n * This method is used to decide which subgrid should take space of the collapsed one.\n * @param {String} region\n * @returns {String}\n * @private\n * @category SubGrid\n */\n getNextRegion(region) {\n const regions = this.regions;\n // return next region or next to last\n return regions[regions.indexOf(region) + 1] || regions[regions.length - 2];\n }\n getPreviousRegion(region) {\n return this.regions[this.regions.indexOf(region) - 1];\n }\n /**\n * Returns the subGrid for the specified region.\n * @param {String} region Region, eg. locked or normal (per default)\n * @returns {Grid.view.SubGrid} A subGrid\n * @category SubGrid\n */\n getSubGrid(region) {\n return this.subGrids[region];\n }\n /**\n * Get the SubGrid that contains specified column\n * @param {String|Grid.column.Column} column Column \"name\" or column object\n * @returns {Grid.view.SubGrid}\n * @category SubGrid\n */\n getSubGridFromColumn(column) {\n column = column instanceof Column ? column : this.columns.getById(column) || this.columns.get(column);\n return this.getSubGrid(column.region);\n }\n //endregion\n /**\n * Returns splitter element for subgrid\n * @param {Grid.view.SubGrid|String} subGrid\n * @returns {HTMLElement}\n * @private\n * @category SubGrid\n */\n resolveSplitter(subGrid) {\n const regions = this.getLastRegions();\n let region = subGrid instanceof SubGrid ? subGrid.region : subGrid;\n if (regions[1] === region) {\n region = regions[0];\n }\n return this.subGrids[region].splitterElement;\n }\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "import LocaleHelper from '../../Core/localization/LocaleHelper.js';\nimport '../../Core/localization/En.js';\nconst emptyString = new String();\nconst locale = {\n localeName : 'En',\n localeDesc : 'English (US)',\n localeCode : 'en-US',\n ColumnPicker : {\n column : 'Column',\n columnsMenu : 'Columns',\n hideColumn : 'Hide column',\n hideColumnShort : 'Hide',\n newColumns : 'New columns'\n },\n Filter : {\n applyFilter : 'Apply filter',\n filter : 'Filter',\n editFilter : 'Edit filter',\n on : 'On',\n before : 'Before',\n after : 'After',\n equals : 'Equals',\n lessThan : 'Less than',\n moreThan : 'More than',\n removeFilter : 'Remove filter',\n disableFilter : 'Disable filter'\n },\n FilterBar : {\n enableFilterBar : 'Show filter bar',\n disableFilterBar : 'Hide filter bar'\n },\n Group : {\n group : 'Group',\n groupAscending : 'Group ascending',\n groupDescending : 'Group descending',\n groupAscendingShort : 'Ascending',\n groupDescendingShort : 'Descending',\n stopGrouping : 'Stop grouping',\n stopGroupingShort : 'Stop'\n },\n HeaderMenu : {\n moveBefore : text => `Move before \"${text}\"`,\n moveAfter : text => `Move after \"${text}\"`,\n collapseColumn : 'Collapse column',\n expandColumn : 'Expand column'\n },\n ColumnRename : {\n rename : 'Rename'\n },\n MergeCells : {\n mergeCells : 'Merge cells',\n menuTooltip : 'Merge cells with same value when sorted by this column'\n },\n Search : {\n searchForValue : 'Search for value'\n },\n Sort : {\n sort : 'Sort',\n sortAscending : 'Sort ascending',\n sortDescending : 'Sort descending',\n multiSort : 'Multi sort',\n removeSorter : 'Remove sorter',\n addSortAscending : 'Add ascending sorter',\n addSortDescending : 'Add descending sorter',\n toggleSortAscending : 'Change to ascending',\n toggleSortDescending : 'Change to descending',\n sortAscendingShort : 'Ascending',\n sortDescendingShort : 'Descending',\n removeSorterShort : 'Remove',\n addSortAscendingShort : '+ Ascending',\n addSortDescendingShort : '+ Descending'\n },\n Split : {\n split : 'Split',\n unsplit : 'Unsplit',\n horizontally : 'Horizontally',\n vertically : 'Vertically',\n both : 'Both'\n },\n Column : {\n columnLabel : column => `${column.text ? `${column.text} column. ` : ''}SPACE for context menu${column.sortable ? ', ENTER to sort' : ''}`,\n cellLabel : emptyString\n },\n Checkbox : {\n toggleRowSelect : 'Toggle row selection',\n toggleSelection : 'Toggle selection of entire dataset'\n },\n RatingColumn : {\n cellLabel : column => `${column.text ? column.text : ''} ${column.location?.record ? `rating : ${column.location.record.get(column.field) || 0}` : ''}`\n },\n GridBase : {\n loadFailedMessage : 'Data loading failed!',\n syncFailedMessage : 'Data synchronization failed!',\n unspecifiedFailure : 'Unspecified failure',\n networkFailure : 'Network error',\n parseFailure : 'Failed to parse server response',\n serverResponse : 'Server response:',\n noRows : 'No records to display',\n moveColumnLeft : 'Move to left section',\n moveColumnRight : 'Move to right section',\n moveColumnTo : region => `Move column to ${region}`\n },\n CellMenu : {\n removeRow : 'Delete'\n },\n RowCopyPaste : {\n copyRecord : 'Copy',\n cutRecord : 'Cut',\n pasteRecord : 'Paste',\n rows : 'rows',\n row : 'row'\n },\n CellCopyPaste : {\n copy : 'Copy',\n cut : 'Cut',\n paste : 'Paste'\n },\n PdfExport : {\n 'Waiting for response from server' : 'Waiting for response from server...',\n 'Export failed' : 'Export failed',\n 'Server error' : 'Server error',\n 'Generating pages' : 'Generating pages...',\n 'Click to abort' : 'Cancel'\n },\n ExportDialog : {\n width : '40em',\n labelWidth : '12em',\n exportSettings : 'Export settings',\n export : 'Export',\n printSettings : 'Print settings',\n print : 'Print',\n exporterType : 'Control pagination',\n cancel : 'Cancel',\n fileFormat : 'File format',\n rows : 'Rows',\n alignRows : 'Align rows',\n columns : 'Columns',\n paperFormat : 'Paper format',\n orientation : 'Orientation',\n repeatHeader : 'Repeat header'\n },\n ExportRowsCombo : {\n all : 'All rows',\n visible : 'Visible rows'\n },\n ExportOrientationCombo : {\n portrait : 'Portrait',\n landscape : 'Landscape'\n },\n SinglePageExporter : {\n singlepage : 'Single page'\n },\n MultiPageExporter : {\n multipage : 'Multiple pages',\n exportingPage : ({ currentPage, totalPages }) => `Exporting page ${currentPage}/${totalPages}`\n },\n MultiPageVerticalExporter : {\n multipagevertical : 'Multiple pages (vertical)',\n exportingPage : ({ currentPage, totalPages }) => `Exporting page ${currentPage}/${totalPages}`\n },\n RowExpander : {\n loading : 'Loading',\n expand : 'Expand',\n collapse : 'Collapse'\n },\n TreeGroup : {\n group : 'Group by',\n stopGrouping : 'Stop grouping',\n stopGroupingThisColumn : 'Ungroup column'\n }\n};\nexport default LocaleHelper.publishLocale(locale);\n", "//region Import\nimport Base from '../../Core/Base.js';\nimport AjaxStore from '../../Core/data/AjaxStore.js';\nimport DomDataStore from '../../Core/data/DomDataStore.js';\nimport Store from '../../Core/data/Store.js';\nimport ArrayHelper from '../../Core/helper/ArrayHelper.js';\nimport BrowserHelper from '../../Core/helper/BrowserHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport EventHelper from '../../Core/helper/EventHelper.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport Rectangle from '../../Core/helper/util/Rectangle.js';\nimport VersionHelper from '../../Core/helper/VersionHelper.js';\nimport ScrollManager from '../../Core/util/ScrollManager.js';\nimport Mask from '../../Core/widget/Mask.js';\nimport Panel from '../../Core/widget/Panel.js';\nimport GlobalEvents from '../../Core/GlobalEvents.js';\nimport LocaleManager from '../../Core/localization/LocaleManager.js';\nimport Pluggable from '../../Core/mixin/Pluggable.js';\nimport State from '../../Core/mixin/State.js';\nimport ColumnStore, { columnResizeEvent } from '../data/ColumnStore.js';\nimport GridRowModel from '../data/GridRowModel.js';\nimport RowManager from '../row/RowManager.js';\nimport GridScroller from '../util/GridScroller.js';\nimport Location from '../util/Location.js';\nimport Header from './Header.js';\nimport Footer from './Footer.js';\nimport GridElementEvents from './mixin/GridElementEvents.js';\nimport GridFeatures from './mixin/GridFeatures.js';\nimport GridNavigation from './mixin/GridNavigation.js';\nimport GridResponsive from './mixin/GridResponsive.js';\nimport GridSelection from './mixin/GridSelection.js';\nimport GridState from './mixin/GridState.js';\nimport GridSubGrids from './mixin/GridSubGrids.js';\nimport LoadMaskable from '../../Core/mixin/LoadMaskable.js';\nimport Column from '../column/Column.js';\n// Needed since Grid now has its own localization\nimport '../localization/En.js';\n//endregion\n/**\n * @module Grid/view/GridBase\n */\n/**\n * Additional options for the {@link Grid.view.GridBase#config-preserveScroll} configuration.\n *\n * @typedef {Object} PreserveScrollOptions\n * @property {Boolean} overscroll When there is not enough content remaining in the viewport to preserve the current\n * scroll position (for example, if rows below have been removed), allow the viewport to temporarily include empty\n * space beyond the available content, in order to avoid scrolling.\n */\nconst\n resolvedPromise = new Promise(resolve => resolve()),\n storeListenerName = 'GridBase:store',\n exitTransition = {\n fn : 'exitTransition',\n delay : 0,\n cancelOutstanding : true\n },\n defaultScrollOptions = {\n block : 'nearest',\n inline : 'nearest'\n },\n datasetReplaceActions = {\n dataset : 1,\n pageLoad : 1,\n filter : 1\n },\n emptyArray = Object.freeze([]),\n ascending = (l, r) => l - r;\n/**\n * A thin base class for {@link Grid.view.Grid}. Does not include any features by default, allowing smaller custom-built\n * bundles if used in place of {@link Grid.view.Grid}.\n *\n * **NOTE:** In most scenarios you probably want to use Grid instead of GridBase.\n * @extends Core/widget/Panel\n *\n * @mixes Core/mixin/Pluggable\n * @mixes Core/mixin/State\n * @mixes Grid/view/mixin/GridElementEvents\n * @mixes Grid/view/mixin/GridFeatures\n * @mixes Grid/view/mixin/GridResponsive\n * @mixes Grid/view/mixin/GridSelection\n * @mixes Grid/view/mixin/GridState\n * @mixes Grid/view/mixin/GridSubGrids\n * @mixes Core/mixin/LoadMaskable\n *\n * @features Grid/feature/CellCopyPaste\n * @features Grid/feature/CellEdit\n * @features Grid/feature/CellMenu\n * @features Grid/feature/CellTooltip\n * @features Grid/feature/ColumnAutoWidth\n * @features Grid/feature/ColumnDragToolbar\n * @features Grid/feature/ColumnPicker\n * @features Grid/feature/ColumnRename\n * @features Grid/feature/ColumnReorder\n * @features Grid/feature/ColumnResize\n * @features Grid/feature/FillHandle\n * @features Grid/feature/Filter\n * @features Grid/feature/FilterBar\n * @features Grid/feature/Group\n * @features Grid/feature/GroupSummary\n * @features Grid/feature/HeaderMenu\n * @features Grid/feature/MergeCells\n * @features Grid/feature/QuickFind\n * @features Grid/feature/RegionResize\n * @features Grid/feature/RowCopyPaste\n * @features Grid/feature/RowExpander\n * @features Grid/feature/RowReorder\n * @features Grid/feature/RowResize\n * @features Grid/feature/Search\n * @features Grid/feature/Sort\n * @features Grid/feature/Split\n * @features Grid/feature/StickyCells\n * @features Grid/feature/Stripe\n * @features Grid/feature/Summary\n * @features Grid/feature/Tree\n * @features Grid/feature/TreeGroup\n *\n * @features Grid/feature/experimental/ExcelExporter\n * @features Grid/feature/experimental/FileDrop\n *\n * @features Grid/feature/export/PdfExport\n * @features Grid/feature/export/Print\n *\n * @plugins Grid/row/RowManager\n * @widget\n */\nexport default class GridBase extends Panel.mixin(\n Pluggable,\n State,\n GridElementEvents,\n GridFeatures,\n GridNavigation,\n GridResponsive,\n GridSelection,\n GridState,\n GridSubGrids,\n LoadMaskable\n) {\n //region Config\n static get $name() {\n return 'GridBase';\n }\n // Factoryable type name\n static get type() {\n return 'gridbase';\n }\n static get delayable() {\n return {\n onGridVerticalScroll : {\n type : 'raf'\n },\n // These use a shorter delay for tests, see finishConfigure()\n bufferedAfterColumnsResized : 250,\n bufferedElementResize : 250\n };\n }\n static get configurable() {\n return {\n //region Hidden configs\n /**\n * @hideconfigs autoUpdateRecord, defaults, hideWhenEmpty, itemCls, items, layout, layoutStyle, lazyItems, namedItems, record, textContent, defaultAction, html, htmlCls, tag, textAlign, trapFocus, content, defaultBindProperty, ripple, defaultFocus, align, anchor, centered, constrainTo, draggable, floating, hideAnimation, positioned, scrollAction, showAnimation, x, y, localeClass, localizableProperties, showTooltipWhenDisabled, tooltip, strictRecordMapping, maximizeOnMobile\n */\n /**\n * @hideproperties html, isSettingValues, isValid, items, record, values, content, layoutStyle, firstItem, lastItem, anchorSize, x, y, layout, strictRecordMapping, visibleChildCount, maximizeOnMobile\n */\n /**\n * @hidefunctions attachTooltip, add, getWidgetById, insert, processWidgetConfig, remove, removeAll, getAt, alignTo, setXY, showBy, showByPoint, toFront\n */\n //endregion\n /**\n * Set to `true` to make the grid read-only, by disabling any UIs for modifying data.\n *\n * __Note that checks MUST always also be applied at the server side.__\n * @prp {Boolean} readOnly\n * @default false\n * @category Misc\n */\n /**\n * Automatically set grids height to fit all rows (no scrolling in the grid). In general you should avoid\n * using `autoHeight: true`, since it will bypass Grids virtual rendering and render all rows at once, which\n * in a larger grid is really bad for performance.\n * @config {Boolean}\n * @default false\n * @category Layout\n */\n autoHeight : null,\n /**\n * Configure this as `true` to allow elements within cells to be styled as `position: sticky`.\n *\n * Columns which contain sticky content will need to be configured with\n *\n * ```javascript\n * cellCls : 'b-sticky-cell',\n * ```\n *\n * Or a custom renderer can add the class to the passed cell element.\n *\n * It is up to the application author how to style the cell content. It is recommended that\n * a custom renderer create content with CSS class names which the application author\n * will use to apply the `position`, and matching `margin-top` and `top` styles to keep the\n * content stuck at the grid's top.\n *\n * Note that not all browsers support this CSS feature. A cross browser alternative\n * is to use the {link Grid.feature.StickyCells StickyCells} Feature.\n * @config {Boolean}\n * @category Misc\n */\n enableSticky : null,\n /**\n * Set to true to allow text selection in the grid cells. Note, this cannot be used simultaneously with the\n * `RowReorder` feature.\n * @config {Boolean}\n * @default false\n * @category Selection\n */\n enableTextSelection : null,\n /**\n * Set to `true` to stretch the last column in a grid with all fixed width columns\n * to fill extra available space if the grid's width is wider than the sum of all\n * configured column widths.\n * @config {Boolean}\n * @default\n * @category Layout\n */\n fillLastColumn : true,\n /**\n * See {@link Grid.view.Grid#keyboard-shortcuts Keyboard shortcuts} for details\n * @config {Object} keyMap\n * @category Common\n */\n positionMode : 'translate', // translate, translate3d, position\n /**\n * Configure as `true` to have the grid show a red \"changed\" tag in cells who's\n * field value has changed and not yet been committed.\n *\n * Set `showDirty.duringEdit` to `true` to show the red tag while editing a cell\n * ```javascript\n * showDirty : {\n * duringEdit : true\n * }\n * ```\n *\n * @config {Boolean|Object}\n * @property {Boolean} showDirty.duringEdit Set to `true` to show the red tag while editing a cell\n * @default false\n * @category Misc\n */\n showDirty : null,\n /**\n * An object containing sub grid configuration objects keyed by a `region` property.\n * By default, grid has a 'locked' region (if configured with locked columns) and a 'normal' region.\n * The 'normal' region defaults to use `flex: 1`.\n *\n * This config can be used to reconfigure the \"built-in\" sub grids or to define your own.\n *\n * Redefining the default regions:\n *\n * {@frameworktabs}\n * {@js}\n * ```javascript\n * new Grid({\n * subGridConfigs : {\n * locked : { flex : 1 },\n * normal : { width : 100 }\n * }\n * });\n * ```\n * {@endjs}\n * {@react}\n * ```jsx\n * const App = props => {\n * const subGridConfigs = {\n * locked : { flex : 1 },\n * normal : { width : 100 }\n * };\n *\n * return \n * }\n * ```\n * {@endreact}\n * {@vue}\n * ```html\n * \n * ```\n * ```javascript\n * export default {\n * setup() {\n * return {\n * subGridConfigs : [\n * locked : { flex : 1 },\n * normal : { width : 100 }\n * ]\n * };\n * }\n * }\n * ```\n * {@endvue}\n * {@angular}\n * ```html\n * \n * ```\n * ```typescript\n * export class AppComponent {\n * subGridConfigs = [\n * locked : { flex : 1 },\n * normal : { width : 100 }\n * ]\n * }\n * ```\n * {@endangular}\n * {@endframeworktabs}\n *\n * Defining your own multi region grid:\n *\n * ```javascript\n * new Grid({\n * subGridConfigs : {\n * left : { width : 100 },\n * middle : { flex : 1 },\n * right : { width : 100 }\n * },\n *\n * columns : [\n * { field : 'manufacturer', text: 'Manufacturer', region : 'left' },\n * { field : 'model', text: 'Model', region : 'middle' },\n * { field : 'year', text: 'Year', region : 'middle' },\n * { field : 'sales', text: 'Sales', region : 'right' }\n * ]\n * });\n * ```\n * @config {Object}\n * @category Misc\n */\n subGridConfigs : {\n normal : { flex : 1 }\n },\n /**\n * Store that holds records to display in the grid, or a store config object. If the configuration contains\n * a `readUrl`, an `AjaxStore` will be created.\n *\n * Note that a store will be created during initialization if none is specified.\n *\n * Supplying a store config object at initialization time:\n *\n * ```javascript\n * const grid = new Grid({\n * store : {\n * fields : ['name', 'powers'],\n * data : [\n * { id : 1, name : 'Aquaman', powers : 'Decent swimmer' },\n * { id : 2, name : 'Flash', powers : 'Pretty fast' },\n * ]\n * }\n * });\n * ```\n *\n * Accessing the store at runtime:\n *\n * ```javascript\n * grid.store.sort('powers');\n * ```\n *\n * @prp {Core.data.Store}\n * @accepts {Core.data.Store|StoreConfig}\n * @typings {Core.data.Store|StoreConfig|Core.data.AjaxStore|AjaxStoreConfig}\n * @category Common\n */\n store : {\n value : {},\n $config : 'nullify'\n },\n rowManager : {\n value : {},\n $config : ['nullify', 'lazy']\n },\n /**\n * Configuration values for the {@link Core.util.ScrollManager} class on initialization. Returns the\n * {@link Core.util.ScrollManager} at runtime.\n *\n * @prp {Core.util.ScrollManager}\n * @accepts {ScrollManagerConfig|Core.util.ScrollManager}\n * @readonly\n * @category Scrolling\n */\n scrollManager : {\n value : {},\n $config : ['nullify', 'lazy']\n },\n /**\n * Accepts column definitions for the grid during initialization. They will be used to create\n * {@link Grid/column/Column} instances that are added to a {@link Grid/data/ColumnStore}.\n *\n * At runtime it is read-only and returns the {@link Grid/data/ColumnStore}.\n *\n * Initialization using column config objects:\n *\n * ```javascript\n * new Grid({\n * columns : [\n * { text : 'Alias', field : 'alias' },\n * { text : 'Superpower', field : 'power' }\n * ]\n * });\n * ```\n *\n * Also accepts a store config object:\n *\n * ```javascript\n * new Grid({\n * columns : {\n * data : [\n * { text : 'Alias', field : 'alias' },\n * { text : 'Superpower', field : 'power' }\n * ],\n * listeners : {\n * update() {\n * // Some update happened\n * }\n * }\n * }\n * });\n * ```\n *\n * Access the {@link Grid/data/ColumnStore} at runtime to manipulate columns:\n *\n * ```javascript\n * grid.columns.add({ field : 'column', text : 'New column' });\n * ```\n * @prp {Grid.data.ColumnStore}\n * @accepts {Grid.data.ColumnStore|GridColumnConfig[]|ColumnStoreConfig}\n * @readonly\n * @category Common\n */\n columns : {\n value : [],\n $config : 'nullify'\n },\n /**\n * Grid's `min-height`. Defaults to `10em` to be sure that the Grid always has a height wherever it is\n * inserted.\n *\n * Can be either a String or a Number (which will have 'px' appended).\n *\n * Note that _reading_ the value will return the numeric value in pixels.\n *\n * @config {String|Number}\n * @category Layout\n */\n minHeight : '10em',\n /**\n * Set to `true` to hide the column header elements\n * @prp {Boolean}\n * @default false\n * @category Misc\n */\n hideHeaders : null,\n /**\n * Set to `true` to hide the footer elements\n * @prp {Boolean}\n * @default\n * @category Misc\n */\n hideFooters : true,\n /**\n * Set to `true` to hide the Grid's horizontal scrollbar(s)\n * @config {Boolean}\n * @default false\n * @category Misc\n */\n hideHorizontalScrollbar : null,\n contentElMutationObserver : false,\n trapFocus : false,\n ariaElement : 'bodyElement',\n cellTabIndex : -1,\n rowCls : {\n value : 'b-grid-row',\n $config : {\n merge : this.mergeCls\n }\n },\n cellCls : {\n value : 'b-grid-cell',\n $config : {\n merge : this.mergeCls\n }\n },\n /**\n * Text or HTML, or a {@link DomConfig} block to display when there is no data to display in the grid\n * @prp {String|DomConfig}\n * @default\n * @category Common\n */\n emptyText : 'L{noRows}',\n sortFeatureStore : 'store',\n /**\n * Row height in pixels. This allows the default height for rows to be controlled. Note that it may be\n * overriden by specifying a {@link Grid/data/GridRowModel#field-rowHeight} on a per record basis, or from\n * a column {@link Grid/column/Column#config-renderer}.\n *\n * When initially configured as `null`, an empty row will be measured and its height will be used as default\n * row height, enabling it to be controlled using CSS\n *\n * @prp {Number}\n * @category Common\n */\n rowHeight : null,\n /**\n * Preserve the grid's vertical scroll position when changesets are applied, as in the case of remote\n * changes, or when stores are configured with {@link Core.data.Store#config-syncDataOnLoad}.\n *\n * @prp {PreserveScrollOptions|Boolean}\n * @default\n * @category Common\n */\n preserveScroll : false,\n /**\n * When the {@link Grid.feature.Tree} feature is in use and the Store is a tree store, this\n * config may be set to `true` to visually animate branch node expand and collapse operations.\n * {@note}This is not supported in Scheduler and Gantt{/@note}\n * @prp {Boolean}\n * @default false\n */\n animateTreeNodeToggle : VersionHelper.checkVersion('core', '6.0', '>='),\n /**\n * Set to `false` to not show column lines. End result might be overruled by/differ between themes.\n *\n * @prp {Boolean}\n * @default\n * @category Misc\n */\n columnLines : true,\n /**\n * Set to `false` to not show row lines. End result might be overruled by/differ between themes.\n *\n * @prp {Boolean}\n * @default\n * @category Misc\n */\n rowLines : true\n };\n }\n // Default settings, applied in grids constructor.\n static get defaultConfig() {\n return {\n /**\n * Use fixed row height. Setting this to `true` will configure the underlying RowManager to use fixed row\n * height, which sacrifices the ability to use rows with variable height to gain a fraction better\n * performance.\n *\n * Using this setting also ignores the {@link Grid.view.GridBase#config-getRowHeight} function, and thus any\n * row height set in data. Only Grids configured {@link Grid.view.GridBase#config-rowHeight} is used.\n *\n * @config {Boolean}\n * @category Layout\n */\n fixedRowHeight : null,\n /**\n * A function called for each row to determine its height. It is passed a {@link Core.data.Model record} and\n * expected to return the desired height of that records row. If the function returns a falsy value, Grids\n * configured {@link Grid.view.GridBase#config-rowHeight} is used.\n *\n * The default implementation of this function returns the row height from the records\n * {@link Grid.data.GridRowModel#field-rowHeight rowHeight field}.\n *\n * Override this function to take control over how row heights are determined:\n *\n * ```javascript\n * new Grid({\n * getRowHeight(record) {\n * if (record.low) {\n * return 20;\n * }\n * else if (record.high) {\n * return 60;\n * }\n *\n * // Will use grids configured rowHeight\n * return null;\n * }\n * });\n * ```\n *\n * NOTE: Height set in a Column renderer takes precedence over the height returned by this function.\n *\n * @config {Function} getRowHeight\n * @param {Core.data.Model} getRowHeight.record Record to determine row height for\n * @returns {Number} Desired row height\n * @category Layout\n */\n // used if no rowHeight specified and none found in CSS. not public since our themes have row height\n // specified and this is more of an internal failsafe\n defaultRowHeight : 45,\n /**\n * Refresh entire row when a record changes (`true`) or, if possible, only the cells affected (`false`).\n *\n * When this is set to `false`, then if a column uses a renderer, cells in that column will still\n * be updated because it is impossible to know whether the cells value will be affected.\n *\n * If a standard, provided Column class is used with no custom renderer, its cells will only be updated\n * if the column's {@link Grid.column.Column#config-field} is changed.\n * @config {Boolean}\n * @default\n * @category Misc\n */\n fullRowRefresh : true,\n /**\n * Specify `true` to preserve vertical scroll position after store actions that trigger a `refresh` event,\n * such as loading new data and filtering.\n * @config {Boolean}\n * @default false\n * @category Misc\n */\n preserveScrollOnDatasetChange : null,\n /**\n * True to preserve focused cell after loading new data\n * @config {Boolean}\n * @default\n * @category Misc\n */\n preserveFocusOnDatasetChange : true,\n /**\n * Convenient shortcut to set data in grids store both during initialization and at runtime. Can also be\n * used to retrieve data at runtime, although we do recommend interacting with Grids store instead using\n * the {@link #property-store} property.\n *\n * Setting initial data during initialization:\n *\n * ```javascript\n * const grid = new Grid({\n * data : [\n * { id : 1, name : 'Batman' },\n * { id : 2, name : 'Robin' },\n * ...\n * ]\n * });\n * ```\n *\n * Setting data at runtime:\n *\n * ```javascript\n * grid.data = [\n * { id : 3, name : 'Joker' },\n * ...\n * ];\n * ```\n *\n * Getting data at runtime:\n *\n * ```javascript\n * const records = store.data;\n * ```\n *\n * Note that a Store will be created during initialization if none is specified.\n *\n * @prp {Core.data.Model[]}\n * @accepts {Object[]|Core.data.Model[]}\n * @category Common\n */\n data : null,\n /**\n * Region to which columns are added when they have none specified\n * @config {String}\n * @default\n * @category Misc\n */\n defaultRegion : 'normal',\n /**\n * true to destroy the store when the grid is destroyed\n * @config {Boolean}\n * @default false\n * @category Misc\n */\n destroyStore : null,\n /**\n * Grids change the `maskDefaults` to cover only their `body` element.\n * @config {MaskConfig}\n * @category Misc\n */\n maskDefaults : {\n cover : 'body',\n target : 'element'\n },\n /**\n * Set to `false` to only measure cell contents when double clicking the edge between column headers.\n * @config {Boolean}\n * @default\n * @category Layout\n */\n resizeToFitIncludesHeader : true,\n /**\n * Set to `false` to prevent remove row animation and remove the delay related to that.\n * @config {Boolean}\n * @default\n * @category Misc\n */\n animateRemovingRows : true,\n /**\n * Set to `true` to not get a warning when using another base class than GridRowModel for your grid data. If\n * you do, and would like to use the full feature set of the grid then include the fields from GridRowModel\n * in your model definition.\n * @config {Boolean}\n * @default false\n * @category Misc\n */\n disableGridRowModelWarning : null,\n headerClass : Header,\n footerClass : Footer,\n testPerformance : false,\n rowScrollMode : 'move', // move, dom, all\n /**\n * Grid monitors window resize by default.\n * @config {Boolean}\n * @default true\n * @category Misc\n */\n monitorResize : true,\n /**\n * An object containing Feature configuration objects (or `true` if no configuration is required)\n * keyed by the Feature class name in all lowercase.\n * @config {Object}\n * @category Common\n */\n features : true,\n /**\n * Configures whether the grid is scrollable in the `Y` axis. This is used to configure a {@link Grid.util.GridScroller}.\n * See the {@link #config-scrollerClass} config option.\n * @config {Boolean|ScrollerConfig|Core.helper.util.Scroller}\n * @category Scrolling\n */\n scrollable : {\n // Just Y for now until we implement a special grid.view.Scroller subclass\n // Which handles the X scrolling of subgrids.\n overflowY : true\n },\n /**\n * The class to instantiate to use as the {@link #config-scrollable}. Defaults to {@link Grid.util.GridScroller}.\n * @config {Core.helper.util.Scroller}\n * @typings {typeof Scroller}\n * @category Scrolling\n */\n scrollerClass : GridScroller,\n refreshSuspended : 0,\n /**\n * Animation transition duration in milliseconds.\n * @prp {Number}\n * @default\n * @category Misc\n */\n transitionDuration : 500,\n /**\n * Event which is used to show context menus.\n * Available options are: 'contextmenu', 'click', 'dblclick'.\n * @config {'contextmenu'|'click'|'dblclick'}\n * @category Misc\n * @default\n */\n contextMenuTriggerEvent : 'contextmenu',\n localizableProperties : ['emptyText'],\n asyncEventSuffix : '',\n fixElementHeightsBuffer : 350,\n testConfig : {\n transitionDuration : 50,\n fixElementHeightsBuffer : 50\n }\n };\n }\n static get properties() {\n return {\n _selectedRecords : [],\n _verticalScrollHeight : 0,\n virtualScrollHeight : 0,\n _scrollTop : null\n };\n }\n static bindStoreChangeset = true;\n // Keep this commented out to have easy access to the syntax next time we need to use it\n // static get deprecatedEvents() {\n // return {\n // cellContextMenuBeforeShow : {\n // product : 'Grid',\n // invalidAsOfVersion : '5.0.0',\n // message : '`cellContextMenuBeforeShow` event is deprecated, in favor of `cellMenuBeforeShow` event. Please see https://bryntum.com/products/grid/docs/guide/Grid/upgrades/4.0.0 for more information.'\n // }\n // };\n // }\n //endregion\n //region Init-destroy\n finishConfigure(config) {\n const\n me = this,\n { initScroll } = me;\n // Make initScroll a one time only call\n me.initScroll = () => !me.scrollInitialized && initScroll.call(me);\n if (VersionHelper.isTestEnv) {\n me.bufferedAfterColumnsResized.delay = 50;\n me.bufferedElementResize.delay = 50;\n }\n super.finishConfigure(config);\n // When locale is applied columns react and change, which triggers `change` event on columns store for each\n // changed column, and every change normally triggers rendering view. This overhead becomes noticeable with\n // larger amount of columns. So we set two listeners to locale events: prioritized listener to be executed first\n // and suspend renderContents method and unprioritized one to resume method and call it immediately.\n LocaleManager.ion({\n locale : 'onBeforeLocaleChange',\n prio : 1,\n thisObj : me\n });\n LocaleManager.ion({\n locale : 'onLocaleChange',\n prio : -1,\n thisObj : me\n });\n GlobalEvents.ion({\n theme : 'onThemeChange',\n thisObj : me\n });\n me.ion({\n subGridExpand : 'onSubGridExpand',\n prio : -1,\n thisObj : me\n });\n // Buffered for scrolling, to be called\n me.bufferedFixElementHeights = me.buffer('fixElementHeights', me.fixElementHeightsBuffer, me);\n // Add the extra grid classes to the element\n me.setGridClassList(me.element.classList);\n // We do not act as a regular Container.\n me.verticalScroller.classList.remove('b-content-element', 'b-auto-container');\n me.bodyWrapElement.classList.remove('b-auto-container-panel');\n }\n onSubGridExpand() {\n // Need to rerender all rows, because if the rows were rerendered (by adding a new column to another region for example)\n // while the region was collapsed, cells in the region will be empty.\n this.renderContents();\n }\n onBeforeLocaleChange() {\n this._suspendRenderContentsOnColumnsChanged = true;\n }\n onLocaleChange() {\n this._suspendRenderContentsOnColumnsChanged = false;\n if (this.isPainted) {\n this.renderContents();\n }\n }\n finalizeInit() {\n super.finalizeInit();\n if (this.store.isLoading) {\n // Maybe show loadmask if store is already loading when grid is constructed\n this.onStoreBeforeRequest();\n }\n }\n changeScrollManager(scrollManager, oldScrollManager) {\n oldScrollManager?.destroy();\n if (scrollManager) {\n return ScrollManager.new({\n element : this.element,\n owner : this\n }, scrollManager);\n }\n else {\n return null;\n }\n }\n /**\n * Cleanup\n * @private\n */\n doDestroy() {\n const me = this;\n me.detachListeners(storeListenerName);\n me.scrollManager?.destroy();\n for (const feature of Object.values(me.features)) {\n feature.destroy?.();\n }\n me._focusedCell = null;\n me.columns.destroy();\n super.doDestroy();\n }\n /**\n * Adds extra classes to the Grid element after it's been configured.\n * Also iterates through features, thus ensuring they have been initialized.\n * @private\n */\n setGridClassList(classList) {\n const me = this;\n Object.values(me.features).forEach(feature => {\n if (feature.disabled || feature === false) {\n return;\n }\n let featureClass;\n if (Object.prototype.hasOwnProperty.call(feature.constructor, 'featureClass')) {\n featureClass = feature.constructor.featureClass;\n }\n else {\n featureClass = `b-${(feature instanceof Base ? feature.$$name : feature.constructor.name)}`;\n }\n if (featureClass) {\n classList.add(featureClass.toLowerCase());\n }\n });\n }\n //endregion\n // region Feature events\n // For documentation & typings purposes\n /**\n * Fires after a sub grid is collapsed.\n * @event subGridCollapse\n * @param {Grid.view.Grid} source The firing Grid instance\n * @param {Grid.view.SubGrid} subGrid The sub grid instance\n */\n /**\n * Fires after a sub grid is expanded.\n * @event subGridExpand\n * @param {Grid.view.Grid} source The firing Grid instance\n * @param {Grid.view.SubGrid} subGrid The sub grid instance\n */\n /**\n * Fires before a row is rendered.\n * @event beforeRenderRow\n * @param {Grid.view.Grid} source The firing Grid instance.\n * @param {Grid.row.Row} row The row about to be rendered.\n * @param {Core.data.Model} record The record for the row.\n * @param {Number} recordIndex The zero-based index of the record.\n */\n /**\n * Fires after a row is rendered.\n * @event renderRow\n * @param {Grid.view.Grid} source The firing Grid instance.\n * @param {Grid.row.Row} row The row that has been rendered.\n * @param {Core.data.Model} record The record for the row.\n * @param {Number} recordIndex The zero-based index of the record.\n */\n //endregion\n //region Grid template & elements\n compose() {\n const { autoHeight, enableSticky, enableTextSelection, fillLastColumn, positionMode, showDirty } = this;\n return {\n class : {\n [`b-grid-${positionMode}`] : 1,\n 'b-enable-sticky' : enableSticky,\n 'b-grid-notextselection' : !enableTextSelection,\n 'b-autoheight' : autoHeight,\n 'b-fill-last-column' : fillLastColumn,\n 'b-show-dirty' : showDirty,\n 'b-show-dirty-during-edit' : showDirty?.duringEdit\n }\n };\n }\n async recomposeInternal() {\n let scrollState;\n const { isConstructing } = this;\n if (!isConstructing) {\n scrollState = this.storeScroll();\n }\n await super.recomposeInternal();\n if (!isConstructing) {\n const oldValues = [...Object.keys(scrollState.scrollLeft).map(k => scrollState.scrollLeft[k]), scrollState.scrollTop];\n // If there were any non-zero scroll positions...\n if (Math.max(...oldValues)) {\n const newState = this.storeScroll();\n // If all scroll positions are now zero...\n if (!Math.max([...Object.keys(newState.scrollLeft).map(k => newState.scrollLeft[k]), newState.scrollTop])) {\n this.restoreScroll?.(scrollState);\n }\n }\n }\n }\n get cellCls() {\n const { _cellCls } = this;\n // It may have been merged to create a DomClassList, but 90% of the time will be a simple string.\n return _cellCls.value || _cellCls;\n }\n get bodyConfig() {\n const { autoHeight, hideFooters, hideHeaders } = this;\n return {\n reference : 'bodyElement',\n className : {\n 'b-autoheight' : autoHeight,\n 'b-grid-panel-body' : 1\n },\n // Only include aria-labelled-by if we have a header\n [this.hasHeader ? 'ariaLabelledBy' : ''] : `${this.id}-panel-title`,\n children : {\n headerContainer : {\n tag : 'header',\n role : 'row',\n 'aria-rowindex' : 1,\n className : {\n 'b-grid-header-container' : 1,\n 'b-hidden' : hideHeaders\n }\n },\n bodyContainer : {\n className : 'b-grid-body-container',\n tabIndex : -1,\n // Explicitly needs this because it's in theory focusable\n // and DomSync won't add a default role\n role : 'presentation',\n children : {\n verticalScroller : {\n className : 'b-grid-vertical-scroller'\n }\n }\n },\n virtualScrollers : {\n className : 'b-virtual-scrollers b-hide-display',\n style : BrowserHelper.isFirefox && DomHelper.scrollBarWidth ? {\n height : `${DomHelper.scrollBarWidth}px`\n } : undefined\n },\n footerContainer : {\n tag : 'footer',\n className : {\n 'b-grid-footer-container' : 1,\n 'b-hidden' : hideFooters\n }\n }\n }\n };\n }\n get contentElement() {\n return this.verticalScroller;\n }\n get overflowElement() {\n return this.bodyContainer;\n }\n updateHideHeaders(hide) {\n hide = Boolean(hide);\n // Toggle scroll partnering when hidden\n this.headerContainer?.classList.toggle('b-hidden', hide);\n this.eachSubGrid(subGrid => subGrid.toggleHeaders(hide));\n }\n updateHideFooters(hide) {\n hide = Boolean(hide);\n this.footerContainer?.classList.toggle('b-hidden', hide);\n this.eachSubGrid(subGrid => {\n subGrid.scrollable[hide ? 'removePartner' : 'addPartner'](subGrid.footer.scrollable, 'x');\n });\n }\n updateHideHorizontalScrollbar(hide) {\n hide = Boolean(hide);\n this.eachSubGrid(subGrid => {\n subGrid.virtualScrollerElement.classList.toggle('b-hide-display', hide);\n subGrid.scrollable[hide ? 'removePartner' : 'addPartner'](subGrid.fakeScroller, 'x');\n if (!hide) {\n subGrid.refreshFakeScroll();\n }\n });\n }\n //endregion\n //region Columns\n changeColumns(columns, currentStore) {\n const me = this;\n // Empty, clear or destroy store\n if (!columns && currentStore) {\n // Destroy when Grid is destroyed, if we created the ColumnStore\n if (me.isDestroying) {\n currentStore.owner === me && currentStore.destroy();\n }\n // Clear if set to falsy value at some other point\n else {\n currentStore.removeAll();\n }\n return currentStore;\n }\n // Keep store if configured with one\n if (columns.isStore) {\n currentStore?.owner === me && currentStore.destroy();\n columns.grid = me;\n return columns;\n }\n // Given an array of columns\n if (Array.isArray(columns)) {\n // If we have a store, plug them in\n if (currentStore) {\n const columnsBefore = currentStore.allRecords.slice();\n currentStore.data = columns;\n // Destroy any columns that were removed\n for (const oldColumn of columnsBefore) {\n if (!currentStore.includes(oldColumn)) {\n oldColumn.destroy();\n }\n }\n return currentStore;\n }\n // No store, use as data for a new store below\n columns = { data : columns };\n }\n if (currentStore) {\n throw new Error('Replacing ColumnStore is not supported');\n }\n // Assuming a store config object\n return ColumnStore.new({\n grid : me,\n owner : me\n }, columns);\n }\n updateColumns(columns, was) {\n const me = this;\n super.updateColumns?.(columns, was);\n // changes might be triggered when applying state, before grid is rendered\n columns.ion({\n refresh : me.onColumnsChanged,\n sort : me.onColumnsChanged,\n change : me.onColumnsChanged,\n move : me.onColumnsChanged,\n thisObj : me\n });\n columns.ion(columnResizeEvent(me.onColumnsResized, me));\n // Add touch class for touch devices\n if (BrowserHelper.isTouchDevice) {\n me.touch = true;\n // apply touchConfig for columns that defines it\n columns.forEach(column => {\n const { touchConfig } = column;\n if (touchConfig) {\n column.applyState(touchConfig);\n }\n });\n }\n me.bodyElement?.setAttribute('aria-colcount', columns.visibleColumns.length);\n }\n onColumnsChanged({ type, action, changes, record : column, records : changedColumns, isMove }) {\n const\n me = this,\n {\n columns,\n checkboxSelectionColumn\n } = me,\n isSingleFieldChange = changes && Object.keys(changes).length === 1;\n isMove = isMove === true ? true : (isMove && Object.values(isMove).some(field => field));\n if (\n isMove || (type === 'refresh' && action !== 'batch' && action !== 'sort') ||\n // Ignore the update of parentIndex following a column move (we redraw on the insert)\n (action === 'update' && isSingleFieldChange && 'parentIndex' in changes) ||\n // Ignore sort caused by sync, will refresh on the batch instead\n (action === 'sort' && columns.isSyncingDataOnLoad)) {\n return;\n }\n const addingColumnToNonExistingSubGrid = action === 'add' && changedColumns.some(col => col.region && !me.subGrids[col.region]);\n // this.onInternalPaint will handle changes caused by updateResponsive\n if (me.isConfiguring || (!addingColumnToNonExistingSubGrid && (!me.isPainted || (isMove && action === 'remove')))) {\n return;\n }\n // See if we have to create and add new SubGrids to accommodate new columns.\n if (action === 'add') {\n for (const column of changedColumns) {\n const { region } = column;\n // See if there's a home for this column, if not, add one\n if (!me.subGrids[region]) {\n me.add(me.createSubGrid(region, me.subGridConfigs?.[region]));\n }\n }\n }\n else if (action === 'update') {\n // Just updating width is already handled in a minimal way.\n if (('width' in changes || 'minWidth' in changes || 'maxWidth' in changes || 'flex' in changes) && !('region' in changes)) {\n // Update any leaf columns that want to be repainted on size change\n const { region } = column;\n // We must not capture visibleColumns from the columns var\n // at the top. It's a cached/recalculated value that we\n // are invalidating in the body of this function.\n columns.visibleColumns.forEach(col => {\n if (col.region === region && col.repaintOnResize) {\n me.refreshColumn(col);\n }\n });\n me.afterColumnsChange({ action, changes, column });\n return;\n }\n // No repaint if only changing column text\n if ('text' in changes && isSingleFieldChange) {\n column.subGrid.refreshHeader();\n return;\n }\n // Column toggled, need to recheck if any visible column has flex\n if ('hidden' in changes) {\n const subGrid = me.getSubGridFromColumn(column.id);\n subGrid.header.fixHeaderWidths();\n subGrid.footer.fixFooterWidths();\n subGrid.updateHasFlex();\n }\n }\n else if (action === 'remove') {\n changedColumns.forEach(c => c.freeColumnWidgets?.());\n }\n // Might have to add or remove subgrids when assigning a new set of columns or when changing region\n if (action === 'dataset' || action === 'batch' || (action === 'update' && 'region' in changes)) {\n const\n regions = columns.getDistinctValues('region', true),\n { toRemove, toAdd } = ArrayHelper.delta(regions, me.regions, true);\n me.remove(toRemove.map(region => me.getSubGrid(region)));\n me.add(toAdd.map(region => me.createSubGrid(region, me.subGridConfigs[region])));\n }\n // Check if checkbox selection column was removed, if so insert it back as the first column\n if (checkboxSelectionColumn && !columns.includes(checkboxSelectionColumn)) {\n // Insert the checkbox after any rownumber column. If not there, -1 means in at 0.\n const insertIndex = columns.indexOf(columns.findRecord('type', 'rownumber')) + 1;\n columns.insert(insertIndex, checkboxSelectionColumn, true);\n }\n if (!me._suspendRenderContentsOnColumnsChanged) {\n me.renderContents();\n }\n // Columns which are flexed, but as part of a grouped column cannot just have their flex\n // value reflected in the flex value of its cells. They are flexing a different available space.\n // These have to be set to the exact width and kept synced.\n me.syncFlexedSubCols();\n // We must not capture visibleColumns from the columns var\n // at the top. It's a cached/recalculated value that we must\n // are invalidating in the body of this function.\n me.bodyElement.setAttribute('aria-colcount', columns.visibleColumns.length);\n me.afterColumnsChange({ action, changes, column, columns : changedColumns });\n }\n onColumnsResized({ changes, record : column }) {\n const me = this;\n if (me.isConfiguring) {\n return;\n }\n const\n domWidth = DomHelper.setLength(column.width),\n domMinWidth = DomHelper.setLength(column.minWidth),\n domMaxWidth = DomHelper.setLength(column.maxWidth),\n subGrid = me.getSubGridFromColumn(column.id);\n // Let header and footer fix their own widths\n subGrid.header.fixHeaderWidths();\n subGrid.footer.fixFooterWidths();\n subGrid.updateHasFlex();\n // We can't apply flex from flexed subColums - they are flexing inside a different available width.\n if (!(column.flex && column.childLevel)) {\n if (!me.cellEls || column !== me.lastColumnResized) {\n me.cellEls = DomHelper.children(\n me.element,\n `.b-grid-cell[data-column-id=\"${column.id}\"]`\n );\n me.lastColumnResized = column;\n }\n for (const cell of me.cellEls) {\n if ('width' in changes) {\n // Although header and footer elements must be sized using flex-basis to avoid the busting out problem,\n // grid cells MUST be sized using width since rows are absolutely positioned and will not cause the\n // busting out problem, and rows will not stretch to shrinkwrap the cells unless they are widthed with\n // width.\n cell.style.width = domWidth;\n }\n if ('minWidth' in changes) {\n cell.style.minWidth = domMinWidth;\n }\n if ('maxWidth' in changes) {\n cell.style.maxWidth = domMaxWidth;\n }\n if ('flex' in changes) {\n cell.style.flex = column.flex ?? null;\n }\n }\n }\n // If we're being driven by the ColumnResizer or other bulk column resizer (like\n // ColumnAutoWidth), they will finish up with a call to afterColumnsResized.\n if (!me.resizingColumns) {\n me.afterColumnsResized(column);\n }\n // Columns which are flexed, but as part of a grouped column cannot just have their flex\n // value reflected in the flex value of its cells. They are flexing a different available space.\n // These have to be set to the exact width and kept synced.\n me.syncFlexedSubCols();\n }\n afterColumnsResized(column) {\n const me = this;\n me.eachSubGrid(subGrid => {\n // Only needed if the changed column is owned by the SubGrid\n if (!subGrid.collapsed && (!column || column.region === subGrid.region)) {\n subGrid.fixWidths();\n subGrid.fixRowWidthsInSafariEdge();\n }\n });\n me.lastColumnResized = me.cellEls = null;\n // Buffer some expensive operations, like updating the fake scrollers\n me.bufferedAfterColumnsResized(column);\n // Must happen immediately, not inside the bufferedAfterColumnsResized\n me.onHeightChange();\n }\n syncFlexedSubCols() {\n const flexedSubCols = this.columns.query(c => c.flex && c.childLevel && c.element);\n // Columns which are flexed, but as part of a grouped column cannot just have their flex\n // value reflected in the flex value of its cells. They are flexing a different available space.\n // These have to be set to the exact width and kept synced.\n if (flexedSubCols) {\n for (const column of flexedSubCols) {\n const\n width = column.element.getBoundingClientRect().width,\n cellEls = DomHelper.children(\n this.element,\n `.b-grid-cell[data-column-id=\"${column.id}\"]`\n );\n for (const cell of cellEls) {\n cell.style.flex = `0 0 ${width}px`;\n }\n }\n }\n }\n bufferedAfterColumnsResized(column) {\n // Columns that allow their cell content to drive the row height requires a rerender after resize\n if (this.columns.usesAutoHeight) {\n this.refreshRows();\n }\n this.refreshVirtualScrollbars();\n this.eachSubGrid(subGrid => {\n // Only needed if the changed column is owned by the SubGrid\n if (!subGrid.collapsed && (!column || column.region === subGrid.region)) {\n subGrid.refreshFakeScroll();\n }\n });\n }\n bufferedElementResize() {\n this.refreshRows();\n }\n onInternalResize(element, newWidth, newHeight, oldWidth, oldHeight) {\n // If a flexed subGrid would be flexed *down* by a width reduction, allow it\n // to lay itself out before the refreshVirtualScrollbars called by GridElementEvents\n // asks them whether they are overflowingHorizontally.\n // This is to avoid an unnecessary extra layout with a horizontal\n // scrollbar which may be hidden when the subgrid adjusts itself when its ResizeMonitor\n // notification arrives - they are delivered outermost->innermost, we find out first here.\n // When the actualResizeMonitor notification arrives, it will be a no-op.\n if (DomHelper.scrollBarWidth && newWidth < oldWidth) {\n this.eachSubGrid(subGrid => {\n if (subGrid.flex) {\n subGrid.onElementResize(subGrid.element);\n }\n });\n }\n super.onInternalResize(...arguments);\n // Columns that allow their cell content to drive the row height requires a rerender after element resize\n if (this.isPainted && newWidth !== oldWidth && this.columns.usesFlexAutoHeight) {\n this.bufferedElementResize();\n }\n }\n //endregion\n //region Rows\n /**\n * Get the topmost visible grid row\n * @member {Grid.row.Row} firstVisibleRow\n * @readonly\n * @category Rows\n */\n /**\n * Get the last visible grid row\n * @member {Grid.row.Row} lastVisibleRow\n * @readonly\n * @category Rows\n */\n /**\n * Get the Row that is currently displayed at top.\n * @member {Grid.row.Row} topRow\n * @readonly\n * @category Rows\n * @private\n */\n /**\n * Get the Row currently displayed furthest down.\n * @member {Grid.row.Row} bottomRow\n * @readonly\n * @category Rows\n * @private\n */\n /**\n * Get Row for specified record id.\n * @function getRowById\n * @param {Core.data.Model|String|Number} recordOrId Record id (or a record)\n * @returns {Grid.row.Row} Found Row or null if record not rendered\n * @category Rows\n * @private\n */\n /**\n * Returns top and bottom for rendered row or estimated coordinates for unrendered.\n * @function getRecordCoords\n * @param {Core.data.Model|String|Number} recordOrId Record or record id\n * @returns {Object} Record bounds with format { top, height, bottom }\n * @category Calculations\n * @private\n */\n /**\n * Get the Row at specified index. \"Wraps\" index if larger than available rows.\n * @function getRow\n * @param {Number} index\n * @returns {Grid.row.Row}\n * @category Rows\n * @private\n */\n /**\n * Get a Row for either a record, a record id or an HTMLElement\n * @function getRowFor\n * @param {HTMLElement|Core.data.Model|String|Number} recordOrId Record or record id or HTMLElement\n * @returns {Grid.row.Row} Found Row or `null` if record not rendered\n * @category Rows\n */\n /**\n * Get a Row from an HTMLElement\n * @function getRowFromElement\n * @param {HTMLElement} element\n * @returns {Grid.row.Row} Found Row or `null` if record not rendered\n * @category Rows\n * @private\n */\n changeRowManager(rowManager, oldRowManager) {\n const me = this;\n // Use row height from CSS if not specified in config. Did not want to turn this into a getter/setter for\n // rowHeight since RowManager will plug its implementation into Grid when created below, and after initial\n // configuration that is what should be used\n if (!me._isRowMeasured) {\n me.measureRowHeight();\n }\n oldRowManager?.destroy();\n if (rowManager) {\n // RowManager is a plugin, it is configured with its grid as its \"client\".\n // It uses client.store as its record source.\n const result = RowManager.new({\n grid : me,\n rowHeight : me.rowHeight,\n rowScrollMode : me.rowScrollMode || 'move',\n autoHeight : me.autoHeight,\n fixedRowHeight : me.fixedRowHeight,\n internalListeners : {\n changeTotalHeight : 'onRowManagerChangeTotalHeight',\n requestScrollChange : 'onRowManagerRequestScrollChange',\n thisObj : me\n }\n }, rowManager);\n // The grid announces row rendering and removal to allow customization of rows\n // and creation and freeing of widgets for the rows.\n me.relayEvents(result, ['beforeRenderRow', 'renderRow', 'removeRows']);\n // RowManager injects itself as a property into the grid so that the grid\n // can reference it during RowManager's spin-up. We need to undo that now\n // otherwise updaters will not run.\n me._rowManager = null;\n return result;\n }\n }\n // Manual relay needed for Split feature to catch the config change\n updateRowHeight(rowHeight) {\n if (!this.isConfiguring && this.rowManager) {\n this.rowManager.rowHeight = rowHeight;\n }\n }\n get rowHeight() {\n return this._rowManager?.rowHeight ?? this._rowHeight;\n }\n // Default implementation, documented in `defaultConfig`\n getRowHeight(record) {\n return record.rowHeight;\n }\n // Hook for features that need to alter the row height\n processRowHeight(record, height) {}\n //endregion\n //region Store\n getAsyncEventSuffixForStore(store) {\n return this.asyncEventSuffix;\n }\n /**\n * Hooks up data store listeners\n * @private\n * @category Store\n */\n bindStore(store) {\n const\n suffix = this.getAsyncEventSuffixForStore(store);\n store.ion({\n name : storeListenerName,\n [`refresh${suffix}`] : 'onStoreDataChange',\n [`add${suffix}`] : 'onStoreAdd',\n [`remove${suffix}`] : 'onStoreRemove',\n [`replace${suffix}`] : 'onStoreReplace',\n [`removeAll${suffix}`] : 'onStoreRemoveAll',\n [`move${suffix}`] : store.tree ? null : 'onFlatStoreMove',\n change : 'relayStoreDataChange',\n idChange : 'onStoreRecordIdChange',\n update : 'onStoreUpdateRecord',\n beforeRequest : 'onStoreBeforeRequest',\n afterRequest : 'onStoreAfterRequest',\n exception : 'onStoreException',\n commit : 'onStoreCommit',\n startApplyChangeset : 'internalOnStoreStartApplyChangeset',\n endApplyChangeset : 'internalOnStoreEndApplyChangeset',\n thisObj : this\n });\n super.bindStore(store);\n }\n unbindStore(oldStore) {\n this.detachListeners(storeListenerName);\n if (this.destroyStore) {\n oldStore.destroy();\n }\n }\n changeStore(store) {\n if (store == null) {\n return null;\n }\n if (typeof store === 'string') {\n store = Store.getStore(store);\n }\n if (!store.isStore) {\n store = ObjectHelper.assign({\n data : this.data,\n tree : Boolean(this.initialConfig.features?.tree)\n }, store);\n if (!store.data) {\n delete store.data;\n }\n if (!store.modelClass) {\n store.modelClass = GridRowModel;\n }\n store = new (store.readUrl ? AjaxStore : Store)(store);\n }\n return store;\n }\n updateStore(store, was) {\n const me = this;\n super.updateStore?.(store, was);\n if (was) {\n me.unbindStore(was);\n }\n if (store) {\n // Deselect all rows when replacing the store, otherwise selection retains old store\n if (was) {\n me.deselectAll();\n }\n me.bindStore(store);\n }\n me.trigger('bindStore', { store, oldStore : was });\n // Changing store when painted -> refresh rows to reflect new data\n if (!me.isDestroying && me.isPainted && !me.refreshSuspended) {\n me._rowManager?.reinitialize();\n }\n }\n /**\n * Rerenders a cell if a record is updated in the store\n * @private\n * @category Store\n */\n onStoreUpdateRecord({ source : store, record, changes }) {\n const me = this;\n if (me.refreshSuspended) {\n return;\n }\n if (me.forceFullRefresh) {\n // flagged to need full refresh (probably from using GroupSummary)\n me.rowManager.refresh();\n me.forceFullRefresh = false;\n }\n else {\n let row;\n // Search for old row if id was changed\n if (record.isFieldModified('id')) {\n row = me.getRowFor(record.meta.modified.id);\n }\n row = row || me.getRowFor(record);\n // not rendered, bail out\n if (!row) {\n return;\n }\n // We must refresh the full row if it's a special row which has signalled\n // an update because it has no cells.\n if (me.fullRowRefresh || record.isSpecialRow) {\n const index = store.indexOf(record);\n if (index !== -1) {\n row.render(index, record);\n }\n }\n else {\n me.columns.visibleColumns.forEach(column => {\n const\n field = column.field,\n isSafe = column.constructor.simpleRenderer && !(Object.prototype.hasOwnProperty.call(column.data, 'renderer'));\n // If there's a non-safe renderer, that is a renderer which draws values from elsewhere\n // than just its configured field, that column must be refreshed on every record update.\n // Obviously, if the column's configured field is changed that also means it's refreshed.\n if (!isSafe || changes[field]) {\n const cellElement = row.getCell(field);\n if (cellElement) {\n row.renderCell(cellElement);\n }\n }\n });\n }\n }\n }\n refreshFromRowOnStoreAdd(row, context) {\n const\n me = this,\n { rowManager } = me;\n rowManager.renderFromRow(row);\n rowManager.trigger('changeTotalHeight', { totalHeight : rowManager.totalHeight });\n // First record? Also update fake scrollers\n if (me.store.count === 1) {\n me.callEachSubGrid('refreshFakeScroll');\n }\n }\n onMaskAutoClose(mask) {\n super.onMaskAutoClose(mask);\n this.toggleEmptyText();\n }\n /**\n * Refreshes rows when data is added to the store\n * @private\n * @category Store\n */\n onStoreAdd({\n source : store,\n records,\n index,\n oldIndex,\n isChild,\n oldParent,\n parent,\n isMove,\n isExpand,\n isExpandAll\n }) {\n const\n me = this,\n { rowManager } = me;\n // Do not react if the content has not been rendered, or refresh is suspended,\n // or we are part of a project that is having a changeset applied (a bit dirty to include that here, but\n // avoids having to add an override in TimelineBase)\n if (!me.isPainted || isExpandAll || me.refreshSuspended) {\n return;\n }\n // If the add is an expand, the records will be visible because children collection is\n // calculated in StoreTree.internalToggleTreeSubRecords WRT filtering.\n // We can splice the incoming records into place with animation.\n if (isExpand && me.animateTreeNodeToggle) {\n return rowManager.insert(rowManager.getRowFor(parent).index + 1, records.length);\n }\n // If we move records check if some of their old parents is expanded\n const hasExpandedOldParent = isMove && records.some(record => {\n if (isMove[record.id]) {\n // When using TreeGroup there won't be an old parent\n const oldParent = store.getById(record.meta.modified.parentId);\n return oldParent?.isExpanded(store) && oldParent?.ancestorsExpanded(store);\n }\n });\n // If it's the addition of a child to a collapsed zone (and old parents are also collapsed), the UI does not change.\n if (isChild && !records[0].ancestorsExpanded(store) && !hasExpandedOldParent) {\n // BUT it might change if parent had no children (expander made invisible) and it gets children added\n if (!parent.isLeaf) {\n const parentRow = rowManager.getRowById(parent);\n if (parentRow) {\n rowManager.renderRows([parentRow]);\n }\n }\n return;\n }\n rowManager.calculateRowCount(false, true, true);\n // When store is filtered need to update the index value\n if (store.isFiltered) {\n index = store.indexOf(records[0]);\n }\n const\n {\n topIndex,\n rows,\n rowCount\n } = rowManager,\n bottomIndex = rowManager.topIndex + rowManager.rowCount - 1,\n dataStart = index,\n dataEnd = index + records.length - 1,\n atEnd = bottomIndex >= store.count - records.length - 1;\n // When moving a node within a tree we might need the redraw to include its old parent and its children. Not\n // worth the complexity of trying to do a partial render for this, rerender all rows to be safe. Cannot solely\n // rely on presence of isMove, all keys might be false\n // Moving records within a flat store is handled elsewhere, in onFlatStoreMove\n if (oldParent || oldIndex > -1 || (isChild && isMove && Object.values(isMove).some(v => v))) {\n rowManager.refresh();\n }\n // Added block starts in our visible block. Render from there downwards.\n else if (dataStart >= topIndex && dataStart < topIndex + rowCount) {\n me.refreshFromRowOnStoreAdd(rows[dataStart - topIndex], ...arguments);\n }\n // Added block ends in our visible block, render block\n else if (dataEnd >= topIndex && dataEnd < topIndex + rowCount) {\n rowManager.refresh();\n }\n // If added block is outside of the visible area, no visible change\n // but potentially a change in total dataset height.\n else {\n // If we are against the end of the dataset, and have appended records\n // ensure they are rendered below\n if (atEnd && index > bottomIndex) {\n rowManager.fillBelow(me._scrollTop || 0);\n }\n rowManager.estimateTotalHeight(true);\n }\n }\n /**\n * Responds to exceptions signalled by the store\n * @private\n * @category Store\n */\n onStoreException({ action, type, response, exceptionType, error }) {\n const me = this;\n let message;\n switch (type) {\n case 'server':\n message = response.message || me.L('L{unspecifiedFailure}');\n break;\n case 'exception':\n message = exceptionType === 'network' ? me.L('L{networkFailure}') : (error?.message || response?.parsedJson?.message || me.L('L{parseFailure}'));\n break;\n }\n me.applyMaskError(\n `
\n
${me.L(action === 'read' ? 'L{loadFailedMessage}' : 'L{syncFailedMessage}')}
\n ${response?.url ? `
${response.url}
` : ''}\n
${me.L('L{serverResponse}')}
\n
${message}
\n
`);\n }\n /**\n * Refreshes rows when data is changed in the store\n * @private\n * @category Store\n */\n onStoreDataChange({ action, changes, source : store, syncInfo }) {\n // If the next mixin up the inheritance chain has an implementation, call it\n super.onStoreDataChange?.(...arguments);\n const me = this;\n if (me.refreshSuspended || !me.rowManager) {\n return;\n }\n // If it's new data, the old calculation is invalidated.\n if (action === 'dataset') {\n me.rowManager.clearKnownHeights();\n // Initial filters on a tree store first triggers `dataset`, then `filter`.\n // Ignore `dataset`, only redraw on `filter`\n if (store.isTree && store.isFiltered) {\n return;\n }\n }\n const isGroupFieldChange = store.isGrouped && changes && store.groupers.some(grp => grp.rootFieldName in changes);\n // No need to rerender if it's a change of the value of the group field which\n // will be responded to by StoreGroup\n if (me.isPainted && !isGroupFieldChange) {\n // Optionally scroll to top if setting new data or filtering based on preserveScrollOnDatasetChange setting\n me.renderRows(Boolean(!(action in datasetReplaceActions) || me.preserveScrollOnDatasetChange));\n }\n me.toggleEmptyText();\n }\n /**\n * The hook is called when the id of a record has changed.\n * @private\n * @category Store\n */\n onStoreRecordIdChange() {\n // If the next mixin up the inheritance chain has an implementation, call it\n super.onStoreRecordIdChange?.(...arguments);\n }\n /**\n * Shows a load mask while the connected store is loading\n * @private\n * @category Store\n */\n onStoreBeforeRequest() {\n this.applyLoadMask();\n }\n /**\n * Hides load mask after a load request ends either in success or failure\n * @private\n * @category Store\n */\n onStoreAfterRequest(event) {\n if (this.loadMask && !event.exception) {\n this.masked = null;\n this.toggleEmptyText();\n }\n }\n needsFullRefreshOnStoreRemove({ isCollapse }) {\n const { store } = this;\n return (this.features?.group?.enabled && store.isGrouped) ||\n // Need to redraw parents when children are removed since they might be converted to leaves\n (store.tree && !isCollapse && store.modelClass.convertEmptyParentToLeaf);\n }\n /**\n * Animates removal of record.\n * @private\n * @category Store\n */\n onStoreRemove({ source : store, records, isCollapse, isChild, isMove, isCollapseAll }) {\n // Do not react if the content has not been rendered,\n // or if it is a move, which will be handled by onStoreAdd\n if (!this.isPainted || isMove || isCollapseAll) {\n return;\n }\n // GridSelection mixin does its job on records removing\n super.onStoreRemove?.(...arguments);\n const\n me = this,\n { rowManager } = me;\n // Remove cached heights\n rowManager.invalidateKnownHeight(records);\n // Will be refresh once in onStoreLoadSync after sync data on load\n if (me.refreshSuspended) {\n return;\n }\n // Animated grid row remove.\n // Slides outgoing row horizintally.\n if (me.animateRemovingRows && !isCollapse && !isChild) {\n // Gather all visible rows which need to be removed.\n const rowsToRemove = records.reduce((result, record) => {\n const row = rowManager.getRowById(record.id);\n row && result.push(row);\n return result;\n }, []);\n if (rowsToRemove.length) {\n const topRow = rowsToRemove[0];\n me.isAnimating = true;\n // As soon as first row has disappeared, rerender the view\n EventHelper.onTransitionEnd({\n element : topRow._elementsArray[0],\n property : 'left',\n // Detach listener after timeout even if event wasn't fired\n duration : me.transitionDuration + 50,\n thisObj : me,\n handler : () => {\n me.isAnimating = false;\n rowsToRemove.forEach(row => !row.isDestroyed && row.removeCls('b-removing'));\n rowManager.refresh();\n // undocumented internal event for scheduler\n me.trigger('rowRemove');\n me.afterRemove(arguments[0]);\n }\n });\n rowsToRemove.forEach(row => row.addCls('b-removing'));\n }\n }\n // Animated node collapse. Slides rows below upwards.\n else if (isCollapse && me.animateTreeNodeToggle) {\n // Gather all visible rows which need to be removed.\n const\n // We need to sort the indices being removed so we can detect whether it is a contiguous block\n indicesToRemove = records.flatMap(record => {\n const row = rowManager.getRowFor(record);\n return row ? row.index : emptyArray;\n }).sort(ascending),\n { length } = indicesToRemove;\n // If we are removing a contiguous block, the RowManager can do that, and the forthcoming refresh's\n // set of row tops will animate any out of place rows into position\n if (length && indicesToRemove[length - 1] === indicesToRemove[0] + length - 1) {\n return rowManager.insert(indicesToRemove[0], -indicesToRemove.length);\n }\n }\n // Cannot do an update from the affected row and down here. Since group headers might be affected by\n // removing rows we need a full refresh\n else if (me.needsFullRefreshOnStoreRemove(...arguments)) {\n rowManager.refresh();\n me.afterRemove(arguments[0]);\n }\n else {\n const\n { rows } = rowManager,\n topRowIndex = records.reduce((result, record) => {\n const row = rowManager.getRowById(record.id);\n if (row) {\n // Rows are repositioned in the array, it matches visual order. Need to find actual index in it\n result = Math.min(result, rows.indexOf(row));\n }\n return result;\n }, rows.length);\n // If there were rows below which have moved up into place\n // then repurpose them with their new records\n if (rows[topRowIndex]) {\n !me.refreshSuspended && rowManager.renderFromRow(rows[topRowIndex]);\n }\n // If nothing to render below, just update dataset height\n else {\n rowManager.trigger('changeTotalHeight', { totalHeight : rowManager.totalHeight });\n }\n me.trigger('rowRemove', { isCollapse });\n me.afterRemove(arguments[0]);\n }\n }\n onFlatStoreMove({ from, to }) {\n const\n { rowManager, store } = this,\n {\n topIndex,\n rowCount\n } = rowManager,\n // from and to are indices in the unfiltered collection, we need to convert them\n // to indices in a visible collection\n [dataStart, dataEnd] = [from, to].sort((a, b) => a - b),\n visibleStart = store.indexOf(store.getAt(dataStart, true)),\n visibleEnd = store.indexOf(store.getAt(dataEnd, true));\n // Changed block starts in our visible block. Render from there downwards.\n if (visibleStart >= topIndex && visibleStart < topIndex + rowCount) {\n rowManager.renderFromRow(rowManager.rows[visibleStart - topIndex]);\n }\n // Changed block ends in our visible block, render block\n else if (visibleEnd >= topIndex && visibleEnd < topIndex + rowCount) {\n rowManager.refresh();\n }\n // If the changed block is outside the visible area, this is a no-op\n }\n onStoreReplace({ records, all }) {\n const { rowManager } = this;\n if (all) {\n rowManager.clearKnownHeights();\n rowManager.refresh();\n }\n else {\n const rows = records.reduce((rows, [, record]) => {\n const row = this.getRowFor(record);\n if (row) {\n rows.push(row);\n }\n return rows;\n }, []);\n // Heights will be stored on render, but some records might be out of view -> have to invalidate separately\n rowManager.invalidateKnownHeight(records);\n rowManager.renderRows(rows);\n }\n }\n relayStoreDataChange(event) {\n this.ariaElement?.setAttribute('aria-rowcount', this.store.count + 1);\n /**\n * Fired when data in the store changes.\n *\n * Basically a relayed version of the store's own change event, decorated with a `store` property.\n * See the {@link Core.data.Store#event-change store change event} documentation for more information.\n *\n * @event dataChange\n * @param {Grid.view.Grid} source Owning grid\n * @param {Core.data.Store} store The originating store\n * @param {'remove'|'removeAll'|'add'|'updatemultiple'|'clearchanges'|'filter'|'update'|'dataset'|'replace'} action\n * Name of action which triggered the change. May be one of:\n * * `'remove'`\n * * `'removeAll'`\n * * `'add'`\n * * `'updatemultiple'`\n * * `'clearchanges'`\n * * `'filter'`\n * * `'update'`\n * * `'dataset'`\n * * `'replace'`\n * @param {Core.data.Model} record Changed record, for actions that affects exactly one record (`'update'`)\n * @param {Core.data.Model[]} records Changed records, passed for all actions except `'removeAll'`\n * @param {Object} changes Passed for the `'update'` action, info on which record fields changed\n */\n if (!this.project) {\n return this.trigger('dataChange', { ...event, store : event.source, source : this });\n }\n }\n /**\n * Rerenders grid when all records have been removed\n * @private\n * @category Store\n */\n onStoreRemoveAll() {\n // GridSelection mixin does its job on records removing\n super.onStoreRemoveAll?.(...arguments);\n if (this.isPainted) {\n this.rowManager.clearKnownHeights();\n this.renderRows(false);\n this.toggleEmptyText();\n }\n }\n // Refresh dirty cells on commit\n onStoreCommit({ changes }) {\n if (this.showDirty && changes.modified.length) {\n const rows = [];\n changes.modified.forEach(record => {\n const row = this.rowManager.getRowFor(record);\n row && rows.push(row);\n });\n this.rowManager.renderRows(rows);\n }\n }\n internalOnStoreStartApplyChangeset() {\n this.suspendRefresh();\n if (this.constructor.bindStoreChangeset) {\n this.captureScrollTargetRow();\n }\n }\n internalOnStoreEndApplyChangeset() {\n this.resumeRefresh(true);\n if (this.constructor.bindStoreChangeset) {\n this.restoreScrollTargetRow();\n }\n }\n /**\n * Remember scroll position when store is about to apply a changeset\n * @private\n */\n captureScrollTargetRow() {\n const me = this;\n if (me.preserveScroll) {\n const { firstFullyVisibleRow : firstRow, lastVisibleRow : lastRow } = me.rowManager;\n if (firstRow) {\n me.lastVisibleRowIds = [firstRow.id];\n for (let index = firstRow.dataIndex + 1; index <= lastRow.dataIndex; index++) {\n me.lastVisibleRowIds.push(me.rowManager.getRow(index).id);\n }\n me.lastTopRowOffset = me.scrollable.getDeltaTo(firstRow.element,\n { block : 'start', x : false, constrainToScrollable : false });\n }\n }\n }\n /**\n * Restore scroll position. Go to the topmost row formerly in the view that is still present in the dataset.\n * @private\n */\n restoreScrollTargetRow() {\n const me = this;\n let didOverscroll = false;\n if (me.preserveScroll) {\n if (me.lastVisibleRowIds) {\n me.rowManager.refresh();\n if (me.scrollable.scrollHeight >= me.lastOverscrollHeight && me.scrollable.y === me.lastOverscrollY) {\n // https://github.com/bryntum/support/issues/8040\n me.rowManager.fillBelow(me.scrollable.y);\n }\n else {\n me.lastOverscrollHeight = null;\n me.lastOverscrollY = null;\n }\n const targetId = me.lastVisibleRowIds.find(rowId => me.store.getById(rowId));\n if (targetId != undefined && targetId !== me.rowManager.firstFullyVisibleRow.id) {\n if (me.preserveScroll.overscroll) {\n const scrollNeeded = me.scrollable.getDeltaTo(me.getRecordCoords(targetId),\n {\n block : 'start',\n x : false,\n constrainToScrollable : false,\n edgeOffset : me.lastTopRowOffset.yDelta\n }).yDelta;\n if (scrollNeeded > (me.scrollable.maxY - me.scrollable.y)) {\n me.scrollable.scrollHeight += scrollNeeded;\n didOverscroll = true;\n }\n }\n me.scrollRowIntoView(targetId, {\n block : 'start',\n edgeOffset : me.lastTopRowOffset.yDelta,\n x : false\n });\n }\n }\n me.lastVisibleRowIds = undefined;\n me.lastTopRowOffset = undefined;\n if (didOverscroll) {\n me.lastOverscrollHeight = me.scrollable.scrollHeight;\n me.lastOverscrollY = me.scrollable.y;\n }\n }\n }\n // Documented with config\n get data() {\n if (this._store) {\n return this._store.records;\n }\n else {\n return this._data;\n }\n }\n set data(data) {\n if (this._store) {\n this._store.data = data;\n }\n else {\n this._data = data;\n }\n }\n //endregion\n //region Context menu items\n /**\n * Populates the header context menu. Chained in features to add menu items.\n * @param {Object} options Contains menu items and extra data retrieved from the menu target.\n * @param {Grid.column.Column} options.column Column for which the menu will be shown\n * @param {Object} options.items A named object to describe menu items\n * @internal\n */\n populateHeaderMenu({ column, items }) {\n const\n me = this,\n { subGrids, regions } = me,\n { parent } = column;\n let first = true;\n Object.entries(subGrids).forEach(([region, subGrid]) => {\n // If SubGrid is configured with a sealed column set, do not allow moving into it\n if (subGrid.sealedColumns) {\n return;\n }\n if (\n column.draggable &&\n region !== column.region &&\n (!parent && subGrids[column.region].columns.count > 1 || parent && parent.children.length > 1)\n ) {\n const\n preceding = subGrid.element.compareDocumentPosition(subGrids[column.region].element) === document.DOCUMENT_POSITION_PRECEDING,\n moveRight = me.rtl ? !preceding : preceding,\n // With 2 regions, use Move left, Move right. With multiple, include region name\n text = regions.length > 2\n ? me.L('L{moveColumnTo}', me.optionalL(region))\n : me.L(moveRight ? 'L{moveColumnRight}' : 'L{moveColumnLeft}');\n items[`${region}Region`] = {\n targetSubGrid : region,\n text,\n icon : 'b-fw-icon b-icon-column-move-' + (moveRight ? 'right' : 'left'),\n separator : first,\n disabled : !column.allowDrag,\n onItem : ({ item }) => {\n column.traverse(col => col.region = region);\n // Changing region will move the column to the correct SubGrid, but we want it to go last\n me.columns.insert(me.columns.indexOf(subGrids[item.targetSubGrid].columns.last) + 1, column);\n me.scrollColumnIntoView(column);\n }\n };\n first = false;\n }\n });\n }\n /**\n * Populates the cell context menu. Chained in features to add menu items.\n * @param {Object} options Contains menu items and extra data retrieved from the menu target.\n * @param {Grid.column.Column} options.column Column for which the menu will be shown\n * @param {Core.data.Model} options.record Record for which the menu will be shown\n * @param {Object} options.items A named object to describe menu items\n * @internal\n */\n populateCellMenu({ record, items }) {}\n getColumnDragToolbarItems(column, items) {\n return items;\n }\n //endregion\n //region Getters\n normalizeCellContext(cellContext) {\n const\n grid = this,\n { columns } = grid;\n // Already have a Location\n if (cellContext.isLocation) {\n return cellContext;\n }\n // Create immutable Location object encapsulating the passed object.\n if (cellContext.isModel) {\n return new Location({\n grid,\n id : cellContext.id,\n columnId : columns.visibleColumns[0].id\n });\n }\n return new Location(ObjectHelper.assign({ grid }, cellContext));\n }\n /**\n * Returns a cell if rendered or null if not found.\n * @param {LocationConfig} cellContext A cell location descriptor\n * @returns {HTMLElement|null}\n * @category Getters\n */\n getCell(cellContext) {\n const\n { store, columns } = this,\n { visibleColumns } = this.columns,\n rowIndex = !isNaN(cellContext.row) ? cellContext.row : !isNaN(cellContext.rowIndex) ? cellContext.rowIndex : store.indexOf(cellContext.record || cellContext.id),\n columnIndex = !isNaN(cellContext.column) ? cellContext.column : !isNaN(cellContext.columnIndex) ? cellContext.columnIndex : visibleColumns.indexOf(cellContext.column || columns.getById(cellContext.columnId) || columns.get(cellContext.field) || visibleColumns[0]);\n // Only return cell for valid address.\n // This code is more strict than Location which attempts to find the closest existing cell.\n // Here we MUST only return a cell if the passed context is fully valid.\n return rowIndex > -1 && rowIndex < store.count && columnIndex > -1 && columnIndex < visibleColumns.length && this.normalizeCellContext(cellContext).cell || null;\n }\n /**\n * Returns the header element for the column\n * @param {String|Number|Grid.column.Column} columnId or Column instance\n * @returns {HTMLElement} Header element\n * @category Getters\n */\n getHeaderElement(columnId) {\n if (columnId.isModel) {\n columnId = columnId.id;\n }\n return this.fromCache(`.b-grid-header[data-column-id=\"${columnId}\"]`);\n }\n getHeaderElementByField(field) {\n const column = this.columns.get(field);\n return column ? this.getHeaderElement(column) : null;\n }\n /**\n * Body height\n * @member {Number}\n * @readonly\n * @category Layout\n */\n get bodyHeight() {\n return this._bodyHeight;\n }\n /**\n * Header height\n * @member {Number}\n * @readonly\n * @category Layout\n */\n get headerHeight() {\n const me = this;\n // measure header if rendered and not stored\n if (me.isPainted && !me._headerHeight) {\n me._headerHeight = me.headerContainer.offsetHeight;\n }\n return me._headerHeight;\n }\n /**\n * Footer height\n * @member {Number}\n * @readonly\n * @category Layout\n */\n get footerHeight() {\n const me = this;\n // measure footer if rendered and not stored\n if (me.isPainted && !me._footerHeight) {\n me._footerHeight = me.footerContainer.offsetHeight;\n }\n return me._footerHeight;\n }\n get isTreeGrouped() {\n return Boolean(this.features.treeGroup?.isGrouped);\n }\n /**\n * Searches up from the specified element for a grid row and returns the record associated with that row.\n * @param {HTMLElement} element Element somewhere within a row or the row container element\n * @returns {Core.data.Model} Record for the row\n * @category Getters\n */\n getRecordFromElement(element) {\n const el = element.closest('.b-grid-row');\n if (!el) return null;\n return this.store.getAt(el.dataset.index);\n }\n /**\n * Searches up from specified element for a grid cell or an header and returns the column which the cell belongs to\n * @param {HTMLElement} element Element somewhere in a cell\n * @returns {Grid.column.Column} Column to which the cell belongs\n * @category Getters\n */\n getColumnFromElement(element) {\n const cell = element.closest('.b-grid-cell, .b-grid-header');\n if (!cell) return null;\n if (cell.matches('.b-grid-header')) {\n return this.columns.getById(cell.dataset.columnId);\n }\n const cellData = DomDataStore.get(cell);\n return this.columns.getById(cellData.columnId);\n }\n // Only added for type checking, since it seems common to get it wrong in react/angular\n updateAutoHeight(autoHeight) {\n ObjectHelper.assertBoolean(autoHeight, 'autoHeight');\n }\n updateColumnLines(columnLines) {\n ObjectHelper.assertBoolean(columnLines, 'columnLines');\n DomHelper.toggleClasses(this.element, 'b-no-column-lines', !columnLines);\n }\n updateRowLines(rowLines) {\n DomHelper.toggleClasses(this.element, 'b-no-row-lines', !rowLines);\n }\n get keyMapElement() {\n return this.bodyElement;\n }\n //endregion\n //region Fix width & height\n /**\n * Sets widths and heights for headers, rows and other parts of the grid as needed\n * @private\n * @category Width & height\n */\n fixSizes() {\n // subGrid width\n this.callEachSubGrid('fixWidths');\n // Get leaf headers.\n const colHeaders = this.headerContainer.querySelectorAll('.b-grid-header.b-depth-0');\n // Update leaf headers' ariaColIndex\n for (let i = 0, { length } = colHeaders; i < length; i++) {\n colHeaders[i].setAttribute('aria-colindex', i + 1);\n }\n }\n onRowManagerChangeTotalHeight({ totalHeight, immediate }) {\n return this.refreshTotalHeight(totalHeight, immediate);\n }\n /**\n * Makes height of vertical scroller match estimated total height of grid. Called when scrolling vertically and\n * when showing/hiding rows.\n * @param {Number} [height] Total height supplied by RowManager\n * @param {Boolean} [immediate] Flag indicating if buffered element sizing should be bypassed\n * @private\n * @category Width & height\n */\n refreshTotalHeight(height = this.rowManager.totalHeight, immediate = false) {\n const me = this;\n // Veto change of estimated total height while rendering rows or if triggered while in a hidden state\n if (me.renderingRows || !me.isVisible) {\n return false;\n }\n const\n scroller = me.scrollable,\n delta = Math.abs(me.virtualScrollHeight - height),\n clientHeight = me._bodyRectangle.height,\n newMaxY = height - clientHeight;\n if (delta) {\n const\n // We must update immediately if we are nearing the end of the scroll range.\n isCritical = (newMaxY - me._scrollTop < clientHeight * 2) ||\n // Or if we have scrolled pass visual height\n (me._verticalScrollHeight && (me._verticalScrollHeight - clientHeight < me._scrollTop));\n // Update the true scroll range using the scroller. This will not cause a repaint.\n scroller.scrollHeight = me.virtualScrollHeight = height;\n // If we are scrolling, put this off because it causes\n // a full document layout and paint.\n // Do not buffer calls for not yet painted grid\n if (me.isPainted && (me.scrolling && !isCritical || delta < 100) && !immediate) {\n me.bufferedFixElementHeights();\n }\n else {\n me.virtualScrollHeightDirty && me.virtualScrollHeightDirty();\n me.bufferedFixElementHeights.cancel();\n me.fixElementHeights();\n }\n }\n }\n fixElementHeights() {\n const\n me = this,\n height = me.virtualScrollHeight,\n heightInPx = `${height}px`;\n me._verticalScrollHeight = height;\n me.verticalScroller.style.height = heightInPx;\n me.virtualScrollHeightDirty = false;\n if (me.autoHeight) {\n me.bodyContainer.style.height = heightInPx;\n me._bodyHeight = height;\n me.refreshBodyRectangle();\n }\n me.refreshVirtualScrollbars();\n }\n refreshBodyRectangle() {\n return this._bodyRectangle = Rectangle.client(this.bodyContainer);\n }\n //endregion\n //region Scroll & virtual rendering\n set scrolling(scrolling) {\n this._scrolling = scrolling;\n }\n get scrolling() {\n return this._scrolling;\n }\n /**\n * Activates automatic scrolling of a subGrid when mouse is moved closed to the edges. Useful when dragging DOM\n * nodes from outside this grid and dropping on the grid.\n * @param {Grid.view.SubGrid|String|Grid.view.SubGrid[]|String[]} subGrid A subGrid instance or its region name or\n * an array of either\n * @category Scrolling\n */\n enableScrollingCloseToEdges(subGrids) {\n this.scrollManager.startMonitoring({\n scrollables : [\n {\n element : this.scrollable.element,\n direction : 'vertical'\n },\n ...ArrayHelper.asArray(subGrids || []).map(subGrid => (\n { element : (typeof subGrid === 'string' ? this.subGrids[subGrid] : subGrid).scrollable.element }\n ))\n ],\n direction : 'horizontal'\n });\n }\n /**\n * Deactivates automatic scrolling of a subGrid when mouse is moved closed to the edges\n * @param {Grid.view.SubGrid|String|Grid.view.SubGrid[]|String[]} subGrid A subGrid instance or its region name or\n * an array of either\n * @category Scrolling\n */\n disableScrollingCloseToEdges(subGrids) {\n this.scrollManager.stopMonitoring([\n this.scrollable.element,\n ...ArrayHelper.asArray(subGrids || []).map(subGrid => (typeof subGrid === 'string' ? this.subGrids[subGrid] : subGrid).element)\n ]);\n }\n /**\n * Responds to request from RowManager to adjust scroll position. Happens when jumping to a scroll position with\n * variable row height.\n * @param {Number} bottomMostRowY\n * @private\n * @category Scrolling\n */\n onRowManagerRequestScrollChange({ bottom }) {\n this.scrollable.y = bottom - this.bodyHeight;\n }\n /**\n * Scroll syncing for normal headers & grid + triggers virtual rendering for vertical scroll\n * @private\n * @fires scroll\n * @category Scrolling\n */\n initScroll() {\n const\n me = this,\n { scrollable } = me;\n // This method may be called early, before render calls it, so ensure that it's\n // only executed once.\n if (!me.scrollInitialized) {\n me.scrollInitialized = true;\n // Allows FF to dynamically track scrollbar state change by reacting to content height changes.\n // Remove when https://bugzilla.mozilla.org/show_bug.cgi?id=1733042 is fixed\n scrollable.contentElement = me.contentElement;\n scrollable.ion({\n scroll : 'onGridVerticalScroll',\n scrollend : 'onGridVerticalScrollEnd',\n thisObj : me\n });\n me.callEachSubGrid('initScroll');\n // Fixes scroll freezing bug on iPad by putting scroller in its own layer\n if (BrowserHelper.isMobileSafari) {\n scrollable.element.style.transform = 'translate3d(0, 0, 0)';\n }\n }\n }\n onGridVerticalScroll({ source : scrollable }) {\n const\n me = this,\n { y : scrollTop } = scrollable;\n // Was getting scroll events in FF where scrollTop was unchanged, ignore those\n if (scrollTop !== me._scrollTop) {\n me._scrollTop = scrollTop;\n if (!me.scrolling) {\n me.scrolling = true;\n // Vertical scroll may trigger resize if row height is variable\n me.eachSubGrid(s => s.suspendResizeMonitor = true);\n }\n me.rowManager.updateRenderedRows(scrollTop);\n // Hook for features that need to react to scroll\n me.afterScroll({ scrollTop });\n /**\n * Grid has scrolled vertically\n * @event scroll\n * @param {Grid.view.Grid} source The firing Grid instance.\n * @param {Number} scrollTop The vertical scroll position.\n */\n me.trigger('scroll', { scrollTop });\n }\n }\n onGridVerticalScrollEnd() {\n this.scrolling = false;\n this.eachSubGrid(s => s.suspendResizeMonitor = false);\n }\n /**\n * Scrolls a row into view. If row isn't rendered it tries to calculate position. Accepts the {@link BryntumScrollOptions}\n * `column` property\n * @param {Core.data.Model|String|Number} recordOrId Record or record id\n * @param {BryntumScrollOptions} [options] How to scroll.\n * @returns {Promise} A promise which resolves when the specified row has been scrolled into view.\n * @category Scrolling\n */\n async scrollRowIntoView(recordOrId, options = defaultScrollOptions) {\n const\n me = this,\n blockPosition = options.block || 'nearest',\n { rowManager } = me,\n record = me.store.getById(recordOrId);\n if (record) {\n let scrollPromise;\n // check that record is \"displayable\", not filtered out or hidden by collapse\n if (me.store.indexOf(record) === -1) {\n return resolvedPromise;\n }\n let scroller = me.scrollable,\n recordRect = me.getRecordCoords(record);\n const scrollerRect = Rectangle.from(scroller.element);\n // If it was calculated from the index, update the rendered rowScrollMode\n // and scroll to the actual element. Note that this should only be necessary\n // for variableRowHeight.\n // But to \"make the tests green\", this is a workaround for a buffered rendering\n // bug when teleporting scroll. It does not render the rows at their correct\n // positions. Please do not try to \"fix\" this. I will do it. NGW\n if (recordRect.virtual) {\n const\n virtualBlock = recordRect.block,\n innerOptions = blockPosition !== 'nearest' ? options : {\n block : virtualBlock\n };\n // Scroll the calculated position **synchronously** to the center of the scrollingViewport\n // and then update the rendered block while asking the RowManager to\n // display the required recordOrId.\n scrollPromise = scroller.scrollIntoView(recordRect, {\n block : 'center'\n });\n rowManager.scrollTargetRecordId = record;\n rowManager.updateRenderedRows(scroller.y, true);\n recordRect = me.getRecordCoords(record);\n rowManager.lastScrollTop = scroller.y;\n if (recordRect.virtual) {\n // bail out to not get caught in infinite loop, since code above is cut out of bundle\n return resolvedPromise;\n }\n // Scroll the target just less than append/prepend buffer height out of view so that the animation looks good\n if (options.animate) {\n // Do not fire scroll events during this scroll sequence - it's a purely cosmetic operation.\n // We are scrolling the desired row out of view merely to *animate scroll* it to the requested position.\n scroller.suspendEvents();\n // Scroll to its final position\n if (blockPosition === 'end' || blockPosition === 'nearest' && virtualBlock === 'end') {\n scroller.y -= (scrollerRect.bottom - recordRect.bottom);\n }\n else if (blockPosition === 'start' || blockPosition === 'nearest' && virtualBlock === 'start') {\n scroller.y += (recordRect.y - scrollerRect.y);\n }\n // Ensure rendered block is correct at that position\n rowManager.updateRenderedRows(scroller.y, false, true);\n // Scroll away from final position to enable a cosmetic scroll to final position\n if (virtualBlock === 'end') {\n scroller.y -= (rowManager.appendRowBuffer * rowManager.rowHeight - 1);\n }\n else {\n scroller.y += (rowManager.prependRowBuffer * rowManager.rowHeight - 1);\n }\n // Now we're at the required position, resume events\n scroller.resumeEvents();\n // The row will still be rendered, so scroll it using the scroller directly\n await scroller.scrollIntoView(me.getRecordCoords(record), Object.assign({}, options, innerOptions));\n }\n else {\n if (!options.recursive) {\n await scrollPromise;\n }\n // May already be destroyed at this point, hence ?.\n await me.scrollRowIntoView?.(record, Object.assign({ recursive : true }, options, innerOptions));\n }\n }\n else {\n let { column } = options;\n if (column) {\n if (!column.isModel) {\n column = me.columns.getById(column) || me.columns.get(column);\n }\n // If we are targeting a column, we must use the scroller of that column's SubGrid\n if (column) {\n scroller = me.getSubGridFromColumn(column).scrollable;\n const cellRect = Rectangle.from(rowManager.getRowFor(record).getCell(column.id));\n recordRect.x = cellRect.x;\n recordRect.width = cellRect.width;\n }\n }\n // No column, then tell the scroller not to scroll in the X axis (without polluting the passed options)\n else {\n options = ObjectHelper.assign({}, options, { x : false });\n }\n await scroller.scrollIntoView(recordRect, options);\n }\n }\n }\n /**\n * Scrolls a column into view (if it is not already)\n * @param {Grid.column.Column|String|Number} column Column name (data) or column index or actual column object.\n * @param {BryntumScrollOptions} [options] How to scroll.\n * @returns {Promise} If the column exists, a promise which is resolved when the column header element has been\n * scrolled into view.\n * @category Scrolling\n */\n scrollColumnIntoView(column, options) {\n column = (column instanceof Column) ? column : this.columns.get(column) || this.columns.getById(column) || this.columns.getAt(column);\n return this.getSubGridFromColumn(column).scrollColumnIntoView(column, options);\n }\n /**\n * Scrolls a cell into view (if it is not already)\n * @param {Object} cellContext Cell selector { id: recordId, column: 'columnName' }\n * @category Scrolling\n */\n scrollCellIntoView(cellContext, options) {\n return this.scrollRowIntoView(cellContext.id, Object.assign({\n column : cellContext.columnId\n }, typeof options === 'boolean' ? { animate : options } : options));\n }\n /**\n * Scroll all the way down\n * @returns {Promise} A promise which resolves when the bottom is reached.\n * @category Scrolling\n */\n scrollToBottom(options) {\n // triggers scroll to last record. not using current scroller height because we do not know if it is correct\n return this.scrollRowIntoView(this.store.last, options);\n }\n /**\n * Scroll all the way up\n * @returns {Promise} A promise which resolves when the top is reached.\n * @category Scrolling\n */\n scrollToTop(options) {\n return this.scrollable.scrollBy(0, -this.scrollable.y, options);\n }\n /**\n * Stores the scroll state. Returns an objects with a `scrollTop` number value for the entire grid and a `scrollLeft`\n * object containing a left position scroll value per sub grid.\n * @returns {Object}\n * @category Scrolling\n */\n storeScroll() {\n const\n me = this,\n state = me.storedScrollState = {\n scrollTop : me.scrollable.y,\n scrollLeft : {}\n };\n me.eachSubGrid(subGrid => {\n state.scrollLeft[subGrid.region] = subGrid.scrollable.x;\n });\n return state;\n }\n /**\n * Restore scroll state. If state is not specified, restores the last stored state.\n * @param {Object} [state] Scroll state, optional\n * @category Scrolling\n */\n restoreScroll(state = this.storedScrollState) {\n const me = this;\n me.eachSubGrid(subGrid => {\n const x = state.scrollLeft[subGrid.region];\n // Force scrollable to set its position to the underlying element in case it was removed and added back to\n // the DOM prior to restoring state\n if (x != null) {\n subGrid.scrollable.updateX(x);\n subGrid.header.scrollable.updateX(x);\n subGrid.footer.scrollable.updateX(x);\n subGrid.fakeScroller?.updateX(x);\n }\n });\n me.scrollable.updateY(state.scrollTop);\n }\n //endregion\n //region Theme & measuring\n beginGridMeasuring() {\n const me = this;\n if (!me.$measureCellElements) {\n me.$measureCellElements = DomHelper.createElement({\n // For row height measuring, features are not yet there. Work around that for the stripe feature,\n // which removes borders\n className : 'b-grid-subgrid ' + (!me._isRowMeasured && me.hasFeature('stripe') ? 'b-stripe' : ''),\n reference : 'subGridElement',\n style : {\n position : 'absolute',\n top : '-10000px',\n left : '-100000px',\n visibility : 'hidden',\n contain : 'strict'\n },\n children : [\n {\n className : 'b-grid-row',\n reference : 'rowElement',\n children : [\n {\n className : 'b-grid-cell',\n reference : 'cellElement',\n style : {\n width : 'auto',\n contain : BrowserHelper.isFirefox ? 'layout paint' : 'layout style paint'\n }\n }\n ]\n }\n ]\n });\n }\n // Bring element into life if we get here early, to be able to access verticalScroller below\n me.getConfig('element');\n // Temporarily add to where subgrids live, to get have all CSS classes in play\n me.verticalScroller.appendChild(me.$measureCellElements.subGridElement);\n // Not yet on page, which prevents us from getting style values. Add it to the DOM temporarily\n if (!me.rendered) {\n const\n targetEl = me.appendTo || me.insertBefore || document.body,\n rootElement = DomHelper.getRootElement(typeof targetEl === 'string' ? document.getElementById(targetEl) : targetEl) || document.body;\n if (!me.adopt || !rootElement.contains(me.element)) {\n rootElement.appendChild(me.element);\n me.$removeAfterMeasuring = true;\n }\n }\n return me.$measureCellElements;\n }\n endGridMeasuring() {\n // Remove grid from DOM if it was added for measuring\n if (this.$removeAfterMeasuring) {\n this.element.remove();\n this.$removeAfterMeasuring = false;\n }\n // Remove measuring elements from grid\n this.$measureCellElements.subGridElement.remove();\n }\n /**\n * Creates a fake subgrid with one row and measures its height. Result is used as rowHeight.\n * @private\n */\n measureRowHeight() {\n const\n me = this,\n // Create a fake subgrid with one row, since styling for row is specified on .b-grid-subgrid .b-grid-row\n { rowElement } = me.beginGridMeasuring(),\n // Use style height or default height from config.\n // Not using clientHeight since it will have some value even if no height specified in CSS\n styles = DomHelper.getStyleValue(rowElement, ['height', 'border-top-width', 'border-bottom-width']),\n styleHeight = parseInt(styles.height),\n // FF reports border width adjusted to device pixel ration, e.g. on a 150% scaling it would tell 0.6667px width\n // for a 1px border. Dividing by the integer part to take base devicePixelRatio into account\n multiplier = BrowserHelper.isFirefox ? globalThis.devicePixelRatio / Math.max(Math.trunc(globalThis.devicePixelRatio), 1) : 1,\n borderTop = styles['border-top-width'] ? Math.round(multiplier * parseFloat(styles['border-top-width'])) : 0,\n borderBottom = styles['border-bottom-width'] ? Math.round(multiplier * parseFloat(styles['border-bottom-width'])) : 0;\n // Change rowHeight if specified in styling, also remember that value to replace later if theme changes and\n // user has not explicitly set some other height\n if (me.rowHeight == null || me.rowHeight === me._rowHeightFromStyle) {\n me.rowHeight = !isNaN(styleHeight) && styleHeight ? styleHeight : me.defaultRowHeight;\n me._rowHeightFromStyle = me.rowHeight;\n }\n // this measurement will be added to rowHeight during rendering, to get correct cell height\n me._rowBorderHeight = borderTop + borderBottom;\n me._isRowMeasured = true;\n me.endGridMeasuring();\n }\n /**\n * Handler for global theme change event (triggered by shared.js). Remeasures row height.\n * @private\n */\n onThemeChange({ theme }) {\n // Can only measure when we are visible, so do it next time we are.\n this.whenVisible('measureRowHeight');\n this.trigger('theme', { theme });\n }\n //endregion\n //region Rendering of rows\n /**\n * Triggers a render of records to all row elements. Call after changing order, grouping etc. to reflect changes\n * visually. Preserves scroll.\n * @category Rendering\n */\n refreshRows(returnToTop = false) {\n const { element, rowManager } = this;\n element.classList.add('b-notransition');\n if (returnToTop) {\n rowManager.returnToTop();\n }\n else {\n // Force refreshing even if we had no rows previously\n rowManager.refresh(true);\n }\n element.classList.remove('b-notransition');\n }\n /**\n * Triggers a render of all the cells in a column.\n * @param {Grid.column.Column} column\n * @category Rendering\n */\n refreshColumn(column) {\n if (column.isVisible) {\n if (column.isLeaf) {\n this.rowManager.forEach(row => row.renderCell(row.getCell(column.id)));\n }\n else {\n column.children.forEach(child => this.refreshColumn(child));\n }\n }\n }\n //endregion\n //region Render the grid\n /**\n * Recalculates virtual scrollbars widths and scrollWidth\n * @private\n */\n refreshVirtualScrollbars() {\n // NOTE: This was at some point changed to only run on platforms with width-occupying scrollbars, but it needs\n // to run with overlayed scrollbars also to make them show/hide as they should.\n const\n me = this,\n {\n headerContainer,\n footerContainer,\n virtualScrollers,\n scrollable,\n hasVerticalOverflow\n } = me,\n { classList } = virtualScrollers,\n hadHorizontalOverflow = !classList.contains('b-hide-display'),\n // We need to ask each subGrid if it has horizontal overflow.\n // If any do, we show the virtual scroller, otherwise we hide it.\n hasHorizontalOverflow = Object.values(me.subGrids).some(subGrid => subGrid.overflowingHorizontally),\n horizontalOverflowChanged = hasHorizontalOverflow !== hadHorizontalOverflow;\n // If horizontal overflow state changed, the docked horizontal scrollbar's visibility\n // must be synced to match, and this may cause a height change;\n if (horizontalOverflowChanged) {\n virtualScrollers.classList.toggle('b-hide-display', !hasHorizontalOverflow);\n }\n // Auto-widthed padding element at end hides or shows to create matching margin.\n if (DomHelper.scrollBarWidth) {\n // Header will need its extra padding if we have overflow, *OR* if we are overflowY : scroll\n const needsPadding = hasVerticalOverflow || scrollable.overflowY === 'scroll';\n headerContainer.classList.toggle('b-show-yscroll-padding', needsPadding);\n footerContainer.classList.toggle('b-show-yscroll-padding', needsPadding);\n virtualScrollers.classList.toggle('b-show-yscroll-padding', needsPadding);\n // Do any measuring necessitated by show/hide of the docked horizontal scrollbar\n /// *after* mutating DOM classnames.\n if (horizontalOverflowChanged) {\n // If any subgrids reported they have horizontal overflow, then we have to ask them\n // to sync the widths of the scroll elements inside the docked horizontal scrollbar\n // so that it takes up the required scrollbar width at the bottom of our body element.\n if (hasHorizontalOverflow) {\n me.callEachSubGrid('refreshFakeScroll');\n }\n me.onHeightChange();\n }\n }\n }\n get hasVerticalOverflow() {\n return this.scrollable.hasOverflow('y');\n }\n /**\n * Returns content height calculated from row manager\n * @private\n */\n get contentHeight() {\n const rowManager = this.rowManager;\n return Math.max(rowManager.totalHeight, rowManager.bottomRow ? rowManager.bottomRow.bottom : 0);\n }\n onContentChange() {\n const\n me = this,\n rowManager = me.rowManager;\n if (me.isVisible) {\n rowManager.estimateTotalHeight();\n me.paintListener = null;\n me.refreshTotalHeight(me.contentHeight);\n me.callEachSubGrid('refreshFakeScroll');\n me.onHeightChange();\n }\n // If not visible, this operation MUST be done when we become visible.\n // This is announced by the paint event which is triggered when a Widget\n // really gains visibility, ie is shown or rendered, or it's not hidden,\n // and a hidden/non-rendered ancestor is shown or rendered.\n // See Widget#triggerPaint.\n else if (!me.paintListener) {\n me.paintListener = me.ion({\n paint : 'onContentChange',\n once : true,\n thisObj : me\n });\n }\n }\n triggerPaint() {\n if (!this.isPainted) {\n this.refreshBodyRectangle();\n }\n super.triggerPaint();\n }\n onHeightChange() {\n const me = this;\n // cache to avoid recalculations in the middle of rendering code (RowManger#getRecordCoords())\n me.refreshBodyRectangle();\n me._bodyHeight = me.autoHeight ? me.contentHeight : me.bodyContainer.offsetHeight;\n }\n suspendRefresh() {\n this.refreshSuspended++;\n }\n resumeRefresh(trigger) {\n if (this.refreshSuspended && !--this.refreshSuspended) {\n if (trigger) {\n this.refreshRows();\n }\n this.trigger('resumeRefresh', { trigger });\n }\n }\n /**\n * Rerenders all grid rows, completely replacing all row elements with new ones\n * @category Rendering\n */\n renderRows(keepScroll = true) {\n const\n me = this,\n scrollState = keepScroll && me.storeScroll();\n if (me.refreshSuspended) {\n return;\n }\n /**\n * Grid rows are about to be rendered\n * @event beforeRenderRows\n * @param {Grid.view.Grid} source This grid.\n */\n me.trigger('beforeRenderRows');\n me.renderingRows = true;\n // This allows us to do things like disable animations on a refresh\n me.element.classList.add('b-grid-refreshing');\n if (!keepScroll) {\n me.scrollable.y = me._scrollTop = 0;\n }\n me.rowManager.reinitialize(!keepScroll);\n /**\n * Grid rows have been rendered\n * @event renderRows\n * @param {Grid.view.Grid} source This grid.\n */\n me.trigger('renderRows');\n me.renderingRows = false;\n me.onContentChange();\n if (keepScroll) {\n me.restoreScroll(scrollState);\n }\n me.element.classList.remove('b-grid-refreshing');\n }\n /**\n * Rerenders the grids rows, headers and footers, completely replacing all row elements with new ones\n * @category Rendering\n */\n renderContents() {\n const\n me = this,\n { element, headerContainer, footerContainer, rowManager } = me;\n me.emptyCache();\n // columns will be \"drawn\" on render anyway, bail out\n if (me.isPainted) {\n // reset measured header height, to make next call to get headerHeight measure it\n me._headerHeight = null;\n me.callEachSubGrid('refreshHeader');\n me.callEachSubGrid('refreshFooter');\n // Note that these are hook methods for features to plug in to. They do not do anything.\n me.renderHeader(headerContainer, element);\n me.renderFooter(footerContainer, element);\n me.fixSizes();\n // any elements currently used for rows should be released.\n // actual removal of elements is done in SubGrid#clearRows\n const refreshContext = rowManager.removeAllRows();\n rowManager.calculateRowCount(false, true, true);\n if (rowManager.rowCount) {\n // Sets up the RowManager's position for when renderRows calls RowManager#reinitialize\n // so that it renders the correct data block at the correct position.\n rowManager.setPosition(refreshContext);\n me.renderRows();\n }\n }\n }\n /**\n * Rerenders all grid headers\n * @category Rendering\n */\n refreshHeaders() {\n this.callEachSubGrid('refreshHeader');\n }\n /**\n * Rerender a single grid header\n * @param {Grid.column.Column} column The column to refresh\n * @category Rendering\n */\n refreshHeader(column) {\n column.subGrid.refreshHeader();\n }\n onPaintOverride() {\n // Internal procedure used for paint method overrides\n // Not used in onInternalPaint() because it may be chained on instance and Override won't be applied\n }\n // Render rows etc. on first paint, to make sure Grids element has been laid out\n onInternalPaint({ firstPaint }) {\n const me = this;\n me.ariaElement.setAttribute('aria-rowcount', me.store.count + 1);\n super.onInternalPaint?.(...arguments);\n if (me.onPaintOverride() || !firstPaint) {\n return;\n }\n const\n {\n rowManager,\n store,\n element,\n headerContainer,\n bodyContainer,\n footerContainer\n } = me,\n scrollPad = DomHelper.scrollBarPadElement;\n let columnsChanged,\n maxDepth = 0;\n // ARIA. Update our ariaElement that encapsulates all rows.\n // The header is counted as a row, and column headers are cells.\n me.role = store?.isTree ? 'treegrid' : 'grid';\n // See if updateResponsive changed any columns.\n me.columns.ion({\n change : () => columnsChanged = true,\n once : true\n });\n // Apply any responsive configs before rendering rows.\n me.updateResponsive(me.width, 0);\n // If there were any column changes, apply them\n if (columnsChanged) {\n me.callEachSubGrid('refreshHeader', headerContainer);\n me.callEachSubGrid('refreshFooter', footerContainer);\n }\n // Note that these are hook methods for features to plug in to. They do not do anything.\n // SubGrids take care of their own rendering.\n me.renderHeader(headerContainer, element);\n me.renderFooter(footerContainer, element);\n // These padding elements are only visible on scrollbar showing platforms.\n // And then, only when the owning element as the b-show-yscroll-padding class added.\n // See refreshVirtualScrollbars where this is synced on the header, footer and scroller elements.\n DomHelper.append(headerContainer, scrollPad);\n DomHelper.append(footerContainer, scrollPad);\n DomHelper.append(me.virtualScrollers, scrollPad);\n // Cached, updated on resize. Used by RowManager and by the subgrids upon their render.\n // Measure after header and footer have been rendered and taken their height share.\n me.refreshBodyRectangle();\n const bodyOffsetHeight = me.bodyContainer.offsetHeight;\n if (me.autoHeight) {\n me._bodyHeight = rowManager.initWithHeight(element.offsetHeight - headerContainer.offsetHeight - footerContainer.offsetHeight, true);\n bodyContainer.style.height = me.bodyHeight + 'px';\n }\n else {\n me._bodyHeight = bodyOffsetHeight;\n rowManager.initWithHeight(me._bodyHeight, true);\n }\n me.eachSubGrid(subGrid => {\n if (subGrid.header.maxDepth > maxDepth) {\n maxDepth = subGrid.header.maxDepth;\n }\n });\n headerContainer.dataset.maxDepth = maxDepth;\n me.fixSizes();\n if (store.count || !store.isLoading) {\n me.renderRows();\n }\n // With autoHeight cells we need to refresh rows when fonts are loaded, to get correct measurements\n if (me.columns.usesAutoHeight) {\n const { fonts } = document;\n if (fonts?.status !== 'loaded') {\n fonts.ready.then(() => !me.isDestroyed && me.refreshRows());\n }\n }\n me.initScroll();\n me.initInternalEvents();\n }\n render() {\n const me = this;\n // When displayed inside one of our containers, require a size to be considered visible. Ensures it is painted\n // on display when for example in a tab\n me.requireSize = Boolean(me.owner);\n // Render as a container. This renders the child SubGrids\n super.render(...arguments);\n me.setupFocusListeners();\n if (!me.autoHeight) {\n // Sanity check that main element has been given some sizing styles, unless autoHeight is used in which case\n // it will be sized programmatically instead\n if (me.headerContainer.offsetHeight && !me.bodyContainer.offsetHeight) {\n console.warn('Grid element not sized correctly, please check your CSS styles and review how you size the widget');\n }\n // Warn if height equals the predefined minHeight, likely that is not what the dev intended\n if (\n !me.splitFrom && !me.features.split?.owner && // Don't warn for splits\n !('minHeight' in me.initialConfig) &&\n !('height' in me.initialConfig) &&\n parseInt(globalThis.getComputedStyle(me.element).minHeight) === me.height\n ) {\n console.warn(\n `The ${me.$$name} is sized by its predefined minHeight, likely this is not intended. ` +\n `Please check your CSS and review how you size the widget, or assign a fixed height in the config. ` +\n `For more information, see the \"Basics/Sizing the component\" guide in docs.`\n );\n }\n }\n }\n //endregion\n //region Hooks\n /**\n * Called after headers have been rendered to the headerContainer.\n * This does not do anything, it's just for Features to hook in to.\n * @param {HTMLElement} headerContainer DOM element which contains the headers.\n * @param {HTMLElement} element Grid element\n * @private\n * @category Rendering\n */\n renderHeader(headerContainer, element) {}\n /**\n * Called after footers have been rendered to the footerContainer.\n * This does not do anything, it's just for Features to hook in to.\n * @param {HTMLElement} footerContainer DOM element which contains the footers.\n * @param {HTMLElement} element Grid element\n * @private\n * @category Rendering\n */\n renderFooter(footerContainer, element) {}\n // Hook for features to affect cell rendering before renderers are run\n beforeRenderCell() {}\n // Hooks for features to react to a row being rendered\n beforeRenderRow() {}\n afterRenderRow() {}\n // Hook for features to react to scroll\n afterScroll() {}\n // Hook that can be overridden to prepare custom editors, can be used by framework wrappers\n processCellEditor(editorConfig) {}\n // Hook for features to react to column changes\n afterColumnsChange() {}\n // Hook for features to react to record removal (which might be transitioned)\n afterRemove(removeEvent) {}\n // Hook for features to react to groups being collapsed/expanded\n afterToggleGroup() {}\n // Hook for features to react to subgrid being collapsed\n afterToggleSubGrid() {}\n // Hook into Base, to trigger another hook for features to hook into :)\n // If features hook directly into this, it will be called both for Grid's changes + feature's changes,\n // since they also extend Base.\n onConfigChange(info) {\n super.onConfigChange(info);\n if (!this.isConfiguring) {\n this.afterConfigChange(info);\n }\n }\n afterConfigChange(info) {}\n afterAddListener(eventName, listener) {}\n afterRemoveListener(eventName, listener) {}\n //endregion\n //region Masking and Appearance\n syncMaskCover(mask = this.masked) {\n if (mask) {\n const\n bodyRect = (mask.cover === 'body') && this.rectangleOf('bodyContainer'),\n scrollerRect = bodyRect && this.rectangleOf('virtualScrollers'),\n { style } = mask.element;\n // the width of the bodyCt covers the vscroll but the height does not cover the hscroll:\n style.marginTop = bodyRect ? `${bodyRect.y}px` : '';\n style.height = bodyRect ? `${bodyRect.height + (scrollerRect?.height || 0)}px` : '';\n }\n }\n /**\n * Show a load mask with a spinner and the specified message. When using an AjaxStore masking and unmasking is\n * handled automatically, but if you are loading data in other ways you can call this function manually when your\n * load starts.\n * ```\n * myLoadFunction() {\n * // Show mask before initiating loading\n * grid.maskBody('Loading data');\n * // Your custom loading code\n * load.then(() => {\n * // Hide the mask when loading is finished\n * grid.unmaskBody();\n * });\n * }\n * ```\n * @param {String|MaskConfig} loadMask The message to show in the load mask (next to the spinner) or a config object\n * for a {@link Core.widget.Mask}.\n * @returns {Core.widget.Mask}\n * @category Misc\n */\n maskBody(loadMask) {\n let ret;\n if (this.bodyContainer) {\n this.masked = Mask.mergeConfigs(this.loadMaskDefaults, loadMask); // smart setter\n ret = this.masked; // read back\n }\n return ret;\n }\n /**\n * Hide the load mask.\n * @category Misc\n */\n unmaskBody() {\n this.masked = null;\n }\n updateEmptyText(emptyText) {\n this.emptyTextEl?.remove();\n const isDomHelper = typeof emptyText === 'object';\n if (isDomHelper) {\n emptyText = ArrayHelper.asArray(emptyText);\n }\n // Grid might be created without subgrids, will add element to first when it is added\n this.emptyTextEl = DomHelper.createElement({\n parent : this.firstItem?.element,\n className : 'b-empty-text',\n [isDomHelper ? 'children' : emptyText?.includes('<') ? 'html' : 'text'] : emptyText\n });\n }\n toggleEmptyText() {\n const { bodyContainer, store } = this;\n bodyContainer?.classList.toggle('b-grid-empty', !(store.count > 0 || store.isLoading || store.isCommitting));\n }\n // Notify columns when our read-only state is toggled\n updateReadOnly(readOnly, old) {\n super.updateReadOnly(readOnly, old);\n if (!this.isConfiguring) {\n for (const column of this.columns.bottomColumns) {\n column.updateReadOnly?.(readOnly);\n }\n }\n }\n //endregion\n //region Extract config\n // This function is not meant to be called by any code other than Base#getCurrentConfig().\n // It extracts the current configs for the grid, with special handling for inline data\n getCurrentConfig(options) {\n const\n result = super.getCurrentConfig(options),\n { store } = this,\n // Clean up inline data to not have group records in it\n data = store.getInlineData(options),\n // Get stores current state, in case it has filters etc. added at runtime\n storeState = store.getCurrentConfig(options) || result.store;\n if (data.length) {\n result.data = data;\n }\n // Don't include the default model class\n if (storeState && store.originalModelClass === GridRowModel) {\n delete storeState.modelClass;\n }\n if (!ObjectHelper.isEmpty(storeState)) {\n result.store = storeState;\n }\n if (result.store) {\n delete result.store.data;\n }\n return result;\n }\n //endregion\n _animationSuspendedCounter = 0;\n /**\n * Suspends CSS transitions after a row / event has been updated\n *\n * Multiple calls to `suspendAnimations` stack up, and will require an equal number of `resumeAnimations` calls to\n * actually resume animations.\n * @category Misc\n */\n suspendAnimations() {\n this._animationSuspendedCounter++;\n }\n /**\n * Resumes CSS transitions after a row / event has been updated\n * @category Misc\n */\n resumeAnimations() {\n this._animationSuspendedCounter--;\n }\n exitTransition() {\n this.isAnimating = false;\n this.trigger('transitionEnd');\n }\n /**\n * Runs a function with transitions enabled (row height, event size etc.). Useful if you want to alter the UI\n * state with a transition.\n *\n * @param {Function} fn The function to run\n * @returns {Promise} A promise which resolves when the transition duration has expired\n * @category Misc\n */\n async runWithTransition(fn, duration = this.transitionDuration /* duration = false prevents transition */) {\n const me = this;\n // Do not attempt to enter animating state if we are not visible\n if (me.isVisible && me._animationSuspendedCounter === 0) {\n // Allow calling with true/false to keep code simpler in other places\n if (duration == null || duration === true) {\n duration = me.transitionDuration;\n }\n // Ask Grid superclass to enter the animated state if requested and enabled.\n if (duration && me.enableEventAnimations !== false) {\n if (!me.hasTimeout('exitTransition')) {\n me.isAnimating = true;\n }\n // Queue Exit animating state\n exitTransition.delay = duration;\n this.setTimeout(exitTransition);\n }\n }\n await this.executeAndAwaitAnimations(me.element, fn);\n }\n}\n// Register this widget type with its Factory\nGridBase.initClass();\nVersionHelper.setVersion('grid', '5.6.6');\nGridBase._$name = 'GridBase';", "//region Import\nimport GridBase from './GridBase.js';\n// import default features (might be able to skip this when draft on dynamic import is implemented)\nimport '../feature/CellEdit.js';\nimport '../feature/CellMenu.js';\nimport '../feature/ColumnAutoWidth.js';\nimport '../feature/ColumnDragToolbar.js';\nimport '../feature/ColumnPicker.js';\nimport '../feature/ColumnReorder.js';\nimport '../feature/ColumnResize.js';\nimport '../feature/Filter.js';\nimport '../feature/FilterBar.js';\nimport '../feature/Group.js';\nimport '../feature/HeaderMenu.js';\nimport '../feature/RowCopyPaste.js';\nimport '../feature/Sort.js';\nimport '../feature/Stripe.js';\n// To enable using checkbox selection mode, moved here to not be dragged into GridBase automatically\nimport '../column/CheckColumn.js';\n//endregion\n/**\n * @module Grid/view/Grid\n */\n/**\n * The Grid component is a very powerful and performant UI component that shows tabular data (or tree data using the\n * {@link Grid.view.TreeGrid}).\n *\n *

Intro

\n * The Grid widget has a wide range of features and a large API to allow users to work with data efficiently in the\n * browser. The two most important configs are {@link #config-store} and {@link #config-columns}. With the store config,\n * you decide which data to load into the grid. You can work with both in-memory arrays or load data using ajax. See the\n * {@link Core.data.Store} class to learn more about loading data into stores.\n *\n * The columns config accepts an array of {@link Grid.column.Column Column} descriptors defining which fields that will\n * be displayed in the grid. The {@link Grid.column.Column#config-field} property in the column descriptor maps to a\n * field in your dataset. The simplest grid configured with inline data and two columns would look like this:\n *\n * {@frameworktabs}\n * {@js}\n *\n * ```javascript\n * const grid = new Grid({\n * appendTo : document.body,\n *\n * columns: [\n * { field: 'name', text: 'Name' },\n * { field: 'job', text: 'Job', renderer: ({value}) => value || 'Unemployed' }\n * ],\n *\n * data: [\n * { name: 'Bill', job: 'Retired' },\n * { name: 'Elon', job: 'Visionary' },\n * { name: 'Me' }\n * ]\n * });\n * ```\n *\n * {@endjs}\n * {@react}\n *\n * ```jsx\n * const App = props => {\n * const [columns, setColumns] = useState([\n * { field: 'name', text: 'Name' },\n * { field: 'job', text: 'Job', renderer: ({value}) => value || 'Unemployed' }\n * ]);\n *\n * const [data, setData] = useState([\n * { name: 'Bill', job: 'Retired' },\n * { name: 'Elon', job: 'Visionary' },\n * { name: 'Me' }\n * ]);\n *\n * return \n * }\n * ```\n *\n * {@endreact}\n * {@vue}\n *\n * ```html\n * \n * ```\n *\n * ```javascript\n * export default {\n * setup() {\n * return {\n * columns : [\n * { field: 'name', text: 'Name' },\n * { field: 'job', text: 'Job', renderer: ({value}) => value || 'Unemployed' }\n * ]\n * data : reactive([\n * { name: 'Bill', job: 'Retired' },\n * { name: 'Elon', job: 'Visionary' },\n * { name: 'Me' }\n * ])\n * };\n * }\n * }\n * ```\n *\n * {@endvue}\n * {@angular}\n * ```html\n * \n * ```\n *\n * ```typescript\n * export class AppComponent {\n * columns = [\n * { field: 'name', text: 'Name' },\n * { field: 'job', text: 'Job', renderer: ({value}) => value || 'Unemployed' }\n * ]\n *\n * data = [\n * { name: 'Bill', job: 'Retired' },\n * { name: 'Elon', job: 'Visionary' },\n * { name: 'Me' }\n * ]\n * }\n * ```\n *\n * {@endangular}\n * {@endframeworktabs}\n *\n * {@inlineexample Grid/view/Grid.js}\n *\n *

Features

\n * To avoid the Grid core being bloated, its main features are implemented in separate `feature` classes. These can be\n * turned on and off based on your requirements. To configure (or disable) a feature, use the {@link #config-features}\n * object to provide your desired configuration for the features you want to use. Each feature has an \u00B4id\u00B4 that you use\n * as a key in the features object:\n *\n * ```javascript\n * const grid = new Grid({\n * features : {\n * cellEdit : false,\n * regionResize : true,\n * cellTooltip : {\n * tooltipRenderer : (data) => {\n * }\n * },\n * ...\n * }\n * });\n * ```\n *\n * {@region Column configuration options}\n * A grid contains a number of columns stored in a {@link Grid/data/ColumnStore} that control how your data is rendered.\n * The simplest option is to point a Column to a field in your dataset, or define a custom {@link Grid.column.Column#config-renderer}.\n * The renderer function receives one object parameter containing rendering data for the current cell being rendered.\n *\n * ```javascript\n * const grid = new Grid({\n * columns: [\n * {\n * field: 'task',\n * text: 'Task',\n * renderer(renderData) {\n * const record = renderData.record;\n *\n * if (record.percentDone === 100) {\n * renderData.cellElement.classList.add('taskDone');\n * renderData.cellElement.style.background = 'green';\n * }\n *\n * return renderData.value;\n * }\n * }\n * ]\n * });\n * ```\n * You can modify columns programmatically easily:\n * ```javascript\n * // resize first column\n * grid.columns.first.width = 200;\n *\n * // Change text\n * grid.columns.first.text = 'New text';\n *\n * ```\n * To learn more about modifying individual columns, please see the docs for {@link Grid/data/ColumnStore}\n * and {@link Grid/column/Column}.\n *\n * {@endregion}\n * {@region Grid sections (aka \"locked\" or \"frozen\" columns)}\n * The grid can be divided horizontally into individually scrollable sections. This is great if you have lots of columns\n * that don't fit the available width of the screen. To enable this feature, simply mark the columns you want to `lock`.\n * Locked columns are then displayed in their own section to the left of the other columns:\n *\n * ```javascript\n * const grid = new Grid({\n * width : 500,\n * subGridConfigs : {\n * // set a fixed locked section width if desired\n * locked : { width: 300 }\n * },\n * columns : [\n * { field : 'name', text : 'Name', width : 200, locked : true },\n * { field : 'firstName', text : 'First name', width : 100, locked : true },\n * { field : 'surName', text : 'Last name', width : 100, locked : true },\n * { field : 'city', text : 'City', width : 100 },\n * { type : 'number', field : 'age', text : 'Age', width : 200 },\n * { field : 'food', text : 'Food', width : 200 }\n * ]\n * });\n * ```\n *\n * {@inlineexample Grid/view/LockedGrid.js}\n * You can also move columns between sections by using drag and drop, or use the built-in header context menu. If you\n * want to be able to resize the locked grid section, enable the {@link Grid.feature.RegionResize} feature.\n * {@endregion}\n * {@region Filtering}\n * One important requirement of a good Grid component is the ability to filter large datasets to quickly find what you\n * are looking for. To enable filtering (through the context menu), add the {@link Grid.feature.Filter} feature:\n *\n * ```javascript\n * const grid = new Grid({\n * features: {\n * filter: true\n * }\n * });\n * ```\n *\n * Or activate a default filter at initial rendering:\n *\n * ```javascript\n * const grid = new Grid({\n * features: {\n * filter: { property : 'city', value : 'New York' }\n * }\n * });\n * ```\n *\n * {@inlineexample Grid/feature/Filter.js}\n * {@endregion}\n * {@region Tooltips}\n * If you have a data models with many fields, and you want to show\n * additional data when hovering over a cell, use the {@link Grid.feature.CellTooltip} feature. To show a\n * tooltip for all cells:\n *\n * ```javascript\n * const grid = new Grid({\n * features: {\n * cellTooltip: ({value}) => value\n * }\n * });\n * ```\n *\n * {@inlineexample Grid/feature/CellTooltip.js}\n * {@endregion}\n * {@region Inline Editing (default on)}\n * To enable inline cell editing in the grid, simply add the {@link Grid.feature.CellEdit} feature:\n *\n * ```javascript\n * const grid = new Grid({\n * features : {\n * cellEdit : true\n * },\n * columns: [\n * {\n * field: 'task',\n * text: 'Task'\n * }\n * ]\n * });\n * ```\n *\n * {@inlineexample Grid/feature/CellEdit.js}\n * {@endregion}\n * {@region Context Menu}\n * Use {@link Grid.feature.CellMenu} and {@link Grid.feature.HeaderMenu} features if you want your users to be able to\n * interact with the data through the context menu:\n *\n * ```javascript\n * const grid = new Grid({\n * features : {\n * headerMenu : {\n * items : {\n * showInfo : {\n * text : 'Show info',\n * icon : 'fa fa-info-circle',\n * weight : 200,\n * onItem : ({ item }) => console.log(item.text)\n * }\n * }\n * },\n * cellMenu : {\n * items : {\n * showOptions : {\n * text : 'Show options',\n * icon : 'fa fa-gear',\n * weight : 200\n * }\n * }\n * }\n * }\n * });\n * ```\n *\n * {@inlineexample Grid/feature/CellMenu.js}\n * {@endregion}\n * {@region Grouping}\n * To group rows by a field in your dataset, use the {@link Grid.feature.Group} feature.\n * {@inlineexample Grid/feature/Group.js}\n * {@endregion}\n * {@region Searching}\n * When working with lots of data, a quick alternative to filtering is the {@link Grid.feature.Search} feature.\n * It highlights matching values in the grid as you type.\n * {@inlineexample Grid/feature/Search2.js}\n * {@endregion}\n * {@region Loading and saving data}\n * The grid keeps all its data in a {@link Core.data.Store}, which is essentially an Array of {@link Core.data.Model}\n * items. You define your own Model representing your data entities and use the Model API to get and set values.\n *\n * ```javascript\n * class Person extends Model {}\n *\n * const person = new Person({\n * name: 'Steve',\n * age: 38\n * });\n *\n * person.name = 'Linda'; // person object is now `dirty`\n *\n * const store = new Store({\n * data : [\n * { name : 'Don', age : 40 }\n * ]\n * });\n *\n * store.add(person);\n *\n * console.log(store.count()); // === 2\n *\n * store.remove(person); // Remove from store\n * ```\n *\n * When you update a record in a store, it's considered dirty, until you call {@link Core.data.mixin.StoreCRUD#function-commit}\n * on the containing Store. You can also configure your Store to commit automatically (like Google docs). If you use an\n * AjaxStore, it will send changes to your server when commit is called.\n *\n * Any changes you make to the Store or its records are immediately reflected in the Grid, so there is no need to tell\n * it to refresh manually.\n *\n * To create a custom load mask, subscribe to the grid's store events and {@link Core.widget.Widget#config-masked mask}\n * on {@link Core.data.AjaxStore#event-beforeRequest} and unmask on {@link Core.data.AjaxStore#event-afterRequest}. The\n * mask can also be used to display error messages if an {@link Core.data.AjaxStore#event-exception} occurs.\n *\n * ```javascript\n * const grid = new Grid({\n * loadMask : null\n * });\n *\n * grid.store.on({\n * beforeRequest() {\n * grid.masked = {\n * text : 'Data is loading...'\n * };\n * },\n * afterRequest() {\n * grid.masked = null;\n * },\n * exception({ response }) {\n * grid.masked.error = response.message || 'Load failed';\n * }\n * });\n *\n * store.load();\n * ```\n *\n * To learn more about loading and saving data, please refer to [this guide](#Grid/guides/data/displayingdata.md).\n * {@endregion}\n * {@region Default configs}\n * There is a myriad of configs and features available for Grid, some of them on by default and some of them requiring\n * extra configuration. The code below tries to illustrate the major things that are used by default:\n *\n * ```javascript\n * const grid = new Grid({\n * // The following features are enabled by default:\n * features : {\n * cellEdit : true,\n * columnPicker : true,\n * columnReorder : true,\n * columnResize : true,\n * cellMenu : true,\n * headerMenu : true,\n * group : true,\n * rowCopyPaste : true, // Allow using [Ctrl/CMD + C/X] and [Ctrl/CMD + V] to copy/cut and paste rows\n * sort : true\n * },\n *\n * animateRemovingRows : true, // Rows will slide out on removal\n * autoHeight : false, // Grid needs to have a height supplied through CSS (strongly recommended) or by specifying `height`\n * columnLines : true, // Themes might override it to hide lines anyway\n * emptyText : 'No rows to display',\n * enableTextSelection : false, // Not allowed to select text in cells by default,\n * fillLastColumn : true, // By default the last column is stretched to fill the grid\n * fullRowRefresh : true, // Refreshes entire row when a cell value changes\n * loadMask : 'Loading...',\n * resizeToFitIncludesHeader : true, // Also measure header when auto resizing columns\n * responsiveLevels : {\n * small : 400,\n * medium : 600,\n * large : '*'\n * },\n * rowHeight : null, // Determined using CSS, it will measure rowHeight\n * showDirty : false, // No indicator for changed cells\n * });\n * ```\n *\n * {@endregion}\n * {@region Keyboard shortcuts}\n * Grid has the following default keyboard shortcuts:\n *
\n *\n * | Keys | Action | Weight \u00B9 | Action description |\n * |----------------------|------------------------|:--------:|----------------------------------------------------------------------------------------------------|\n * | `ArrowUp` | *navigateUp* | 10 | Focuses the cell above currently focused cell. |\n * | `ArrowRight` | *navigateRight* | 10 | Focuses the cell to the right of currently focused cell |\n * | `ArrowDown` | *navigateDown* | 10 | Focuses the cell below currently focused cell |\n * | `ArrowLeft` | *navigateLeft* | 10 | Focuses the cell to the left of currently focused cell |\n * | `Shift`+`ArrowUp` | *extendSelectionUp* | | Extends the selection one row up from currently focused cell |\n * | `Shift`+`ArrowRight` | *extendSelectionRight* | | Extends the selection one column to the right from currently focused cell |\n * | `Shift`+`ArrowDown` | *extendSelectionDown* | | Extends the selection one row down from currently focused cell |\n * | `Shift`+`ArrowLeft` | *extendSelectionLeft* | | Extends the selection one column to the left from currently focused cell |\n * | `Space` | *toggleSelection* | 10 | Toggles selection of currently focused cell if selectionMode.selectOnKeyboardNavigation is `false` |\n * | `Ctrl`+`Home` | *navigateFirstCell* | | Focuses the first cell at the first row (including header) |\n * | `Home` | *navigateFirstColumn* | | Focuses the first cell of current focused row |\n * | `Ctrl`+`End` | *navigateLastCell* | | Focuses the last cell of the last row |\n * | `End` | *navigateLastColumn* | | Focuses the last cell of current focused row |\n * | `PageUp` | *navigatePrevPage* | | Displays previous page |\n * | `PageDown` | *navigateNextPage* | | Displays next page |\n * | `Enter` | *activateHeader* | | Equals to a header click |\n * | `Space` | *clickCellByKey* | 1000 | Equals to a cell click |\n * | `Ctrl`+`Z` | *undoRedoKeyPress* | | Undo/redo (when using {@link Core.data.stm.StateTrackingManager}) |\n * | `Ctrl`+`Shift`+`Z` | *undoRedoKeyPress* | | Undo/redo (when using {@link Core.data.stm.StateTrackingManager}) |\n *\n * **\u00B9** Customization of keyboard shortcuts that has a `weight` can affect other features that also uses that\n * particular keyboard shortcut. Read more in [our guide](#Grid/guides/customization/keymap.md).\n *\n *
\n *\n *
Please note that Ctrl is the equivalent to Command and Alt\n * is the equivalent to Option for Mac users
\n *\n * The following Grid features has their own keyboard shortcuts. Follow the links for details.\n * * {@link Grid.feature.CellCopyPaste#keyboard-shortcuts CellCopyPaste}\n * * {@link Grid.feature.CellEdit#keyboard-shortcuts CellEdit}\n * * {@link Grid.feature.CellMenu#keyboard-shortcuts CellMenu}\n * * {@link Grid.feature.ColumnRename#keyboard-shortcuts ColumnRename}\n * * {@link Grid.feature.Filter#keyboard-shortcuts Filter}\n * * {@link Grid.feature.Group#keyboard-shortcuts Group}\n * * {@link Grid.feature.HeaderMenu#keyboard-shortcuts HeaderMenu}\n * * {@link Grid.feature.QuickFind#keyboard-shortcuts QuickFind}\n * * {@link Grid.feature.RowCopyPaste#keyboard-shortcuts RowCopyPaste}\n * * {@link Grid.feature.Search#keyboard-shortcuts Search}\n * * {@link Grid.feature.Tree#keyboard-shortcuts Tree}\n *\n * For more information on how to customize keyboard shortcuts, please see\n * [our guide](#Grid/guides/customization/keymap.md)\n *\n * {@endregion}\n * {@region Performance}\n * In general the Grid widget has very good performance and you can try loading any amount of data in the\n * bigdataset demo.\n * The overall rendering performance is naturally affected by many other things than the data volume. Other important\n * factors that can impact performance: number of columns, complex cell renderers, locked columns, the number of\n * features enabled and of course the browser (Chrome fastest).\n * {@endregion}\n * {@region Accessibility}\n * As far as possible, the grid is accessible to WAI-ARIA standards. Every cell, including column header cells is\n * visitable. The arrow keys navigate, and if a cell contains focusable content, navigating to that cell focuses the\n * content. `Escape` will exit from that and focus the encapsulating cell.\n *\n * When tabbing back into a grid that has previously been entered, focus moves to the last focused cell.\n *\n * The column menu is invoked using the `Space` key when focused on a column header.\n *\n * The cell menu is invoked using the `Space` key when focused on a data cell.\n * {@endregion}\n *\n * {@region Saving state}\n * The grid supports saving its UI {@link Grid.view.mixin.GridState state} to ensure end users will see the same column\n * sizes, sorting, grouping settings as they reload the page / app. Please refer to the {@link Grid.view.mixin.GridState}\n * and {@link Core.mixin.State} documentation for more information on state management.\n * {@endregion}\n *\n * @extends Grid/view/GridBase\n * @classtype grid\n * @widget\n */\nexport default class Grid extends GridBase {\n static get $name() {\n return 'Grid';\n }\n // Factoryable type name\n static get type() {\n return 'grid';\n }\n}\n// Register this widget type with its Factory\nGrid.initClass();\nGrid._$name = 'Grid';", "import Grid from './Grid.js';\n// tree feature will be added by default to TreeGrid, but needs to be imported\nimport '../feature/Tree.js';\n// not used here but enables using `type : tree` in a column config (exactly one required)\nimport '../column/TreeColumn.js';\n/**\n * @module Grid/view/TreeGrid\n */\n/**\n * A TreeGrid, a Tree combined with a Grid. Must be configured with exactly one {@link Grid.column.TreeColumn}\n * (`type: tree`), but can also have an arbitrary number of other columns. Most features that can be used with Grid also\n * works with TreeGrid, except the Group feature.\n *\n * {@inlineexample Grid/view/TreeGrid.js}\n *\n * @extends Grid/view/Grid\n * @classtype treegrid\n * @widget\n */\nexport default class TreeGrid extends Grid {\n static get $name() {\n return 'TreeGrid';\n }\n // Factoryable type name\n static get type() {\n return 'treegrid';\n }\n static get configurable() {\n return {\n /**\n * The store instance or config object that holds the records to be displayed by this TreeGrid. If assigning\n * a store instance, it must be configured with `tree: true`.\n *\n * A store will be created if none is specified.\n * @config {Core.data.Store|StoreConfig} store\n * @category Common\n */\n store : {\n tree : true\n }\n };\n }\n //region Plugged in functions / inherited configs\n /**\n * Collapse an expanded node or expand a collapsed. Optionally forcing a certain state.\n *\n * @function toggleCollapse\n * @param {String|Number|Core.data.Model} idOrRecord Record (the node itself) or id of a node to toggle\n * @param {Boolean} [collapse] Force collapse (true) or expand (false)\n * @param {Boolean} [skipRefresh] Set to true to not refresh rows (if calling in batch)\n * @async\n * @category Feature shortcuts\n */\n /**\n * Collapse a single node.\n *\n * @function collapse\n * @param {String|Number|Core.data.Model} idOrRecord Record (the node itself) or id of a node to collapse\n * @async\n * @category Feature shortcuts\n */\n /**\n * Expand a single node.\n *\n * @function expand\n * @param {String|Number|Core.data.Model} idOrRecord Record (the node itself) or id of a node to expand\n * @async\n * @category Feature shortcuts\n */\n /**\n * Expands parent nodes to make this node \"visible\".\n *\n * @function expandTo\n * @param {String|Number|Core.data.Model} idOrRecord Record (the node itself) or id of a node\n * @async\n * @category Feature shortcuts\n */\n //endregion\n /* disconnect doc comment */\n //region Store\n updateStore(store, was) {\n if (store && !store.tree) {\n throw new Error('TreeGrid requires a Store configured with tree : true');\n }\n super.updateStore(store, was);\n }\n //endregion\n}\n// Register this widget type with its Factory\nTreeGrid.initClass();\nTreeGrid._$name = 'TreeGrid';", "import ChipView from '../../Core/widget/ChipView.js';\nimport Store from '../../Core/data/Store.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\n/**\n * @module Grid/widget/GroupBar\n */\n/**\n * A widget used to manage grouping of a tree with the {@link Grid.feature.TreeGroup} feature. Column headers can be\n * drag-dropped on this widget to regroup the data in the tree store. This widget only handles column-based grouping,\n * and doesn't handle custom group functions.\n *\n * ```javascript\n * const tree = new TreeGrid({\n * appendTo : 'container',\n * features : {\n * treeGroup : {\n * hideGroupedColumns : true,\n * levels : [\n * 'manager',\n * 'airline'\n * ],\n * parentRenderer : (field, data) => `${StringHelper.capitalize(field)}: ${data.name}`\n * }\n * },\n *\n * columns : [\n * {\n * text : 'Name',\n * field : 'name',\n * flex : 3,\n * type : 'tree'\n * },\n * {\n * text : 'Airline',\n * field : 'airline',\n * align : 'center',\n * flex : 2,\n * },\n * {\n * type : 'check',\n * text : 'Domestic',\n * field : 'domestic',\n * align : 'left',\n * flex : 1\n * },\n * {\n * type : 'number',\n * text : 'Capacity',\n * field : 'capacity',\n * flex : 1\n * },\n * {\n * type : 'number',\n * text : 'Crew',\n * field : 'crew',\n * flex : 1\n * }\n * ],\n *\n * tbar : [\n * 'Group by',\n * {\n * type : 'groupbar'\n * }\n * ]\n * ```\n * @classtype groupbar\n * @extends Core/widget/ChipView\n * @demo Grid/tree-grouping\n * @widget\n */\nexport default class GroupBar extends ChipView {\n static type = 'groupbar';\n static $name = 'GroupBar';\n static configurable = {\n selectedCls : 'not-used',\n itemTpl(record) {\n return StringHelper.encodeHtml(StringHelper.capitalize(record.getValue(this.displayField)));\n }\n };\n construct() {\n super.construct(...arguments);\n const treeGrid = this.treeGrid = this.up('gridbase', true);\n if (!treeGrid) {\n throw new Error('GroupBar must be used inside a Grid component');\n }\n treeGrid.ion({\n paint : this.onTreePaint,\n once : true,\n thisObj : this\n });\n }\n onTreePaint() {\n const\n me = this,\n { treeGrid } = me,\n { treeGroup, columnReorder } = treeGrid.features;\n if (!treeGroup) {\n throw new Error('GroupBar widget requires the TreeGroup feature to be present');\n }\n columnReorder.usingGroupBarWidget = true;\n me.store = new Store({\n fields : ['cls', 'ascending'],\n internalListeners : {\n add : me.onStoreChanged,\n remove : me.onStoreChanged,\n thisObj : me\n }\n });\n treeGrid.ion({\n treeGroupChange : me.onTreeGroupChanged,\n beforeColumnDropFinalize : me.onBeforeColumnDropFinalize,\n columnDrag : me.onColumnDrag,\n columnDragStart : me.onColumnDragStart,\n columnDrop : me.onColumnDrop,\n thisObj : me\n });\n me.onTreeGroupChanged({ levels : treeGroup.levels });\n }\n onStoreChanged({ records }) {\n const\n me = this,\n { treeGrid } = me;\n if (!me.treeGrid.isConstructing && records?.[0]?.cls !== 'b-drop-target') {\n me.ignoreGroupChange = true;\n treeGrid.features.treeGroup.levels = me.store.map(({ field }) => field);\n me.ignoreGroupChange = false;\n }\n }\n onTreeGroupChanged({ levels }) {\n if (!this.ignoreGroupChange) {\n if (levels.some(level => level instanceof Function && !level.fieldName)) {\n throw new Error('GroupBar only supports column grouping');\n }\n this.store.data = (levels || []).map(level => {\n level = level.fieldName || level;\n return this.treeGrid.columns.get(level);\n });\n }\n }\n onColumnDragStart() {\n this.store.add({ id : 'placeholder', cls : 'b-drop-target' }); \n }\n onColumnDrag({ context, column, event }) {\n const overGroupBar = event.target.closest('.b-groupbar');\n if (overGroupBar) {\n context.valid = true;\n }\n }\n onBeforeColumnDropFinalize({ column, event }) {\n const droppedOnGroupBar = event.target.closest('.b-groupbar');\n if (droppedOnGroupBar) {\n if (!column.isTreeColumn) {\n this.store.getById('placeholder').remove();\n this.store.add(column);\n }\n }\n }\n onColumnDrop() {\n this.store.getById('placeholder')?.remove();\n }\n}\nGroupBar.initClass();\nGroupBar._$name = 'GroupBar';", "import Combo from '../../Core/widget/Combo.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\nimport '../../Grid/view/TreeGrid.js';\n/**\n * @module Grid/widget/TreeCombo\n */\n/**\n * A powerful {@link Core/widget/Combo} box using a {@link Grid/view/TreeGrid} as its drop down widget. You can define\n * your own set of columns to display and use all the regular features of the Grid.\n *\n * {@inlineexample Grid/widget/TreeCombo.js}\n *\n * ```javascript\n * new TreeCombo({\n * label : 'Pick task(s)',\n * width : '30em',\n * appendTo : document.body,\n * picker : {\n * // Define the columns to show in the grid\n * columns : [\n * { type : 'tree', text : 'Tasks', field : 'name', flex : 1 },\n * { text : 'Priority', field : 'prio' }\n * ]\n * },\n * chipView : {\n * // Render the chips in the combo field\n * itemTpl(record) {\n * return StringHelper.xss`${record.name}`;\n * }\n * },\n * store : {\n * fields : [\n * 'prio'\n * ],\n * data : [\n * {\n * name : 'Development Tasks',\n * expanded : true,\n * children : [\n * { id : 1, name : 'Improve React docs', prio : 'High' },\n * { id : 2, name : 'Build Angular module', prio : 'Low' },\n * { id : 3, name : 'Creat Vue project', prio : 'Low' }\n * ]\n * },\n * { name : 'Customer meeting', prio : 'Normal' },\n * {\n * name : 'Customer Tasks',\n * expanded : true,\n * children : [\n * { id : 4, name : 'Intro meeting', prio : 'Normal' },\n * { id : 5, name : 'Build POC', prio : 'High' },\n * { id : 6, name : 'Documentation', prio : 'Low' }\n * ]\n * }\n * ]\n * }\n * });\n * ```\n *\n * @extends Core/widget/Combo\n * @classtype treecombo\n * @inputfield\n */\nexport default class TreeCombo extends Combo {\n static $name = 'TreeCombo';\n static type = 'treecombo';\n static configurable = {\n multiSelect : true,\n picker : {\n type : 'treegrid',\n minWidth : '35em',\n disableGridRowModelWarning : true,\n selectionMode : {\n row : true,\n rowCheckboxSelection : true\n }\n },\n chipView : {\n itemTpl(record) {\n return StringHelper.xss`${record.name}`;\n },\n scrollable : {\n overflowX : 'hidden-scroll'\n }\n }\n };\n changePicker(picker, oldPicker) {\n picker = super.changePicker(picker, oldPicker);\n picker?.ion({\n selectionChange : 'onPickerSelectionChange',\n thisObj : this\n });\n return picker;\n }\n updateMultiSelect(multiSelect) {\n super.updateMultiSelect(...arguments);\n this.picker.selectionMode.multiSelect = multiSelect;\n }\n updateReadOnly(readOnly) {\n super.updateReadOnly(...arguments);\n this.picker.readOnly = readOnly;\n }\n get value() {\n return super.value;\n }\n set value(value) {\n // indicate we are setting the field value\n this._settingValue = true;\n super.value = value;\n // select provided value enitres in the picker\n this.picker.selectedRecords = value.map?.(val => this.store.getById(val)) || [];\n this._settingValue = false;\n }\n onPickerSelectionChange({ selection }) {\n // apply selection to value (if we aren't in the middle of value setting)\n if (!this._settingValue) {\n this.value = selection;\n }\n }\n}\nTreeCombo.initClass();\nTreeCombo._$name = 'TreeCombo';", "import ColumnStore from '../../Grid/data/ColumnStore.js';\nimport NumberColumn from '../../Grid/column/NumberColumn.js';\nimport Duration from '../../Core/data/Duration.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport '../../Core/widget/DurationField.js';\n/**\n * @module Scheduler/column/DurationColumn\n */\n/**\n * A column showing the task {@link Scheduler/model/TimeSpan#field-fullDuration duration}. Please note, this column\n * is preconfigured and expects its field to be of the {@link Core.data.Duration} type.\n *\n * The default editor is a {@link Core.widget.DurationField}. It parses time units, so you can enter \"4d\"\n * indicating 4 days duration, or \"4h\" indicating 4 hours, etc. The numeric magnitude can be either an integer or a\n * float value. Both \",\" and \".\" are valid decimal separators. For example, you can enter \"4.5d\" indicating 4.5 days\n * duration, or \"4,5h\" indicating 4.5 hours.\n *\n * {@inlineexample Scheduler/column/DurationColumn.js}\n *\n * @extends Grid/column/NumberColumn\n * @classtype duration\n * @column\n */\nexport default class DurationColumn extends NumberColumn {\n compositeField = true;\n //region Config\n static get $name() {\n return 'DurationColumn';\n }\n static get type() {\n return 'duration';\n }\n static get isGanttColumn() {\n return true;\n }\n static get fields() {\n return [\n /**\n * Precision of displayed duration, defaults to use {@link Scheduler.view.Scheduler#config-durationDisplayPrecision}.\n * Specify an integer value to override that setting, or `false` to use raw value\n * @config {Number|Boolean} decimalPrecision\n */\n { name : 'decimalPrecision', defaultValue : 1 }\n ];\n }\n static get defaults() {\n return {\n /**\n * Min value\n * @config {Number}\n */\n min : null,\n /**\n * Max value\n * @config {Number}\n */\n max : null,\n /**\n * Step size for spin button clicks.\n * @member {Number} step\n */\n /**\n * Step size for spin button clicks. Also used when pressing up/down keys in the field.\n * @config {Number}\n * @default\n */\n step : 1,\n /**\n * Large step size, defaults to 10 * `step`. Applied when pressing SHIFT and stepping either by click or\n * using keyboard.\n * @config {Number}\n * @default 10\n */\n largeStep : 0,\n field : 'fullDuration',\n text : 'L{Duration}',\n instantUpdate : true,\n // Undocumented, used by Filter feature to get type of the filter field\n filterType : 'duration',\n sortable(durationEntity1, durationEntity2) {\n const\n ms1 = durationEntity1.getValue(this.field),\n ms2 = durationEntity2.getValue(this.field);\n return ms1 - ms2;\n }\n };\n }\n construct() {\n super.construct(...arguments);\n const sortFn = this.sortable;\n this.sortable = (...args) => sortFn.call(this, ...args);\n }\n get defaultEditor() {\n const { max, min, step, largeStep } = this;\n // Remove any undefined configs, to allow config system to use default values instead\n return ObjectHelper.cleanupProperties({\n type : 'duration',\n name : this.field,\n max,\n min,\n step,\n largeStep\n });\n }\n //endregion\n //region Internal\n get durationUnitField() {\n return `${this.field}Unit`;\n }\n roundValue(duration) {\n const\n nbrDecimals = typeof this.grid.durationDisplayPrecision === 'number' ? this.grid.durationDisplayPrecision : this.decimalPrecision,\n multiplier = Math.pow(10, nbrDecimals),\n rounded = Math.round(duration * multiplier) / multiplier;\n return rounded;\n }\n formatValue(duration, durationUnit) {\n if (duration instanceof Duration) {\n durationUnit = duration.unit;\n duration = duration.magnitude;\n }\n duration = this.roundValue(duration);\n return duration + ' ' + DateHelper.getLocalizedNameOfUnit(durationUnit, duration !== 1);\n }\n //endregion\n //region Render\n defaultRenderer({ value, record, isExport }) {\n const\n type = typeof value,\n durationValue = type === 'number' ? value : value?.magnitude,\n durationUnit = type === 'number' ? record.getValue(this.durationUnitField) : value?.unit;\n // in case of bad input (for instance NaN, undefined or NULL value)\n if (typeof durationValue !== 'number') {\n return isExport ? '' : null;\n }\n return this.formatValue(durationValue, durationUnit);\n }\n //endregion\n // Used with CellCopyPaste as fullDuration doesn't work via record.get\n toClipboardString({ record }) {\n return record.getValue(this.field).toString();\n }\n fromClipboardString({ string, record }) {\n const duration = DateHelper.parseDuration(string, true, this.durationUnit);\n if (duration && 'magnitude' in duration) {\n return duration;\n }\n return record.fullDuration;\n }\n calculateFillValue({ value, record }) {\n return this.fromClipboardString({ string : value, record });\n }\n}\nColumnStore.registerColumnType(DurationColumn);\nDurationColumn._$name = 'DurationColumn';", "import TimeZoneHelper from '../../../Core/helper/TimeZoneHelper.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\n/**\n * @module Scheduler/model/mixin/TimeZonedDatesMixin\n */\nconst dateFieldsToConvert = {\n startDate : 1,\n endDate : 1,\n constraintDate : 1,\n deadlineDate : 1\n};\n/**\n * This mixin class overrides default Model functionality to provide support for time zone converted dates\n * @mixin\n */\nexport default Target => class TimeZonedDatesMixin extends Target {\n static $name = 'TimeZonedDatesMixin';\n static fields = [\n /**\n * The current timeZone this record is converted to. Used internally to keep track of time zone conversions.\n *\n * Can also be used to create a new record with dates in a specific non-local timezone. That is useful for\n * example when replacing a store dataset. That would be interpreted as a new load, and all dates would be\n * converted to the configured timezone.\n *\n * If specifically set to `null` when adding a new record to a Store, the new record's dates will be converted\n * to the Project's configured timezone.\n *\n * For more information about timezone conversion, se {@link Scheduler.model.ProjectModel#config-timeZone}.\n *\n * This field will not {@link Core.data.field.DataField#config-persist} by default.\n *\n * @field {String|Number|null} timeZone\n * @category Advanced\n */\n {\n name : 'timeZone',\n persist : false\n }\n ];\n get timeZone() {\n return this.getData('timeZone');\n }\n set timeZone(timeZone) {\n this.setData('timeZone', timeZone);\n }\n setLocalDate(field, date) {\n const me = this;\n me.set(field, me.timeZone != null ? TimeZoneHelper.toTimeZone(date, me.timeZone) : date, true);\n // Need to set data to fool engine that the dates haven't change\n me.setData(field, me[field]);\n }\n getLocalDate(field) {\n if (this.timeZone != null && this[field] && !isNaN(this[field])) {\n return TimeZoneHelper.fromTimeZone(this[field], this.timeZone);\n }\n return this[field];\n }\n applyChangeset(rawChanges) {\n // When a sync response arrives from backend, the data will need to be converted to time zone before applied.\n if (this.timeZone != null) {\n delete rawChanges.timeZone; // Do not allow timeZone config this way\n for (const field in dateFieldsToConvert) {\n if (rawChanges[field]) {\n this.setLocalDate(field, new Date(rawChanges[field]));\n delete rawChanges[field];\n }\n }\n }\n return super.applyChangeset(...arguments);\n }\n getFieldPersistentValue(field) {\n if (this.timeZone != null) {\n const fieldName = field?.field ?? field?.name ?? field;\n // Used when saving/syncing. Returns local system dates\n if (dateFieldsToConvert[fieldName]) {\n return this.getLocalDate(fieldName);\n }\n }\n return super.getFieldPersistentValue(field);\n }\n // Converts current record into a timeZone\n convertToTimeZone(timeZone) {\n const\n me = this,\n metaModified = { ...me.meta.modified },\n convertFields = { ...dateFieldsToConvert };\n // Do not convert start and end dates on task unless manually scheduled\n if (me.isTask && !me.manuallyScheduled) {\n delete convertFields.startDate;\n delete convertFields.endDate;\n }\n // Collect values\n for (const field in convertFields) {\n // Only convert if field has value\n if (me[field] != null) {\n convertFields[field] = me[field];\n // If already converted, restore to local system time zone\n if (me.timeZone != null) {\n convertFields[field] = me.getLocalDate(field);\n // Restore value in meta modified as well\n if (metaModified[field]) {\n metaModified[field] = TimeZoneHelper.fromTimeZone(metaModified[field], me.timeZone);\n }\n }\n }\n else {\n delete convertFields[field];\n }\n }\n // Change time zone\n me.timeZone = timeZone;\n // Set values\n for (const field in convertFields) {\n // Convert and set field date silently\n me.setLocalDate(field, convertFields[field], false);\n convertFields[field] = 1; // For clearing changes below\n // Convert value in meta modified as well\n if (me.timeZone != null && metaModified[field]) {\n metaModified[field] = TimeZoneHelper.toTimeZone(metaModified[field], me.timeZone);\n }\n }\n // Clear modification metadata\n me.clearChanges(true, true, convertFields);\n // If old modification metadata, restore them to record and store\n if (!ObjectHelper.isEmpty(metaModified)) {\n me.meta.modified = metaModified;\n me.stores?.forEach(store => store.modified.add(me));\n }\n }\n};\n", "import Model from '../../Core/data/Model.js';\nimport TimeZonedDatesMixin from './mixin/TimeZonedDatesMixin.js';\nimport DomClassList from '../../Core/helper/util/DomClassList.js';\nimport DH from '../../Core/helper/DateHelper.js';\nimport VersionHelper from '../../Core/helper/VersionHelper.js';\nimport BrowserHelper from '../../Core/helper/BrowserHelper.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport Duration from '../../Core/data/Duration.js';\n/**\n * @module Scheduler/model/TimeSpan\n */\n/**\n * This class represent a simple date range. It is being used in various subclasses and plugins which operate on date ranges.\n *\n * It's a subclass of {@link Core.data.Model}.\n * Please refer to documentation of those classes to become familiar with the base interface of this class.\n *\n * A TimeSpan has the following fields:\n *\n * - {@link #field-startDate} - start date of the task in the ISO 8601 format\n * - {@link #field-endDate} - end date of the task in the ISO 8601 format (not inclusive)\n * - {@link #field-duration} - duration, time between start date and end date\n * - {@link #field-durationUnit} - unit used to express the duration\n * - {@link #field-name} - an optional name of the range\n * - {@link #field-cls} - an optional CSS class to be associated with the range.\n *\n * The data source of any field can be customized in the subclass. Please refer to {@link Core.data.Model} for details. To specify\n * another date format:\n *\n * ```javascript\n * class MyTimeSpan extends TimeSpan {\n * static get fields() {\n * { name: 'startDate', type: 'date', dateFormat: 'DD/MM/YY' }\n * }\n * }\n * ```\n *\n * @extends Core/data/Model\n * @mixes Scheduler/model/mixin/TimeZonedDatesMixin\n */\nexport default class TimeSpan extends Model.mixin(TimeZonedDatesMixin) {\n static $name = 'TimeSpan';\n //region Field definitions\n static fields = [\n /**\n * The start date of a time span (or Event / Task).\n *\n * Uses {@link Core/helper/DateHelper#property-defaultFormat-static DateHelper.defaultFormat} to convert a\n * supplied string to a Date. To specify another format, either change that setting or subclass TimeSpan and\n * change the dateFormat for this field.\n *\n * Note that the field always returns a `Date`.\n *\n * @field {Date} startDate\n * @accepts {String|Date}\n * @category Scheduling\n */\n {\n name : 'startDate',\n type : 'date'\n },\n /**\n * The end date of a time span (or Event / Task).\n *\n * Uses {@link Core/helper/DateHelper#property-defaultFormat-static DateHelper.defaultFormat} to convert a\n * supplied string to a Date. To specify another format, either change that setting or subclass TimeSpan and\n * change the dateFormat for this field.\n *\n * Note that the field always returns a `Date`.\n *\n * @field {Date} endDate\n * @accepts {String|Date}\n * @category Scheduling\n */\n {\n name : 'endDate',\n type : 'date'\n },\n /**\n * The numeric part of the timespan's duration (the number of units).\n * @field {Number} duration\n * @category Scheduling\n */\n {\n name : 'duration',\n type : 'number',\n allowNull : true,\n internal : true\n },\n /**\n * The unit part of the TimeSpan duration, defaults to \"d\" (days). Valid values are:\n *\n * - \"millisecond\" - Milliseconds\n * - \"second\" - Seconds\n * - \"minute\" - Minutes\n * - \"hour\" - Hours\n * - \"day\" - Days\n * - \"week\" - Weeks\n * - \"month\" - Months\n * - \"quarter\" - Quarters\n * - \"year\"- Years\n *\n * This field is readonly after creation, to change durationUnit use #setDuration().\n * @field {DurationUnit} durationUnit\n * @category Scheduling\n */\n {\n type : 'durationunit',\n name : 'durationUnit',\n defaultValue : 'd',\n internal : true\n },\n /**\n * Calculated field which encapsulates the duration's magnitude and unit. This field will not be persisted,\n * setting it will update the {@link #field-duration} and {@link #field-durationUnit} fields.\n *\n * @field {DurationConfig|Core.data.Duration} fullDuration\n * @category Scheduling\n */\n {\n name : 'fullDuration',\n persist : false,\n column : {\n type : 'duration'\n },\n useProp : true\n },\n /**\n * An encapsulation of the CSS classes to add to the rendered time span element.\n *\n * Always returns a {@link Core.helper.util.DomClassList}, but may still be treated as a string. For\n * granular control of adding and removing individual classes, it is recommended to use the\n * {@link Core.helper.util.DomClassList} API.\n *\n * @field {Core.helper.util.DomClassList} cls\n * @accepts {Core.helper.util.DomClassList|String|String[]|Object}\n *\n * @category Styling\n */\n {\n name : 'cls',\n defaultValue : '',\n internal : true\n },\n /**\n * CSS class specifying an icon to apply to the rendered time span element.\n * **Note**: In case event is a milestone, using `iconCls` with dependency feature might slightly decrease\n * performance because feature will refer to the DOM to get exact size of the element.\n * @field {String} iconCls\n * @category Styling\n */\n {\n name : 'iconCls',\n internal : true\n },\n /**\n * A CSS style string (applied to `style.cssText`) or object (applied to `style`)\n * ```\n * record.style = 'color: red;font-weight: 800';\n * ```\n *\n * @field {String} style\n * @category Styling\n */\n {\n name : 'style',\n type : 'object',\n internal : true\n },\n /**\n * The name of the time span (or Event / Task)\n * @field {String} name\n * @category Common\n */\n {\n name : 'name',\n type : 'string',\n defaultValue : ''\n }\n ];\n //endregion\n //region Init\n construct(data, ...args) {\n const me = this;\n // fullDuration is a \"calculated field\", but convenient to allow supplying it in the data\n if (data?.fullDuration) {\n const { magnitude, unit } = data.fullDuration;\n data.duration = magnitude;\n data.unit = unit;\n delete data.fullDuration;\n }\n super.construct(data, ...args);\n me.normalize();\n if (me.startDateMS && me.endDateMS && me.startDateMS > me.endDateMS) {\n console.error(`startDate > endDate for ${me.constructor.$name} record with id: ${me.id}`);\n }\n }\n //endregion\n //region Date normalization\n internalCalculateStartDate(endDate, duration, durationUnit) {\n return DH.add(endDate, -duration, durationUnit);\n }\n internalCalculateEndDate(startDate, duration, durationUnit) {\n // Use hours to set end date in order to correctly process DST crossings???\n return DH.add(startDate, duration, durationUnit);\n }\n internalCalculateDuration(startDate, endDate, durationUnit) {\n return DH.as(durationUnit, DH.diff(startDate, endDate, 'h'), 'h');\n }\n // Separate fn to allow calling later with specific values (used by Baseline)\n internalNormalize(startDate, endDate, duration, durationUnit) {\n const\n me = this,\n hasDuration = duration != null;\n // need to calculate duration (checking first since seemed most likely to happen)\n if (startDate && endDate && !hasDuration) {\n me.setData('duration', me.internalCalculateDuration(startDate, endDate, durationUnit));\n }\n // need to calculate endDate?\n else if (startDate && !endDate && hasDuration) {\n me.setData('endDate', me.internalCalculateEndDate(startDate, duration, durationUnit));\n }\n // need to calculate startDate\n else if (!startDate && endDate && hasDuration) {\n me.setData('startDate', me.internalCalculateStartDate(endDate, duration, durationUnit));\n }\n }\n normalize() {\n this.internalNormalize(\n this.startDate,\n this.endDate,\n this.duration,\n this.durationUnit || this.constructor.defaultValues.durationUnit // Default might not be applied yet\n );\n }\n //endregion\n //region Getters & Setters\n /**\n * Returns the event store this event is part of, if any.\n *\n * @property {Scheduler.data.EventStore}\n * @readonly\n * @category Misc\n * @typings ignore\n */\n get eventStore() {\n const me = this;\n // If we are an occurrence, return our base recurring event's store\n if (me.isOccurrence) {\n return me.recurringTimeSpan.eventStore;\n }\n if (!me._eventStore) {\n me._eventStore = me.stores?.find(s => s.isEventStore);\n }\n return me._eventStore;\n }\n updateInternalCls(cls) {\n if (this._cls) {\n this._cls.value = cls;\n }\n else {\n this._cls = new DomClassList(cls);\n }\n }\n set internalCls(cls) {\n this.updateInternalCls(cls);\n this.set('cls', this._cls.value);\n }\n get internalCls() {\n const { cls } = this;\n // `cls` getter can be overriden so return `cls` value if it is DomClassList or assign it to `this._cls`\n if (cls?.isDomClassList) {\n return cls;\n }\n this.updateInternalCls(cls);\n this.setData('cls', this._cls.value);\n return this._cls;\n }\n get cls() {\n if (!this._cls) {\n this._cls = new DomClassList(super.get('cls'));\n }\n return this._cls;\n }\n set cls(cls) {\n this.internalCls = cls;\n }\n get startDate() {\n return this.get('startDate');\n }\n set startDate(date) {\n this.setStartDate(date);\n }\n get endDate() {\n return this.get('endDate');\n }\n set endDate(date) {\n this.setEndDate(date);\n }\n get endingDate() {\n const\n me = this,\n {\n endDate,\n startDate\n } = me;\n if (endDate) {\n // Special case of startDate===endDate for allDay event:\n // if (Number(endDate) === Number(startDate) && me.allDay) {\n // return DH.add(startDate, 1, 'd');\n // }\n // Nope... the above works fine except when the day start time is shifted. In this case we want the\n // event to appear as \"all day\" on the shifted day, but the above will push the endingDate beyond the\n // end of the shifted day.\n return endDate;\n }\n return DH.add(startDate, me.duration, me.durationUnit);\n }\n get duration() {\n return this.get('duration');\n }\n set duration(duration) {\n this.setDuration(duration, this.durationUnit);\n }\n get durationUnit() {\n return this.get('durationUnit');\n }\n /**\n * Sets duration and durationUnit in one go. Only allowed way to change durationUnit, the durationUnit field is\n * readonly after creation\n * @param {Number} duration Duration value\n * @param {DurationUnit} durationUnit Unit for\n * specified duration value, see {@link #field-durationUnit} for valid values\n * @category Scheduling\n */\n setDuration(duration, durationUnit = this.durationUnit) {\n // Must be a number\n duration = parseFloat(duration);\n this.set({\n duration,\n durationUnit,\n ...this.updateDatesFromDuration(duration, durationUnit)\n });\n }\n updateDatesFromDuration(magnitude, unit, startDate = this.startDate, endDate = this.endDate) {\n const result = {};\n if (startDate) {\n result.endDate = this.internalCalculateEndDate(startDate, magnitude, unit);\n }\n else if (endDate) {\n result.startDate = this.internalCalculateStartDate(endDate, magnitude, unit);\n }\n return result;\n }\n /**\n * Returns duration of the event in given unit. This is a wrapper for {@link Core.helper.DateHelper#function-getDurationInUnit-static}\n * @param {DurationUnitShort} unit\n * @param {Boolean} [doNotRound]\n * @private\n * @returns {Number}\n */\n getDurationInUnit(unit, doNotRound) {\n const me = this;\n if (me.startDate && me.endDate) {\n return DH.getDurationInUnit(me.startDate, me.endDate, unit, doNotRound);\n }\n else {\n return DH.as(unit, me.duration, me.durationUnit);\n }\n }\n get fullDuration() {\n // Used for formatting during export\n return new Duration({\n unit : this.durationUnit,\n magnitude : this.duration\n });\n }\n set fullDuration(duration) {\n if (typeof duration === 'string') {\n duration = DH.parseDuration(duration, true, this.durationUnit);\n }\n this.setDuration(duration.magnitude, duration.unit);\n }\n /**\n * Sets the range start date\n *\n * @param {Date} date The new start date\n * @param {Boolean} keepDuration Pass `true` to keep the duration of the task (\"move\" the event), `false` to change the duration (\"resize\" the event).\n * Defaults to `true`\n * @category Scheduling\n */\n setStartDate(date, keepDuration = true) {\n const\n me = this,\n toSet = {\n startDate : date\n };\n if (date) {\n let calcEndDate;\n if (keepDuration) {\n calcEndDate = me.duration != null;\n }\n else {\n if (me.endDate) {\n toSet.duration = me.internalCalculateDuration(date, me.endDate, me.durationUnit);\n if (toSet.duration < 0) {\n throw new Error('Negative duration');\n }\n }\n else {\n calcEndDate = me.duration != null;\n }\n }\n if (calcEndDate) {\n toSet.endDate = me.internalCalculateEndDate(date, me.duration, me.durationUnit);\n }\n }\n else {\n toSet.duration = null;\n }\n me.set(toSet);\n }\n /**\n * Sets the range end date\n *\n * @param {Date} date The new end date\n * @param {Boolean} keepDuration Pass `true` to keep the duration of the task (\"move\" the event), `false` to change the duration (\"resize\" the event).\n * Defaults to `false`\n * @category Scheduling\n */\n setEndDate(date, keepDuration = false) {\n const\n me = this,\n toSet = {\n endDate : date\n };\n if (date) {\n let calcStartDate;\n if (keepDuration === true) {\n calcStartDate = me.duration != null;\n }\n else {\n if (me.startDate) {\n toSet.duration = me.internalCalculateDuration(me.startDate, date, me.durationUnit);\n if (toSet.duration < 0) throw new Error('Negative duration');\n }\n else {\n calcStartDate = this.duration != null;\n }\n }\n if (calcStartDate) {\n toSet.startDate = me.internalCalculateStartDate(date, me.duration, me.durationUnit);\n }\n }\n me.set(toSet);\n }\n /**\n * Sets the event start and end dates\n *\n * @param {Date} start The new start date\n * @param {Date} end The new end date\n * @param {Boolean} [silent] Pass `true` to not trigger events\n * @category Scheduling\n */\n setStartEndDate(start, end, silent) {\n if (start > end) {\n throw new Error('Start date must be less or equal to end date');\n }\n this.set({\n startDate : start,\n endDate : end\n }, null, silent);\n }\n /**\n * Returns an array of dates in this range. If the range starts/ends not at the beginning of day, the whole day will be included.\n * @readonly\n * @property {Date[]}\n * @category Scheduling\n */\n get dates() {\n const\n dates = [],\n startDate = DH.startOf(this.startDate, 'day'),\n endDate = this.endDate;\n for (let date = startDate; date < endDate; date = DH.add(date, 1, 'day')) {\n dates.push(date);\n }\n return dates;\n }\n get startDateMS() {\n return (this.batching && this.hasBatchedChange('startDate') ? this.get('startDate') : this.startDate)?.getTime();\n }\n get endDateMS() {\n return (this.batching && this.hasBatchedChange('endDate') ? this.get('endDate') : this.endDate)?.getTime();\n }\n /**\n * Returns the duration of this Event in milliseconds.\n * @readonly\n * @property {Number}\n * @category Scheduling\n */\n get durationMS() {\n const { endDateMS, startDateMS } = this;\n if (endDateMS && startDateMS) {\n return endDateMS - startDateMS;\n }\n return DH.asMilliseconds(this.duration || 0, this.durationUnit);\n }\n /**\n * Returns true if record is a milestone.\n * @readonly\n * @property {Boolean}\n * @category Scheduling\n */\n get isMilestone() {\n return this.duration === 0;\n }\n inSetNormalize(field) {\n if (typeof field !== 'string') {\n // If user is updating multiple properties in one go using an object, we help out\n // by filling out missing schedule related data\n let { startDate, endDate, duration, durationUnit = this.durationUnit } = field;\n // Conversion is usually handled in inSet, but we are normalizing prior to that and have to handle it here\n if (typeof startDate === 'string') {\n startDate = this.getFieldDefinition('startDate').convert(startDate);\n }\n if (typeof endDate === 'string') {\n endDate = this.getFieldDefinition('endDate').convert(endDate);\n }\n if ('duration' in field) {\n if (startDate && !endDate) {\n endDate = this.internalCalculateEndDate(startDate, duration, durationUnit);\n }\n if (!startDate && endDate) {\n startDate = this.internalCalculateStartDate(endDate, duration, durationUnit);\n }\n }\n else if (startDate && endDate) {\n // Calculate duration in hours and covert to target duration unit in order to avoid extra DST conversion\n duration = this.internalCalculateDuration(startDate, endDate, durationUnit);\n }\n // A framework (React tested) may freeze passed field object, so clone it in that case\n const fieldOrClone = Object.isFrozen(field) ? ObjectHelper.clone(field) : field;\n startDate && (fieldOrClone.startDate = startDate);\n endDate && (fieldOrClone.endDate = endDate);\n duration != null && (fieldOrClone.duration = duration);\n return fieldOrClone;\n }\n }\n fieldToKeys(field, value) {\n const result = super.fieldToKeys(field, value);\n // Replace fullDuration with duration and durationUnit in calls to `set()`\n if (result.fullDuration) {\n const { magnitude, unit } = result.fullDuration;\n result.duration = magnitude;\n result.durationUnit = unit;\n }\n // Engine handles this for event & tasks\n if (!this.isEventModel && !this.isTaskModel) {\n // Recalculate start/end date if duration is set with only one of them\n if (('duration' in result || result.durationUnit) && !(result.startDate && result.endDate)) {\n Object.assign(\n result,\n this.updateDatesFromDuration(\n result.duration ?? this.duration,\n result.durationUnit ?? this.durationUnit,\n result.startDate,\n result.endDate\n )\n );\n }\n }\n return result;\n }\n inSet(field, value, silent, fromRelationUpdate, skipAccessors, validOnly, triggerBeforeUpdate) {\n const me = this;\n if (!skipAccessors) {\n field = me.inSetNormalize(field) || field;\n }\n const result = super.inSet(field, value, silent, fromRelationUpdate, skipAccessors, validOnly, triggerBeforeUpdate);\n if (!me.project?.isWritingData && field.startDate && field.endDate) {\n let invalid;\n if (field.startDate instanceof Date && field.endDate instanceof Date) {\n invalid = field.startDate > field.endDate;\n }\n else if (me.fieldMap.startDate.convert(field.startDate) > me.fieldMap.endDate.convert(field.endDate)) {\n invalid = true;\n }\n if (invalid) {\n console.error(`startDate > endDate for ${me.constructor.$name} record with id: ${me.id}`);\n }\n }\n return result;\n }\n // Cls requires special handling since it is converted to a DomClassList\n applyValue(useProp, key, value, skipAccessors, field) {\n if (key === 'cls') {\n this.updateInternalCls(value);\n }\n super.applyValue(useProp, key, value, skipAccessors, field);\n }\n //endregion\n //region Iteration\n /**\n * Iterates over the {@link #property-dates}\n * @param {Function} func The function to call for each date\n * @param {Object} thisObj `this` reference for the function\n * @category Scheduling\n */\n forEachDate(func, thisObj) {\n return this.dates.forEach(func.bind(thisObj));\n }\n //endregion\n /**\n * Checks if the range record has both start and end dates set and start <= end\n *\n * @property {Boolean}\n * @category Scheduling\n */\n get isScheduled() {\n const { startDateMS, endDateMS } = this;\n return endDateMS - startDateMS >= 0;\n }\n // Simple check if end date is greater than start date\n get isValid() {\n const { startDate, endDate } = this;\n return !startDate || !endDate || (endDate - startDate >= 0);\n }\n /**\n * Shift the dates for the date range by the passed amount and unit\n * @param {DurationUnit} unit The unit to shift by, see {@link Core.helper.DateHelper}\n * for more information on valid formats.\n * @param {Number} amount The amount to shift\n */\n shift(amount, unit = this.durationUnit) {\n if (typeof amount === 'string') {\n const u = amount;\n amount = unit;\n unit = u;\n }\n return this.setStartDate(DH.add(this.startDate, amount, unit, true), true);\n }\n /**\n * Returns the WBS code of this model (e.g '2.1.3'). Only relevant when part of a tree store, as in the Gantt chart.\n * @property {String}\n * @category Parent & children\n */\n get wbsCode() {\n return this._wbsCode || this.indexPath.join('.');\n }\n set wbsCode(value) {\n // wbsCode needs to be writable to interop w/TaskModel and Baselines which copy this field value\n this._wbsCode = value;\n }\n fullCopy() {\n //NOT PORTED\n return this.copy.apply(this, arguments);\n }\n intersects(timeSpan) {\n return this.intersectsRange(timeSpan.startDate, timeSpan.endDate);\n }\n intersectsRange(start, end) {\n const\n myStart = this.startDate,\n myEnd = this.endDate;\n return myStart && myEnd && DH.intersectSpans(myStart, myEnd, start, end);\n }\n /**\n * Splits this event into two pieces at the desired position.\n *\n * @param {Number|String} splitPoint The duration point at which to split this event.\n *\n * If less then `1`, this indicates the relative position at which it will be split.\n * 0.5 means cut it in half.\n *\n * If greater than `1`, this indicates the new duration in the current duration units of this event before the split.\n *\n * If this is a string, it will be a duration description as described in\n * {@link Core.helper.DateHelper#function-parseDuration-static}, for example `'15 min'`\n *\n * @returns {Scheduler.model.TimeSpan} The newly created split section of the timespan\n * @category Scheduling\n */\n split(splitPoint = 0.5) {\n const\n me = this,\n clone = me.copy(),\n {\n fullDuration,\n eventStore,\n assignmentStore\n } = me,\n oldDuration = new Duration(fullDuration),\n cloneDuration = new Duration(fullDuration);\n let ownNewDuration,\n unitsChanged;\n if (typeof splitPoint === 'string') {\n ownNewDuration = new Duration(splitPoint);\n // New duration specified in same time units as current duration\n if (ownNewDuration.unit === oldDuration.unit) {\n cloneDuration.magnitude -= ownNewDuration.magnitude;\n }\n // New duration is in different units, so convert clone's duration to match\n else {\n cloneDuration.magnitude = DH.as(ownNewDuration.unit, oldDuration) - ownNewDuration.magnitude;\n cloneDuration.unit = ownNewDuration.unit;\n unitsChanged = true;\n }\n }\n else {\n ownNewDuration = new Duration(splitPoint > 1 ? splitPoint : me.duration * splitPoint, me.durationUnit);\n cloneDuration.magnitude -= ownNewDuration.magnitude;\n }\n clone.startDate = DH.add(me.startDate, ownNewDuration.magnitude, ownNewDuration.unit);\n if (unitsChanged) {\n clone.fullDuration = cloneDuration;\n me.fullDuration = ownNewDuration;\n }\n else {\n clone.duration = cloneDuration.magnitude;\n me.duration = ownNewDuration.magnitude;\n }\n if (eventStore) {\n eventStore.add(clone);\n if (assignmentStore && !eventStore.usesSingleAssignment) {\n assignmentStore.add(\n me.assignments.map(assignment => {\n const clonedData = Object.assign({}, assignment.data, {\n eventId : clone.id,\n // From engine\n event : null,\n resource : null\n });\n delete clonedData.id;\n return clonedData;\n })\n );\n }\n }\n return clone;\n }\n toICSString(icsEventConfig = {}) {\n if (!this.isScheduled) {\n return '';\n }\n const\n {\n startDate,\n endDate\n } = this,\n // To allow testing using a fixed timestamp value\n timestamp = icsEventConfig.DTSTAMP || DH.format(new Date(), 'uu');\n delete icsEventConfig.DTSTAMP;\n let startEnd = {};\n if (this.allDay) {\n startEnd = {\n 'DTSTART;VALUE=DATE' : DH.format(startDate, 'u'),\n 'DTEND;VALUE=DATE' : DH.format(endDate, 'u')\n };\n }\n else {\n startEnd = {\n DTSTART : DH.format(startDate, 'uu'),\n DTEND : DH.format(endDate, 'uu')\n };\n }\n const\n version = (VersionHelper.scheduler && VersionHelper.getVersion('scheduler')) || (VersionHelper.calendar && VersionHelper.getVersion('calendar')) || '',\n icsWrapConfig = {\n BEGIN : 'VCALENDAR',\n VERSION : '2.0',\n CALSCALE : 'GREGORIAN',\n PRODID : `-//Bryntum AB//Bryntum Scheduler ${version} //EN`,\n END : 'VCALENDAR'\n },\n eventConfig = {\n BEGIN : 'VEVENT',\n UID : this.id + '@bryntum.com',\n CLASS : 'PUBLIC',\n SUMMARY : this.name,\n DTSTAMP : timestamp,\n ...startEnd,\n ...(this.recurrenceRule ? { RRULE : this.recurrenceRule } : {}),\n ...icsEventConfig,\n END : 'VEVENT'\n },\n icsItems = Object.keys(icsWrapConfig).map(key => `${key}:${icsWrapConfig[key]}`),\n eventItems = Object.keys(eventConfig).map(key => `${key}:${eventConfig[key]}`);\n // Inject event details before the closing VCALENDAR entry\n icsItems.splice(icsItems.length - 1, 0, ...eventItems);\n return icsItems.join('\\n');\n }\n /**\n * Triggers a download of this time span in ICS format (for import in Outlook etc.)\n *\n * ```javascript\n * timeSpan.downloadAsICS({\n * LOCATION : timeSpan.location\n * });\n * ```\n * @param {Object} [icsEventConfig] A config object with properties to be added in to `BEGIN:VEVENT`\n * section of the exported event.\n * @category Misc\n */\n exportToICS(icsEventConfig) {\n if (this.isScheduled) {\n const blob = new Blob([this.toICSString(icsEventConfig)], { type : 'text/calendar' });\n BrowserHelper.downloadBlob(blob, (this.name || 'Event') + '.ics');\n }\n }\n /**\n * Defines if the given event field should be manually editable in UI.\n * You can override this method to provide your own logic.\n *\n * By default the method defines all the event fields as editable.\n *\n * @param {String} fieldName Name of the field\n * @returns {Boolean} Returns `true` if the field is editable, `false` if it is not and `undefined` if the model has no such field.\n */\n isEditable(fieldName) {\n // return undefined for unknown fields\n return this.getFieldDefinition(fieldName) ? true : undefined;\n }\n isFieldModified(fieldName) {\n if (fieldName === 'fullDuration') {\n return super.isFieldModified('duration') || super.isFieldModified('durationUnit');\n }\n return super.isFieldModified(fieldName);\n }\n}\nTimeSpan._$name = 'TimeSpan';", "import Model from '../../Core/data/Model.js';\nimport IdHelper from '../../Core/helper/IdHelper.js';\nimport DH from '../../Core/helper/DateHelper.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\n/**\n * @module Scheduler/preset/ViewPreset\n */\n/**\n * An object containing a unit identifier and an increment variable, used to define the `timeResolution` of a\n * `ViewPreset`.\n * @typedef {Object} ViewPresetTimeResolution\n * @property {String} unit The unit of the resolution, e.g. 'minute'\n * @property {Number} increment The increment of the resolution, e.g. 15\n */\n/**\n * Defines a header level for a ViewPreset.\n *\n * A sample header configuration can look like below\n * ```javascript\n * headers : {\n * {\n * unit : \"month\",\n * renderer : function(start, end, headerConfig, index) {\n * var month = start.getMonth();\n * // Simple alternating month in bold\n * if (start.getMonth() % 2) {\n * return '' + month + '';\n * }\n * return month;\n * },\n * align : 'start' // `start` or `end`, omit to center content (default)\n * },\n * {\n * unit : \"week\",\n * increment : 1,\n * renderer : function(start, end, headerConfig, index) {\n * return 'foo';\n * }\n * },\n * }\n * ```\n *\n * @typedef {Object} ViewPresetHeaderRow\n * @property {'start'|'center'|'end'} align The text alignment for the cell. Valid values are `start` or `end`, omit\n * this to center text content (default). Can also be added programmatically in `the renderer`.\n * @property {DurationUnit} unit The unit of time\n * represented by each cell in this header row. See also increment property. Valid values are \"millisecond\", \"second\",\n * \"minute\", \"hour\", \"day\", \"week\", \"month\", \"quarter\", \"year\".\n * @property {String} headerCellCls A CSS class to add to the cells in the time axis header row. Can also be added\n * programmatically in the `renderer`.\n * @property {Number} increment The number of units each header cell will represent (e.g. 30 together with unit:\n * \"minute\" for 30 minute cells)\n * @property {String} dateFormat Defines how the cell date will be formatted\n * @property {Function} renderer A custom renderer function used to render the cell content. It should return text/HTML\n * to put in the header cell.\n *\n * ```javascript\n * function (startDate, endDate, headerConfig, i) {\n * // applies special CSS class to align header left\n * headerConfig.align = \"start\";\n * // will be added as a CSS class of the header cell DOM element\n * headerConfig.headerCellCls = \"myClass\";\n *\n * return DateHelper.format(startDate, 'YYYY-MM-DD');\n * }\n * ```\n *\n * The render function is called with the following parameters:\n *\n * @property {Date} renderer.startDate The start date of the cell.\n * @property {Date} renderer.endDate The end date of the cell.\n * @property {Object} renderer.headerConfig An object containing the header config.\n * @property {'start'|'center'|'end'} [renderer.headerConfig.align] The text alignment for the cell. See `align` above.\n * @property {String} [renderer.headerConfig.headerCellCls] A CSS class to add to the cells in the time axis header row.\n * See `headerCellCls` above.\n * @property {Number} renderer.index The index of the cell in the row.\n * @property {Object} thisObj `this` reference for the renderer function\n * @property {Function} cellGenerator A function that should return an array of objects containing 'start', 'end' and\n * 'header' properties. Use this if you want full control over how the header rows are generated.\n *\n * **Note:** `cellGenerator` cannot be used for the bottom level of your headers.\n *\n * Example :\n * ```javascript\n * viewPreset : {\n * displayDateFormat : 'H:mm',\n * shiftIncrement : 1,\n * shiftUnit : 'WEEK',\n * timeResolution : {\n * unit : 'MINUTE',\n * increment : 10\n * },\n * headers : [\n * {\n * unit : 'year',\n * // Simplified scenario, assuming view will always just show one US fiscal year\n * cellGenerator : (viewStart, viewEnd) => [{\n * start : viewStart,\n * end : viewEnd,\n * header : `Fiscal Year ${viewStart.getFullYear() + 1}`\n * }]\n * },\n * {\n * unit : 'quarter',\n * renderer(start, end, cfg) {\n * const\n * quarter = Math.floor(start.getMonth() / 3) + 1,\n * fiscalQuarter = quarter === 4 ? 1 : (quarter + 1);\n *\n * return `FQ${fiscalQuarter} ${start.getFullYear() + (fiscalQuarter === 1 ? 1 : 0)}`;\n * }\n * },\n * {\n * unit : 'month',\n * dateFormat : 'MMM Y'\n * }\n * ]\n * },\n * ```\n */\n/**\n * A ViewPreset is a record of {@link Scheduler.preset.PresetStore PresetStore} which describes the granularity\n * of the timeline view of a {@link Scheduler.view.Scheduler Scheduler} and the layout and subdivisions of the timeline header.\n *\n * You can create a new instance by specifying all fields:\n *\n * ```javascript\n * const myViewPreset = new ViewPreset({\n * id : 'myPreset', // Unique id value provided to recognize your view preset. Not required, but having it you can simply set new view preset by id: scheduler.viewPreset = 'myPreset'\n *\n * name : 'My view preset', // A human-readable name provided to be used in GUI, e.i. preset picker, etc.\n *\n * tickWidth : 24, // Time column width in horizontal mode\n * tickHeight : 50, // Time column height in vertical mode\n * displayDateFormat : 'HH:mm', // Controls how dates will be displayed in tooltips etc\n *\n * shiftIncrement : 1, // Controls how much time to skip when calling shiftNext and shiftPrevious.\n * shiftUnit : 'day', // Valid values are 'millisecond', 'second', 'minute', 'hour', 'day', 'week', 'month', 'quarter', 'year'.\n * defaultSpan : 12, // By default, if no end date is supplied to a view it will show 12 hours\n *\n * timeResolution : { // Dates will be snapped to this resolution\n * unit : 'minute', // Valid values are 'millisecond', 'second', 'minute', 'hour', 'day', 'week', 'month', 'quarter', 'year'.\n * increment : 15\n * },\n *\n * headers : [ // This defines your header rows from top to bottom\n * { // For each row you can define 'unit', 'increment', 'dateFormat', 'renderer', 'align', and 'thisObj'\n * unit : 'day',\n * dateFormat : 'ddd DD/MM'\n * },\n * {\n * unit : 'hour',\n * dateFormat : 'HH:mm'\n * }\n * ],\n *\n * columnLinesFor : 1 // Defines header level column lines will be drawn for. Defaults to the last level.\n * });\n * ```\n *\n * Or you can extend one of view presets registered in {@link Scheduler.preset.PresetManager PresetManager}:\n *\n * ```javascript\n * const myViewPreset2 = new ViewPreset({\n * id : 'myPreset', // Unique id value provided to recognize your view preset. Not required, but having it you can simply set new view preset by id: scheduler.viewPreset = 'myPreset'\n * name : 'My view preset', // A human-readable name provided to be used in GUI, e.i. preset picker, etc.\n * base : 'hourAndDay', // Extends 'hourAndDay' view preset provided by PresetManager. You can pick out any of PresetManager's view presets: PresetManager.records\n *\n * timeResolution : { // Override time resolution\n * unit : 'minute',\n * increment : 15 // Make it increment every 15 mins\n * },\n *\n * headers : [ // Override headers\n * {\n * unit : 'day',\n * dateFormat : 'DD.MM.YYYY' // Use different date format for top header 01.10.2020\n * },\n * {\n * unit : 'hour',\n * dateFormat : 'LT'\n * }\n * ]\n * });\n * ```\n *\n * See {@link Scheduler.preset.PresetManager PresetManager} for the list of base presets. You may add your own\n * presets to this global list:\n *\n * ```javascript\n * PresetManager.add(myViewPreset); // Adds new preset to the global scope. All newly created scheduler instances will have it too.\n *\n * const scheduler = new Scheduler({\n * viewPreset : 'myPreset'\n * // other configs...\n * });\n * ```\n *\n * Or add them on an individual basis to Scheduler instances:\n *\n * ```javascript\n * const scheduler = new Scheduler({...});\n *\n * scheduler.presets.add(myViewPreset); // Adds new preset to the scheduler instance only. All newly created scheduler instances will **not** have it.\n *\n * scheduler.viewPreset = 'myPreset';\n * ```\n *\n * ## Defining custom header rows\n *\n * You can have any number of header rows by specifying {@link #field-headers}, see {@link #typedef-ViewPresetHeaderRow}\n * for the config object format and {@link Core.helper.DateHelper} for the supported date formats, or use to render\n * custom contents into the row cells.\n *\n * ```javascript\n * headers : [\n * {\n * unit : 'month',\n * dateFormat : 'MM.YYYY'\n * },\n * {\n * unit : 'week',\n * renderer : ({ startDate }) => `Week ${DateHelper.format(startDate, 'WW')}`\n * }\n * ]\n * ```\n *\n * {@inlineexample Scheduler/preset/CustomHeader.js}\n *\n * This live demo shows a custom ViewPreset with AM/PM time format:\n * {@inlineexample Scheduler/preset/amPmPreset.js}\n *\n * @extends Core/data/Model\n */\nexport default class ViewPreset extends Model {\n static $name = 'ViewPreset';\n static get fields() {\n return [\n /**\n * The name of an existing view preset to extend\n * @field {String} base\n */\n { name : 'base', type : 'string' },\n /**\n * The name of the view preset\n * @field {String} name\n */\n { name : 'name', type : 'string' },\n /**\n * The height of the row in horizontal orientation\n * @field {Number} rowHeight\n * @default\n */\n {\n name : 'rowHeight',\n defaultValue : 24\n },\n /**\n * The width of the time tick column in horizontal orientation\n * @field {Number} tickWidth\n * @default\n */\n {\n name : 'tickWidth',\n defaultValue : 50\n },\n /**\n * The height of the time tick column in vertical orientation\n * @field {Number} tickHeight\n * @default\n */\n {\n name : 'tickHeight',\n defaultValue : 50\n },\n /**\n * Defines how dates will be formatted in tooltips etc\n * @field {String} displayDateFormat\n * @default\n */\n {\n name : 'displayDateFormat',\n defaultValue : 'HH:mm'\n },\n /**\n * The unit to shift when calling shiftNext/shiftPrevious to navigate in the chart.\n * Valid values are \"millisecond\", \"second\", \"minute\", \"hour\", \"day\", \"week\", \"month\", \"quarter\", \"year\".\n * @field {DurationUnit} shiftUnit\n * @default\n */\n {\n name : 'shiftUnit',\n defaultValue : 'hour'\n },\n /**\n * The amount to shift (in shiftUnits)\n * @field {Number} shiftIncrement\n * @default\n */\n {\n name : 'shiftIncrement',\n defaultValue : 1\n },\n /**\n * The amount of time to show by default in a view (in the unit defined by {@link #field-mainUnit})\n * @field {Number} defaultSpan\n * @default\n */\n {\n name : 'defaultSpan',\n defaultValue : 12\n },\n /**\n * Initially set to a unit. Defaults to the unit defined by the middle header.\n * @field {DurationUnit} mainUnit\n */\n {\n name : 'mainUnit'\n },\n /**\n * Note: Currently, this field only applies when changing viewPreset with the {@link Scheduler.widget.ViewPresetCombo}.\n *\n * Set to a number and that amount of {@link #field-mainUnit} will be added to the startDate. For example: A\n * start value of `5` together with the mainUnit `hours` will add 5 hours to the startDate. This can achieve\n * a \"day view\" that starts 5 AM.\n *\n * Set to a string unit (for example week, day, month) and the startDate will be the start of that unit\n * calculated from current startDate. A start value of `week` will result in a startDate in the first day of\n * the week.\n *\n * If set to a number or not set at all, the startDate will be calculated at the beginning of current\n * mainUnit.\n * @field {Number|String} start\n */\n {\n name : 'start'\n },\n /**\n * An object containing a unit identifier and an increment variable. This value means minimal task duration\n * you can create using UI. For example when you drag create a task or drag & drop a task, if increment is 5\n * and unit is 'minute' that means that you can create a 5-minute-long task, or move it 5 min\n * forward/backward. This config maps to scheduler's\n * {@link Scheduler.view.mixin.TimelineDateMapper#property-timeResolution} config.\n *\n * ```javascript\n * timeResolution : {\n * unit : 'minute', //Valid values are \"millisecond\", \"second\", \"minute\", \"hour\", \"day\", \"week\", \"month\", \"quarter\", \"year\".\n * increment : 5\n * }\n * ```\n *\n * @field {ViewPresetTimeResolution} timeResolution\n */\n 'timeResolution',\n /**\n * An array containing one or more {@link #typedef-ViewPresetHeaderRow} config objects, each of\n * which defines a level of headers for the scheduler.\n * The `main` unit will be the last header's unit, but this can be changed using the\n * {@link #field-mainHeaderLevel} field.\n * @field {ViewPresetHeaderRow[]} headers\n */\n 'headers',\n /**\n * Index of the {@link #field-headers} array to define which header level is the `main` header.\n * Defaults to the bottom header.\n * @field {Number} mainHeaderLevel\n */\n 'mainHeaderLevel',\n /**\n * Index of a header level in the {@link #field-headers} array for which column lines are drawn. See\n * {@link Scheduler.feature.ColumnLines}.\n * Defaults to the bottom header.\n * @field {Number} columnLinesFor\n */\n 'columnLinesFor'\n ];\n }\n construct() {\n super.construct(...arguments);\n this.normalizeUnits();\n }\n generateId(owner) {\n const\n me = this,\n {\n headers\n } = me,\n parts = [];\n // If we were subclassed from a base, use that id as the basis of our.\n let result = Object.getPrototypeOf(me.data).id;\n if (!result) {\n for (let { length } = headers, i = length - 1; i >= 0; i--) {\n const\n { unit, increment } = headers[i],\n multiple = increment > 1;\n parts.push(`${multiple ? increment : ''}${i ? unit : StringHelper.capitalize(unit)}${multiple ? 's' : ''}`);\n }\n // Use upwards header units so eg \"monthAndYear\"\n result = parts.join('And');\n }\n // If duplicate, decorate the generated by adding details.\n // For example make it \"hourAndDay-50by80\"\n // Only interrogate the store if it is loaded. If consulted during\n // a load, the idMap will be created empty\n if (owner.count && owner.includes(result)) {\n result += `-${me.tickWidth}by${me.tickHeight || me.tickWidth}`;\n // If still duplicate use increment\n if (owner.includes(result)) {\n result += `-${me.bottomHeader.increment}`;\n // And if STILL duplicate, make it unique with a suffix\n if (owner.includes(result)) {\n result = IdHelper.generateId(`${result}-`);\n }\n }\n }\n return result;\n }\n normalizeUnits() {\n const\n me = this,\n { timeResolution, headers, shiftUnit } = me;\n if (headers) {\n // Make sure date \"unit\" constant specified in the preset are resolved\n for (let i = 0, { length } = headers; i < length; i++) {\n const header = headers[i];\n header.unit = DH.normalizeUnit(header.unit);\n if (header.splitUnit) {\n header.splitUnit = DH.normalizeUnit(header.splitUnit);\n }\n if (!('increment' in header)) {\n headers[i] = Object.assign({\n increment : 1\n }, header);\n }\n }\n }\n if (timeResolution) {\n timeResolution.unit = DH.normalizeUnit(timeResolution.unit);\n }\n if (shiftUnit) {\n me.shiftUnit = DH.normalizeUnit(shiftUnit);\n }\n }\n // Process legacy columnLines config into a headers array.\n static normalizeHeaderConfig(data) {\n const\n { headerConfig, columnLinesFor, mainHeaderLevel } = data,\n headers = data.headers = [];\n if (headerConfig.top) {\n if (columnLinesFor === 'top') {\n data.columnLinesFor = 0;\n }\n if (mainHeaderLevel === 'top') {\n data.mainHeaderLevel = 0;\n }\n headers[0] = headerConfig.top;\n }\n if (headerConfig.middle) {\n if (columnLinesFor === 'middle') {\n data.columnLinesFor = headers.length;\n }\n if (mainHeaderLevel === 'middle') {\n data.mainHeaderLevel = headers.length;\n }\n headers.push(headerConfig.middle);\n }\n else {\n throw new Error('ViewPreset.headerConfig must be configured with a middle');\n }\n if (headerConfig.bottom) {\n // Main level is middle when using headerConfig object.\n data.mainHeaderLevel = headers.length - 1;\n // There *must* be a middle above this bottom header\n // so that is the columnLines one by default.\n if (columnLinesFor == null) {\n data.columnLinesFor = headers.length - 1;\n }\n else if (columnLinesFor === 'bottom') {\n data.columnLinesFor = headers.length;\n }\n // There *must* be a middle above this bottom header\n // so that is the main one by default.\n if (mainHeaderLevel == null) {\n data.mainHeaderLevel = headers.length - 1;\n }\n if (mainHeaderLevel === 'bottom') {\n data.mainHeaderLevel = headers.length;\n }\n headers.push(headerConfig.bottom);\n }\n }\n // These are read-only once configured.\n set() {}\n inSet() {}\n get columnLinesFor() {\n return ('columnLinesFor' in this.data) ? this.data.columnLinesFor : this.headers.length - 1;\n }\n get tickSize() {\n return this._tickSize || this.tickWidth;\n }\n get tickWidth() {\n return ('tickWidth' in this.data) ? this.data.tickWidth : 50;\n }\n get tickHeight() {\n return ('tickHeight' in this.data) ? this.data.tickHeight : 50;\n }\n get headerConfig() {\n // Configured in the legacy manner, just return the configured value.\n if (this.data.headerConfig) {\n return this.data.headerConfig;\n }\n // Rebuild the object based upon the configured headers array.\n const\n result = {},\n { headers } = this,\n { length } = headers;\n switch (length) {\n case 1 :\n result.middle = headers[0];\n break;\n case 2:\n if (this.mainHeaderLevel === 0) {\n result.middle = headers[0];\n result.bottom = headers[1];\n }\n else {\n result.top = headers[0];\n result.middle = headers[1];\n }\n break;\n case 3:\n result.top = headers[0];\n result.middle = headers[1];\n result.bottom = headers[2];\n break;\n default:\n throw new Error('headerConfig object not supported for >3 header levels');\n }\n return result;\n }\n set mainHeaderLevel(mainHeaderLevel) {\n this.data.mainHeaderLevel = mainHeaderLevel;\n }\n get mainHeaderLevel() {\n if ('mainHeaderLevel' in this.data) {\n return this.data.mainHeaderLevel;\n }\n // 3 headers, then it's the middle\n if (this.data.headers.length === 3) {\n return 1;\n }\n // Assume it goes top, middle.\n // If it's middle, top, use mainHeaderLevel : 0\n return this.headers.length - 1;\n }\n get mainHeader() {\n return this.headers[this.mainHeaderLevel];\n }\n get topHeader() {\n return this.headers[0];\n }\n get topUnit() {\n return this.topHeader.unit;\n }\n get topIncrement() {\n return this.topHeader.increment;\n }\n get bottomHeader() {\n return this.headers[this.headers.length - 1];\n }\n get leafUnit() {\n return this.bottomHeader.unit;\n }\n get leafIncrement() {\n return this.bottomHeader.increment;\n }\n get mainUnit() {\n if ('mainUnit' in this.data) {\n return this.data.mainUnit;\n }\n return this.mainHeader.unit;\n }\n get msPerPixel() {\n const { bottomHeader } = this;\n return Math.round(DH.asMilliseconds(bottomHeader.increment || 1, bottomHeader.unit) / this.tickWidth);\n }\n get isValid() {\n const me = this;\n let valid = true;\n // Make sure all date \"unit\" constants are valid\n for (const header of me.headers) {\n valid = valid && Boolean(DH.normalizeUnit(header.unit));\n }\n if (me.timeResolution) {\n valid = valid && DH.normalizeUnit(me.timeResolution.unit);\n }\n if (me.shiftUnit) {\n valid = valid && DH.normalizeUnit(me.shiftUnit);\n }\n return valid;\n }\n}\nViewPreset._$name = 'ViewPreset';", "import LocaleHelper from '../../Core/localization/LocaleHelper.js';\nimport '../../Grid/localization/En.js';\nconst locale = {\n localeName : 'En',\n localeDesc : 'English (US)',\n localeCode : 'en-US',\n Object : {\n newEvent : 'New event'\n },\n ResourceInfoColumn : {\n eventCountText : data => data + ' event' + (data !== 1 ? 's' : '')\n },\n Dependencies : {\n from : 'From',\n to : 'To',\n valid : 'Valid',\n invalid : 'Invalid'\n },\n DependencyType : {\n SS : 'SS',\n SF : 'SF',\n FS : 'FS',\n FF : 'FF',\n StartToStart : 'Start-to-Start',\n StartToEnd : 'Start-to-Finish',\n EndToStart : 'Finish-to-Start',\n EndToEnd : 'Finish-to-Finish',\n short : [\n 'SS',\n 'SF',\n 'FS',\n 'FF'\n ],\n long : [\n 'Start-to-Start',\n 'Start-to-Finish',\n 'Finish-to-Start',\n 'Finish-to-Finish'\n ]\n },\n DependencyEdit : {\n From : 'From',\n To : 'To',\n Type : 'Type',\n Lag : 'Lag',\n 'Edit dependency' : 'Edit dependency',\n Save : 'Save',\n Delete : 'Delete',\n Cancel : 'Cancel',\n StartToStart : 'Start to Start',\n StartToEnd : 'Start to End',\n EndToStart : 'End to Start',\n EndToEnd : 'End to End'\n },\n EventEdit : {\n Name : 'Name',\n Resource : 'Resource',\n Start : 'Start',\n End : 'End',\n Save : 'Save',\n Delete : 'Delete',\n Cancel : 'Cancel',\n 'Edit event' : 'Edit event',\n Repeat : 'Repeat'\n },\n EventDrag : {\n eventOverlapsExisting : 'Event overlaps existing event for this resource',\n noDropOutsideTimeline : 'Event may not be dropped completely outside the timeline'\n },\n SchedulerBase : {\n 'Add event' : 'Add event',\n 'Delete event' : 'Delete event',\n 'Unassign event' : 'Unassign event',\n color : 'Color'\n },\n TimeAxisHeaderMenu : {\n pickZoomLevel : 'Zoom',\n activeDateRange : 'Date range',\n startText : 'Start date',\n endText : 'End date',\n todayText : 'Today'\n },\n EventCopyPaste : {\n copyEvent : 'Copy event',\n cutEvent : 'Cut event',\n pasteEvent : 'Paste event'\n },\n EventFilter : {\n filterEvents : 'Filter tasks',\n byName : 'By name'\n },\n TimeRanges : {\n showCurrentTimeLine : 'Show current timeline'\n },\n PresetManager : {\n secondAndMinute : {\n displayDateFormat : 'll LTS',\n name : 'Seconds'\n },\n minuteAndHour : {\n topDateFormat : 'ddd MM/DD, hA',\n displayDateFormat : 'll LST'\n },\n hourAndDay : {\n topDateFormat : 'ddd MM/DD',\n middleDateFormat : 'LST',\n displayDateFormat : 'll LST',\n name : 'Day'\n },\n day : {\n name : 'Day/hours'\n },\n week : {\n name : 'Week/hours'\n },\n dayAndWeek : {\n displayDateFormat : 'll LST',\n name : 'Week/days'\n },\n dayAndMonth : {\n name : 'Month'\n },\n weekAndDay : {\n displayDateFormat : 'll LST',\n name : 'Week'\n },\n weekAndMonth : {\n name : 'Weeks'\n },\n weekAndDayLetter : {\n name : 'Weeks/weekdays'\n },\n weekDateAndMonth : {\n name : 'Months/weeks'\n },\n monthAndYear : {\n name : 'Months'\n },\n year : {\n name : 'Years'\n },\n manyYears : {\n name : 'Multiple years'\n }\n },\n RecurrenceConfirmationPopup : {\n 'delete-title' : 'You are deleting an event',\n 'delete-all-message' : 'Do you want to delete all occurrences of this event?',\n 'delete-further-message' : 'Do you want to delete this and all future occurrences of this event, or only the selected occurrence?',\n 'delete-further-btn-text' : 'Delete All Future Events',\n 'delete-only-this-btn-text' : 'Delete Only This Event',\n 'update-title' : 'You are changing a repeating event',\n 'update-all-message' : 'Do you want to change all occurrences of this event?',\n 'update-further-message' : 'Do you want to change only this occurrence of the event, or this and all future occurrences?',\n 'update-further-btn-text' : 'All Future Events',\n 'update-only-this-btn-text' : 'Only This Event',\n Yes : 'Yes',\n Cancel : 'Cancel',\n width : 600\n },\n RecurrenceLegend : {\n ' and ' : ' and ',\n Daily : 'Daily',\n 'Weekly on {1}' : ({ days }) => `Weekly on ${days}`,\n 'Monthly on {1}' : ({ days }) => `Monthly on ${days}`,\n 'Yearly on {1} of {2}' : ({ days, months }) => `Yearly on ${days} of ${months}`,\n 'Every {0} days' : ({ interval }) => `Every ${interval} days`,\n 'Every {0} weeks on {1}' : ({ interval, days }) => `Every ${interval} weeks on ${days}`,\n 'Every {0} months on {1}' : ({ interval, days }) => `Every ${interval} months on ${days}`,\n 'Every {0} years on {1} of {2}' : ({ interval, days, months }) => `Every ${interval} years on ${days} of ${months}`,\n position1 : 'the first',\n position2 : 'the second',\n position3 : 'the third',\n position4 : 'the fourth',\n position5 : 'the fifth',\n 'position-1' : 'the last',\n day : 'day',\n weekday : 'weekday',\n 'weekend day' : 'weekend day',\n daysFormat : ({ position, days }) => `${position} ${days}`\n },\n RecurrenceEditor : {\n 'Repeat event' : 'Repeat event',\n Cancel : 'Cancel',\n Save : 'Save',\n Frequency : 'Frequency',\n Every : 'Every',\n DAILYintervalUnit : 'day(s)',\n WEEKLYintervalUnit : 'week(s)',\n MONTHLYintervalUnit : 'month(s)',\n YEARLYintervalUnit : 'year(s)',\n Each : 'Each',\n 'On the' : 'On the',\n 'End repeat' : 'End repeat',\n 'time(s)' : 'time(s)'\n },\n RecurrenceDaysCombo : {\n day : 'day',\n weekday : 'weekday',\n 'weekend day' : 'weekend day'\n },\n RecurrencePositionsCombo : {\n position1 : 'first',\n position2 : 'second',\n position3 : 'third',\n position4 : 'fourth',\n position5 : 'fifth',\n 'position-1' : 'last'\n },\n RecurrenceStopConditionCombo : {\n Never : 'Never',\n After : 'After',\n 'On date' : 'On date'\n },\n RecurrenceFrequencyCombo : {\n None : 'No repeat',\n Daily : 'Daily',\n Weekly : 'Weekly',\n Monthly : 'Monthly',\n Yearly : 'Yearly'\n },\n RecurrenceCombo : {\n None : 'None',\n Custom : 'Custom...'\n },\n Summary : {\n 'Summary for' : date => `Summary for ${date}`\n },\n ScheduleRangeCombo : {\n completeview : 'Complete schedule',\n currentview : 'Visible schedule',\n daterange : 'Date range',\n completedata : 'Complete schedule (for all events)'\n },\n SchedulerExportDialog : {\n 'Schedule range' : 'Schedule range',\n 'Export from' : 'From',\n 'Export to' : 'To'\n },\n ExcelExporter : {\n 'No resource assigned' : 'No resource assigned'\n },\n CrudManagerView : {\n serverResponseLabel : 'Server response:'\n },\n DurationColumn : {\n Duration : 'Duration'\n }\n};\nexport default LocaleHelper.publishLocale(locale);\n", "import { unitMagnitudes } from '../../Core/helper/DateHelper.js';\nimport ViewPreset from './ViewPreset.js';\nimport Localizable from '../../Core/localization/Localizable.js';\nimport '../../Scheduler/localization/En.js';\nimport Store from '../../Core/data/Store.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\n/**\n * @module Scheduler/preset/PresetStore\n */\n/**\n * A special Store subclass which holds {@link Scheduler.preset.ViewPreset ViewPresets}.\n * Each ViewPreset in this store represents a zoom level. The store data is sorted in special\n * zoom order. That is zoomed out to zoomed in. The first Preset will produce the narrowest event bars\n * the last one will produce the widest event bars.\n *\n * To specify view presets (zoom levels) please provide set of view presets to the scheduler:\n *\n * ```javascript\n * const myScheduler = new Scheduler({\n * presets : [\n * {\n * base : 'hourAndDay',\n * id : 'MyHourAndDay',\n * // other preset configs....\n * },\n * {\n * base : 'weekAndMonth',\n * id : 'MyWeekAndMonth',\n * // other preset configs....\n * }\n * ],\n * viewPreset : 'MyHourAndDay',\n * // other scheduler configs....\n * });\n * ```\n *\n * @extends Core/data/Store\n */\nexport default class PresetStore extends Localizable(Store) {\n static get $name() {\n return 'PresetStore';\n }\n static get defaultConfig() {\n return {\n useRawData : true,\n modelClass : ViewPreset,\n /**\n * Specifies the sort order of the presets in the store.\n * By default they are in zoomed out to zoomed in order. That is\n * presets which will create widest event bars to presets\n * which will produce narrowest event bars.\n *\n * Configure this as `-1` to reverse this order.\n * @config {Number}\n * @default\n */\n zoomOrder : 1\n };\n }\n set storage(storage) {\n super.storage = storage;\n // Maintained in order automatically while adding.\n this.storage.addSorter((lhs, rhs) => {\n const\n leftBottomHeader = lhs.bottomHeader,\n rightBottomHeader = rhs.bottomHeader;\n // Sort order:\n // Milliseconds per pixel.\n // Tick size.\n // Unit magnitude.\n // Increment size.\n const\n order = rhs.msPerPixel - lhs.msPerPixel ||\n unitMagnitudes[leftBottomHeader.unit] - unitMagnitudes[rightBottomHeader.unit] ||\n leftBottomHeader.increment - rightBottomHeader.increment;\n return order * this.zoomOrder;\n });\n }\n get storage() {\n return super.storage;\n }\n getById(id) {\n // If we do not know about the id, inherit it from the PresetManager singleton\n return super.getById(id) || !this.isPresetManager && globalThis.bryntum.PresetManager.getById(id);\n }\n createRecord(data, ...args) {\n let result;\n if (data.isViewPreset) {\n return data;\n }\n if (typeof data === 'string') {\n result = this.getById(data);\n }\n else if (typeof data === 'number') {\n result = this.getAt(data);\n }\n // Its a ViewPreset data object\n else {\n // If it's extending an existing ViewPreset, inherit then override\n // the data from the base.\n if (data.base) {\n data = this.copyBaseValues(data);\n }\n // Model constructor will call generateId if no id is provided\n return super.createRecord(data, ...args);\n }\n if (!result) {\n throw new Error(`ViewPreset ${data} does not exist`);\n }\n return result;\n }\n updateLocalization() {\n super.updateLocalization();\n const me = this;\n // Collect presets from store...\n let presets = me.allRecords;\n // and basePresets if we are the PresetManager\n if (me.isPresetManager) {\n presets = new Set(presets.concat(Object.values(me.basePresets)));\n }\n presets.forEach(preset => {\n let localePreset = me.optionalL(`L{PresetManager.${preset.id}}`, null, true);\n // Default presets generated from base presets use localization of base if they have no own\n if (typeof localePreset === 'string' && preset.baseId) {\n localePreset = me.optionalL(`L{PresetManager.${preset.baseId}}`, null, true);\n }\n // Apply any custom format defined in locale, or the original format if none exists\n if (localePreset && typeof localePreset === 'object') {\n if (!preset.originalDisplayDateFormat) {\n preset.originalDisplayDateFormat = preset.displayDateFormat;\n }\n // it there is a topDateFormat but preset.mainHeaderLevel is 0, means the middle header is the top header actually,\n // so convert property to middle (if middle doesn't exists) to localization understand (topDateFormat for weekAndDay for example)\n // topDateFormat doesn't work when mainHeaderLevel is 0 because it doesn't have top config\n // but has top header visually (Check on get headerConfig method in ViewPreset class)\n if (preset.mainHeaderLevel === 0 && localePreset.topDateFormat) {\n localePreset.middleDateFormat = localePreset.middleDateFormat || localePreset.topDateFormat;\n }\n preset.setData('displayDateFormat', localePreset.displayDateFormat || preset.originalDisplayDateFormat);\n ['top', 'middle', 'bottom'].forEach(level => {\n const\n levelConfig = preset.headerConfig[level],\n localeLevelDateFormat = localePreset[level + 'DateFormat'];\n if (levelConfig) {\n if (!levelConfig.originalDateFormat && levelConfig.dateFormat) {\n levelConfig.originalDateFormat = levelConfig.dateFormat;\n }\n // if there was defined topDateFormat on locale file for example, use it instead of renderer from basePresets (https://github.com/bryntum/support/issues/1307)\n if (localeLevelDateFormat && levelConfig.renderer) {\n levelConfig.renderer = null;\n }\n const dateFormat = localeLevelDateFormat || levelConfig.originalDateFormat;\n if (dateFormat) {\n levelConfig.dateFormat = dateFormat;\n }\n }\n });\n // The preset names are used in ViewPresetCombo and are localized by default\n if (localePreset.name) {\n if (!preset.unlocalizedName) {\n preset.unlocalizedName = preset.name;\n }\n preset.setData('name', localePreset.name);\n }\n else if (preset.unlocalizedName && preset.unlocalizedName !== preset.name) {\n preset.name = preset.unlocalizedName;\n preset.unlocalizedName = null;\n }\n }\n });\n }\n // This function is not meant to be called by any code other than Base#getCurrentConfig().\n // Preset config on Scheduler/Gantt expects array of presets and not store config\n getCurrentConfig(options) {\n return super.getCurrentConfig(options).data;\n }\n copyBaseValues(presetData) {\n let base = this.getById(presetData.base);\n if (!base) {\n throw new Error(`ViewPreset base '${presetData.base}' does not exist.`);\n }\n base = ObjectHelper.clone(base.data);\n delete base.id;\n if (presetData.name) {\n delete base.name;\n }\n // Merge supplied data into a clone of the base ViewPreset's data\n // so that the new one overrides the base.\n return ObjectHelper.merge(base, presetData);\n }\n add(preset) {\n preset = Array.isArray(preset) ? preset : [preset];\n preset.forEach(preset => {\n // If a ViewPreset instance that extends another preset was added\n // Only in add we can apply the base data\n if (preset.isViewPreset && preset.base) {\n preset.data = this.copyBaseValues(preset.originalData);\n }\n });\n return super.add(...arguments);\n }\n}\nPresetStore._$name = 'PresetStore';", "import DateHelper from '../../Core/helper/DateHelper.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport ViewPreset from './ViewPreset.js';\nimport PresetStore from './PresetStore.js';\n// No module tag here. That stops the singleton from being included by the docs.\n/**\n * ## Intro\n * This is a global Store of {@link Scheduler.preset.ViewPreset ViewPresets}, required to supply initial data to\n * Scheduler's {@link Scheduler.view.mixin.TimelineViewPresets#config-presets}.\n *\n * You can provide new view presets globally or for a specific scheduler.\n *\n * **NOTE:** You **cannot** modify existing records in the PresetManager store. You can either remove\n * preset records from the store or add new records to the store.\n * Also please keep in mind, all changes provided to the PresetManager store are not reflected to the\n * {@link Scheduler.view.mixin.TimelineViewPresets#config-presets} of schedulers that already exist!\n *\n * If you want to have just a few presets (also known as zoom levels) in your Scheduler, you can slice corresponding records\n * from the `PresetManager` and apply them to the Scheduler `presets` config.\n * ```javascript\n * const newPresets = PresetManager.records.slice(10, 12);\n *\n * const scheduler = new Scheduler({\n * presets : newPresets, // Only 2 zoom levels are available\n * viewPreset : newPresets[0].id\n * });\n * ```\n *\n * If you want to adjust all default presets and assign to a specific scheduler you are going to create,\n * you can extend them and pass as an array to the Scheduler `presets` config.\n * Here is an example of how to set the same `timeResolution` to all `ViewPresets`.\n * ```javascript\n * const newPresets = PresetManager.map(preset => {\n * return {\n * id : 'my_' + preset.id,\n * base : preset.id, // Based on an existing preset\n * timeResolution : {\n * unit : 'day',\n * increment : 1\n * }\n * };\n * });\n *\n * const scheduler = new Scheduler({\n * presets : newPresets,\n * viewPreset : 'my_hourAndDay'\n * });\n * ```\n *\n * If you want to do the same for **all** schedulers which will be created next, you can register new presets in a loop.\n * ```javascript\n * PresetManager.records.forEach(preset => {\n * // Pass the same ID, so when a new preset is added to the store,\n * // it will replace the current one.\n * PresetManager.registerPreset(preset.id, {\n * id : preset.id,\n * base : preset.id,\n * timeResolution : {\n * unit : 'day',\n * increment : 1\n * }\n * });\n * });\n * ```\n *\n * Here is an example of how to add a new `ViewPreset` to the global `PresetManager` store and to the already created\n * scheduler `presets`.\n * ```javascript\n * const scheduler = new Scheduler({...});\n *\n * const newGlobalPresets = PresetManager.add({\n * id : 'myNewPreset',\n * base : 'hourAndDay', // Based on an existing preset\n * columnLinesFor : 0,\n * // Override headers\n * headers : [\n * {\n * unit : 'day',\n * // Use different date format for top header 01.10.2020\n * dateFormat : 'DD.MM.YYYY'\n * },\n * {\n * unit : 'hour',\n * dateFormat : 'LT'\n * }\n * ]\n * });\n *\n * // Add new presets to the scheduler that has been created before changes\n * // to PresetManager are applied\n * scheduler.presets.add(newGlobalPresets);\n * ```\n *\n * ## Predefined presets\n *\n * Predefined presets are:\n *\n * - `secondAndMinute` - creates a 2 level header - minutes and seconds:\n * {@inlineexample Scheduler/preset/secondAndMinute.js}\n * - `minuteAndHour` - creates a 2 level header - hours and minutes:\n * {@inlineexample Scheduler/preset/minuteAndHour.js}\n * - `hourAndDay` - creates a 2 level header - days and hours:\n * {@inlineexample Scheduler/preset/hourAndDay.js}\n * - `dayAndWeek` - creates a 2 level header - weeks and days:\n * {@inlineexample Scheduler/preset/dayAndWeek.js}\n * - `dayAndMonth` - creates a 2 level header - months and days:\n * {@inlineexample Scheduler/preset/dayAndMonth.js}\n * - `weekAndDay` - just like `dayAndWeek` but with different formatting:\n * {@inlineexample Scheduler/preset/weekAndDay.js}\n * - `weekAndDayLetter` - creates a 2 level header - weeks and day letters:\n * {@inlineexample Scheduler/preset/weekAndDayLetter.js}\n * - `weekAndMonth` - creates a 2 level header - months and weeks:\n * {@inlineexample Scheduler/preset/weekAndMonth.js}\n * - `weekDateAndMonth` - creates a 2 level header - months and weeks (weeks shown by first day only):\n * {@inlineexample Scheduler/preset/weekDateAndMonth.js}\n * - `monthAndYear` - creates a 2 level header - years and months:\n * {@inlineexample Scheduler/preset/monthAndYear.js}\n * - `year` - creates a 2 level header - years and quarters:\n * {@inlineexample Scheduler/preset/year.js}\n * - `manyYears` - creates a 2 level header - 5-years and years:\n * {@inlineexample Scheduler/preset/manyYears.js}\n *\n * See the {@link Scheduler.preset.ViewPreset} and {@link Scheduler.preset.ViewPresetHeaderRow} classes for a\n * description of the view preset properties.\n *\n * ## Localizing View Presets\n * Bryntum Scheduler uses locales for translations including date formats for view presets.\n *\n * To translate date format for view presets just define the date format for the specified region\n * for your locale file, like this:\n * ```javascript\n * const locale = {\n *\n * localeName : 'En',\n *\n * // ... Other translations here ...\n *\n * PresetManager : {\n * // Translation for the \"weekAndDay\" ViewPreset\n * weekAndDay : {\n * // Change the date format for the top and middle levels\n * topDateFormat : 'MMM',\n * middleDateFormat : 'D'\n * },\n * // Translation for the \"dayAndWeek\" ViewPreset\n * dayAndWeek : {\n * // Change the date format for the top level\n * topDateFormat : 'MMMM YYYY'\n * }\n * }\n * }\n *\n * LocaleManager.applyLocale(locale);\n * ```\n *\n * Check the localization demo and [this guide](#Scheduler/guides/customization/localization.md) for more details.\n *\n * @singleton\n * @extends Scheduler/preset/PresetStore\n */\nclass PresetManager extends PresetStore {\n static get $name() {\n return 'PresetManager';\n }\n static get defaultConfig() {\n return {\n // To not break CSP demo\n preventSubClassingModel : true,\n basePresets : {\n secondAndMinute : {\n name : 'Seconds',\n tickWidth : 30, // Time column width\n tickHeight : 40,\n displayDateFormat : 'll LTS', // Controls how dates will be displayed in tooltips etc\n shiftIncrement : 10, // Controls how much time to skip when calling shiftNext and shiftPrevious.\n shiftUnit : 'minute', // Valid values are \"millisecond\", \"second\", \"minute\", \"hour\", \"day\", \"week\", \"month\", \"quarter\", \"year\".\n defaultSpan : 24, // By default, if no end date is supplied to a view it will show 24 hours\n timeResolution : { // Dates will be snapped to this resolution\n unit : 'second', // Valid values are \"millisecond\", \"second\", \"minute\", \"hour\", \"day\", \"week\", \"month\", \"quarter\", \"year\".\n increment : 5\n },\n // This defines your header rows.\n // For each row you can define \"unit\", \"increment\", \"dateFormat\", \"renderer\", \"align\", and \"thisObj\"\n headers : [\n {\n unit : 'minute',\n dateFormat : 'lll'\n },\n {\n unit : 'second',\n increment : 10,\n dateFormat : 'ss'\n }\n ]\n },\n minuteAndHour : {\n name : 'Minutes',\n tickWidth : 60, // Time column width\n tickHeight : 60,\n displayDateFormat : 'll LT', // Controls how dates will be displayed in tooltips etc\n shiftIncrement : 1, // Controls how much time to skip when calling shiftNext and shiftPrevious.\n shiftUnit : 'hour', // Valid values are \"MILLI\", \"SECOND\", \"minute\", \"HOUR\", \"DAY\", \"WEEK\", \"MONTH\", \"QUARTER\", \"YEAR\".\n defaultSpan : 24, // By default, if no end date is supplied to a view it will show 24 hours\n timeResolution : { // Dates will be snapped to this resolution\n unit : 'minute', // Valid values are \"MILLI\", \"SECOND\", \"minute\", \"HOUR\", \"DAY\", \"WEEK\", \"MONTH\", \"QUARTER\", \"YEAR\".\n increment : 15\n },\n headers : [\n {\n unit : 'hour',\n dateFormat : 'ddd MM/DD, hA'\n },\n {\n unit : 'minute',\n increment : 30,\n dateFormat : 'mm'\n }\n ]\n },\n hourAndDay : {\n name : 'Day',\n tickWidth : 70,\n tickHeight : 40,\n displayDateFormat : 'll LT',\n shiftIncrement : 1,\n shiftUnit : 'day',\n defaultSpan : 24,\n timeResolution : {\n unit : 'minute',\n increment : 30\n },\n headers : [\n {\n unit : 'day',\n dateFormat : 'ddd DD/MM' //Mon 01/10\n },\n {\n unit : 'hour',\n dateFormat : 'LT'\n }\n ]\n },\n day : {\n name : 'Day/hours',\n displayDateFormat : 'LT',\n shiftIncrement : 1,\n shiftUnit : 'day',\n defaultSpan : 1,\n timeResolution : {\n unit : 'minute',\n increment : 30\n },\n mainHeaderLevel : 0,\n headers : [\n {\n unit : 'day',\n dateFormat : 'ddd DD/MM', // Mon 01/02\n splitUnit : 'day'\n },\n {\n unit : 'hour',\n renderer(value) {\n return `\n
${DateHelper.format(value, 'HH')}\n ${DateHelper.format(value, 'mm')}
\n `;\n }\n }\n ]\n },\n week : {\n name : 'Week/hours',\n displayDateFormat : 'LT',\n shiftIncrement : 1,\n shiftUnit : 'week',\n defaultSpan : 24,\n timeResolution : {\n unit : 'minute',\n increment : 30\n },\n mainHeaderLevel : 0,\n headers : [\n {\n unit : 'week',\n dateFormat : 'D d',\n splitUnit : 'day'\n },\n {\n unit : 'hour',\n dateFormat : 'LT', // will be overridden by renderer\n renderer(value) {\n return `\n
\n ${DateHelper.format(value, 'HH')}\n ${DateHelper.format(value, 'mm')}\n
\n `;\n }\n }\n ]\n },\n dayAndWeek : {\n name : 'Days & Weeks',\n tickWidth : 100,\n tickHeight : 80,\n displayDateFormat : 'll LT',\n shiftUnit : 'day',\n shiftIncrement : 1,\n defaultSpan : 5,\n timeResolution : {\n unit : 'hour',\n increment : 1\n },\n headers : [\n {\n unit : 'week',\n renderer(start) {\n return DateHelper.getShortNameOfUnit('week') + '.' + DateHelper.format(start, 'WW MMM YYYY');\n }\n },\n {\n unit : 'day',\n dateFormat : 'dd DD'\n }\n ]\n },\n // dayAndMonth : {\n // name : 'Days & Months',\n // tickWidth : 100,\n // tickHeight : 80,\n // displayDateFormat : 'll LT',\n // shiftUnit : 'day',\n // shiftIncrement : 1,\n // defaultSpan : 5,\n // timeResolution : {\n // unit : 'hour',\n // increment : 1\n // },\n // headers : [\n // {\n // unit : 'month',\n // dateFormat : 'MMMM YYYY',\n // align : 'start'\n // },\n // {\n // unit : 'day',\n // dateFormat : 'dd DD'\n // }\n // ]\n // },\n dayAndMonth : {\n name : 'Month',\n tickWidth : 100,\n tickHeight : 80,\n displayDateFormat : 'll LT',\n shiftUnit : 'month',\n shiftIncrement : 1,\n defaultSpan : 1,\n mainUnit : 'month',\n timeResolution : {\n unit : 'hour',\n increment : 1\n },\n headers : [\n {\n unit : 'month',\n dateFormat : 'MMMM YYYY'\n },\n {\n unit : 'day',\n dateFormat : 'DD'\n }\n ]\n },\n weekAndDay : {\n name : 'Week',\n tickWidth : 100,\n tickHeight : 80,\n displayDateFormat : 'll hh:mm A',\n shiftUnit : 'week',\n shiftIncrement : 1,\n defaultSpan : 1,\n timeResolution : {\n unit : 'day',\n increment : 1\n },\n mainHeaderLevel : 0,\n headers : [\n {\n unit : 'week',\n dateFormat : 'YYYY MMMM DD' // 2017 January 01\n },\n {\n unit : 'day',\n increment : 1,\n dateFormat : 'DD MMM'\n }\n ]\n },\n weekAndMonth : {\n name : 'Weeks',\n tickWidth : 100,\n tickHeight : 105,\n displayDateFormat : 'll',\n shiftUnit : 'week',\n shiftIncrement : 5,\n defaultSpan : 6,\n timeResolution : {\n unit : 'day',\n increment : 1\n },\n headers : [\n {\n unit : 'month',\n dateFormat : 'MMM YYYY' //Jan 2017\n },\n {\n unit : 'week',\n dateFormat : 'DD MMM'\n }\n ]\n },\n weekAndDayLetter : {\n name : 'Weeks/weekdays',\n tickWidth : 20,\n tickHeight : 50,\n displayDateFormat : 'll',\n shiftUnit : 'week',\n shiftIncrement : 1,\n defaultSpan : 10,\n timeResolution : {\n unit : 'day',\n increment : 1\n },\n mainHeaderLevel : 0,\n headers : [\n {\n unit : 'week',\n dateFormat : 'ddd DD MMM YYYY',\n verticalColumnWidth : 115\n },\n {\n unit : 'day',\n dateFormat : 'd1',\n verticalColumnWidth : 25\n }\n ]\n },\n weekDateAndMonth : {\n name : 'Months/weeks',\n tickWidth : 30,\n tickHeight : 40,\n displayDateFormat : 'll',\n shiftUnit : 'week',\n shiftIncrement : 1,\n defaultSpan : 10,\n timeResolution : {\n unit : 'day',\n increment : 1\n },\n headers : [\n {\n unit : 'month',\n dateFormat : 'YYYY MMMM'\n },\n {\n unit : 'week',\n dateFormat : 'DD'\n }\n ]\n },\n monthAndYear : {\n name : 'Months',\n tickWidth : 110,\n tickHeight : 110,\n displayDateFormat : 'll',\n shiftIncrement : 3,\n shiftUnit : 'month',\n defaultSpan : 12,\n timeResolution : {\n unit : 'day',\n increment : 1\n },\n headers : [\n {\n unit : 'year',\n dateFormat : 'YYYY' //2017\n },\n {\n unit : 'month',\n dateFormat : 'MMM YYYY' //Jan 2017\n }\n ]\n },\n year : {\n name : 'Years',\n tickWidth : 100,\n tickHeight : 100,\n resourceColumnWidth : 100,\n displayDateFormat : 'll',\n shiftUnit : 'year',\n shiftIncrement : 1,\n defaultSpan : 1,\n mainHeaderLevel : 0,\n timeResolution : {\n unit : 'month',\n increment : 1\n },\n headers : [\n {\n unit : 'year',\n dateFormat : 'YYYY'\n },\n {\n unit : 'quarter',\n renderer(start, end, cfg) {\n return DateHelper.getShortNameOfUnit('quarter').toUpperCase() + (Math.floor(start.getMonth() / 3) + 1);\n }\n }\n ]\n },\n manyYears : {\n name : 'Multiple years',\n tickWidth : 40,\n tickHeight : 50,\n displayDateFormat : 'll',\n shiftUnit : 'year',\n shiftIncrement : 1,\n defaultSpan : 10,\n timeResolution : {\n unit : 'year',\n increment : 1\n },\n mainHeaderLevel : 0,\n headers : [\n {\n unit : 'year',\n increment : 5,\n renderer : (start, end) => start.getFullYear() + ' - ' + end.getFullYear()\n },\n {\n unit : 'year',\n dateFormat : 'YY',\n increment : 1\n }\n ]\n }\n },\n // This is a list of bryntum-supplied preset adjustments used to create the Scheduler's\n // default initial set of ViewPresets.\n defaultPresets : [\n // Years over years\n 'manyYears',\n { width : 80, increment : 1, resolution : 1, base : 'manyYears', resolutionUnit : 'YEAR' },\n // Years over quarters\n 'year',\n { width : 30, increment : 1, resolution : 1, base : 'year', resolutionUnit : 'MONTH' },\n { width : 50, increment : 1, resolution : 1, base : 'year', resolutionUnit : 'MONTH' },\n { width : 200, increment : 1, resolution : 1, base : 'year', resolutionUnit : 'MONTH' },\n // Years over months\n 'monthAndYear',\n // Months over weeks\n 'weekDateAndMonth',\n // Months over weeks\n 'weekAndMonth',\n // Months over weeks\n 'weekAndDayLetter',\n // Months over days\n 'dayAndMonth',\n // Weeks over days\n 'weekAndDay',\n { width : 54, increment : 1, resolution : 1, base : 'weekAndDay', resolutionUnit : 'HOUR' },\n // Days over hours\n 'hourAndDay',\n { width : 64, increment : 6, resolution : 30, base : 'hourAndDay', resolutionUnit : 'MINUTE' },\n { width : 100, increment : 6, resolution : 30, base : 'hourAndDay', resolutionUnit : 'MINUTE' },\n { width : 64, increment : 2, resolution : 30, base : 'hourAndDay', resolutionUnit : 'MINUTE' },\n // Hours over minutes\n 'minuteAndHour',\n { width : 60, increment : 15, resolution : 5, base : 'minuteAndHour' },\n { width : 130, increment : 15, resolution : 5, base : 'minuteAndHour' },\n { width : 60, increment : 5, resolution : 5, base : 'minuteAndHour' },\n { width : 100, increment : 5, resolution : 5, base : 'minuteAndHour' },\n // Minutes over seconds\n 'secondAndMinute',\n { width : 60, increment : 10, resolution : 5, base : 'secondAndMinute' },\n { width : 130, increment : 5, resolution : 5, base : 'secondAndMinute' }\n ],\n internalListeners : {\n locale : 'updateLocalization'\n }\n };\n }\n set basePresets(basePresets) {\n const presetCache = this._basePresets = {};\n // createRecord uses _modelClass for performance reasons, make sure it is available\n this.getConfig('modelClass');\n for (const id in basePresets) {\n basePresets[id].id = id;\n presetCache[id] = this.createRecord(basePresets[id]);\n }\n }\n get basePresets() {\n return this._basePresets;\n }\n set defaultPresets(defaultPresets) {\n for (let i = 0, { length } = defaultPresets; i < length; i++) {\n const\n presetAdjustment = defaultPresets[i],\n isBase = typeof presetAdjustment === 'string',\n baseType = isBase ? presetAdjustment : presetAdjustment.base;\n let preset;\n // The default was just a string, so it's an unmodified instance of a base type.\n if (isBase) {\n preset = this.basePresets[baseType];\n }\n // If it's an object, it's an adjustment to a base type\n else {\n const\n config = Object.setPrototypeOf(ObjectHelper.clone(this.basePresets[baseType].data), { id : baseType }),\n { timeResolution } = config,\n bottomHeader = config.headers[config.headers.length - 1];\n config.id = undefined;\n if ('width' in presetAdjustment) {\n config.tickWidth = presetAdjustment.width;\n }\n if ('height' in presetAdjustment) {\n config.tickHeight = presetAdjustment.height;\n }\n if ('increment' in presetAdjustment) {\n bottomHeader.increment = presetAdjustment.increment;\n }\n if ('resolution' in presetAdjustment) {\n timeResolution.increment = presetAdjustment.resolution;\n }\n if ('resolutionUnit' in presetAdjustment) {\n timeResolution.unit = DateHelper.getUnitByName(presetAdjustment.resolutionUnit);\n }\n preset = this.createRecord(config);\n // Keep id of original preset around, used with localization in PresetStore\n preset.baseId = baseType;\n }\n this.add(preset);\n }\n }\n getById(id) {\n // Look first in the default set, and if it's one of the base types that is not imported into the\n // default set, then look at the bases.\n return super.getById(id) || this.basePresets[id];\n }\n /**\n * Registers a new view preset base to be used by any scheduler grid or tree on the page.\n * @param {String} id The unique identifier for this preset\n * @param {ViewPresetConfig} config The configuration properties of the view preset (see\n * {@link Scheduler.preset.ViewPreset} for more information)\n * @returns {Scheduler.preset.ViewPreset} A new ViewPreset based upon the passed configuration.\n */\n registerPreset(id, config) {\n const\n preset = this.createRecord(Object.assign({\n id\n }, config)),\n existingDuplicate = this.find(p => p.equals(preset));\n if (existingDuplicate) {\n return existingDuplicate;\n }\n if (preset.isValid) {\n this.add(preset);\n }\n else {\n throw new Error('Invalid preset, please check your configuration');\n }\n return preset;\n }\n getPreset(preset) {\n if (typeof preset === 'number') {\n preset = this.getAt(preset);\n }\n if (typeof preset === 'string') {\n preset = this.getById(preset);\n }\n else if (!(preset instanceof ViewPreset)) {\n preset = this.createRecord(preset);\n }\n return preset;\n }\n /**\n * Applies preset customizations or fetches a preset view preset using its name.\n * @param {String|ViewPresetConfig} presetOrId Id of a predefined preset or a preset config object\n * @returns {Scheduler.preset.ViewPreset} Resulting ViewPreset instance\n */\n normalizePreset(preset) {\n const me = this;\n if (!(preset instanceof ViewPreset)) {\n if (typeof preset === 'string') {\n preset = me.getPreset(preset);\n if (!preset) {\n throw new Error('You must define a valid view preset. See PresetManager for reference');\n }\n }\n else if (typeof preset === 'object') {\n // Look up any existing ViewPreset that it is based upon.\n if (preset.base) {\n const base = this.getById(preset.base);\n if (!base) {\n throw new Error(`ViewPreset base '${preset.base}' does not exist`);\n }\n // The config is based upon the base's data with the new config object merged in.\n preset = ObjectHelper.merge(ObjectHelper.clone(base.data), preset);\n }\n // Ensure the new ViewPreset has a legible, logical id which does not already\n // exist in our store.\n if (preset.id) {\n preset = me.createRecord(preset);\n }\n else {\n preset = me.createRecord(ObjectHelper.assign({}, preset));\n preset.id = preset.generateId(preset);\n }\n }\n }\n return preset;\n }\n /**\n * Deletes a view preset\n * @param {String} id The id of the preset, or the preset instance.\n */\n deletePreset(presetOrId) {\n if (typeof presetOrId === 'string') {\n presetOrId = this.getById(presetOrId);\n }\n else if (typeof presetOrId === 'number') {\n presetOrId = this.getAt(presetOrId);\n }\n if (presetOrId) {\n this.remove(presetOrId);\n // ALso remove it from our base list\n delete this.basePresets[presetOrId.id];\n }\n }\n}\nconst pm = new PresetManager();\nglobalThis.bryntum.PresetManager = pm;\nexport { pm as default };\n", "import Store from '../../Core/data/Store.js';\nimport DH from '../../Core/helper/DateHelper.js';\nimport TimeSpan from '../model/TimeSpan.js';\nimport PresetManager from '../preset/PresetManager.js';\n/**\n * @module Scheduler/data/TimeAxis\n */\n// Micro-optimized version of TimeSpan for faster reading. Hit a lot and since it is internal fields are guaranteed to\n// not be remapped and changes won't be batches, so we can always return raw value from data avoiding all additional\n// checks and logic\nclass Tick extends TimeSpan {\n // Only getters on purpose, we do not support manipulating ticks\n get startDate() {\n return this.data.startDate;\n }\n get endDate() {\n return this.data.endDate;\n }\n}\n/**\n * A class representing the time axis of the scheduler. The scheduler timescale is based on the ticks generated by this\n * class. This is a pure \"data\" (model) representation of the time axis and has no UI elements.\n *\n * The time axis can be {@link #config-continuous} or not. In continuous mode, each timespan starts where the previous\n * ended, and in non-continuous mode there can be gaps between the ticks.\n * A non-continuous time axis can be used when want to filter out certain periods of time (like weekends) from the time\n * axis.\n *\n * To create a non-continuous time axis you have 2 options. First, you can create a time axis containing only the time\n * spans of interest. To do that, subclass this class and override the {@link #property-generateTicks} method.\n *\n * The other alternative is to call the {@link #function-filterBy} method, passing a function to it which should return\n * `false` if the time tick should be filtered out. Calling {@link Core.data.mixin.StoreFilter#function-clearFilters}\n * will return you to a full time axis.\n *\n * @extends Core/data/Store\n */\nexport default class TimeAxis extends Store {\n //region Events\n /**\n * Fires before the timeaxis is about to be reconfigured (e.g. new start/end date or unit/increment). Return `false`\n * to abort the operation.\n * @event beforeReconfigure\n * @param {Scheduler.data.TimeAxis} source The time axis instance\n * @param {Date} startDate The new time axis start date\n * @param {Date} endDate The new time axis end date\n * @preventable\n */\n /**\n * Event that is triggered when we end reconfiguring and everything UI-related should be done\n * @event endReconfigure\n * @private\n */\n /**\n * Fires when the timeaxis has been reconfigured (e.g. new start/end date or unit/increment)\n * @event reconfigure\n * @param {Scheduler.data.TimeAxis} source The time axis instance\n */\n /**\n * Fires if all the ticks in the timeaxis are filtered out. After firing the filter is temporarily disabled to\n * return the time axis to a valid state. A disabled filter will be re-enabled the next time ticks are regenerated\n * @event invalidFilter\n * @param {Scheduler.data.TimeAxis} source The time axis instance\n */\n //endregion\n //region Default config\n static get defaultConfig() {\n return {\n modelClass : Tick,\n /**\n * Set to false if the timeline is not continuous, e.g. the next timespan does not start where the previous ended (for example skipping weekends etc).\n * @config {Boolean}\n * @default\n */\n continuous : true,\n originalContinuous : null,\n /**\n * Include only certain hours or days in the time axis (makes it `continuous : false`). Accepts and object\n * with `day` and `hour` properties:\n * ```\n * const scheduler = new Scheduler({\n * timeAxis : {\n * include : {\n * // Do not display hours after 17 or before 9 (only display 9 - 17). The `to\u00B4 value is not\n * // included in the time axis\n * hour : {\n * from : 9,\n * to : 17\n * },\n * // Do not display sunday or saturday\n * day : [0, 6]\n * }\n * }\n * }\n * ```\n * In most cases we recommend that you use Scheduler's workingTime config instead. It is easier to use and\n * makes sure all parts of the Scheduler gets updated.\n * @config {Object}\n */\n include : null,\n /**\n * Automatically adjust the timespan when generating ticks with {@link #property-generateTicks} according to\n * the `viewPreset` configuration. Setting this to false may lead to shifting time/date of ticks.\n * @config {Boolean}\n * @default\n */\n autoAdjust : true,\n //isConfigured : false,\n // in case of `autoAdjust : false`, the 1st and last ticks can be truncated, containing only part of the normal tick\n // these dates will contain adjusted start/end (like if the tick has not been truncated)\n adjustedStart : null,\n adjustedEnd : null,\n // the visible position in the first tick, can actually be > 1 because the adjustment is done by the `mainUnit`\n visibleTickStart : null,\n // the visible position in the first tick, is always ticks count - 1 < value <= ticks count, in case of autoAdjust, always = ticks count\n visibleTickEnd : null,\n tickCache : {},\n viewPreset : null,\n maxTraverseTries : 100,\n useRawData : {\n disableDuplicateIdCheck : true,\n disableDefaultValue : true,\n disableTypeConversion : true\n }\n };\n }\n static get configurable() {\n return {\n /**\n * Method generating the ticks for this time axis. Should return a **non-empty** array of ticks. Each tick\n * is an object of the following structure:\n * ```\n * {\n * startDate : ..., // start date\n * endDate : ... // end date\n * }\n * ```\n * To see it in action please check out our [TimeAxis](https://bryntum.com/products/scheduler/examples/timeaxis/)\n * example and navigate to \"Compressed non-working time\" tab.\n *\n * @param {Date} axisStartDate The start date of the interval\n * @param {Date} axisEndDate The end date of the interval\n * @param {DurationUnit} unit The unit of the time axis\n * @param {Number} increment The increment for the unit specified.\n * @returns {TimeSpanConfig[]} ticks The ticks representing the time axis\n * @config {Function}\n */\n generateTicks : null,\n unit : null,\n increment : null,\n resolutionUnit : null,\n resolutionIncrement : null,\n mainUnit : null,\n shiftUnit : null,\n shiftIncrement : 1,\n defaultSpan : 1,\n weekStartDay : null,\n // Used to force resolution to match whole ticks, to snap accordingly when using fillTicks in the UI\n forceFullTicks : null\n };\n }\n //endregion\n //region Init\n // private\n construct(config) {\n const me = this;\n super.construct(config);\n me.originalContinuous = me.continuous;\n me.ion({\n change : ({ action }) => {\n // If the change was due to filtering, there will be a refresh event\n // arriving next, so do not reconfigure\n if (action !== 'filter') {\n me.trigger('reconfigure', { supressRefresh : false });\n }\n },\n refresh : () => me.trigger('reconfigure', { supressRefresh : false }),\n endreconfigure : event => me.trigger('reconfigure', event)\n });\n if (me.startDate) {\n me.internalOnReconfigure();\n me.trigger('reconfigure');\n }\n else if (me.viewPreset) {\n const range = me.getAdjustedDates(new Date());\n me.startDate = range.startDate;\n me.endDate = range.endDate;\n }\n }\n get isTimeAxis() {\n return true;\n }\n //endregion\n //region Configuration (reconfigure & consumePreset)\n /**\n * Reconfigures the time axis based on the config object supplied and generates the new 'ticks'.\n * @param {Object} config\n * @param {Boolean} [suppressRefresh]\n * @private\n */\n reconfigure(config, suppressRefresh = false, preventThrow = false) {\n const\n me = this,\n normalized = me.getAdjustedDates(config.startDate, config.endDate),\n oldConfig = {};\n if (me.trigger('beforeReconfigure', { startDate : normalized.startDate, endDate : normalized.endDate, config }) !== false) {\n me.trigger('beginReconfigure');\n me._configuredStartDate = config.startDate;\n me._configuredEndDate = config.endDate;\n // Collect old values for end event\n for (const propName in config) {\n oldConfig[propName] = me[propName];\n }\n const viewPresetChanged = config.viewPreset && config.viewPreset !== me.viewPreset;\n // If changing viewPreset, try to gracefully recover if an applied filter results in an empty view\n if (viewPresetChanged) {\n preventThrow = me.isFiltered;\n me.filters.forEach(f => f.disabled = false);\n }\n Object.assign(me, config);\n if (me.internalOnReconfigure(preventThrow, viewPresetChanged) === false) {\n return false;\n }\n me.trigger('endReconfigure', { suppressRefresh, config, oldConfig });\n }\n }\n internalOnReconfigure(preventThrow = false, viewPresetChanged) {\n const me = this;\n me.isConfigured = true;\n const\n adjusted = me.getAdjustedDates(me.startDate, me.endDate, true),\n normalized = me.getAdjustedDates(me.startDate, me.endDate),\n start = normalized.startDate,\n end = normalized.endDate;\n if (start >= end) {\n throw new Error(`Invalid start/end dates. Start date must be less than end date. Start date: ${start}. End date: ${end}.`);\n }\n const\n { unit, increment = 1 } = me,\n ticks = me.generateTicks(start, end, unit, increment) ||\n // Offer a fallback in case user did not generate any ticks at all.\n me.constructor.prototype.generateTicks.call(me, start, end, unit, increment);\n // Suspending to be able to detect an invalid filter\n me.suspendEvents();\n me.maintainFilter = preventThrow;\n me.data = ticks;\n me.maintainFilter = false;\n const { count } = me;\n if (count === 0) {\n if (preventThrow) {\n if (viewPresetChanged) {\n me.disableFilters();\n }\n me.resumeEvents();\n return false;\n }\n throw new Error('Invalid time axis configuration or filter, please check your input data.');\n }\n // start date is cached, update it to fill after generated ticks\n me.startDate = me.first.startDate;\n me.endDate = me.last.endDate;\n me.resumeEvents();\n if (me.isContinuous) {\n me.adjustedStart = adjusted.startDate;\n me.adjustedEnd = DH.getNext(count > 1 ? ticks[count - 1].startDate : adjusted.startDate, unit, increment, me.weekStartDay);\n }\n else {\n me.adjustedStart = me.startDate;\n me.adjustedEnd = me.endDate;\n }\n me.updateVisibleTickBoundaries();\n me.updateTickCache(true);\n }\n updateVisibleTickBoundaries() {\n const\n me = this,\n {\n count,\n unit,\n startDate,\n endDate,\n weekStartDay,\n increment = 1\n } = me;\n // Denominator is amount of milliseconds in a full tick (unit * increment). Normally we use 30 days in a month\n // and 365 days in a year. But if month is 31 day long or year is a leap one standard formula might calculate\n // wrong value. e.g. if we're rendering 1 day from August, formula goes like (2021-08-31 - 2021-08-02) / 30 = 1\n // and renders full tick which is incorrect. For such cases we need to adjust denominator to a correct one.\n // Thankfully there are only a few of them - month, year and day with DST transition.\n const\n startDenominator = DH.getNormalizedUnitDuration(startDate, unit) * increment,\n endDenominator = DH.getNormalizedUnitDuration(endDate, unit) * increment;\n // if visibleTickStart > 1 this means some tick is fully outside of the view - we are not interested in it and want to\n // drop it and adjust \"adjustedStart\" accordingly\n do {\n me.visibleTickStart = (startDate - me.adjustedStart) / startDenominator;\n if (me.autoAdjust) me.visibleTickStart = Math.floor(me.visibleTickStart);\n if (me.visibleTickStart >= 1) me.adjustedStart = DH.getNext(me.adjustedStart, unit, increment, weekStartDay);\n } while (me.visibleTickStart >= 1);\n do {\n me.visibleTickEnd = count - (me.adjustedEnd - endDate) / endDenominator;\n if (count - me.visibleTickEnd >= 1) me.adjustedEnd = DH.getNext(me.adjustedEnd, unit, -1, weekStartDay);\n } while (count - me.visibleTickEnd >= 1);\n // This flag indicates that the time axis starts exactly on a tick boundary and finishes on a tick boundary\n // This is used as an optimization flag by TimeAxisViewModel.createHeaderRow\n me.fullTicks = !me.visibleTickStart && me.visibleTickEnd === count;\n }\n /**\n * Get the currently used time unit for the ticks\n * @readonly\n * @member {DurationUnit} unit\n */\n /**\n * Get/set currently used preset\n * @property {Scheduler.preset.ViewPreset}\n */\n get viewPreset() {\n return this._viewPreset;\n }\n set viewPreset(preset) {\n const me = this;\n preset = PresetManager.getPreset(preset);\n if (!preset.isViewPreset) {\n throw new Error('TimeAxis must be configured with the ViewPreset instance that the Scheduler is using');\n }\n me._viewPreset = preset;\n Object.assign(me, {\n unit : preset.bottomHeader.unit,\n increment : preset.bottomHeader.increment || 1,\n resolutionUnit : preset.timeResolution.unit,\n resolutionIncrement : preset.timeResolution.increment,\n mainUnit : preset.mainHeader.unit,\n shiftUnit : preset.shiftUnit || preset.mainHeader.unit,\n shiftIncrement : preset.shiftIncrement || 1,\n defaultSpan : preset.defaultSpan || 1,\n presetName : preset.id,\n // Weekview columns are updated upon 'datachanged' event on this object.\n // We have to pass headers in order to render them correctly (timeAxisViewModel is incorrect in required time)\n headers : preset.headers\n });\n }\n //endregion\n //region Getters & setters\n get weekStartDay() {\n return this._weekStartDay ?? DH.weekStartDay;\n }\n // private\n get resolution() {\n return {\n unit : this.resolutionUnit,\n increment : this.resolutionIncrement\n };\n }\n // private\n set resolution(resolution) {\n this.resolutionUnit = resolution.unit;\n this.resolutionIncrement = resolution.increment;\n }\n get resolutionUnit() {\n return this.forceFullTicks ? this.unit : this._resolutionUnit;\n }\n get resolutionIncrement() {\n return this.forceFullTicks ? this.increment : this._resolutionIncrement;\n }\n //endregion\n //region Timespan & resolution\n /**\n * Changes the time axis timespan to the supplied start and end dates.\n *\n * **Note** This does **not** preserve the temporal scroll position. You may use\n * {@link Scheduler.view.Scheduler#function-setTimeSpan} to set the time axis and\n * maintain temporal scroll position (if possible).\n * @param {Date} newStartDate The new start date\n * @param {Date} [newEndDate] The new end date\n */\n setTimeSpan(newStartDate, newEndDate, preventThrow = false) {\n // If providing a 0 span range, add default range\n if (newEndDate && newStartDate - newEndDate === 0) {\n newEndDate = null;\n }\n const\n me = this,\n { startDate, endDate } = me.getAdjustedDates(newStartDate, newEndDate);\n if (me.startDate - startDate !== 0 || me.endDate - endDate !== 0) {\n return me.reconfigure({\n startDate,\n endDate\n }, false, preventThrow);\n }\n }\n /**\n * Moves the time axis by the passed amount and unit.\n *\n * NOTE: When using a filtered TimeAxis the result of `shift()` cannot be guaranteed, it might shift into a\n * filtered out span. It tries to be smart about it by shifting from unfiltered start and end dates.\n * If that solution does not work for your filtering setup, please call {@link #function-setTimeSpan} directly\n * instead.\n *\n * @param {Number} amount The number of units to jump\n * @param {String} [unit] The unit (Day, Week etc)\n */\n shift(amount, unit = this.shiftUnit) {\n const me = this;\n let { startDate, endDate } = me;\n // Use unfiltered start and end dates when shifting a filtered time axis, to lessen risk of messing it up.\n // Still not guaranteed to work though\n if (me.isFiltered) {\n startDate = me.allRecords[0].startDate;\n endDate = me.allRecords[me.allCount - 1].endDate;\n }\n // Hack for filtered time axis, for example if weekend is filtered out and you shiftPrev() day from monday\n let tries = 0;\n do {\n startDate = DH.add(startDate, amount, unit);\n endDate = DH.add(endDate, amount, unit);\n } while (tries++ < me.maxTraverseTries && me.setTimeSpan(startDate, endDate, {\n preventThrow : true\n }) === false);\n }\n /**\n * Moves the time axis forward in time in units specified by the view preset `shiftUnit`, and by the amount specified by the `shiftIncrement`\n * config of the current view preset.\n *\n * NOTE: When using a filtered TimeAxis the result of `shiftNext()` cannot be guaranteed, it might shift into a\n * filtered out span. It tries to be smart about it by shifting from unfiltered start and end dates.\n * If that solution does not work for your filtering setup, please call {@link #function-setTimeSpan} directly\n * instead.\n *\n * @param {Number} [amount] The number of units to jump forward\n */\n shiftNext(amount = this.shiftIncrement) {\n this.shift(amount);\n }\n /**\n * Moves the time axis backward in time in units specified by the view preset `shiftUnit`, and by the amount specified by the `shiftIncrement` config of the current view preset.\n *\n * NOTE: When using a filtered TimeAxis the result of `shiftPrev()` cannot be guaranteed, it might shift into a\n * filtered out span. It tries to be smart about it by shifting from unfiltered start and end dates.\n * If that solution does not work for your filtering setup, please call {@link #function-setTimeSpan} directly\n * instead.\n *\n * @param {Number} [amount] The number of units to jump backward\n */\n shiftPrevious(amount = this.shiftIncrement) {\n this.shift(-amount);\n }\n //endregion\n //region Filter & continuous\n /**\n * Filter the time axis by a function (and clears any existing filters first). The passed function will be called with each tick in time axis.\n * If the function returns `true`, the 'tick' is included otherwise it is filtered. If all ticks are filtered out\n * the time axis is considered invalid, triggering `invalidFilter` and then removing the filter.\n * @param {Function} fn The function to be called, it will receive an object with `startDate`/`endDate` properties, and `index` of the tick.\n * @param {Object} [thisObj] `this` reference for the function\n * @typings {Promise}\n */\n filterBy(fn, thisObj = this) {\n const me = this;\n me.filters.clear();\n super.filterBy((tick, index) => fn.call(thisObj, tick.data, index));\n }\n filter() {\n const me = this;\n // Cache this to use in post filter processing\n me.viewportCenterDate = me.owner?.viewportCenterDate;\n const retVal = super.filter(...arguments);\n if (!me.maintainFilter && me.count === 0) {\n me.resumeEvents();\n me.trigger('invalidFilter');\n me.disableFilters();\n }\n return retVal;\n }\n disableFilters() {\n this.filters.forEach(f => f.disabled = true);\n this.filter();\n }\n triggerFilterEvent(event) {\n const\n me = this,\n { owner } = me;\n if (!event.filters.count) {\n me.continuous = me.originalContinuous;\n }\n else {\n me.continuous = false;\n }\n // Filters has been applied (or cleared) but listeners are not informed yet, update tick cache to have start and\n // end dates correct when later redrawing events & header\n me.updateTickCache();\n // If we have filtered out ticks, the infinite scroll range will have to be recalculated\n if (owner?.infiniteScroll && !me.continuous) {\n owner.timeAxisViewModel.ion({\n update : () => {\n owner.shiftToDate(me.viewportCenterDate, {\n visibleDate : me.viewportCenterDate,\n block : 'center'\n });\n },\n once : true\n });\n }\n super.triggerFilterEvent(event);\n }\n /**\n * Returns `true` if the time axis is continuous (will return `false` when filtered)\n * @property {Boolean}\n */\n get isContinuous() {\n return this.continuous !== false && !this.isFiltered;\n }\n //endregion\n //region Dates\n getAdjustedDates(startDate, endDate, forceAdjust = false) {\n const me = this;\n // If providing a 0 span range, add default range\n if (endDate && startDate - endDate === 0) {\n endDate = null;\n }\n startDate = startDate || me.startDate;\n endDate = endDate || DH.add(startDate, me.defaultSpan, me.mainUnit);\n return me.autoAdjust || forceAdjust ? {\n startDate : me.floorDate(startDate, false, me.autoAdjust ? me.mainUnit : me.unit, 1),\n endDate : me.ceilDate(endDate, false, me.autoAdjust ? me.mainUnit : me.unit, 1)\n } : {\n startDate,\n endDate\n };\n }\n /**\n * Method to get the current start date of the time axis.\n * @property {Date}\n */\n get startDate() {\n return this._start || (this.first ? new Date(this.first.startDate) : null);\n }\n set startDate(start) {\n this._start = DH.parse(start);\n }\n /**\n * Method to get a the current end date of the time axis\n * @property {Date}\n */\n get endDate() {\n return this._end || (this.last ? new Date(this.last.endDate) : null);\n }\n set endDate(end) {\n if (end) this._end = DH.parse(end);\n }\n // used in performance critical code for comparisons\n get startMS() {\n return this._startMS;\n }\n // used in performance critical code for comparisons\n get endMS() {\n return this._endMS;\n }\n // Floors a date and optionally snaps it to one of the following resolutions:\n // 1. 'resolutionUnit'. If param 'resolutionUnit' is passed, the date will simply be floored to this unit.\n // 2. If resolutionUnit is not passed: If date should be snapped relative to the timeaxis start date,\n // the resolutionUnit of the timeAxis will be used, or the timeAxis 'mainUnit' will be used to snap the date\n //\n // returns a copy of the original date\n // private\n floorDate(date, relativeToStart, resolutionUnit, incr) {\n relativeToStart = relativeToStart !== false;\n const\n me = this,\n relativeTo = relativeToStart ? DH.clone(me.startDate) : null,\n increment = incr || me.resolutionIncrement,\n unit = resolutionUnit || (relativeToStart ? me.resolutionUnit : me.mainUnit),\n snap = (value, increment) => Math.floor(value / increment) * increment;\n if (relativeToStart) {\n return DH.floor(date, { unit, magnitude : increment }, relativeTo);\n }\n const dt = DH.clone(date);\n if (unit === 'week') {\n const\n day = dt.getDay() || 7,\n startDay = me.weekStartDay || 7;\n DH.add(DH.startOf(dt, 'day', false), day >= startDay ? startDay - day : -(7 - startDay + day), 'day', false);\n // Watch out for Brazil DST craziness (see test 028_timeaxis_dst.t.js)\n if (dt.getDay() !== startDay && dt.getHours() === 23) {\n DH.add(dt, 1, 'hour', false);\n }\n }\n else {\n // removes \"smaller\" units from date (for example minutes; removes seconds and milliseconds)\n DH.startOf(dt, unit, false);\n // day and year are 1-based so need to make additional adjustments\n const\n modifier = ['day', 'year'].includes(unit) ? 1 : 0,\n useUnit = unit === 'day' ? 'date' : unit,\n snappedValue = snap(DH.get(dt, useUnit) - modifier, increment) + modifier;\n DH.set(dt, useUnit, snappedValue);\n }\n return dt;\n }\n /**\n * Rounds the date to nearest unit increment\n * @private\n */\n roundDate(date, relativeTo, resolutionUnit = this.resolutionUnit, increment = this.resolutionIncrement || 1) {\n const\n me = this,\n dt = DH.clone(date);\n relativeTo = DH.clone(relativeTo || me.startDate);\n switch (resolutionUnit) {\n case 'week': {\n DH.startOf(dt, 'day', false);\n let distanceToWeekStartDay = dt.getDay() - me.weekStartDay,\n toAdd;\n if (distanceToWeekStartDay < 0) {\n distanceToWeekStartDay = 7 + distanceToWeekStartDay;\n }\n if (Math.round(distanceToWeekStartDay / 7) === 1) {\n toAdd = 7 - distanceToWeekStartDay;\n }\n else {\n toAdd = -distanceToWeekStartDay;\n }\n return DH.add(dt, toAdd, 'day', false);\n }\n case 'month': {\n const\n nbrMonths = DH.diff(relativeTo, dt, 'month') + DH.as('month', dt.getDay() / DH.daysInMonth(dt)), //*/DH.as('month', DH.diff(relativeTo, dt)) + (dt.getDay() / DH.daysInMonth(dt)),\n snappedMonths = Math.round(nbrMonths / increment) * increment;\n return DH.add(relativeTo, snappedMonths, 'month', false);\n }\n case 'quarter':\n DH.startOf(dt, 'month', false);\n return DH.add(dt, 3 - (dt.getMonth() % 3), 'month', false);\n default: {\n const\n duration = DH.as(resolutionUnit, DH.diff(relativeTo, dt)),\n // Need to find the difference of timezone offsets between relativeTo and original dates. 0 if timezone offsets are the same.\n offset = resolutionUnit === 'year' ? 0 : DH.as(resolutionUnit, relativeTo.getTimezoneOffset() - dt.getTimezoneOffset(), 'minute'),\n // Need to add the offset to the whole duration, so the divided value will take DST into account\n snappedDuration = Math.round((duration + offset) / increment) * increment;\n // Now when the round is done, we need to subtract the offset, so the result also will take DST into account\n return DH.add(relativeTo, snappedDuration - offset, resolutionUnit, false);\n }\n }\n }\n // private\n ceilDate(date, relativeToStart, resolutionUnit, increment) {\n const me = this;\n relativeToStart = relativeToStart !== false;\n increment = increment || (relativeToStart ? me.resolutionIncrement : 1);\n const\n unit = resolutionUnit || (relativeToStart ? me.resolutionUnit : me.mainUnit),\n dt = DH.clone(date);\n let doCall = false;\n switch (unit) {\n case 'minute':\n doCall = !DH.isStartOf(dt, 'minute');\n break;\n case 'hour':\n doCall = !DH.isStartOf(dt, 'hour');\n break;\n case 'day':\n case 'date':\n doCall = !DH.isStartOf(dt, 'day');\n break;\n case 'week':\n DH.startOf(dt, 'day', false);\n doCall = (dt.getDay() !== me.weekStartDay || !DH.isEqual(dt, date));\n break;\n case 'month':\n DH.startOf(dt, 'day', false);\n doCall = (dt.getDate() !== 1 || !DH.isEqual(dt, date));\n break;\n case 'quarter':\n DH.startOf(dt, 'day', false);\n doCall = (dt.getMonth() % 3 !== 0 || dt.getDate() !== 1 || !DH.isEqual(dt, date));\n break;\n case 'year':\n DH.startOf(dt, 'day', false);\n doCall = (dt.getMonth() !== 0 || dt.getDate() !== 1 || !DH.isEqual(dt, date));\n break;\n }\n if (doCall) {\n return DH.getNext(dt, unit, increment, me.weekStartDay);\n }\n return dt;\n }\n //endregion\n //region Ticks\n get include() {\n return this._include;\n }\n set include(include) {\n const me = this;\n me._include = include;\n me.continuous = !include;\n if (!me.isConfiguring) {\n me.startDate = me._configuredStartDate;\n me.endDate = me._configuredEndDate;\n me.internalOnReconfigure();\n me.trigger('includeChange');\n }\n }\n // Check if a certain date is included based on timeAxis.include rules\n processExclusion(startDate, endDate, unit) {\n const { include } = this;\n if (include) {\n return Object.entries(include).some(([includeUnit, rule]) => {\n if (!rule) {\n return false;\n }\n const { from, to } = rule;\n // Including the closest smaller unit with a { from, to} rule should affect start & end of the\n // generated tick. Currently only works for days or smaller.\n if (DH.compareUnits('day', unit) >= 0 && DH.getLargerUnit(includeUnit) === unit) {\n if (from) {\n DH.set(startDate, includeUnit, from);\n }\n if (to) {\n let stepUnit = unit;\n // Stepping back base on date, not day\n if (unit === 'day') {\n stepUnit = 'date';\n }\n // Since endDate is not inclusive it points to the next day etc.\n // Turns for example 2019-01-10T00:00 -> 2019-01-09T18:00\n DH.set(endDate, {\n [stepUnit] : DH.get(endDate, stepUnit) - 1,\n [includeUnit] : to\n });\n }\n }\n // \"Greater\" unit being included? Then we need to care about it\n // (for example excluding day will also affect hour, minute etc)\n if (DH.compareUnits(includeUnit, unit) >= 0) {\n const datePart = (includeUnit === 'day' ? startDate.getDay() : DH.get(startDate, includeUnit));\n if ((from && datePart < from) || (to && datePart >= to)) {\n return true;\n }\n }\n });\n }\n return false;\n }\n // Calculate constants used for exclusion when scaling within larger ticks\n initExclusion() {\n Object.entries(this.include).forEach(([unit, rule]) => {\n if (rule) {\n const { from, to } = rule;\n // For example for hour:\n // 1. Get the next bigger unit -> day, get ratio -> 24\n // 2. to 20 - from 8 = 12 hours visible each day. lengthFactor 24 / 12 = 2 means that each hour used\n // needs to represent 2 hours when drawn (to stretch)\n // | \u2588\u2588\u2588\u2588 | -> | \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 |\n rule.lengthFactor = DH.getUnitToBaseUnitRatio(unit, DH.getLargerUnit(unit)) / (to - from);\n rule.lengthFactorExcl = DH.getUnitToBaseUnitRatio(unit, DH.getLargerUnit(unit)) / (to - from - 1);\n // Calculate weighted center to stretch around | \u2588\u2588x\u2588 |\n rule.center = from + from / (rule.lengthFactor - 1);\n }\n });\n }\n /**\n * Method generating the ticks for this time axis. Should return an array of ticks . Each tick is an object of the following structure:\n * ```\n * {\n * startDate : ..., // start date\n * endDate : ... // end date\n * }\n * ```\n * Take notice, that this function either has to be called with `start`/`end` parameters, or create those variables.\n *\n * To see it in action please check out our [TimeAxis](https://bryntum.com/products/scheduler/examples/timeaxis/) example and navigate to \"Compressed non-working time\" tab.\n *\n * @member {Function} generateTicks\n * @param {Date} axisStartDate The start date of the interval\n * @param {Date} axisEndDate The end date of the interval\n * @param {DurationUnit} unit The unit of the time axis\n * @param {Number} increment The increment for the unit specified.\n * @returns {Array|undefined} ticks The ticks representing the time axis, or no return value to use the default tick generation\n */\n updateGenerateTicks() {\n if (!this.isConfiguring) {\n this.reconfigure(this);\n }\n }\n _generateTicks(axisStartDate, axisEndDate, unit = this.unit, increment = this.increment) {\n const\n me = this,\n ticks = [],\n usesExclusion = Boolean(me.include);\n let intervalEnd,\n tickEnd,\n isExcluded,\n dstDiff = 0,\n { startDate, endDate } = me.getAdjustedDates(axisStartDate, axisEndDate),\n tryRelyingOnExclusion = false;\n me.tickCache = {};\n if (usesExclusion) {\n me.initExclusion();\n }\n while (startDate < endDate) {\n intervalEnd = DH.getNext(startDate, unit, increment, me.weekStartDay);\n // If `autoAdjustTimeAxis` is set to `false`, `intervalEnd` is forced to be the same as `endDate`.\n // It could happen that, after processing exclusion, the `intervalEnd` of last thick is lower than its `startDate`.\n // In this case, it is useful to continue the loop, and skip the next forced assignment of `endDate` to `intervalEnd` and check if,\n // after processing exclusion, the resulting `intervalEnd` complies with `endDate`.\n if (!me.autoAdjust && intervalEnd > endDate && !tryRelyingOnExclusion) {\n intervalEnd = new Date(endDate.getTime());\n }\n // Handle hourly increments crossing DST boundaries to keep the timescale looking correct\n // Only do this for HOUR resolution currently, and only handle it once per tick generation.\n if (unit === 'hour' && increment > 1 && ticks.length > 0 && dstDiff === 0) {\n const prev = ticks[ticks.length - 1];\n dstDiff = ((prev.startDate.getHours() + increment) % 24) - prev.endDate.getHours();\n if (dstDiff !== 0) {\n // A DST boundary was crossed in previous tick, adjust this tick to keep timeaxis \"symmetric\".\n intervalEnd = DH.add(intervalEnd, dstDiff, 'hour');\n }\n }\n isExcluded = false;\n if (usesExclusion) {\n tickEnd = new Date(intervalEnd.getTime());\n isExcluded = me.processExclusion(startDate, intervalEnd, unit);\n if (tryRelyingOnExclusion) {\n if (!me.autoAdjust && intervalEnd > endDate) {\n startDate = tickEnd;\n continue;\n }\n }\n else if (intervalEnd < startDate) {\n tryRelyingOnExclusion = true;\n continue;\n }\n }\n else {\n tickEnd = intervalEnd;\n }\n if (!isExcluded) {\n ticks.push({\n id : (ticks.length + 1),\n startDate,\n endDate : intervalEnd\n });\n me.tickCache[startDate.getTime()] = ticks.length - 1;\n }\n startDate = tickEnd;\n }\n return ticks;\n }\n /**\n * How many ticks are visible across the TimeAxis.\n *\n * Usually, this is an integer because {@link #config-autoAdjust} means that the start and end\n * dates are adjusted to be on tick boundaries.\n * @property {Number}\n * @internal\n */\n get visibleTickTimeSpan() {\n const me = this;\n return me.isContinuous ? me.visibleTickEnd - me.visibleTickStart : me.count;\n }\n /**\n * Gets a tick \"coordinate\" representing the date position on the time scale. Returns -1 if the date is not part of the time axis.\n * @param {Date} date the date\n * @returns {Number} the tick position on the scale or -1 if the date is not part of the time axis\n */\n getTickFromDate(date) {\n const\n me = this,\n ticks = me.records,\n dateMS = date.getTime?.() ?? date;\n let begin = 0,\n end = ticks.length - 1,\n middle, tick, tickStart, tickEnd;\n // Quickly eliminate out of range dates or if we have not been set up with a time range yet\n if (!ticks.length || dateMS < ticks[0].startDateMS || dateMS > ticks[end].endDateMS) {\n return -1;\n }\n if (me.isContinuous) {\n // Chop tick cache in half until we find a match\n while (begin < end) {\n middle = (begin + end + 1) >> 1;\n if (dateMS > ticks[middle].endDateMS) {\n begin = middle + 1;\n }\n else if (dateMS < ticks[middle].startDateMS) {\n end = middle - 1;\n }\n else {\n begin = middle;\n }\n }\n tick = ticks[begin];\n tickStart = tick.startDateMS;\n // Part way though, calculate the fraction\n if (dateMS > tickStart) {\n tickEnd = tick.endDateMS;\n begin += (dateMS - tickStart) / (tickEnd - tickStart);\n }\n return Math.min(Math.max(begin, me.visibleTickStart), me.visibleTickEnd);\n }\n else {\n for (let i = 0; i <= end; i++) {\n tickEnd = ticks[i].endDateMS;\n if (dateMS <= tickEnd) {\n tickStart = ticks[i].startDateMS;\n // date < tickStart can occur in filtered case\n tick = i + (dateMS > tickStart ? (dateMS - tickStart) / (tickEnd - tickStart) : 0);\n return tick;\n }\n }\n }\n }\n getSnappedTickFromDate(date) {\n const\n startTickIdx = Math.floor(this.getTickFromDate(date));\n return this.getAt(startTickIdx);\n }\n /**\n * Gets the time represented by a tick \"coordinate\".\n * @param {Number} tick the tick \"coordinate\"\n * @param {'floor'|'round'|'ceil'} [roundingMethod] Rounding method to use. 'floor' to take the tick (lowest header\n * in a time axis) start date, 'round' to round the value to nearest increment or 'ceil' to take the tick end date\n * @returns {Date} The date to represented by the tick \"coordinate\", or null if invalid.\n */\n getDateFromTick(tick, roundingMethod) {\n const me = this;\n if (tick === me.visibleTickEnd) {\n return me.endDate;\n }\n const\n wholeTick = Math.floor(tick),\n fraction = tick - wholeTick,\n t = me.getAt(wholeTick);\n if (!t) {\n return null;\n }\n const\n // if we've filtered timeaxis using filterBy, then we cannot trust to adjustedStart property and should use tick start\n start = wholeTick === 0 && me.isContinuous ? me.adjustedStart : t.startDate,\n // if we've filtered timeaxis using filterBy, then we cannot trust to adjustedEnd property and should use tick end\n end = (wholeTick === me.count - 1) && me.isContinuous ? me.adjustedEnd : t.endDate;\n let date = DH.add(start, fraction * (end - start), 'millisecond');\n if (roundingMethod) {\n date = me[roundingMethod + 'Date'](date);\n }\n return date;\n }\n /**\n * Returns the ticks of the timeaxis in an array of objects with a \"startDate\" and \"endDate\".\n * @property {Scheduler.model.TimeSpan[]}\n */\n get ticks() {\n return this.records;\n }\n /**\n * Caches ticks and start/end dates for faster processing during rendering of events.\n * @private\n */\n updateTickCache(onlyStartEnd = false) {\n const me = this;\n if (me.count) {\n me._start = me.first.startDate;\n me._end = me.last.endDate;\n me._startMS = me.startDate.getTime();\n me._endMS = me.endDate.getTime();\n }\n else {\n me._start = me._end = me._startMs = me._endMS = null;\n }\n // onlyStartEnd is true prior to clearing filters, to get start and end dates correctly during that process.\n // No point in filling tickCache yet in that case, it will be done after the filters are cleared\n if (!onlyStartEnd) {\n me.tickCache = {};\n me.forEach((tick, i) => me.tickCache[tick.startDate.getTime()] = i);\n }\n }\n //endregion\n //region Axis\n /**\n * Returns true if the passed date is inside the span of the current time axis.\n * @param {Date} date The date to query for\n * @returns {Boolean} true if the date is part of the time axis\n */\n dateInAxis(date, inclusiveEnd = false) {\n const\n me = this,\n axisStart = me.startDate,\n axisEnd = me.endDate;\n // Date is between axis start/end and axis is not continuous - need to perform better lookup\n if (me.isContinuous) {\n return inclusiveEnd ? DH.betweenLesserEqual(date, axisStart, axisEnd) : DH.betweenLesser(date, axisStart, axisEnd);\n }\n else {\n const length = me.getCount();\n let tickStart, tickEnd, tick;\n for (let i = 0; i < length; i++) {\n tick = me.getAt(i);\n tickStart = tick.startDate;\n tickEnd = tick.endDate;\n if ((inclusiveEnd && date <= tickEnd) || (!inclusiveEnd && date < tickEnd)) {\n return date >= tickStart;\n }\n }\n }\n return false;\n }\n /**\n * Returns true if the passed timespan is part of the current time axis (in whole or partially).\n * @param {Date} start The start date\n * @param {Date} end The end date\n * @returns {Boolean} true if the timespan is part of the timeaxis\n */\n timeSpanInAxis(start, end) {\n const me = this;\n if (!end || end.getTime() === start.getTime()) {\n return this.dateInAxis(start, true);\n }\n if (me.isContinuous) {\n return DH.intersectSpans(start, end, me.startDate, me.endDate);\n }\n return (start < me.startDate && end > me.endDate) || me.getTickFromDate(start) !== me.getTickFromDate(end);\n }\n // Accepts a TimeSpan model (uses its cached MS values to be a bit faster during rendering)\n isTimeSpanInAxis(timeSpan) {\n const\n me = this,\n { startMS, endMS } = me,\n { startDateMS } = timeSpan,\n endDateMS = timeSpan.endDateMS ?? timeSpan.meta.endDateCached;\n // only consider fully scheduled ranges\n if (!startDateMS || !endDateMS) {\n return false;\n }\n if (endDateMS === startDateMS) {\n return me.dateInAxis(timeSpan.startDate, true);\n }\n if (me.isContinuous) {\n return endDateMS > startMS && startDateMS < endMS;\n }\n const\n startTick = me.getTickFromDate(startDateMS),\n endTick = me.getTickFromDate(endDateMS);\n // endDate is not inclusive\n if (\n (startTick === me.count && DH.isEqual(timeSpan.startDate, me.last.endDate)) ||\n (endTick === 0 && DH.isEqual(timeSpan.endDate, me.first.startDate))\n ) {\n return false;\n }\n return (\n // Spanning entire axis\n (startDateMS < startMS && endDateMS > endMS) ||\n // Unintentionally 0 wide (ticks excluded or outside)\n startTick !== endTick\n );\n }\n //endregion\n //region Iteration\n /**\n * Calls the supplied iterator function once per interval. The function will be called with four parameters, startDate endDate, index, isLastIteration.\n * @internal\n * @param {DurationUnit} unit The unit to use when iterating over the timespan\n * @param {Number} increment The increment to use when iterating over the timespan\n * @param {Function} iteratorFn The function to call\n * @param {Object} [thisObj] `this` reference for the function\n */\n forEachAuxInterval(unit, increment = 1, iteratorFn, thisObj = this) {\n const end = this.endDate;\n let dt = this.startDate,\n i = 0,\n intervalEnd;\n if (dt > end) throw new Error('Invalid time axis configuration');\n while (dt < end) {\n intervalEnd = DH.min(DH.getNext(dt, unit, increment, this.weekStartDay), end);\n iteratorFn.call(thisObj, dt, intervalEnd, i, intervalEnd >= end);\n dt = intervalEnd;\n i++;\n }\n }\n //endregion\n}\nTimeAxis._$name = 'TimeAxis';", "import DH from '../../../Core/helper/DateHelper.js';\nimport Events from '../../../Core/mixin/Events.js';\nimport PresetManager from '../../preset/PresetManager.js';\nimport ViewPreset from '../../preset/ViewPreset.js';\nimport '../../data/TimeAxis.js';\n/**\n * @module Scheduler/view/model/TimeAxisViewModel\n */\n/**\n * This class is an internal view model class, describing the visual representation of a {@link Scheduler.data.TimeAxis}.\n * The config for the header rows is described in the {@link Scheduler.preset.ViewPreset#field-headers headers}.\n * To calculate the size of each cell in the time axis, this class requires:\n *\n * - availableSpace - The total width or height available for the rendering\n * - tickSize - The fixed width or height of each cell in the lowest header row. This value is normally read from the\n * {@link Scheduler.preset.ViewPreset viewPreset} but this can also be updated programmatically using the {@link #property-tickSize} setter\n *\n * Normally you should not interact with this class directly.\n *\n * @extends Core/mixin/Events\n */\nexport default class TimeAxisViewModel extends Events() {\n //region Default config\n static get defaultConfig() {\n return {\n /**\n * The time axis providing the underlying data to be visualized\n * @config {Scheduler.data.TimeAxis}\n * @internal\n */\n timeAxis : null,\n /**\n * The available width/height, this is normally not known by the consuming UI component using this model\n * class until it has been fully rendered. The consumer of this model should set\n * {@link #property-availableSpace} when its width has changed.\n * @config {Number}\n * @internal\n */\n availableSpace : null,\n /**\n * The \"tick width\" for horizontal mode or \"tick height\" for vertical mode, to use for the cells in the\n * bottom most header row.\n * This value is normally read from the {@link Scheduler.preset.ViewPreset viewPreset}\n * @config {Number}\n * @default\n * @internal\n */\n tickSize : 100,\n /**\n * true if there is a requirement to be able to snap events to a certain view resolution.\n * This has implications of the {@link #config-tickSize} that can be used, since all widths must be in even pixels.\n * @config {Boolean}\n * @default\n * @internal\n */\n snap : false,\n /**\n * true if cells in the bottom-most row should be fitted to the {@link #property-availableSpace available space}.\n * @config {Boolean}\n * @default\n * @internal\n */\n forceFit : false,\n headers : null,\n mode : 'horizontal', // or 'vertical'\n //used for Exporting. Make sure the tick columns are not recalculated when resizing.\n suppressFit : false,\n // cache of the config currently used.\n columnConfig : [],\n // the view preset name to apply initially\n viewPreset : null,\n // The default header level to draw column lines for\n columnLinesFor : null,\n originalTickSize : null,\n headersDatesCache : []\n };\n }\n //endregion\n //region Init & destroy\n construct(config) {\n const me = this;\n // getSingleUnitInPixels results are memoized because of frequent calls during rendering.\n me.unitToPixelsCache = {};\n super.construct(config);\n const viewPreset = me.timeAxis.viewPreset || me.viewPreset;\n if (viewPreset) {\n if (viewPreset instanceof ViewPreset) {\n me.consumeViewPreset(viewPreset);\n }\n else {\n const preset = PresetManager.getPreset(viewPreset);\n preset && me.consumeViewPreset(preset);\n }\n }\n // When time axis is changed, reconfigure the model\n me.timeAxis.ion({ reconfigure : 'onTimeAxisReconfigure', thisObj : me });\n me.configured = true;\n }\n doDestroy() {\n this.timeAxis.un?.('reconfigure', this.onTimeAxisReconfigure, this);\n super.doDestroy();\n }\n /**\n * Returns an array representing the headers of the current timeAxis. Each element is an array representing the cells for that level in the header.\n * @returns {Object[]} An array of headers, each element being an array representing each cell (with start date and end date) in the timeline representation.\n * @internal\n */\n get columnConfig() {\n return this._columnConfig;\n }\n set columnConfig(config) {\n this._columnConfig = config;\n }\n get headers() {\n return this._headers;\n }\n set headers(headers) {\n if (headers && headers.length && headers[headers.length - 1].cellGenerator) {\n throw new Error('`cellGenerator` cannot be used for the bottom level of your headers. Use TimeAxis#generateTicks() instead.');\n }\n this._headers = headers;\n }\n get isTimeAxisViewModel() {\n return true;\n }\n //endregion\n //region Events\n /**\n * Fires after the model has been updated.\n * @event update\n * @param {Scheduler.view.model.TimeAxisViewModel} source The model instance\n */\n /**\n * Fires after the model has been reconfigured.\n * @event reconfigure\n * @param {Scheduler.view.model.TimeAxisViewModel} source The model instance\n */\n //endregion\n //region Mode\n /**\n * Using horizontal mode?\n * @returns {Boolean}\n * @readonly\n * @internal\n */\n get isHorizontal() {\n return this.mode !== 'vertical';\n }\n /**\n * Using vertical mode?\n * @returns {Boolean}\n * @readonly\n * @internal\n */\n get isVertical() {\n return this.mode === 'vertical';\n }\n /**\n * Gets/sets the forceFit value for the model. Setting it will cause it to update its contents and fire the\n * {@link #event-update} event.\n * @property {Boolean}\n * @internal\n */\n set forceFit(value) {\n if (value !== this._forceFit) {\n this._forceFit = value;\n this.update();\n }\n }\n //endregion\n //region Reconfigure & update\n reconfigure(config) {\n // clear the cached headers\n this.headers = null;\n // Ensure correct ordering\n this.setConfig(config);\n this.trigger('reconfigure');\n }\n onTimeAxisReconfigure({ source : timeAxis, suppressRefresh }) {\n if (this.viewPreset !== timeAxis.viewPreset) {\n this.consumeViewPreset(timeAxis.viewPreset);\n }\n if (!suppressRefresh && timeAxis.count > 0) {\n this.update();\n }\n }\n /**\n * Updates the view model current timeAxis configuration and available space.\n * @param {Number} [availableSpace] The available space for the rendering of the axis (used in forceFit mode)\n * @param {Boolean} [silent] Pass `true` to suppress the firing of the `update` event.\n * @param {Boolean} [forceUpdate] Pass `true` to fire the `update` event even if the size has not changed.\n * @internal\n */\n update(availableSpace, silent = false, forceUpdate = false) {\n const\n me = this,\n { timeAxis, headers } = me,\n spaceAvailable = availableSpace !== 0;\n // We're in configuration, or no change, quit\n if (me.isConfiguring || (spaceAvailable && me._availableSpace === availableSpace)) {\n if (forceUpdate) {\n me.trigger('update');\n }\n return;\n }\n me._availableSpace = Math.max(availableSpace || me.availableSpace || 0, 0);\n if (typeof me.availableSpace !== 'number') {\n throw new Error('Invalid available space provided to TimeAxisModel');\n }\n me.columnConfig = [];\n // The \"column width\" is considered to be the width of each tick in the lowest header row and this width\n // has to be same for all cells in the lowest row.\n const tickSize = me._tickSize = me.calculateTickSize(me.originalTickSize);\n if (typeof tickSize !== 'number' || tickSize <= 0) {\n throw new Error('Invalid timeAxis tick size');\n }\n // getSingleUnitInPixels results are memoized because of frequent calls during rendering.\n me.unitToPixelsCache = {};\n // totalSize is cached because of frequent calls which calculate it.\n me._totalSize = null;\n // Generate the underlying date ranges for each header row, which will provide input to the cell rendering\n for (let pos = 0, { length } = headers; pos < length; pos++) {\n const header = headers[pos];\n if (header.cellGenerator) {\n const headerCells = header.cellGenerator.call(me, timeAxis.startDate, timeAxis.endDate);\n me.columnConfig[pos] = me.createHeaderRow(pos, header, headerCells);\n }\n else {\n me.columnConfig[pos] = me.createHeaderRow(pos, header);\n }\n }\n if (!silent) {\n me.trigger('update');\n }\n }\n //endregion\n //region Date / position mapping\n /**\n * Returns the distance in pixels for a timespan with the given start and end date.\n * @param {Date} start start date\n * @param {Date} end end date\n * @returns {Number} The length of the time span\n * @category Date mapping\n */\n getDistanceBetweenDates(start, end) {\n return this.getPositionFromDate(end) - this.getPositionFromDate(start);\n }\n /**\n * Returns the distance in pixels for a time span\n * @param {Number} durationMS Time span duration in ms\n * @returns {Number} The length of the time span\n * @category Date mapping\n */\n getDistanceForDuration(durationMs) {\n return this.getSingleUnitInPixels('millisecond') * durationMs;\n }\n /**\n * Gets the position of a date on the projected time axis or -1 if the date is not in the timeAxis.\n * @param {Date} date the date to query for.\n * @returns {Number} the coordinate representing the date\n * @category Date mapping\n */\n getPositionFromDate(date, options = {}) {\n const tick = this.getScaledTick(date, options);\n if (tick === -1) {\n return -1;\n }\n return this.tickSize * (tick - this.timeAxis.visibleTickStart);\n }\n // Translates a tick along the time axis to facilitate scaling events when excluding certain days or hours\n getScaledTick(date, { respectExclusion, snapToNextIncluded, isEnd, min, max }) {\n const\n { timeAxis } = this,\n { include, unit } = timeAxis;\n let tick = timeAxis.getTickFromDate(date);\n if (tick !== -1 && respectExclusion && include) {\n let tickChanged = false;\n // Stretch if we are using a larger unit than 'hour', except if it is 'day'. If so, it is already handled\n // by a cheaper reconfiguration of the ticks in `generateTicks`\n if (include.hour && DH.compareUnits(unit, 'hour') > 0 && unit !== 'day') {\n const\n { from, to, lengthFactor, center } = include.hour,\n // Original hours\n originalHours = date.getHours(),\n // Crop to included hours\n croppedHours = Math.min(Math.max(originalHours, from), to);\n // If we are not asked to snap (when other part of span is not included) any cropped away hour\n // should be considered excluded\n if (!snapToNextIncluded && croppedHours !== originalHours) {\n return -1;\n }\n const\n // Should scale hour and smaller units (seconds will hardly affect visible result...)\n fractionalHours = croppedHours + date.getMinutes() / 60,\n // Number of hours from the center |xxxx|123c----|xxx|\n hoursFromCenter = center - fractionalHours,\n // Step from center to stretch event |x|112233c----|xxx|\n newHours = center - hoursFromCenter * lengthFactor;\n // Adding instead of setting to get a clone of the date, to not affect the original\n date = DH.add(date, newHours - originalHours, 'h');\n tickChanged = true;\n }\n if (include.day && DH.compareUnits(unit, 'day') > 0) {\n const { from, to, lengthFactor, center } = include.day;\n //region Crop\n let checkDay = date.getDay();\n // End date is exclusive, check the day before if at 00:00\n if (isEnd && date.getHours() === 0 && date.getMinutes() === 0 && date.getSeconds() === 0 && date.getMilliseconds() === 0) {\n if (--checkDay < 0) {\n checkDay = 6;\n }\n }\n let addDays = 0;\n if (checkDay < from || checkDay >= to) {\n // If end date is in view but start date is excluded, snap to next included day\n if (snapToNextIncluded) {\n // Step back to \"to-1\" (not inclusive) for end date\n if (isEnd) {\n addDays = (to - checkDay - 8) % 7;\n }\n // Step forward to \"from\" for start date\n else {\n addDays = (from - checkDay + 7) % 7;\n }\n date = DH.add(date, addDays, 'd');\n date = DH.startOf(date, 'd', false);\n // Keep end after start and vice versa\n if (\n (max && date.getTime() >= max) ||\n (min && date.getTime() <= min)\n ) {\n return -1;\n }\n }\n else {\n // day excluded at not snapping to next\n return -1;\n }\n }\n //endregion\n const\n { weekStartDay } = timeAxis,\n // Center to stretch around, for some reason pre-calculated cannot be used for sundays :)\n fixedCenter = date.getDay() === 0 ? 0 : center,\n // Should scale day and smaller units (minutes will hardly affect visible result...)\n fractionalDay = date.getDay() + date.getHours() / 24, //+ dateClone.getMinutes() / (24 * 1440),\n // Number of days from the calculated center\n daysFromCenter = fixedCenter - fractionalDay,\n // Step from center to stretch event\n newDay = fixedCenter - daysFromCenter * lengthFactor;\n // Adding instead of setting to get a clone of the date, to not affect the original\n date = DH.add(date, newDay - fractionalDay + weekStartDay, 'd');\n tickChanged = true;\n }\n // Now the date might start somewhere else (fraction of ticks)\n if (tickChanged) {\n // When stretching date might end up outside of time axis, making it invalid to use. Clip it to time axis\n // to circumvent this\n date = DH.constrain(date, timeAxis.startDate, timeAxis.endDate);\n // Get a new tick based on the \"scaled\" date\n tick = timeAxis.getTickFromDate(date);\n }\n }\n return tick;\n }\n /**\n * Gets the date for a position on the time axis\n * @param {Number} position The page X or Y coordinate\n * @param {'floor'|'round'|'ceil'} [roundingMethod] Rounding method to use. 'floor' to take the tick (lowest header\n * in a time axis) start date, 'round' to round the value to nearest increment or 'ceil' to take the tick end date\n * @param {Boolean} [allowOutOfRange=false] By default, this returns `null` if the position is outside\n * of the time axis. Pass `true` to attempt to calculate a date outside of the time axis.\n * @returns {Date} the Date corresponding to the xy coordinate\n * @category Date mapping\n */\n getDateFromPosition(position, roundingMethod, allowOutOfRange = false) {\n const\n me = this,\n { timeAxis } = me,\n tick = me.getScaledPosition(position) / me.tickSize + timeAxis.visibleTickStart;\n if (tick < 0 || tick > timeAxis.count) {\n if (allowOutOfRange) {\n let result;\n // Subtract the correct number of tick units from the start date\n if (tick < 0) {\n result = DH.add(timeAxis.startDate, tick, timeAxis.unit);\n }\n else {\n // Add the correct number of tick units to the end date\n result = DH.add(timeAxis.endDate, tick - timeAxis.count, timeAxis.unit);\n }\n // Honour the rounding requested\n if (roundingMethod) {\n result = timeAxis[roundingMethod + 'Date'](result);\n }\n return result;\n }\n return null;\n }\n return timeAxis.getDateFromTick(tick, roundingMethod);\n }\n // Translates a position along the time axis to facilitate scaling events when excluding certain days or hours\n getScaledPosition(position) {\n const { include, unit, weekStartDay } = this.timeAxis;\n // Calculations are\n if (include) {\n const dayWidth = this.getSingleUnitInPixels('day');\n // Have to calculate day before hour to get end result correct\n if (include.day && DH.compareUnits(unit, 'day') > 0) {\n const { from, lengthFactor } = include.day,\n // Scaling happens within a week, determine position within it\n positionInWeek = position % (dayWidth * 7),\n // Store were the week starts to be able to re-add it after scale\n weekStartPosition = position - positionInWeek;\n // Scale position using calculated length per day factor, adding the width of excluded days\n position = positionInWeek / lengthFactor + (from - weekStartDay) * dayWidth + weekStartPosition;\n }\n // Hours are not taken into account when viewing days, since the day ticks are reconfigured in\n // `generateTicks` instead\n if (include.hour && DH.compareUnits(unit, 'hour') > 0 && unit !== 'day') {\n const { from, lengthFactorExcl } = include.hour,\n hourWidth = this.getSingleUnitInPixels('hour'),\n // Scaling happens within a day, determine position within it\n positionInDay = position % dayWidth,\n // Store were the day starts to be able to re-add it after scale\n dayStartPosition = position - positionInDay;\n // Scale position using calculated length per day factor, adding the width of excluded hours\n position = positionInDay / lengthFactorExcl + from * hourWidth + dayStartPosition;\n }\n }\n return position;\n }\n /**\n * Returns the amount of pixels for a single unit\n * @internal\n * @returns {Number} The unit in pixel\n */\n getSingleUnitInPixels(unit) {\n const me = this;\n return me.unitToPixelsCache[unit] || (me.unitToPixelsCache[unit] = DH.getUnitToBaseUnitRatio(me.timeAxis.unit, unit, true) * me.tickSize / me.timeAxis.increment);\n }\n /**\n * Returns the pixel increment for the current view resolution.\n * @internal\n * @returns {Number} The increment\n */\n get snapPixelAmount() {\n if (this.snap) {\n const { resolution } = this.timeAxis;\n return (resolution.increment || 1) * this.getSingleUnitInPixels(resolution.unit);\n }\n return 1;\n }\n //endregion\n //region Sizes\n /**\n * Get/set the current time column size (the width or height of a cell in the bottom-most time axis header row,\n * depending on mode)\n * @internal\n * @property {Number}\n */\n get tickSize() {\n return this._tickSize;\n }\n set tickSize(size) {\n this.setTickSize(size, false);\n }\n setTickSize(size, suppressEvent) {\n this._tickSize = this.originalTickSize = size;\n this.update(undefined, suppressEvent);\n }\n get timeResolution() {\n return this.timeAxis.resolution;\n }\n // Calculates the time column width/height based on the value defined viewPreset \"tickWidth/tickHeight\". It also\n // checks for the forceFit view option and the snap, both of which impose constraints on the time column width\n // configuration.\n calculateTickSize(proposedSize) {\n const\n me = this,\n { forceFit, timeAxis, suppressFit } = me,\n timelineUnit = timeAxis.unit;\n let size = 0,\n ratio = 1; //Number.MAX_VALUE;\n if (me.snap) {\n const resolution = timeAxis.resolution;\n ratio = DH.getUnitToBaseUnitRatio(timelineUnit, resolution.unit) * resolution.increment;\n }\n if (!suppressFit) {\n const fittingSize = me.availableSpace / timeAxis.visibleTickTimeSpan;\n size = (forceFit || proposedSize < fittingSize) ? fittingSize : proposedSize;\n if (ratio > 0 && (!forceFit || ratio < 1)) {\n size = Math.max(1, ratio * size) / ratio;\n }\n }\n else {\n size = proposedSize;\n }\n return size;\n }\n /**\n * Returns the total width/height of the time axis representation, depending on mode.\n * @returns {Number} The width or height\n * @internal\n * @readonly\n */\n get totalSize() {\n // Floor the space to prevent spurious overflow\n return this._totalSize || (this._totalSize = Math.floor(this.tickSize * this.timeAxis.visibleTickTimeSpan));\n }\n /**\n * Get/set the available space for the time axis representation. If size changes it will cause it to update its\n * contents and fire the {@link #event-update} event.\n * @internal\n * @property {Number}\n */\n get availableSpace() {\n return this._availableSpace;\n }\n set availableSpace(space) {\n const me = this;\n // We should only need to repaint fully if the tick width has changed (which will happen if forceFit is set, or if the full size of the time axis doesn't\n // occupy the available space - and gets stretched\n me._availableSpace = Math.max(0, space);\n if (me._availableSpace > 0) {\n const newTickSize = me.calculateTickSize(me.originalTickSize);\n if (newTickSize > 0 && newTickSize !== me.tickSize) {\n me.update();\n }\n }\n }\n //endregion\n //region Fitting & snapping\n /**\n * Returns start dates for ticks at the specified level in format { date, isMajor }.\n * @param {Number} level Level in headers array, `0` meaning the topmost...\n * @param {Boolean} useLowestHeader Use lowest level\n * @param getEnd\n * @returns {Array}\n * @internal\n */\n getDates(level = this.columnLinesFor, useLowestHeader = false, getEnd = false) {\n const\n me = this,\n ticks = [],\n linesForLevel = useLowestHeader ? me.lowestHeader : level,\n majorLevel = me.majorHeaderLevel,\n levelUnit = me.headers && me.headers[level].unit,\n majorUnit = majorLevel != null && me.headers && me.headers[majorLevel].unit,\n validMajor = majorLevel != null && DH.doesUnitsAlign(majorUnit, levelUnit),\n hasGenerator = !!(me.headers && me.headers[linesForLevel].cellGenerator);\n if (hasGenerator) {\n const cells = me.columnConfig[linesForLevel];\n for (let i = 1, l = cells.length; i < l; i++) {\n ticks.push({ date : cells[i].startDate });\n }\n }\n else {\n me.forEachInterval(linesForLevel, (start, end) => {\n ticks.push({\n date : getEnd ? end : start,\n // do not want to consider tick to be major tick, hence the check for majorHeaderLevel\n isMajor : majorLevel !== level && validMajor && me.isMajorTick(getEnd ? end : start)\n });\n });\n }\n return ticks;\n }\n get forceFit() {\n return this._forceFit;\n }\n /**\n * This function fits the time columns into the available space in the time axis column.\n * @param {Boolean} suppressEvent `true` to skip firing the 'update' event.\n * @internal\n */\n fitToAvailableSpace(suppressEvent) {\n const proposedSize = Math.floor(this.availableSpace / this.timeAxis.visibleTickTimeSpan);\n this.setTickSize(proposedSize, suppressEvent);\n }\n get snap() {\n return this._snap;\n }\n /**\n * Gets/sets the snap value for the model. Setting it will cause it to update its contents and fire the\n * {@link #event-update} event.\n * @property {Boolean}\n * @internal\n */\n set snap(value) {\n if (value !== this._snap) {\n this._snap = value;\n if (this.configured) {\n this.update();\n }\n }\n }\n //endregion\n //region Headers\n // private\n createHeaderRow(position, headerRowConfig, headerCells) {\n const\n me = this,\n cells = [],\n { align, headerCellCls = '' } = headerRowConfig,\n today = DH.clearTime(new Date()),\n { timeAxis } = me,\n tickLevel = me.headers.length - 1,\n createCellContext = (start, end, i, isLast, data) => {\n let value = DH.format(start, headerRowConfig.dateFormat);\n const\n // So that we can use shortcut tickSize as the tickLevel cell width.\n // We can do this if the TimeAxis is aligned to start and end on tick boundaries\n // or if it's not the first or last tick.\n // getDistanceBetweenDates is an expensive operation.\n isInteriorTick = i > 0 && !isLast,\n cellData = {\n align,\n start,\n end,\n value : data ? data.header : value,\n headerCellCls,\n width : tickLevel === position && me.owner && (timeAxis.fullTicks || isInteriorTick) ? me.owner.tickSize : me.getDistanceBetweenDates(start, end),\n index : i\n };\n if (cellData.width === 0) {\n return;\n }\n // Vertical mode uses absolute positioning for header cells\n cellData.coord = size - 1;\n size += cellData.width;\n me.headersDatesCache[position][start.getTime()] = 1;\n if (headerRowConfig.renderer) {\n value = headerRowConfig.renderer.call(headerRowConfig.thisObj || me, start, end, cellData, i);\n cellData.value = value == null ? '' : value;\n }\n // To be able to style individual day cells, weekends or other important days\n if (headerRowConfig.unit === 'day' && (!headerRowConfig.increment || headerRowConfig.increment === 1)) {\n cellData.headerCellCls += ' b-sch-dayheadercell-' + start.getDay();\n if (DH.clearTime(start, true) - today === 0) {\n cellData.headerCellCls += ' b-sch-dayheadercell-today';\n }\n }\n cells.push(cellData);\n };\n let size = 0;\n me.headersDatesCache[position] = {};\n if (headerCells) {\n headerCells.forEach((cellData, i) => createCellContext(cellData.start, cellData.end, i, i === headerCells.length - 1, cellData));\n }\n else {\n me.forEachInterval(position, createCellContext);\n }\n return cells;\n }\n get mainHeader() {\n return ('mainHeaderLevel' in this) ? this.headers[this.mainHeaderLevel] : this.bottomHeader;\n }\n get bottomHeader() {\n return this.headers[this.headers.length - 1];\n }\n get lowestHeader() {\n return this.headers.length - 1;\n }\n /**\n * This method is meant to return the level of the header which 2nd lowest.\n * It is used for {@link #function-isMajorTick} method\n * @returns {String}\n * @private\n */\n get majorHeaderLevel() {\n const { headers } = this;\n if (headers) {\n return Math.max(headers.length - 2, 0);\n }\n return null;\n }\n //endregion\n //region Ticks\n /**\n * For vertical view (and column lines plugin) we sometimes want to know if current tick starts along with the\n * upper header level.\n * @param {Date} date\n * @returns {Boolean}\n * @private\n */\n isMajorTick(date) {\n const nextLevel = this.majorHeaderLevel;\n // if forceFit is used headersDatesCache won\u00B4t have been generated yet on the first call here,\n // since no size is set yet\n return nextLevel != null && this.headersDatesCache[nextLevel] && this.headersDatesCache[nextLevel][date.getTime()] || false;\n }\n /**\n * Calls the supplied iterator function once per interval. The function will be called with three parameters, start date and end date and an index.\n * Return false to break the iteration.\n * @param {Number} position The index of the header in the headers array.\n * @param {Function} iteratorFn The function to call, will be called with start date, end date and \"tick index\"\n * @param {Object} [thisObj] `this` reference for the function\n * @internal\n */\n forEachInterval(position, iteratorFn, thisObj = this) {\n const { headers, timeAxis } = this;\n if (headers) {\n // This is the lowest header row, which should be fed the data in the tickStore (or a row above using same unit)\n if (position === headers.length - 1) {\n timeAxis.forEach((r, index) =>\n iteratorFn.call(thisObj, r.startDate, r.endDate, index, index === timeAxis.count - 1)\n );\n }\n // All other rows\n else {\n const header = headers[position];\n timeAxis.forEachAuxInterval(header.unit, header.increment, iteratorFn, thisObj);\n }\n }\n }\n /**\n * Calls the supplied iterator function once per interval. The function will be called with three parameters, start date and end date and an index.\n * Return false to break the iteration.\n * @internal\n * @param {Function} iteratorFn The function to call\n * @param {Object} [thisObj] `this` reference for the function\n */\n forEachMainInterval(iteratorFn, thisObj) {\n this.forEachInterval(this.mainHeaderLevel, iteratorFn, thisObj);\n }\n //endregion\n //region ViewPreset\n consumeViewPreset(preset) {\n const me = this;\n // clear the cached headers\n me.headers = null;\n me.getConfig('tickSize');\n // Since we are bypassing the tickSize setter below, ensure that\n // the config initial setter has been removed by referencing the property.\n // We only do this to avoid multiple updates from this.\n me.viewPreset = preset;\n Object.assign(me, {\n headers : preset.headers,\n columnLinesFor : preset.columnLinesFor,\n mainHeaderLevel : preset.mainHeaderLevel,\n _tickSize : me.isHorizontal ? preset.tickWidth : preset.tickHeight\n });\n me.originalTickSize = me.tickSize;\n }\n //endregion\n}\nTimeAxisViewModel._$name = 'TimeAxisViewModel';", "import Base from '../../../Core/Base.js';\nimport DateHelper from '../../../Core/helper/DateHelper.js';\n// Used to avoid having to create huge amounts of Date objects\nconst tempDate = new Date();\n/**\n * @module Scheduler/view/mixin/TimelineDateMapper\n */\n/**\n * Mixin that contains functionality to convert between coordinates and dates etc.\n *\n * @mixin\n */\nexport default Target => class TimelineDateMapper extends (Target || Base) {\n static $name = 'TimelineDateMapper';\n static configurable = {\n /**\n * Set to `true` to snap to the current time resolution increment while interacting with scheduled events.\n *\n * The time resolution increment is either determined by the currently applied view preset, or it can be\n * overridden using {@link #property-timeResolution}.\n *\n *
When the {@link Scheduler/view/mixin/TimelineEventRendering#config-fillTicks} option is\n * enabled, snapping will align to full ticks, regardless of the time resolution.
\n *\n * @prp {Boolean}\n * @default\n * @category Scheduled events\n */\n snap : false\n };\n //region Coordinate <-> Date\n getRtlX(x) {\n if (this.rtl && this.isHorizontal) {\n x = this.timeAxisViewModel.totalSize - x;\n }\n return x;\n }\n /**\n * Gets the date for an X or Y coordinate, either local to the view element or the page based on the 3rd argument.\n * If the coordinate is not in the currently rendered view, null will be returned unless the `allowOutOfRange`\n * parameter is passed a `true`.\n * @param {Number} coordinate The X or Y coordinate\n * @param {'floor'|'round'|'ceil'} [roundingMethod] Rounding method to use. 'floor' to take the tick (lowest header\n * in a time axis) start date, 'round' to round the value to nearest increment or 'ceil' to take the tick end date\n * @param {Boolean} [local] true if the coordinate is local to the scheduler view element\n * @param {Boolean} [allowOutOfRange] By default, this returns `null` if the position is outside\n * of the time axis. Pass `true` to attempt to calculate a date outside of the time axis.\n * @returns {Date} The Date corresponding to the X or Y coordinate\n * @category Dates\n */\n getDateFromCoordinate(coordinate, roundingMethod, local = true, allowOutOfRange = false, ignoreRTL = false) {\n if (!local) {\n coordinate = this.currentOrientation.translateToScheduleCoordinate(coordinate);\n }\n // Time axis is flipped for RTL\n if (!ignoreRTL) {\n coordinate = this.getRtlX(coordinate);\n }\n return this.timeAxisViewModel.getDateFromPosition(coordinate, roundingMethod, allowOutOfRange);\n }\n getDateFromCoord(options) {\n return this.getDateFromCoordinate(options.coord, options.roundingMethod, options.local, options.allowOutOfRange, options.ignoreRTL);\n }\n /**\n * Gets the date for an XY coordinate regardless of the orientation of the time axis.\n * @param {Array} xy The page X and Y coordinates\n * @param {'floor'|'round'|'ceil'} [roundingMethod] Rounding method to use. 'floor' to take the tick (lowest header\n * in a time axis) start date, 'round' to round the value to nearest increment or 'ceil' to take the tick end date\n * @param {Boolean} [local] true if the coordinate is local to the scheduler element\n * @param {Boolean} [allowOutOfRange] By default, this returns `null` if the position is outside\n * of the time axis. Pass `true` to attempt to calculate a date outside of the time axis.\n * @returns {Date} the Date corresponding to the xy coordinate\n * @category Dates\n */\n getDateFromXY(xy, roundingMethod, local = true, allowOutOfRange = false) {\n return this.currentOrientation.getDateFromXY(xy, roundingMethod, local, allowOutOfRange);\n }\n /**\n * Gets the time for a DOM event such as 'mousemove' or 'click' regardless of the orientation of the time axis.\n * @param {Event} e the Event instance\n * @param {'floor'|'round'|'ceil'} [roundingMethod] Rounding method to use. 'floor' to take the tick (lowest header\n * in a time axis) start date, 'round' to round the value to nearest increment or 'ceil' to take the tick end date\n * @param {Boolean} [allowOutOfRange] By default, this returns `null` if the position is outside\n * of the time axis. Pass `true` to attempt to calculate a date outside of the time axis.\n * @returns {Date} The date corresponding to the EventObject's position along the orientation of the time axis.\n * @category Dates\n */\n getDateFromDomEvent(e, roundingMethod, allowOutOfRange = false) {\n return this.getDateFromXY([e.pageX, e.pageY], roundingMethod, false, allowOutOfRange);\n }\n /**\n * Gets the start and end dates for an element Region\n * @param {Core.helper.util.Rectangle} rect The rectangle to map to start and end dates\n * @param {'floor'|'round'|'ceil'} roundingMethod Rounding method to use. 'floor' to take the tick (lowest header\n * in a time axis) start date, 'round' to round the value to nearest increment or 'ceil' to take the tick end date\n * @param {Number} duration The duration in MS of the underlying event\n * @returns {Object} an object containing start/end properties\n */\n getStartEndDatesFromRectangle(rect, roundingMethod, duration, allowOutOfRange = false) {\n const\n me = this,\n { isHorizontal } = me,\n startPos = isHorizontal ? rect.x : rect.top,\n endPos = isHorizontal ? rect.right : rect.bottom;\n let start, end;\n // Element within bounds\n if (startPos >= 0 && endPos < me.timeAxisViewModel.totalSize) {\n start = me.getDateFromCoordinate(startPos, roundingMethod, true);\n end = me.getDateFromCoordinate(endPos, roundingMethod, true);\n }\n // Starts before, start is worked backwards from end\n else if (startPos < 0) {\n end = me.getDateFromCoordinate(endPos, roundingMethod, true, allowOutOfRange);\n start = end && DateHelper.add(end, -duration, 'ms');\n }\n // Ends after, end is calculated from the start\n else {\n start = me.getDateFromCoordinate(startPos, roundingMethod, true, allowOutOfRange);\n end = start && DateHelper.add(start, duration, 'ms');\n }\n return {\n start, end\n };\n }\n //endregion\n //region Date display\n /**\n * Method to get a displayed end date value, see {@link #function-getFormattedEndDate} for more info.\n * @private\n * @param {Date} endDate The date to format\n * @param {Date} startDate The start date\n * @returns {Date} The date value to display\n */\n getDisplayEndDate(endDate, startDate) {\n if (\n // If time is midnight,\n endDate.getHours() === 0 && endDate.getMinutes() === 0 &&\n // and end date is greater then start date\n (!startDate || !(endDate.getYear() === startDate.getYear() && endDate.getMonth() === startDate.getMonth() && endDate.getDate() === startDate.getDate())) &&\n // and UI display format doesn't contain hour info (in this case we'll just display the exact date)\n !DateHelper.formatContainsHourInfo(this.displayDateFormat)\n ) {\n // format the date inclusively as 'the whole previous day'.\n endDate = DateHelper.add(endDate, -1, 'day');\n }\n return endDate;\n }\n /**\n * Method to get a formatted end date for a scheduled event, the grid uses the \"displayDateFormat\" property defined in the current view preset.\n * End dates are formatted as 'inclusive', meaning when an end date falls on midnight and the date format doesn't involve any hour/minute information,\n * 1ms will be subtracted (e.g. 2010-01-08T00:00:00 will first be modified to 2010-01-07 before being formatted).\n * @private\n * @param {Date} endDate The date to format\n * @param {Date} startDate The start date\n * @returns {String} The formatted date\n */\n getFormattedEndDate(endDate, startDate) {\n return this.getFormattedDate(this.getDisplayEndDate(endDate, startDate));\n }\n //endregion\n //region Other date functions\n /**\n * Gets the x or y coordinate relative to the scheduler element, or page coordinate (based on the 'local' flag)\n * If the coordinate is not in the currently rendered view, -1 will be returned.\n * @param {Date|Number} date the date to query for (or a date as ms)\n * @param {Boolean|Object} options true to return a coordinate local to the scheduler view element (defaults to true),\n * also accepts a config object like { local : true }.\n * @returns {Number} the x or y position representing the date on the time axis\n * @category Dates\n */\n getCoordinateFromDate(date, options = true) {\n const\n me = this,\n { timeAxisViewModel } = me,\n {\n isContinuous,\n startMS,\n endMS,\n startDate,\n endDate,\n unit\n } = me.timeAxis,\n dateMS = date.valueOf();\n // Avoiding to break the API while allowing passing options through to getPositionFromDate()\n if (options === true) {\n options = {\n local : true\n };\n }\n else if (!options) {\n options = {\n local : false\n };\n }\n else if (!('local' in options)) {\n options.local = true;\n }\n let pos;\n if (!(date instanceof Date)) {\n tempDate.setTime(date);\n date = tempDate;\n }\n // Shortcut for continuous time axis that is using a unit that can be reliably translated to days (or smaller)\n if (isContinuous &&\n date.getTimezoneOffset() === startDate.getTimezoneOffset() &&\n startDate.getTimezoneOffset() === endDate.getTimezoneOffset() &&\n DateHelper.getUnitToBaseUnitRatio(unit, 'day') !== -1\n ) {\n if (dateMS < startMS || dateMS > endMS) {\n return -1;\n }\n pos = (dateMS - startMS) / (endMS - startMS) * timeAxisViewModel.totalSize;\n }\n // Non-continuous or using for example months (vary in length)\n else {\n pos = timeAxisViewModel.getPositionFromDate(date, options);\n }\n // RTL coords from the end of the time axis\n if (me.rtl && me.isHorizontal && !options?.ignoreRTL) {\n pos = timeAxisViewModel.totalSize - pos;\n }\n if (!options.local) {\n pos = me.currentOrientation.translateToPageCoordinate(pos);\n }\n return pos;\n }\n /**\n * Returns the distance in pixels for the time span in the view.\n * @param {Date} startDate The start date of the span\n * @param {Date} endDate The end date of the span\n * @returns {Number} The distance in pixels\n * @category Dates\n */\n getTimeSpanDistance(startDate, endDate) {\n return this.timeAxisViewModel.getDistanceBetweenDates(startDate, endDate);\n }\n /**\n * Returns the center date of the currently visible timespan of scheduler.\n *\n * @property {Date}\n * @readonly\n * @category Dates\n */\n get viewportCenterDate() {\n if (this.isVisible) {\n const { timeAxis, timelineScroller } = this;\n // Take the easy way if the axis is continuous.\n // We can just work out how far along the time axis the viewport center is.\n if (timeAxis.isContinuous) {\n // The offset from the start of the whole time axis\n const timeAxisOffset = (timelineScroller.position + timelineScroller.clientSize / 2) / timelineScroller.scrollSize;\n return new Date(timeAxis.startMS + (timeAxis.endMS - timeAxis.startMS) * timeAxisOffset);\n }\n return this.getDateFromCoordinate(timelineScroller.position + timelineScroller.clientSize / 2);\n }\n }\n get viewportCenterDateCached() {\n return this.cachedCenterDate || (this.cachedCenterDate = this.viewportCenterDate);\n }\n //endregion\n //region TimeAxis getters/setters\n /**\n * Gets/sets the current time resolution object, which contains a unit identifier and an increment count\n * `{ unit, increment }`. This value means minimal task duration you can create using UI.\n *\n * For example when you drag create a task or drag & drop a task, if increment is 5 and unit is 'minute'\n * that means that you can create tasks in 5 minute increments, or move it in 5 minute steps.\n *\n * This value is taken from viewPreset {@link Scheduler.preset.ViewPreset#field-timeResolution timeResolution}\n * config by default. When supplying a `Number` to the setter only the `increment` is changed and the `unit` value\n * remains untouched.\n *\n * ```javascript\n * timeResolution : {\n * unit : 'minute', //Valid values are \"millisecond\", \"second\", \"minute\", \"hour\", \"day\", \"week\", \"month\", \"quarter\", \"year\".\n * increment : 5\n * }\n * ```\n *\n *
When the {@link Scheduler/view/mixin/TimelineEventRendering#config-fillTicks} option is\n * enabled, the resolution will be in full ticks regardless of configured value.
\n *\n * @property {Object|Number}\n * @category Dates\n */\n get timeResolution() {\n return this.timeAxis.resolution;\n }\n set timeResolution(resolution) {\n this.timeAxis.resolution = (typeof resolution === 'number') ? {\n increment : resolution,\n unit : this.timeAxis.resolution.unit\n } : resolution;\n }\n //endregion\n //region Snap\n get snap() {\n return this._timeAxisViewModel?.snap ?? this._snap;\n }\n updateSnap(snap) {\n if (!this.isConfiguring) {\n this.timeAxisViewModel.snap = snap;\n this.timeAxis.forceFullTicks = snap && this.fillTicks;\n }\n }\n //endregion\n onSchedulerHorizontalScroll(subGrid, scrollLeft, scrollX, scrollingToCenter) {\n // Invalidate cached center date unless we are scrolling to center on it.\n if (!scrollingToCenter) {\n this.cachedCenterDate = null;\n }\n }\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "import Base from '../../../Core/Base.js';\nimport BrowserHelper from '../../../Core/helper/BrowserHelper.js';\nimport DomHelper from '../../../Core/helper/DomHelper.js';\nimport StringHelper from '../../../Core/helper/StringHelper.js';\nimport EventHelper from '../../../Core/helper/EventHelper.js';\nimport DomDataStore from '../../../Core/data/DomDataStore.js';\nimport GlobalEvents from '../../../Core/GlobalEvents.js';\n/**\n * @module Scheduler/view/mixin/TimelineDomEvents\n */\nconst { eventNameMap } = EventHelper;\n/**\n * An object which encapsulates a schedule timeline tick context based on a DOM event. This will include\n * the row and resource information and the tick and time information for a DOM pointer event detected\n * in the timeline.\n * @typedef {Object} TimelineContext\n * @property {Event} domEvent The DOM event which triggered the context change.\n * @property {HTMLElement} eventElement If the `domEvent` was on an event bar, this will be the event bar element.\n * @property {HTMLElement} cellElement The cell element under the `domEvent`\n * @property {Date} date The date corresponding to the `domEvent` position in the timeline\n * @property {Scheduler.model.TimeSpan} tick A {@link Scheduler.model.TimeSpan} record which encapsulates the contextual tick\n * @property {Number} tickIndex The contextual tick index. This may be fractional.\n * @property {Number} tickParentIndex The integer contextual tick index.\n * @property {Date} tickStartDate The start date of the contextual tick.\n * @property {Date} tickEndDate The end date of the contextual tick.\n * @property {Grid.row.Row} row The contextual {@link Grid.row.Row}\n * @property {Number} index The contextual row index\n * @property {Scheduler.model.EventModel} [eventRecord] The contextual event record (if any) if the event source is a `Scheduler`\n * @property {Scheduler.model.AssignmentModel} [assignmentRecord] The contextual assignment record (if any) if the event source is a `Scheduler`\n * @property {Scheduler.model.ResourceModel} [resourceRecord] The contextual resource record(if any) if the event source is a `Scheduler`\n */\n/**\n * Mixin that handles dom events (click etc) for scheduler and rendered events.\n *\n * @mixin\n */\nexport default Target => class TimelineDomEvents extends (Target || Base) {\n /**\n * Fires after a click on a time axis cell\n * @event timeAxisHeaderClick\n * @param {Scheduler.column.TimeAxisColumn|Scheduler.column.VerticalTimeAxisColumn} source The column object\n * @param {Date} startDate The start date of the header cell\n * @param {Date} endDate The end date of the header cell\n * @param {Event} event The event object\n */\n /**\n * Fires after a double click on a time axis cell\n * @event timeAxisHeaderDblClick\n * @param {Scheduler.column.TimeAxisColumn|Scheduler.column.VerticalTimeAxisColumn} source The column object\n * @param {Date} startDate The start date of the header cell\n * @param {Date} endDate The end date of the header cell\n * @param {Event} event The event object\n */\n /**\n * Fires after a right click on a time axis cell\n * @event timeAxisHeaderContextMenu\n * @param {Scheduler.column.TimeAxisColumn|Scheduler.column.VerticalTimeAxisColumn} source The column object\n * @param {Date} startDate The start date of the header cell\n * @param {Date} endDate The end date of the header cell\n * @param {Event} event The event object\n */\n static $name = 'TimelineDomEvents';\n //region Default config\n static configurable = {\n /**\n * The currently hovered timeline context. This is updated as the mouse or pointer moves over the timeline.\n * @member {TimelineContext} timelineContext\n * @readonly\n * @category Dates\n */\n timelineContext : {\n $config : {\n // Reject non-changes so that when set from scheduleMouseMove and EventMouseMove,\n // we only update the context and fire events when it changes.\n equal(c1, c2) {\n // index is the resource index, tickParentIndex is the\n // tick's index in the TimeAxis.\n return c1?.index === c2?.index &&\n c1?.tickParentIndex === c2?.tickParentIndex &&\n !((c1?.tickStartDate || 0) - (c2?.tickStartDate || 0));\n }\n }\n },\n updateTimelineContextOnScroll : false,\n /**\n * Set to `true` to ignore reacting to DOM events (mouseover/mouseout etc) while scrolling. Useful if you\n * want to maximize scroll performance.\n * @config {Boolean}\n * @default false\n */\n ignoreDomEventsWhileScrolling : null\n };\n static properties = {\n schedulerEvents : {\n pointermove : 'handleScheduleEvent',\n mouseover : 'handleScheduleEvent',\n mousedown : 'handleScheduleEvent',\n mouseup : 'handleScheduleEvent',\n click : 'handleScheduleEvent',\n dblclick : 'handleScheduleEvent',\n contextmenu : 'handleScheduleEvent',\n mousemove : 'handleScheduleEvent',\n mouseout : 'handleScheduleEvent'\n }\n };\n static delayable = {\n // Allow the scroll event to complete in its thread, and dispatch the mousemove event next AF\n onScheduleScroll : 'raf'\n };\n // Currently hovered events (can be parent + child)\n hoveredEvents = new Set();\n //endregion\n //region Init\n /**\n * Adds listeners for DOM events for the scheduler and its events.\n * Which events is specified in Scheduler#schedulerEvents.\n * @private\n */\n initDomEvents() {\n const\n me = this,\n { schedulerEvents } = me;\n // Set thisObj and element of the configured listener specs.\n schedulerEvents.element = me.timeAxisSubGridElement;\n schedulerEvents.thisObj = me;\n EventHelper.on(schedulerEvents);\n EventHelper.on({\n element : me.timeAxisSubGridElement,\n mouseleave : 'handleScheduleLeaveEvent',\n capture : true,\n thisObj : me\n });\n // This is to handle scroll events while the mouse is over the schedule.\n // For example magic mouse or touchpad scrolls, or scrolls caused by keyboard\n // navigation while the mouse happens to be over the schedule.\n // The context must update. We must consider any scroll because the document\n // or some other wrapping element could be scrolling the Scheduler under the mouse.\n if (me.updateTimelineContextOnScroll && BrowserHelper.supportsPointerEventConstructor) {\n EventHelper.on({\n element : document,\n scroll : 'onScheduleScroll',\n capture : true,\n thisObj : me\n });\n }\n };\n //endregion\n //region Event handling\n getTimeSpanMouseEventParams(eventElement, event) {\n throw new Error('Implement in subclass');\n }\n getScheduleMouseEventParams(cellData, event) {\n throw new Error('Implement in subclass');\n }\n /**\n * Wraps dom Events for the scheduler and event bars and fires as our events.\n * For example click -> scheduleClick or eventClick\n * @private\n * @param event\n */\n handleScheduleEvent(event) {\n const me = this;\n if (me.ignoreDomEventsWhileScrolling && (me.scrolling || me.timeAxisSubGrid.scrolling)) {\n return;\n }\n const timelineContext = me.getTimelineEventContext(event);\n // Cache the last pointer event so that when scrolling below the mouse\n // we can inject mousemove events at that point.\n me.lastPointerEvent = event;\n // We are over the schedule region\n if (timelineContext) {\n // Only fire a scheduleXXXX event if we are *not* over an event.\n // If over an event fire (event|task)XXXX.\n me.trigger(`${timelineContext.eventElement ? me.scheduledEventName : 'schedule'}${eventNameMap[event.type] || StringHelper.capitalize(event.type)}`, timelineContext);\n }\n // If the context has changed, updateTimelineContext will fire events\n me.timelineContext = timelineContext;\n }\n handleScheduleLeaveEvent(event) {\n if (event.target === this.timeAxisSubGridElement) {\n this.handleScheduleEvent(event);\n }\n }\n /**\n * This handles the scheduler being scrolled below the mouse by trackpad or keyboard events.\n * The context, if present needs to be recalculated.\n * @private\n */\n onScheduleScroll({ target }) {\n const me = this;\n // If the latest mouse event resulted in setting a context, we need to reproduce that event at the same clientX,\n // clientY in order to keep the context up to date while scrolling.\n // If the scroll is because of a pan feature drag (on us or a partner), we must not do this.\n // Target might be removed in salesforce by Locker Service if scroll event occurs on body\n if (\n target && me.updateTimelineContextOnScroll && !me.features.pan?.isActive &&\n !me.partners.some(p => p.features.pan?.isActive) &&\n (target.contains(me.element) || me.bodyElement.contains(target))\n ) {\n const { timelineContext, lastPointerEvent } = me;\n if (timelineContext) {\n const\n targetElement = DomHelper.elementFromPoint(timelineContext.domEvent.clientX, timelineContext.domEvent.clientY),\n pointerEvent = new BrowserHelper.PointerEventConstructor('pointermove', lastPointerEvent),\n mouseEvent = new MouseEvent('mousemove', lastPointerEvent);\n // See https://github.com/bryntum/support/issues/6274\n // The pointerId does not propagate correctly on the synthetic PointerEvent, but also is readonly, so\n // redefine the property. This is required by Ext JS gesture publisher which tracks pointer movements\n // while a pointer is down. Without the correct pointerId, Ext JS would see this move as a \"missed\"\n // pointerdown and forever await its pointerup (i.e., it would get stuck in the activeTouches). This\n // would cause all future events to be perceived as part of or the end of a drag and would never again\n // dispatch pointer events correctly. Finally, lastPointerEvent.pointerId is often incorrect (undefined\n // in fact), so check the most recent pointerdown/touchstart event and default to 1\n Object.defineProperty(pointerEvent, 'pointerId', {\n value : GlobalEvents.currentPointerDown?.pointerId ?? GlobalEvents.currentTouch?.identifier ?? 1\n });\n // Drag code should ignore these synthetic events\n pointerEvent.scrollInitiated = mouseEvent.scrollInitiated = true;\n // Emulate the correct browser sequence for mouse move events\n targetElement?.dispatchEvent(pointerEvent);\n targetElement?.dispatchEvent(mouseEvent);\n }\n }\n }\n updateTimelineContext(context, oldContext) {\n /**\n * Fired when the pointer-activated {@link #property-timelineContext} has changed.\n * @event timelineContextChange\n * @param {TimelineContext} oldContext The tick/resource context being deactivated.\n * @param {TimelineContext} context The tick/resource context being activated.\n */\n this.trigger('timelineContextChange', { oldContext, context });\n if (context && !oldContext) {\n this.trigger('scheduleMouseEnter', context);\n }\n else if (!context) {\n this.trigger('scheduleMouseLeave', { event : oldContext.event });\n }\n }\n /**\n * Gathers contextual information about the schedule contextual position of the passed event.\n *\n * Used by schedule mouse event handlers, but also by the scheduleContext feature.\n * @param {Event} domEvent The DOM event to gather context for.\n * @returns {TimelineContext} the schedule DOM event context\n * @internal\n */\n getTimelineEventContext(domEvent) {\n const\n me = this,\n eventElement = domEvent.target.closest(me.eventInnerSelector),\n cellElement = me.getCellElementFromDomEvent(domEvent);\n if (cellElement) {\n const date = me.getDateFromDomEvent(domEvent, 'floor');\n if (!date) {\n return;\n }\n const\n cellData = DomDataStore.get(cellElement),\n mouseParams = eventElement ? me.getTimeSpanMouseEventParams(eventElement, domEvent) : me.getScheduleMouseEventParams(cellData, domEvent);\n if (!mouseParams) {\n return;\n }\n const\n index = me.isVertical ? me.resourceStore.indexOf(mouseParams.resourceRecord) : cellData.row.dataIndex,\n tickIndex = me.timeAxis.getTickFromDate(date),\n tick = me.timeAxis.getAt(Math.floor(tickIndex));\n if (tick) {\n return {\n isTimelineContext : true,\n domEvent,\n eventElement,\n cellElement,\n index,\n tick,\n tickIndex,\n date,\n tickStartDate : tick.startDate,\n tickEndDate : tick.endDate,\n tickParentIndex : tick.parentIndex,\n row : cellData.row,\n event : domEvent,\n ...mouseParams\n };\n }\n }\n }\n getCellElementFromDomEvent({ target, clientY, type }) {\n const\n me = this,\n {\n isVertical,\n foregroundCanvas\n } = me,\n eventElement = target.closest(me.eventSelector);\n // If event was on an event bar, calculate the cell.\n if (eventElement) {\n const record = !isVertical && (me.resolveRowRecord(eventElement) || me.store.getAt(me.rowManager.getRowAt(clientY, false).dataIndex));\n return me.getCell({\n [isVertical ? 'row' : 'record'] : isVertical ? 0 : record,\n column : me.timeAxisColumn\n });\n }\n // If event was triggered by an element in the foreground canvas, but not an event element\n // we need to ascertain the cell \"behind\" that element to be able to create the context.\n else if (foregroundCanvas.contains(target)) {\n // Only trigger a Scheduler event if the event was on the background itself.\n // Otherwise, we will trigger unexpected events on things like dependency lines which historically\n // have never triggered scheduleXXXX events. The exception to this is the mousemove event which\n // needs to always fire so that timelineContext and scheduleTooltip correctly track the mouse\n if (target === foregroundCanvas || type === 'mousemove') {\n return me.rowManager.getRowAt(clientY, false)?.getCell(me.timeAxisColumn.id);\n }\n }\n else {\n // Event was inside a row, or on a row border.\n return target.matches('.b-grid-row') ? target.firstElementChild : target.closest(me.timeCellSelector);\n }\n }\n // Overridden by ResourceTimeRanges to \"pass events through\" to the schedule\n matchScheduleCell(element) {\n return element.closest(this.timeCellSelector);\n }\n onElementMouseButtonEvent(event) {\n const targetCell = event.target.closest('.b-sch-header-timeaxis-cell');\n if (targetCell) {\n const\n me = this,\n position = targetCell.parentElement.dataset.headerPosition,\n headerCells = me.timeAxisViewModel.columnConfig[position],\n index = me.timeAxis.isFiltered ? headerCells.findIndex(cell => cell.index == targetCell.dataset.tickIndex) : targetCell.dataset.tickIndex,\n cellConfig = headerCells[index],\n contextMenu = me.features.contextMenu;\n // Skip same events with Grid context menu triggerEvent\n if (!contextMenu || event.type !== contextMenu.triggerEvent) {\n this.trigger(`timeAxisHeader${StringHelper.capitalize(event.type)}`, {\n startDate : cellConfig.start,\n endDate : cellConfig.end,\n event\n });\n }\n }\n }\n onElementMouseDown(event) {\n this.onElementMouseButtonEvent(event);\n super.onElementMouseDown(event);\n }\n onElementClick(event) {\n this.onElementMouseButtonEvent(event);\n super.onElementClick(event);\n }\n onElementDblClick(event) {\n this.onElementMouseButtonEvent(event);\n super.onElementDblClick(event);\n }\n onElementContextMenu(event) {\n this.onElementMouseButtonEvent(event);\n super.onElementContextMenu(event);\n }\n /**\n * Relays mouseover events as eventmouseenter if over rendered event.\n * Also adds Scheduler#overScheduledEventClass to the hovered element.\n * @private\n */\n onElementMouseOver(event) {\n const\n me = this;\n if (me.ignoreDomEventsWhileScrolling && (me.scrolling || me.timeAxisSubGrid.scrolling)) {\n return;\n }\n super.onElementMouseOver(event);\n const\n { target } = event,\n { hoveredEvents } = me;\n // We must be over the event or dependency terminal hover area\n if ((target.closest(me.eventInnerSelector) || target.matches('.b-sch-terminal-hover-area')) && !me.features.eventDrag?.isDragging) {\n const eventElement = target.closest(me.eventSelector);\n if (!hoveredEvents.has(eventElement) && !me.preventOverCls) {\n hoveredEvents.add(eventElement);\n eventElement.classList.add(me.overScheduledEventClass);\n const params = me.getTimeSpanMouseEventParams(eventElement, event);\n if (params) {\n // do not fire this event if model cannot be found\n // this can be the case for \"b-sch-dragcreator-proxy\" elements for example\n me.trigger(`${me.scheduledEventName}MouseEnter`, params);\n }\n }\n }\n else if (hoveredEvents.size) {\n me.unhoverAll(event);\n }\n }\n /**\n * Relays mouseout events as eventmouseleave if out from rendered event.\n * Also removes Scheduler#overScheduledEventClass from the hovered element.\n * @private\n */\n onElementMouseOut(event) {\n const\n me = this,\n { features } = me,\n { target, relatedTarget } = event;\n // If it's not a mouseout into an event (or anything inside one of the schedule's\n // extra drawing canvases), continue up to the Grid base.\n // A mouseout cell->(event|dep-line|timeRange) should *not* trigger a mouseout of the cell\n // or row even though the event element is in fact outside. To a user, the event is in the cell.\n if (!relatedTarget?.closest('.b-sch-canvas *')) {\n super.onElementMouseOut(event);\n }\n const\n eventWrap = target.closest(me.eventSelector),\n eventInner = eventWrap?.querySelector(me.eventInnerSelector),\n timeSpanRecord = eventWrap && me.resolveTimeSpanRecord(eventWrap);\n // We must be over the event bar\n if (eventInner && timeSpanRecord && me.hoveredEvents.has(eventWrap) && !features.eventDrag?.isDragging) {\n // out to child or terminal hover area shouldn't count...\n if (relatedTarget && (DomHelper.isDescendant(eventInner, relatedTarget) || relatedTarget.matches('.b-sch-terminal-hover-area'))) {\n return;\n }\n }\n if (eventWrap) {\n me.unhover(eventWrap, event);\n }\n }\n unhover(element, event) {\n const me = this;\n element.classList.remove(me.overScheduledEventClass);\n me.trigger(`${me.scheduledEventName}MouseLeave`, me.getTimeSpanMouseEventParams(element, event));\n me.hoveredEvents.delete(element);\n }\n unhoverAll(event) {\n for (const element of this.hoveredEvents) {\n !element.isReleased && !element.classList.contains('b-released') && this.unhover(element, event);\n }\n // Might not be empty because of conditional unhover above\n this.hoveredEvents.clear();\n }\n //endregion\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "import Base from '../../../Core/Base.js';\nimport PresetManager from '../../preset/PresetManager.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\nimport PresetStore from '../../preset/PresetStore.js';\nimport DateHelper, { unitMagnitudes } from '../../../Core/helper/DateHelper.js';\n/**\n * @module Scheduler/view/mixin/TimelineViewPresets\n */\n/**\n * View preset handling.\n *\n * A Scheduler's {@link #config-presets} are loaded with a default set of {@link Scheduler.preset.ViewPreset ViewPresets}\n * which are defined by the system in the {@link Scheduler.preset.PresetManager PresetManager}.\n *\n * The zooming feature works by reconfiguring the Scheduler with a new {@link Scheduler.preset.ViewPreset ViewPreset} selected\n * from the {@link #config-presets} store.\n *\n * {@link Scheduler.preset.ViewPreset ViewPresets} can be added and removed from the store to change the amount of available steps.\n * Range of zooming in/out can be also modified with {@link Scheduler.view.mixin.TimelineZoomable#config-maxZoomLevel} / {@link Scheduler.view.mixin.TimelineZoomable#config-minZoomLevel} properties.\n *\n * This mixin adds additional methods to the column : {@link Scheduler.view.mixin.TimelineZoomable#property-maxZoomLevel}, {@link Scheduler.view.mixin.TimelineZoomable#property-minZoomLevel}, {@link Scheduler.view.mixin.TimelineZoomable#function-zoomToLevel}, {@link Scheduler.view.mixin.TimelineZoomable#function-zoomIn},\n * {@link Scheduler.view.mixin.TimelineZoomable#function-zoomOut}, {@link Scheduler.view.mixin.TimelineZoomable#function-zoomInFull}, {@link Scheduler.view.mixin.TimelineZoomable#function-zoomOutFull}.\n *\n * **Notice**: Zooming is not supported when `forceFit` option is set to true for the Scheduler or for filtered timeaxis.\n *\n * @mixin\n */\nexport default Target => class TimelineViewPresets extends (Target || Base) {\n static get $name() {\n return 'TimelineViewPresets';\n }\n //region Default config\n static get configurable() {\n return {\n /**\n * A string key used to lookup a predefined {@link Scheduler.preset.ViewPreset} (e.g. 'weekAndDay', 'hourAndDay'),\n * managed by {@link Scheduler.preset.PresetManager}. See {@link Scheduler.preset.PresetManager} for more information.\n * Or a config object for a viewPreset.\n *\n * Options:\n * - 'secondAndMinute'\n * - 'minuteAndHour'\n * - 'hourAndDay'\n * - 'dayAndWeek'\n * - 'dayAndMonth'\n * - 'weekAndDay'\n * - 'weekAndMonth',\n * - 'monthAndYear'\n * - 'year'\n * - 'manyYears'\n * - 'weekAndDayLetter'\n * - 'weekDateAndMonth'\n * - 'day'\n * - 'week'\n *\n * If passed as a config object, the settings from the viewPreset with the provided `base` property will be used along\n * with any overridden values in your object.\n *\n * To override:\n * ```javascript\n * viewPreset : {\n * base : 'hourAndDay',\n * id : 'myHourAndDayPreset',\n * headers : [\n * {\n * unit : \"hour\",\n * increment : 12,\n * renderer : (startDate, endDate, headerConfig, cellIdx) => {\n * return \"\";\n * }\n * }\n * ]\n * }\n * ```\n * or set a new valid preset config if the preset is not registered in the {@link Scheduler.preset.PresetManager}.\n *\n * When you use scheduler in weekview mode, this config is used to pick view preset. If passed view preset is not\n * supported by weekview (only 2 supported by default - 'day' and 'week') default preset will be used - 'week'.\n * @config {String|ViewPresetConfig}\n * @default\n * @category Common\n */\n viewPreset : 'weekAndDayLetter',\n /**\n * Get the {@link Scheduler.preset.PresetStore} created for the Scheduler,\n * or set an array of {@link Scheduler.preset.ViewPreset} config objects.\n * @member {Scheduler.preset.PresetStore|ViewPresetConfig[]} presets\n * @category Common\n */\n /**\n * An array of {@link Scheduler.preset.ViewPreset} config objects\n * which describes the available timeline layouts for this scheduler.\n *\n * By default, a predefined set is loaded from the {@link Scheduler.preset.PresetManager}.\n *\n * A {@link Scheduler.preset.ViewPreset} describes the granularity of the\n * timeline view and the layout and subdivisions of the timeline header.\n * @config {ViewPresetConfig[]} presets\n *\n * @category Common\n */\n presets : true,\n /**\n * Defines how dates will be formatted in tooltips etc. This config has priority over similar config on the\n * view preset. For allowed values see {@link Core.helper.DateHelper#function-format-static}.\n *\n * By default, this is ingested from {@link Scheduler.preset.ViewPreset} upon change of\n * {@link Scheduler.preset.ViewPreset} (Such as when zooming in or out). But Setting this\n * to your own value, overrides that behaviour.\n * @prp {String}\n * @category Scheduled events\n */\n displayDateFormat : null\n };\n }\n //endregion\n /**\n * Get/set the current view preset\n * @member {Scheduler.preset.ViewPreset|ViewPresetConfig|String} viewPreset\n * @param [viewPreset.options]\n * @param {Date} [viewPreset.options.startDate] A new start date for the time axis\n * @param {Date} [viewPreset.options.endDate] A new end date for the time axis\n * @param {Date} [viewPreset.options.centerDate] Where to center the new time axis\n * @param {Number} [viewPreset.options.scrollPosition] The scroll position to scroll\n * the new time axis to. This takes precedence over any date-scrolling.\n * It is used when partnering two timelines which must be scroll-synced.\n * @category Common\n */\n //region Get/set\n changePresets(presets) {\n const config = {\n owner : this\n };\n let data = [];\n // By default includes all presets\n if (presets === true) {\n data = PresetManager.allRecords;\n }\n // Accepts an array of presets\n else if (Array.isArray(presets)) {\n for (const preset of presets) {\n // If we got a presetId\n if (typeof preset === 'string') {\n const presetRecord = PresetManager.getById(preset);\n if (presetRecord) {\n data.push(presetRecord);\n }\n }\n else {\n data.push(preset);\n }\n }\n }\n // Or a store config object\n else {\n ObjectHelper.assign(config, presets);\n }\n // Creates store first and then adds data, because data config does not support a mix of raw objects and records.\n const presetStore = new PresetStore(config);\n presetStore.add(data);\n return presetStore;\n }\n changeViewPreset(viewPreset, oldViewPreset) {\n const\n me = this,\n { presets } = me;\n if (viewPreset) {\n viewPreset = presets.createRecord(viewPreset);\n // If an existing ViewPreset id is used, this will replace it.\n if (!presets.includes(viewPreset)) {\n presets.add(viewPreset);\n }\n }\n else {\n viewPreset = presets.first;\n }\n const\n lastOpts = me.lastViewPresetOptions || {},\n options = viewPreset.options || (viewPreset.options = {}),\n event = {\n ...options,\n from : oldViewPreset,\n to : viewPreset,\n preset : viewPreset\n },\n presetChanged = !me._viewPreset || !me._viewPreset.equals(viewPreset);\n delete lastOpts.event;\n // Only return the value for onward processing if there's a change\n if (presetChanged || !ObjectHelper.isEqual(options, lastOpts)) {\n // Assign event after comparison, to not have it get super expensive\n options.event = event;\n // Bypass the no-change check if the viewPreset is the same and we only got in here\n // because different options were asked for.\n if (!presetChanged) {\n me._viewPreset = null;\n }\n /**\n * Fired before the {@link #config-viewPreset} is changed.\n * @event beforePresetChange\n * @param {Scheduler.view.Scheduler} source This Scheduler instance.\n * @param {Date} startDate The new start date of the timeline.\n * @param {Date} endDate The new end date of the timeline.\n * @param {Scheduler.preset.ViewPreset} from The outgoing ViewPreset.\n * @param {Scheduler.preset.ViewPreset} to The ViewPreset being switched to.\n * @preventable\n */\n // Do not trigger events for the initial preset\n if (me.isConfiguring || me.trigger('beforePresetChange', event) !== false) {\n return viewPreset;\n }\n }\n }\n get displayDateFormat() {\n return this._displayDateFormat || this.viewPreset.displayDateFormat;\n }\n updateDisplayDateFormat(format) {\n // Start/EndDateColumn listens for this to change their format to match\n this.trigger('displayDateFormatChange', { format });\n }\n /**\n * Method to get a formatted display date\n * @private\n * @param {Date} date The date\n * @returns {String} The formatted date\n */\n getFormattedDate(date) {\n return DateHelper.format(date, this.displayDateFormat);\n }\n updateViewPreset(preset) {\n const\n me = this,\n { options } = preset,\n {\n event,\n startDate,\n endDate\n } = options,\n {\n isHorizontal,\n _timeAxis : timeAxis, // Do not tickle the getter, we are just peeking to see if it's there yet.\n _timeAxisViewModel : timeAxisViewModel // Ditto\n } = me,\n rtl = isHorizontal && me.rtl;\n let\n {\n centerDate,\n zoomDate,\n zoomPosition\n } = options,\n forceUpdate = false;\n me.syncSplits?.(split => split.viewPreset = preset);\n // Options must not be reused when this preset is used again.\n delete preset.options;\n // Raise flag to prevent partner from changing view preset if one is in progress\n me._viewPresetChanging = true;\n if (timeAxis && !me.isConfiguring) {\n const { timelineScroller } = me;\n // Cache options only when they are applied so that non-change vetoing in changeViewPreset is accurate\n me.lastViewPresetOptions = options;\n // Timeaxis may already be configured (in case of sharing with the timeline partner), no need to reconfigure it\n if (timeAxis.isConfigured) {\n // None of this reconfiguring should cause a refresh\n me.suspendRefresh();\n // Set up these configs only if we actually have them.\n const timeAxisCfg = ObjectHelper.copyProperties({}, me, [\n 'weekStartDay',\n 'startTime',\n 'endTime'\n ]);\n if (me.infiniteScroll) {\n Object.assign(timeAxisCfg, me.calculateInfiniteScrollingDateRange(\n centerDate || (startDate && endDate ? new Date((startDate.getTime() + endDate.getTime()) / 2) : me.viewportCenterDateCached),\n true,\n preset\n ));\n }\n // if startDate is provided we use it and the provided endDate\n else if (startDate) {\n timeAxisCfg.startDate = startDate;\n timeAxisCfg.endDate = endDate;\n // if both dates are provided we can calculate centerDate for the viewport\n if (!centerDate && endDate) {\n centerDate = new Date((startDate.getTime() + endDate.getTime()) / 2);\n }\n // when no start/end dates are provided we use the current timespan\n }\n else {\n timeAxisCfg.startDate = timeAxis.startDate;\n timeAxisCfg.endDate = endDate || timeAxis.endDate;\n if (!centerDate) {\n centerDate = me.viewportCenterDate;\n }\n }\n timeAxis.isConfigured = false;\n timeAxisCfg.viewPreset = preset;\n timeAxis.reconfigure(timeAxisCfg, true);\n timeAxisViewModel.reconfigure({\n viewPreset : preset,\n headers : preset.headers,\n // This was hardcoded to 'middle' prior to the Preset refactor.\n // In the old code, the default headers were 'top' and 'middle', which\n // meant that 'middle' meant the lowest header.\n // So this is now length - 1.\n columnLinesFor : preset.columnLinesFor != null ? preset.columnLinesFor : preset.headers.length - 1,\n tickSize : options.tickSize || (isHorizontal ? preset.tickWidth : preset.tickHeight || preset.tickWidth || 60)\n });\n // A ViewPreset is extremely opinionated about its tickSize and imposes it upon the Scheduler.\n // Allow the caller to correct the tick size after the reconfigure using the options block.\n if (options.tickSize) {\n me.tickSize = options.tickSize;\n }\n // Allow refresh to run after the reconfiguring, without refreshing since we will do that below anyway\n me.resumeRefresh(false);\n }\n me.refresh();\n // if view is rendered and scroll is not disabled by \"notScroll\" option\n if (!options.notScroll && me.isPainted) {\n if ('scrollPosition' in options) {\n // If we are not going to end up scrolling, we need to force an update\n forceUpdate = timelineScroller.position === options.scrollPosition;\n timelineScroller.scrollTo(options.scrollPosition);\n }\n else if (options.visibleDate) {\n me.visibleDate = options.visibleDate;\n }\n // If a zoom at a certain date position is being requested, scroll the zoomDate\n // to the required zoomPosition so that the zoom happens centered where the\n // pointer events that are driving it targeted.\n else if (zoomDate && zoomPosition) {\n const\n unitMagnitude = unitMagnitudes[timeAxis.resolutionUnit],\n unit = unitMagnitude > 3 ? 'hour' : 'minute',\n milliseconds = DateHelper.asMilliseconds((unit === 'minute' ? 15 : 1), unit),\n // Round the date to either 15 minutes for fine levels or 1 hour for coarse levels\n targetDate = new Date(Math.round(zoomDate / milliseconds) * milliseconds);\n // setViewPreset method on partner panels should be executed with same arguments.\n // if one partner was provided with zoom info, other one has to be too to generate exact\n // header and set same scroll\n event.zoomDate = zoomDate;\n event.zoomPosition = zoomPosition;\n event.zoomLevel = options.zoomLevel;\n // Move the targetDate back under the mouse position as indicated by zoomPosition.\n // That is the offset into the TimeAxisSubGridElement.\n if (rtl) {\n timelineScroller.position = timelineScroller.scrollWidth - (me.getCoordinateFromDate(targetDate) + zoomPosition);\n }\n else {\n timelineScroller.position = me.getCoordinateFromDate(targetDate) - zoomPosition;\n }\n }\n // and we have centerDate to scroll to\n else if (centerDate) {\n // remember the central date we scroll to (it gets reset after user scroll)\n me.cachedCenterDate = centerDate;\n // setViewPreset method on partner panels should be executed with same arguments.\n // if one partner was provided with a centerDate, other one has to be too to generate exact\n // header and set same scroll\n event.centerDate = centerDate;\n const\n viewportSize = me.timelineScroller.clientSize,\n centerCoord = rtl ? me.timeAxisViewModel.totalSize - me.getCoordinateFromDate(centerDate, true)\n : me.getCoordinateFromDate(centerDate, true),\n coord = Math.max(centerCoord - viewportSize / 2, 0);\n // If preset change does not lead to a scroll we have to \"refresh\" manually at the end\n if (coord === (me.isHorizontal ? me.scrollLeft : me.scrollTop)) {\n forceUpdate = true;\n }\n else if (me.isHorizontal) {\n me.scrollHorizontallyTo(coord, { scrollingToCenter : true });\n }\n else {\n me.scrollVerticallyTo(coord, { scrollingToCenter : true });\n }\n }\n else {\n // If preset change does not lead to a scroll we have to \"refresh\" manually at the end\n if ((me.isHorizontal ? me.scrollLeft : me.scrollTop) === 0) {\n forceUpdate = true;\n }\n // If we don't have a center date to scroll to, we reset scroll (this is bw compatible behavior)\n else {\n me.timelineScroller.scrollTo(0);\n }\n }\n }\n }\n // Update Scheduler element showing what preset is applied\n me.dataset.presetId = preset.id;\n /**\n * Fired after the {@link #config-viewPreset} has changed.\n * @event presetChange\n * @param {Scheduler.view.Scheduler} source This Scheduler instance.\n * @param {Date} startDate The new start date of the timeline.\n * @param {Date} centerDate The new center date of the timeline.\n * @param {Date} endDate The new end date of the timeline.\n * @param {Scheduler.preset.ViewPreset} from The outgoing ViewPreset.\n * @param {Scheduler.preset.ViewPreset} to The ViewPreset being switched to.\n * @preventable\n */\n me.trigger('presetChange', event);\n me._viewPresetChanging = false;\n if (forceUpdate) {\n if (me.isHorizontal) {\n me.currentOrientation.updateFromHorizontalScroll(me.scrollLeft, true);\n }\n else {\n me.currentOrientation.updateFromVerticalScroll(me.scrollTop);\n }\n }\n }\n //endregion\n doDestroy() {\n if (this._presets.owner === this) {\n this._presets.destroy();\n }\n super.doDestroy();\n }\n // This function is not meant to be called by any code other than Base#getCurrentConfig().\n getCurrentConfig(options) {\n const result = super.getCurrentConfig(options);\n // Cannot store name, will not be allowed when reapplying\n if (result.viewPreset && result.viewPreset.name && !result.viewPreset.base) {\n delete result.viewPreset.name;\n }\n return result;\n }\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "import Base from '../../../Core/Base.js';\nimport DateHelper from '../../../Core/helper/DateHelper.js';\nimport EventHelper from '../../../Core/helper/EventHelper.js';\n/**\n * @module Scheduler/view/mixin/TimelineZoomable\n */\n/**\n * Options which may be used when changing the {@link Scheduler.view.Scheduler#property-viewPreset} property.\n *\n * @typedef {Object} ChangePresetOptions\n * @property {VisibleDate} [visibleDate] A `visibleDate` specification to bring into view after the new\n * `ViewPreset` is applied.\n * @property {Date} [startDate] New time frame start. If provided along with end, view will be centered in this\n * time interval, ignoring centerDate config. __Ignored if {@link Scheduler.view.Scheduler#config-infiniteScroll} is used.__\n * @property {Date} [endDate] New time frame end. __Ignored if {@link Scheduler.view.Scheduler#config-infiniteScroll} is used.__\n * @property {Date} [centerDate] Date to keep in center. Is ignored when start and end are provided.\n * @property {Date} [zoomDate] The date that should be positioned at the passed `datePosition` client offset.\n * @property {Number} [zoomPosition] The client offset at which the passed `zoomDate` should be positioned.\n * @property {Number} [width] Lowest tick width. Might be increased automatically\n */\n/**\n * Mixin providing \"zooming\" functionality.\n *\n * The zoom levels are stored as instances of {@link Scheduler.preset.ViewPreset}s, and are\n * cached centrally in the {@link Scheduler.preset.PresetManager}.\n *\n * The default presets are loaded into the {@link Scheduler.view.mixin.TimelineViewPresets#config-presets}\n * store upon Scheduler instantiation. Preset selection is covered in the\n * {@link Scheduler.view.mixin.TimelineViewPresets} mixin.\n *\n * To specify custom zoom levels please provide a set of view presets to the global PresetManager store **before**\n * scheduler creation, or provide a set of view presets to a specific scheduler only:\n *\n * ```javascript\n * const myScheduler = new Scheduler({\n * presets : [\n * {\n * base : 'hourAndDay',\n * id : 'MyHourAndDay',\n * // other preset configs....\n * },\n * {\n * base : 'weekAndMonth',\n * id : 'MyWeekAndMonth',\n * // other preset configs....\n * }\n * ],\n * viewPreset : 'MyHourAndDay',\n * // other scheduler configs....\n * });\n * ```\n *\n * @mixin\n */\nexport default Target => class TimelineZoomable extends (Target || Base) {\n static $name = 'TimelineZoomable';\n static defaultConfig = {\n /**\n * If true, you can zoom in and out on the time axis using CTRL-key + mouse wheel.\n * @config {Boolean}\n * @default\n * @category Zoom\n */\n zoomOnMouseWheel : true,\n /**\n * True to zoom to time span when double-clicking a time axis cell.\n * @config {Boolean}\n * @default\n * @category Zoom\n */\n zoomOnTimeAxisDoubleClick : true,\n /**\n * The minimum zoom level to which {@link #function-zoomOut} will work. Defaults to 0 (year ticks)\n * @config {Number}\n * @category Zoom\n * @default\n */\n minZoomLevel : 0,\n /**\n * The maximum zoom level to which {@link #function-zoomIn} will work. Defaults to the number of\n * {@link Scheduler.preset.ViewPreset ViewPresets} available, see {@link Scheduler/view/mixin/TimelineViewPresets#property-presets}\n * for information. Unless you have modified the collection of available presets, the max zoom level is\n * milliseconds.\n * @config {Number}\n * @category Zoom\n * @default 23\n */\n maxZoomLevel : null,\n /**\n * Integer number indicating the size of timespan during zooming. When zooming, the timespan is adjusted to make\n * the scrolling area `visibleZoomFactor` times wider than the timeline area itself. Used in\n * {@link #function-zoomToSpan} and {@link #function-zoomToLevel} functions.\n * @config {Number}\n * @default\n * @category Zoom\n */\n visibleZoomFactor : 5,\n /**\n * Whether the originally rendered timespan should be preserved while zooming. By default, it is set to `false`,\n * meaning the timeline panel will adjust the currently rendered timespan to limit the amount of HTML content to\n * render. When setting this option to `true`, be careful not to allow to zoom a big timespan in seconds\n * resolution for example. That will cause **a lot** of HTML content to be rendered and affect performance. You\n * can use {@link #config-minZoomLevel} and {@link #config-maxZoomLevel} config options for that.\n * @config {Boolean}\n * @default\n * @category Zoom\n */\n zoomKeepsOriginalTimespan : null\n };\n // We cache the last mousewheel position, so that during zooming we can\n // maintain a stable zoom point even if the mouse moves a little.\n lastWheelTime = -1;\n lastZoomPosition = -1;\n construct(config) {\n const me = this;\n super.construct(config);\n if (me.zoomOnMouseWheel) {\n EventHelper.on({\n element : me.timeAxisSubGridElement,\n wheel : 'onWheel',\n // Throttle zooming with the wheel a bit to have greater control of it\n throttled : {\n buffer : 100,\n // Prevent events from slipping through the throttle, causing scroll\n alt : e => e.ctrlKey && e.preventDefault()\n },\n thisObj : me,\n capture : true,\n passive : false\n });\n }\n if (me.zoomOnTimeAxisDoubleClick) {\n me.ion({\n timeaxisheaderdblclick : ({ startDate, endDate }) => {\n if (!me.forceFit) {\n me.zoomToSpan({\n startDate,\n endDate\n });\n }\n }\n });\n }\n }\n get maxZoomLevel() {\n return this._maxZoomLevel || (this.presets.count - 1);\n }\n /**\n * Get/set the {@link #config-maxZoomLevel} value\n * @property {Number}\n * @category Zoom\n */\n set maxZoomLevel(level) {\n if (typeof level !== 'number') {\n level = this.presets.count - 1;\n }\n if (level < 0 || level >= this.presets.count) {\n throw new Error('Invalid range for `maxZoomLevel`');\n }\n this._maxZoomLevel = level;\n }\n get minZoomLevel() {\n return this._minZoomLevel;\n }\n /**\n * Sets the {@link #config-minZoomLevel} value\n * @property {Number}\n * @category Zoom\n */\n set minZoomLevel(level) {\n if (typeof level !== 'number') {\n level = 0;\n }\n if (level < 0 || level >= this.presets.count) {\n throw new Error('Invalid range for `minZoomLevel`');\n }\n this._minZoomLevel = level;\n }\n /**\n * Current zoom level, which is equal to the {@link Scheduler.preset.ViewPreset ViewPreset} index\n * in the provided array of {@link Scheduler.view.mixin.TimelineViewPresets#config-presets zoom levels}.\n * @property {Number}\n * @category Zoom\n */\n get zoomLevel() {\n return this.presets.indexOf(this.viewPreset);\n }\n // noinspection JSAnnotator\n set zoomLevel(level) {\n this.zoomToLevel(level);\n }\n /**\n * Returns number of milliseconds per pixel.\n * @param {Object} level Element from array of {@link Scheduler.view.mixin.TimelineViewPresets#config-presets}.\n * @param {Boolean} ignoreActualWidth If true, then density will be calculated using default zoom level settings.\n * Otherwise, density will be calculated for actual tick width.\n * @returns {Number} Return number of milliseconds per pixel.\n * @private\n */\n getMilliSecondsPerPixelForZoomLevel(preset, ignoreActualWidth) {\n const\n { bottomHeader } = preset,\n // Scheduler uses direction independent tickSize, but presets are allowed to define different sizes for\n // vertical and horizontal -> cant use preset.tickSize here\n width = this.isHorizontal ? preset.tickWidth : preset.tickHeight;\n // trying to convert the unit + increment to a number of milliseconds\n // this number is not fixed (month can be 28, 30 or 31 day), but at least this conversion\n // will be consistent (should be no DST changes at year 1)\n return Math.round(\n (DateHelper.add(new Date(1, 0, 1), bottomHeader.increment || 1, bottomHeader.unit) - new Date(1, 0, 1)) /\n // `actualWidth` is a column width after view adjustments applied to it (see `calculateTickWidth`)\n // we use it if available to return the precise index value from `getCurrentZoomLevelIndex`\n (ignoreActualWidth ? width : preset.actualWidth || width)\n );\n }\n /**\n * Zooms to passed view preset, saving center date. Method accepts config object as a first argument, which can be\n * reduced to primitive type (string,number) when no additional options required. e.g.:\n * ```javascript\n * // zooming to preset\n * scheduler.zoomTo({ preset : 'hourAndDay' })\n * // shorthand\n * scheduler.zoomTo('hourAndDay')\n *\n * // zooming to level\n * scheduler.zoomTo({ level : 0 })\n * // shorthand\n * scheduler.zoomTo(0)\n * ```\n *\n * It is also possible to zoom to a time span by omitting `preset` and `level` configs, in which case scheduler sets\n * the time frame to a specified range and applies zoom level which allows to fit all columns to this range. The\n * given time span will be centered in the scheduling view (unless `centerDate` config provided). In the same time,\n * the start/end date of the whole time axis will be extended to allow scrolling for user.\n * ```javascript\n * // zooming to time span\n * scheduler.zoomTo({\n * startDate : new Date(..),\n * endDate : new Date(...)\n * });\n * ```\n *\n * @param {ViewPresetConfig|Object|String|Number} config Config object, preset name or zoom level index.\n * @param {String} [config.preset] Preset name to zoom to. Ignores level config in this case\n * @param {Number} [config.level] Zoom level to zoom to. Is ignored, if preset config is provided\n * @param {VisibleDate} [config.visibleDate] A `visibleDate` specification to bring into view after the zoom.\n * @param {Date} [config.startDate] New time frame start. If provided along with end, view will be centered in this\n * time interval (unless `centerDate` is present)\n * @param {Date} [config.endDate] New time frame end\n * @param {Date} [config.centerDate] Date that should be kept in the center. Has priority over start and end params\n * @param {Date} [config.zoomDate] The date that should be positioned at the passed `datePosition` client offset.\n * @param {Number} [config.zoomPosition] The client offset at which the passed `date` should be positioned.\n * @param {Number} [config.width] Lowest tick width. Might be increased automatically\n * @param {Number} [config.leftMargin] Amount of pixels to extend span start on (used, when zooming to span)\n * @param {Number} [config.rightMargin] Amount of pixels to extend span end on (used, when zooming to span)\n * @param {Number} [config.adjustStart] Amount of units to extend span start on (used, when zooming to span)\n * @param {Number} [config.adjustEnd] Amount of units to extend span end on (used, when zooming to span)\n * @category Zoom\n */\n zoomTo(config) {\n const me = this;\n if (typeof config === 'object') {\n if (config.preset) {\n me.zoomToLevel(config.preset, config);\n }\n else if (config.level != null) {\n me.zoomToLevel(config.level, config);\n }\n else {\n me.zoomToSpan(config);\n }\n }\n else {\n me.zoomToLevel(config);\n }\n }\n /**\n * Allows zooming to certain level of {@link Scheduler.view.mixin.TimelineViewPresets#config-presets} array.\n * Automatically limits zooming between {@link #config-maxZoomLevel} and {@link #config-minZoomLevel}. Can also set\n * time axis timespan to the supplied start and end dates.\n *\n * @param {Number} preset Level to zoom to.\n * @param {ChangePresetOptions} [options] Object containing options which affect how the new preset is applied.\n * @returns {Number|null} level Current zoom level or null if it hasn't changed.\n * @category Zoom\n */\n zoomToLevel(preset, options = {}) {\n if (this.forceFit) {\n console.warn('Warning: The forceFit setting and zooming cannot be combined');\n return;\n }\n // Sanitize numeric zooming.\n if (typeof preset === 'number') {\n preset = Math.min(Math.max(preset, this.minZoomLevel), this.maxZoomLevel);\n }\n const\n me = this,\n { presets } = me,\n tickSizeProp = me.isVertical ? 'tickHeight' : 'tickWidth',\n newPreset = presets.createRecord(preset),\n configuredTickSize = newPreset[tickSizeProp],\n startDate = options.startDate ? new Date(options.startDate) : null,\n endDate = options.endDate ? new Date(options.endDate) : null;\n // If an existing ViewPreset id is used, this will replace it.\n presets.add(newPreset);\n let span = startDate && endDate ? { startDate, endDate } : null;\n const\n centerDate = options.centerDate ? new Date(options.centerDate) : (span ? new Date((startDate.getTime() + endDate.getTime()) / 2) : me.viewportCenterDateCached);\n let scrollableViewportSize = me.isVertical ? me.scrollable.clientHeight : me.timeAxisSubGrid.width;\n if (scrollableViewportSize === 0) {\n const\n { _beforeCollapseState } = me.timeAxisSubGrid;\n if (me.isHorizontal && me.timeAxisSubGrid.collapsed && _beforeCollapseState?.width) {\n scrollableViewportSize = _beforeCollapseState.width;\n }\n else {\n return null;\n }\n }\n // Always calculate an optimal date range for the new zoom level\n if (!span) {\n span = me.calculateOptimalDateRange(centerDate, scrollableViewportSize, newPreset);\n }\n // Temporarily override tick size while reconfiguring the TimeAxisViewModel\n if ('width' in options) {\n newPreset.setData(tickSizeProp, options.width);\n }\n me.isZooming = true;\n // Passed through to the viewPreset changing method\n newPreset.options = {\n ...options,\n startDate : span.startDate || me.startDate,\n endDate : span.endDate || me.endDate,\n centerDate\n };\n me.viewPreset = newPreset;\n // after switching the view preset the `width` config of the zoom level may change, because of adjustments\n // we will save the real value in the `actualWidth` property, so that `getCurrentZoomLevelIndex` method\n // will return the exact level index after zooming\n newPreset.actualWidth = me.timeAxisViewModel.tickSize;\n me.isZooming = false;\n // Restore the tick size because the default presets are shared.\n newPreset.setData(tickSizeProp, configuredTickSize);\n return me.zoomLevel;\n }\n /**\n * Changes the range of the scheduling chart to fit all the events in its event store.\n * @param {Object} [options] Options object for the zooming operation.\n * @param {Number} [options.leftMargin] Defines margin in pixel between the first event start date and first visible\n * date\n * @param {Number} [options.rightMargin] Defines margin in pixel between the last event end date and last visible\n * date\n */\n zoomToFit(options) {\n const eventStore = this.eventStore,\n span = eventStore.getTotalTimeSpan();\n options = {\n leftMargin : 0,\n rightMargin : 0,\n ...options,\n ...span\n };\n // Make sure we received a time span, event store might be empty\n if (options.startDate && options.endDate) {\n if (options.endDate > options.startDate) {\n this.zoomToSpan(options);\n }\n else {\n // If we only had a zero time span, just scroll it into view\n this.scrollToDate(options.startDate);\n }\n }\n }\n /**\n * Sets time frame to specified range and applies zoom level which allows to fit all columns to this range.\n *\n * The given time span will be centered in the scheduling view, in the same time, the start/end date of the whole\n * time axis will be extended in the same way as {@link #function-zoomToLevel} method does, to allow scrolling for\n * user.\n *\n * @param {Object} config The time frame.\n * @param {Date} config.startDate The time frame start.\n * @param {Date} config.endDate The time frame end.\n * @param {Date} [config.centerDate] Date that should be kept in the center. Has priority over start and end params\n * @param {Number} [config.leftMargin] Amount of pixels to extend span start on\n * @param {Number} [config.rightMargin] Amount of pixels to extend span end on\n * @param {Number} [config.adjustStart] Amount of units to extend span start on\n * @param {Number} [config.adjustEnd] Amount of units to extend span end on\n *\n * @returns {Number|null} level Current zoom level or null if it hasn't changed.\n * @category Zoom\n */\n zoomToSpan(config = {}) {\n if (config.leftMargin || config.rightMargin) {\n config.adjustStart = 0;\n config.adjustEnd = 0;\n }\n if (!config.leftMargin) config.leftMargin = 0;\n if (!config.rightMargin) config.rightMargin = 0;\n if (!config.startDate || !config.endDate) throw new Error('zoomToSpan: must provide startDate + endDate dates');\n const\n me = this,\n { timeAxis } = me,\n // this config enables old zoomToSpan behavior which we want to use for zoomToFit in Gantt\n needToAdjust = config.adjustStart >= 0 || config.adjustEnd >= 0;\n let {\n startDate,\n endDate\n } = config;\n if (needToAdjust) {\n startDate = DateHelper.add(startDate, -config.adjustStart, timeAxis.mainUnit);\n endDate = DateHelper.add(endDate, config.adjustEnd, timeAxis.mainUnit);\n }\n if (startDate <= endDate) {\n // get scheduling view width\n const\n { availableSpace } = me.timeAxisViewModel,\n presets = me.presets.allRecords,\n diffMS = endDate - startDate || 1;\n // if potential width of col is less than col width provided by zoom level\n // - we'll zoom out panel until col width fit into width from zoom level\n // and if width of column is more than width from zoom level\n // - we'll zoom in until col width fit won't fit into width from zoom level\n let currLevel = me.zoomLevel,\n inc, range;\n // if we zoomed out even more than the highest zoom level - limit it to the highest zoom level\n if (currLevel === -1) currLevel = 0;\n let msPerPixel = me.getMilliSecondsPerPixelForZoomLevel(presets[currLevel], true),\n // increment to get next zoom level:\n // -1 means that given timespan won't fit the available width in the current zoom level, we need to zoom out,\n // so that more content will \"fit\" into 1 px\n //\n // +1 mean that given timespan will already fit into available width in the current zoom level, but,\n // perhaps if we'll zoom in a bit more, the fitting will be better\n candidateLevel = currLevel + (inc = diffMS / msPerPixel + config.leftMargin + config.rightMargin > availableSpace ? -1 : 1),\n zoomLevel, levelToZoom = null;\n // loop over zoom levels\n while (candidateLevel >= 0 && candidateLevel <= presets.length - 1) {\n // get zoom level\n zoomLevel = presets[candidateLevel];\n msPerPixel = me.getMilliSecondsPerPixelForZoomLevel(zoomLevel, true);\n const spanWidth = diffMS / msPerPixel + config.leftMargin + config.rightMargin;\n // if zooming out\n if (inc === -1) {\n // if columns fit into available space, then all is fine, we've found appropriate zoom level\n if (spanWidth <= availableSpace) {\n levelToZoom = candidateLevel;\n // stop searching\n break;\n }\n // if zooming in\n }\n else {\n // if columns still fits into available space, we need to remember the candidate zoom level as a potential\n // resulting zoom level, the indication that we've found correct zoom level will be that timespan won't fit\n // into available view\n if (spanWidth <= availableSpace) {\n // if it's not currently active level\n if (currLevel !== candidateLevel - inc) {\n // remember this level as applicable\n levelToZoom = candidateLevel;\n }\n }\n else {\n // Sanity check to find the following case:\n // If we're already zoomed in at the appropriate level, but the current zoomLevel is \"too small\" to fit and had to be expanded,\n // there is an edge case where we should actually just stop and use the currently selected zoomLevel\n break;\n }\n }\n candidateLevel += inc;\n }\n // If we didn't find a large/small enough zoom level, use the lowest/highest level\n levelToZoom = levelToZoom != null ? levelToZoom : candidateLevel - inc;\n // presets is the array of all ViewPresets this Scheduler is using\n zoomLevel = presets[levelToZoom];\n const unitToZoom = zoomLevel.bottomHeader.unit;\n // Extract the correct msPerPixel value for the new zoom level\n msPerPixel = me.getMilliSecondsPerPixelForZoomLevel(zoomLevel, true);\n if (config.leftMargin || config.rightMargin) {\n // time axis doesn't yet know about new view preset (zoom level) so it cannot round/ceil date correctly\n startDate = new Date(startDate.getTime() - msPerPixel * config.leftMargin);\n endDate = new Date(endDate.getTime() + msPerPixel * config.rightMargin);\n }\n const tickCount = DateHelper.getDurationInUnit(startDate, endDate, unitToZoom, true) / zoomLevel.bottomHeader.increment;\n if (tickCount === 0) {\n return null;\n }\n const\n customWidth = Math.floor(availableSpace / tickCount),\n centerDate = config.centerDate || new Date((startDate.getTime() + endDate.getTime()) / 2);\n if (needToAdjust) {\n range = {\n startDate,\n endDate\n };\n }\n else {\n range = me.calculateOptimalDateRange(centerDate, availableSpace, zoomLevel);\n }\n let result = me.zoomLevel;\n // No change of zoom level needed, just move to the date range\n if (me.zoomLevel === levelToZoom) {\n timeAxis.reconfigure(range);\n }\n else {\n result = me.zoomToLevel(levelToZoom,\n Object.assign(range, {\n width : customWidth,\n centerDate\n })\n );\n }\n this.trigger('zoomToSpan', { zoomLevel : levelToZoom, startDate, endDate, centerDate });\n return result;\n }\n return null;\n }\n /**\n * Zooms in the timeline according to the array of zoom levels. If the amount of levels to zoom is given, the view\n * will zoom in by this value. Otherwise, a value of `1` will be used.\n *\n * @param {Number} [levels] (optional) amount of levels to zoom in\n * @param {ChangePresetOptions} [options] Object containing options which affect how the new preset is applied.\n * @returns {Number|null} currentLevel New zoom level of the panel or null if level hasn't changed.\n * @category Zoom\n */\n zoomIn(levels = 1, options) {\n // Allow zoomIn({ visibleDate : ... })\n if (typeof levels === 'object') {\n options = levels;\n levels = 1;\n }\n const currentZoomLevelIndex = this.zoomLevel;\n if (currentZoomLevelIndex >= this.maxZoomLevel) {\n return null;\n }\n return this.zoomToLevel(currentZoomLevelIndex + levels, options);\n }\n /**\n * Zooms out the timeline according to the array of zoom levels. If the amount of levels to zoom is given, the view\n * will zoom out by this value. Otherwise, a value of `1` will be used.\n *\n * @param {Number} levels (optional) amount of levels to zoom out\n * @param {ChangePresetOptions} [options] Object containing options which affect how the new preset is applied.\n * @returns {Number|null} currentLevel New zoom level of the panel or null if level hasn't changed.\n * @category Zoom\n */\n zoomOut(levels = 1, options) {\n // Allow zoomOut({ visibleDate : ... })\n if (typeof levels === 'object') {\n options = levels;\n levels = 1;\n }\n const currentZoomLevelIndex = this.zoomLevel;\n if (currentZoomLevelIndex <= this.minZoomLevel) {\n return null;\n }\n return this.zoomToLevel(currentZoomLevelIndex - levels, options);\n }\n /**\n * Zooms in the timeline to the {@link #config-maxZoomLevel} according to the array of zoom levels.\n *\n * @param {ChangePresetOptions} [options] Object containing options which affect how the new preset is applied.\n * @returns {Number|null} currentLevel New zoom level of the panel or null if level hasn't changed.\n * @category Zoom\n */\n zoomInFull(options) {\n return this.zoomToLevel(this.maxZoomLevel, options);\n }\n /**\n * Zooms out the timeline to the {@link #config-minZoomLevel} according to the array of zoom levels.\n *\n * @param {ChangePresetOptions} [options] Object containing options which affect how the new preset is applied.\n * @returns {Number|null} currentLevel New zoom level of the panel or null if level hasn't changed.\n * @category Zoom\n */\n zoomOutFull(options) {\n return this.zoomToLevel(this.minZoomLevel, options);\n }\n /*\n * Adjusts the timespan of the panel to the new zoom level. Used for performance reasons,\n * as rendering too many columns takes noticeable amount of time so their number is limited.\n * @category Zoom\n * @private\n */\n calculateOptimalDateRange(centerDate, viewportSize, viewPreset) {\n const\n me = this,\n { timeAxis } = me,\n { bottomHeader } = viewPreset,\n tickWidth = me.isHorizontal ? viewPreset.tickWidth : viewPreset.tickHeight;\n if (me.zoomKeepsOriginalTimespan) {\n return {\n startDate : timeAxis.startDate,\n endDate : timeAxis.endDate\n };\n }\n const\n unit = bottomHeader.unit,\n difference = Math.ceil(viewportSize / tickWidth * bottomHeader.increment * me.visibleZoomFactor / 2),\n startDate = DateHelper.add(centerDate, -difference, unit),\n endDate = DateHelper.add(centerDate, difference, unit);\n return {\n startDate : timeAxis.floorDate(startDate, false, unit, bottomHeader.increment),\n endDate : timeAxis.ceilDate(endDate, false, unit, bottomHeader.increment)\n };\n }\n onElementMouseMove(event) {\n const\n {\n isHorizontal,\n zoomContext\n } = this;\n super.onElementMouseMove(event);\n if (event.isTrusted && zoomContext) {\n // Invalidate the zoomContext if mouse has strayed away from it\n if (Math.abs(event[`client${isHorizontal ? 'X' : 'Y'}`] - zoomContext.coordinate) > 10) {\n this.zoomContext = null;\n }\n }\n }\n async onWheel(event) {\n if (event.ctrlKey && !this.forceFit) {\n event.preventDefault();\n const\n me = this,\n {\n zoomContext,\n isHorizontal,\n timelineScroller,\n zoomLevel\n } = me,\n now = performance.now(),\n coordinate = event[`client${isHorizontal ? 'X' : 'Y'}`];\n let zoomPosition = coordinate - timelineScroller.viewport[`${isHorizontal ? 'x' : 'y'}`];\n // zoomPosition is the offset into the TimeAxisSubGridElement.\n if (isHorizontal && me.rtl) {\n zoomPosition = timelineScroller.viewport.width + timelineScroller.viewport.x - coordinate;\n }\n // If we are in a fast-arriving stream of wheel events, we use the same zoomDate as last time.\n // If it's a new zoom gesture or the pointer has strayed away from the context then ascertain\n // the gesture's center date\n if (now - me.lastWheelTime > 200 || !zoomContext || Math.abs(coordinate - me.zoomContext.coordinate) > 20) {\n // We're creating a zoom gesture which lasts as long as the\n // wheel events keep arriving at the same timeline position\n me.zoomContext = {\n // So we can track if we're going in (to finer resolutions)\n zoomLevel,\n // Pointer client(X|Y)\n coordinate,\n // Full TimeAxis offset position at which to place the date\n zoomPosition,\n // The date to place at the position\n zoomDate : me.getDateFromDomEvent(event)\n };\n }\n // Use the current zoomContext's zoomDate, but at each level, the relative position of that date\n // in the TimeAxis has to be corrected as the TimeAxis grows and scrolls to keep the zoomPosition\n // stable.\n else {\n // If we zoom in to a finer resolution, get a more accurate centering date.\n // If gesture was started at a years/months level, the date will be inaccurate.\n if (zoomLevel > zoomContext.zoomLevel) {\n zoomContext.zoomDate = me.getDateFromDomEvent(event);\n zoomContext.zoomLevel = zoomLevel;\n }\n zoomContext.zoomPosition = zoomPosition;\n }\n me.lastWheelTime = now;\n me[`zoom${event.deltaY > 0 ? 'Out' : 'In'}`](undefined, me.zoomContext);\n }\n }\n /**\n * Changes the time axis timespan to the supplied start and end dates.\n * @param {Date} newStartDate The new start date\n * @param {Date} [newEndDate] The new end date. If omitted or equal to startDate, the\n * {@link Scheduler.preset.ViewPreset#field-defaultSpan} property of the current view preset will be used to calculate the new end date.\n * @param {Object} [options] An object containing modifiers for the time span change operation.\n * @param {Boolean} [options.maintainVisibleStart] Specify as `true` to keep the visible start date stable.\n * @param {Date} [options.visibleDate] The date inside the range to scroll into view\n * @async\n */\n setTimeSpan(newStartDate, newEndDate, options) {\n this.timeAxis.setTimeSpan(newStartDate, newEndDate, options);\n }\n /**\n * Moves the time axis by the passed amount and unit.\n *\n * NOTE: If using a filtered time axis, see {@link Scheduler.data.TimeAxis#function-shift} for more information.\n *\n * @param {Number} amount The number of units to jump\n * @param {DurationUnitShort} [unit] The unit (Day, Week etc.)\n */\n shift(amount, unit) {\n this.timeAxis.shift(amount, unit);\n }\n /**\n * Moves the time axis forward in time in units specified by the view preset `shiftUnit`, and by the amount\n * specified by the `shiftIncrement` config of the current view preset.\n *\n * NOTE: If using a filtered time axis, see {@link Scheduler.data.TimeAxis#function-shiftNext} for more information.\n *\n * @param {Number} [amount] The number of units to jump forward\n */\n shiftNext(amount) {\n this.timeAxis.shiftNext(amount);\n }\n /**\n * Moves the time axis backward in time in units specified by the view preset `shiftUnit`, and by the amount\n * specified by the `shiftIncrement` config of the current view preset.\n *\n * NOTE: If using a filtered time axis, see {@link Scheduler.data.TimeAxis#function-shiftPrevious} for more\n * information.\n *\n * @param {Number} [amount] The number of units to jump backward\n */\n shiftPrevious(amount) {\n this.timeAxis.shiftPrevious(amount);\n }\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "import Popup from '../../../Core/widget/Popup.js';\n/**\n * @module Scheduler/view/recurrence/RecurrenceConfirmationPopup\n */\n/**\n * A confirmation dialog shown when modifying a recurring event or some of its occurrences.\n * For recurring events, the dialog informs the user that the change will be applied to all occurrences.\n *\n * For occurrences, the dialog lets the user choose if the change should affect all future occurrences,\n * or this occurrence only.\n *\n * Usage example:\n *\n * ```javascript\n * const confirmation = new RecurrenceConfirmationPopup();\n *\n * confirmation.confirm({\n * eventRecord : recurringEvent,\n * actionType : \"delete\",\n * changerFn : () => recurringEvent.remove(event)\n * });\n * ```\n *\n * @classtype recurrenceconfirmation\n * @extends Core/widget/Popup\n */\nexport default class RecurrenceConfirmationPopup extends Popup {\n static get $name() {\n return 'RecurrenceConfirmationPopup';\n }\n // Factoryable type name\n static get type() {\n return 'recurrenceconfirmation';\n }\n static get defaultConfig() {\n return {\n localizableProperties : [],\n align : 'b-t',\n autoShow : false,\n autoClose : false,\n closeAction : 'onRecurrenceClose',\n modal : true,\n centered : true,\n scrollAction : 'realign',\n constrainTo : globalThis,\n draggable : true,\n closable : true,\n floating : true,\n eventRecord : null,\n cls : 'b-sch-recurrenceconfirmation',\n bbar : {\n defaults : {\n localeClass : this\n },\n items : {\n changeSingleButton : {\n weight : 100,\n cls : 'b-raised',\n color : 'b-blue',\n text : 'L{update-only-this-btn-text}',\n onClick : 'up.onChangeSingleButtonClick'\n },\n changeMultipleButton : {\n weight : 200,\n color : 'b-green',\n text : 'L{Object.Yes}',\n onClick : 'up.onChangeMultipleButtonClick'\n },\n cancelButton : {\n weight : 300,\n color : 'b-gray',\n text : 'L{Object.Cancel}',\n onClick : 'up.onCancelButtonClick'\n }\n }\n }\n };\n }\n /**\n * Reference to the \"Apply changes to multiple occurrences\" button, if used\n * @property {Core.widget.Button}\n * @readonly\n */\n get changeMultipleButton() {\n return this.widgetMap.changeMultipleButton;\n }\n /**\n * Reference to the button that causes changing of the event itself only, if used\n * @property {Core.widget.Button}\n * @readonly\n */\n get changeSingleButton() {\n return this.widgetMap.changeSingleButton;\n }\n /**\n * Reference to the cancel button, if used\n * @property {Core.widget.Button}\n * @readonly\n */\n get cancelButton() {\n return this.widgetMap.cancelButton;\n }\n /**\n * Handler for \"Apply changes to multiple occurrences\" {@link #property-changeMultipleButton button}.\n * It calls {@link #function-processMultipleRecords} and then hides the dialog.\n */\n onChangeMultipleButtonClick() {\n this.processMultipleRecords();\n this.hide();\n }\n /**\n * Handler for the {@link #property-changeSingleButton button} that causes changing of the event itself only.\n * It calls {@link #function-processSingleRecord} and then hides the dialog.\n */\n onChangeSingleButtonClick() {\n this.processSingleRecord();\n this.hide();\n }\n /**\n * Handler for {@link #property-cancelButton cancel button}.\n * It calls `cancelFn` provided to {@link #function-confirm} call and then hides the dialog.\n */\n onCancelButtonClick() {\n this.cancelFn && this.cancelFn.call(this.thisObj);\n this.hide();\n }\n onRecurrenceClose() {\n if (this.cancelFn) {\n this.cancelFn.call(this.thisObj);\n }\n this.hide();\n }\n /**\n * Displays the confirmation.\n * Usage example:\n *\n * ```javascript\n * const popup = new RecurrenceConfirmationPopup();\n *\n * popup.confirm({\n * eventRecord,\n * actionType : \"delete\",\n * changerFn : () => eventStore.remove(record)\n * });\n * ```\n *\n * @param {Object} config The following config options are supported:\n * @param {Scheduler.model.EventModel} config.eventRecord Event being modified.\n * @param {'update'|'delete'} config.actionType Type of modification to be applied to the event. Can be\n * either \"update\" or \"delete\".\n * @param {Function} config.changerFn A function that should be called to apply the change to the event upon user\n * choice.\n * @param {Function} [config.thisObj] `changerFn` and `cancelFn` functions scope.\n * @param {Function} [config.cancelFn] Function called on `Cancel` button click.\n */\n confirm(config = {}) {\n const me = this;\n [\n 'actionType',\n 'eventRecord',\n 'title',\n 'html',\n 'changerFn',\n 'cancelFn',\n 'finalizerFn',\n 'thisObj'\n ].forEach(prop => {\n if (prop in config) me[prop] = config[prop];\n });\n me.updatePopupContent();\n return super.show(config);\n }\n updatePopupContent() {\n const\n me = this,\n { changeMultipleButton, changeSingleButton, cancelButton } = me.widgetMap,\n { eventRecord, actionType = 'update' } = me,\n isMaster = eventRecord?.isRecurring;\n if (isMaster) {\n changeMultipleButton.text = me.L('L{Object.Yes}');\n me.html = me.L(`${actionType}-all-message`);\n }\n else {\n changeMultipleButton.text = me.L(`${actionType}-further-btn-text`);\n me.html = me.L(`${actionType}-further-message`);\n }\n changeSingleButton.text = me.L(`${actionType}-only-this-btn-text`);\n cancelButton.text = me.L('L{Object.Cancel}');\n me.width = me.L('L{width}');\n me.title = me.L(`${actionType}-title`);\n }\n /**\n * Applies changes to multiple occurrences as reaction on \"Apply changes to multiple occurrences\"\n * {@link #property-changeMultipleButton button} click.\n */\n processMultipleRecords() {\n const { eventRecord, changerFn, thisObj, finalizerFn } = this;\n eventRecord.beginBatch();\n // Apply changes to the occurrence.\n // It is not joined to any stores, so this has no consequence.\n changerFn && this.callback(changerFn, thisObj, [eventRecord]);\n // afterChange will promote it to being an new recurring base because there's still recurrence\n eventRecord.endBatch();\n finalizerFn && this.callback(finalizerFn, thisObj, [eventRecord]);\n }\n /**\n * Applies changes to a single record by making it a \"real\" event and adding an exception to the recurrence.\n * The method is called as reaction on clicking the {@link #property-changeSingleButton button} that causes changing of the event itself only.\n */\n processSingleRecord() {\n const { eventRecord, changerFn, thisObj, finalizerFn } = this;\n eventRecord.beginBatch();\n let firstOccurrence;\n // If that's a master event get its very first occurrence\n if (eventRecord?.isRecurring) {\n eventRecord.recurrence.forEachOccurrence(eventRecord.startDate, null, (occurrence, isFirst, index) => {\n // index 1 is used by to the event itself, > 1 since there might be exceptions\n if (index > 1) {\n firstOccurrence = occurrence;\n return false;\n }\n });\n }\n // turn the 1st occurrence into a new \"master\" event\n firstOccurrence?.convertToRealEvent();\n // When the changes apply, because there's no recurrence, it will become an exception\n eventRecord.recurrence = null;\n // Apply changes to the occurrence.\n // It is not joined to any stores, so this has no consequence.\n changerFn && this.callback(changerFn, thisObj, [eventRecord]);\n // Must also change after the callback in case the callback sets the rule.\n // This will update the batch update data block to prevent it being set back to recurring.\n eventRecord.recurrenceRule = null;\n // afterChange will promote it to being an exception because there's no recurrence\n eventRecord.endBatch();\n finalizerFn && this.callback(finalizerFn, thisObj, [eventRecord]);\n }\n updateLocalization() {\n this.updatePopupContent();\n super.updateLocalization();\n }\n};\n// Register this widget type with its Factory\nRecurrenceConfirmationPopup.initClass();\nRecurrenceConfirmationPopup._$name = 'RecurrenceConfirmationPopup';", "import Base from '../../../Core/Base.js';\nimport '../recurrence/RecurrenceConfirmationPopup.js';\n/**\n * @module Scheduler/view/mixin/RecurringEvents\n */\n/**\n * A mixin that adds recurring events functionality to the Scheduler.\n *\n * The main purpose of the code in here is displaying a {@link Scheduler.view.recurrence.RecurrenceConfirmationPopup special confirmation}\n * on user mouse dragging/resizing/deleting recurring events and their occurrences.\n *\n * @mixin\n */\nexport default Target => class RecurringEvents extends (Target || Base) {\n static $name = 'RecurringEvents';\n static configurable = {\n /**\n * Enables showing occurrences of recurring events across the scheduler's time axis.\n *\n * Enables extra recurrence UI fields in the system-provided event editor (not in Scheduler Pro's task editor).\n * @config {Boolean}\n * @default\n * @category Scheduled events\n */\n enableRecurringEvents : false,\n recurrenceConfirmationPopup : {\n $config : ['lazy'],\n value : {\n type : 'recurrenceconfirmation'\n }\n }\n };\n construct(config) {\n super.construct(config);\n this.ion({\n beforeEventDropFinalize : 'onRecurrableBeforeEventDropFinalize',\n beforeEventResizeFinalize : 'onRecurrableBeforeEventResizeFinalize',\n beforeAssignmentDelete : 'onRecurrableAssignmentBeforeDelete'\n });\n }\n changeRecurrenceConfirmationPopup(recurrenceConfirmationPopup, oldRecurrenceConfirmationPopup) {\n // Widget.reconfigure reither reconfigures an existing instance, or creates a new one, or,\n // if the configuration is null, destroys the existing instance.\n const result = this.constructor.reconfigure(oldRecurrenceConfirmationPopup, recurrenceConfirmationPopup, 'recurrenceconfirmation');\n result.owner = this;\n return result;\n }\n findRecurringEventToConfirmDelete(eventRecords) {\n // show confirmation if we deal with at least one recurring event (or its occurrence)\n // and if the record is not being edited by event editor (since event editor has its own confirmation)\n return eventRecords.find(eventRecord => eventRecord.supportsRecurring && (eventRecord.isRecurring || eventRecord.isOccurrence));\n }\n onRecurrableAssignmentBeforeDelete({ assignmentRecords, context }) {\n const\n eventRecords = assignmentRecords.map(as => as.event),\n eventRecord = this.findRecurringEventToConfirmDelete(eventRecords);\n if (this.enableRecurringEvents && eventRecord) {\n this.recurrenceConfirmationPopup.confirm({\n actionType : 'delete',\n eventRecord,\n changerFn() {\n context.finalize(true);\n },\n cancelFn() {\n context.finalize(false);\n }\n });\n return false;\n }\n }\n onRecurrableBeforeEventDropFinalize({ context }) {\n if (this.enableRecurringEvents) {\n const\n { eventRecords } = context,\n recurringEvents = eventRecords.filter(eventRecord => eventRecord.supportsRecurring && (eventRecord.isRecurring || eventRecord.isOccurrence));\n if (recurringEvents.length) {\n context.async = true;\n this.recurrenceConfirmationPopup.confirm({\n actionType : 'update',\n eventRecord : recurringEvents[0],\n changerFn() {\n context.finalize(true);\n },\n cancelFn() {\n context.finalize(false);\n }\n });\n }\n }\n }\n onRecurrableBeforeEventResizeFinalize({ context }) {\n if (this.enableRecurringEvents) {\n const\n { eventRecord } = context,\n isRecurring = eventRecord.supportsRecurring && (eventRecord.isRecurring || eventRecord.isOccurrence);\n if (isRecurring) {\n context.async = true;\n this.recurrenceConfirmationPopup.confirm({\n actionType : 'update',\n eventRecord,\n changerFn() {\n context.finalize(true);\n },\n cancelFn() {\n context.finalize(false);\n }\n });\n }\n }\n }\n // Make sure occurrence cache is up-to-date when reassigning events\n onAssignmentChange({ action, records : assignments, changes }) {\n // Ignore changes coming from engine normalizing the eventId/resourceId => event/resource\n if (action === 'update' && changes.event && changes.resource && Object.keys(changes).length === 2) {\n return;\n }\n if (action !== 'dataset' && Array.isArray(assignments)) {\n for (const assignment of assignments) {\n if (assignment.event?.isRecurring && !assignment.event.isBatchUpdating) {\n assignment.event.removeOccurrences(this.eventStore);\n }\n }\n }\n }\n /**\n * Returns occurrences of the provided recurring event across the date range of this Scheduler.\n * @param {Scheduler.model.TimeSpan} recurringEvent Recurring event for which occurrences should be retrieved.\n * @returns {Scheduler.model.TimeSpan[]} Array of the provided timespans occurrences.\n *\n * __Empty if the passed event is not recurring, or has no occurrences in the date range.__\n *\n * __If the date range encompasses the start point, the recurring event itself will be the first entry.__\n * @category Data\n */\n getOccurrencesFor(recurringEvent) {\n return this.eventStore.getOccurrencesForTimeSpan(recurringEvent, this.timeAxis.startDate, this.timeAxis.endDate);\n }\n /**\n * Internal utility function to remove events. Used when pressing [DELETE] or [BACKSPACE] or when clicking the\n * delete button in the event editor. Triggers a preventable `beforeEventDelete` or `beforeAssignmentDelete` event.\n * @param {Scheduler.model.EventModel[]|Scheduler.model.AssignmentModel[]} eventRecords Records to remove\n * @param {Function} [callback] Optional callback executed after triggering the event but before deletion\n * @returns {Boolean} Returns `false` if the operation was prevented, otherwise `true`\n * @internal\n * @fires beforeEventDelete\n * @fires beforeAssignmentDelete\n */\n async removeEvents(eventRecords, callback = null, popupOwner = this) {\n const me = this;\n if (!me.readOnly && eventRecords.length) {\n const context = {\n finalize(removeRecord = true) {\n if (callback) {\n callback(removeRecord);\n }\n if (removeRecord !== false) {\n if (eventRecords.some(record => record.isOccurrence || record.event?.isOccurrence)) {\n eventRecords.forEach(record => record.isOccurrenceAssignment ? record.event.remove() : record.remove());\n }\n else {\n const store = eventRecords[0].isAssignment ? me.assignmentStore : me.eventStore;\n store.remove(eventRecords);\n }\n }\n }\n };\n let shouldFinalize;\n if (eventRecords[0].isAssignment) {\n /**\n * Fires before an assignment is removed. Can be triggered by user pressing [DELETE] or [BACKSPACE] or\n * by the event editor. Can for example be used to display a custom dialog to confirm deletion, in which\n * case records should be \"manually\" removed after confirmation:\n *\n * ```javascript\n * scheduler.on({\n * beforeAssignmentDelete({ assignmentRecords, context }) {\n * // Show custom confirmation dialog (pseudo code)\n * confirm.show({\n * listeners : {\n * onOk() {\n * // Remove the assignments on confirmation\n * context.finalize(true);\n * },\n * onCancel() {\n * // do not remove the assignments if \"Cancel\" clicked\n * context.finalize(false);\n * }\n * }\n * });\n *\n * // Prevent default behaviour\n * return false;\n * }\n * });\n * ```\n *\n * @event beforeAssignmentDelete\n * @param {Scheduler.view.Scheduler} source The Scheduler instance\n * @param {Scheduler.model.EventModel[]} eventRecords The records about to be deleted\n * @param {Object} context Additional removal context:\n * @param {Function} context.finalize Function to call to finalize the removal.\n * Used to asynchronously decide to remove the records or not. Provide `false` to the function to\n * prevent the removal.\n * @param {Boolean} [context.finalize.removeRecords = true] Provide `false` to the function to prevent\n * the removal.\n * @preventable\n */\n shouldFinalize = me.trigger('beforeAssignmentDelete', { assignmentRecords : eventRecords, context });\n }\n else {\n /**\n * Fires before an event is removed. Can be triggered by user pressing [DELETE] or [BACKSPACE] or by the\n * event editor. Return `false` to immediately veto the removal (or a `Promise` yielding `true` or `false`\n * for async vetoing).\n *\n * Can for example be used to display a custom dialog to confirm deletion, in which case\n * records should be \"manually\" removed after confirmation:\n *\n * ```javascript\n * scheduler.on({\n * beforeEventDelete({ eventRecords, context }) {\n * // Show custom confirmation dialog (pseudo code)\n * confirm.show({\n * listeners : {\n * onOk() {\n * // Remove the events on confirmation\n * context.finalize(true);\n * },\n * onCancel() {\n * // do not remove the events if \"Cancel\" clicked\n * context.finalize(false);\n * }\n * }\n * });\n *\n * // Prevent default behaviour\n * return false;\n * }\n * });\n * ```\n *\n * @event beforeEventDelete\n * @param {Scheduler.view.Scheduler} source The Scheduler instance\n * @typings source -> {Scheduler.view.Scheduler||any}\n * @param {Scheduler.model.EventModel[]} eventRecords The records about to be deleted\n * @param {Object} context Additional removal context:\n * @param {Function} context.finalize Function to call to finalize the removal.\n * Used to asynchronously decide to remove the records or not. Provide `false` to the function to\n * prevent the removal.\n * @param {Boolean} [context.finalize.removeRecords = true] Provide `false` to the function to prevent\n * the removal.\n * @preventable\n * @async\n */\n shouldFinalize = await me.trigger('beforeEventDelete', { eventRecords, context });\n }\n if (shouldFinalize !== false) {\n const recurringEventRecord = eventRecords.find(eventRecord => eventRecord.isRecurring || eventRecord.isOccurrence);\n if (recurringEventRecord) {\n me.recurrenceConfirmationPopup.owner = popupOwner;\n me.recurrenceConfirmationPopup.confirm({\n actionType : 'delete',\n eventRecord : recurringEventRecord,\n changerFn() {\n context.finalize(true);\n },\n cancelFn() {\n context.finalize(false);\n }\n });\n }\n else {\n context.finalize(true);\n }\n return true;\n }\n }\n return false;\n }\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "import Base from '../../../Core/Base.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\n/**\n * @module Scheduler/view/mixin/TimelineEventRendering\n */\n/**\n * Functions to handle event rendering (EventModel -> dom elements).\n *\n * @mixin\n */\nexport default Target => class TimelineEventRendering extends (Target || Base) {\n static get $name() {\n return 'TimelineEventRendering';\n }\n //region Default config\n static get defaultConfig() {\n return {\n /**\n * When `true`, events are sized and positioned based on rowHeight, resourceMargin and barMargin settings.\n * Set this to `false` if you want to control height and vertical position using CSS instead.\n *\n * Note that events always get an absolute top position, but when this setting is enabled that position\n * will match row's top. To offset within the row using CSS, use `transform : translateY(y)`.\n *\n * @config {Boolean}\n * @default\n * @category Scheduled events\n */\n managedEventSizing : true,\n /**\n * The CSS class added to an event/assignment when it is newly created\n * in the UI and unsynced with the server.\n * @config {String}\n * @default\n * @private\n * @category CSS\n */\n generatedIdCls : 'b-sch-dirty-new',\n /**\n * The CSS class added to an event when it has unsaved modifications\n * @config {String}\n * @default\n * @private\n * @category CSS\n */\n dirtyCls : 'b-sch-dirty',\n /**\n * The CSS class added to an event when it is currently committing changes\n * @config {String}\n * @default\n * @private\n * @category CSS\n */\n committingCls : 'b-sch-committing',\n /**\n * The CSS class added to an event/assignment when it ends outside of the visible time range.\n * @config {String}\n * @default\n * @private\n * @category CSS\n */\n endsOutsideViewCls : 'b-sch-event-endsoutside',\n /**\n * The CSS class added to an event/assignment when it starts outside of the visible time range.\n * @config {String}\n * @default\n * @private\n * @category CSS\n */\n startsOutsideViewCls : 'b-sch-event-startsoutside',\n /**\n * The CSS class added to an event/assignment when it is not draggable.\n * @config {String}\n * @default\n * @private\n * @category CSS\n */\n fixedEventCls : 'b-sch-event-fixed'\n };\n }\n static configurable = {\n /**\n * Controls how much space to leave between stacked event bars in px.\n *\n * Value will be constrained by half the row height in horizontal mode.\n *\n * @prp {Number}\n * @default\n * @category Scheduled events\n */\n barMargin : 10,\n /**\n * Specify `true` to force rendered events/tasks to fill entire ticks. This only affects rendering, start\n * and end dates retain their value on the data level.\n *\n * When enabling `fillTicks` you should consider either disabling EventDrag/TaskDrag and EventResize/TaskResize,\n * or enabling {@link Scheduler/view/mixin/TimelineDateMapper#config-snap}. Otherwise their behaviour might not\n * be what a user expects.\n *\n * @prp {Boolean}\n * @default\n * @category Scheduled events\n */\n fillTicks : false,\n resourceMargin : null,\n /**\n * Event color used by default. Events and resources can specify their own color, with priority order being:\n * Event -> Resource -> Scheduler default.\n *\n * Specify `null` to not apply a default color and take control using custom CSS (an easily overridden color\n * will be used to make sure events are still visible).\n *\n * For available standard colors, see {@link Scheduler.model.mixin.EventModelMixin#typedef-EventColor}.\n *\n * @prp {EventColor} eventColor\n * @category Scheduled events\n */\n eventColor : 'green',\n /**\n * Event style used by default. Events and resources can specify their own style, with priority order being:\n * Event -> Resource -> Scheduler default. Determines the appearance of the event by assigning a CSS class\n * to it. Available styles are:\n *\n * * `'plain'` (default) - flat look\n * * `'border'` - has border in darker shade of events color\n * * `'colored'` - has colored text and wide left border in same color\n * * `'hollow'` - only border + text until hovered\n * * `'line'` - as a line with the text below it\n * * `'dashed'` - as a dashed line with the text below it\n * * `'minimal'` - as a thin line with small text above it\n * * `'rounded'` - minimalistic style with rounded corners\n * * `null` - do not apply a default style and take control using custom CSS (easily overridden basic styling will be used).\n *\n * In addition, there are two styles intended to be used when integrating with Bryntum Calendar. To match\n * the look of Calendar events, you can use:\n *\n * * `'calendar'` - a variation of the \"colored\" style matching the default style used by Calendar\n * * `'interday'` - a variation of the \"plain\" style, for interday events\n *\n * @prp {'plain'|'border'|'colored'|'hollow'|'line'|'dashed'|'minimal'|'rounded'|'calendar'|'interday'|null}\n * @default\n * @category Scheduled events\n */\n eventStyle : 'plain',\n /**\n * The width/height (depending on vertical / horizontal mode) of all the time columns.\n *\n * There is a limit for the tick size value. Its minimal allowed value is calculated so ticks would fit the\n * available space. Only applicable when {@link Scheduler.view.TimelineBase#config-forceFit} is set to\n * `false`. To set `tickSize` freely skipping that limitation please set\n * {@link Scheduler.view.TimelineBase#config-suppressFit} to `true`.\n *\n * @prp {Number}\n * @category Scheduled events\n */\n tickSize : null\n };\n //endregion\n //region Settings\n updateFillTicks(fillTicks) {\n if (!this.isConfiguring) {\n this.timeAxis.forceFullTicks = fillTicks && this.snap;\n this.refreshWithTransition();\n this.trigger('stateChange');\n }\n }\n changeBarMargin(margin) {\n ObjectHelper.assertNumber(margin, 'barMargin');\n // Run changeResourceMargin if its default value is null, to make sure resourceMarginObject is available\n if (this._resourceMargin == null) {\n this.changeResourceMargin(margin);\n }\n // bar margin should not exceed half of the row height\n if (this.isHorizontal && this.rowHeight) {\n return Math.min(Math.ceil(this.rowHeight / 2), margin);\n }\n return margin;\n }\n updateBarMargin() {\n if (this.rendered) {\n this.currentOrientation.onBeforeRowHeightChange();\n this.refreshWithTransition();\n this.trigger('stateChange');\n }\n }\n // Documented in SchedulerEventRendering to not show up in Gantt docs\n get resourceMargin() {\n return this._resourceMargin == null ? this.barMargin : this._resourceMargin;\n }\n changeResourceMargin(margin) {\n const me = this;\n if (typeof margin === 'number') {\n // resource margin should not exceed half of the row height\n if (me.isHorizontal && me.rowHeight) {\n margin = Math.min(Math.ceil(me.rowHeight / 2), margin);\n }\n me.resourceMarginObject = {\n start : margin,\n end : margin,\n total : margin * 2\n };\n return margin;\n }\n if (!margin?.start) {\n margin.start = 0;\n }\n if (!margin?.end) {\n margin.end = 0;\n }\n // resource margin should not exceed half of the row height\n if (me.isHorizontal && me.rowHeight) {\n margin.start = me.rowHeight < margin.start + margin.end ? Math.ceil(me.rowHeight / 2) : margin.start;\n margin.end = me.rowHeight < margin.start + margin.end ? Math.ceil(me.rowHeight / 2) : margin.end;\n }\n me.resourceMarginObject = ObjectHelper.assign({\n total : margin.start + margin.end\n }, margin);\n return margin;\n }\n updateResourceMargin() {\n const me = this;\n if (me.rendered) {\n me.currentOrientation.onBeforeRowHeightChange();\n me.refreshWithTransition();\n }\n }\n changeTickSize(width) {\n ObjectHelper.assertNumber(width, 'tickSize');\n return width;\n }\n updateTickSize(width) {\n this.timeAxisViewModel.tickSize = width;\n }\n get tickSize() {\n return this.timeAxisViewModel.tickSize;\n }\n /**\n * Predefined event colors, useful in combos etc.\n * @type {String[]}\n * @category Scheduled events\n */\n static get eventColors() {\n // These are the colors available by default for Scheduler and Gantt\n // They classes are located in eventstyles.scss\n return ['red', 'pink', 'purple', 'magenta', 'violet', 'indigo', 'blue', 'cyan', 'teal', 'green', 'gantt-green', 'lime', 'yellow', 'orange', 'deep-orange', 'gray', 'light-gray'];\n }\n /**\n * Predefined event styles , useful in combos etc.\n * @type {String[]}\n * @category Scheduled events\n */\n static get eventStyles() {\n return ['plain', 'border', 'hollow', 'colored', 'line', 'dashed', 'minimal', 'rounded'];\n }\n updateEventStyle(style) {\n if (!this.isConfiguring) {\n this.refreshWithTransition();\n this.trigger('stateChange');\n }\n }\n updateEventColor(color) {\n if (!this.isConfiguring) {\n this.refreshWithTransition();\n this.trigger('stateChange');\n }\n }\n //endregion\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "import Base from '../../../Core/Base.js';\nimport Rectangle from '../../../Core/helper/util/Rectangle.js';\nimport DateHelper from '../../../Core/helper/DateHelper.js';\nimport Scroller from '../../../Core/helper/util/Scroller.js';\nimport DomHelper from '../../../Core/helper/DomHelper.js';\nimport TimelineZoomable from './TimelineZoomable.js';\n/**\n * @module Scheduler/view/mixin/TimelineScroll\n */\nconst\n maintainVisibleStart = {\n maintainVisibleStart : true\n },\n defaultScrollOptions = {\n block : 'nearest'\n };\n/**\n * Functions for scrolling to events, dates etc.\n *\n * Note: the mixin applies {@link Scheduler/view/mixin/TimelineZoomable} mixin if it's not applied yet.\n *\n * @mixin\n */\nexport default Target => class TimelineScroll extends (Target || Base).mixin(\n // the mixin overrides TimelineZoomable method so should be applied after it\n TimelineZoomable\n) {\n static $name = 'TimelineScroll';\n static configurable = {\n /**\n * This config defines the size of the start and end invisible parts of the timespan when {@link #config-infiniteScroll} set to `true`.\n *\n * It should be provided as a coefficient, which will be multiplied by the size of the scheduling area.\n *\n * For example, if `bufferCoef` is `5` and the panel view width is 200px then the timespan will be calculated to\n * have approximately 1000px (`5 * 200`) to the left and 1000px to the right of the visible area, resulting\n * in 2200px of totally rendered content.\n *\n * @config {Number}\n * @category Infinite scroll\n * @default\n */\n bufferCoef : 5,\n /**\n * This config defines the scroll limit, which, when exceeded will cause a timespan shift.\n * The limit is calculated as the `panelWidth * {@link #config-bufferCoef} * bufferThreshold`. During scrolling, if the left or right side\n * has less than that of the rendered content - a shift is triggered.\n *\n * For example if `bufferCoef` is `5` and the panel view width is 200px and `bufferThreshold` is 0.2, then the timespan\n * will be shifted when the left or right side has less than 200px (5 * 200 * 0.2) of content.\n * @config {Number}\n * @category Infinite scroll\n * @default\n */\n bufferThreshold : 0.2,\n /**\n * Configure as `true` to automatically adjust the panel timespan during scrolling in the time dimension,\n * when the scroller comes close to the start/end edges.\n *\n * The actually rendered timespan in this mode (and thus the amount of HTML in the DOM) is calculated based\n * on the {@link #config-bufferCoef} option, and is thus not controlled by the {@link Scheduler/view/TimelineBase#config-startDate}\n * and {@link Scheduler/view/TimelineBase#config-endDate} configs. The moment when the timespan shift\n * happens is determined by the {@link #config-bufferThreshold} value.\n *\n * To specify initial point in time to view, supply the\n * {@link Scheduler/view/TimelineBase#config-visibleDate} config.\n *\n * @config {Boolean} infiniteScroll\n * @category Infinite scroll\n * @default\n */\n infiniteScroll : false\n };\n //region TimelineZoomable injections\n onZoomToSpan({ startDate }) {\n if (this.infiniteScroll) {\n this.scrollToDate(startDate, { block : 'start' });\n }\n }\n calculateOptimalDateRange(centerDate, viewportSize, viewPreset) {\n if (this.infiniteScroll) {\n if (this.zoomKeepsOriginalTimespan) {\n const { startDate, endDate } = this.timeAxis;\n return { startDate, endDate };\n }\n return this.calculateInfiniteScrollingDateRange(centerDate, true);\n }\n return super.calculateOptimalDateRange(...arguments);\n }\n //endregion TimelineZoomable injections\n initScroll() {\n const\n me = this,\n {\n isHorizontal,\n visibleDate\n } = me;\n super.initScroll();\n const { scrollable } = isHorizontal ? me.timeAxisSubGrid : me;\n scrollable.ion({\n scroll : 'onTimelineScroll',\n thisObj : me\n });\n // Ensure the TimeAxis starts life at the correct size with buffer zones\n // outside the visible window.\n if (me.infiniteScroll) {\n // If we have infiniteScroll-partners we don't reconfigure the timeAxis for each view\n // So we need to trigger timeAxisViewModel.update manually to refresh the view\n if (me.partneredWith?.values.some(partner => partner.infiniteScroll)) {\n // Use exact subpixel available space so that tick size calculation is correct.\n const availableSpace = scrollable.element.getBoundingClientRect()[me.isHorizontal ? 'width' : 'height'];\n me.timeAxisViewModel.update(availableSpace, false, true);\n }\n // no infiniteScroll partners involved - calculate & set timespan\n else {\n const\n setTimeSpanOptions = visibleDate ? { ...visibleDate, visibleDate : visibleDate.date } : { visibleDate : me.viewportCenterDate, block : 'center' },\n { startDate, endDate } = me.calculateInfiniteScrollingDateRange(setTimeSpanOptions.visibleDate, setTimeSpanOptions.block === 'center');\n // Don't ask to maintain visible start - we're initializing - there's no visible start yet.\n // If there's a visibleDate set, it will execute its scroll on paint.\n me.setTimeSpan(\n startDate,\n endDate,\n setTimeSpanOptions\n );\n }\n }\n }\n /**\n * A {@link Core.helper.util.Scroller} which scrolls the time axis in whatever {@link Scheduler.view.Scheduler#config-mode} the\n * Scheduler is configured, either `horizontal` or `vertical`.\n *\n * The width and height dimensions are replaced by `size`. So this will expose the following properties:\n *\n * - `clientSize` The size of the time axis viewport.\n * - `scrollSize` The full scroll size of the time axis viewport\n * - `position` The position scrolled to along the time axis viewport\n *\n * @property {Core.helper.util.Scroller}\n * @readonly\n * @category Scrolling\n */\n get timelineScroller() {\n const me = this;\n if (!me.scrollInitialized) {\n me.initScroll();\n }\n return me._timelineScroller || (me._timelineScroller = new TimelineScroller({\n widget : me,\n scrollable : me.isHorizontal ? me.timeAxisSubGrid.scrollable : me.scrollable,\n isHorizontal : me.isHorizontal\n }));\n }\n /**\n * Used to calculate the range to extend the TimeAxis to during infinite scroll.\n * @param {Date} date\n * @param {Boolean} centered\n * @param {Scheduler.preset.ViewPreset} [preset] Optional, the preset for which to calculate the range.\n * defaults to the currently active ViewPreset\n * @returns {Object} `{ startDate, endDate }`\n * @internal\n */\n calculateInfiniteScrollingDateRange(date, centered, preset = this.timeAxisViewModel.viewPreset) {\n const\n {\n timeAxis,\n availableSpace\n } = this.timeAxisViewModel,\n // If the TimeAxis is filtered, the range we ask for to get the required number of\n // *visible* ticks will have to be larger by this factor which is the ration of\n // real ticks to visible ticks.\n factor = Math.ceil(timeAxis.allCount / timeAxis.count),\n {\n bufferCoef\n } = this,\n {\n leafUnit,\n leafIncrement,\n topUnit,\n topIncrement,\n tickSize\n } = preset,\n // If the units are the same and the increments are integer, snap to the top header's unit & increment\n useTop = leafUnit === topUnit && Math.round(topIncrement) === topIncrement && Math.round(leafIncrement) === leafIncrement,\n snapSize = useTop ? topIncrement : leafIncrement,\n snapUnit = useTop ? topUnit : leafUnit;\n // if provided date is the central point on the timespan\n if (centered) {\n const halfSpan = Math.ceil((availableSpace * bufferCoef + (availableSpace / 2)) / tickSize) * factor;\n return {\n startDate : timeAxis.floorDate(DateHelper.add(date, -halfSpan * leafIncrement, leafUnit), false, snapUnit, snapSize),\n endDate : timeAxis.ceilDate(DateHelper.add(date, halfSpan * leafIncrement, leafUnit), false, snapUnit, snapSize)\n };\n }\n // if provided date is the left coordinate of the visible timespan area\n else {\n const bufferedTicks = Math.ceil(availableSpace * bufferCoef / tickSize) * factor;\n return {\n startDate : timeAxis.floorDate(DateHelper.add(date, -bufferedTicks * leafIncrement, leafUnit), false, snapUnit, snapSize),\n endDate : timeAxis.ceilDate(DateHelper.add(date, Math.ceil((availableSpace / tickSize + bufferedTicks) * leafIncrement), leafUnit), false, snapUnit, snapSize)\n };\n }\n }\n doDestroy() {\n this._timelineScroller?.destroy();\n super.doDestroy();\n }\n onTimelineScroll() {\n // On scroll, check if we are nearing the end to see if the sliding window needs moving.\n // onSchedulerHorizontalScroll is delayed to animationFrame\n if (this.infiniteScroll) {\n this.checkTimeAxisScroll();\n }\n }\n checkTimeAxisScroll() {\n const\n me = this,\n scrollable = me.timelineScroller,\n {\n position,\n clientSize\n } = scrollable,\n requiredSize = clientSize * me.bufferCoef,\n limit = requiredSize * me.bufferThreshold,\n maxScroll = scrollable.maxPosition,\n { style } = me.timeAxisSubGrid.virtualScrollerElement,\n closeToStart = position < limit,\n closeToEnd = maxScroll - position < limit;\n // if scroll violates limits let's shift timespan\n if (closeToStart || closeToEnd) {\n // If they were dragging the thumb, this must be a one-time thing. They *must* lose contact\n // with the thumb when the window shift occurs and the thumb zooms back to the center.\n // Changing for a short time to overflow:hidden terminates the thumb drag.\n // They can start again from the center, the reset happens very quickly.\n style.overflow = 'hidden';\n style.pointerEvents = 'none';\n // Avoid content height changing when scrollbar disappears\n style.paddingBottom = `${DomHelper.scrollBarWidth}px`;\n me.setTimeout(() => {\n style.overflow = '';\n style.paddingBottom = '';\n style.pointerEvents = '';\n }, 100);\n let datePos;\n // Both ends too near, we will be centered in the new, larger date range\n if (closeToStart && closeToEnd) {\n // Choose center\n datePos = scrollable.position + clientSize / 2;\n }\n else if (closeToStart) {\n // Keep the end date in view\n datePos = scrollable.position + clientSize;\n }\n else {\n // keep the start date in view\n datePos = scrollable.position;\n }\n // Round using floor so that the tick's time will be in working time.\n // The centered param is true if *both* ends are too close for comfort.\n me.shiftToDate(me.getDateFromCoordinate(datePos, 'floor', true, false, true), closeToStart && closeToEnd);\n }\n }\n shiftToDate(date, centered) {\n const newRange = this.calculateInfiniteScrollingDateRange(date, centered);\n // this will trigger a refresh (`refreshKeepingScroll`) which will perform `restoreScrollState` and sync the scrolling position\n this.setTimeSpan(newRange.startDate, newRange.endDate, centered ? (centered === true ? {\n visibleDate : this.viewportCenterDate,\n block : 'center'\n } : centered) : maintainVisibleStart);\n }\n // If we change to infinite scrolling dynamically, it should create the buffer zones.\n updateInfiniteScroll(infiniteScroll) {\n // At construction time, this is handled in initScroll.\n // This is just here to handle dynamic updates.\n if (!this.isConfiguring && infiniteScroll) {\n this.checkTimeAxisScroll();\n }\n }\n //region Scroll to date\n /**\n * Scrolls the timeline \"tick\" encapsulating the passed `Date` into view according to the passed options.\n * @param {Date} date The date to which to scroll the timeline\n * @param {BryntumScrollOptions} [options] How to scroll.\n * @returns {Promise} A Promise which resolves when the scrolling is complete.\n * @category Scrolling\n */\n async scrollToDate(date, options = {}) {\n const\n me = this,\n {\n timeAxis,\n visibleDateRange,\n infiniteScroll\n } = me,\n {\n unit,\n increment\n } = timeAxis,\n edgeOffset = options.edgeOffset || 0,\n visibleWidth = DateHelper.ceil(visibleDateRange.endDate, increment + ' ' + unit) - DateHelper.floor(visibleDateRange.startDate, increment + ' ' + unit),\n direction = date > me.viewportCenterDate ? 1 : -1,\n extraScroll = (infiniteScroll ? visibleWidth * me.bufferCoef * me.bufferThreshold : (options.block === 'center' ? visibleWidth / 2 : (edgeOffset ? me.getMilliSecondsPerPixelForZoomLevel(me.viewPreset) * edgeOffset : 0))) * direction,\n visibleDate = new Date(date.getTime() + extraScroll),\n shiftDirection = visibleDate > timeAxis.endDate ? 1 : visibleDate < timeAxis.startDate ? -1 : 0;\n // Required visible date outside TimeAxis and infinite scrolling, that has opinions about how\n // much scroll range has to be created after the target date.\n if (shiftDirection && me.infiniteScroll) {\n // need to wait for a possible scroll event to happen, which will update the timeline's scroll state\n await me.nextAnimationFrame();\n me.shiftToDate(new Date(date - extraScroll), null, true);\n // shift to date could trigger a native browser async scroll out of our control. If a scroll\n // happens during scrollToCoordinate, the scrolling is cancelled so we wait a bit here\n await me.nextAnimationFrame();\n }\n const\n scrollerViewport = me.timelineScroller.viewport,\n localCoordinate = me.getCoordinateFromDate(date, true),\n // Available space can be less than tick size (Export.t.js in Gantt)\n width = Math.min(me.timeAxisViewModel.tickSize, me.timeAxisViewModel.availableSpace),\n target = me.isHorizontal\n // In RTL coordinate is for the right edge of the tick, so we need to subtract width\n ? new Rectangle(me.getCoordinateFromDate(date, false) - (me.rtl ? width : 0), scrollerViewport.y, width, scrollerViewport.height)\n : new Rectangle(scrollerViewport.x, me.getCoordinateFromDate(date, false), scrollerViewport.width, me.timeAxisViewModel.tickSize);\n await me.scrollToCoordinate(localCoordinate, target, date, options);\n }\n /**\n * Scrolls to current time.\n * @param {BryntumScrollOptions} [options] How to scroll.\n * @returns {Promise} A Promise which resolves when the scrolling is complete.\n * @category Scrolling\n */\n scrollToNow(options = {}) {\n return this.scrollToDate(new Date(), options);\n }\n /**\n * Used by {@link #function-scrollToDate} to scroll to correct coordinate.\n * @param {Number} localCoordinate Coordinate to scroll to\n * @param {Element|Core.helper.util.Rectangle} target The target\n * @param {Date} date Date to scroll to, used for reconfiguring the time axis\n * @param {BryntumScrollOptions} [options] How to scroll.\n * @returns {Promise} A Promise which resolves when the scrolling is complete.\n * @private\n * @category Scrolling\n */\n async scrollToCoordinate(localCoordinate, target, date, options = {}) {\n const me = this;\n // Not currently have this date in a timeaxis. Ignore negative scroll in weekview, it can be just 'filtered' with\n // startTime/endTime config\n if (localCoordinate < 0) {\n // adjust the timeaxis first\n const\n visibleSpan = me.endDate - me.startDate,\n { unit, increment } = me.timeAxis,\n newStartDate = DateHelper.floor(new Date(date.getTime() - (visibleSpan / 2)), increment + ' ' + unit),\n newEndDate = DateHelper.add(newStartDate, visibleSpan);\n // We're trying to reconfigure time span to current dates, which means we are as close to center as it\n // could be. Do nothing then.\n // covered by 1102_panel_api\n if (newStartDate - me.startDate !== 0 && newEndDate - me.endDate !== 0) {\n await me.setTimeSpan(newStartDate, newEndDate);\n return me.scrollToDate(date, options);\n }\n return;\n }\n await me.timelineScroller.scrollIntoView(target, options);\n // Horizontal scroll is triggered on next frame in SubGrid.js, view is not up to date yet. Resolve on next frame\n return !me.isDestroyed && me.nextAnimationFrame();\n }\n //endregion\n //region Relative scrolling\n // These methods are important to users because although they are mixed into the top level Grid/Scheduler,\n // for X scrolling the explicitly target the SubGrid that holds the scheduler.\n /**\n * Get/set the `scrollLeft` value of the SubGrid that holds the scheduler.\n *\n * This may be __negative__ when the writing direction is right-to-left.\n * @property {Number}\n * @category Scrolling\n */\n set scrollLeft(left) {\n this.timeAxisSubGrid.scrollable.element.scrollLeft = left;\n }\n get scrollLeft() {\n return this.timeAxisSubGrid.scrollable.element.scrollLeft;\n }\n /**\n * Get/set the writing direction agnostic horizontal scroll position.\n *\n * This is always the __positive__ offset from the scroll origin whatever the writing\n * direction in use.\n *\n * Applies to the SubGrid that holds the scheduler\n * @property {Number}\n * @category Scrolling\n */\n set scrollX(x) {\n this.timeAxisSubGrid.scrollable.x = x;\n }\n get scrollX() {\n return this.timeAxisSubGrid.scrollable.x;\n }\n /**\n * Get/set vertical scroll\n * @property {Number}\n * @category Scrolling\n */\n set scrollTop(top) {\n this.scrollable.y = top;\n }\n get scrollTop() {\n return this.scrollable.y;\n }\n /**\n * Horizontal scrolling. Applies to the SubGrid that holds the scheduler\n * @param {Number} x\n * @param {BryntumScrollOptions|Boolean} [options] How to scroll. May be passed as `true` to animate.\n * @returns {Promise} A promise which is resolved when the scrolling has finished.\n * @category Scrolling\n */\n scrollHorizontallyTo(coordinate, options = true) {\n return this.timeAxisSubGrid.scrollable.scrollTo(coordinate, null, options);\n }\n /**\n * Vertical scrolling\n * @param {Number} y\n * @param {BryntumScrollOptions|Boolean} [options] How to scroll. May be passed as `true` to animate.\n * @returns {Promise} A promise which is resolved when the scrolling has finished.\n * @category Scrolling\n */\n scrollVerticallyTo(y, options = true) {\n return this.scrollable.scrollTo(null, y, options);\n }\n /**\n * Scrolls the subgrid that contains the scheduler\n * @param {Number} x\n * @param {BryntumScrollOptions|Boolean} [options] How to scroll. May be passed as `true` to animate.\n * @returns {Promise} A promise which is resolved when the scrolling has finished.\n * @category Scrolling\n */\n scrollTo(x, options = true) {\n return this.timeAxisSubGrid.scrollable.scrollTo(x, null, options);\n }\n //endregion\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n// Internal class used to interrogate and manipulate the timeline scroll position.\n// This delegates all operations to the appropriate Scroller, horizontal or vertical.\nclass TimelineScroller extends Scroller {\n static get configurable() {\n return {\n position : null,\n x : null,\n y : null\n };\n }\n // This class is passive about configuring the element.\n // It has no opinions about *how* the overflow is handled.\n updateOverflowX() {}\n updateOverflowY() {}\n onScroll(e) {\n super.onScroll(e);\n this._position = null;\n }\n syncPartners(force) {\n this.scrollable.syncPartners(force);\n }\n updatePosition(position) {\n this.scrollable[this.isHorizontal ? 'x' : 'y'] = position;\n }\n get viewport() {\n return this.scrollable.viewport;\n }\n get position() {\n return this._position = this.scrollable[this.isHorizontal ? 'x' : 'y'];\n }\n get clientSize() {\n return this.scrollable[`client${this.isHorizontal ? 'Width' : 'Height'}`];\n }\n get scrollSize() {\n return this.scrollable[`scroll${this.isHorizontal ? 'Width' : 'Height'}`];\n }\n get maxPosition() {\n return this.scrollable[`max${this.isHorizontal ? 'X' : 'Y'}`];\n }\n scrollTo(position, options) {\n return this.isHorizontal ? this.scrollable.scrollTo(position, null, options) : this.scrollable.scrollTo(null, position, options);\n }\n scrollBy(xDelta = 0, yDelta = 0, options = defaultScrollOptions) {\n // Use the correct delta by default, but if it's zero, accommodate axis error.\n return this.isHorizontal ? this.scrollable.scrollBy(xDelta || yDelta, 0, options) : this.scrollable.scrollBy(0, yDelta || xDelta, options);\n }\n scrollIntoView() {\n return this.scrollable.scrollIntoView(...arguments);\n }\n // We accommodate mistakes. Setting X and Y sets the appropriate scroll axis position\n changeX(x) {\n this.position = x;\n }\n changeY(y) {\n this.position = y;\n }\n get x() {\n return this.position;\n }\n set x(x) {\n this.scrollable[this.isHorizontal ? 'x' : 'y'] = x;\n }\n get y() {\n return this.position;\n }\n set y(y) {\n this.scroller[this.isHorizontal ? 'x' : 'y'] = y;\n }\n get clientWidth() {\n return this.clientSize;\n }\n get clientHeight() {\n return this.clientSize;\n }\n get scrollWidth() {\n return this.scrollSize;\n }\n get scrollHeight() {\n return this.scrollSize;\n }\n get maxX() {\n return this.maxPosition;\n }\n get maxY() {\n return this.maxPosition;\n }\n}\n", "import Base from '../../../Core/Base.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\n/**\n * @module Scheduler/view/mixin/TimelineState\n */\nconst copyProperties = [\n 'barMargin'\n];\n/**\n * Mixin for Timeline base that handles state. It serializes the following timeline properties:\n *\n * * barMargin\n * * zoomLevel\n *\n * See {@link Grid.view.mixin.GridState} and {@link Core.mixin.State} for more information on state.\n *\n * @mixin\n */\nexport default Target => class TimelineState extends (Target || Base) {\n static get $name() {\n return 'TimelineState';\n }\n /**\n * Gets or sets timeline's state. Check out {@link Scheduler.view.mixin.TimelineState} mixin for details.\n * @member {Object} state\n * @property {Object[]} state.columns\n * @property {Number} state.rowHeight\n * @property {Object} state.scroll\n * @property {Number} state.scroll.scrollLeft\n * @property {Number} state.scroll.scrollTop\n * @property {Array} state.selectedRecords\n * @property {String} state.style\n * @property {String} state.selectedCell\n * @property {Object} state.store\n * @property {Object} state.store.sorters\n * @property {Object} state.store.groupers\n * @property {Object} state.store.filters\n * @property {Object} state.subGrids\n * @property {Number} state.barMargin\n * @property {Number} state.zoomLevel\n * @category State\n */\n /**\n * Get timeline's current state for serialization. State includes rowHeight, headerHeight, readOnly, selectedCell,\n * selectedRecordId, column states and store state etc.\n * @returns {Object} State object to be serialized\n * @private\n */\n getState() {\n const\n me = this,\n state = ObjectHelper.copyProperties(super.getState(), me, copyProperties);\n state.zoomLevel = me.zoomLevel;\n state.zoomLevelOptions = {\n startDate : me.startDate,\n endDate : me.endDate,\n // With infinite scroll reading viewportCenterDate too early will lead to exception\n centerDate : !me.infiniteScroll || me.timeAxisViewModel.availableSpace ? me.viewportCenterDate : undefined,\n width : me.tickSize\n };\n return state;\n }\n /**\n * Apply previously stored state.\n * @param {Object} state\n * @private\n */\n applyState(state) {\n const me = this;\n me.suspendRefresh();\n ObjectHelper.copyProperties(me, state, copyProperties);\n super.applyState(state);\n if (state.zoomLevel != null) {\n // Do not restore left scroll, infinite scroll should do all the work\n if (me.infiniteScroll) {\n if (state?.scroll?.scrollLeft) {\n state.scroll.scrollLeft = {};\n }\n }\n if (me.isPainted) {\n me.zoomToLevel(state.zoomLevel, state.zoomLevelOptions);\n }\n else {\n me._zoomAfterPaint = { zoomLevel : state.zoomLevel, zoomLevelOptions : state.zoomLevelOptions };\n }\n }\n me.resumeRefresh(true, false);\n }\n onInternalPaint(...args) {\n super.onInternalPaint(...args);\n if (this._zoomAfterPaint) {\n const { zoomLevel, zoomLevelOptions } = this._zoomAfterPaint;\n this.zoomToLevel(zoomLevel, zoomLevelOptions);\n delete this._zoomAfterPaint;\n }\n }\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "import GridHeader from '../../Grid/view/Header.js';\n/**\n * @module Scheduler/view/Header\n */\n/**\n * Custom header subclass which handles the existence of the special TimeAxisColumn\n *\n * @extends Grid/view/Header\n * @private\n */\nexport default class Header extends GridHeader {\n static get $name() {\n return 'SchedulerHeader';\n }\n refreshContent() {\n // Only render contents into the header once as it contains the special rendering of the TimeAxisColumn\n // In case ResizeObserver polyfill is used headers element will have resize monitors inserted and we should\n // take that into account\n // https://github.com/bryntum/support/issues/3444\n if (!this.headersElement?.querySelector('.b-sch-timeaxiscolumn')) {\n super.refreshContent();\n }\n }\n}\nHeader._$name = 'Header';", "import SubGrid from '../../Grid/view/SubGrid.js';\nimport Header from './Header.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\n/**\n * @module Scheduler/view/TimeAxisSubGrid\n */\n/**\n * Widget that encapsulates the SubGrid part of the scheduler which houses the timeline view.\n * @extends Grid/view/SubGrid\n * @private\n */\nexport default class TimeAxisSubGrid extends SubGrid {\n static get $name() {\n return 'TimeAxisSubGrid';\n }\n // Factoryable type name\n static get type() {\n return 'timeaxissubgrid';\n }\n static get configurable() {\n return {\n // A Scheduler's SubGrid doesn't accept external columns moving in\n sealedColumns : true,\n // Use Scheduler's Header class\n headerClass : Header\n };\n }\n startConfigure(config) {\n const { grid : scheduler } = config;\n // Scheduler references its TimeAxisSubGrid instance through this property.\n scheduler.timeAxisSubGrid = this;\n super.startConfigure(config);\n if (scheduler.isHorizontal) {\n config.header = {\n cls : {\n 'b-sticky-headers' : scheduler.stickyHeaders\n }\n };\n // We don't use what the GridSubGrids mixin tells us to.\n // We use the Scheduler's Header class.\n delete config.headerClass;\n }\n // If user have not specified a width or flex for scheduler region, default to flex=1\n if (!('flex' in config || 'width' in config)) {\n config.flex = 1;\n }\n }\n changeScrollable() {\n const\n me = this,\n scrollable = super.changeScrollable(...arguments);\n // TimeAxisSubGrid's X axis is stretched by its canvas.\n // We don't need the Scroller's default stretching implementation.\n if (scrollable) {\n Object.defineProperty(scrollable, 'scrollWidth', {\n get() {\n return this.element?.scrollWidth ?? 0;\n },\n set() {\n me.positionDirty = true;\n // Setting the scroll width to be wide just updates the canvas side in Scheduler.\n // We do not need the Scroller's default stretcher element to be added.\n // Note that \"me\" here is the TimeAxisSubGrid, so we are calling Scheduler.\n me.grid.updateCanvasSize();\n }\n });\n }\n return scrollable;\n }\n handleHorizontalScroll(addCls = true) {\n // Swallow scroll syncing calls that happen during view preset changes, that process triggers multiple when\n // it first changes tickWidth, then scrolls to center and then an additional sync on scroll end\n if (!this.grid._viewPresetChanging) {\n super.handleHorizontalScroll(addCls);\n }\n }\n /**\n * This is an event handler triggered when the TimeAxisSubGrid changes size.\n * Its height changes when content height changes, and that is not what we are\n * interested in here. If the *width* changes, that means the visible viewport\n * has changed size.\n * @param {HTMLElement} element\n * @param {Number} width\n * @param {Number} height\n * @param {Number} oldWidth\n * @param {Number} oldHeight\n * @private\n */\n onInternalResize(element, width, height, oldWidth, oldHeight) {\n const me = this;\n // Call super first, to clear cached width / height\n super.onInternalResize(...arguments);\n // We, as the TimeAxisSubGrid dictate the scheduler viewport width\n if (me.isPainted && width !== oldWidth) {\n const\n scheduler = me.grid,\n bodyHeight = scheduler._bodyRectangle.height,\n // Avoid ResizeObserver errors when this operation may create a scrollbar\n shouldSuspend = me.monitorResize && DomHelper.scrollBarWidth && width < oldWidth;\n if (shouldSuspend) {\n me.monitorResize = false;\n }\n scheduler.onSchedulerViewportResize(width, bodyHeight, oldWidth, bodyHeight);\n // Revert to monitoring asap.\n // Changed to revert earlier because of issues when changing width programmatically\n // This is to avoid \"ResizeObserver loop completed with undelivered notifications.\"\n if (shouldSuspend) {\n me.queueMicrotask(() => me.monitorResize = true);\n }\n }\n }\n get headerScrollWidth() {\n return this.grid.isVertical ? super.headerScrollWidth : this.grid.timeAxisViewModel.totalSize;\n }\n // When restoring state we need to update time axis size immediately, resize event is not triggered fast enough to\n // restore center date consistently\n clearWidthCache() {\n super.clearWidthCache();\n // Check if we are in horizontal mode\n if (this.owner.isHorizontal) {\n this.owner.updateViewModelAvailableSpace(this.width);\n }\n }\n async expand() {\n const { owner } = this;\n await super.expand();\n if (owner.isPainted) {\n owner.timeAxisViewModel.update(this.width, false, true);\n }\n }\n}\n// Register this widget type with its Factory\nTimeAxisSubGrid.initClass();\nTimeAxisSubGrid._$name = 'TimeAxisSubGrid';", "import Base from '../../Core/Base.js';\nimport GlobalEvents from '../../Core/GlobalEvents.js';\nimport GridBase from '../../Grid/view/GridBase.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\nimport FunctionHelper from '../../Core/helper/FunctionHelper.js';\nimport ResizeMonitor from '../../Core/helper/ResizeMonitor.js';\nimport Collection from '../../Core/util/Collection.js';\nimport IdHelper from '../../Core/helper/IdHelper.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport VersionHelper from '../../Core/helper/VersionHelper.js';\nimport TimeAxis from '../data/TimeAxis.js';\nimport TimeAxisViewModel from './model/TimeAxisViewModel.js';\nimport TimelineDateMapper from './mixin/TimelineDateMapper.js';\nimport TimelineDomEvents from './mixin/TimelineDomEvents.js';\nimport TimelineViewPresets from './mixin/TimelineViewPresets.js';\nimport TimelineZoomable from './mixin/TimelineZoomable.js';\nimport RecurringEvents from './mixin/RecurringEvents.js';\nimport TimelineEventRendering from './mixin/TimelineEventRendering.js';\nimport TimelineScroll from './mixin/TimelineScroll.js';\nimport TimelineState from './mixin/TimelineState.js';\nimport './TimeAxisSubGrid.js';\nimport '../../Grid/feature/RegionResize.js';\nconst\n inRange = (v, r0, r1) => (r0 == null)\n ? (r1 == null || v < r1)\n : (r1 == null)\n ? v >= r0\n : (r0 < r1)\n ? (r0 <= v && v < r1) // 5 in [1, 10] (after 1 and before 10)\n : (v < r1 || r0 <= v), // 5 in [10, 1] (after 10 or before 1)\n isWorkingTime = (d, wt) => inRange(d.getDay(), wt.fromDay, wt.toDay) && inRange(d.getHours(), wt.fromHour, wt.toHour),\n emptyObject = {};\n/**\n * @module Scheduler/view/TimelineBase\n */\n/**\n * Options accepted by the Scheduler's {@link Scheduler.view.Scheduler#config-visibleDate} property.\n *\n * @typedef {Object} VisibleDate\n * @property {Date} date The date to bring into view.\n * @property {'start'|'end'|'center'|'nearest'} [block] How far to scroll the date.\n * @property {Number} [edgeOffset] edgeOffset A margin around the date to bring into view.\n * @property {AnimateScrollOptions|Boolean|Number} [animate] Set to `true` to animate the scroll by 300ms,\n * or the number of milliseconds to animate over, or an animation config object.\n */\n/**\n * Abstract base class used by timeline based components such as Scheduler and Gantt. Based on Grid, supplies a \"locked\"\n * region for columns and a \"normal\" for rendering of events etc.\n * @abstract\n *\n * @mixes Scheduler/view/mixin/TimelineDateMapper\n * @mixes Scheduler/view/mixin/TimelineDomEvents\n * @mixes Scheduler/view/mixin/TimelineEventRendering\n * @mixes Scheduler/view/mixin/TimelineZoomable\n * @mixes Scheduler/view/mixin/TimelineScroll\n * @mixes Scheduler/view/mixin/TimelineState\n * @mixes Scheduler/view/mixin/TimelineViewPresets\n * @mixes Scheduler/view/mixin/RecurringEvents\n *\n * @extends Grid/view/Grid\n */\nexport default class TimelineBase extends GridBase.mixin(\n TimelineDateMapper,\n TimelineDomEvents,\n TimelineEventRendering,\n TimelineZoomable,\n TimelineScroll,\n TimelineState,\n TimelineViewPresets,\n RecurringEvents\n) {\n //region Config\n /**\n * @prp animateTreeNodeToggle\n * @hide\n */\n static $name = 'TimelineBase';\n // Factoryable type name\n static type = 'timelinebase';\n static configurable = {\n // Not yet supported\n animateTreeNodeToggle : false,\n partnerSharedConfigs : {\n value : ['timeAxisViewModel', 'timeAxis', 'viewPreset', 'infiniteScroll'],\n $config : {\n merge : 'distinct'\n }\n },\n /**\n * Get/set startDate. Defaults to current date if none specified.\n *\n * When using {@link #config-infiniteScroll}, use {@link #config-visibleDate} to control initially visible date\n * instead.\n *\n * **Note:** If you need to set start and end date at the same time, use {@link #function-setTimeSpan} method.\n * @member {Date} startDate\n * @category Common\n */\n /**\n * The start date of the timeline (if not configure with {@link #config-infiniteScroll}).\n *\n * If omitted, and a TimeAxis has been set, the start date of the provided {@link Scheduler.data.TimeAxis} will\n * be used. If no TimeAxis has been configured, it'll use the start/end dates of the loaded event dataset. If no\n * date information exists in the event data set, it defaults to the current date and time.\n *\n * If a string is supplied, it will be parsed using\n * {@link Core/helper/DateHelper#property-defaultFormat-static DateHelper.defaultFormat}.\n *\n * When using {@link #config-infiniteScroll}, use {@link #config-visibleDate} to control initially visible date\n * instead.\n *\n * **Note:** If you need to set start and end date at the same time, use the {@link #function-setTimeSpan} method.\n * @config {Date|String}\n * @category Common\n */\n startDate : {\n $config : {\n equal : 'date'\n },\n value : null\n },\n /**\n * Get/set endDate. Defaults to startDate + default span of the used ViewPreset.\n *\n * **Note:** If you need to set start and end date at the same time, use {@link #function-setTimeSpan} method.\n * @member {Date} endDate\n * @category Common\n */\n /**\n * The end date of the timeline (if not configure with {@link #config-infiniteScroll}).\n *\n * If omitted, it will be calculated based on the {@link #config-startDate} setting and the 'defaultSpan'\n * property of the current {@link #config-viewPreset}.\n *\n * If a string is supplied, it will be parsed using\n * {@link Core/helper/DateHelper#property-defaultFormat-static DateHelper.defaultFormat}.\n *\n * **Note:** If you need to set start and end date at the same time, use the {@link #function-setTimeSpan} method.\n * @config {Date|String}\n * @category Common\n */\n endDate : {\n $config : {\n equal : 'date'\n },\n value : null\n },\n /**\n * Partners this Timeline panel with another Timeline in order to sync their region sizes (sub-grids like locked, normal will get the same width),\n * start and end dates, view preset, zoom level and scrolling position. All these values will be synced with the timeline defined as the `partner`.\n *\n * - To add a new partner dynamically see {@link #function-addPartner} method.\n * - To remove existing partner see {@link #function-removePartner} method.\n * - To check if timelines are partners see {@link #function-isPartneredWith} method.\n *\n * Column widths and hide/show state are synced between partnered schedulers when the column set is identical.\n * @config {Scheduler.view.TimelineBase}\n * @category Time axis\n */\n partner : null,\n /**\n * When set, the text in the major time axis header sticks in the scrolling viewport as long as possible.\n * @config {Boolean}\n * @default\n * @category Time axis\n */\n stickyHeaders : true,\n /**\n * A scrolling `options` object describing the scroll action, including a `date` option\n * which references a `Date`. See {@link #function-scrollToDate} for details about scrolling options.\n *\n * ```javascript\n * // The date we want in the center of the Scheduler viewport\n * myScheduler.visibleDate = {\n * date : new Date(2023, 5, 17, 12),\n * block : 'center',\n * animate : true\n * };\n * ```\n * @member {Object} visibleDate\n * @category Common\n */\n /**\n * A date to bring into view initially on the scrollable timeline.\n *\n * This may be configured as either a `Date` or a scrolling `options` object describing\n * the scroll action, including a `date` option which references a `Date`.\n *\n * See {@link #function-scrollToDate} for details about scrolling options.\n *\n * Note that if a naked `Date` is passed, it will be stored internally as a scrolling options object\n * using the following defaults:\n *\n * ```javascript\n * {\n * date : ,\n * block : 'nearest'\n * }\n * ```\n *\n * This moves the date into view by the shortest scroll, so that it just appears at an edge.\n *\n * To bring your date of interest to the center of the viewport, configure your\n * Scheduler thus:\n *\n * ```javascript\n * visibleDate : {\n * date : new Date(2023, 5, 17, 12),\n * block : 'center'\n * }\n * ```\n * @config {Date|VisibleDate}\n * @category Common\n */\n visibleDate : null,\n /**\n * CSS class to add to rendered events\n * @config {String}\n * @category CSS\n * @private\n */\n eventCls : null,\n /**\n * Set to `true` to force the time columns to fit to the available space (horizontal or vertical depends on mode).\n * Note that setting {@link #config-suppressFit} to `true`, will disable `forceFit` functionality. Zooming\n * cannot be used when `forceFit` is set.\n * @prp {Boolean}\n * @default\n * @category Time axis\n */\n forceFit : false,\n /**\n * Set to a time zone or a UTC offset. This will set the projects\n * {@link Scheduler.model.ProjectModel#config-timeZone} config accordingly. As this config is only a referer,\n * please se project's config {@link Scheduler.model.ProjectModel#config-timeZone documentation} for more\n * information.\n *\n * ```javascript\n * new Calendar(){\n * timeZone : 'America/Chicago'\n * }\n * ```\n * @prp {String|Number} timeZone\n * @category Misc\n */\n timeZone : null,\n /**\n * By default the row hover effect is not visible in the Scheduler part of the grid.\n *\n * Set this to `false` to show the hover effect in Scheduler rows.\n * @prp {Boolean} hideRowHover\n * @default true\n * @category Misc\n */\n hideRowHover : {\n $config : 'lazy',\n value : true\n }\n };\n static get defaultConfig() {\n return {\n /**\n * A valid JS day index between 0-6 (0: Sunday, 1: Monday etc.) to be considered the start day of the week.\n * When omitted, the week start day is retrieved from the active locale class.\n * @config {Number} weekStartDay\n * @category Time axis\n */\n /**\n * An object with format `{ fromDay, toDay, fromHour, toHour }` that describes the working days and hours.\n * This object will be used to populate TimeAxis {@link Scheduler.data.TimeAxis#config-include} property.\n *\n * Using it results in a non-continuous time axis. Any ticks not covered by the working days and hours will\n * be excluded. Events within larger ticks (for example if using week as the unit for ticks) will be\n * stretched to fill the gap otherwise left by the non-working hours.\n *\n * As with end dates, `toDay` and `toHour` are exclusive. Thus `toDay : 6` means that day 6 (saturday) will\n * not be included.\n *\n *\n * **NOTE:** When this feature is enabled {@link Scheduler.view.mixin.TimelineZoomable Zooming feature} is\n * not supported. It's recommended to disable zooming controls:\n *\n * ```javascript\n * new Scheduler({\n * zoomOnMouseWheel : false,\n * zoomOnTimeAxisDoubleClick : false,\n * ...\n * });\n * ```\n *\n * @prp {Object} workingTime\n * @property {Number} workingTime.fromDay Day index 0-6 (0 is Sunday)\n * @property {Number} workingTime.toDay Day index 0-6 (0 is Sunday)\n * @property {Number} workingTime.fromHour 0-23\n * @property {Number} workingTime.toHour 0-23\n * @category Time axis\n */\n workingTime : null,\n /**\n * A backing data store of 'ticks' providing the input date data for the time axis of timeline panel.\n * @member {Scheduler.data.TimeAxis} timeAxis\n * @readonly\n * @category Time axis\n */\n /**\n * A {@link Scheduler.data.TimeAxis} config object or instance, used to create a backing data store of\n * 'ticks' providing the input date data for the time axis of timeline panel. Created automatically if none\n * supplied.\n * @config {TimeAxisConfig|Scheduler.data.TimeAxis}\n * @category Time axis\n */\n timeAxis : null,\n /**\n * The backing view model for the visual representation of the time axis.\n * Either a real instance or a simple config object.\n * @private\n * @config {Scheduler.view.model.TimeAxisViewModel|TimeAxisViewModelConfig}\n * @category Time axis\n */\n timeAxisViewModel : null,\n /**\n * You can set this option to `false` to make the timeline panel start and end on the exact provided\n * {@link #config-startDate}/{@link #config-endDate} w/o adjusting them.\n * @config {Boolean}\n * @default\n * @category Time axis\n */\n autoAdjustTimeAxis : true,\n /**\n * Affects drag drop and resizing of events when {@link Scheduler/view/mixin/TimelineDateMapper#config-snap}\n * is enabled.\n *\n * If set to `true`, dates will be snapped relative to event start. e.g. for a zoom level with\n * `timeResolution = { unit: \"s\", increment: \"20\" }`, an event that starts at 10:00:03 and is dragged would\n * snap its start date to 10:00:23, 10:00:43 etc.\n *\n * When set to `false`, dates will be snapped relative to the timeAxis startDate (tick start)\n * - 10:00:03 -> 10:00:20, 10:00:40 etc.\n *\n * @config {Boolean}\n * @default\n * @category Scheduled events\n */\n snapRelativeToEventStartDate : false,\n /**\n * Set to `true` to prevent auto calculating of a minimal {@link Scheduler.view.mixin.TimelineEventRendering#property-tickSize}\n * to always fit the content to the screen size. Setting this property on `true` will disable {@link #config-forceFit} behaviour.\n * @config {Boolean}\n * @default false\n * @category Time axis\n */\n suppressFit : false,\n /**\n * CSS class to add to cells in the timeaxis column\n * @config {String}\n * @category CSS\n * @private\n */\n timeCellCls : null,\n scheduledEventName : null,\n //dblClickTime : 200,\n /**\n * A CSS class to apply to each event in the view on mouseover.\n * @config {String}\n * @category CSS\n * @private\n */\n overScheduledEventClass : null,\n // allow the panel to prevent adding the hover CSS class in some cases - during drag drop operations\n preventOverCls : false,\n /**\n * Set to `false` if you don't want event bar DOM updates to animate.\n * @prp {Boolean}\n * @default true\n * @category Scheduled events\n */\n enableEventAnimations : true,\n disableGridRowModelWarning : true,\n // does not look good with locked columns and also interferes with event animations\n animateRemovingRows : false,\n schedulerRegion : 'normal',\n transitionDuration : 200,\n // internal timer id reference\n animationTimeout : null,\n /**\n * Region to which columns are added when they have none specified\n * @config {String}\n * @default\n * @category Misc\n */\n defaultRegion : 'locked',\n /**\n * Decimal precision used when displaying durations, used by tooltips and DurationColumn.\n * Specify `false` to use raw value\n * @config {Number|Boolean}\n * @default\n * @category Common\n */\n durationDisplayPrecision : 1,\n asyncEventSuffix : 'PreCommit'\n };\n }\n timeCellSelector = null;\n updateTimeZone(timeZone) {\n if (this.project) {\n if (this.isConfiguring) {\n this.project._isConfiguringTimeZone = true;\n }\n this.project.timeZone = timeZone;\n }\n }\n get timeZone() {\n return this.project?.timeZone;\n }\n //endregion\n //region Feature hooks\n /**\n * Populates the event context menu. Chained in features to add menu items.\n * @param {Object} options Contains menu items and extra data retrieved from the menu target.\n * @param {Grid.column.Column} options.column Column for which the menu will be shown.\n * @param {Scheduler.model.EventModel} options.eventRecord The context event.\n * @param {Scheduler.model.ResourceModel} options.resourceRecord The context resource.\n * @param {Scheduler.model.AssignmentModel} options.assignmentRecord The context assignment if any.\n * @param {Object} options.items A named object to describe menu items.\n * @internal\n */\n populateEventMenu() {}\n /**\n * Populates the time axis context menu. Chained in features to add menu items.\n * @param {Object} options Contains menu items and extra data retrieved from the menu target.\n * @param {Grid.column.Column} options.column Column for which the menu will be shown.\n * @param {Scheduler.model.ResourceModel} options.resourceRecord The context resource.\n * @param {Date} options.date The Date corresponding to the mouse position in the time axis.\n * @param {Object} options.items A named object to describe menu items.\n * @internal\n */\n populateScheduleMenu() {}\n // Called when visible date range potentially changes such as when scrolling in\n // the time axis.\n internalOnVisibleDateRangeChange(range) {\n if (!this.handlingVisibleDateRangeChange) {\n const\n me = this,\n { _visibleDateRange } = me,\n dateRangeChange = !_visibleDateRange || (_visibleDateRange.startDate - range.startDate || _visibleDateRange.endDate - range.endDate);\n if (dateRangeChange) {\n me.timeView.range = range;\n me.handlingVisibleDateRangeChange = true;\n /**\n * Fired when the range of dates visible within the viewport changes. This will be when\n * scrolling along a time axis.\n *\n * __Note__ that this event will fire frequently during scrolling, so any listener\n * should probably be added with the `buffer` option to slow down the calls to your\n * handler function :\n *\n * ```javascript\n * listeners : {\n * visibleDateRangeChange({ old, new }) {\n * this.updateRangeRequired(old, new);\n * },\n * // Only call once. 300 ms after the last event was detected\n * buffer : 300\n * }\n * ```\n * @event visibleDateRangeChange\n * @param {Scheduler.view.Scheduler} source This Scheduler instance.\n * @param {Object} old The old date range\n * @param {Date} old.startDate the old start date.\n * @param {Date} old.endDate the old end date.\n * @param {Object} new The new date range\n * @param {Date} new.startDate the new start date.\n * @param {Date} new.endDate the new end date.\n */\n me.trigger('visibleDateRangeChange', {\n old : _visibleDateRange,\n new : range\n });\n me.handlingVisibleDateRangeChange = false;\n me._visibleDateRange = range;\n }\n }\n }\n // Called when visible resource range changes in vertical mode\n onVisibleResourceRangeChange() {}\n // Called when visible resource column changes in vertical mode\n onVisibleResourceColumnChange() {}\n //endregion\n //region Init\n construct(config = {}) {\n const me = this;\n super.construct(config);\n me.$firstVerticalOverflow = true;\n me.initDomEvents();\n me.currentOrientation.init();\n me.rowManager.ion({\n refresh : () => {\n me.forceLayout = false;\n }\n });\n }\n // Override from Grid.view.GridSubGrids\n createSubGrid(region, config = {}) {\n const\n me = this,\n { stickyHeaders } = me;\n // We are creating the TimeAxisSubGrid\n if (region === (me.schedulerRegion || 'normal')) {\n config.type = 'timeaxissubgrid';\n }\n // The assumption is that if we are in vertical mode, the locked SubGrid\n // is used to house the verticalTimeAxis, and so it must all be overflow:visible\n else if (region === 'locked' && stickyHeaders && me.isVertical) {\n config.scrollable = {\n overflowX : 'visible',\n overflowY : 'visible'\n };\n // It's the child of the overflowElement\n me.bodyContainer.classList.add('b-sticky-headers');\n }\n return super.createSubGrid(region, config);\n }\n doDestroy() {\n const\n me = this,\n { partneredWith, currentOrientation } = me;\n currentOrientation?.destroy();\n // Break links between this TimeLine and any partners.\n if (partneredWith) {\n partneredWith.forEach(p => {\n me.removePartner(p);\n });\n partneredWith.destroy();\n }\n else {\n me.timeAxisViewModel.destroy();\n me.timeAxis.destroy();\n }\n super.doDestroy();\n }\n startConfigure(config) {\n super.startConfigure(config);\n // When the body height changes, we must update the SchedulerViewport's height\n ResizeMonitor.addResizeListener(this.bodyContainer, this.onBodyResize.bind(this));\n // partner needs to be initialized first so that the various shared\n // configs are assigned first before we default them in.\n this.getConfig('partner');\n }\n changeStartDate(startDate) {\n if (typeof startDate === 'string') {\n startDate = DateHelper.parse(startDate);\n }\n return startDate;\n }\n onInternalPaint({ firstPaint }) {\n // Upon first paint we need to pass the forceUpdate flag in case we are sharing the TimAxisViewModel\n // with another Timeline which will already have done this.\n if (firstPaint) {\n // Take height from container element\n const\n me = this,\n scrollable = me.isHorizontal ? me.timeAxisSubGrid.scrollable : me.scrollable,\n // Use exact subpixel available space so that tick size calculation is correct.\n availableSpace = scrollable.element.getBoundingClientRect()[me.isHorizontal ? 'width' : 'height'];\n // silent = true if infiniteScroll. If that is set, TimelineScroll.initScroll which is\n // called by the base class's onInternalPaint reconfigures the TAVM when it initializes.\n me.timeAxisViewModel.update(availableSpace, me.infiniteScroll, true);\n // If infiniteScroll caused the TAVM update to be silent, force the rendering to\n // get hold of the scroll state and visible range\n if (me.infiniteScroll) {\n me.currentOrientation.doUpdateTimeView?.();\n }\n // Lazy config needs to be ingested only when the TimeAxisSubGrid exists\n me.getConfig('hideRowHover');\n }\n super.onInternalPaint(...arguments);\n }\n onSchedulerHorizontalScroll(subGrid, scrollLeft, scrollX, scrollingToCenter) {\n // rerender cells in scheduler column on horizontal scroll to display events in view\n this.currentOrientation.updateFromHorizontalScroll(scrollX);\n super.onSchedulerHorizontalScroll(subGrid, scrollLeft, scrollX, scrollingToCenter);\n }\n /**\n * Overrides initScroll from Grid, listens for horizontal scroll to do virtual event rendering\n * @private\n */\n initScroll() {\n const me = this;\n let frameCount = 0;\n super.initScroll();\n me.ion({\n horizontalScroll : ({ subGrid, scrollLeft, scrollX, scrollingToCenter }) => {\n if (me.isPainted && subGrid === me.timeAxisSubGrid && !me.isDestroying && !me.refreshSuspended) {\n me.onSchedulerHorizontalScroll(subGrid, scrollLeft, scrollX, scrollingToCenter);\n }\n frameCount++;\n }\n });\n if (me.testPerformance === 'horizontal') {\n me.setTimeout(() => {\n const start = performance.now();\n let scrollSpeed = 5,\n direction = 1;\n const scrollInterval = me.setInterval(() => {\n scrollSpeed = scrollSpeed + 5;\n me.scrollX += (10 + Math.floor(scrollSpeed)) * direction;\n if (direction === 1 && me.scrollX > 5500) {\n direction = -1;\n scrollSpeed = 5;\n }\n if (direction === -1 && me.scrollX <= 0) {\n const\n done = performance.now(), // eslint-disable-line no-undef\n elapsed = done - start;\n const\n timePerFrame = elapsed / frameCount,\n fps = Math.round((1000 / timePerFrame) * 10) / 10;\n clearInterval(scrollInterval);\n console.log(me.eventPositionMode, me.eventScrollMode, fps + 'fps');\n }\n }, 0);\n }, 500);\n }\n }\n //endregion\n /**\n * Calls the specified function (returning its return value) and preserves the timeline center\n * point. This is a useful way of retaining the user's visual context while making updates\n * and changes to the view which require major changes or a full refresh.\n * @param {Function} fn The function to call.\n * @param {Object} thisObj The `this` context for the function.\n * @param {...*} args Parameters to the function.\n */\n preserveViewCenter(fn, thisObj = this, ...args) {\n const\n me = this,\n centerDate = me.viewportCenterDate,\n result = fn.apply(thisObj, args),\n scroller = me.timelineScroller,\n { clientSize } = scroller,\n scrollStart = Math.max(Math.floor(me.getCoordinateFromDate(centerDate, true) - clientSize / 2), 0);\n scroller.scrollTo(scrollStart, { scrollingToCenter : true });\n return result;\n }\n /**\n * Changes this Scheduler's time axis timespan to the supplied start and end dates.\n *\n * @async\n * @param {Date} newStartDate The new start date\n * @param {Date} newEndDate The new end date\n * @param {Object} [options] An object containing modifiers for the time span change operation.\n * @param {Boolean} [options.maintainVisibleStart] Specify as `true` to keep the visible start date stable.\n * @param {Date} [options.visibleDate] The date inside the range to scroll into view\n */\n setTimeSpan(newStartDate, newEndDate, options = emptyObject) {\n const\n me = this,\n { timeAxis } = me,\n {\n preventThrow = false, // Private, only used by the shift method.\n maintainVisibleStart = false,\n visibleDate\n } = options,\n {\n startDate,\n endDate\n } = timeAxis.getAdjustedDates(newStartDate, newEndDate),\n startChanged = timeAxis.startDate - startDate !== 0,\n endChanged = timeAxis.endDate - endDate !== 0;\n if (startChanged || endChanged) {\n if (maintainVisibleStart) {\n const\n {\n timeAxisViewModel\n } = me,\n { totalSize } = timeAxisViewModel,\n oldTickSize = timeAxisViewModel.tickSize,\n scrollable = me.timelineScroller,\n currentScroll = scrollable.position,\n visibleStart = timeAxisViewModel.getDateFromPosition(currentScroll);\n // If the current visibleStart is in the new range, maintain it\n // So that there is no visual jump.\n if (visibleStart >= startDate && visibleStart < endDate) {\n // We need to correct the scroll position as soon as the TimeAxisViewModel\n // has updated itself and before any other UI updates which that may trigger.\n timeAxisViewModel.ion({\n update() {\n const tickSizeChanged = timeAxisViewModel.tickSize !== oldTickSize;\n // Ensure the canvas element matches the TimeAxisViewModel's new totalSize.\n // This creates the required scroll range to be able to have the scroll\n // position correct before any further UI updates.\n me.updateCanvasSize();\n // If *only* the start moved, we can keep scroll position the same\n // by adjusting it by the amount the start moved.\n if (startChanged && !endChanged && !tickSizeChanged) {\n scrollable.position += (timeAxisViewModel.totalSize - totalSize);\n }\n // If only the end has changed, and tick size is same, we can maintain\n // the same scroll position.\n else if (!startChanged && !tickSizeChanged) {\n scrollable.position = currentScroll;\n }\n // Fall back to restoring the position by restoring the visible start time\n else {\n scrollable.position = timeAxisViewModel.getPositionFromDate(visibleStart);\n }\n // Force partners to sync with what we've just done to reset the scroll.\n // We are now in control.\n scrollable.syncPartners(true);\n },\n prio : 10000,\n once : true\n });\n }\n }\n const returnValue = timeAxis.reconfigure({\n startDate,\n endDate\n }, false, preventThrow);\n if (visibleDate) {\n return me.scrollToDate(visibleDate, options).then(() => returnValue);\n }\n return returnValue;\n }\n }\n //region Config getters/setters\n /**\n * Returns the TimeAxisColumn instance\n * @member {Scheduler.column.TimeAxisColumn|Scheduler.column.VerticalTimeAxisColumn} timeAxisColumn\n * @readonly\n * @category Time axis\n */\n /**\n * Returns `true` if any of the events/tasks or feature injected elements (such as ResourceTimeRanges) are within\n * the {@link #config-timeAxis}\n * @property {Boolean}\n * @readonly\n * @category Scheduled events\n */\n get hasVisibleEvents() {\n return !this.noFeatureElementsInAxis() || this.eventStore.storage.values.some(t => this.timeAxis.isTimeSpanInAxis(t));\n }\n // Template function to be chained in features to determine if any elements are in time axis (needed since we cannot\n // currently chain getters). Negated to not break chain. First feature that has elements visible returns false,\n // which prevents other features from being queried.\n noFeatureElementsInAxis() { }\n // Private getter used to piece together event names such as beforeEventDrag / beforeTaskDrag. Could also be used\n // in templates.\n get capitalizedEventName() {\n if (!this._capitalizedEventName) {\n this._capitalizedEventName = StringHelper.capitalize(this.scheduledEventName);\n }\n return this._capitalizedEventName;\n }\n updatePartner(partner) {\n if (partner) {\n this.addPartner(partner);\n }\n }\n /**\n * Partners this Timeline with the passed Timeline in order to sync the horizontal scrolling position and zoom level.\n *\n * - To remove existing partner see {@link #function-removePartner} method.\n * - To get the list of partners see {@link #property-partners} getter.\n *\n * The following properties are imported into this component from the added partner and shared:\n *\n * - {@link #property-timeAxisViewModel}\n * - {@link #property-timeAxis}\n * - {@link #property-viewPreset}\n *\n * In a set of partnered Timelines, there will only be a single instance of the above properties.\n * The time range and scroll position in that time range are always the same among all\n * partnered timelines.\n *\n * @param {Scheduler.view.TimelineBase} otherTimeline The timeline to partner with\n */\n addPartner(partner) {\n const me = this;\n if (!me.isPartneredWith(partner)) {\n if (me._partner == null) {\n me._partner = partner;\n }\n const partneredWith = me.partneredWith || (me.partneredWith = new Collection());\n // Each must know about the other so that they can sync others upon region resize\n partneredWith.add(partner);\n (partner.partneredWith || (partner.partneredWith = new Collection())).add(me);\n // Flush through viewPreset initGetter so that the setup in setConfig doesn't\n // take them to be the class's defined getters.\n me.getConfig('viewPreset');\n me.getConfig('infiniteScroll');\n partner.ion({\n presetchange : 'onPartnerPresetChange',\n thisObj : me\n });\n partner.scrollable.ion({\n overflowChange : 'onPartnerOverflowChange',\n thisObj : me\n });\n // collect configs that are meant to be shared between partners\n const partnerSharedConfig = me.partnerSharedConfigs.reduce((config, configName) => {\n config[configName] = partner[configName];\n return config;\n }, {});\n // We have to use the same tick size as the partner,\n // and we have to sync to its scroll position\n partnerSharedConfig.viewPreset.options = {\n scrollPosition : partner.timelineScroller.position,\n tickSize : partner.tickSize\n };\n me._ownTimeAxis = me.timeAxis;\n me._ownTimeAxisViewModel = me.timeAxisViewModel;\n me.setConfig(partnerSharedConfig);\n me.ion({\n presetchange : 'onPartnerPresetChange',\n thisObj : partner\n });\n me.scrollable.ion({\n overflowChange : 'onPartnerOverflowChange',\n thisObj : partner\n });\n if (me.isPainted) {\n partner.scrollable.addPartner(me.scrollable, me.isHorizontal ? 'x' : 'y');\n partner.syncPartnerSubGrids();\n }\n else {\n // When initScroll comes round, make sure it syncs with the partner\n me.initScroll = FunctionHelper.createSequence(me.initScroll, () => {\n partner.scrollable.addPartner(me.scrollable, me.isHorizontal ? 'x' : 'y');\n partner.syncPartnerSubGrids();\n }, me);\n }\n }\n }\n /**\n * Breaks the link between current Timeline and the passed Timeline\n *\n * - To add a new partner see {@link #function-addPartner} method.\n * - To get the list of partners see {@link #property-partners} getter.\n *\n * @param {Scheduler.view.TimelineBase} otherTimeline The timeline to unlink from\n */\n removePartner(partner) {\n const\n me = this,\n { partneredWith, timeAxis } = me;\n if (me.isPartneredWith(partner)) {\n if (me._partner === partner) {\n me._partner = null;\n }\n partneredWith.remove(partner);\n me.scrollable.removePartner(partner.scrollable);\n me.un({\n presetchange : 'onPartnerPresetChange',\n thisObj : partner\n });\n me.scrollable.un({\n overflowChange : 'onPartnerOverflowChange',\n thisObj : partner\n });\n const { scrollLeft, scrollTop } = partner;\n partner.removePartner(me, true);\n if (timeAxis.owner !== me && !me.isDestroying) {\n me.timeAxis = {\n ...partner.timeAxis.getCurrentConfig({ skip : { owner : 1 } }),\n owner : me\n };\n const config = partner.timeAxisViewModel.getCurrentConfig({ skip : { owner : 1, timeAxis : 1, internalListeners : 1 } });\n me.timeAxisViewModel = {\n ...config,\n owner : me,\n timeAxis : me.timeAxis\n };\n me.scrollLeft = scrollLeft;\n me.scrollTop = scrollTop;\n me.timeAxisViewModel.update(me.timeAxisSubGridElement.getBoundingClientRect()[me.isHorizontal ? 'width' : 'height']);\n }\n }\n }\n /**\n * Checks whether the passed timeline is partnered with the current timeline.\n * @param {Scheduler.view.TimelineBase} partner The timeline to check the partnering with\n * @returns {Boolean} Returns `true` if the timelines are partnered\n */\n isPartneredWith(partner) {\n return Boolean(this.partneredWith?.includes(partner));\n }\n /**\n * Called when a partner scheduler changes its overflowing state. The scrollable\n * of a Grid/Scheduler only handles overflowY, so this will mean the addition\n * or removal of a vertical scrollbar.\n *\n * All partners must stay in sync. If another parter has a vertical scrollbar\n * and we do not, we must set our overflowY to 'scroll' so that we show an empty\n * scrollbar to keep widths synchronized.\n * @param {Object} event A {@link Core.helper.util.Scroller#event-overflowChange} event\n * @internal\n */\n onPartnerOverflowChange({ source : otherScrollable, y }) {\n const\n { scrollable } = this,\n ourY = scrollable.hasOverflow('y') || scrollable.overflowY === 'scroll';\n // If we disagree with our partner, the partner which doesn't have\n // overflow, has to become overflowY : scroll\n if (ourY !== y) {\n // If we had forced scroller to be shown, we can return it to auto\n if (scrollable.overflowY === 'scroll') {\n scrollable.overflowY = true;\n this.refreshVirtualScrollbars();\n }\n else if (ourY) {\n otherScrollable.overflowY = 'scroll';\n }\n else {\n otherScrollable.overflowY = true;\n scrollable.overflowY = 'scroll';\n this.refreshVirtualScrollbars();\n }\n }\n // If we agree with our partner, we can reset ourselves to overflowY : auto\n else {\n scrollable.overflowY = true;\n }\n }\n onPartnerPresetChange({ preset, startDate, endDate, centerDate, zoomDate, zoomPosition, zoomLevel }) {\n if (!this._viewPresetChanging && this.viewPreset !== preset) {\n // Passed through to the viewPreset changing method\n preset.options = {\n startDate,\n endDate,\n centerDate,\n zoomDate,\n zoomPosition,\n zoomLevel\n };\n this.viewPreset = preset;\n }\n }\n /**\n * Returns the partnered timelines.\n *\n * - To add a new partner see {@link #function-addPartner} method.\n * - To remove existing partner see {@link #function-removePartner} method.\n *\n * @readonly\n * @member {Scheduler.view.TimelineBase[]} partners\n * @category Time axis\n */\n get partners() {\n const partners = this.partner ? [this.partner] : [];\n if (this.partneredWith) {\n partners.push.apply(partners, this.partneredWith.allValues);\n }\n return [...new Set(partners)];\n }\n get timeAxisColumn() {\n return this.columns && this._timeAxisColumn;\n }\n changeColumns(columns, currentStore) {\n const me = this;\n let timeAxisColumnIndex, timeAxisColumnConfig;\n // No columns means destroy\n if (columns) {\n const isArray = Array.isArray(columns);\n let cols = columns;\n if (!isArray) {\n cols = columns.data;\n }\n timeAxisColumnIndex = cols && cols.length;\n cols.some((col, index) => {\n if (col.type === 'timeAxis') {\n timeAxisColumnIndex = index;\n timeAxisColumnConfig = ObjectHelper.assign(col, me.timeAxisColumn);\n return true;\n }\n return false;\n });\n if (me.isVertical) {\n cols = [\n ObjectHelper.assign({\n type : 'verticalTimeAxis'\n }, me.verticalTimeAxisColumn),\n // Make space for a regular TimeAxisColumn after the VerticalTimeAxisColumn\n cols[timeAxisColumnIndex]\n ];\n timeAxisColumnIndex = 1;\n }\n else {\n // We're going to mutate this array which we do not own, so copy it first.\n cols = cols.slice();\n }\n // Fix up the timeAxisColumn config in place\n cols[timeAxisColumnIndex] = this._timeAxisColumn || {\n type : 'timeAxis',\n cellCls : me.timeCellCls,\n mode : me.mode,\n ...timeAxisColumnConfig\n };\n // If we are passed a raw array, or the Store we are passed is owned by another\n // Scheduler, pass the raw column data ro the Grid's changeColumns\n if (isArray || (columns.isStore && columns.owner !== this)) {\n columns = cols;\n }\n else {\n columns.data = cols;\n }\n }\n return super.changeColumns(columns, currentStore);\n }\n updateColumns(columns, was) {\n super.updateColumns(columns, was);\n // Extract the known columns by type. Sorting will have placed them into visual order.\n if (columns) {\n const\n me = this,\n timeAxisColumn = me._timeAxisColumn = me.columns.find(c => c.isTimeAxisColumn);\n if (me.isVertical) {\n me.verticalTimeAxisColumn = me.columns.find(c => c.isVerticalTimeAxisColumn);\n me.verticalTimeAxisColumn.relayAll(me);\n }\n // Set up event relaying early\n timeAxisColumn.relayAll(me);\n }\n }\n onColumnsChanged({ action, changes, record : column, records }) {\n const { timeAxisColumn, columns } = this;\n // If someone replaces the column set (syncing leads to batch), ensure time axis is always added\n if ((action === 'dataset' || action === 'batch') && !columns.includes(timeAxisColumn)) {\n columns.add(timeAxisColumn, true);\n }\n else if (column === timeAxisColumn && 'width' in changes) {\n this.updateCanvasSize();\n }\n column && this.partneredWith?.forEach(partner => {\n const partnerColumn = partner.columns.getAt(column.allIndex);\n if (partnerColumn?.shouldSync(column)) {\n const partnerChanges = {};\n for (const k in changes) {\n partnerChanges[k] = changes[k].value;\n }\n partnerColumn.set(partnerChanges);\n }\n });\n super.onColumnsChanged(...arguments);\n }\n get timeView() {\n const me = this;\n // Maintainer, we need to ensure that the columns property is initialized\n // if this getter is called at configuration time before columns have been ingested.\n return me.columns && me.isVertical\n ? me.verticalTimeAxisColumn?.view\n : me.timeAxisColumn?.timeAxisView;\n }\n updateEventCls(eventCls) {\n const me = this;\n if (!me.eventSelector) {\n // No difference with new rendering, released have 'b-released' only\n me.unreleasedEventSelector = me.eventSelector = `.${eventCls}-wrap`;\n }\n if (!me.eventInnerSelector) {\n me.eventInnerSelector = `.${eventCls}`;\n }\n }\n set timeAxisViewModel(timeAxisViewModel) {\n const\n me = this,\n currentModel = me._timeAxisViewModel,\n tavmListeners = {\n name : 'timeAxisViewModel',\n update : 'onTimeAxisViewModelUpdate',\n prio : 100,\n thisObj : me\n };\n if ((me.partner && !timeAxisViewModel) || (currentModel && currentModel === timeAxisViewModel)) {\n return;\n }\n if (currentModel?.owner === me) {\n // We created this model, destroy it\n currentModel.destroy();\n }\n me.detachListeners('timeAxisViewModel');\n // Getting rid of instanceof check to allow using code from different bundles\n if (timeAxisViewModel?.isTimeAxisViewModel) {\n timeAxisViewModel.ion(tavmListeners);\n }\n else {\n timeAxisViewModel = TimeAxisViewModel.new({\n mode : me._mode,\n snap : me.snap,\n forceFit : me.forceFit,\n timeAxis : me.timeAxis,\n suppressFit : me.suppressFit,\n internalListeners : tavmListeners,\n owner : me\n }, timeAxisViewModel);\n }\n // Replace in dependent classes relying on the model\n if (!me.isConfiguring) {\n if (me.isHorizontal) {\n me.timeAxisColumn.timeAxisViewModel = timeAxisViewModel;\n }\n else {\n me.verticalTimeAxisColumn.view.model = timeAxisViewModel;\n }\n }\n me._timeAxisViewModel = timeAxisViewModel;\n me.relayEvents(timeAxisViewModel, ['update'], 'timeAxisViewModel');\n if (currentModel && timeAxisViewModel) {\n me.trigger('timeAxisViewModelChange', { timeAxisViewModel });\n }\n }\n /**\n * The internal view model, describing the visual representation of the time axis.\n * @property {Scheduler.view.model.TimeAxisViewModel}\n * @readonly\n * @category Time axis\n */\n get timeAxisViewModel() {\n if (!this._timeAxisViewModel) {\n this.timeAxisViewModel = null;\n }\n return this._timeAxisViewModel;\n }\n get suppressFit() {\n return this._timeAxisViewModel?.suppressFit ?? this._suppressFit;\n }\n set suppressFit(value) {\n if (this._timeAxisViewModel) {\n this.timeAxisViewModel.suppressFit = value;\n }\n else {\n this._suppressFit = value;\n }\n }\n set timeAxis(timeAxis) {\n const\n me = this,\n currentTimeAxis = me._timeAxis,\n timeAxisListeners = {\n name : 'timeAxis',\n reconfigure : 'onTimeAxisReconfigure',\n thisObj : me\n };\n if (me.partner && !timeAxis || (currentTimeAxis && currentTimeAxis === timeAxis)) {\n return;\n }\n if (currentTimeAxis) {\n if (currentTimeAxis.owner === me) {\n // We created this model, destroy it\n currentTimeAxis.destroy();\n }\n }\n me.detachListeners('timeAxis');\n // Getting rid of instanceof check to allow using code from different bundles\n if (!timeAxis?.isTimeAxis) {\n timeAxis = ObjectHelper.assign({\n owner : me,\n viewPreset : me.viewPreset,\n autoAdjust : me.autoAdjustTimeAxis,\n weekStartDay : me.weekStartDay,\n forceFullTicks : me.fillTicks && me.snap\n }, timeAxis);\n if (me.startDate) {\n timeAxis.startDate = me.startDate;\n }\n if (me.endDate) {\n timeAxis.endDate = me.endDate;\n }\n if (me.workingTime) {\n me.applyWorkingTime(timeAxis);\n }\n timeAxis = new TimeAxis(timeAxis);\n }\n // Inform about reconfiguring the timeaxis, to allow users to react to start & end date changes\n timeAxis.ion(timeAxisListeners);\n me._timeAxis = timeAxis;\n }\n onTimeAxisReconfigure({ config, oldConfig }) {\n if (config) {\n const dateRangeChange = !oldConfig || (oldConfig.startDate - config.startDate || oldConfig.endDate - config.endDate);\n if (dateRangeChange) {\n /**\n * Fired when the range of dates encapsulated by the UI changes. This will be when\n * moving a view in time by reconfiguring its {@link #config-timeAxis}. This will happen\n * when zooming, or changing {@link #config-viewPreset}.\n *\n * Contrast this with the {@link #event-visibleDateRangeChange} event which fires much\n * more frequently, during scrolling along the time axis and changing the __visible__\n * date range.\n * @event dateRangeChange\n * @param {Scheduler.view.TimelineBase} source This Scheduler/Gantt instance.\n * @param {Object} old The old date range\n * @param {Date} old.startDate the old start date.\n * @param {Date} old.endDate the old end date.\n * @param {Object} new The new date range\n * @param {Date} new.startDate the new start date.\n * @param {Date} new.endDate the new end date.\n */\n this.trigger('dateRangeChange', {\n old : {\n startDate : oldConfig.startDate,\n endDate : oldConfig.endDate\n },\n new : {\n startDate : config.startDate,\n endDate : config.endDate\n }\n });\n }\n }\n /**\n * Fired when the timeaxis has changed, for example by zooming or configuring a new time span.\n * @event timeAxisChange\n * @param {Scheduler.view.Scheduler} source - This Scheduler\n * @param {Object} config Config object used to reconfigure the time axis.\n * @param {Date} config.startDate New start date (if supplied)\n * @param {Date} config.endDate New end date (if supplied)\n */\n this.trigger('timeAxisChange', { config });\n }\n get timeAxis() {\n if (!this._timeAxis) {\n this.timeAxis = null;\n }\n return this._timeAxis;\n }\n updateForceFit(value) {\n if (this._timeAxisViewModel) {\n this._timeAxisViewModel.forceFit = value;\n }\n }\n set workingTime(config) {\n this._workingTime = config;\n if (!this.isConfiguring) {\n this.applyWorkingTime(this.timeAxis);\n }\n }\n get workingTime() {\n return this._workingTime;\n }\n // Translates the workingTime configs into TimeAxis#include rules, applies them and then refreshes the header and\n // redraws the events\n applyWorkingTime(timeAxis) {\n const me = this,\n config = me._workingTime;\n if (config) {\n let hour = null;\n // Only use valid values\n if (config.fromHour >= 0 && config.fromHour < 24 && config.toHour > config.fromHour && config.toHour <= 24 && config.toHour - config.fromHour < 24) {\n hour = { from : config.fromHour, to : config.toHour };\n }\n let day = null;\n // Only use valid values\n if (config.fromDay >= 0 && config.fromDay < 7 && config.toDay > config.fromDay && config.toDay <= 7 && config.toDay - config.fromDay < 7) {\n day = { from : config.fromDay, to : config.toDay };\n }\n if (hour || day) {\n timeAxis.include = {\n hour,\n day\n };\n }\n else {\n // No valid rules, restore timeAxis\n timeAxis.include = null;\n }\n }\n else {\n // No rules, restore timeAxis\n timeAxis.include = null;\n }\n if (me.isPainted) {\n // Refreshing header, which also recalculate tickSize and header data\n me.timeAxisColumn.refreshHeader();\n // Update column lines\n me.features.columnLines?.refresh();\n // Animate event changes\n me.refreshWithTransition();\n }\n }\n updateStartDate(date) {\n this.setStartDate(date);\n }\n /**\n * Sets the timeline start date.\n *\n * **Note:**\n * - If you need to set start and end date at the same time, use the {@link #function-setTimeSpan} method.\n * - If keepDuration is false and new start date is greater than end date, it will throw an exception.\n *\n * @param {Date} date The new start date\n * @param {Boolean} keepDuration Pass `true` to keep the duration of the timeline (\"move\" the timeline),\n * `false` to change the duration (\"resize\" the timeline). Defaults to `true`.\n */\n setStartDate(date, keepDuration = true) {\n const\n me = this,\n ta = me._timeAxis,\n {\n startDate,\n endDate,\n mainUnit\n } = ta || emptyObject;\n if (typeof date === 'string') {\n date = DateHelper.parse(date);\n }\n if (ta && endDate) {\n if (date) {\n let calcEndDate = endDate;\n if (keepDuration && startDate) {\n const diff = DateHelper.diff(startDate, endDate, mainUnit, true);\n calcEndDate = DateHelper.add(date, diff, mainUnit);\n }\n me.setTimeSpan(date, calcEndDate);\n }\n }\n else {\n me._tempStartDate = date;\n }\n }\n get startDate() {\n let ret = this._timeAxis?.startDate || this._tempStartDate;\n if (!ret) {\n ret = new Date();\n const { workingTime } = this;\n if (workingTime) {\n while (!isWorkingTime(ret, workingTime)) {\n ret.setHours(ret.getHours() + 1);\n }\n }\n this._tempStartDate = ret;\n }\n return ret;\n }\n changeEndDate(date) {\n if (typeof date === 'string') {\n date = DateHelper.parse(date);\n }\n this.setEndDate(date);\n }\n /**\n * Sets the timeline end date\n *\n * **Note:**\n * - If you need to set start and end date at the same time, use the {@link #function-setTimeSpan} method.\n * - If keepDuration is false and new end date is less than start date, it will throw an exception.\n *\n * @param {Date} date The new end date\n * @param {Boolean} keepDuration Pass `true` to keep the duration of the timeline (\"move\" the timeline),\n * `false` to change the duration (\"resize\" the timeline). Defaults to `false`.\n */\n setEndDate(date, keepDuration = false) {\n const\n me = this,\n ta = me._timeAxis,\n {\n startDate,\n endDate,\n mainUnit\n } = ta || emptyObject;\n if (typeof date === 'string') {\n date = DateHelper.parse(date);\n }\n if (ta && startDate) {\n if (date) {\n let calcStartDate = startDate;\n if (keepDuration && endDate) {\n const diff = DateHelper.diff(startDate, endDate, mainUnit, true);\n calcStartDate = DateHelper.add(date, -diff, mainUnit);\n }\n me.setTimeSpan(calcStartDate, date);\n }\n }\n else {\n me._tempEndDate = date;\n }\n }\n get endDate() {\n const me = this;\n if (me._timeAxis) {\n return me._timeAxis.endDate;\n }\n return me._tempEndDate || DateHelper.add(me.startDate, me.viewPreset.defaultSpan, me.viewPreset.mainHeader.unit);\n }\n changeVisibleDate(options) {\n // Accept visibleDate : '2024-01-01'\n if (typeof options === 'string') {\n return this.changeVisibleDate({ date : options });\n }\n if (options instanceof Date) {\n return { date : options, block : this.isConfiguring ? 'start' : 'nearest' };\n }\n if (options instanceof Object) {\n return {\n ...options,\n date : typeof options.date === 'string' ? DateHelper.parse(options.date) : options.date,\n block : options.block || (this.isConfiguring ? 'start' : 'nearest')\n };\n }\n }\n updateVisibleDate(options) {\n const me = this;\n // Infinite scroll initialization takes care of its visibleDate after\n // calculating the optimum scroll range in TimelineScroll#initScroll\n if (!(me.infiniteScroll && me.isConfiguring)) {\n if (me.isPainted) {\n me.scrollToDate(options.date, options);\n }\n else if (!me.visibleDateProcessed) {\n me.whenVisible(() => me.updateVisibleDate(me.visibleDate));\n me.visibleDateProcessed = true;\n }\n }\n }\n get features() {\n return super.features;\n }\n // add region resize by default\n set features(features) {\n features = features === true ? {} : features;\n if (!('regionResize' in features)) {\n features.regionResize = true;\n }\n super.features = features;\n }\n //endregion\n //region Event handlers\n onLocaleChange() {\n super.onLocaleChange();\n const oldAutoAdjust = this.timeAxis.autoAdjust;\n // Time axis should rebuild as weekStartDay may have changed\n this.timeAxis.reconfigure({\n autoAdjust : false\n });\n // Silently set it back to what the user had for next view refresh\n this.timeAxis.autoAdjust = oldAutoAdjust;\n }\n /**\n * Called when the element which encapsulates the Scheduler's visible height changes size.\n * We only respond to *height* changes here. The TimeAxisSubGrid monitors its own width.\n * @param {HTMLElement} element\n * @param {DOMRect} oldRect\n * @param {DOMRect} newRect\n * @private\n */\n onBodyResize(element, oldRect, { width, height }) {\n // Uncache old value upon element resize, not upon initial sizing\n if (this.isVertical && oldRect && width !== oldRect.width) {\n delete this.timeAxisSubGrid._width;\n }\n const newWidth = this.timeAxisSubGrid.element.offsetWidth;\n // The Scheduler (The Grid) dictates the viewport height.\n // Don't react on first invocation which will be initial size.\n if (this._bodyRectangle && oldRect && (height !== oldRect.height)) {\n this.onSchedulerViewportResize(newWidth, height, newWidth, oldRect.height);\n }\n }\n onSchedulerViewportResize(width, height, oldWidth, oldHeight) {\n if (this.isPainted) {\n const\n me = this,\n {\n isHorizontal,\n partneredWith\n } = me;\n me.currentOrientation.onViewportResize(width, height, oldWidth, oldHeight);\n // Raw width is always correct for horizontal layout because the TimeAxisSubGrid\n // never shows a scrollbar. It's always contained by an owning Grid which shows\n // the vertical scrollbar.\n me.updateViewModelAvailableSpace(isHorizontal ? width : Math.floor(height));\n if (partneredWith && !me.isSyncingFromPartner) {\n me.syncPartnerSubGrids();\n }\n /**\n * Fired when the *scheduler* viewport (not the overall Scheduler element) changes size.\n * This happens when the grid changes height, or when the subgrid which encapsulates the\n * scheduler column changes width.\n * @event timelineViewportResize\n * @param {Core.widget.Widget} source - This Scheduler\n * @param {Number} width The new width\n * @param {Number} height The new height\n * @param {Number} oldWidth The old width\n * @param {Number} oldHeight The old height\n */\n me.trigger('timelineViewportResize', { width, height, oldWidth, oldHeight });\n }\n }\n updateViewModelAvailableSpace(space) {\n this.timeAxisViewModel.availableSpace = space;\n }\n onTimeAxisViewModelUpdate() {\n if (!this._viewPresetChanging && !this.timeAxisSubGrid.collapsed) {\n this.updateCanvasSize();\n this.currentOrientation.onTimeAxisViewModelUpdate();\n }\n }\n syncPartnerSubGrids() {\n this.partneredWith.forEach(partner => {\n if (!partner.isSyncingFromPartner) {\n partner.isSyncingFromPartner = true;\n this.eachSubGrid(subGrid => {\n const partnerSubGrid = partner.subGrids[subGrid.region];\n // If there is a difference, sync the partner SubGrid state\n if (partnerSubGrid.width !== subGrid.width) {\n if (subGrid.collapsed) {\n partnerSubGrid.collapse();\n }\n else {\n if (partnerSubGrid.collapsed) {\n partnerSubGrid.expand();\n }\n // When using flexed subgrid, make sure flex values has prio over width\n if (subGrid.flex) {\n // If flex values match, resize should be fine without changing anything\n if (subGrid.flex !== partnerSubGrid.flex) {\n partnerSubGrid.flex = subGrid.flex;\n }\n }\n else {\n partnerSubGrid.width = subGrid.width;\n }\n }\n }\n });\n partner.isSyncingFromPartner = false;\n }\n });\n }\n //endregion\n //region Mode\n get currentOrientation() {\n throw new Error('Implement in subclass');\n }\n // Horizontal is the default, overridden in scheduler\n get isHorizontal() {\n return true;\n }\n //endregion\n //region Canvases and elements\n get foregroundCanvas() {\n return this._foregroundCanvas;\n }\n get svgCanvas() {\n const me = this;\n if (!me._svgCanvas) {\n const svg = me._svgCanvas = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('id', IdHelper.generateId('svg'));\n svg.classList.add('b-sch-canvas', 'b-sch-dependencies-canvas');\n // To not be recycled by DomSync\n svg.retainElement = true;\n me.timeAxisSubGridElement.appendChild(svg);\n me.trigger('svgCanvasCreated', { svg });\n }\n return me._svgCanvas;\n }\n /**\n * Returns the subGrid containing the time axis\n * @member {Grid.view.SubGrid} timeAxisSubGrid\n * @readonly\n * @category Time axis\n */\n /**\n * Returns the html element for the subGrid containing the time axis\n * @property {HTMLElement}\n * @readonly\n * @category Time axis\n */\n get timeAxisSubGridElement() {\n // Hit a lot, caching the element (it will never change)\n if (!this._timeAxisSubGridElement) {\n // We need the TimeAxisSubGrid to exist, so regions must be initialized\n this.getConfig('regions');\n this._timeAxisSubGridElement = this.timeAxisColumn?.subGridElement;\n }\n return this._timeAxisSubGridElement;\n }\n updateCanvasSize() {\n const me = this;\n let result = false;\n if (me.isVertical) {\n const { totalSize } = me.timeAxisViewModel;\n // Ensure vertical scroll range accommodates the TimeAxis\n if (me.isPainted) {\n // We used to have a bug here from not including the row border in the total height. Border is now\n // removed, but leaving code here just in case some client is using border\n me.refreshTotalHeight(totalSize + me._rowBorderHeight, true);\n }\n // Canvas might need a height in vertical mode, if ticks does not fill height (suppressFit : true)\n if (me.suppressFit) {\n DomHelper.setLength(me.foregroundCanvas, 'height', totalSize);\n }\n result = true;\n }\n return result;\n }\n /**\n * A chainable function which Features may hook to add their own content to the timeaxis header.\n * @param {Array} configs An array of domConfigs, append to it to have the config applied to the header\n */\n getHeaderDomConfigs(configs) {}\n /**\n * A chainable function which Features may hook to add their own content to the foreground canvas\n * @param {Array} configs An array of domConfigs, append to it to have the config applied to the foreground canvas\n */\n getForegroundDomConfigs(configs) {}\n //endregion\n //region Grid overrides\n async onStoreDataChange({ action }) {\n const me = this;\n // Only update the UI immediately if we are visible\n if (me.isVisible) {\n // When repopulating stores (pro and up on data reload), the engine is not in a valid state until committed.\n // Don't want to commit here, since it might be repopulating multiple stores.\n // Instead delay grids refresh until project is ready\n if (action === 'dataset' && me.project?.isRepopulatingStores) {\n await me.project.await('refresh', false);\n }\n super.onStoreDataChange(...arguments);\n }\n // Otherwise wait till next time we get painted (shown, or a hidden ancestor shown)\n else {\n me.whenVisible('refresh', me, [true]);\n }\n }\n refresh(forceLayout = true) {\n const me = this;\n if (me.isPainted && !me.refreshSuspended) {\n // We need to refresh if there are Features laying claim to the visible time axis.\n // Or there are events which fall inside the time axis.\n // Or (if no events fall inside the time axis) there are event elements to remove.\n if (me.isVertical || me.hasVisibleEvents || me.timeAxisSubGridElement.querySelector(me.eventSelector)) {\n if (!me.project || me.isEngineReady) {\n me.refreshRows(false, forceLayout);\n }\n else {\n me.refreshAfterProjectRefresh = true;\n me.currentOrientation.refreshAllWhenReady = true;\n }\n }\n // Even if there are no events in our timeline, Features\n // assume there will be a refresh event from the RowManager\n // after a refresh request so fire it here.\n else {\n me.rowManager.trigger('refresh');\n }\n }\n }\n render() {\n const\n me = this,\n { total } = me.resourceMarginObject,\n schedulerEl = me.timeAxisSubGridElement;\n // The font-size trick is no longer used by scheduler, since it allows per resource margins\n const\n fgCanvas = me._foregroundCanvas = DomHelper.createElement({\n className : 'b-sch-canvas b-sch-foreground-canvas',\n style : `font-size:${(me.rowHeight - total)}px`,\n parent : schedulerEl\n });\n me.timeAxisSubGrid.insertRowsBefore = fgCanvas;\n // Size correctly in case ticks does not fill height\n if (me.isVertical && me.suppressFit) {\n me.updateCanvasSize();\n }\n super.render(...arguments);\n }\n refreshRows(returnToTop = false, reLayoutEvents = true) {\n const me = this;\n if (me.isConfiguring) {\n return;\n }\n me.currentOrientation.refreshRows(reLayoutEvents);\n super.refreshRows(returnToTop);\n }\n updateHideHeaders(hide) {\n const\n me = this,\n scrollLeft = me.isPainted ? me.scrollLeft : 0;\n super.updateHideHeaders(hide);\n if (me.isPainted) {\n if (!hide) {\n me.timeAxisColumn.refreshHeader(null, true);\n }\n me.nextAnimationFrame().then(() => me.scrollLeft = scrollLeft);\n }\n }\n updateHideRowHover(hideRowHover) {\n this.timeAxisSubGridElement.classList.toggle('b-hide-row-hover', hideRowHover);\n }\n getCellDataFromEvent(event, includeSingleAxisMatch) {\n if (includeSingleAxisMatch) {\n includeSingleAxisMatch = !Boolean(event.target.closest('.b-sch-foreground-canvas'));\n }\n return super.getCellDataFromEvent(event, includeSingleAxisMatch);\n }\n // This GridSelection override disables drag-selection in timeaxis column for scheduler and gantt\n onCellNavigate(me, from, to) {\n const toTarget = to.target;\n if (to.cell?.classList.contains('b-timeaxis-cell') && !GlobalEvents.currentMouseDown?.target.classList.contains('b-grid-cell')) {\n this.preventDragSelect = true;\n }\n if ((!toTarget?.matches(this.eventSelector) || this.selectResourceOnEventNavigate !== false) &&\n (!toTarget?.matches('.b-timeaxis-cell') || this.selectResourceOnScheduleClick !== false)) {\n super.onCellNavigate(...arguments);\n }\n }\n //endregion\n //region Other\n // Awaited by CellEdit to make sure that the editor is not moved until row heights have transitioned, to avoid it\n // ending up misaligned\n async waitForAnimations() {\n // If project is calculating, we should await that too. It might lead to transitions\n if (!this.isEngineReady && this.project) {\n await this.project.await('dataReady', false);\n }\n await super.waitForAnimations();\n }\n /**\n * Refreshes the grid with transitions enabled.\n */\n refreshWithTransition(forceLayout, duration) {\n const me = this;\n // No point in starting a transition if we cant refresh anyway\n if (!me.refreshSuspended && me.isPainted) {\n // Since we suspend refresh when loading with CrudManager, rows might not have been initialized yet\n if (!me.rowManager.topRow) {\n me.rowManager.reinitialize();\n }\n else {\n me.runWithTransition(() => me.refresh(forceLayout), duration);\n }\n }\n }\n /**\n * Returns an object representing the visible date range\n * @property {Object}\n * @property {Date} visibleDateRange.startDate\n * @property {Date} visibleDateRange.endDate\n * @readonly\n * @category Dates\n */\n get visibleDateRange() {\n return this.currentOrientation.visibleDateRange;\n }\n // This override will force row selection on timeaxis column selection, effectively disabling cell selection there\n isRowNumberSelecting(...selectors) {\n return super.isRowNumberSelecting(...selectors) ||\n selectors.some(cs => cs.column ? cs.column.isTimeAxisColumn : cs.cell?.closest('.b-timeaxis-cell'));\n }\n //endregion\n /**\n * Returns a rounded duration value to be displayed in UI (tooltips, labels etc)\n * @param {Number} duration The raw duration value\n * @param {Number} [nbrDecimals] The number of decimals, defaults to {@link #config-durationDisplayPrecision}\n * @returns {Number} The rounded duration\n */\n formatDuration(duration, nbrDecimals = this.durationDisplayPrecision) {\n const multiplier = Math.pow(10, nbrDecimals);\n return Math.round(duration * multiplier) / multiplier;\n }\n beginListeningForBatchedUpdates() {\n this.listenToBatchedUpdates = (this.listenToBatchedUpdates || 0) + 1;\n // Allow live resizing (etc) in all splits\n this.syncSplits?.(other => other.beginListeningForBatchedUpdates());\n }\n endListeningForBatchedUpdates() {\n if (this.listenToBatchedUpdates) {\n this.listenToBatchedUpdates -= 1;\n }\n this.syncSplits?.(other => other.endListeningForBatchedUpdates());\n }\n onConnectedCallback(connected, initialConnect) {\n if (connected && !initialConnect) {\n this.timeAxisSubGrid.scrollable.x += 0.5;\n }\n }\n updateRtl(rtl) {\n const\n me = this,\n { isConfiguring } = me;\n let visibleDateRange;\n if (!isConfiguring) {\n visibleDateRange = me.visibleDateRange;\n }\n super.updateRtl(rtl);\n if (!isConfiguring) {\n me.currentOrientation.clearAll();\n if (me.infiniteScroll) {\n me.shiftToDate(visibleDateRange.startDate);\n me.scrollToDate(visibleDateRange.startDate, { block : 'start' });\n }\n else {\n me.timelineScroller.position += 0.5;\n }\n }\n }\n /**\n * Applies the start and end date to each event store request (formatted in the same way as the start date field,\n * defined in the EventStore Model class).\n * @category Data\n * @private\n */\n applyStartEndParameters(params) {\n const\n me = this,\n field = me.eventStore.modelClass.fieldMap.startDate;\n if (me.passStartEndParameters) {\n params[me.startParamName] = field.print(me.startDate);\n params[me.endParamName] = field.print(me.endDate);\n }\n }\n}\n// Register this widget type with its Factory\nTimelineBase.initClass();\n// Has to be here because Gantt extends TimelineBase\nVersionHelper.setVersion('scheduler', '5.6.6');\nTimelineBase._$name = 'TimelineBase';", "import Base from '../../../Core/Base.js';\n/**\n * @module Scheduler/data/mixin/ResourceStoreMixin\n */\n/**\n * This is a mixin for the ResourceStore functionality. It is consumed by the {@link Scheduler.data.ResourceStore}.\n *\n * @mixin\n */\nexport default Target => class ResourceStoreMixin extends (Target || Base) {\n static get $name() {\n return 'ResourceStoreMixin';\n }\n get isResourceStore() {\n return true;\n }\n /**\n * Add resources to the store.\n *\n * NOTE: References (events, assignments) on the resources are determined async by a calculation engine. Thus they\n * cannot be directly accessed after using this function.\n *\n * For example:\n *\n * ```javascript\n * const [resource] = resourceStore.add({ id });\n * // resource.events is not yet available\n * ```\n *\n * To guarantee references are set up, wait for calculations for finish:\n *\n * ```javascript\n * const [resource] = resourceStore.add({ id });\n * await resourceStore.project.commitAsync();\n * // resource.events is available (assuming EventStore is loaded and so on)\n * ```\n *\n * Alternatively use `addAsync()` instead:\n *\n * ```javascript\n * const [resource] = await resourceStore.addAsync({ id });\n * // resource.events is available (assuming EventStore is loaded and so on)\n * ```\n *\n * @param {Scheduler.model.ResourceModel|Scheduler.model.ResourceModel[]|ResourceModelConfig|ResourceModelConfig[]} records\n * Array of records/data or a single record/data to add to store\n * @param {Boolean} [silent] Specify `true` to suppress events\n * @returns {Scheduler.model.ResourceModel[]} Added records\n * @function add\n * @category CRUD\n */\n /**\n * Add resources to the store and triggers calculations directly after. Await this function to have up to date\n * references on the added resources.\n *\n * ```javascript\n * const [resource] = await resourceStore.addAsync({ id });\n * // resource.events is available (assuming EventStore is loaded and so on)\n * ```\n *\n * @param {Scheduler.model.ResourceModel|Scheduler.model.ResourceModel[]|ResourceModelConfig|ResourceModelConfig[]} records\n * Array of records/data or a single record/data to add to store\n * @param {Boolean} [silent] Specify `true` to suppress events\n * @returns {Scheduler.model.ResourceModel[]} Added records\n * @function addAsync\n * @category CRUD\n * @async\n */\n /**\n * Applies a new dataset to the ResourceStore. Use it to plug externally fetched data into the store.\n *\n * NOTE: References (events, assignments) on the resources are determined async by a calculation engine. Thus\n * they cannot be directly accessed after assigning the new dataset.\n *\n * For example:\n *\n * ```javascript\n * resourceStore.data = [{ id }];\n * // resourceStore.first.events is not yet available\n * ```\n *\n * To guarantee references are available, wait for calculations for finish:\n *\n * ```javascript\n * resourceStore.data = [{ id }];\n * await resourceStore.project.commitAsync();\n * // resourceStore.first.events is available\n * ```\n *\n * Alternatively use `loadDataAsync()` instead:\n *\n * ```javascript\n * await resourceStore.loadDataAsync([{ id }]);\n * // resourceStore.first.events is available\n * ```\n *\n * @member {ResourceModelConfig[]} data\n * @category Records\n */\n /**\n * Applies a new dataset to the ResourceStore and triggers calculations directly after. Use it to plug externally\n * fetched data into the store.\n *\n * ```javascript\n * await resourceStore.loadDataAsync([{ id }]);\n * // resourceStore.first.events is available\n * ```\n *\n * @param {ResourceModelConfig[]} data Array of ResourceModel data objects\n * @function loadDataAsync\n * @category CRUD\n * @async\n */\n static get defaultConfig() {\n return {\n /**\n * CrudManager must load stores in the correct order. Lowest first.\n * @private\n */\n loadPriority : 200,\n /**\n * CrudManager must sync stores in the correct order. Lowest first.\n * @private\n */\n syncPriority : 100,\n storeId : 'resources',\n autoTree : true\n };\n }\n construct(config) {\n super.construct(config);\n if (!this.modelClass.isResourceModel) {\n throw new Error('Model for ResourceStore must subclass ResourceModel');\n }\n }\n removeAll() {\n const result = super.removeAll(...arguments);\n // Removing all resources removes all assignments\n result && this.assignmentStore.removeAll();\n return result;\n }\n // Apply id changes also to assignments (used to be handled automatically by relations earlier, but engine does not\n // care about ids so needed now)\n // problems:\n // 1. orientation/HorizontalRendering listens to assignment store changes and is trying to refresh view\n // When we update resource id on assignment, listener will be invoked and view will try to refresh. And it will\n // fail, because row is not updated yet. Flag is raised on resource store to make HorizontalRendering to skip\n // refreshing view in this particular case of resource id changing\n onRecordIdChange({ record, oldValue, value }) {\n super.onRecordIdChange({ record, oldValue, value });\n if (record.isFieldModified('id')) {\n this.isChangingId = true;\n record.updateAssignmentResourceIds();\n this.isChangingId = false;\n }\n }\n // Cache used by VerticalRendering, reset from there\n get allResourceRecords() {\n return this._allResourceRecords || (this._allResourceRecords = this.getAllDataRecords());\n }\n /**\n * Returns all resources that have no events assigned during the specified time range.\n * @param {Date} startDate Time range start date\n * @param {Date} endDate Time range end date\n * @returns {Scheduler.model.ResourceModel[]} Resources without events\n */\n getAvailableResources({ startDate, endDate }) {\n return this.query(resource => this.eventStore.isDateRangeAvailable(startDate, endDate, null, resource));\n }\n};\n", "import Base from '../../../Core/Base.js';\n/**\n * @module Scheduler/data/mixin/PartOfProject\n */\n/**\n * This is a mixin, included in all models and stores of the Scheduler project. It provides a common API for accessing\n * all stores of the project.\n *\n * @mixin\n */\nexport default Target => class PartOfProject extends (Target || Base) {\n /**\n * Returns the project this entity belongs to.\n *\n * @member {Scheduler.model.ProjectModel} project\n * @readonly\n * @category Project\n */\n /**\n * Returns the event store of the project this entity belongs to.\n *\n * @member {Scheduler.data.EventStore} eventStore\n * @readonly\n * @category Project\n */\n /**\n * Returns the dependency store of the project this entity belongs to.\n *\n * @member {Scheduler.data.DependencyStore} dependencyStore\n * @readonly\n * @category Project\n */\n /**\n * Returns the assignment store of the project this entity belongs to.\n *\n * @member {Scheduler.data.AssignmentStore} assignmentStore\n * @readonly\n * @category Project\n */\n /**\n * Returns the resource store of the project this entity belongs to.\n *\n * @member {Scheduler.data.ResourceStore} resourceStore\n * @readonly\n * @category Project\n */\n static get $name() {\n return 'PartOfProject';\n }\n};\n", "import VersionHelper from '../../../Core/helper/VersionHelper.js';\n/**\n * @module Scheduler/model/mixin/ResourceModelMixin\n */\n/**\n * Config object used to set different values for top/left and bottom/right margin.\n *\n * @typedef {Object} ResourceMarginConfig\n * @property {Number} start Margin top in horizontal mode, margin left in vertical mode\n * @property {Number} end Margin bottom in horizontal mode, margin right in vertical mode\n*/\n/**\n * Mixin that holds configuration shared between resources in Scheduler and Scheduler Pro.\n * @mixin\n */\nexport default Target => class ResourceModelMixin extends Target {\n static get $name() {\n return 'ResourceModelMixin';\n }\n // Flag checked by ResourceStore to make sure it uses a valid subclass\n static get isResourceModel() {\n return true;\n }\n /**\n * Set value for the specified field(s), triggering engine calculations immediately. See\n * {@link Core.data.Model#function-set Model#set()} for arguments.\n *\n * This does not matter much on the resource itself, but is of importance when manipulating its references:\n *\n * ```javascript\n * assignment.set('resourceId', 2);\n * // resource.assignments is not yet up to date\n *\n * await assignment.setAsync('resourceId', 2);\n * // resource.assignments is up to date\n * ```\n *\n * @param {String|Object} field The field to set value for, or an object with multiple values to set in one call\n * @param {*} [value] Value to set\n * @param {Boolean} [silent=false] Set to true to not trigger events\n * automatically.\n * @function setAsync\n * @category Editing\n * @async\n */\n //region Fields\n static get fields() {\n return [\n /**\n * Unique identifier\n * @field {String|Number} id\n * @category Common\n */\n /**\n * Get or set resource name\n * @field {String} name\n * @category Common\n */\n { name : 'name', type : 'string', persist : true },\n /**\n * Controls the primary color used for events assigned to this resource. Can be overridden per event using\n * EventModels {@link Scheduler.model.mixin.EventModelMixin#field-eventColor eventColor config}. Also, see\n * Schedulers {@link Scheduler.view.mixin.TimelineEventRendering#config-eventColor eventColor config}.\n *\n * For available standard colors, see\n * {@link Scheduler.model.mixin.EventModelMixin#typedef-EventColor}.\n *\n * @field {EventColor} eventColor\n * @category Styling\n */\n 'eventColor',\n /**\n * Controls the style used for events assigned to this resource. Can be overridden per event using\n * EventModels {@link Scheduler/model/mixin/EventModelMixin#field-eventStyle eventStyle config}. See Schedulers\n * {@link Scheduler.view.mixin.TimelineEventRendering#config-eventStyle eventStyle config} for available\n * options.\n * @field {String} eventStyle\n * @category Styling\n */\n 'eventStyle',\n /**\n * Fully qualified image URL, used by `ResourceInfoColumn` and vertical modes `ResourceHeader` to display a miniature image\n * for the resource.\n * @field {String} imageUrl\n * @category Styling\n */\n 'imageUrl',\n /**\n * Image name relative to {@link Scheduler/view/mixin/SchedulerEventRendering#config-resourceImagePath},\n * used by `ResourceInfoColumn` and vertical modes `ResourceHeader` to display a miniature image\n * for the resource.\n * Set value to `false` to disable image display.\n * @field {String|Boolean} image\n * @category Styling\n */\n 'image',\n /**\n * Control how much space to leave between the first event/last event and the resources edge (top/bottom\n * margin within the resource row in horizontal mode, left/right margin within the resource column in\n * vertical mode), in px.\n *\n * It's also possible to set different values for top/left and bottom/right\n * by assigning an object to `resourceMargin` with `start` (margin top in horizontal mode,\n * margin left in vertical mode) and `end` (margin bottom / margin right) properties:\n * ```javascript\n * scheduler = new Scheduler({\n * resourceMargin : {\n * start : 15,\n * end : 1\n * }\n * });\n * ```\n *\n * @field {Number|ResourceMarginConfig} resourceMargin\n * @category Layout\n */\n 'resourceMargin',\n /**\n * Margin between stacked event bars for this resource, in px.\n * @field {Number} barMargin\n * @category Layout\n */\n { name : 'barMargin', type : 'number' },\n /**\n * Base height of this resource, in px. When unset, Schedulers configured rowHeight is used.\n *\n * This value is used in horizontal mode to determine row height. When stacking, it is used as input for\n * calculating the actual row height:\n *\n * ```javascript\n * row.height = (resource.rowHeight - (resourceMargin.start + resourceMargin.end)) * overlap count - barMargin * (overlap count - 1)\n * ```\n *\n * When packing or overlapping, it is used as the actual row height.\n *\n * @field {Number} rowHeight\n * @category Layout\n */\n /**\n * Base width of this resource, in px. If not set, the `columnWidth` specified in\n * the Scheduler's configured {@link Scheduler.view.Scheduler#config-resourceColumns} is used.\n *\n * This value is used in vertical mode to determine column width.\n *\n * @field {Number} columnWidth\n * @category Layout\n */\n /**\n * Specify this to use a resource specific event layout in horizontal mode, see\n * {@link Scheduler.view.mixin.SchedulerEventRendering#config-eventLayout} for options.\n *\n * When unset (the default) Schedulers setting is used.\n *\n * @field {'stack'|'pack'|'mixed'|'none'} eventLayout\n * @category Layout\n */\n 'eventLayout'\n ];\n }\n //endregion\n //region Id change\n updateAssignmentResourceIds() {\n this.assigned.forEach(assignment => {\n assignment.resourceId = this.id;\n });\n }\n syncId(value) {\n super.syncId(value);\n this.updateAssignmentResourceIds();\n }\n //endregion\n //region Getters\n // Documented in Scheduler.model.ResourceModel, SchedulerPro.model.ResourceModel, Gantt.model.ResourceModel\n get events() {\n return this.assignments.reduce((events, assignment) => {\n if (assignment.event) {\n events.push(assignment.event);\n }\n return events;\n }, []);\n }\n /**\n * Returns all assignments for the resource\n *\n * @property {Scheduler.model.AssignmentModel[]}\n * @category Common\n */\n get assignments() {\n return this.assigned ? [...this.assigned] : [];\n }\n set assignments(assignments) {\n // Remove old assignments\n this.assignmentStore.remove(this.assignments);\n // Repoint new ones\n // Engine does not allow assigning to `assigned`, handle it here\n assignments.forEach(assignment => {\n assignment.resource = this;\n });\n }\n /**\n * Returns an array of events, associated with this resource\n *\n * @deprecated 5.3.6 Use the events property instead\n *\n * @returns {Scheduler.model.EventModel[]}\n */\n getEvents() {\n VersionHelper.deprecate('scheduler', '6.0.0', 'getEvents() is deprecated, use the events property instead');\n return this.events;\n }\n /**\n * Returns `true` if the resource can be persisted.\n * In a flat store, a resource is always considered persistable. In a tree store, a resource is considered\n * persistable if its parent node is persistable.\n *\n * @property {Boolean}\n * @readonly\n * @category Editing\n */\n get isPersistable() {\n return super.isPersistable && (!this.parent || this.parent.isPersistable);\n }\n //endregion\n /**\n * Unassigns this Resource from all its Events\n */\n unassignAll() {\n this.assignments && this.assignmentStore.remove(this.assignments);\n }\n /**\n * Returns the initials (first letter of the first & last space-separated word in the name) or an empty string\n * if this resource has no name. You can override this method in a ResourceModel subclass to provide your own implementation\n *\n * @property {String}\n * @readonly\n * @category Common\n */\n get initials() {\n const\n { name = '' } = this;\n if (!name) {\n return '';\n }\n const names = name.split(' '),\n firstInitial = names[0][0],\n lastInitial = (names.length > 1 ? names[names.length - 1][0] : '');\n return firstInitial + lastInitial;\n }\n isWorkingTime(date) {\n const calendar = (this.effectiveCalendar || this.project?.calendar);\n return !calendar || calendar.isWorkingTime?.(date);\n }\n};\n", "//---------------------------------------------------------------------------------------------------------------------\n/**\n * Given a single `Iterable`, returns an array of 2 iterables, mirroring the original one (which should not be used anymore).\n *\n * For example:\n *\n * const gen = function* () { yield 1; yield 2; yield 3 }\n *\n * const [ iterable1, iterable2 ] = split(gen())\n * const [ iter1, iter2 ] = [\n * iterable1[ Symbol.iterator ](),\n * iterable2[ Symbol.iterator ]()\n * ]\n *\n * iter1.next() // 1\n * iter2.next() // 1\n * iter2.next() // 2\n * iter2.next() // 3\n * iter1.next() // 2\n * iter1.next() // 3\n * iter1.next() // done\n * iter2.next() // done\n *\n * @param iterable\n */\nexport function split(iterable) {\n const gen1Pending = [];\n const gen2Pending = [];\n let iterator;\n const gen1 = function* () {\n if (!iterator)\n iterator = iterable[Symbol.iterator]();\n while (true) {\n if (gen1Pending.length) {\n yield* gen1Pending;\n gen1Pending.length = 0;\n }\n if (!iterator)\n break;\n const { value, done } = iterator.next();\n if (done) {\n iterator = null;\n iterable = null;\n break;\n }\n gen2Pending.push(value);\n yield value;\n }\n };\n const gen2 = function* () {\n if (!iterator)\n iterator = iterable[Symbol.iterator]();\n while (true) {\n if (gen2Pending.length) {\n yield* gen2Pending;\n gen2Pending.length = 0;\n }\n if (!iterator)\n break;\n const { value, done } = iterator.next();\n if (done) {\n iterator = null;\n iterable = null;\n break;\n }\n gen1Pending.push(value);\n yield value;\n }\n };\n return [gen1(), gen2()];\n}\n//---------------------------------------------------------------------------------------------------------------------\nexport function* inBatchesBySize(iterator, batchSize) {\n if (batchSize < 0)\n throw new Error(\"Batch size needs to a natural number\");\n batchSize = batchSize | 0;\n const runningBatch = [];\n for (const el of iterator) {\n if (runningBatch.length === batchSize) {\n yield runningBatch;\n runningBatch.length = 0;\n }\n runningBatch.push(el);\n }\n if (runningBatch.length > 0)\n yield runningBatch;\n}\n//---------------------------------------------------------------------------------------------------------------------\nexport function* filter(iterator, func) {\n let i = 0;\n for (const el of iterator) {\n if (func(el, i++))\n yield el;\n }\n}\n//---------------------------------------------------------------------------------------------------------------------\nexport function* drop(iterator, howMany) {\n let i = 0;\n for (const el of iterator) {\n if (++i > howMany)\n yield el;\n }\n}\n//---------------------------------------------------------------------------------------------------------------------\nexport function every(iterator, func) {\n let i = 0;\n for (const el of iterator) {\n if (!func(el, i++))\n return false;\n }\n return true;\n}\n//---------------------------------------------------------------------------------------------------------------------\nexport function some(iterator, func) {\n let i = 0;\n for (const el of iterator) {\n if (func(el, i++))\n return true;\n }\n return false;\n}\n//---------------------------------------------------------------------------------------------------------------------\nexport function* map(iterator, func) {\n let i = 0;\n for (const el of iterator)\n yield func(el, i++);\n}\n//---------------------------------------------------------------------------------------------------------------------\nexport function reduce(iterator, func, initialAcc) {\n let i = 0;\n let acc = initialAcc;\n for (const el of iterator) {\n acc = func(acc, el, i++);\n }\n return acc;\n}\n//---------------------------------------------------------------------------------------------------------------------\nexport function* uniqueOnly(iterator) {\n const seen = new Set();\n for (const el of iterator) {\n if (!seen.has(el)) {\n seen.add(el);\n yield el;\n }\n }\n}\n//---------------------------------------------------------------------------------------------------------------------\nexport function* uniqueOnlyBy(iterator, func) {\n const seen = new Set();\n for (const el of iterator) {\n const uniqueBy = func(el);\n if (!seen.has(uniqueBy)) {\n seen.add(uniqueBy);\n yield el;\n }\n }\n}\n//---------------------------------------------------------------------------------------------------------------------\nexport function* reverse(iterator) {\n const all = Array.from(iterator);\n for (let i = all.length - 1; i >= 0; i--)\n yield all[i];\n}\n//---------------------------------------------------------------------------------------------------------------------\nexport function* takeWhile(iterator, func) {\n let i = 0;\n for (const el of iterator) {\n if (func(el, i++))\n yield el;\n else\n return;\n }\n}\n//---------------------------------------------------------------------------------------------------------------------\nexport function* takeUntilIncluding(iterator, func) {\n let i = 0;\n for (const el of iterator) {\n yield el;\n if (func(el, i++))\n return;\n }\n}\n//---------------------------------------------------------------------------------------------------------------------\nexport function* takeUntilExcluding(iterator, func) {\n let i = 0;\n for (const el of iterator) {\n if (func(el, i++))\n return;\n yield el;\n }\n}\n//---------------------------------------------------------------------------------------------------------------------\nexport function* concat(...iterators) {\n for (let i = 0; i < iterators.length; i++)\n yield* iterators[i];\n}\n//---------------------------------------------------------------------------------------------------------------------\nexport function* concatIterable(iteratorsProducer) {\n for (const iterator of iteratorsProducer)\n yield* iterator;\n}\n//---------------------------------------------------------------------------------------------------------------------\n// just a chained syntax sugar class\n// note, that we either use a combination of `this.derive()` + this.iterable (which will clear the `this.iterable`)\n// or, use just `this` as iterable, which will also clear the iterator\n//\nexport class ChainedIteratorClass {\n constructor(iterable) {\n this.iterable = undefined;\n if (!iterable)\n throw new Error(\"Require an iterable instance for chaining\");\n this.iterable = iterable;\n }\n derive(iterable) {\n this.iterable = undefined;\n return new ChainedIteratorClass(iterable);\n }\n copy() {\n const [iter1, iter2] = split(this.iterable);\n this.iterable = iter2;\n return new ChainedIteratorClass(iter1);\n }\n split() {\n const [iter1, iter2] = split(this.iterable);\n return [new ChainedIteratorClass(iter1), this.derive(iter2)];\n }\n inBatchesBySize(batchSize) {\n return this.derive(inBatchesBySize(this.iterable, batchSize));\n }\n filter(func) {\n return this.derive(filter(this.iterable, func));\n }\n drop(howMany) {\n return this.derive(drop(this.iterable, howMany));\n }\n map(func) {\n return this.derive(map(this.iterable, func));\n }\n reduce(func, initialAcc) {\n return reduce(this, func, initialAcc);\n }\n concat() {\n //@ts-ignore\n return this.derive(concatIterable(this.iterable));\n }\n uniqueOnly() {\n return this.derive(uniqueOnly(this.iterable));\n }\n uniqueOnlyBy(func) {\n return this.derive(uniqueOnlyBy(this.iterable, func));\n }\n every(func) {\n return every(this, func);\n }\n some(func) {\n return some(this, func);\n }\n takeWhile(func) {\n return this.derive(takeWhile(this.iterable, func));\n }\n *[Symbol.iterator]() {\n let iterable = this.iterable;\n if (!iterable)\n throw new Error(\"Chained iterator already exhausted or used to derive the new one\");\n // practice shows, that cleaning up the iterable after yourself helps garbage collector a lot\n this.iterable = undefined;\n yield* iterable;\n // yes, we really want to avoid memory leaks\n iterable = undefined;\n }\n toArray() {\n return Array.from(this);\n }\n sort(order) {\n return Array.from(this).sort(order);\n }\n toSet() {\n return new Set(this);\n }\n toMap() {\n //@ts-ignore\n return new Map(this);\n }\n // toMap () : T extends [ K, V ] ? Map : never {\n // return new Map(this.iterable as (T extends [ K, V ] ? Iterable : never)) as (T extends [ K, V ] ? Map : never)\n // }\n flush() {\n for (const element of this) { }\n }\n memoize() {\n return new MemoizedIteratorClass(this);\n }\n}\nexport const ChainedIterator = (iterator) => new ChainedIteratorClass(iterator);\nexport const CI = ChainedIterator;\n//---------------------------------------------------------------------------------------------------------------------\nexport class MemoizedIteratorClass extends ChainedIteratorClass {\n constructor() {\n super(...arguments);\n this.elements = [];\n this.$iterator = undefined;\n }\n set iterable(iterable) {\n this.$iterable = iterable;\n }\n get iterable() {\n return this;\n }\n derive(iterable) {\n return new ChainedIteratorClass(iterable);\n }\n *[Symbol.iterator]() {\n const elements = this.elements;\n if (this.$iterable) {\n if (!this.$iterator)\n this.$iterator = this.$iterable[Symbol.iterator]();\n let iterator = this.$iterator;\n let alreadyConsumed = elements.length;\n // yield the 1st batch \"efficiently\"\n if (alreadyConsumed > 0)\n yield* elements;\n while (true) {\n if (elements.length > alreadyConsumed) {\n // wonder if `yield* elements.slice(alreadyConsumed)` is more performant or not\n for (let i = alreadyConsumed; i < elements.length; i++)\n yield elements[i];\n alreadyConsumed = elements.length;\n }\n if (!iterator)\n break;\n const { value, done } = iterator.next();\n if (done) {\n iterator = this.$iterator = null;\n this.$iterable = null;\n }\n else {\n elements.push(value);\n alreadyConsumed++;\n yield value;\n }\n }\n }\n else {\n yield* elements;\n }\n }\n}\nexport const MemoizedIterator = (iterator) => new MemoizedIteratorClass(iterator);\nexport const MI = MemoizedIterator;\n", "import { CI, MI } from \"../collection/Iterator.js\";\n//---------------------------------------------------------------------------------------------------------------------\nconst MixinInstanceOfProperty = Symbol('MixinIdentity');\nconst MixinStateProperty = Symbol('MixinStateProperty');\n//---------------------------------------------------------------------------------------------------------------------\nclass MixinWalkDepthState {\n constructor() {\n this.baseEl = undefined;\n this.sourceEl = undefined;\n this.$elementsByTopoLevel = undefined;\n this.$topoLevels = undefined;\n this.linearizedByTopoLevelsSource = MI(this.linearizedByTopoLevels());\n }\n static new(props) {\n const me = new this();\n props && Object.assign(me, props);\n return me;\n }\n get topoLevels() {\n if (this.$topoLevels !== undefined)\n return this.$topoLevels;\n return this.$topoLevels = this.buildTopoLevels();\n }\n buildTopoLevels() {\n return Array.from(this.elementsByTopoLevel.keys()).sort((level1, level2) => level1 - level2);\n }\n get elementsByTopoLevel() {\n if (this.$elementsByTopoLevel !== undefined)\n return this.$elementsByTopoLevel;\n return this.$elementsByTopoLevel = this.buildElementsByTopoLevel();\n }\n getOrCreateLevel(map, topoLevel) {\n let elementsAtLevel = map.get(topoLevel);\n if (!elementsAtLevel) {\n elementsAtLevel = [];\n map.set(topoLevel, elementsAtLevel);\n }\n return elementsAtLevel;\n }\n buildElementsByTopoLevel() {\n let maxTopoLevel = 0;\n const baseElements = this.baseEl ? CI(this.baseEl.walkDepthState.elementsByTopoLevel.values()).concat().toSet() : new Set();\n const map = CI(this.sourceEl.requirements)\n .map(mixin => mixin.walkDepthState.elementsByTopoLevel)\n .concat()\n .reduce((elementsByTopoLevel, [topoLevel, mixins]) => {\n if (topoLevel > maxTopoLevel)\n maxTopoLevel = topoLevel;\n this.getOrCreateLevel(elementsByTopoLevel, topoLevel).push(mixins);\n return elementsByTopoLevel;\n }, new Map());\n this.getOrCreateLevel(map, maxTopoLevel + 1).push([this.sourceEl]);\n return CI(map).map(([level, elements]) => {\n return [level, CI(elements).concat().uniqueOnly().filter(mixin => !baseElements.has(mixin)).sort((mixin1, mixin2) => mixin1.id - mixin2.id)];\n }).toMap();\n }\n *linearizedByTopoLevels() {\n yield* CI(this.topoLevels).map(level => this.elementsByTopoLevel.get(level)).concat();\n }\n}\n// Note: 65535 mixins only, because of the hashing function implementation (String.fromCharCode)\nlet MIXIN_ID = 1;\n//---------------------------------------------------------------------------------------------------------------------\n/**\n * @hidden\n */\nexport const identity = a => class extends a {\n};\n// export type IdentityMixin = < T extends AnyConstructor>(base : T) => T\n//\n// export const IdentityMixin = () : IdentityMixin => identity\n//---------------------------------------------------------------------------------------------------------------------\n/**\n * @hidden\n */\nexport class ZeroBaseClass {\n}\n//---------------------------------------------------------------------------------------------------------------------\nclass MixinState {\n constructor() {\n this.id = MIXIN_ID++;\n this.requirements = [];\n this.baseClass = ZeroBaseClass;\n this.identitySymbol = undefined;\n this.mixinLambda = identity;\n this.walkDepthState = undefined;\n // private $hash : MixinHash = ''\n this.$minimalClass = undefined;\n this.name = '';\n }\n static new(props) {\n const me = new this();\n props && Object.assign(me, props);\n me.walkDepthState = MixinWalkDepthState.new({ sourceEl: me, baseEl: getMixinState(me.baseClass) });\n //------------------\n const mixinLambda = me.mixinLambda;\n const symbol = me.identitySymbol = Symbol(mixinLambda.name);\n const mixinLambdaWrapper = Object.assign(function (base) {\n const extendedClass = mixinLambda(base);\n extendedClass.prototype[symbol] = true;\n return extendedClass;\n }, {\n [MixinInstanceOfProperty]: symbol,\n [MixinStateProperty]: me\n });\n Object.defineProperty(mixinLambdaWrapper, Symbol.hasInstance, { value: isInstanceOfStatic });\n me.mixinLambda = mixinLambdaWrapper;\n return me;\n }\n get minimalClass() {\n if (this.$minimalClass !== undefined)\n return this.$minimalClass;\n return this.$minimalClass = this.buildMinimalClass();\n }\n // get hash () : MixinHash {\n // if (this.$hash !== '') return this.$hash\n //\n // return this.$hash = this.buildHash()\n // }\n // buildHash () : MixinHash {\n // return String.fromCharCode(...this.walkDepthState.linearizedByTopoLevelsSource.map(mixin => mixin.id))\n // }\n getBaseClassMixinId(baseClass) {\n const constructor = this.constructor;\n const mixinId = constructor.baseClassesIds.get(baseClass);\n if (mixinId !== undefined)\n return mixinId;\n const newId = MIXIN_ID++;\n constructor.baseClassesIds.set(baseClass, newId);\n return newId;\n }\n buildMinimalClass() {\n const self = this.constructor;\n let baseCls = this.baseClass;\n const minimalClassConstructor = this.walkDepthState.linearizedByTopoLevelsSource.reduce((acc, mixin) => {\n const { cls, hash } = acc;\n const nextHash = hash + String.fromCharCode(mixin.id);\n let wrapperCls = self.minimalClassesByLinearHash.get(nextHash);\n if (!wrapperCls) {\n wrapperCls = mixin.mixinLambda(cls);\n mixin.name = wrapperCls.name;\n self.minimalClassesByLinearHash.set(nextHash, wrapperCls);\n }\n acc.cls = wrapperCls;\n acc.hash = nextHash;\n return acc;\n }, { cls: baseCls, hash: String.fromCharCode(this.getBaseClassMixinId(baseCls)) }).cls;\n const minimalClass = Object.assign(minimalClassConstructor, {\n [MixinInstanceOfProperty]: this.identitySymbol,\n [MixinStateProperty]: this,\n mix: this.mixinLambda,\n derive: (base) => Mixin([minimalClass, base], base => class extends base {\n }),\n $: this,\n toString: this.toString.bind(this)\n });\n Object.defineProperty(minimalClass, Symbol.hasInstance, { value: isInstanceOfStatic });\n return minimalClass;\n }\n toString() {\n return this.walkDepthState.linearizedByTopoLevelsSource.reduce((acc, mixin) => `${mixin.name}(${acc})`, this.baseClass.name);\n }\n}\nMixinState.minimalClassesByLinearHash = new Map();\nMixinState.baseClassesIds = new Map();\n//endregion type helpers\n//---------------------------------------------------------------------------------------------------------------------\nconst isMixinClass = (func) => {\n return Object.getPrototypeOf(func.prototype).constructor.hasOwnProperty(MixinStateProperty);\n};\nconst getMixinState = (func) => {\n return Object.getPrototypeOf(func.prototype).constructor[MixinStateProperty];\n};\n//---------------------------------------------------------------------------------------------------------------------\nconst mixin = (required, mixinLambda) => {\n let baseClass;\n if (required.length > 0) {\n const lastRequirement = required[required.length - 1];\n // absence of `[ MixinStateProperty ]` indicates its a regular class and not a mixin class\n // avoid assigning ZeroBaseClass - it will be applied as default at the end\n if (!isMixinClass(lastRequirement) && lastRequirement !== ZeroBaseClass)\n baseClass = lastRequirement;\n }\n const requirements = [];\n required.forEach((requirement, index) => {\n const mixinState = requirement[MixinStateProperty];\n if (mixinState !== undefined) {\n const currentBaseClass = mixinState.baseClass;\n // ignore ZeroBaseClass - since those are compatible with any other base class\n if (currentBaseClass !== ZeroBaseClass) {\n if (baseClass) {\n // already found a base class from requirements earlier\n if (baseClass !== currentBaseClass) {\n const currentIsSub = currentBaseClass.prototype.isPrototypeOf(baseClass.prototype);\n const currentIsSuper = baseClass.prototype.isPrototypeOf(currentBaseClass.prototype);\n if (!currentIsSub && !currentIsSuper)\n throw new Error(\"Base class mismatch\");\n baseClass = currentIsSuper ? currentBaseClass : baseClass;\n }\n }\n else\n // first base class from requirements\n baseClass = currentBaseClass;\n }\n requirements.push(mixinState);\n }\n else {\n if (index !== required.length - 1)\n throw new Error(\"Base class should be provided as the last element of the requirements array\");\n }\n });\n //------------------\n const mixinState = MixinState.new({\n requirements,\n mixinLambda: mixinLambda,\n baseClass: baseClass || ZeroBaseClass\n });\n return mixinState.minimalClass;\n};\n//---------------------------------------------------------------------------------------------------------------------\n// this function works both with default mixin class and mixin application function\n// it supplied internally as [Symbol.hasInstance] for the default mixin class and mixin application function\nconst isInstanceOfStatic = function (instance) {\n return Boolean(instance && instance[this[MixinInstanceOfProperty]]);\n};\n//---------------------------------------------------------------------------------------------------------------------\n/**\n * This is the `instanceof` analog for the classes created with [[Mixin]] helper. It also provides [typeguard](https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards).\n *\n * There's no strict need to use it, as the native `instanceof` is also supported for the mixins created with the [[Mixin]] helper and also provides\n * typeguarding.\n *\n * @param instance Any value, normally an instance of the mixin class\n * @param func The constructor function of the class, created with [[Mixin]]\n */\nexport const isInstanceOf = (instance, func) => {\n return Boolean(instance && instance[func[MixinInstanceOfProperty]]);\n};\n//---------------------------------------------------------------------------------------\n/**\n * This function allows you to create mixin classes. Mixin classes solves the well-known problem with \"classical\" single-class inheritance,\n * in which class hierarchy must form a tree. When using mixins, class hierarchy becomes an arbitrary acyclic graph.\n *\n * Another view on mixins is that, if \"classical\" class is a point (a vertice of the graph), mixin class is an arrow between the points\n * (an edge in the graph, or rather, a description of the edge).\n *\n * Some background information about the mixin pattern can be found [here](https://mariusschulz.com/blog/typescript-2-2-mixin-classes)\n * and [here](https://www.bryntum.com/blog/the-mixin-pattern-in-typescript-all-you-need-to-know/).\n *\n * The pattern, being described here, is the evolution of the previous work, and main advantage is that it solves the compilation error\n * for circular references.\n *\n * Mixin definition. Requirements\n * ------------------------------\n *\n * The pattern looks like:\n *\n * class Mixin1 extends Mixin(\n * [],\n * (base : AnyConstructor) =>\n *\n * class Mixin1 extends base {\n * prop1 : string\n * method1 () : string {\n * return this.prop1\n * }\n * static static1 : number\n * }\n * ){}\n *\n * The core of the definition above is the mixin lambda - a function which receives a base class as its argument and returns a class,\n * extending the base class with additional properties.\n *\n * The example above creates a mixin `Mixin1` which has no requirements. Requirements are the other mixins,\n * which needs to be included in the base class of this mixin.\n *\n * There's also a special type of the requirement,\n * called \"base class requirement\". It is optional and can only appear as the last argument of the requirements\n * array. It does not have to be a mixin, created with the `Mixin` function, but can be any JS class. This requirement\n * specifies, that the base class of this mixin should be a subclass of the given class (or that class itself).\n *\n * The requirements of the mixin needs to be listed 3 times:\n * - as an array of constructor functions, in the 1st argument of the `Mixin` function\n * - as an instance type intersection, in the 1st type argument for the [[AnyConstructor]] type\n * - as an static type intersection, in the 2nd type argument for the [[AnyConstructor]] type\n *\n * For example, `Mixin2` requires `Mixin1`:\n *\n * class Mixin2 extends Mixin(\n * [ Mixin1 ],\n * (base : AnyConstructor) =>\n *\n * class Mixin2 extends base {\n * }\n * ){}\n *\n * And `Mixin3` requires both `Mixin1` and `Mixin2` (even that its redundant, since `Mixin2` already requires `Mixin1`,\n * but suppose we don't know the implementation details of the `Mixin2`):\n *\n * class Mixin3 extends Mixin(\n * [ Mixin1, Mixin2 ],\n * (base : AnyConstructor) =>\n *\n * class Mixin3 extends base {\n * }\n * ){}\n *\n * Now, `Mixin4` requires `Mixin3`, plus, it requires the base class to be `SomeBaseClass`:\n *\n * class SomeBaseClass {}\n *\n * class Mixin4 extends Mixin(\n * [ Mixin3, SomeBaseClass ],\n * (base : AnyConstructor<\n * Mixin3 & SomeBaseClass, typeof Mixin3 & typeof SomeBaseClass\n * >) =>\n *\n * class Mixin4 extends base {\n * }\n * ){}\n *\n * As already briefly mentioned, the requirements are \"scanned\" deep and included only once. Also all minimal classes are cached -\n * for example the creation of the Mixin3\u00A0will reuse the minimal class of the Mixin2\u00A0instead of creating a new intermediate class.\n * This means that all edges of the mixin dependencies graph are created only once (up to the base class).\n *\n * Requirements can not form cycles - that will generate both compilation error and run-time stack overflow.\n *\n * The typing for the `Mixin` function will provide a compilation error, if the requirements don't match, e.g. some requirement is\n * listed in the array, but missed in the types. This protects you from trivial mistakes. However, the typing is done up to 10 requirements only.\n * If you need more than 10 requirements for the mixin, use the [[MixinAny]] function, which is an exact analog of `Mixin`, but without\n * this type-level protection for requirements mismatch.\n *\n * It is possible to simplify the type of the `base` argument a bit, by using the [[ClassUnion]] helper. However, it seems in certain edge cases\n * it may lead to compilation errors. If your scenarios are not so complex you should give it a try. Using the [[ClassUnion]] helper, the\n * `Mixin3` can be defined as:\n *\n * class Mixin3 extends Mixin(\n * [ Mixin1, Mixin2 ],\n * (base : ClassUnion) =>\n *\n * class Mixin3 extends base {\n * }\n * ){}\n *\n * Note, that due to this [issue](https://github.com/Microsoft/TypeScript/issues/7342), if you use decorators in your mixin class,\n * the declaration needs to be slightly more verbose (can not use compact notation for the arrow functions):\n *\n * class Mixin2 extends Mixin(\n * [ Mixin1 ],\n * (base : AnyConstructor) => {\n * class Mixin2 extends base {\n * @decorator\n * prop2 : string\n * }\n * return Mixin2\n * }\n * ){}\n *\n * As you noticed, the repeating listing of the requirements is somewhat verbose. Suggestions how the pattern can be improved\n * are [very welcomed](mailto:nickolay8@gmail.com).\n *\n * Mixin instantiation. Mixin constructor. `instanceof`\n * --------------------------------\n *\n * You can instantiate any mixin class just by using its constructor:\n *\n * const instance1 = new Mixin1()\n * const instance2 = new Mixin2()\n *\n * As explained in details [here](https://mariusschulz.com/blog/typescript-2-2-mixin-classes), mixin constructor should accept variable number of arguments\n * with the `any` type. This is simply because the mixin is supposed to be applicable to any other base class, which may have its own type\n * of the constructor arguments.\n *\n * class Mixin2 extends Mixin(\n * [ Mixin1 ],\n * (base : AnyConstructor) => {\n * class Mixin2 extends base {\n * prop2 : string\n *\n * constructor (...args: any[]) {\n * super(...args)\n * this.prop2 = ''\n * }\n * }\n * return Mixin2\n * }\n * ){}\n *\n * In other words, its not possible to provide any type-safety for mixin instantiation using regular class constructor.\n *\n * However, if we change the way we create class instances a little, we can get the type-safety back. For that,\n * we need to use a \"uniform\" class constructor - a constructor which has the same form for all classes. The [[Base]] class\n * provides such constructor as its static [[Base.new|new]] method. The usage of `Base` class is not required - you can use\n * any other base class.\n *\n * The `instanceof` operator works as expected for instances of the mixin classes. It also takes into account all the requirements.\n * For example:\n *\n * const instance2 = new Mixin2()\n *\n * const isMixin2 = instance2 instanceof Mixin2 // true\n * const isMixin1 = instance2 instanceof Mixin1 // true, since Mixin2 requires Mixin1\n *\n * See also [[isInstanceOf]].\n *\n * \"Manual\" class derivation\n * --------------------------------\n *\n * You have defined a mixin using the `Mixin` function. Now you want to apply it to some base class to get the \"specific\" class to be able\n * to instantiate it. As described above - you don't have to, you can instantiate it directly.\n *\n * Sometimes however, you still want to derive the class \"manually\". For that, you can use static methods `mix` and `derive`, available\n * on all mixins.\n *\n * The `mix` method provides a direct access to the mixin lambda. It does not take requirements into account - that's the implementor's responsibility.\n * The `derive` method is something like \"accumulated\" mixin lambda - mixin lambda with all requirements.\n *\n * Both `mix` and `derive` provide the reasonably typed outcome.\n *\n * class Mixin1 extends Mixin(\n * [],\n * (base : AnyConstructor) =>\n *\n * class Mixin1 extends base {\n * prop1 : string\n * }\n * ){}\n *\n * class Mixin2 extends Mixin(\n * [ Mixin1 ],\n * (base : AnyConstructor) =>\n *\n * class Mixin2 extends base {\n * prop2 : string\n * }\n * ){}\n *\n * const ManualMixin1 = Mixin1.mix(Object)\n * const ManualMixin2 = Mixin2.mix(Mixin1.mix(Object))\n *\n * const AnotherManualMixin1 = Mixin1.derive(Object)\n * const AnotherManualMixin2 = Mixin2.derive(Object)\n *\n * Generics\n * --------\n *\n * Using generics with mixins is tricky because TypeScript does not have higher-kinded types and type inference for generics. Still some form\n * of generic arguments is possible, using the interface merging trick.\n *\n * Here's the pattern:\n *\n * ```ts\n * class Duplicator extends Mixin(\n * [],\n * (base : AnyConstructor) =>\n *\n * class Duplicator extends base {\n * Element : any\n *\n * duplicate (value : this[ 'Element' ]) : this[ 'Element' ][] {\n * return [ value, value ]\n * }\n * }\n * ){}\n *\n * interface Duplicator {\n * Element : Element\n * }\n *\n * const dup = new Duplicator()\n *\n * dup.duplicate('foo') // TS2345: Argument of type '\"foo\"' is not assignable to parameter of type 'boolean'.\n * ```\n *\n * In the example above, we've defined a generic argument `Element` for the outer mixin class, but in fact, that argument is not used anywhere in the\n * nested class definition in the mixin lambda. Instead, in the nested class, we define a property `Element`, which plays the role of the\n * generic argument.\n *\n * Mixin class methods then can refer to the generic type as `this[ 'Element' ]`.\n *\n * The generic arguments of the outer and nested classes are tied together in the additional interface declaration, which, by TypeScript rules\n * is merged together with the class definition. In this declaration, we specify that property `Element` has type of the `Element` generic argument.\n *\n * Limitations\n * ---------\n *\n * The most important limitation we found (which affect the old pattern as well) is the compilation error, which will be issued for\n * the private/protected methods, when compiling with declarations emitting (*.d.ts files generation).\n *\n * This is a [well-known problem](https://github.com/microsoft/TypeScript/issues/35822) in the TypeScript world \u2013 the *.d.ts files do not represent\n * the internal data structures of the TypeScript compiler well. Instead they use some simplified syntax, optimized for human editing.\n * This is why the compiler may generate false positives in the incremental compilation mode \u2013 it uses *.d.ts files internally.\n *\n * This can be a show-stopper for the people that use declaration files (usually for publishing). Keep in mind though, that you can always\n * publish actual TypeScript sources along with the generated JavaScript files, instead of publishing JavaScript + declarations files.\n *\n */\nexport const Mixin = mixin;\n/**\n * This is an exact analog of the [[Mixin]] function, but without type-level protection for requirements mismatch.\n * It supports unlimited number of requirements.\n */\nexport const MixinAny = mixin;\n", "//---------------------------------------------------------------------------------------------------------------------\n/**\n * This is a base class, providing the type-safe static constructor [[new]]. This is very convenient when using\n * [[Mixin|mixins]], as mixins can not have types in the constructors.\n */\nexport class Base {\n /**\n * This method applies its 1st argument (if any) to the current instance using `Object.assign()`.\n *\n * Supposed to be overridden in the subclasses to customize the instance creation process.\n *\n * @param props\n */\n initialize(props) {\n props && Object.assign(this, props);\n }\n /**\n * This is a type-safe static constructor method, accepting a single argument, with the object, corresponding to the\n * class properties. It will generate a compilation error, if unknown property is provided.\n *\n * For example:\n *\n * ```ts\n * class MyClass extends Base {\n * prop : string\n * }\n *\n * const instance : MyClass = MyClass.new({ prop : 'prop', wrong : 11 })\n * ```\n *\n * will produce:\n *\n * ```plaintext\n * TS2345: Argument of type '{ prop: string; wrong: number; }' is not assignable to parameter of type 'Partial'.\n * Object literal may only specify known properties, and 'wrong' does not exist in type 'Partial'\n * ```\n *\n * The only thing this constructor does is create an instance and call the [[initialize]] method on it, forwarding\n * the first argument. The customization of instance is supposed to be performed in that method.\n *\n * @param props\n */\n static new(props) {\n const instance = new this();\n instance.initialize(props);\n return instance;\n }\n}\n", "import { Mixin } from \"../../ChronoGraph/class/BetterMixin.js\";\n/**\n * This a base generic mixin for every class, that belongs to a project.\n *\n * It just provides getter/setter for the `project` property, along with some convenience methods\n * to access the project's stores.\n */\nexport class AbstractPartOfProjectGenericMixin extends Mixin([], (base) => {\n const superProto = base.prototype;\n class AbstractPartOfProjectGenericMixin extends base {\n async commitAsync() {\n return this.project.commitAsync();\n }\n set project(project) {\n this.$project = project;\n }\n get project() {\n return this.$project;\n }\n calculateProject() {\n throw new Error(\"Implement me\");\n }\n /**\n * The method to set the [[AbstractProjectMixin|project]] instance, this entity belongs to.\n */\n setProject(project) {\n return this.project = project;\n }\n /**\n * The method to get the [[AbstractProjectMixin|project]] instance, this entity belongs to.\n */\n getProject() {\n if (this.project)\n return this.project;\n return this.setProject(this.calculateProject());\n }\n /**\n * Convenience method to get the instance of the assignment store in the [[AbstractProjectMixin|project]] instance, this entity belongs to.\n */\n getAssignmentStore() {\n const project = this.getProject();\n return project?.assignmentStore;\n }\n /**\n * Convenience method to get the instance of the dependency store in the [[AbstractProjectMixin|project]] instance, this entity belongs to.\n */\n getDependencyStore() {\n const project = this.getProject();\n return project?.dependencyStore;\n }\n /**\n * Convenience method to get the instance of the event store in the [[AbstractProjectMixin|project]] instance, this entity belongs to.\n */\n getEventStore() {\n const project = this.getProject();\n return project?.eventStore;\n }\n /**\n * Convenience method to get the instance of the resource store in the [[AbstractProjectMixin|project]] instance, this entity belongs to.\n */\n getResourceStore() {\n const project = this.getProject();\n return project?.resourceStore;\n }\n /**\n * Convenience method to get the instance of the calendar manager store in the [[AbstractProjectMixin|project]] instance, this entity belongs to.\n */\n getCalendarManagerStore() {\n const project = this.getProject();\n return project?.calendarManagerStore;\n }\n }\n return AbstractPartOfProjectGenericMixin;\n}) {\n}\n", "import { Mixin } from \"../../ChronoGraph/class/BetterMixin.js\";\nimport { AbstractPartOfProjectGenericMixin } from \"./AbstractPartOfProjectGenericMixin.js\";\n/**\n * This a base generic mixin for every class, that belongs to a scheduler_core project.\n *\n * It just provides getter/setter for the `project` property, along with some convenience methods\n * to access the project's stores.\n */\nexport class CorePartOfProjectGenericMixin extends Mixin([AbstractPartOfProjectGenericMixin], (base) => {\n const superProto = base.prototype;\n class CorePartOfProjectGenericMixin extends base {\n //region Store getters\n get eventStore() {\n return this.project?.eventStore;\n }\n get resourceStore() {\n return this.project?.resourceStore;\n }\n get assignmentStore() {\n return this.project?.assignmentStore;\n }\n get dependencyStore() {\n return this.project?.dependencyStore;\n }\n get calendarManagerStore() {\n return this.project?.calendarManagerStore;\n }\n //endregion\n //region Entity getters\n /**\n * Convenience method to get the instance of event by its id.\n */\n getEventById(id) {\n return this.eventStore?.getById(id);\n }\n /**\n * Convenience method to get the instance of dependency by its id.\n */\n getDependencyById(id) {\n return this.dependencyStore?.getById(id);\n }\n /**\n * Convenience method to get the instance of resource by its id.\n */\n getResourceById(id) {\n return this.resourceStore?.getById(id);\n }\n /**\n * Convenience method to get the instance of assignment by its id.\n */\n getAssignmentById(id) {\n return this.assignmentStore?.getById(id);\n }\n /**\n * Convenience method to get the instance of calendar by its id.\n */\n getCalendarById(id) {\n return this.calendarManagerStore?.getById(id);\n }\n }\n return CorePartOfProjectGenericMixin;\n}) {\n}\n", "import { Mixin } from \"../../../../ChronoGraph/class/BetterMixin.js\";\nimport { AbstractPartOfProjectGenericMixin } from \"../../AbstractPartOfProjectGenericMixin.js\";\nimport Store from \"../../../../Core/data/Store.js\";\n/**\n * This an abstract mixin for every Store, that belongs to a project.\n *\n * The store with this mixin, supposes, that it will be \"joining\" the project, a reference to which is saved\n * and made available for all models.\n */\nexport class AbstractPartOfProjectStoreMixin extends Mixin([\n AbstractPartOfProjectGenericMixin,\n Store\n], (base) => {\n const superProto = base.prototype;\n class AbstractPartOfProjectStoreMixin extends base {\n constructor() {\n super(...arguments);\n this.isLoadingData = false;\n this.disableHasLoadedDataToCommitFlag = false;\n }\n static get $name() {\n return 'AbstractPartOfProjectStoreMixin';\n }\n //region Async event triggering\n // NOTE: Tested in Scheduler (EventStore.t.js)\n construct(config = {}) {\n config.asyncEvents = {\n add: true,\n remove: true,\n removeAll: true,\n change: true,\n refresh: true,\n replace: true,\n move: true,\n update: true\n };\n return superProto.construct.call(this, config);\n }\n // Override for event triggering, to allow triggering events before and after some async operation.\n // The \"before\" events are prefix, the \"after\" are not.\n trigger(eventName, param) {\n const me = this, { asyncEvents, project } = me, asyncEvent = asyncEvents?.[eventName], asyncAction = asyncEvent && (asyncEvent === true || asyncEvent[param.action]);\n if (!asyncAction) {\n // Trigger as usual\n return superProto.trigger.call(me, eventName, param);\n }\n // Trigger prefixed before event\n superProto.trigger.call(me, `${eventName}PreCommit`, { ...param });\n // Event that did not invalidate engine, for example \"update\"\n if (!project || project.isEngineReady() && !project.isWritingData) {\n // Trigger \"original\" event\n superProto.trigger.call(me, eventName, param);\n }\n else if (!me.eventsSuspended && project) {\n // Instead of making n auto-destroying listeners (which takes enormous amount of time), we make a single\n // one and queue all the events. When dataReady event is triggered we trigger those events\n // https://github.com/bryntum/support/issues/3154\n if (!project.dataReadyDetacher) {\n project.queuedDataReadyEvents = [];\n // Wait for commit without triggering one, otherwise we would affect commit scheduling\n project.dataReadyDetacher = project.ion({\n dataReady() {\n // Trigger \"original\" event\n this.queuedDataReadyEvents.forEach(([superProto, scope, eventName, param]) => {\n superProto.trigger.call(scope, eventName, param);\n });\n project.queuedDataReadyEvents = null;\n project.dataReadyDetacher();\n project.dataReadyDetacher = null;\n },\n once: true\n });\n }\n project.queuedDataReadyEvents.push([superProto, me, eventName, param]);\n }\n // No way of handling other return values in this scenario, won't work for preventable events\n return true;\n }\n //endregion\n calculateProject() {\n // project is supposed to be provided for stores from outside\n return this.project;\n }\n setStoreData(data) {\n // Loading data sets hasLoadedDataToCommit flag.\n // So we treat the 1st commit after data loading as the initial one\n if (this.project && !(this.syncDataOnLoad || this.disableHasLoadedDataToCommitFlag)) {\n this.project.hasLoadedDataToCommit = true;\n }\n this.isLoadingData = true;\n superProto.setStoreData.call(this, data);\n this.isLoadingData = false;\n this.project?.trigger('storeRefresh', { store: this });\n }\n // Override to postpone auto commits to after project commit, makes sure records are unmodified after commit\n async doAutoCommit() {\n if (this.suspendCount <= 0 && this.project && !this.project.isEngineReady()) {\n // @ts-ignore\n await this.project.commitAsync();\n }\n superProto.doAutoCommit.call(this);\n }\n async addAsync(records, silent) {\n const result = this.add(records, silent);\n await this.project.commitAsync();\n return result;\n }\n async insertAsync(index, records, silent) {\n const result = this.insert(index, records, silent);\n await this.project.commitAsync();\n return result;\n }\n async loadDataAsync(data) {\n this.data = data;\n await this.project.commitAsync();\n }\n performFilter() {\n if (this.project && (this.isLoadingData || this.rootNode?.isLoading)) {\n // Reapply filters after calculations, in case filtering on some calculated field\n this.project.commitAsync().then(() => this.filter?.());\n }\n return super.performFilter(...arguments);\n }\n }\n return AbstractPartOfProjectStoreMixin;\n}) {\n}\n", "import { Mixin } from \"../../../../ChronoGraph/class/BetterMixin.js\";\nimport { AbstractPartOfProjectStoreMixin } from \"../../store/mixin/AbstractPartOfProjectStoreMixin.js\";\nimport { AbstractPartOfProjectGenericMixin } from \"../../AbstractPartOfProjectGenericMixin.js\";\nimport Model from \"../../../../Core/data/Model.js\";\nimport { isInstanceOf } from '../../../../ChronoGraph/class/BetterMixin.js';\n/**\n * This an abstract mixin for every Model that belongs to a project.\n *\n * The model with this mixin, supposes that it will be \"joining\" a store that is already part of a project,\n * so that such model can take a reference to the project from it.\n *\n * It provides 2 template methods [[joinProject]] and [[leaveProject]], which can be overridden in other mixins.\n */\nexport class AbstractPartOfProjectModelMixin extends Mixin([AbstractPartOfProjectGenericMixin, Model], (base) => {\n const superProto = base.prototype;\n class AbstractPartOfProjectModelMixin extends base {\n joinStore(store) {\n let joinedProject = null;\n // Joining a store that is not part of project (for example a chained store) should not affect engine\n if (isInstanceOf(store, AbstractPartOfProjectStoreMixin)) {\n const project = store.getProject();\n if (project && !this.getProject()) {\n this.setProject(project);\n joinedProject = project;\n }\n }\n superProto.joinStore.call(this, store);\n // Join directly only if not repopulating the store, in which case we will be joined later after\n // graph has been recreated\n if (joinedProject && !joinedProject.isRepopulatingStores)\n this.joinProject();\n }\n unjoinStore(store, isReplacing = false) {\n superProto.unjoinStore.call(this, store, isReplacing);\n const { project } = this;\n const isLeavingProjectStore = (isInstanceOf(store, AbstractPartOfProjectStoreMixin))\n && !store.isFillingFromMaster && project === (store.isChained && store.project ?\n store.masterStore.project\n : store.project);\n // Leave project when unjoining from store, but do not bother if the project is being destroyed or if\n // the dataset is being replaced, or if store is chained into other project\n if (project && !project.isDestroying && !project.isRepopulatingStores && isLeavingProjectStore) {\n this.leaveProject(isReplacing);\n this.setProject(null);\n }\n // @ts-ignore\n if (isLeavingProjectStore)\n this.graph = null;\n }\n /**\n * Template method, which is called when model is joining the project (through joining some store that\n * has already joined the project)\n */\n joinProject() { }\n /**\n * Template method, which is called when model is leaving the project (through leaving some store usually)\n */\n leaveProject(isReplacing = false) { }\n calculateProject() {\n const store = this.stores?.find(s => (isInstanceOf(s, AbstractPartOfProjectStoreMixin)) && !!s.getProject());\n return store?.getProject();\n }\n async setAsync(fieldName, value, silent) {\n const result = this.set(fieldName, value, silent);\n await this.project?.commitAsync();\n return result;\n }\n async getAsync(fieldName) {\n await this.project?.commitAsync();\n return this.get(fieldName);\n }\n get isStmRestoring() {\n const project = this.getProject();\n return project?.isRestoringData || project?.stm.isRestoring || false;\n }\n }\n return AbstractPartOfProjectModelMixin;\n}) {\n}\n", "import { Mixin } from \"../../../../ChronoGraph/class/BetterMixin.js\";\nimport { CorePartOfProjectGenericMixin } from \"../../CorePartOfProjectGenericMixin.js\";\nimport Model from \"../../../../Core/data/Model.js\";\nimport { AbstractPartOfProjectModelMixin } from \"./AbstractPartOfProjectModelMixin.js\";\n/**\n * This a mixin for every Model that belongs to a scheduler_core project.\n *\n * It adds functions needed to calculate invalidated fields on project commit.\n */\nexport class CorePartOfProjectModelMixin extends Mixin([\n AbstractPartOfProjectModelMixin,\n CorePartOfProjectGenericMixin,\n Model\n], (base) => {\n const superProto = base.prototype;\n class CorePartOfProjectModelMixin extends base {\n constructor() {\n super(...arguments);\n // Flag set during calculation\n this.$isCalculating = false;\n // Proposed changes\n this.$changed = {};\n // Value before proposed change, for buckets that need to update data early\n this.$beforeChange = {};\n }\n get isInActiveTransaction() {\n return true;\n }\n // Invalidate record upon joining project, leads to a buffered commit\n joinProject() {\n this.invalidate();\n }\n // Trigger a buffered commit when leaving the project\n leaveProject(isReplacing = false) {\n superProto.leaveProject.call(this, isReplacing);\n this.project?.bufferedCommitAsync();\n }\n /**\n * Invalidates this record, queueing it for calculation on project commit.\n */\n invalidate() {\n this.project?.invalidate(this);\n }\n /**\n * Used to retrieve the proposed (before 'dataReady') or current (after 'dataReady') value for a field.\n * If there is no proposed change, it is functionally equal to a normal `record.get()` call.\n */\n getCurrentOrProposed(fieldName) {\n if (fieldName in this.$changed && this.$changed[fieldName] !== true) {\n return this.$changed[fieldName];\n }\n return this.get(fieldName) ?? null;\n }\n /**\n * Determines if the specified field has a value or not, value can be either current or proposed.\n */\n hasCurrentOrProposed(fieldName) {\n return ((fieldName in this.$changed) && this.$changed[fieldName] != true) || this.get(fieldName) != null;\n }\n /**\n * Propose changes, to be considered during calculation. Also invalidates the record.\n */\n propose(changes) {\n // @ts-ignore\n if (this.project || this.recurringTimeSpan?.project) {\n const keys = Object.keys(changes);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n this.$changed[key] = changes[key];\n }\n this.invalidate();\n }\n else {\n // If no project, behave as a normal model would\n this.set(changes);\n }\n }\n /**\n * Similar to propose, but with more options. Mostly used by buckets, since they need data to update early.\n */\n setChanged(field, value, invalidate = true, setData = false) {\n const me = this;\n me.$changed[field] = value;\n // Buckets need to keep data up to date immediately\n if (setData) {\n if (!(field in me.$beforeChange)) {\n me.$beforeChange[field] = me.get(field);\n }\n me.setData(field, value);\n }\n invalidate && me.invalidate();\n }\n /**\n * Hook called before project refresh, override and calculate required changes in subclasses\n */\n calculateInvalidated() { }\n /**\n * Called after project refresh, before dataReady. Announce updated data\n */\n finalizeInvalidated(silent = false) {\n const me = this;\n me.$isCalculating = true;\n if (!silent) {\n // First silently revert any data change (used by buckets), otherwise it won't be detected by `set()`\n me.setData(me.$beforeChange);\n // Then do a proper set\n me.set(me.$changed);\n }\n else {\n me.setData(me.$changed);\n }\n me.$changed = {};\n me.$beforeChange = {};\n me.$isCalculating = false;\n }\n }\n return CorePartOfProjectModelMixin;\n}) {\n}\n", "import { Mixin } from \"../../../../ChronoGraph/class/BetterMixin.js\";\nimport { CorePartOfProjectModelMixin } from \"../mixin/CorePartOfProjectModelMixin.js\";\n/**\n * Core resource model class.\n */\nexport class CoreResourceMixin extends Mixin([CorePartOfProjectModelMixin], (base) => {\n const superProto = base.prototype;\n class CoreResourceMixin extends base {\n get assigned() {\n return this.project?.assignmentStore.getResourcesAssignments(this);\n }\n joinProject() {\n // Set up assignment -> resource mapping when joining store after assignment (skip during load)\n // (note that there is no resourceStore yet when loading inline data, thus the first part of the condition)\n if (this.resourceStore && !this.resourceStore.isLoadingData) {\n this.assignmentStore?.query(a => a.get('resource') === this.id).forEach(unresolved => unresolved.setChanged('resource', this));\n }\n superProto.joinProject.call(this);\n }\n leaveProject(isReplacing = false) {\n // `this.assigned` will be empty if model is added to project and then removed immediately\n // w/o any propagations\n // when replacing a resource or reloading the store, the assignments should be left intact\n if (this.assigned && !isReplacing && !this.resourceStore?.isLoadingData) {\n const resourceStore = this.resourceStore;\n // to batch the assignments removal, we don't remove the assignments right away, but instead\n // add them for the batched removal to the `assignmentsForRemoval` property of the event store\n this.assigned.forEach(assignment => resourceStore.assignmentsForRemoval.add(assignment));\n }\n superProto.leaveProject.call(this);\n }\n applyValue(useProp, key, value, skipAccessor, field) {\n // Changing id on a resource should update resourceId on its assignments\n // (note that field might not exist, if user supplies data for undefined fields)\n if (field?.name === 'id') {\n this.assigned.forEach(assignment => {\n assignment.set('resourceId', value);\n });\n }\n superProto.applyValue.call(this, useProp, key, value, skipAccessor, field);\n }\n }\n return CoreResourceMixin;\n}) {\n}\n", "import GridRowModel from '../../Grid/data/GridRowModel.js';\nimport PartOfProject from '../data/mixin/PartOfProject.js';\nimport ResourceModelMixin from './mixin/ResourceModelMixin.js';\nimport { CoreResourceMixin } from '../../Engine/quark/model/scheduler_core/CoreResourceMixin.js';\nconst EngineMixin = CoreResourceMixin;\n/**\n * @module Scheduler/model/ResourceModel\n */\n/**\n * This class represent a single Resource in scheduler, usually added to a {@link Scheduler.data.ResourceStore}.\n *\n * It is a subclass of {@link Core.data.Model}. Please refer to the documentation for that class to become familiar\n * with the base interface of the resource.\n *\n * ## Fields and references\n *\n * A resource has a few predefined fields, see Fields below. If you want to add more fields with meta data describing\n * your resources then you should subclass this class:\n *\n * ```javascript\n * class MyResource extends ResourceModel {\n * static get fields() {\n * return [\n * // \"id\" and \"name\" fields are already provided by the superclass\n * { name: 'company', type : 'string' }\n * ];\n * }\n * });\n * ```\n *\n * If you want to use other names in your data for the id and name fields you can configure them as seen below:\n *\n * ```javascript\n * class MyResource extends ResourceModel {\n * static get fields() {\n * return [\n * { name: 'name', dataSource: 'userName' }\n * ];\n * },\n * });\n * ```\n *\n * After load and project normalization, these references are accessible (assuming their respective stores are loaded):\n * - `{@link #property-assignments}` - The linked assignment records\n * - `{@link #property-events}` - The linked (through assignments) event records\n *\n * ## Async resolving of references\n *\n * As described above, a resource has links to assignments and events. These references are populated async, using the\n * calculation engine of the project that the resource via its store is a part of. Because of this asyncness, references\n * cannot be used immediately after assignment modifications:\n *\n * ```javascript\n * assignment.resourceId = 2;\n * // resource.assignments is not yet up to date\n * ```\n *\n * To make sure references are updated, wait for calculations to finish:\n *\n * ```javascript\n * assignment.resourceId = 2;\n * await assignment.project.commitAsync();\n * // resource.assignments is up to date\n * ```\n *\n * As an alternative, you can also use `setAsync()` to trigger calculations directly after the change:\n *\n * ```javascript\n * await assignment.setAsync({ resourceId : 2});\n * // resource.assignments is up to date\n * ```\n *\n * @extends Grid/data/GridRowModel\n * @mixes Scheduler/model/mixin/ResourceModelMixin\n */\nexport default class ResourceModel extends ResourceModelMixin(PartOfProject(EngineMixin.derive(GridRowModel))) {\n /**\n * Get associated events\n *\n * @member {Scheduler.model.EventModel[]} events\n * @readonly\n * @category Common\n */\n /**\n * Get associated {@link Scheduler/model/ResourceTimeRangeModel resource time ranges}. Only available when using\n * the `ResourceTimeRanges` feature.\n *\n * @member {Scheduler.model.ResourceTimeRangeModel[]} timeRanges\n * @readonly\n * @category Common\n */\n static $name = 'ResourceModel';\n}\nResourceModel.exposeProperties();\nResourceModel._$name = 'ResourceModel';", "import { Mixin } from \"../../../../ChronoGraph/class/BetterMixin.js\";\nimport { CorePartOfProjectGenericMixin } from \"../../CorePartOfProjectGenericMixin.js\";\nimport Store from \"../../../../Core/data/Store.js\";\nimport { AbstractPartOfProjectStoreMixin } from \"./AbstractPartOfProjectStoreMixin.js\";\n/**\n * This a mixin for every Store, that belongs to a scheduler_core project.\n */\nexport class CorePartOfProjectStoreMixin extends Mixin([\n AbstractPartOfProjectStoreMixin,\n CorePartOfProjectGenericMixin,\n Store\n], (base) => {\n const superProto = base.prototype;\n class CorePartOfProjectStoreMixin extends base {\n setProject(project) {\n const result = superProto.setProject.call(this, project);\n if (project)\n this.joinProject(project);\n return result;\n }\n joinProject(project) { }\n onCommitAsync() { }\n }\n return CorePartOfProjectStoreMixin;\n}) {\n}\n", "import { Mixin } from \"../../../ChronoGraph/class/Mixin.js\";\nimport { AbstractPartOfProjectStoreMixin } from \"./mixin/AbstractPartOfProjectStoreMixin.js\";\nconst dataAddRemoveActions = {\n splice: 1,\n clear: 1\n};\n// Shared functionality for CoreResourceStore & ChronoResourceStore\nexport class AbstractResourceStoreMixin extends Mixin([AbstractPartOfProjectStoreMixin], (base) => {\n const superProto = base.prototype;\n class AbstractResourceStoreMixin extends base {\n constructor() {\n super(...arguments);\n this.assignmentsForRemoval = new Set();\n }\n // we need `onDataChange` for `syncDataOnLoad` option to work\n onDataChange(event) {\n // remove from a filter action must be ignored.\n const isAddRemove = dataAddRemoveActions[event.action];\n super.onDataChange(event);\n if (isAddRemove && event.removed?.length)\n this.afterResourceRemoval();\n }\n // it seems `onDataChange` is not triggered for `remove` with `silent` flag\n remove(records, silent) {\n const res = superProto.remove.call(this, records, silent);\n this.afterResourceRemoval();\n return res;\n }\n // it seems `onDataChange` is not triggered for `TreeStore#removeAll()`\n removeAll(silent) {\n const res = superProto.removeAll.call(this, silent);\n this.afterResourceRemoval();\n return res;\n }\n afterResourceRemoval() {\n const assignmentStore = this.getAssignmentStore();\n if (assignmentStore && !assignmentStore.allAssignmentsForRemoval) {\n const assignmentsForRemoval = [...this.assignmentsForRemoval].filter(assignment => !assignmentStore.assignmentsForRemoval.has(assignment));\n assignmentsForRemoval.length > 0 && assignmentStore.remove(assignmentsForRemoval);\n }\n this.assignmentsForRemoval.clear();\n }\n processRecord(resourceRecord, isDataset = false) {\n const existingRecord = this.getById(resourceRecord.id);\n const isReplacing = existingRecord && existingRecord !== resourceRecord;\n if (isReplacing) {\n //@ts-ignore\n for (const assignment of existingRecord.assigned || []) {\n assignment.resource = resourceRecord;\n }\n }\n return resourceRecord;\n }\n }\n return AbstractResourceStoreMixin;\n}) {\n}\n", "import { Mixin } from \"../../../ChronoGraph/class/BetterMixin.js\";\nimport { CorePartOfProjectStoreMixin } from \"./mixin/CorePartOfProjectStoreMixin.js\";\nimport { CoreResourceMixin } from \"../model/scheduler_core/CoreResourceMixin.js\";\nimport { AbstractResourceStoreMixin } from \"./AbstractResourceStoreMixin.js\";\n/**\n * A store mixin class, that represent collection of all resources in the [[SchedulerCoreProjectMixin|project]].\n */\nexport class CoreResourceStoreMixin extends Mixin([AbstractResourceStoreMixin, CorePartOfProjectStoreMixin], (base) => {\n const superProto = base.prototype;\n class CoreResourceStoreMixin extends base {\n static get defaultConfig() {\n return {\n modelClass: CoreResourceMixin\n };\n }\n joinProject() {\n this.assignmentStore?.linkAssignments(this, 'resource');\n }\n afterLoadData() {\n this.assignmentStore?.linkAssignments(this, 'resource');\n }\n clear(removing) {\n superProto.clear.call(this, removing);\n this.assignmentStore?.unlinkAssignments('resource');\n }\n }\n return CoreResourceStoreMixin;\n}) {\n}\n", "// Private class that leverages the differences between a core and a basic project\nexport default Target => class PartOfBaseProject extends Target {\n static get $name() {\n return 'PartOfBaseProject';\n }\n get assignmentStore() {\n return this.project.assignmentStore;\n }\n get calendarManagerStore() {\n return this.project.calendarManagerStore;\n }\n get dependencyStore() {\n return this.project.dependencyStore;\n }\n get eventStore() {\n return this.project.eventStore;\n }\n get resourceStore() {\n return this.project.resourceStore;\n }\n};\n", "import ResourceStoreMixin from './mixin/ResourceStoreMixin.js';\nimport ResourceModel from '../model/ResourceModel.js';\nimport AjaxStore from '../../Core/data/AjaxStore.js';\nimport PartOfProject from '../data/mixin/PartOfProject.js';\nimport { CoreResourceStoreMixin } from '../../Engine/quark/store/CoreResourceStoreMixin.js';\nimport PartOfBaseProject from './mixin/PartOfBaseProject.js';\nconst EngineMixin = PartOfProject(CoreResourceStoreMixin.derive(AjaxStore));\n/**\n * @module Scheduler/data/ResourceStore\n */\n/**\n * A store holding all the {@link Scheduler.model.ResourceModel resources} to be rendered into a\n * {@link Scheduler.view.Scheduler Scheduler}.\n *\n * This store only accepts a model class inheriting from {@link Scheduler.model.ResourceModel}.\n *\n * A ResourceStore is usually connected to a project, which binds it to other related stores (EventStore,\n * AssignmentStore and DependencyStore). The project also handles references (assignments, events) to related records\n * for the records in the store.\n *\n * Resolving the references happens async, records are not guaranteed to have up to date references until calculations\n * are finished. To be certain that references are resolved, call `await project.commitAsync()` after store actions. Or\n * use one of the `xxAsync` functions, such as `loadDataAsync()`.\n *\n * Using `commitAsync()`:\n *\n * ```javascript\n * resourceStore.data = [{ id }, ...];\n *\n * // references (assignments, events) not resolved yet\n *\n * await resourceStore.project.commitAsync();\n *\n * // now they are\n * ```\n *\n * Using `loadDataAsync()`:\n *\n * ```javascript\n * await resourceStore.loadDataAsync([{ id }, ...]);\n *\n * // references (assignments, events) are resolved\n * ```\n *\n * @mixes Scheduler/data/mixin/PartOfProject\n * @mixes Scheduler/data/mixin/ResourceStoreMixin\n * @extends Core/data/AjaxStore\n */\nexport default class ResourceStore extends ResourceStoreMixin(EngineMixin) {\n static get defaultConfig() {\n return {\n modelClass : ResourceModel\n };\n }\n}\nResourceStore._$name = 'ResourceStore';", "import Base from '../../../Core/Base.js';\nimport Model from '../../../Core/data/Model.js';\nimport DateHelper from '../../../Core/helper/DateHelper.js';\nimport FunctionHelper from '../../../Core/helper/FunctionHelper.js';\n/**\n * @module Scheduler/data/mixin/EventStoreMixin\n */\n/**\n * This is a mixin, containing functionality related to managing events.\n *\n * It is consumed by the regular {@link Scheduler.data.EventStore} class and the Scheduler Pro's `EventStore` class.\n *\n * @mixin\n */\nexport default Target => class EventStoreMixin extends (Target || Base) {\n static $name = 'EventStoreMixin';\n /**\n * Add events to the store.\n *\n * NOTE: Dates, durations and references (assignments, resources) on the events are determined async by a calculation\n * engine. Thus they cannot be directly accessed after using this function.\n *\n * For example:\n *\n * ```javascript\n * eventStore.add({ startDate, duration });\n * // endDate is not yet calculated\n * ```\n *\n * To guarantee data is in a calculated state, wait for calculations for finish:\n *\n * ```javascript\n * eventStore.add({ startDate, duration });\n * await eventStore.project.commitAsync();\n * // endDate is calculated\n * ```\n *\n * Alternatively use `addAsync()` instead:\n *\n * ```javascript\n * await eventStore.addAsync({ startDate, duration });\n * // endDate is calculated\n * ```\n *\n * @param {Scheduler.model.EventModel|Scheduler.model.EventModel[]|EventModelConfig|EventModelConfig[]} records\n * Array of records/data or a single record/data to add to store\n * @param {Boolean} [silent] Specify `true` to suppress events\n * @returns {Scheduler.model.EventModel[]} Added records\n * @function add\n * @category CRUD\n */\n /**\n * Add events to the store and triggers calculations directly after. Await this function to have up to date data on\n * the added events.\n *\n * ```javascript\n * await eventStore.addAsync({ startDate, duration });\n * // endDate is calculated\n * ```\n *\n * @param {Scheduler.model.EventModel|Scheduler.model.EventModel[]|EventModelConfig|EventModelConfig[]} records\n * Array of records/data or a single record/data to add to store\n * @param {Boolean} [silent] Specify `true` to suppress events\n * @returns {Scheduler.model.EventModel[]} Added records\n * @function addAsync\n * @category CRUD\n * @async\n */\n /**\n * Applies a new dataset to the EventStore. Use it to plug externally fetched data into the store.\n *\n * NOTE: Dates, durations and relations (assignments, resources) on the events are determined async by a calculation\n * engine. Thus they cannot be directly accessed after assigning the new dataset.\n *\n * For example:\n *\n * ```javascript\n * eventStore.data = [{ startDate, duration }];\n * // eventStore.first.endDate is not yet calculated\n * ```\n *\n * To guarantee data is in a calculated state, wait for calculations for finish:\n *\n * ```javascript\n * eventStore.data = [{ startDate, duration }];\n * await eventStore.project.commitAsync();\n * // eventStore.first.endDate is calculated\n * ```\n *\n * Alternatively use `loadDataAsync()` instead:\n *\n * ```javascript\n * await eventStore.loadDataAsync([{ startDate, duration }]);\n * // eventStore.first.endDate is calculated\n * ```\n *\n * @member {EventModelConfig[]} data\n * @category Records\n */\n /**\n * Applies a new dataset to the EventStore and triggers calculations directly after. Use it to plug externally\n * fetched data into the store.\n *\n * ```javascript\n * await eventStore.loadDataAsync([{ startDate, duration }]);\n * // eventStore.first.endDate is calculated\n * ```\n *\n * @param {EventModelConfig[]} data Array of EventModel data objects\n * @function loadDataAsync\n * @category CRUD\n * @async\n */\n /**\n * Class used to represent records. Defaults to class EventModel.\n * @member {Scheduler.model.EventModel} modelClass\n * @typings {typeof EventModel}\n * @category Records\n */\n static get defaultConfig() {\n return {\n /**\n * CrudManager must load stores in the correct order. Lowest first.\n * @private\n */\n loadPriority : 100,\n /**\n * CrudManager must sync stores in the correct order. Lowest first.\n * @private\n */\n syncPriority : 200,\n storeId : 'events',\n /**\n * Configure with `true` to also remove the event when removing the last assignment from the linked\n * AssignmentStore. This config has not effect when using EventStore in legacy `resourceId`-mode.\n * @config {Boolean}\n * @default\n * @category Common\n */\n removeUnassignedEvent : true,\n /**\n * Configure with `true` to force single-resource mode, an event can only be assigned to a single resource.\n * If not provided, the mode will be inferred from\n *\n * 1. presence of an assignment store (i.e. multi-assignment)\n * 2. presence of `resourceId` in the event store data (i.e. single assignment mode)\n * @config {Boolean}\n * @category Common\n */\n singleAssignment : null\n };\n }\n //region Init & destroy\n construct(config) {\n super.construct(config);\n this.autoTree = true;\n if (this.singleAssignment) {\n this.usesSingleAssignment = true;\n }\n if (!this.modelClass.isEventModel) {\n throw new Error('The model for the EventStore must subclass EventModel');\n }\n }\n //endregion\n //region Events records, iteration etc.\n set filtersFunction(filtersFunction) {\n super.filtersFunction = filtersFunction;\n }\n get filtersFunction() {\n // Generate the real filterFn.\n const result = super.filtersFunction;\n // We always filter *in* records which are being created by the UI.\n if (result && result !== FunctionHelper.returnTrue) {\n return r => r.isCreating || result(r);\n }\n return result;\n }\n /**\n * Returns a `Map`, keyed by `YYYY-MM-DD` date keys containing event counts for all the days\n * between the passed `startDate` and `endDate`. Occurrences of recurring events are included.\n *\n * Example:\n *\n * ```javascript\n * eventCounts = eventStore.getEventCounts({\n * startDate : scheduler.timeAxis.startDate,\n * endDate : scheduler.timeAxis.endDate\n * });\n * ```\n *\n * @param {Object} options An options object determining which events to return\n * @param {Date} options.startDate The start date for the range of events to include.\n * @param {Date} [options.endDate] The end date for the range of events to include.\n * @category Events\n */\n getEventCounts(options) {\n const\n me = this,\n {\n filtersFunction,\n added\n } = me,\n // Must use getEvents so that the loadDateRange event is triggered.\n result = me.getEvents({\n ...options,\n storeFilterFn : me.isFiltered ? (me.reapplyFilterOnAdd ? filtersFunction : eventRecord => added.includes(eventRecord) ? me.indexOf(eventRecord) > -1 : filtersFunction(eventRecord)) : null,\n dateMap : options.dateMap || true\n });\n result.forEach((value, key) => result.set(key, value.length));\n return result;\n }\n /**\n * Calls the supplied iterator function once for every scheduled event, providing these arguments\n * - event : the event record\n * - startDate : the event start date\n * - endDate : the event end date\n *\n * Returning false cancels the iteration.\n *\n * @param {Function} fn iterator function\n * @param {Object} [thisObj] `this` reference for the function\n * @category Events\n */\n forEachScheduledEvent(fn, thisObj = this) {\n this.forEach(event => {\n const { startDate, endDate } = event;\n if (startDate && endDate) {\n return fn.call(thisObj, event, startDate, endDate);\n }\n });\n }\n /**\n * Returns an object defining the earliest start date and the latest end date of all the events in the store.\n *\n * @returns {Object} An object with 'startDate' and 'endDate' properties (or null values if data is missing).\n * @category Events\n */\n getTotalTimeSpan() {\n let earliest = new Date(9999, 0, 1),\n latest = new Date(0);\n this.forEach(event => {\n if (event.startDate) {\n earliest = DateHelper.min(event.startDate, earliest);\n }\n if (event.endDate) {\n latest = DateHelper.max(event.endDate, latest);\n }\n });\n earliest = earliest < new Date(9999, 0, 1) ? earliest : null;\n latest = latest > new Date(0) ? latest : null;\n // keep last calculated value to be able to track total timespan changes\n return (this.lastTotalTimeSpan = {\n startDate : earliest || null,\n endDate : latest || earliest || null\n });\n }\n /**\n * Checks if given event record is persistable. By default it always is, override EventModels `isPersistable` if you\n * need custom logic.\n *\n * @param {Scheduler.model.EventModel} event\n * @returns {Boolean}\n * @category Events\n */\n isEventPersistable(event) {\n return event.isPersistable;\n }\n //endregion\n //region Resource\n /**\n * Checks if a date range is allocated or not for a given resource.\n *\n * Note that when asked to check a 0 duration range, any 0 duration events at the same point in time will be\n * considered overlapping.\n *\n * @param {Date} start The start date\n * @param {Date} end The end date\n * @param {Scheduler.model.EventModel|null} excludeEvent An event to exclude from the check (or null)\n * @param {Scheduler.model.ResourceModel} resource The resource\n * @returns {Boolean} True if the timespan is available for the resource\n * @category Resource\n */\n isDateRangeAvailable(start, end, excludeEvent, resource) {\n // NOTE: Also exists in TaskStore.js\n // Cannot assign anything to generated parents\n if (resource.data.generatedParent) {\n return false;\n }\n // This should be a collection of unique event records\n const allEvents = new Set(this.getEventsForResource(resource));\n // In private mode we can pass an AssignmentModel. In this case, we assume that multi-assignment is used.\n // So we need to make sure that other resources are available for this time too.\n // No matter if the event retrieved from the assignment belongs to the target resource or not.\n // We gather all events from the resources the event is assigned to except of the one from the assignment record.\n // Note, events from the target resource are added above.\n if (excludeEvent?.isAssignment) {\n const\n currentEvent = excludeEvent.event,\n resources = currentEvent.resources;\n resources.forEach(resource => {\n // Ignore events for the resource which is passed as an AssignmentModel to excludeEvent\n if (resource.id !== excludeEvent.resourceId) {\n this.getEventsForResource(resource).forEach(event => allEvents.add(event));\n }\n });\n }\n if (excludeEvent) {\n const eventToRemove = excludeEvent.isAssignment ? excludeEvent.event : excludeEvent;\n allEvents.delete(eventToRemove);\n }\n const all = Array.from(allEvents);\n // Asked to check a 0 duration range, use different logic to consider 0 duration events at the same point in\n // time as overlapping\n if (start.getTime() === end.getTime()) {\n return !all.some(event =>\n event.isScheduled && (event.duration === 0\n // Same point in time for 0 duration events\n ? event.startDate.getTime() === start.getTime()\n // Normal overlap check for others\n : DateHelper.intersectSpans(start, end, event.startDate, event.endDate))\n );\n }\n return !all.some(event => event.isScheduled && DateHelper.intersectSpans(start, end, event.startDate, event.endDate));\n }\n /**\n * Filters the events associated with a resource, based on the function provided. An array will be returned for those\n * events where the passed function returns true.\n * @param {Scheduler.model.ResourceModel} resource\n * @param {Function} fn The function\n * @param {Object} [thisObj] `this` reference for the function\n * @returns {Scheduler.model.EventModel[]} the events in the time span\n * @private\n * @category Resource\n */\n filterEventsForResource(resource, fn, thisObj = this) {\n return resource.getEvents(this).filter(fn.bind(thisObj));\n }\n /**\n * Returns all resources assigned to an event.\n *\n * @param {Scheduler.model.EventModel|String|Number} event\n * @returns {Scheduler.model.ResourceModel[]}\n * @category Resource\n */\n getResourcesForEvent(event) {\n // If we are sent an occurrence, use its parent\n if (event.isOccurrence) {\n event = event.recurringTimeSpan;\n }\n return this.assignmentStore.getResourcesForEvent(event);\n }\n /**\n * Returns all events assigned to a resource.\n * *NOTE:* this does not include occurrences of recurring events. Use the\n * {@link Scheduler/data/mixin/GetEventsMixin#function-getEvents} API to include occurrences of recurring events.\n * @param {Scheduler.model.ResourceModel|String|Number} resource Resource or resource id.\n * @returns {Scheduler.model.EventModel[]}\n * @category Resource\n */\n getEventsForResource(resource) {\n return this.assignmentStore.getEventsForResource(resource);\n }\n //endregion\n //region Assignment\n /**\n * Returns all assignments for a given event.\n *\n * @param {Scheduler.model.EventModel|String|Number} event\n * @returns {Scheduler.model.AssignmentModel[]}\n * @category Assignment\n */\n getAssignmentsForEvent(event) {\n return this.assignmentStore.getAssignmentsForEvent(event) || [];\n }\n /**\n * Returns all assignments for a given resource.\n *\n * @param {Scheduler.model.ResourceModel|String|Number} resource\n * @returns {Scheduler.model.AssignmentModel[]}\n * @category Assignment\n */\n getAssignmentsForResource(resource) {\n return this.assignmentStore.getAssignmentsForResource(resource) || [];\n }\n /**\n * Creates and adds assignment record for a given event and a resource.\n *\n * @param {Scheduler.model.EventModel|String|Number} event\n * @param {Scheduler.model.ResourceModel|String|Number|Scheduler.model.ResourceModel[]|String[]|Number[]} resource The resource(s) to assign to the event\n * @param {Boolean} [removeExistingAssignments] `true` to first remove existing assignments\n * @returns {Scheduler.model.AssignmentModel[]} An array with the created assignment(s)\n * @category Assignment\n */\n assignEventToResource(event, resource, removeExistingAssignments = false) {\n return this.assignmentStore.assignEventToResource(event, resource, undefined, removeExistingAssignments);\n }\n /**\n * Removes assignment record for a given event and a resource.\n *\n * @param {Scheduler.model.EventModel|String|Number} event\n * @param {Scheduler.model.ResourceModel|String|Number} resource\n * @category Assignment\n */\n unassignEventFromResource(event, resource) {\n this.assignmentStore.unassignEventFromResource(event, resource);\n }\n /**\n * Reassigns an event from an old resource to a new resource\n *\n * @param {Scheduler.model.EventModel} event An event or id of the event to reassign\n * @param {Scheduler.model.ResourceModel|Scheduler.model.ResourceModel[]} oldResource A resource or id to unassign from\n * @param {Scheduler.model.ResourceModel|Scheduler.model.ResourceModel[]} newResource A resource or id to assign to\n * @category Assignment\n */\n reassignEventFromResourceToResource(event, oldResource, newResource) {\n const\n me = this,\n newResourceId = Model.asId(newResource),\n assignment = me.assignmentStore.getAssignmentForEventAndResource(event, oldResource);\n if (assignment) {\n assignment.resourceId = newResourceId;\n }\n else {\n me.assignmentStore.assignEventToResource(event, newResource);\n }\n }\n /**\n * Checks whether an event is assigned to a resource.\n *\n * @param {Scheduler.model.EventModel|String|Number} event\n * @param {Scheduler.model.ResourceModel|String|Number} resource\n * @returns {Boolean}\n * @category Assignment\n */\n isEventAssignedToResource(event, resource) {\n return this.assignmentStore.isEventAssignedToResource(event, resource);\n }\n /**\n * Removes all assignments for given event\n *\n * @param {Scheduler.model.EventModel|String|Number} event\n * @category Assignment\n */\n removeAssignmentsForEvent(event) {\n this.assignmentStore.removeAssignmentsForEvent(event);\n }\n /**\n * Removes all assignments for given resource\n *\n * @param {Scheduler.model.ResourceModel|String|Number} resource\n * @category Assignment\n */\n removeAssignmentsForResource(resource) {\n this.assignmentStore.removeAssignmentsForResource(resource);\n }\n //endregion\n /**\n * Appends a new record to the store\n * @param {Scheduler.model.EventModel} record The record to append to the store\n * @category CRUD\n */\n append(record) {\n return this.add(record);\n }\n //region Project\n get project() {\n return super.project;\n }\n set project(project) {\n super.project = project;\n this.detachListeners('project');\n if (project) {\n // Project already has AssignmentStore instance? Attach to it.\n if (project.assignmentStore?.isAssignmentStore) {\n this.attachToAssignmentStore(project.assignmentStore);\n }\n // Accessing assignmentStore would trigger `assignmentStoreChange` event on the project, so we set up\n // the listener after\n project.ion({\n name : 'project',\n assignmentStoreChange : 'onProjectAssignmentStoreChange',\n thisObj : this,\n prio : 200 // Before UI updates\n });\n }\n }\n //endregion\n //region resource ids\n get usesResourceIds() {\n return this.modelClass.fieldMap?.resourceIds.persist ?? false;\n }\n //endregion\n //region Single assignment\n get usesSingleAssignment() {\n if (this.isChained) {\n return this.masterStore.usesSingleAssignment;\n }\n return this._usesSingleAssignment;\n }\n set usesSingleAssignment(value) {\n this._usesSingleAssignment = value;\n const { assignmentStore } = this;\n // Use cheaper id generation for single assignment mode (no UUID needed)\n if (assignmentStore?.isStore && !assignmentStore.hasGenerateIdOverride) {\n // Normal fn on purpose, scope is AssignmentModel\n assignmentStore.modelClass.generateId = function() {\n if (this.singleAssignmentIdCounter == null) {\n this.singleAssignmentIdCounter = 0;\n }\n return `a-${++this.singleAssignmentIdCounter}`;\n };\n assignmentStore.hasGenerateIdOverride = true;\n }\n }\n processRecords(eventRecords) {\n const\n { assignmentStore } = this,\n assignmentsToAdd = [];\n // Same as on `joinRecordsToStore`, when adding a number of event records CoreEventMixin#joinProject method\n // will clear/rebuild cache in a loop. We raise this flag to skip invalidating assignment store indices for the time\n // we are joining records to the store. When they're added and indices are read, we will invalidate them.\n if (assignmentStore) {\n assignmentStore.skipInvalidateIndices = true;\n }\n eventRecords = super.processRecords(eventRecords, assignmentStore && !this.stm?.isRestoring && (eventRecord => {\n // AssignmentStore found, add an assignment to it if this is not a dataset operation\n const resourceId = eventRecord.get('resourceId');\n if (!eventRecord.reassignedFromReplace && resourceId != null) {\n // Check if the event is already assigned to the resource, though it's not in the event store.\n // It could happen when you remove an event, so both event and assignment records are removed,\n // then you \"undo\" the action and the assignment is restored before the event is restored.\n if (!assignmentStore.includesAssignment(eventRecord.id, resourceId)) {\n // Cannot use `event.assign(resourceId)` since event is not part of store yet\n // Using a bit shorter generated id to not look so ugly in DOM\n assignmentsToAdd.push({\n id : assignmentStore.modelClass.generateId(''),\n resourceId,\n eventId : eventRecord.id\n });\n }\n }\n // clear flag\n eventRecord.reassignedFromReplace = false;\n }) || undefined);\n if (assignmentStore) {\n assignmentStore.storage.invalidateIndices();\n assignmentStore.skipInvalidateIndices = false;\n assignmentStore.add(assignmentsToAdd);\n }\n return eventRecords;\n }\n joinRecordsToStore(records) {\n const { assignmentStore } = this;\n if (assignmentStore) {\n // When adding a number of event records CoreEventMixin#joinProject method will clear/rebuild cache in a loop.\n // We raise this flag to skip invalidating assignment store indices for the time we are joining records to\n // the store. When they're added and indices are read, we will invalidate them.\n assignmentStore.skipInvalidateIndices = true;\n super.joinRecordsToStore(records);\n assignmentStore.storage.invalidateIndices();\n assignmentStore.skipInvalidateIndices = false;\n }\n else {\n super.joinRecordsToStore(records);\n }\n }\n processRecord(eventRecord, isDataset = false) {\n eventRecord = super.processRecord(eventRecord, isDataset);\n const\n me = this,\n assignmentStore = me.assignmentStore ?? me.crudManager?.assignmentStore,\n resourceId = eventRecord.get('resourceId'),\n { resourceIds } = eventRecord;\n if (resourceIds?.length && eventRecord.meta.skipEnforcingSingleAssignment !== false && me.usesResourceIds) {\n if (assignmentStore) {\n assignmentStore.add(resourceIds\n .filter(resourceId => !assignmentStore.some(a => a.eventId === eventRecord.id && a.resourceId === resourceId))\n .map(resourceId => ({ resource : resourceId, event : eventRecord })));\n }\n else {\n me.$processResourceIds = true;\n }\n }\n else if (resourceId != null && !eventRecord.meta.skipEnforcingSingleAssignment) {\n const\n existingRecord = me.getById(eventRecord.id),\n isReplacing = existingRecord && existingRecord !== eventRecord && !isDataset;\n // Replacing an existing event, repoint the resource of its assignment\n // (already repointed to the new event by engine in EventStoreMixin)\n if (isReplacing) {\n // Have to look assignment up on store, removed by engine in super call above\n const assignmentSet = assignmentStore.storage.findItem('eventId', eventRecord.id);\n if (assignmentSet?.size) {\n const assignment = assignmentSet.values().next().value;\n assignment.resource = resourceId;\n eventRecord.reassignedFromReplace = true;\n }\n }\n // No AssignmentStore assigned yet, need to process when that happens. Or if it is a dataset operation,\n // processing will happen at the end of it to not add individual assignment (bad for performance)\n else {\n me.$processResourceIds = true;\n }\n // Flag that we have been loaded using resourceId, checked by CrudManager to exclude the internal\n // AssignmentStore from sync\n me.usesSingleAssignment = true;\n }\n return eventRecord;\n }\n processResourceIds() {\n const\n me = this,\n // When used in a standalone CrudManager, there is no direct link to the assignment store\n assignmentStore = me.assignmentStore ?? me.crudManager?.assignmentStore;\n if (me.$processResourceIds && assignmentStore?.isAssignmentStore && !(me.project?.isSharingAssignmentStore && me.isChained)) {\n const assignments = [];\n // resourceIds used during initialization, convert into assignments (ignoring any filter)\n me.forEach(eventRecord => {\n const { resourceId, resourceIds, id : eventId } = eventRecord;\n if (resourceId != null) {\n // Using a bit shorter generated id to not look so ugly in DOM\n assignments.push({\n id : assignmentStore.modelClass.generateId(''),\n resourceId,\n eventId\n });\n }\n else if (resourceIds?.length) {\n resourceIds.forEach(rId => {\n assignments.push({\n id : assignmentStore.modelClass.generateId(''),\n resourceId : rId,\n eventId\n });\n });\n }\n }, me, { includeFilteredOutRecords : true });\n // Disable as much as possible, since we are in full control of this store when using single assignment mode\n assignmentStore.useRawData = {\n disableDefaultValue : true,\n disableDuplicateIdCheck : true,\n disableTypeConversion : true\n };\n // Flag that throws in AssignmentStore if data is loaded some other way when using single assignment\n assignmentStore.usesSingleAssignment = false;\n // These assignments all use generated ids, and are not meant to be searialized anyway so bypass check\n assignmentStore.verifyNoGeneratedIds = false;\n assignmentStore.data = assignments;\n assignmentStore.usesSingleAssignment = true;\n me.$processResourceIds = false;\n }\n }\n loadTreeData() {\n super.loadTreeData(...arguments);\n this.processResourceIds();\n }\n loadData() {\n super.loadData(...arguments);\n this.processResourceIds();\n }\n // Optionally remove unassigned events\n onBeforeRemoveAssignment({ records }) {\n const me = this;\n if (\n me.removeUnassignedEvent && !me.isRemoving && !me.isSettingData &&\n !me.stm?.isRestoring && !me.usesSingleAssignment &&\n // Do not remove unassigned events when syncing data, new assignments etc. might be synced afterwards\n !me.assignmentStore.isSyncingDataOnLoad && !me.resourceStore.isSyncingDataOnLoad\n ) {\n const toRemove = new Set();\n // Collect all events that are unassigned after the remove\n records.forEach(assignmentRecord => {\n const { event } = assignmentRecord;\n // Assignment might not have an event or the event might already be removed\n if (event && !event.isRemoved && event.assignments.every(a => records.includes(a))) {\n toRemove.add(event);\n }\n });\n // And remove them\n if (toRemove.size) {\n me.remove([...toRemove]);\n }\n }\n }\n onProjectAssignmentStoreChange({ store }) {\n this.attachToAssignmentStore(store);\n }\n attachToAssignmentStore(assignmentStore) {\n const me = this;\n me.detachListeners('assignmentStore');\n if (assignmentStore) {\n me.processResourceIds();\n assignmentStore.ion({\n name : 'assignmentStore',\n // Adding an assignment in single assignment mode should set events resourceId if needed,\n // otherwise it should set events resourceIds (if persistable)\n addPreCommit({ records }) {\n if (!me.isSettingData && !me.isAssigning) {\n if (me.usesSingleAssignment) {\n records.forEach(assignment => {\n const { event } = assignment;\n if (event?.isEvent && event.resourceId !== assignment.resourceId) {\n event.meta.isAssigning = true;\n event.set('resourceId', assignment.resourceId);\n event.meta.isAssigning = false;\n }\n });\n }\n else if (me.usesResourceIds) {\n records.forEach(assignment => {\n const { event } = assignment;\n if (event?.isEvent) {\n event.meta.isAssigning = true;\n const resourceIds = event.resourceIds ?? [];\n if (!resourceIds.includes(assignment.resourceId)) {\n event.resourceIds = [...resourceIds, assignment.resourceId];\n }\n event.meta.isAssigning = false;\n }\n });\n }\n }\n },\n // Called both for remove and removeAll\n beforeRemove : 'onBeforeRemoveAssignment',\n // Removing an assignment in single assignment mode should set events resourceId to null,\n // otherwise it should set events resourceIds to an empty array\n removePreCommit({ records }) {\n if (!me.isSettingData && !me.isAssigning) {\n if (me.usesSingleAssignment) {\n records.forEach(assignment => {\n // With engine link to event is already broken when we get here, hence the lookup\n me.getById(assignment.eventId)?.set('resourceId', null);\n });\n }\n else if (me.usesResourceIds) {\n records.forEach(({ event, resourceId }) => {\n const\n resourceIds = event.resourceIds.slice(),\n indexToRemove = resourceIds?.indexOf(resourceId);\n if (indexToRemove >= 0) {\n resourceIds.splice(indexToRemove, 1);\n event.resourceIds = resourceIds;\n }\n });\n }\n }\n },\n removeAllPreCommit() {\n if (!me.isSettingData && !me.isAssigning) {\n if (me.usesSingleAssignment) {\n me.allRecords.forEach(eventRecord => eventRecord.set('resourceId', null));\n }\n else if (me.usesResourceIds) {\n me.allRecords.forEach(eventRecord => {\n eventRecord.resourceIds = [];\n });\n }\n }\n },\n // Keep events resourceId and resourceIds in sync with assignment on changes\n update({ record, changes }) {\n if ('resourceId' in changes) {\n const { event } = record;\n if (me.usesSingleAssignment) {\n event.meta.isAssigning = true;\n event.set('resourceId', changes.resourceId.value);\n event.meta.isAssigning = false;\n }\n else if (me.usesResourceIds) {\n event.meta.isAssigning = true;\n const\n resourceIds = event.resourceIds.slice(),\n indexToRemove = resourceIds?.indexOf(changes.resourceId.oldValue);\n if (indexToRemove >= 0) {\n resourceIds.splice(indexToRemove, 1);\n }\n if (!resourceIds?.includes(changes.resourceId.value)) {\n resourceIds.push(changes.resourceId.value);\n event.resourceIds = resourceIds;\n }\n event.meta.isAssigning = false;\n }\n }\n },\n // Keep events resourceIds in sync with assignment on dataset loading\n change({ action, records }) {\n if (action === 'dataset' && me.usesResourceIds) {\n records.forEach(({ event, resourceId }) => {\n const resourceIds = event.resourceIds ?? [];\n if (!resourceIds.includes(resourceId)) {\n resourceIds.push(resourceId);\n event.meta.isAssigning = true;\n event.setData('resourceIds', resourceIds);\n event.meta.isAssigning = false;\n }\n });\n }\n },\n thisObj : me\n });\n }\n }\n set data(data) {\n this.isSettingData = true;\n // When using single assignment, remove all assignments when loading a new set of events.\n // Don't do it when filling a chained store, assignments are for the master store\n if (this.usesSingleAssignment && !this.syncDataOnLoad && !this.isChained) {\n this.assignmentStore.removeAll(true);\n }\n super.data = data;\n this.isSettingData = false;\n }\n // Override trigger to decorate update/change events with a flag if resourceId was the only thing changed, in which\n // case the change most likely can be ignored since the assignment will also change\n trigger(eventName, params) {\n const { changes } = params || {};\n // https://github.com/bryntum/support/issues/6610\n // test: SchedulerPro/tests/data/UndoRedo.t.js, \"Should refresh the view after undoing the event copy-paste\"\n // can not ignore this event when stm is restoring, because of the edge case in that ticket\n if (changes && 'resourceId' in changes && Object.keys(changes).length === 1 && !this.stm?.isRestoring) {\n params.isAssign = true;\n }\n return super.trigger(...arguments);\n }\n remove(records, ...args) {\n const result = super.remove(records, ...args);\n // Make sure assignment is removed with event when using single assignment\n if (result.length && this.usesSingleAssignment) {\n for (const eventRecord of result) {\n if (!eventRecord.isOccurrence) {\n (this.assignmentStore || this.crudManager?.assignmentStore)?.remove(eventRecord.assignments, true);\n }\n }\n }\n return result;\n }\n //endregion\n applyChangeset() {\n const { project } = this;\n if (project) {\n project.hasLoadedDataToCommit = true;\n }\n const log = super.applyChangeset(...arguments);\n // If the applyChangeset hasn't triggered a commit, the hasLoadedDataToCommit flag won't be set to false\n // Need to see that it does. But cannot reset it here since it used in commitAsync, which is async...\n project?.commitAsync();\n return log;\n }\n};\n", "import DateHelper from '../../../Core/helper/DateHelper.js';\nimport Objects from '../../../Core/helper/util/Objects.js';\n/**\n * @module Scheduler/data/mixin/GetEventsMixin\n */\nconst\n returnTrue = () => true,\n notRecurring = event => !event.isRecurring;\n/**\n * Mixing containing functionality for retrieving a range of events, mainly used during rendering.\n *\n * Consumed by EventStore in Calendar, Scheduler & Scheduler Pro and TaskStore in Gantt.\n *\n * @mixin\n */\nexport default Target => class GetEventsMixin extends Target {\n static $name = 'GetEventsMixin';\n /**\n * Returns an array of events for the date range specified by the `startDate` and `endDate` options.\n *\n * By default, for any date, this includes any event which *intersects* that date.\n *\n * To only include events that are fully contained *within* the date range, pass the `allowPartial`\n * option as `false`.\n *\n * By default, any occurrences of recurring events are included in the resulting array (not applicable in Gantt). If\n * that is not required, pass the `includeOccurrences` option as `false`. **Note that if `includeOccurrences` is\n * `true`, the start date and end date options are mandatory. The method must know what range of occurrences needs\n * to be generated and returned.**\n *\n * Example:\n *\n * ```javascript\n * visibleEvents = eventStore.getEvents({\n * resourceRecord : myResource,\n * startDate : scheduler.timeAxis.startDate,\n * endDate : scheduler.timeAxis.endDate\n * });\n * ```\n *\n * @param {Object} options An options object determining which events to return\n * @param {Date} [options.date] If only one date is required, pass this option instead of the\n * `startDate` and `endDate` options.\n * @param {Date} options.startDate The start date for the range of events to include.\n * @param {Date} [options.endDate] The end date for the range of events to include.\n * @param {Scheduler.model.ResourceModel} [options.resourceRecord] Pass a resource to only return events assigned to\n * this resource. Not supported when using the `dateMap` option (see below)\n * @param {Function} [options.filter] A function to filter out events which are not required.\n * @param {Boolean} [options.ignoreFilters] By default, store filters are honoured. Pass this\n * as `true` to include filtered out events.\n * @param {Boolean} [options.includeOccurrences=true] Occurrences of recurring events are included by default.\n * @param {Boolean} [options.allowPartial=true] Events which start before or after the range, but *intersect* the\n * range are included by default.\n * @param {Boolean} [options.startOnly] Pass `true` to only include events which *start on* each date in the range.\n * @param {Boolean} [options.onlyAssigned] Pass `true` to only include events that are assigned to a resource\n * @param {Boolean|Map} [options.dateMap] Populates the passed `Map`, or if passed as `true`, creates and\n * returns a new `Map`. The keys are `YYYY-MM-DD` date strings and the entries are arrays of\n * {@link Scheduler.model.EventModel EventModel}s.\n * @returns {Scheduler.model.EventModel[]|Map} Events which match the passed configuration.\n * @category Events\n */\n getEvents({\n filter,\n date,\n startDate, // Events which intersect the startDate/endDate\n endDate, // will be returned\n startOnly, // Only events which start on each date will be returned\n includeOccurrences, // Interpolate occurrences into the returned event set\n allowPartial, // Include events which *intersect* the date range\n onlyAssigned = false, // Only include events that are assigned to a resource\n dateMap = false, // Return a Map keyed by date each value being an array of events\n dayTime = null,\n // Private option. Select which date index to look up events in depending on the date\n // we are examining in the date iteration process. Some callers may want to use\n // different indices depending on the stage through the date iteration.\n // See Calendar package for usage.\n getDateIndex\n }) {\n const\n me = this,\n options = arguments[0],\n {\n lastDateRange,\n added,\n filtersFunction\n } = me,\n passedFilter = filter;\n // Add filtering for only assigned events if requested.\n if (onlyAssigned) {\n options.filter = passedFilter ? e => passedFilter(e) && e.resources.length : e => e.resources.length;\n }\n // Note that we cannot use defaulting in the argument block because we pass\n // the incoming options object down into implementations.\n if (!('startDate' in options)) {\n startDate = options.startDate = date;\n }\n if (!('includeOccurrences' in options)) {\n includeOccurrences = options.includeOccurrences = true;\n }\n if (!('allowPartial' in options)) {\n allowPartial = options.allowPartial = !startOnly;\n }\n // We can't use me.filtersFunction if reapplyFilterOnAdd is false because there may be newly\n // added events which may not be subject to the filter. Records which are still in\n // the added bag must be tested for presence using indexOf so as to be always in sync\n // with the store being refiltered. Parens help readability.\n // Don't use the store's filtering function if we were asked to ignore filters.\n // eslint-disable-next-line no-extra-parens\n options.storeFilterFn = me.isFiltered && !options.ignoreFilters ? (me.reapplyFilterOnAdd ? filtersFunction : (eventRecord => added.includes(eventRecord) ? me.indexOf(eventRecord) > -1 : filtersFunction(eventRecord))) : null;\n // Default to a one day range if only startDate passed\n if (!endDate) {\n if (startDate) {\n endDate = options.endDate = DateHelper.clearTime(startDate);\n endDate.setDate(endDate.getDate() + 1);\n }\n // If no dates passed, the dateFilter will include all.\n else {\n // We need to know what occurrences to generate.\n if (includeOccurrences) {\n throw new Error('getEvents MUST be passed startDate and endDate if recurring occurrences are requested');\n }\n options.dateFilter = returnTrue;\n }\n }\n if (!options.dateFilter) {\n // Must start in the date range\n if (startOnly) {\n options.dateFilter = e => {\n // Avoid hitting getter twice. Use batched value if present.\n const eventStartDate = e.hasBatchedChange('startDate') ? e.get('startDate') : e.startDate;\n return eventStartDate && !(DateHelper.clearTime(eventStartDate) - startDate);\n };\n }\n // Any intersection with our date range\n else if (allowPartial) {\n options.dateFilter = e => {\n // Avoid hitting getter twice. Use batched value if present.\n const\n eventStartDate = e.hasBatchedChange('startDate') ? e.get('startDate') : e.startDate,\n eventEndDate = e.hasBatchedChange('endDate') ? e.get('endDate') : e.endDate || eventStartDate,\n isMilestone = !(eventStartDate - eventEndDate);\n return eventStartDate && (isMilestone ? DateHelper.betweenLesserEqual(eventStartDate, startDate, endDate) : DateHelper.intersectSpans(eventStartDate, eventEndDate, startDate, endDate));\n };\n }\n // Must be wholly contained with the our range\n else {\n options.dateFilter = e => {\n // Avoid hitting getter twice. Use batched value if present.\n const\n eventStartDate = e.hasBatchedChange('startDate') ? e.get('startDate') : e.startDate,\n eventEndDate = e.hasBatchedChange('endDate') ? e.get('endDate') : e.endDate || eventStartDate;\n return eventStartDate && eventStartDate >= startDate && eventEndDate <= endDate;\n };\n }\n }\n const newDateRange = {\n startDate,\n endDate\n };\n // Ensure the listeners are present\n me.processConfiguredListeners();\n /**\n * Fired when a range of events is requested from the {@link #function-getEvents} method.\n *\n *
\n * This event fires every time a range of events is\n * requested from the store.\n *
\n *\n * An application may have one of two levels of interest in events being read from a store.
\n *\n * 1. To be notified when any event block is requested regardless of what the\n * date range is.\n * 2. To be notified when a new date range is requested.\n *\n * This event allows both types of application to be written. The `changed` property is\n * set if a different date range is requested.\n *\n * ```javascript\n * new Scheduler({\n * eventStore : {\n * listeners : {\n * loadDateRange({ new : { startDate, endDate }, changed }) {\n * // Load new data if user is requesting a different time window.\n * if (changed) {\n * fetch(...);\n * }\n * }\n * }\n * },\n * ...\n * });\n * ```\n *\n * @event loadDateRange\n * @param {Scheduler.data.EventStore} source This EventStore\n * @param {Object} old The old date range\n * @param {Date} old.startDate the old start date.\n * @param {Date} old.endDate the old end date.\n * @param {Object} new The new date range\n * @param {Date} new.startDate the new start date.\n * @param {Date} new.endDate the new end date.\n * @param {Boolean} changed `true` if the date range is different from the last time a request was made.\n */\n me.trigger('loadDateRange', {\n old : lastDateRange || {},\n new : Objects.clone(newDateRange),\n changed : Boolean(!lastDateRange || (lastDateRange.startDate - newDateRange.startDate || lastDateRange.endDate - newDateRange.endDate))\n });\n // Dates are mutable, so we must keep our own copy.\n me.lastDateRange = Objects.clone(newDateRange);\n return dateMap ? me.getEventsAsMap(options) : me.getEventsAsArray(options);\n }\n /**\n * Internal implementation for {@link #function-getEvents} to use when not using dateMap.\n * @private\n */\n getEventsAsArray({\n filter,\n date,\n resourceRecord,\n startDate = date, // Events which intersect the startDate/endDate\n endDate, // will be returned\n startOnly, // Only events which start on each date will be returned\n includeOccurrences = true, // Interpolate occurrences into the returned event set\n dayTime = null,\n // Injected by the getEvents master method\n dateFilter,\n storeFilterFn,\n // Private option. Select which date index to look up events in depending on the date\n // we are examining in the date iteration process. Some callers may want to use\n // different indices depending on the stage through the date iteration.\n // See Calendar package for usage.\n getDateIndex\n }) {\n const\n me = this,\n events = [],\n count = storeFilterFn ? me.count : me.allCount;\n if (count) {\n let candidateEvents = resourceRecord ? me.getEventsForResource(resourceRecord) : null;\n // If there *was* a resourceRecord, candidateEvents will already be set up using me.getEventsForResource.\n // If no resourceRecord specified, we are gathering by date, so use the indices.\n if (!resourceRecord) {\n const\n dateIndex = me.useDayIndex(dayTime),\n eventSet = new Set(),\n indexName = startOnly ? 'startDate' : 'date';\n // Add all recurring events which started on or before our date range.\n me.recurringEvents.forEach(e => {\n if (dateIndex.dayTime.startOfDay(e.startDate) <= startDate) {\n eventSet.add(e);\n }\n });\n // Iterate the date range, using the indices to find qualified events.\n for (const date = new Date(startDate); date < endDate; date.setDate(date.getDate() + 1)) {\n const coincidingEvents = dateIndex.get(getDateIndex ? getDateIndex(date) : indexName, date);\n coincidingEvents?.forEach(e => eventSet.add(e));\n }\n // We gathered all events which *coincide* with each date.\n // We also added in all recurring events which started on or before our date range.\n // All these were made unique by the Set.\n // Return it to array form.\n candidateEvents = [...eventSet];\n }\n // Events found from the date indices won't be filtered.\n // On the other side, when using getEventForResource we will get all events for\n // the resource even if the EventStore is filtered, handle this by excluding \"invisible\" events here\n if (storeFilterFn) {\n candidateEvents = candidateEvents.filter(storeFilterFn);\n }\n // Go through candidates.\n // For a recurring event, and we are including recurrences, add date-qualifying occurrences.\n // For a non-recurring event, add it if it's date-qualified.\n for (let i = 0, { length } = candidateEvents; i < length; i++) {\n const e = candidateEvents[i];\n // For recurring events, add date-qualifying occurrences, not the base\n if (includeOccurrences && e.isRecurring) {\n events.push.apply(events, e.getOccurrencesForDateRange(startDate, endDate).filter(dateFilter));\n }\n // For ordinary events, add if it's date-qualified\n else if (dateFilter(e)) {\n events.push(e);\n }\n }\n }\n return filter ? events.filter(filter) : events;\n }\n /**\n * Internal implementation for {@link #function-getEvents} to use when using dateMap.\n * @private\n */\n getEventsAsMap({\n filter : passedFilter,\n date,\n resourceRecord, // Not supported yet. Will add if ever requested.\n startDate = date, // Events which intersect the startDate/endDate\n endDate, // will be returned\n startOnly, // Only events which start on each date will be returned\n includeOccurrences = true, // Interpolate occurrences into the returned event set\n dateMap, // Return a Map keyed by date each value being an array of events\n dayTime = null,\n storeFilterFn,\n // Private option. Select which date index to look up events in depending on the date\n // we are examining in the date iteration process. Some callers may want to use\n // different indices depending on the stage through the date iteration.\n // See Calendar package for usage.\n getDateIndex\n }) {\n const me = this;\n // Convert `true` to a Map.\n if (dateMap?.clear) {\n dateMap.clear();\n }\n else {\n dateMap = new Map();\n }\n if (me.count) {\n const\n dateIndex = me.useDayIndex(dayTime),\n indexName = startOnly ? 'startDate' : 'date',\n recurringEvents = [],\n filter = e => (!passedFilter || passedFilter(e)) && (!storeFilterFn || storeFilterFn(e)),\n baseEventFilter = e => notRecurring(e) && filter(e);\n dayTime = dateIndex.dayTime; // dayTime=null becomes DayTime instance for midnight\n // We can't yet do this for just a resource.\n if (resourceRecord) {\n throw new Error('Querying for events for a resource and returning a date-keyed Map is not supported');\n }\n else {\n // Add all recurring events which started before the end of our date range.\n // There are none in Gantt projects\n me.recurringEvents?.forEach(e => {\n if (dayTime.startOfDay(e.startDate) < endDate) {\n recurringEvents.push(e);\n }\n });\n // Iterate the date range, using the indices to find qualified events.\n for (const date = new Date(startDate); date < endDate; date.setDate(date.getDate() + 1)) {\n let [coincidingEvents, key] = dateIndex.get(getDateIndex ? getDateIndex(date) : indexName, date, true);\n // The index entry may be there, but it could be empty.\n if (coincidingEvents?.size) {\n // Convert Set which index holds into an Array.\n // A recurring event doesn't go into the Map, its occurrences do.\n // Then filter by the passed filter and this Store's filter function\n // because events found from the date indices won't be filtered.\n coincidingEvents = [...coincidingEvents].filter(baseEventFilter);\n // Only create the entry for the day if there are events found\n if (coincidingEvents.length) {\n (dateMap.get(key) || (dateMap.set(key, []).get(key))).push(...coincidingEvents);\n }\n }\n }\n }\n // Go through matching recurring events.\n for (let i = 0, { length } = recurringEvents; i < length; i++) {\n const\n e = recurringEvents[i],\n // For each recurring event, add occurrences if we are including occurrences else, add the base.\n // Then filter by the passed filter and this Store's filter function\n // because events found from the date indices won't be filtered.\n occurrences = (includeOccurrences ? e.getOccurrencesForDateRange(startDate, endDate) : [e]).filter(filter),\n lastDate = DateHelper.add(endDate, 1, 'day');\n // Add occurrences to dateMap\n for (let bucket, i = 0, { length } = occurrences; i < length; i++) {\n const\n occurrence = occurrences[i],\n date = dayTime.startOfDay(occurrence.startDate),\n indexName = getDateIndex ? getDateIndex(date) : (startOnly ? 'startDate' : 'date'),\n lastIntersectingDate = (indexName === 'startDate') || !occurrence.durationMS\n ? DateHelper.add(date, 1, 'day')\n : DateHelper.min(occurrence.endDate || DateHelper.add(occurrence.startDate, occurrence.duration, occurrence.durationUnit), lastDate);\n // Loop through covered dates, adding to dateMap if required\n for (; date < lastIntersectingDate; date.setDate(date.getDate() + 1)) {\n const key = dayTime.dateKey(date);\n (bucket = dateMap.get(key)) || dateMap.set(key, bucket = []);\n bucket.push(occurrence);\n }\n }\n }\n }\n return dateMap;\n }\n};\n", "import DayTime from '../../../Core/util/DayTime.js';\n/**\n * @module Scheduler/data/util/EventDayIndex\n */\nconst\n // Maps an index name that can be requested to its storage property on the EventDayIndex instance:\n indexNameMap = {\n date : '_dateIndex',\n startDate : '_startDateIndex'\n },\n indexProps = Object.values(indexNameMap),\n emptyArray = Object.freeze([]),\n { MILLIS_PER_DAY } = DayTime;\n/**\n * This utility class is used by event stores to index events by their day (a \"YYYY-MM-DD\" value, also known as a\n * \"date key\"). This key is produced by a {@link Core.util.DayTime} instance. If two `DayTime` instances have a common\n * `startShift`, they can share an index.\n *\n * @internal\n */\nexport default class EventDayIndex {\n constructor(store, dayTime) {\n /**\n * The `DayTime` definition for this index. This is set to the initial DayTime instance but can be used for\n * any other {@link #function-register registered} `DayTime` instances since they all posses the same value for\n * `startShift`.\n *\n * This defaults to {@link Core.util.DayTime#property-MIDNIGHT-static}.\n * @member {Core.util.DayTime} dayTime\n * @readonly\n */\n this.dayTime = dayTime || DayTime.MIDNIGHT;\n /**\n * The owning store instance of this index.\n * @member {Scheduler.data.EventStore} store\n * @private\n * @readonly\n */\n this.store = store;\n /**\n * The `DayTime` instances {@link #function-register registered} with this index instance. As instances are\n * {@link #function-unregister unregistered} they are removed from this array. Once this array is empty, this\n * index can be discarded.\n * @member {Core.util.DayTime[]} users\n * @private\n */\n this.users = [this.dayTime];\n }\n /**\n * Adds an event record to the specified index (either \"startDate\" or \"date\") for a given `date`.\n * @param {String} indexName The index to which the event record is to be added (either \"startDate\" or \"date\").\n * @param {Date|Number} date A date for which the event record overlaps. The {@link Core.util.DayTime#function-dateKey}\n * method is used to convert this date to a \"YYYY-MM-DD\" key for the index.\n * @param {Scheduler.model.EventModel} eventRecord The event record.\n * @private\n */\n add(indexName, date, eventRecord) {\n const\n index = this[indexNameMap[indexName]],\n key = this.dayTime.dateKey(date),\n entry = index[key] || (index[key] = new Set());\n entry.add(eventRecord);\n }\n /**\n * Adds an event record to all indexes for all dates which the event overlaps.\n * @param {Scheduler.model.EventModel} eventRecord The event record.\n * @private\n */\n addEvent(eventRecord) {\n let dateMS = this.dayTime.startOfDay(eventRecord.startDate)?.getTime(),\n endDateMS;\n if (dateMS) {\n endDateMS = eventRecord.endDate?.getTime() ?? dateMS;\n this.add('startDate', dateMS, eventRecord);\n do {\n this.add('date', dateMS, eventRecord);\n dateMS += MILLIS_PER_DAY;\n } while (dateMS < endDateMS);\n }\n }\n /**\n * Clear this index.\n */\n clear() {\n indexProps.forEach(name => this[name] = Object.create(null));\n }\n /**\n * Returns an object that has properties named by the {@link Core.util.DayTime#function-dateKey} method, or the\n * array of event records if a `date` is specified, or the event record array and the date key in a 2-element array\n * if `returnKey` is `true`.\n * @param {String} indexName The name of the desired index (either 'date' or 'startDate').\n * @param {Number|Date} date The date as a `Date` or the millisecond UTC epoch. When passed, this method will return\n * the array of event records for this date.\n * @param {Boolean} [returnKey] Specify `true` to return the date key along with the event record array.\n * @returns {Object|Scheduler.model.EventModel[]}\n */\n get(indexName, date, returnKey) {\n // Date indices are created on first usage and after that kept up to date on changes\n !this.initialized && this.initialize();\n let ret = this[indexNameMap[indexName]],\n key;\n if (date) {\n key = this.dayTime.dateKey(date);\n ret = returnKey ? [ret[key], key] : ret[key];\n }\n return ret;\n }\n /**\n * Called when this index is first used. Once called, further store changes will be used to maintain this index.\n * @private\n */\n initialize() {\n this.initialized = true;\n this.clear();\n this.sync('splice', this.store.storage.allValues);\n }\n invalidate() {\n this.initialized = false;\n indexProps.forEach(name => this[name] = null);\n }\n /**\n * Returns `true` if the given `dayTime` matches this index.\n * @param {Core.util.DayTime} dayTime\n * @returns {Boolean}\n */\n matches(dayTime) {\n return this.dayTime.startShift === dayTime.startShift;\n }\n /**\n * Removes an event record from the specified index (either \"startDate\" or \"date\") for a given `date`.\n * @param {String} indexName The index to which the event record is to be removed (either \"startDate\" or \"date\").\n * @param {Date|Number} date A date for which the event record overlaps. The {@link Core.util.DayTime#function-dateKey}\n * method is used to convert this date to a \"YYYY-MM-DD\" key for the index.\n * @param {Scheduler.model.EventModel} eventRecord The event record.\n * @private\n */\n remove(indexName, date, eventRecord) {\n const\n index = this[indexNameMap[indexName]],\n key = this.dayTime.dateKey(date),\n entry = index[key];\n if (entry) {\n entry.delete(eventRecord);\n }\n }\n /**\n * Removes an event record from all indexes for all dates which the event overlaps.\n * @param {Scheduler.model.EventModel} eventRecord The event record.\n * @param {Date} startDate The start date for the event. This may be different from the `startDate` of the given\n * `eventRecord` when the event is rescheduled.\n * @param {Date} endDate The end date for the event. This may be different from the `endDate` of the given\n * `eventRecord` when the event is rescheduled.\n * @private\n */\n removeEvent(eventRecord, startDate, endDate) {\n let dateMS = this.dayTime.startOfDay(startDate)?.getTime(),\n endDateMS;\n if (dateMS) {\n endDateMS = endDate?.getTime() ?? dateMS;\n this.remove('startDate', dateMS, eventRecord);\n do {\n this.remove('date', dateMS, eventRecord);\n dateMS += MILLIS_PER_DAY;\n } while (dateMS < endDateMS);\n }\n }\n sync(action, added, removed, replaced, wasSet) {\n added = added || emptyArray;\n removed = removed || emptyArray;\n const\n me = this,\n addedCount = added.length,\n removedCount = removed.length,\n replacedCount = replaced?.length;\n let i, newEvent, outgoingEvent;\n if (!me.initialized) {\n return;\n }\n switch (action) {\n case 'clear':\n me.clear();\n break;\n // Add and remove\n case 'splice':\n // Handle replacement of records by instances with same ID\n if (replacedCount) {\n added = added.slice();\n removed = removed.slice();\n for (i = 0; i < replacedCount; i++) {\n removed.push(replaced[i][0]);\n added.push(replaced[i][1]);\n }\n }\n // Remove entries from indices\n if (removedCount) {\n for (i = 0; i < removedCount; i++) {\n outgoingEvent = removed[i];\n me.removeEvent(outgoingEvent, outgoingEvent.startDate, outgoingEvent.endDate);\n }\n }\n // Add entries to indices\n if (addedCount) {\n for (i = 0; i < addedCount; i++) {\n newEvent = added[i];\n // Can only be date-indexed if it's scheduled.\n // Also ignore parent events (likely using a Gantt project)\n if (newEvent.isScheduled && !newEvent.isParent) {\n me.addEvent(newEvent);\n }\n }\n }\n break;\n // invoked when the start or end changes so that the event can be re-indexed.\n case 'reschedule':\n outgoingEvent = added[0];\n me.removeEvent(outgoingEvent, wasSet.startDate?.oldValue || outgoingEvent.startDate,\n wasSet.endDate?.oldValue || outgoingEvent.endDate);\n // Now process as a splice with an add and no removes.\n me.sync('splice', added);\n break;\n }\n }\n /**\n * This method registers a `dayTime` instance with this index in the `users` array.\n * @param {Core.util.DayTime} dayTime The instance to register.\n */\n register(dayTime) {\n this.users.push(dayTime);\n }\n /**\n * This method unregisters a `dayTime` instance, removing it from the `users` array. This method returns `true` if\n * this was the last registered instance and this index is no longer needed.\n * @param {Core.util.DayTime} dayTime The instance to register.\n * @returns {Boolean}\n */\n unregister(dayTime) {\n const\n { users } = this,\n i = users.indexOf(dayTime);\n if (i > -1) {\n users.splice(i, 1);\n }\n return !users.length;\n }\n};\n// To avoid shape changes:\nconst proto = EventDayIndex.prototype;\nindexProps.forEach(name => proto[name] = null);\nproto.initialized = false;\nEventDayIndex._$name = 'EventDayIndex';", "import DayTime from '../../../Core/util/DayTime.js';\nimport EventDayIndex from '../util/EventDayIndex.js';\n/**\n * @module Scheduler/data/mixin/DayIndexMixin\n */\nconst { MIDNIGHT } = DayTime;\n/**\n * Mixing handling Calendars day indices.\n *\n * Consumed by EventStore in Scheduler & Scheduler Pro and TaskStore in Gantt.\n *\n * @mixin\n * @internal\n */\nexport default Target => class DayIndexMixin extends Target {\n static $name = 'DayIndexMixin';\n construct(config) {\n super.construct(config);\n this.dayIndices = null;\n }\n //region Keeping index in sync\n // Override to syncIndices on initial load\n afterLoadData() {\n this.syncIndices('splice', this.storage.allValues);\n super.afterLoadData?.();\n }\n /**\n * Responds to mutations of the underlying storage Collection.\n *\n * Maintain indices for fast finding of events by date.\n * @param {Object} event\n * @private\n */\n onDataChange({ action, added, removed, replaced }) {\n // Indices must be synced before responding to change\n this.syncIndices(action, added, removed, replaced);\n super.onDataChange(...arguments);\n }\n onDataReplaced(action, data) {\n // Indices must be synced before responding to change\n this.syncIndices('clear');\n this.syncIndices('splice', this.storage.values);\n super.onDataReplaced(action, data);\n }\n onModelChange(record, toSet, wasSet, silent, fromRelationUpdate) {\n // Ensure by-date indices are up to date.\n if (('startDate' in wasSet) || ('endDate' in wasSet)) {\n this.syncIndices('reschedule', [record], null, null, wasSet);\n }\n super.onModelChange(...arguments);\n }\n //endregion\n //region Index\n /**\n * Invalidates associated day indices.\n * @internal\n */\n invalidateDayIndices() {\n this.dayIndices?.forEach(dayIndex => dayIndex.invalidate());\n }\n /**\n * Registers a `DayTime` instance, creating an `EventDayIndex` for each distinct `startShift`. This index is\n * maintained until all instances with a matching `startShift` are {@link #function-unregisterDayIndex unregistered}.\n * @param {Core.util.DayTime} dayTime The instance to register.\n * @internal\n * @category Indexing\n */\n registerDayIndex(dayTime) {\n const\n me = this,\n dayIndices = me.dayIndices || (me.dayIndices = []);\n let dayIndex, i;\n for (i = 0; !dayIndex && i < dayIndices.length; ++i) {\n if (dayIndices[i].matches(dayTime)) {\n (dayIndex = dayIndices[i]).register(dayTime);\n }\n }\n !dayIndex && dayIndices.push(dayIndex = new EventDayIndex(me, dayTime));\n return dayIndex;\n }\n syncIndices(...args) {\n this.dayIndices?.forEach(dayIndex => dayIndex.sync(...args));\n }\n /**\n * Removes a registered `DayTime` instance. If this is the last instance registered to an `EventDayIndex`, that\n * index is removed.\n * @param {Core.util.DayTime} dayTime The instance to unregister.\n * @internal\n * @category Indexing\n */\n unregisterDayIndex(dayTime) {\n const\n me = this,\n { dayIndices } = me;\n for (let i = dayIndices?.length; i-- > 0; /* empty */) {\n if (dayIndices[i].matches(dayTime)) {\n if (dayIndices[i].unregister(dayTime)) {\n dayIndices.splice(i, 1);\n }\n break;\n }\n }\n }\n /**\n * Returns the `EventDayIndex` to use for the given `DayTime` instance. This may be the primary instance or a\n * child instance created by {@link #function-registerDayIndex}.\n * @param {Core.util.DayTime} dayTime The `DayTime` of the desired index.\n * @returns {Scheduler.data.util.EventDayIndex}\n * @private\n * @category Indexing\n */\n useDayIndex(dayTime) {\n const\n me = this,\n { dayIndices } = me;\n dayTime = dayTime || MIDNIGHT;\n for (let i = 0; dayIndices && i < dayIndices.length; ++i) {\n if (dayIndices[i].matches(dayTime)) {\n return dayIndices[i];\n }\n }\n if (dayTime.startShift) {\n throw new Error(`No day index registered for ${dayTime} on ${me.id}`);\n }\n return me.registerDayIndex(MIDNIGHT);\n }\n //endregion\n};\n", "import Base from '../../../Core/Base.js';\nimport ArrayHelper from '../../../Core/helper/ArrayHelper.js';\n/**\n * @module Scheduler/data/mixin/RecurringTimeSpansMixin\n */\nconst\n emptyArray = Object.freeze([]);\n/**\n * This mixin provides recurrence functionality to a store containing {@link Scheduler.model.TimeSpan} models.\n * Normally you don't need to interact with this mixin directly.\n * @mixin\n */\nexport default Target => class RecurringTimeSpansMixin extends (Target || Base) {\n static get $name() {\n return 'RecurringTimeSpansMixin';\n }\n construct(...args) {\n const me = this;\n // We store all generated occurrences keyed by `_generated_${recurringTimeSpan.id}:${occurrenceStartDate}`\n // So that when asked to generate an occurrence for a date, an already generated one can be returned.\n me.globalOccurrences = new Map();\n // All recurring events added to the store are accessible through this Set. It's used\n // to generate occurrences.\n me.recurringEvents = new Set();\n me.ion({\n removeAll() {\n me.globalOccurrences.clear();\n }\n });\n super.construct(...args);\n }\n // Override to refreshRecurringEventsCache on initial load\n afterLoadData() {\n // All cached occurrences are now potentially invalid.\n // A store reload might imply any number of changes which invalidate any occurrence.\n this.globalOccurrences.clear();\n // Clear and rebuild the recurring events cache\n this.refreshRecurringEventsCache('clear');\n this.refreshRecurringEventsCache('splice', this.storage.allValues);\n super.afterLoadData && super.afterLoadData();\n }\n /**\n * Responds to mutations of the underlying storage Collection.\n *\n * Maintain indices for fast finding of events by date.\n * @param {Object} event\n * @private\n */\n onDataChange({ action, added, removed, replaced }) {\n // Recurring events cache must be refreshed before responding to change\n this.refreshRecurringEventsCache(action, added, removed, replaced);\n super.onDataChange(...arguments);\n }\n refreshRecurringEventsCache(action, added = emptyArray, removed = emptyArray, replaced) {\n const\n me = this,\n { recurringEvents } = me,\n replacedCount = replaced?.length;\n switch (action) {\n case 'clear':\n recurringEvents.clear();\n break;\n // Add and remove\n case 'splice': {\n // Handle replacement of records by instances with same ID\n if (replacedCount) {\n added = added.slice();\n removed = removed.slice();\n for (let i = 0; i < replacedCount; i++) {\n removed.push(replaced[i][0]);\n added.push(replaced[i][1]);\n }\n }\n const\n addedCount = added.length,\n removedCount = removed.length;\n // Track the recurring events we contain\n if (removedCount && recurringEvents.size) {\n for (let i = 0; i < removedCount; i++) {\n // If it's being removed, remove it from the recurring events cache.\n // If it's not a recurring event, it doesn't matter, it won't be in there.\n recurringEvents.delete(removed[i]);\n }\n }\n // Track the recurring events we contain\n if (addedCount) {\n for (let i = 0; i < addedCount; i++) {\n const newEvent = added[i];\n // Allow easy access to recurring events\n if (newEvent.isRecurring) {\n recurringEvents.add(newEvent);\n }\n }\n }\n break;\n }\n }\n }\n getById(id) {\n let result = super.getById(id);\n // If the id is not found in the Store, then it could be one of our generated occurrences\n if (!result) {\n result = this.globalOccurrences.get(this.modelClass.asId(id));\n }\n return result;\n }\n onModelChange(record, toSet, wasSet, silent, fromRelationUpdate) {\n const isRecurrenceRelatedFieldChange = !silent && this.isRecurrenceRelatedFieldChange(record, wasSet);\n // If this is the base of a recurring sequence, then any reactors to events from\n // the super call must regenerate occurrences, so must be done at top.\n // If silent is true, occurrences won't be recalculated. Do not remove occurrences from cache in such case.\n if (isRecurrenceRelatedFieldChange) {\n record.removeOccurrences();\n }\n super.onModelChange(...arguments);\n // If this is the base of a recurring sequence, then the EventStore must\n // trigger a refresh event so that UIs refresh themselves.\n // This could be at the tail end of the creation of an exception\n // or a new recurring base.\n if (isRecurrenceRelatedFieldChange) {\n const event = { action : 'batch', records : this.storage.values };\n this.trigger('refresh', event);\n this.trigger('change', event);\n }\n }\n /**\n * The method restricts which field modifications should trigger timespan occurrences building.\n * By default, any field change of a recurring timespan causes the rebuilding.\n * @param {Scheduler.model.TimeSpan} timeSpan The modified timespan.\n * @param {Object} wasSet Object containing the change set.\n * @returns {Boolean} `True` if the fields modification should trigger the timespan occurrences rebuilding.\n * @internal\n * @category Recurrence\n */\n isRecurrenceRelatedFieldChange(timeSpan, wasSet) {\n return timeSpan.isRecurring || 'recurrenceRule' in wasSet;\n }\n /**\n * Builds occurrences for the provided timespan across the provided date range.\n * @private\n * @category Recurrence\n */\n getOccurrencesForTimeSpan(timeSpan, startDate, endDate) {\n const result = [];\n if (timeSpan.isRecurring) {\n timeSpan.recurrence.forEachOccurrence(startDate, endDate, r => result.push(r));\n }\n return result;\n }\n set data(data) {\n // All cached occurrences are now invalid with a new dataset\n this.globalOccurrences.clear();\n super.data = data;\n }\n /**\n * Returns all the recurring timespans.\n * @returns {Scheduler.model.TimeSpan[]} Array of recurring events.\n * @category Recurrence\n */\n getRecurringTimeSpans() {\n return [...this.recurringEvents];\n }\n};\n", "import Base from '../../../Core/Base.js';\nimport RecurringTimeSpansMixin from './RecurringTimeSpansMixin.js';\n/**\n * @module Scheduler/data/mixin/RecurringEventsMixin\n */\n/**\n * This mixin class provides recurrence functionality to the {@link Scheduler.data.EventStore event store}.\n * @extends Scheduler/data/mixin/RecurringTimeSpansMixin\n * @mixin\n */\nexport default Target => class RecurringEventsMixin extends RecurringTimeSpansMixin(Target || Base) {\n static get $name() {\n return 'RecurringEventsMixin';\n }\n /**\n * Returns all the recurring events.\n *\n * **An alias for ** {@link Scheduler.data.mixin.RecurringTimeSpansMixin#function-getRecurringTimeSpans} method.\n *\n * @returns {Scheduler.model.EventModel[]} Array of recurring events.\n * @category Recurrence\n */\n getRecurringEvents() {\n return this.getRecurringTimeSpans();\n }\n isEventPersistable(event) {\n // occurrences are not persistable\n return super.isEventPersistable(event) && (!event.supportsRecurring || !event.isOccurrence);\n }\n};\n", "import Base from '../../../../Core/Base.js';\nconst dayParseRegExp = /^([+-]?[0-9])?(SU|MO|TU|WE|TH|FR|SA)$/;\nconst days = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\nexport default class RecurrenceDayRuleEncoder extends Base {\n static decodeDay(rawDay) {\n let parsedDay,\n result;\n if ((parsedDay = dayParseRegExp.exec(rawDay))) {\n result = [days.indexOf(parsedDay[2])];\n // optional position number\n if (parsedDay[1]) {\n parsedDay[1] = parseInt(parsedDay[1], 10);\n result.push(parsedDay[1]);\n }\n }\n return result;\n }\n static encodeDay(day) {\n let position;\n // support decodeDay() result format\n if (Array.isArray(day)) {\n [day, position] = day;\n }\n return (position ? position.toString() : '') + days[day];\n }\n // Turns days values provided as an array of strings (like [`-1MO`, `SU`, `+3FR`])\n // into an array of [ dayIndex, position ] elements, where:\n //\n // - `dayIndex` - zero-based week day index value (0 - Sunday, 1 - Monday, 2 - Tuesday, etc.)\n // - `position` - (optional) 1-based position of the day (integer value (can be both positive and negative))\n static decode(rawDays) {\n const result = [];\n let parsedDay;\n if (rawDays) {\n for (let i = 0; i < rawDays.length; i++) {\n if ((parsedDay = this.decodeDay(rawDays[i]))) {\n result.push(parsedDay);\n }\n }\n }\n return result;\n }\n static encode(days) {\n const result = [];\n let day;\n if (days) {\n for (let i = 0; i < days.length; i++) {\n if ((day = this.encodeDay(days[i]))) {\n result.push(day);\n }\n }\n }\n return result;\n }\n};\nRecurrenceDayRuleEncoder._$name = 'RecurrenceDayRuleEncoder';", "import Base from '../../../../Core/Base.js';\nimport DateHelper from '../../../../Core/helper/DateHelper.js';\n/**\n * @module Scheduler/data/util/recurrence/AbstractRecurrenceIterator\n * @private\n */\nconst\n frequencyToUnitRe = /ly$/i,\n frequencyToUnit = frequency => {\n const result = frequency.replace(frequencyToUnitRe, '');\n return result === 'DAI' ? 'DAY' : result;\n },\n fn = (date, counter, isFirst, timeSpan) => timeSpan.buildOccurrence(date, isFirst),\n captureLastOccurrence = date => lastOccurrenceDate = date;\nlet lastOccurrenceDate;\nexport default class AbstractRecurrenceIterator extends Base {\n static frequency = 'NONE';\n static MAX_OCCURRENCES_COUNT = 1000000;\n static processIterationConfig(config) {\n const\n { recurrence } = config,\n {\n frequency,\n interval,\n timeSpan,\n endDate : until,\n count\n } = recurrence;\n // Force the correction of the event to be in sync with its recurrence rule\n // before performing iteration. For example, if the event's configured startDate\n // is 1st January 2020, and the rule dictates that the event will take place\n // monthly, every Monday, then the first event is not until Monday 6th January, 2020.\n if (!config.syncingStartDate && !timeSpan.meta.isSyncedWithRule) {\n // Do not generate occurrences outside of the specified range\n const\n intervalEndDate = DateHelper.add(timeSpan.startDate, interval, frequencyToUnit(frequency)),\n endDate = DateHelper.min(\n intervalEndDate,\n config.endDate || intervalEndDate\n );\n this.forEachDate({\n syncingStartDate : true,\n startDate : timeSpan.startDate,\n endDate,\n recurrence,\n fn\n });\n }\n // Capture the start after its been synced with its recurrence rule\n const timeSpanStart = timeSpan.startDate;\n // Extract the endDate from the config, defaulting to the recurrence UNTIL date\n let {\n startDate = timeSpanStart,\n endDate = until\n } = config;\n // No point in starting the iteration before the event starts\n if (startDate < timeSpanStart) {\n startDate = timeSpanStart;\n }\n // The recurrence's stop date overrides the configured endDate.\n if (until) {\n if (!endDate || endDate > until) {\n endDate = until;\n }\n }\n // If we are limiting using count and we are not starting from the\n // first occurrence, then we have to calculate a stop date.\n // This is because for date ranges in the future we cannot calculate how many\n // preceding occurrences there may have been.\n else if (count && startDate > timeSpanStart) {\n // Iterate the occurrences from the start to capture the last one\n this.forEachDate({\n recurrence,\n fn : captureLastOccurrence\n });\n // The date of the last occurrence in the count sequence overrides the configured endDate.\n if (!endDate || endDate > lastOccurrenceDate) {\n // since endDate of the provided interval is exclusive add 1 millisecond\n endDate = new Date(lastOccurrenceDate.getTime() + 1);\n }\n }\n // Preserve the requested start of requested visits.\n const earliestVisibleDate = startDate;\n // Unless we are only asked for events which *start* within the time range. we must make\n // a best attempt to include any occurrences which span the start date.\n // So if we are asking for events from the 1st of the month, and there's an event\n // which runs every 2 months from the 15th to the 5th, we must include it. Start the\n // iteration full frequency quanta before the requested start.\n // This will only cause extra iterations.\n // We cannot step back to before the event's starting date though.\n if (!config.startOnly) {\n startDate = new Date(DateHelper.max(DateHelper.add(startDate, -interval, frequencyToUnit(frequency)), timeSpanStart));\n }\n return Object.assign({\n extraArgs : [],\n // Only check start date for time spans with 0 duration\n startOnly : !Boolean(timeSpan.durationMS)\n }, config, {\n startDate,\n endDate,\n timeSpan,\n timeSpanStart,\n earliestVisibleDate,\n endDateMS : endDate?.getTime(),\n timeSpanStartMS : timeSpanStart.getTime(),\n earliestVisibleDateMS : earliestVisibleDate.getTime(),\n durationMS : timeSpan.durationMS,\n spansStart : startDate <= timeSpanStart && endDate > timeSpanStart\n });\n }\n static getOccurrenceIndex(event) {\n if (event.isOccurrence) {\n return DateHelper.diff(event.recurringTimeSpan.startDate, event.startDate, frequencyToUnit(event.recurringTimeSpan.recurrence.frequency));\n }\n }\n /**\n * Returns Nth occurrence of a week day in the provided period of time.\n * @param {Date} startDate Period start date.\n * @param {Date} endDate Period end date.\n * @param {Number} day Week day (0 - Sunday, 1 - Monday, 2 - Tuesday, etc.)\n * @param {Number} index Index to find.\n * @returns {Date} Returns the found date or null if there is no `index`th entry.\n * @private\n */\n static getNthDayInPeriod(startDate, endDate, day, index) {\n let result, sign, borderDate;\n if (index) {\n if (index > 0) {\n sign = 1;\n borderDate = startDate;\n }\n else {\n sign = -1;\n borderDate = endDate;\n }\n // delta between requested day and border day\n const delta = day - borderDate.getDay();\n // if the requested day goes after (before, depending on borderDate used (start/end))\n // we adjust index +/-1\n if (sign * delta < 0) {\n index += sign;\n }\n // measure \"index\" weeks forward (or backward) ..take delta into account\n // result = new Date(borderDate.getTime() + ((index - sign) * 7 + delta) * 24*60*60*1000);\n // Per https://github.com/bryntum/support/issues/3413 - don't do that ^^ because DST makes days/week\n // alternatingly shorter or longer depending on going in/out of DST:\n result = new Date(borderDate);\n result.setDate(borderDate.getDate() + (index - sign) * 7 + delta);\n // if resulting date is outside of the provided range there is no \"index\"-th entry\n // of the day\n if (result < startDate || result > endDate) {\n result = null;\n }\n }\n return result;\n }\n static buildDate(year, month, date) {\n const dt = new Date(year, month, date);\n if (dt.getFullYear() === year && dt.getMonth() === month && dt.getDate() === date) {\n return dt;\n }\n }\n static isValidPosition(position) {\n return Boolean(position);\n }\n static forEachDateAtPositions(dates, positions, fn, scope) {\n const datesLength = dates.length,\n processed = {};\n for (let i = 0; i < positions.length; i++) {\n const index = positions[i];\n if (this.isValidPosition(index)) {\n const date = index > 0 ? dates[index - 1] : dates[datesLength + index];\n if (date && !processed[date.getTime()]) {\n // remember that we've returned the date\n processed[date.getTime()] = true;\n // return false if it's time to stop recurring\n if (fn.call(scope, date) === false) {\n return false;\n }\n }\n }\n }\n }\n static isInView(startOnly, occurrenceDate, earliestVisibleDate, durationMS, timeSpan) {\n return (\n startOnly\n ? occurrenceDate >= earliestVisibleDate\n : occurrenceDate.valueOf() + durationMS > earliestVisibleDate\n ) && !timeSpan.hasException(occurrenceDate);\n }\n // Slightly faster version of ^, used by Daily & Weekly iterators\n static isInViewMS(startOnly, occurenceDate, occurrenceDateMS, earliestVisibleDateMS, durationMS, timeSpan) {\n return (\n startOnly\n ? occurrenceDateMS >= earliestVisibleDateMS\n : occurrenceDateMS + durationMS > earliestVisibleDateMS\n ) && !timeSpan.hasException(occurenceDate);\n }\n}\nAbstractRecurrenceIterator._$name = 'AbstractRecurrenceIterator';", "/**\n * @module Scheduler/data/util/recurrence/DailyRecurrenceIterator\n */\nimport AbstractRecurrenceIterator from './AbstractRecurrenceIterator.js';\nimport DateHelper from '../../../../Core/helper/DateHelper.js';\n/**\n * A class which provides iteration to call a function for dates specified by a\n * {@link Scheduler.model.RecurrenceModel RecurrenceModel} over a specified date range.\n * @private\n */\nexport default class DailyRecurrenceIterator extends AbstractRecurrenceIterator {\n static frequency = 'DAILY';\n /**\n * Iterates over the passed date range, calling the passed callback on each date on which\n * starts a recurring event which matches the passed recurrence rule and overlaps the start and end dates\n * and is not an {@link Scheduler.model.mixin.RecurringTimeSpan#field-exceptionDates exceptionDate}\n * in the recurring event.\n * @param {Object} config An object which describes how to iterate.\n * @param {Date} config.startDate The point in time to begin iteration.\n * @param {Date} config.endDate The point in time to end iteration.\n * @param {Boolean} [config.startOnly] By default, all occurrences which intersect the date range\n * will be visited. Pass `true` to only visit occurrences which *start* in the date range.\n * @param {Scheduler.model.RecurrenceModel} config.recurrence The point in time to end iteration.\n * @param {Function} config.fn The function to call for each date which matches the recurrence in the date range.\n * @param {Date} config.fn.date The occurrence date.\n * @param {Number} config.fn.counter A counter of how many dates have been visited in this iteration.\n * @param {Boolean} config.fn.isFirst A flag which is `true` if the date is the first occurrence in the specified recurrence rule.\n * @param {Array} [config.extraArgs] Extra arguments to pass to the callback after the `isFirst` argument.\n */\n static forEachDate(config) {\n const\n {\n startOnly,\n startDate,\n endDate,\n endDateMS,\n timeSpan,\n timeSpanStart,\n earliestVisibleDateMS,\n durationMS,\n spansStart,\n recurrence,\n fn,\n extraArgs,\n scope = this\n } = this.processIterationConfig(config),\n { interval } = recurrence,\n delay = startDate - timeSpanStart,\n // recurrence interval duration in ms (86400000 is a single day duration in ms)\n intervalDuration = interval * 86400000,\n delayInIntervals = Math.floor(delay / intervalDuration);\n let { count } = recurrence,\n counter = 0,\n occurrenceDate = DateHelper.add(timeSpanStart, delayInIntervals * interval, 'day'),\n occurrenceDateMS = occurrenceDate.getTime();\n if (!endDate && !count) {\n count = this.MAX_OCCURRENCES_COUNT;\n }\n while (!endDateMS || occurrenceDateMS < endDateMS) {\n const inView = this.isInViewMS(startOnly, occurrenceDate, occurrenceDateMS, earliestVisibleDateMS, durationMS, timeSpan);\n counter++;\n if (inView &&\n ((endDateMS && occurrenceDateMS > endDateMS) || fn.apply(scope, [occurrenceDate, counter, counter === 1 && spansStart, timeSpan, ...extraArgs]) === false || (count && counter >= count))\n ) {\n break;\n }\n // shift to the next day\n occurrenceDate = DateHelper.add(occurrenceDate, interval, 'day');\n occurrenceDateMS = occurrenceDate.getTime();\n }\n }\n}\nDailyRecurrenceIterator._$name = 'DailyRecurrenceIterator';", "/**\n * @module Scheduler/data/util/recurrence/WeeklyRecurrenceIterator\n */\nimport AbstractRecurrenceIterator from './AbstractRecurrenceIterator.js';\nimport DateHelper from '../../../../Core/helper/DateHelper.js';\nimport DayRuleEncoder from './RecurrenceDayRuleEncoder.js';\n/**\n * A class which provides iteration to call a function for dates specified by a\n * {@link Scheduler.model.RecurrenceModel RecurrenceModel} over a specified date range.\n * @private\n */\nexport default class WeeklyRecurrenceIterator extends AbstractRecurrenceIterator {\n static frequency = 'WEEKLY';\n /**\n * Iterates over the passed date range, calling the passed callback on each date on which\n * starts an event which matches the passed recurrence rule and overlaps the start and end dates.\n * @param {Object} config An object which describes how to iterate.\n * @param {Date} config.startDate The point in time to begin iteration.\n * @param {Date} config.endDate The point in time to end iteration.\n * @param {Boolean} [config.startOnly] By default, all occurrences which intersect the date range\n * will be visited. Pass `true` to only visit occurrences which *start* in the date range.\n * @param {Scheduler.model.RecurrenceModel} config.recurrence The point in time to end iteration.\n * @param {Function} config.fn The function to call for each date which matches the recurrence in the date range.\n * @param {Date} config.fn.date The occurrence date.\n * @param {Number} config.fn.counter A counter of how many dates have been visited in this iteration.\n * @param {Boolean} config.fn.isFirst A flag which is `true` if the date is the first occurrence in the specified recurrence rule.\n * @param {Array} [config.extraArgs] Extra arguments to pass to the callback after the `isFirst` argument.\n */\n static forEachDate(config) {\n const\n {\n startOnly,\n startDate,\n endDateMS,\n timeSpan,\n timeSpanStart,\n timeSpanStartMS,\n earliestVisibleDateMS,\n durationMS,\n spansStart,\n recurrence,\n fn,\n extraArgs,\n scope = this\n } = this.processIterationConfig(config),\n {\n interval,\n days\n } = recurrence,\n { weekStartDay } = DateHelper,\n startHours = timeSpanStart.getHours(),\n startMinutes = timeSpanStart.getMinutes(),\n startSeconds = timeSpanStart.getSeconds(),\n startMS = timeSpanStart.getMilliseconds();\n let counter = 0,\n { count } = recurrence,\n weekDays = DayRuleEncoder.decode(days),\n weekStartDate, occurrenceDate;\n // \"Days\" might be skipped then we use the event start day\n if (!weekDays?.length) {\n weekDays = [[timeSpanStart.getDay()]];\n }\n // If week start day is not zero (Sunday)\n // we need to normalize weekDays array since its values are used\n // to calculate real dates as: date = week_start_date + weekDay_entry\n // which does not work when week starts on non-Sunday\n if (weekStartDay > 0) {\n for (let i = 0; i < weekDays.length; i++) {\n if (weekStartDay > weekDays[i][0]) {\n weekDays[i][0] = 7 - weekStartDay - weekDays[i][0];\n }\n else {\n weekDays[i][0] -= weekStartDay;\n }\n }\n }\n // days could be provided in any order so it's important to sort them\n weekDays.sort((a, b) => a[0] - b[0]);\n // if the recurrence is limited w/ \"Count\" or not every interval should match\n // we need to 1st count passed occurrences so we always start iteration from the event start date\n weekStartDate = DateHelper.getNext(count || interval > 1 ? timeSpanStart : startDate, 'week', 0);\n if (!endDateMS && !count) {\n count = this.MAX_OCCURRENCES_COUNT;\n }\n while (!endDateMS || weekStartDate.getTime() < endDateMS) {\n for (let i = 0; i < weekDays.length; i++) {\n // Faster than chaining multiple DateHelper calls\n occurrenceDate = new Date(\n weekStartDate.getFullYear(),\n weekStartDate.getMonth(),\n weekStartDate.getDate() + weekDays[i][0],\n startHours,\n startMinutes,\n startSeconds,\n startMS\n );\n const occurrenceDateMS = occurrenceDate.getTime();\n if (occurrenceDateMS >= timeSpanStartMS) {\n const inView = this.isInViewMS(startOnly, occurrenceDate, occurrenceDateMS, earliestVisibleDateMS, durationMS, timeSpan);\n counter++;\n if (inView &&\n ((endDateMS && occurrenceDateMS >= endDateMS) ||\n (fn.apply(scope, [occurrenceDate, counter, counter === 1 && spansStart, timeSpan, ...extraArgs]) === false) ||\n (count && counter >= count))\n ) {\n return;\n }\n }\n }\n // get next week start\n weekStartDate = DateHelper.getNext(weekStartDate, 'week', interval);\n }\n }\n}\nWeeklyRecurrenceIterator._$name = 'WeeklyRecurrenceIterator';", "/**\n * @module Scheduler/data/util/recurrence/MonthlyRecurrenceIterator\n */\nimport AbstractRecurrenceIterator from './AbstractRecurrenceIterator.js';\nimport DateHelper from '../../../../Core/helper/DateHelper.js';\nimport DayRuleEncoder from './RecurrenceDayRuleEncoder.js';\n/**\n * A class which provides iteration to call a function for dates specified by a\n * {@link Scheduler.model.RecurrenceModel RecurrenceModel} over a specified date range.\n * @private\n */\nexport default class MonthlyRecurrenceIterator extends AbstractRecurrenceIterator {\n static frequency = 'MONTHLY';\n static getNthDayOfMonth(date, dayNum) {\n const daysInMonth = DateHelper.daysInMonth(date);\n let result = null;\n if (dayNum && Math.abs(dayNum) <= daysInMonth) {\n result = new Date(date.getFullYear(), date.getMonth(), dayNum < 0 ? daysInMonth + dayNum + 1 : dayNum);\n }\n return result;\n }\n static isValidPosition(position) {\n return position && Math.abs(position) > 0 && Math.abs(position) <= 31;\n }\n /**\n * Iterates over the passed date range, calling the passed callback on each date on which\n * starts an event which matches the passed recurrence rule and overlaps the start and end dates.\n * @param {Object} config An object which describes how to iterate.\n * @param {Date} config.startDate The point in time to begin iteration.\n * @param {Date} config.endDate The point in time to end iteration.\n * @param {Boolean} [config.startOnly] By default, all occurrences which intersect the date range\n * will be visited. Pass `true` to only visit occurrences which *start* in the date range.\n * @param {Scheduler.model.RecurrenceModel} config.recurrence The point in time to end iteration.\n * @param {Function} config.fn The function to call for each date which matches the recurrence in the date range.\n * @param {Date} config.fn.date The occurrence date.\n * @param {Number} config.fn.counter A counter of how many dates have been visited in this iteration.\n * @param {Boolean} config.fn.isFirst A flag which is `true` if the date is the first occurrence in the specified recurrence rule.\n * @param {Array} [config.extraArgs] Extra arguments to pass to the callback after the `isFirst` argument.\n */\n static forEachDate(config) {\n const\n {\n startOnly,\n startDate,\n endDate,\n timeSpan,\n timeSpanStart,\n earliestVisibleDate,\n durationMS,\n spansStart,\n recurrence,\n fn,\n extraArgs,\n scope = this\n } = this.processIterationConfig(config),\n {\n interval,\n days,\n count,\n positions\n } = recurrence,\n weekDays = DayRuleEncoder.decode(days),\n hasPositions = positions && positions.length,\n processedDate = {};\n let\n { monthDays } = recurrence,\n counter = 0,\n weekDayPosition,\n monthStartDate, monthEndDate,\n dates, occurrenceDate, i;\n // if the recurrence is limited w/ \"Count\" or not every interval should match\n // we need to 1st count passed occurrences so we always start iteration from the event start date\n monthStartDate = DateHelper.startOf(count || interval > 1 ? timeSpanStart : startDate, 'month');\n monthEndDate = new Date(DateHelper.getNext(monthStartDate, 'month', 1) - 1);\n // If no month days nor week days are provided let's use event start date month day\n if (!(monthDays && monthDays.length) && !(weekDays && weekDays.length)) {\n monthDays = [timeSpanStart.getDate()];\n }\n if (weekDays && weekDays.length) {\n // Collect hash of positions indexed by week days\n weekDays.forEach(day => {\n if (day[1]) {\n weekDayPosition = weekDayPosition || {};\n weekDayPosition[day[0]] = day[1];\n }\n });\n }\n while ((!endDate || endDate > monthStartDate) && (!count || counter < count)) {\n dates = [];\n if (weekDays && weekDays.length) {\n weekDays.forEach(day => {\n const weekDay = day[0];\n let from = 1,\n till = 53;\n // if position provided\n if (day[1]) {\n from = till = day[1];\n }\n for (i = from; i <= till; i++) {\n if ((occurrenceDate = this.getNthDayInPeriod(monthStartDate, monthEndDate, weekDay, i))) {\n occurrenceDate = DateHelper.copyTimeValues(occurrenceDate, timeSpanStart);\n if (!processedDate[occurrenceDate.getTime()]) {\n // remember we processed the date\n processedDate[occurrenceDate.getTime()] = true;\n dates.push(occurrenceDate);\n }\n }\n }\n });\n dates.sort((a, b) => a - b);\n if (!hasPositions) {\n for (i = 0; i < dates.length; i++) {\n occurrenceDate = dates[i];\n if (occurrenceDate >= timeSpanStart) {\n const inView = this.isInView(startOnly, occurrenceDate, earliestVisibleDate, durationMS, timeSpan);\n counter++;\n if (inView &&\n ((endDate && occurrenceDate >= endDate) || (fn.apply(scope, [occurrenceDate, counter, counter === 1 && spansStart, timeSpan, ...extraArgs]) === false) || (count && counter >= count))\n ) {\n return false;\n }\n }\n }\n }\n }\n else {\n const sortedMonthDates = [];\n for (i = 0; i < monthDays.length; i++) {\n // check if the date wasn't iterated over yet\n if ((occurrenceDate = this.getNthDayOfMonth(monthStartDate, monthDays[i])) && !processedDate[occurrenceDate.getTime()]) {\n processedDate[occurrenceDate.getTime()] = true;\n sortedMonthDates.push(occurrenceDate);\n }\n }\n // it's important to sort the dates to iterate over them in the proper order\n sortedMonthDates.sort((a, b) => a - b);\n for (i = 0; i < sortedMonthDates.length; i++) {\n occurrenceDate = DateHelper.copyTimeValues(sortedMonthDates[i], timeSpanStart);\n if (hasPositions) {\n dates.push(occurrenceDate);\n }\n else if (occurrenceDate >= timeSpanStart) {\n const inView = this.isInView(startOnly, occurrenceDate, earliestVisibleDate, durationMS, timeSpan);\n counter++;\n if (inView &&\n ((endDate && occurrenceDate > endDate) || (fn.apply(scope, [occurrenceDate, counter, counter === 1 && spansStart, timeSpan, ...extraArgs]) === false) || (count && counter >= count))\n ) {\n return;\n }\n }\n }\n }\n if (hasPositions && dates.length) {\n this.forEachDateAtPositions(dates, positions, occurrenceDate => {\n if (occurrenceDate >= timeSpanStart) {\n const inView = startOnly ? occurrenceDate >= earliestVisibleDate : occurrenceDate.valueOf() + durationMS > earliestVisibleDate && !timeSpan.hasException(occurrenceDate);\n counter++;\n // Ignore dates outside of the [startDate, endDate] range\n if (inView && (!endDate || occurrenceDate <= endDate) &&\n // return false if it's time to stop recurring\n (fn.apply(scope, [occurrenceDate, counter, counter === 1 && spansStart, timeSpan, ...extraArgs]) === false || (count && counter >= count))\n ) {\n return false;\n }\n }\n });\n }\n // get next month start\n monthStartDate = DateHelper.getNext(monthStartDate, 'month', interval);\n monthEndDate = new Date(DateHelper.getNext(monthStartDate, 'month', 1) - 1);\n }\n }\n}\nMonthlyRecurrenceIterator._$name = 'MonthlyRecurrenceIterator';", "/**\n * @module Scheduler/data/util/recurrence/YearlyRecurrenceIterator\n */\nimport AbstractRecurrenceIterator from './AbstractRecurrenceIterator.js';\nimport DateHelper from '../../../../Core/helper/DateHelper.js';\nimport DayRuleEncoder from './RecurrenceDayRuleEncoder.js';\n/**\n * A class which provides iteration to call a function for dates specified by a\n * {@link Scheduler.model.RecurrenceModel RecurrenceModel} over a specified date range.\n * @private\n */\nexport default class YearlyRecurrenceIterator extends AbstractRecurrenceIterator {\n static frequency = 'YEARLY';\n /**\n * Iterates over the passed date range, calling the passed callback on each date on which\n * starts an event which matches the passed recurrence rule and overlaps the start and end dates.\n * @param {Object} config An object which describes how to iterate.\n * @param {Date} config.startDate The point in time to begin iteration.\n * @param {Date} config.endDate The point in time to end iteration.\n * @param {Boolean} [config.startOnly] By default, all occurrences which intersect the date range\n * will be visited. Pass `true` to only visit occurrences which *start* in the date range.\n * @param {Scheduler.model.RecurrenceModel} config.recurrence The point in time to end iteration.\n * @param {Function} config.fn The function to call for each date which matches the recurrence in the date range.\n * @param {Date} config.fn.date The occurrence date.\n * @param {Number} config.fn.counter A counter of how many dates have been visited in this iteration.\n * @param {Boolean} config.fn.isFirst A flag which is `true` if the date is the first occurrence in the specified recurrence rule.\n * @param {Array} [config.extraArgs] Extra arguments to pass to the callback after the `isFirst` argument.\n */\n static forEachDate(config) {\n const\n {\n startOnly,\n startDate,\n endDate,\n timeSpan,\n timeSpanStart,\n earliestVisibleDate,\n durationMS,\n spansStart,\n recurrence,\n fn,\n extraArgs,\n scope = this\n } = this.processIterationConfig(config),\n {\n interval,\n days,\n count,\n positions\n } = recurrence,\n weekDays = DayRuleEncoder.decode(days),\n hasPositions = positions && positions.length,\n processedDate = {};\n let\n { months } = recurrence,\n counter = 0,\n i, occurrenceDate, dates, yearStartDate, yearEndDate, weekDayPosition;\n // if the recurrence is limited w/ \"Count\" or not every interval should match\n // we need to 1st count passed occurrences so we always start iteration from the event start date\n yearStartDate = DateHelper.startOf(count || interval > 1 ? timeSpanStart : startDate, 'year');\n yearEndDate = new Date(DateHelper.getNext(yearStartDate, 'year', 1) - 1);\n months && months.sort((a, b) => a - b);\n // if no months provided let's use the event month\n if (!(months && months.length) && !(weekDays && weekDays.length)) {\n months = [timeSpanStart.getMonth() + 1];\n }\n if (weekDays && weekDays.length) {\n // Collect hash of positions indexed by week days\n weekDays.forEach(day => {\n if (day[1]) {\n weekDayPosition = weekDayPosition || {};\n weekDayPosition[day[0]] = day[1];\n }\n });\n }\n while ((!endDate || endDate > yearStartDate) && (!count || counter < count)) {\n dates = [];\n if (weekDays && weekDays.length) {\n weekDays.forEach(day => {\n const weekDay = day[0];\n let\n from = 1,\n till = 53;\n // if position provided\n if (day[1]) {\n from = till = day[1];\n }\n for (i = from; i <= till; i++) {\n if ((occurrenceDate = this.getNthDayInPeriod(yearStartDate, yearEndDate, weekDay, i))) {\n occurrenceDate = DateHelper.copyTimeValues(occurrenceDate, timeSpanStart);\n if (!processedDate[occurrenceDate.getTime()]) {\n // remember we processed the date\n processedDate[occurrenceDate.getTime()] = true;\n dates.push(occurrenceDate);\n }\n }\n }\n });\n dates.sort((a, b) => a - b);\n if (!hasPositions) {\n for (i = 0; i < dates.length; i++) {\n occurrenceDate = dates[i];\n if (occurrenceDate >= timeSpanStart) {\n const inView = this.isInView(startOnly, occurrenceDate, earliestVisibleDate, durationMS, timeSpan);\n counter++;\n if (inView &&\n ((endDate && occurrenceDate >= endDate) ||\n (fn.apply(scope, [occurrenceDate, counter, counter === 1 && spansStart, timeSpan, ...extraArgs]) === false) ||\n (count && counter >= count))\n ) {\n return;\n }\n }\n }\n }\n }\n else {\n for (i = 0; i < months.length; i++) {\n if ((occurrenceDate = this.buildDate(yearStartDate.getFullYear(), months[i] - 1, timeSpanStart.getDate()))) {\n occurrenceDate = DateHelper.copyTimeValues(occurrenceDate, timeSpanStart);\n // check if the date wasn't iterated over yet\n if (!processedDate[occurrenceDate.getTime()]) {\n processedDate[occurrenceDate.getTime()] = true;\n if (hasPositions) {\n dates.push(occurrenceDate);\n }\n else if (occurrenceDate >= timeSpanStart) {\n const inView = startOnly ? occurrenceDate >= earliestVisibleDate : occurrenceDate.valueOf() + durationMS > earliestVisibleDate && !timeSpan.hasException(occurrenceDate);\n counter++;\n if (inView &&\n ((endDate && occurrenceDate >= endDate) ||\n (fn.apply(scope, [occurrenceDate, counter, counter === 1 && spansStart, timeSpan, ...extraArgs]) === false) ||\n (count && counter >= count))\n ) {\n return;\n }\n }\n }\n }\n }\n }\n if (hasPositions && dates.length) {\n this.forEachDateAtPositions(dates, positions, occurrenceDate => {\n if (occurrenceDate >= timeSpanStart) {\n const inView = startOnly ? occurrenceDate >= earliestVisibleDate : occurrenceDate.valueOf() + durationMS > earliestVisibleDate && !timeSpan.hasException(occurrenceDate);\n counter++;\n // Ignore dates outside of the [startDate, endDate] range\n if (inView && (!endDate || occurrenceDate < endDate)) {\n // return false if it's time to stop recurring\n if (fn.apply(scope, [occurrenceDate, counter, counter === 1 && spansStart, timeSpan, ...extraArgs]) === false || (count && counter >= count)) {\n return false;\n }\n }\n }\n });\n }\n // get next month start\n yearStartDate = DateHelper.getNext(yearStartDate, 'year', interval);\n yearEndDate = new Date(DateHelper.getNext(yearStartDate, 'year', 1) - 1);\n }\n }\n}\nYearlyRecurrenceIterator._$name = 'YearlyRecurrenceIterator';", "import Model from '../../Core/data/Model.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport RecurrenceDayRuleEncoder from '../data/util/recurrence/RecurrenceDayRuleEncoder.js';\nimport DailyRecurrenceIterator from '../data/util/recurrence/DailyRecurrenceIterator.js';\nimport WeeklyRecurrenceIterator from '../data/util/recurrence/WeeklyRecurrenceIterator.js';\nimport MonthlyRecurrenceIterator from '../data/util/recurrence/MonthlyRecurrenceIterator.js';\nimport YearlyRecurrenceIterator from '../data/util/recurrence/YearlyRecurrenceIterator.js';\n/**\n * @module Scheduler/model/RecurrenceModel\n */\nconst recurrenceIterators = {};\n[DailyRecurrenceIterator, WeeklyRecurrenceIterator, MonthlyRecurrenceIterator, YearlyRecurrenceIterator].forEach(it => {\n recurrenceIterators[it.frequency] = it;\n});\nfunction convertStringOfIntegerItemsValue(value) {\n if (value) {\n if (typeof value == 'string') {\n value = value.split(',').map(item => parseInt(item, 10));\n }\n }\n else {\n value = null;\n }\n return value;\n}\nfunction convertStringOfItemsValue(value) {\n if (value) {\n if (typeof value == 'string') {\n value = value.split(',');\n }\n }\n else {\n value = null;\n }\n return value;\n}\nfunction isEqualAsString(value1, value2) {\n return String(value1) === String(value2);\n}\nfunction convertInteger(value) {\n if (this.defaultValue && value === undefined) {\n return this.defaultValue;\n }\n if (this.allowNull && value == null) {\n return null;\n }\n value = parseInt(value);\n return isNaN(value) ? undefined : value;\n}\n/**\n * This class represents a timespan recurrence settings.\n * It is a subclass of {@link Core.data.Model} class.\n * Please refer to the documentation for that class to become familiar with the base interface of this class.\n *\n * The data source for these fields can be customized by subclassing this class.\n *\n * @extends Core/data/Model\n */\nexport default class RecurrenceModel extends Model {\n static get $name() {\n return 'RecurrenceModel';\n }\n /**\n * Indicates that this is a `RecurrenceModel` class instance\n * (allows to avoid using `instanceof`).\n * @property {Boolean}\n * @readonly\n */\n get isRecurrenceModel() {\n return true;\n }\n //region Fields\n static get fields() {\n return [\n /**\n * Field defines the recurrence frequency. Supported values are: `DAILY`, `WEEKLY`, `MONTHLY`, `YEARLY`.\n * @field {'DAILY'|'WEEKLY'|'MONTHLY'|'YEARLY'} frequency\n */\n { name : 'frequency', defaultValue : 'DAILY' },\n /**\n * Field defines how often the recurrence repeats.\n * For example, if the recurrence is weekly its interval is 2, then the timespan repeats every two weeks.\n * @field {Number} interval\n */\n { name : 'interval', defaultValue : 1, convert : convertInteger },\n /**\n * End date of the recurrence. Specifies when the recurrence ends.\n * The value is optional, the recurrence can as well be stopped using {@link #field-count} field value.\n * @field {Date} endDate\n */\n { name : 'endDate', type : 'date' },\n /**\n * Specifies the number of occurrences after which the recurrence ends.\n * The value includes the associated timespan itself so values less than 2 make no sense.\n * The field is optional, the recurrence as well can be stopped using {@link #field-endDate} field value.\n * @field {Number} count\n */\n { name : 'count', allowNull : true, convert : convertInteger },\n /**\n * Specifies days of the week on which the timespan should occur.\n * An array of string values `SU`, `MO`, `TU`, `WE`, `TH`, `FR`, `SA`\n * corresponding to Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, and Saturday days of the week.\n * Each value can also be preceded by a positive (+n) or negative (-n) integer.\n * If present, this indicates the nth occurrence of a specific day within the monthly or yearly recurrence.\n *\n * **Not applicable** for daily {@link #field-frequency}.\n * @field {String[]} days\n */\n {\n name : 'days',\n convert : convertStringOfItemsValue,\n isEqual : isEqualAsString\n },\n /**\n * Specifies days of the month on which the timespan should occur.\n * An array of integer values (-31..-1 - +1..+31, negative values mean counting backwards from the month end).\n * **Applicable only** for monthly {@link #field-frequency}.\n * @field {Number[]} monthDays\n */\n {\n name : 'monthDays',\n convert : convertStringOfIntegerItemsValue,\n isEqual : isEqualAsString\n },\n /**\n * Specifies months of the year on which the timespan should occur.\n * An array of integer values (1 - 12).\n * **Applicable only** for yearly {@link #field-frequency}.\n * @field {Number[]} months\n */\n {\n name : 'months',\n convert : convertStringOfIntegerItemsValue,\n isEqual : isEqualAsString\n },\n /**\n * The positions to include in the recurrence. The values operate on a set of recurrence instances **in one interval** of the recurrence rule.\n * An array of integer values (valid values are 1 to 366 or -366 to -1, negative values mean counting backwards from the end of the built list of occurrences).\n * **Not applicable** for daily {@link #field-frequency}.\n * @field {Number[]} positions\n */\n {\n name : 'positions',\n convert : convertStringOfIntegerItemsValue,\n isEqual : isEqualAsString\n }\n ];\n }\n get dateFormat() {\n return this._dateFormat || 'YYYYMMDDTHHmmss';\n }\n set dateFormat(format) {\n this._dateFormat = format;\n }\n get recurrenceIterator() {\n return recurrenceIterators[this.frequency];\n }\n /**\n * The timespan this recurrence is associated with.\n * @property {Scheduler.model.TimeSpan}\n */\n get timeSpan() {\n return this._timeSpan;\n }\n set timeSpan(value) {\n this._timeSpan = value;\n }\n /**\n * The recurrence rule. A string in [RFC-5545](https://tools.ietf.org/html/rfc5545#section-3.3.10) described format\n * (\"RRULE\" expression).\n * @property {String}\n */\n get rule() {\n const\n me = this,\n result = [];\n if (me.frequency) {\n result.push(`FREQ=${me.frequency}`);\n if (me.interval > 1) {\n result.push(`INTERVAL=${me.interval}`);\n }\n if (me.days && me.days.length) {\n result.push('BYDAY=' + me.days.join(','));\n }\n if (me.monthDays && me.monthDays.length) {\n result.push('BYMONTHDAY=' + me.monthDays.join(','));\n }\n if (me.months && me.months.length) {\n result.push('BYMONTH=' + me.months.join(','));\n }\n if (me.count) {\n result.push(`COUNT=${me.count}`);\n }\n if (me.endDate) {\n result.push('UNTIL=' + DateHelper.format(me.endDate, me.dateFormat));\n }\n if (me.positions && me.positions.length) {\n result.push('BYSETPOS=' + me.positions.join(','));\n }\n }\n return result.join(';');\n }\n set rule(rule) {\n const\n me = this,\n values = {\n frequency : null,\n interval : null,\n count : null,\n endDate : null,\n days : null,\n monthDays : null,\n months : null,\n positions : null\n };\n me.beginBatch();\n if (rule) {\n const parts = rule.split(';');\n for (let i = 0, len = parts.length; i < len; i++) {\n const\n part = parts[i].split('='),\n value = part[1];\n switch (part[0]) {\n case 'FREQ':\n values.frequency = value;\n break;\n case 'INTERVAL':\n values.interval = value;\n break;\n case 'COUNT':\n values.count = value;\n values.until = null;\n break;\n case 'UNTIL':\n if (value) {\n values.endDate = DateHelper.parse(value, me.dateFormat);\n }\n else {\n values.endDate = null;\n }\n values.count = null;\n break;\n case 'BYDAY':\n values.days = value;\n break;\n case 'BYMONTHDAY':\n values.monthDays = value;\n break;\n case 'BYMONTH':\n values.months = value;\n break;\n case 'BYSETPOS':\n values.positions = value;\n break;\n }\n }\n }\n me.set(values);\n if (rule) {\n me.sanitize();\n }\n me.endBatch();\n }\n construct(data = {}) {\n const\n me = this,\n { rule, timeSpan } = data;\n me._suspendedTimeSpanNotifying = 0;\n delete data.timeSpan;\n delete data.rule;\n super.construct(...arguments);\n if (rule) {\n me.suspendTimeSpanNotifying();\n me.rule = rule;\n me.resumeTimeSpanNotifying();\n }\n me.timeSpan = timeSpan;\n }\n /**\n * Iterate occurrences for the owning timespan across the specified date range. This method can be called even\n * if the timespan is not yet a member of a store, however, the occurrences returned will not be cached across\n * subsequent calls to this method.\n * @param {Date} startDate The start date of the iteration.\n * @param {Date} endDate The end date of the iteration.\n * @param {Function} fn The function to call for each occurrence.\n * @param {Scheduler.model.TimeSpan} fn.occurrence The occurrence.\n * @param {Boolean} fn.first A flag which is `true` for the first occurrence of this recurrence.\n * @param {Number} fn.counter A counter of how many dates have been visited in this iteration.\n * @param {Date} fn.date The occurrence date.\n * @internal\n */\n forEachOccurrence(startDate, endDate, fn) {\n if (this.timeSpan.startDate) {\n this.recurrenceIterator.forEachDate({\n recurrence : this,\n startDate,\n endDate,\n fn(date, counter, first, timeSpan) {\n return fn(timeSpan.buildOccurrence(date, first), first, counter, date);\n }\n });\n }\n }\n /**\n * Cleans up fields that do not makes sense for the current {@link #field-frequency} value.\n * @private\n */\n sanitize() {\n const\n me = this,\n timeSpanStartDate = me.timeSpan?.startDate,\n values = {};\n me.isSanitizing = true;\n switch (me.frequency) {\n case 'DAILY' :\n values.positions = null;\n values.days = null;\n values.monthDays = null;\n values.months = null;\n break;\n case 'WEEKLY' : {\n values.positions = null;\n values.monthDays = null;\n values.months = null;\n const { days } = me;\n if (timeSpanStartDate && days?.length === 1 && days[0] === RecurrenceDayRuleEncoder.encodeDay(timeSpanStartDate.getDay())) {\n values.days = null;\n }\n break;\n }\n case 'MONTHLY' : {\n if (me.monthDays?.length) {\n values.positions = null;\n values.days = null;\n }\n values.months = null;\n const { monthDays } = me;\n if (timeSpanStartDate && monthDays?.length === 1 && monthDays[0] === timeSpanStartDate.getDate()) {\n values.monthDays = null;\n }\n break;\n }\n case 'YEARLY' : {\n values.monthDays = null;\n const { months } = me;\n if (timeSpanStartDate && months?.length === 1 && months[0] === timeSpanStartDate.getMonth() + 1) {\n values.months = null;\n }\n break;\n }\n }\n me.set(values);\n me.isSanitizing = false;\n }\n copy(...args) {\n const result = super.copy(...args);\n result.dateFormat = this.dateFormat;\n result.timeSpan = this.timeSpan;\n return result;\n }\n afterChange(toSet, wasSet, silent) {\n const\n result = super.afterChange(toSet, wasSet, silent),\n { timeSpan } = this;\n if (!this.isSanitizing) {\n // cleanup data to match the chosen frequency\n this.sanitize();\n }\n if (timeSpan) {\n timeSpan.sanitizeRecurrenceData(this);\n if (!this.isTimeSpanNotifyingSuspended) {\n timeSpan.onRecurrenceChanged();\n }\n }\n return result;\n }\n set(field, value, ...args) {\n const values = typeof field === 'object' ? field : { [field] : value };\n // reset \"endDate\" field if \"count\" is being set\n if (values.count) {\n values.endDate = null;\n }\n // reset \"count\" field if \"endDate\" is being set\n else if (values.endDate) {\n values.count = null;\n }\n super.set(values, undefined, ...args);\n }\n get isTimeSpanNotifyingSuspended() {\n return Boolean(this._suspendedTimeSpanNotifying);\n }\n suspendTimeSpanNotifying() {\n this._suspendedTimeSpanNotifying++;\n }\n resumeTimeSpanNotifying() {\n if (this._suspendedTimeSpanNotifying) this._suspendedTimeSpanNotifying--;\n }\n}\nRecurrenceModel._$name = 'RecurrenceModel';", "import TimeSpan from '../TimeSpan.js';\nimport RecurrenceModel from '../RecurrenceModel.js';\nimport ArrayHelper from '../../../Core/helper/ArrayHelper.js';\nimport DateHelper from '../../../Core/helper/DateHelper.js';\nimport AbstractRecurrenceIterator from '../../data/util/recurrence/AbstractRecurrenceIterator.js';\nfunction convertExceptionDatesValue(value) {\n const\n result = {},\n { dateFormat } = this;\n if (value) {\n value = typeof value == 'string' ? value.split(',') : ArrayHelper.asArray(value);\n value.forEach(item => {\n if (typeof item == 'string') {\n item = DateHelper.parse(item, dateFormat);\n }\n // If we've got a valid date out of the incoming item, add an exception key\n if (!isNaN(item)) {\n result[DateHelper.makeKey(item)] = 1;\n }\n });\n }\n return result;\n}\nfunction serializeExceptionDatesValue(value) {\n const\n result = [],\n { dateFormat } = this;\n for (const date in value) {\n if (value[date]) {\n result.push(DateHelper.format(DateHelper.parseKey(date), dateFormat));\n }\n }\n return result;\n}\nconst emptyArray = [];\n/**\n * @module Scheduler/model/mixin/RecurringTimeSpan\n */\n/**\n * This mixin class provides recurrence related fields and methods to a {@link Scheduler.model.TimeSpan timespan model}.\n *\n * The mixin introduces two types of timespans: __recurring timespan__ and its __occurrences__.\n * __Recurring timespan__ is a timespan having {@link #field-recurrenceRule recurrence rule} specified and its __occurrences__ are \"fake\" dynamically generated timespans.\n * Their set depends on the scheduler visible timespan and changes upon the timespan change.\n *\n * There are few methods allowing to distinguish a recurring event and an occurrence: {@link #property-isRecurring}, {@link #property-isOccurrence}\n * and {@link #property-recurringTimeSpan} (returns the event this record is an occurrence of).\n *\n * The {@link #field-recurrenceRule recurrence rule} defined for the event is parsed and\n * represented with {@link Scheduler.model.RecurrenceModel RecurrenceModel} class (can be changed by setting {@link #property-recurrenceModel} property) instance.\n * See: {@link #property-recurrence} property.\n * @mixin\n * @mixinbase TimeSpan\n */\nexport default Target => class RecurringTimeSpan extends (Target || TimeSpan) {\n static get $name() {\n return 'RecurringTimeSpan';\n }\n /**\n * Returns `true` if this timespan supports recurring.\n * @property {Boolean}\n * @category Recurrence\n */\n get supportsRecurring() {\n return true;\n }\n static get fields() {\n return [\n /**\n * The timespan recurrence rule. A string in [RFC-5545](https://tools.ietf.org/html/rfc5545#section-3.3.10)\n * described format (\"RRULE\" expression).\n * @field {String} recurrenceRule\n * @category Scheduling\n */\n {\n name : 'recurrenceRule',\n internal : true\n },\n /**\n * A string (either a single date or multiple dates separated by comma) or an array of strings containing\n * the timespan exception dates. The dates that must be skipped when generating occurrences for a repeating\n * timespan. This is used to modify only individual occurrences of the timespan so the further regenerations\n * won't create another copy of this occurrence again.\n *\n * ```javascript\n * {\n * id: 7,\n * startDate: '2021-10-12T14:00:00',\n * endDate: '2021-10-12T15:00:00',\n * name: 'Lunch',\n * resourceId: 'hotel',\n * recurrenceRule: 'FREQ=DAILY;COUNT=5',\n * exceptionDates: ['2021-10-14']\n * }\n * ```\n *\n * Use {@link #function-addExceptionDate} method to add an individual entry to the dates array:\n *\n * ```javascript\n * // Break the link between the occurrence and its base.\n * // This also adds the occurrence date as an exception date\n * // so that the base timespan knows that this date should be skipped when regenerating its occurrences.\n * occurrence.recurringTimeSpan = null;\n *\n * // now the occurrence is an individual record that can be changed & persisted freely\n * occurrence.setStartEndDate(new Date(2018, 6, 2), new Date(2018, 6, 3));\n * ```\n * **Note:** The dates in this field get automatically removed when the event changes its {@link Scheduler.model.TimeSpan#field-startDate start date}.\n *\n * @field {String|String[]} exceptionDates\n * @category Scheduling\n */\n {\n name : 'exceptionDates',\n convert : convertExceptionDatesValue,\n serialize : serializeExceptionDatesValue,\n internal : true\n }\n ];\n }\n /**\n * Override of {@link Core/data/Model}'s method. If an {@link #property-isOccurrence}\n * is passed, it is detached from its parent recurring event. If it still has a recurrence\n * then the recurring event is changed to stop at the occurrence date. If it has no recurrence\n * an exception is added at the occurrence date.\n * @category Recurrence\n */\n remove() {\n if (this.isOccurrence) {\n const\n me = this,\n { recurringTimeSpan } = me;\n me.cancelBatch();\n recurringTimeSpan.beginBatch();\n me.detachFromRecurringEvent();\n recurringTimeSpan.endBatch();\n }\n else {\n return super.remove(...arguments);\n }\n }\n get eventStore() {\n let result = (this.isOccurrence && this.recurringEvent?.eventStore) || super.eventStore;\n // Recurrence methods are called on `eventStore`, but in case we have a regular\n // store with recurrence mixin, we won't event store and should return own\n // store instead\n if (!result && this.firstStore?.isRecurringTimeSpansMixin) {\n result = this.firstStore;\n }\n return result;\n }\n /**\n * Name of the class representing the recurrence model, defaults to {@link Scheduler.model.RecurrenceModel}\n * @property {String}\n * @category Recurrence\n */\n get recurrenceModel() {\n return this._recurrenceModel || RecurrenceModel;\n }\n set recurrenceModel(model) {\n this._recurrenceModel = model;\n }\n /**\n * Sets a recurrence for the timespan with a given frequency, interval, and end.\n * @param {RecurrenceModelConfig|String|Scheduler.model.RecurrenceModel} recurrence A data object for an instance of\n * {@link Scheduler.model.RecurrenceModel}. May also be the frequency string: `DAILY`, `WEEKLY`, `MONTHLY`, or\n * `YEARLY`.\n *\n * ```javascript\n * // repeat the event every other week till Jan 2 2039\n * event.setRecurrence({\n * frequency : \"WEEKLY\",\n * interval : 2,\n * endDate : new Date(2039, 0, 2)\n * });\n * ```\n *\n * Also a {@link Scheduler.model.RecurrenceModel recurrence model} can be provided as the only argument for this\n * method:\n *\n * ```javascript\n * const recurrence = new RecurrenceModel({ frequency : 'DAILY', interval : 5 });\n *\n * event.setRecurrence(recurrence);\n * ```\n *\n * or\n *\n * ```javascript\n * event.setRecurrence(\"WEEKLY\", 2, new Date(2039, 0, 2));\n * ```\n * @param {Number} [interval] The interval between occurrences (instances of this recurrence). For example, a daily\n * recurrence with an interval of 2 occurs every other day. Must be greater than 0.\n * @param {Number|Date} [recurrenceEnd] The end of the recurrence. The value can be specified by a date or by a\n * maximum count of occurrences (has to greater than 1, since 1 means the event itself).\n * @category Recurrence\n */\n setRecurrence(recurrence, interval, recurrenceEnd) {\n const me = this;\n let recurrenceRule;\n if (recurrence) {\n if (!recurrence.isRecurrenceModel) {\n if (typeof recurrence === 'string') {\n recurrence = {\n frequency : recurrence\n };\n if (interval) {\n recurrence.interval = interval;\n }\n // If the recurrence is limited\n if (recurrenceEnd) {\n if (recurrenceEnd instanceof Date) {\n recurrence.endDate = recurrenceEnd;\n }\n else {\n recurrence.count = recurrenceEnd;\n }\n }\n }\n recurrence = new me.recurrenceModel(recurrence);\n }\n // The RecurrenceModel has a reference to its owning recurring event.\n // It uses this to remove the owning event's exceptions after its new endDate\n // whenever its endDate is changed.\n recurrence.timeSpan = me;\n recurrenceRule = recurrence.rule;\n }\n me.recurrence = recurrence;\n me.recurrenceRule = recurrenceRule;\n }\n /**\n * The recurrence model used for the timespan.\n * @property {Scheduler.model.RecurrenceModel}\n * @category Recurrence\n */\n get recurrence() {\n const\n me = this,\n rule = me.recurrenceRule;\n if (!me._recurrence && rule) {\n me._recurrence = new me.recurrenceModel({ rule, timeSpan : me, id : `${me.id}-recurrence` });\n }\n return me._recurrence;\n }\n set recurrence(recurrence) {\n const me = this;\n me._recurrence = recurrence;\n if (recurrence) {\n // bind recurrence instance to the model\n recurrence.timeSpan = me;\n me.recurrenceRule = recurrence.rule;\n }\n else {\n // If this is being done to an occurrence, it's a signal that we are being\n // mutated into an exception. Apply the change immediately, directly to the data.\n if (me.isOccurrence) {\n me.setData('recurrenceRule', null);\n }\n else {\n me.recurrenceRule = null;\n }\n }\n }\n /**\n * Indicates if the timespan is recurring.\n * @property {Boolean}\n * @readonly\n * @category Recurrence\n */\n get isRecurring() {\n // MUST evaluate in this order so that if it is an occurrence,\n // the recurrence getter does not refresh the rule\n return Boolean(!this.isOccurrence && this.recurrence);\n }\n /**\n * Indicates if the timespan is an occurrence of another recurring timespan.\n * @property {Boolean}\n * @readonly\n * @category Recurrence\n */\n get isOccurrence() {\n return Boolean(this.recurringTimeSpan);\n }\n /**\n * The \"main\" timespan this model is an occurrence of. For non-occurrences returns `null`.\n * @property {Scheduler.model.TimeSpan}\n * @readonly\n * @internal\n * @category Recurrence\n */\n get recurringTimeSpan() {\n return this._recurringTimeSpan;\n }\n get isPersistable() {\n return super.isPersistable && (!this.supportsRecurring || !this.isOccurrence);\n }\n set recurringTimeSpan(recurringTimeSpan) {\n this._recurringTimeSpan = recurringTimeSpan;\n }\n /**\n * Returns the occurrences of this event over the specified time range. If the first\n * occurrence is in the time range `*this*` record is included in that position.\n * @param {Date} startDate The start date of the range for which to include occurrences.\n * @param {Date} [endDate] The end date of the range for which to include occurrences.\n * Defaults to the startDate.\n * @returns {Scheduler.model.TimeSpan[]} The array of occurrences which occur over the specified range.\n * @category Recurrence\n */\n getOccurrencesForDateRange(startDate, endDate = startDate) {\n return this.eventStore.getOccurrencesForTimeSpan(this, startDate, endDate);\n }\n /**\n * Array of this recurring timespan's cached occurrences. __Not including the owning recurring\n * event__.\n *\n * Empty if the timespan is not recurring.\n *\n * __Note that this is an internal accessor and is cleared whenever changes are made to the\n * owning recurring event__.\n * @property {Scheduler.model.TimeSpan[]}\n * @readonly\n * @internal\n * @category Recurrence\n */\n get occurrences() {\n if (this.isRecurring) {\n const result = [];\n // The occurrencesMap contains entries for each occurrence date.\n this.occurrenceMap.forEach(occurrence => {\n if (occurrence !== this) {\n result.push(occurrence);\n }\n });\n return result;\n }\n return emptyArray;\n }\n /**\n * A Map, keyed by each date an occurrence intersects, of occurrences of this event.\n * @property {Map}\n * @readonly\n * @internal\n * @category Recurrence\n */\n get occurrenceMap() {\n return this._occurrencesMap || (this._occurrencesMap = new Map());\n }\n /**\n * Removes an occurrence from this recurring timespan's cached occurrences.\n * @param dateOrTimeSpan occurrence date or occurrence TimeSpan\n * @internal\n * @category Recurrence\n */\n removeOccurrence(dateOrTimeSpan, eventStore = this.eventStore) {\n const date = dateOrTimeSpan.isTimeSpan ? dateOrTimeSpan.occurrenceDate : dateOrTimeSpan;\n // Clear the occurrences *is* we are in an EventStore.\n eventStore?.globalOccurrences.delete(this.createRecurrenceKey(date));\n // Remove occurrence from its by-startDate cache\n this.occurrenceMap.delete(DateHelper.makeKey(date));\n }\n /**\n * Removes all cached occurrences on or after the passed date from this recurring timespan's cached occurrences.\n * @internal\n * @category Recurrence\n */\n removeOccurrencesFrom(date) {\n this.occurrenceMap.forEach((occurrence, dateKey) => {\n if (DateHelper.parseKey(dateKey) >= date) {\n this.removeOccurrence(occurrence);\n }\n });\n }\n /**\n * Removes this recurring timespan's cached occurrences.\n * @internal\n * @category Recurrence\n */\n removeOccurrences(eventStore) {\n // This recurring event must also be removed from the occurrenceMap if it's there\n // So insert it as the first element. Can also be found from the store's global occurrence\n // Map using [...this.eventStore.globalOccurrences.keys()].filter(e => e.startsWith(`_generated:${this.id}`))\n [this, ...this.occurrences].forEach(occurrence => this.removeOccurrence(occurrence, eventStore));\n }\n /**\n * The method is triggered when the timespan recurrence settings get changed.\n * It updates the {@link #field-recurrenceRule} field in this case.\n * @internal\n * @category Recurrence\n */\n onRecurrenceChanged() {\n this.recurrenceRule = this.recurrence?.rule || null;\n }\n sanitizeRecurrenceData(recurrence = this.recurrence) {\n // Remove all exceptionsDates that our owning timeSpan had that are\n // now after our end date and therefore redundant.\n if (recurrence.endDate) {\n const\n endDate = DateHelper.clearTime(recurrence.endDate),\n { exceptionDates } = this;\n // Clear any now-invalid cached occurrences\n this.removeOccurrencesFrom(endDate);\n // If we had any exceptions on or after this date, remove them.\n if (exceptionDates) {\n for (const dateKey in exceptionDates) {\n const exceptionDate = DateHelper.parseKey(dateKey);\n if (exceptionDate >= endDate) {\n delete exceptionDates[dateKey];\n }\n }\n }\n }\n }\n /**\n * The original {@lScheduler.model.TimeSpan#field-startDate startDate} of this event before any modifications\n * took place. Used by {@link #function-removeOccurrence} and {@link #function-detachFromRecurringEvent}\n * @internal\n * @readonly\n * @category Recurrence\n */\n get occurrenceDate() {\n return this.meta.modified?.startDate || this.startDate;\n }\n /**\n * If this event is an {@link #property-isOccurrence occurrence} of a recurring event, then this\n * property yields its zero-based occurrence index in the sequence.\n * @property {Number}\n * @readonly\n * @category Recurrence\n */\n get occurrenceIndex() {\n return AbstractRecurrenceIterator.getOccurrenceIndex(this);\n }\n /**\n * Builds an occurrence of this recurring event by cloning the timespan data.\n * The method is used internally by the __RecurringTimeSpans__ mixin.\n * Override it if you need to customize the generated occurrences.\n *\n * If the date requested is the start date of the event sequence, `this`\n * record is returned. All runs of recurring events begin with the base record.\n * @param {Date} occurrenceDate The occurrence start date.\n * @param {Boolean} isFirst `true` if this is the first occurrence.\n * @returns {Scheduler.model.TimeSpan} The occurrence.\n * @internal\n * @category Recurrence\n */\n buildOccurrence(occurrenceDate, isFirst) {\n const\n me = this,\n {\n occurrenceMap,\n recurrence,\n meta\n } = me,\n globalOccurrences = me.eventStore?.globalOccurrences,\n occurrenceKey = DateHelper.makeKey(occurrenceDate),\n id = me.createRecurrenceKey(occurrenceDate, occurrenceKey),\n onStartDate = !(occurrenceDate - me.startDate),\n { fieldMap } = me.constructor;\n // An occurrence has a unique ID which identifies it by its base recurring event and its time.\n let occurrence = globalOccurrences?.get(id),\n { duration } = me;\n // If there's no duration, or it's an all day event (which makes the event ceil and floor its\n // start and end dates, but does *NOT* as of 27/5/2020 adjust its duration) then\n // we calculate the duration of the occurrence.\n if (me.endDate && (me.allDay || !duration)) {\n duration = DateHelper.as(me.durationUnit, me.endDate.getTime() - me.startDate.getTime());\n }\n // Don't let NaN in record data\n const occurrenceEndDate = duration !== undefined ? DateHelper.add(occurrenceDate, duration, me.durationUnit) : undefined;\n if (!occurrence) {\n // If this is the first occurrence (start times may not match), or it's right on the start\n // then this recurring event *IS* the occurrence\n if (isFirst || onStartDate) {\n occurrence = me;\n // We are the first occurrence.\n // But if our start time is not as the rule requires, adjust ourself *silently*\n if (!onStartDate) {\n me.setStartEndDate(occurrenceDate, occurrenceEndDate, true);\n // Since we've changed the event start date the recurrence \"Days\"/\"MonthDays\"/\"Months\"\n // might get redundant in case the event start date matches the fields values\n // Calling recurrence sanitize() will clean the fields in this case.\n recurrence.suspendTimeSpanNotifying();\n recurrence.sanitize();\n recurrence.resumeTimeSpanNotifying();\n }\n // Either way, because of adjustment above, or initial correctness, we are in sync\n // with our recurrence rule. A RecurrenceIterator is now able to calculate a correct\n // UNTIL date from a COUNT value. See AbstractRecurrenceIterator#processIterationConfig\n meta.isSyncedWithRule = true;\n }\n // Generate an occurrence which references this as its parent\n else {\n occurrence = me.copy(\n {\n [fieldMap.id.dataSource] : id,\n [fieldMap.startDate.dataSource] : occurrenceDate,\n [fieldMap.endDate.dataSource] : occurrenceEndDate,\n [fieldMap.duration.dataSource] : duration,\n constraintDate : null,\n constraintType : null\n },\n { creatingOccurrence : true }\n );\n occurrence.recurringTimeSpan = me;\n }\n globalOccurrences?.set(id, occurrence);\n // A recurring timespan keeps a by-startDate index of occurrences.\n // And itself will be among those.\n occurrenceMap.set(occurrenceKey, occurrence);\n }\n return occurrence;\n }\n createRecurrenceKey(date = this.startDate, dateKey = null) {\n return `_generated:${this.id}:${dateKey || DateHelper.makeKey(date)}`;\n }\n // Converts this occurrence to a new \"master\" event\n convertToRealEvent(wasSet, silent) {\n if (!this.isOccurrence) {\n return;\n }\n const\n me = this,\n {\n recurringTimeSpan,\n resource,\n occurrenceIndex,\n recurrence\n } = me,\n count = recurrence && recurringTimeSpan.recurrence.count,\n // resourceRecords is a temporary property of occurrence events to handle cases\n // if only resources has been updated. (change only resources won't mark record as dirty)\n newResource = wasSet?.resourceRecords?.value || me.data.newResource;\n recurringTimeSpan.beginBatch();\n me.detachFromRecurringEvent();\n me.clearChanges();\n // Must silently set our own ID, not be the key generated from our parent id and occurrence date.\n // Must not result in the id field being in the modified state.\n me.setData('id', me.generateId(recurringTimeSpan.eventStore));\n if (newResource) {\n // clear resourceId to avoid auto-adding to assignmentStore, it is handled manually bellow\n delete me.data.resourceId;\n }\n // The impending changes to the former parent recurring event trigger a full refresh.\n recurringTimeSpan.eventStore.add(me, silent);\n // Ensure that the original count is honoured.\n // If we are the 8th occurrence of 10, OUR repeat count must be 3.\n if (count) {\n me.recurrence.count = count - occurrenceIndex;\n }\n if (newResource || resource) {\n me.assign(newResource || resource);\n }\n // remove data after apply\n if (newResource) {\n delete me.data.resourceRecords;\n }\n if (wasSet) {\n delete wasSet.resourceRecords;\n }\n // Any change to a recurring events triggers a store refresh event.\n recurringTimeSpan.endBatch();\n }\n afterChange(toSet, wasSet, silent, ...args) {\n const\n me = this,\n { eventStore } = me;\n // reset cached recurrence instance in case \"recurrenceRule\" is changed\n if ('recurrenceRule' in wasSet) {\n me._recurrence = null;\n // If we are a recurring event, we must be in the recurringEvents cache.\n // If we are *not* a recurring event, we must *not* be in there.\n // An event not yet in a store (eg dragging to create) won't have an eventStore.\n eventStore?.recurringEvents[wasSet.recurrenceRule.value ? 'add' : 'delete'](me);\n }\n // Any change to an occurrence adds it to an event store, at which point\n // it ceases to be an occurrence.\n //\n // If it has a recurrenceRule it becomes the start of a new recurring event series,\n // and the old owning recurring event stops on the day before.\n //\n // If it has no recurrenceRule, it becomes an exception to its owning recurring event.\n if (me.isOccurrence) {\n me.convertToRealEvent(wasSet, silent);\n }\n // Setting a newException date must mark the exceptionDates as modified\n else if ('newExceptionDate' in wasSet) {\n me.meta.modified.exceptionDates = true;\n delete me.meta.modified.newExceptionDate;\n // Remove any occurrence on that date from our by-startDate cache\n // and from the global occurrences cache\n me.removeOccurrence(wasSet.newExceptionDate.value);\n }\n return super.afterChange(toSet, wasSet, silent, ...args);\n }\n /**\n * Detaches an occurrence from its owning recurring event so that it can be added to the eventStore\n * either as an exception, or as the start of a new recurring sequence.\n * @internal\n * @category Recurrence\n */\n detachFromRecurringEvent() {\n const\n me = this,\n // For access further down, breaking the link involves engine if trying to get the occurrenceDate later,\n // resulting in the wrong date\n { recurringTimeSpan, occurrenceDate, startDate } = me;\n // Break the link\n me.recurringTimeSpan = null;\n // The occurrenceDate is injected into the data when an occurrence is created.\n // the recurringTimeSpan's afterChange will remove any cache occurrence\n // for this date; see above\n recurringTimeSpan.addExceptionDate(occurrenceDate);\n // If we still have a recurrenceRule, we're being promoted to be a new recurring event.\n // The recurrence setter applies the rule immediately to occurrences, so this will\n // always be correct.\n if (me.recurrenceRule) {\n // The RecurrenceModel removes occurrences and exceptions after this date\n recurringTimeSpan.recurrence.endDate = DateHelper.add(startDate, -1, 'minute');\n }\n }\n /**\n * The setter used by Model#inSet when {@link #function-addExceptionDate} is called.\n * Adding an exception must trigger change processing in a recurring event, so it must\n * be changed through a {@link Core.data.Model#function-set} call. Also, the change must be batchable\n * with other changes.\n * @private\n * @readonly\n * @category Recurrence\n */\n set newExceptionDate(date) {\n if (date) {\n const exceptionDates = this.exceptionDates || (this.exceptionDates = {});\n exceptionDates[DateHelper.makeKey(date)] = 1;\n }\n }\n /**\n * Adds an exception date that should be skipped when generating occurrences for the timespan.\n * The methods adds an entry to the array kept in {@link #field-exceptionDates} field.\n * @param {Date} date Exception date.\n * @internal\n * @category Recurrence\n */\n addExceptionDate(newExceptionDate) {\n return this.set({\n newExceptionDate\n });\n }\n /**\n * Does this recurring event have an exception on the passed date.\n * @param {Date} date The date to find an exception for.\n * @returns {Boolean} `true` if the event has an exception starting on the passed date.\n * @category Recurrence\n */\n hasException(date) {\n return this.exceptionDates?.[DateHelper.makeKey(date)];\n }\n};\n", "import DH from '../../../Core/helper/DateHelper.js';\nimport ArrayHelper from '../../../Core/helper/ArrayHelper.js';\nconst\n oneDayMS = 1000 * 60 * 60 * 24;\n/**\n * @module Scheduler/model/mixin/EventModelMixin\n */\n/**\n * Predefined named colors (actual color might vary by theme):\n *
red,\n *
pink,\n *
purple,\n *
magenta,\n *
violet,\n *
indigo,\n *
blue,\n *
cyan,\n *
teal,\n *
green,\n *
gantt-green\n *
lime,\n *
yellow,\n *
orange,\n *
deep-orange\n *
gray\n *
light-gray\n * @typedef {'red'|'pink'|'purple'|'magenta'|'violet'|'indigo'|'blue'|'cyan'|'teal'|'green'|'gantt-green'|'lime'|'yellow'|'orange'|'deep-orange'|'gray'|'light-gray'|String|null} EventColor\n */\n// Colors also specified in a static getter in TimelineEventRendering.js\n/**\n * Mixin that holds configuration shared between events in Scheduler and Scheduler Pro.\n * @mixin\n */\nexport default Target => class EventModelMixin extends Target {\n static get $name() {\n return 'EventModelMixin';\n }\n // Flag checked by EventStore to make sure it uses a valid subclass\n static get isEventModel() {\n return true;\n }\n /**\n * Set value for the specified field(s), triggering engine calculations immediately. See\n * {@link Core.data.Model#function-set Model#set()} for arguments.\n *\n * ```javascript\n * eventRecord.set('duration', 4);\n * // eventRecord.endDate is not yet calculated\n *\n * await eventRecord.setAsync('duration', 4);\n * // eventRecord.endDate is calculated\n * ```\n *\n * @param {String|Object} field The field to set value for, or an object with multiple values to set in one call\n * @param {*} [value] Value to set\n * @param {Boolean} [silent=false] Set to true to not trigger events. If event is recurring, occurrences won't be updated\n * automatically.\n * @function setAsync\n * @category Editing\n * @async\n */\n //region Fields\n static get fields() {\n return [\n /**\n * The start date of a time span (or Event / Task).\n *\n * Uses {@link Core/helper/DateHelper#property-defaultFormat-static DateHelper.defaultFormat} to convert a\n * supplied string to a Date. To specify another format, either change that setting or subclass TimeSpan and\n * change the dateFormat for this field.\n *\n * UI fields representing this data field are disabled for summary tasks. See {@link #function-isEditable}\n * for details.\n *\n * Note that the field always returns a `Date`.\n *\n * Also note that modifying the `startDate` at runtime will move the event in time, without affecting its\n * duration (with reservation for other scheduling logic affecting the duration). If you want to change the\n * `startDate` and `duration`, use {@link Scheduler/model/TimeSpan#function-setStartDate} instead (passing\n * `false` as the second argument).\n *\n * @field {Date} startDate\n * @accepts {String|Date}\n * @category Scheduling\n */\n /**\n * The end date of a time span (or Event / Task).\n *\n * Uses {@link Core/helper/DateHelper#property-defaultFormat-static DateHelper.defaultFormat} to convert a\n * supplied string to a Date. To specify another format, either change that setting or subclass TimeSpan and\n * change the dateFormat for this field.\n *\n * UI fields representing this data field are disabled for summary tasks. See {@link #function-isEditable} for details.\n *\n * Note that the field always returns a `Date`.\n *\n * @field {Date} endDate\n * @accepts {String|Date}\n * @category Scheduling\n */\n /**\n * The numeric part of the timespan's duration (the number of units).\n *\n * UI fields representing this data field are disabled for summary tasks. See {@link #function-isEditable}\n * for details.\n *\n * @field {Number} duration\n * @category Scheduling\n */\n /**\n * Calculated field which encapsulates the duration's magnitude and unit. This field will not be persisted,\n * setting it will update the {@link #field-duration} and\n * {@link Scheduler.model.TimeSpan#field-durationUnit} fields.\n *\n * UI fields representing this data field are disabled for summary tasks. See {@link #function-isEditable}\n * for details.\n *\n * @field {DurationConfig|Core.data.Duration} fullDuration\n * @category Scheduling\n */\n /**\n * The unique identifier of a task (mandatory)\n * @field {String|Number} id\n * @category Common\n */\n /**\n * Id of the resource this event is associated with (only usable for single assignments). We recommend\n * using assignments in an AssignmentStore over this approach. Internally any Event using `resourceId`\n * will have an assignment in AssignmentStore generated.\n * @field {String|Number} resourceId\n * @category Common\n */\n {\n name : 'resourceId',\n internal : true\n },\n /**\n * Ids of the resources this event is associated with (can be used for for multiple assignments).\n * Any event using `resourceIds` will have assignments in AssignmentStore generated automatically.\n * It only applies if is configured with `perist: true`.\n * ```javascript\n * class CustomEventModel extends EventModel {\n * static get $name() {\n * return 'CustomEventModel';\n * }\n *\n * static get fields() {\n * return [\n * { name : 'resourceIds', persist : true }\n * ];\n * }\n * };\n *\n * const\n * resources = [\n * { id : 'r1', name : 'Celia' },\n * { id : 'r2', name : 'Lee' },\n * { id : 'r3', name : 'Macy' },\n * { id : 'r4', name : 'Madison' }\n * ],\n * events = [\n * {\n * id : 1,\n * resourceIds : ['r1', 'r2']\n * ...\n * },\n * {\n * id : 2,\n * resourceIds : ['r3', 'r4']\n * ...\n * }\n * ];\n *\n * const scheduler = new Scheduler({\n * ...\n * eventStore : {\n * modelClass : CustomEventModel,\n * data : events\n * },\n * ...\n * });\n * ```\n * @field {String[]|Number[]} resourceIds\n * @category Common\n */\n {\n name : 'resourceIds',\n type : 'array',\n persist : false,\n internal : true\n },\n /**\n * The array of {@link Scheduler.model.ResourceModel resources} which are assigned to this event.\n * @field {Scheduler.model.ResourceModel[]} resources\n * @category Common\n */\n {\n name : 'resources',\n column : {\n type : 'resourceassignment'\n },\n persist : false,\n internal : true,\n useProp : true\n },\n /**\n * Specify false to prevent the event from being dragged (if EventDrag feature is used)\n * @field {Boolean} draggable\n * @default true\n * @category Interaction\n */\n {\n name : 'draggable',\n type : 'boolean',\n persist : false,\n defaultValue : true,\n internal : true\n },\n /**\n * Specify `false` to prevent the event from being resized (if EventResize feature is used). You can also\n * specify `'start'` or `'end'` to only allow resizing in one direction\n * @field {Boolean|String} resizable\n * @default true\n * @category Interaction\n */\n {\n name : 'resizable',\n persist : false,\n defaultValue : true,\n internal : true\n }, // true, false, 'start' or 'end'\n /**\n * A field marking event as all day(s) spanning event.\n * For example, a holiday day may be represented by a `startDate`, and the `allDay` flag.\n * @field {Boolean} allDay\n * @category Scheduling\n */\n {\n name : 'allDay',\n type : 'boolean',\n defaultValue : false\n },\n /**\n * Controls this events appearance, see Schedulers\n * {@link Scheduler.view.mixin.TimelineEventRendering#config-eventStyle eventStyle config} for\n * available options.\n * @field {'plain'|'border'|'colored'|'hollow'|'line'|'dashed'|'minimal'|'rounded'|'calendar'|'interday'|null} eventStyle\n * @category Styling\n */\n {\n name : 'eventStyle',\n internal : true\n },\n /**\n * Controls the primary color of the event. For available standard colors, see\n * {@link #typedef-EventColor}.\n * @field {EventColor|String|null} eventColor\n * @category Styling\n */\n {\n name : 'eventColor',\n internal : true\n },\n /**\n * Width (in px) to use for this milestone when using Scheduler#milestoneLayoutMode 'data'.\n * @field {Number} milestoneWidth\n * @category Styling\n */\n {\n name : 'milestoneWidth',\n internal : true\n },\n /**\n * Set this field to `false` to opt out of {@link Scheduler.feature.StickyEvents sticky event content}\n * (keeping event text in view while scrolling).\n * @field {Boolean} stickyContents\n * @category Styling\n */\n {\n name : 'stickyContents',\n internal : true\n }\n ];\n }\n //endregion\n //region Id change\n updateAssignmentEventIds() {\n this.assigned.forEach(assignment => {\n assignment.eventId = this.id;\n });\n }\n syncId(value) {\n super.syncId(value);\n this.updateAssignmentEventIds();\n }\n //endregion\n // This method is used by the `autoUpdateRecord` mode of the resource assignment field\n // here we route the resources update to the correct setter\n setValue(fieldName, value) {\n if (fieldName === 'resource' && !this.usesSingleAssignment) {\n this.resources = ArrayHelper.asArray(value) ?? [];\n }\n else {\n return super.setValue(fieldName, value);\n }\n }\n //region Resources\n /**\n * Returns all resources assigned to an event.\n *\n * @property {Scheduler.model.ResourceModel[]}\n * @category Assignments & Resources\n * @readonly\n */\n get resources() {\n // Only include valid resources, to not have nulls in the result\n return this.assignments.reduce((resources, { resource }) => {\n resource && resources.push(resource.$original);\n return resources;\n }, []);\n }\n set resources(resources) {\n resources = ArrayHelper.asArray(resources);\n const\n me = this,\n newResourceIds = resources.map(me.constructor.asId);\n if (me.usesSingleAssignment) {\n me.set('resourceId', newResourceIds[0]);\n }\n else if (me.fieldMap?.resourceIds.persist) {\n me.resourceIds = newResourceIds;\n }\n else {\n const\n existingResourceIds = me.assignments.map(a => a.resource.id),\n { onlyInA : toAdd, onlyInB : toRemove } = ArrayHelper.delta(newResourceIds, existingResourceIds);\n // Add first, remove after. Otherwise event might get removed with its last assignment\n me.assignmentStore.add(toAdd.map(resourceId => ({ resource : resourceId, event : me })));\n me.assignmentStore.remove(toRemove.map(resourceId => me.assignments.find(a => a.resource.id === resourceId)));\n }\n }\n /**\n * Iterate over all associated resources\n * @private\n * @category Assignments & Resources\n */\n forEachResource(fn, thisObj = this) {\n for (const resource of this.resources) {\n if (fn.call(thisObj, resource) === false) {\n return;\n }\n }\n }\n /**\n * Returns either the resource associated with this event (when called w/o `resourceId`) or resource\n * with specified id.\n *\n * @param {String} [resourceId] To retrieve a specific resource\n * @returns {Scheduler.model.ResourceModel}\n * @category Assignments & Resources\n */\n getResource(resourceId) {\n if (resourceId == null) {\n return this.resource;\n }\n return this.resourceStore ? this.resourceStore.getById(resourceId) : null;\n }\n //endregion\n //region Dates\n get startDate() {\n let dt;\n if (this.isOccurrence) {\n dt = this.get('startDate');\n }\n else {\n // Micro optimization to avoid expensive super call. super will be hit in Scheduler Pro\n dt = this._startDate ?? super.startDate;\n }\n if (this.allDay) {\n dt = this.constructor.getAllDayStartDate(dt);\n }\n return dt;\n }\n set startDate(startDate) {\n if (this.batching) {\n this._startDate = startDate;\n this.set({ startDate });\n }\n else {\n super.startDate = startDate;\n }\n }\n get endDate() {\n let dt;\n if (this.isOccurrence) {\n dt = this.get('endDate');\n }\n else {\n // Micro optimization to avoid expensive super call. super will be hit in Scheduler Pro\n dt = this._endDate ?? super.endDate;\n }\n if (this.allDay) {\n dt = this.constructor.getAllDayEndDate(dt);\n }\n return dt;\n }\n set endDate(endDate) {\n if (this.batching) {\n this._endDate = endDate;\n this.set({ endDate });\n }\n else {\n super.endDate = endDate;\n }\n }\n // Cannot use `convert` method because it might be disabled by `useRawData : true` and we always need to calculate\n // that value\n get wrapStartDate() {\n return this.startDate;\n }\n set wrapStartDate(value) {}\n get wrapEndDate() {\n return this.endDate;\n }\n set wrapEndDate(value) {}\n /**\n * Shift the dates for the date range by the passed amount and unit\n * @param {DurationUnitShort} unit The unit to shift by, see {@link Core.helper.DateHelper}\n * for more information on valid formats.\n * @param {Number} amount The amount to shift\n * @returns {Promise} A promise which is resolved when shift calculations are done\n * @async\n * @method shift\n * @category Scheduling\n */\n //endregion\n //region Is\n // Used internally to differentiate between Event and ResourceTimeRange\n get isEvent() {\n return true;\n }\n /**\n * Returns true if event can be drag and dropped\n * @property {Boolean}\n * @category Editing\n */\n get isDraggable() {\n return !this.readOnly && this.draggable;\n }\n /**\n * Returns true if event can be resized, but can additionally return 'start' or 'end' indicating how this event can\n * be resized.\n *\n * Milestones and parent events (that are not manuallyScheduled) cannot be resized.\n *\n * @property {Boolean|String}\n * @readonly\n * @category Editing\n */\n get isResizable() {\n return !this.isMilestone && (!this.isParent || this.manuallyScheduled) && this.resizable;\n }\n /**\n * Returns false if the event is not persistable. By default it always is, override this getter if you need\n * custom logic.\n *\n * @property {Boolean}\n * @readonly\n * @category Editing\n */\n get isPersistable() {\n // Records not yet fully created cannot be persisted\n return super.isPersistable && !this.isCreating;\n }\n endBatch(silent, skipAccessors, triggerBeforeUpdate) {\n const\n me = this,\n wasPersistable = me.isPersistable;\n super.endBatch(silent, skipAccessors, triggerBeforeUpdate);\n // If this event newly persistable, its assignments are eligible for syncing.\n if (me.isPersistable && !wasPersistable && !me.ignoreBag && me.assigned) {\n for (const assignment of me.assigned) {\n assignment.stores.forEach(s =>\n s.updateModifiedBagForRecord(assignment)\n );\n }\n }\n }\n get isCreating() {\n return super.isCreating;\n }\n set isCreating(value) {\n super.isCreating = value;\n this.assignmentStore?.suspendAutoCommit();\n this.assignments.forEach(record => record.isCreating = value);\n this.assignmentStore?.resumeAutoCommit();\n }\n //endregion\n //region Single assignment compatibility\n get usesSingleAssignment() {\n return !this.eventStore || this.eventStore.usesSingleAssignment;\n }\n copy(...args) {\n const copy = super.copy(...args);\n // Don't copy resourceId when using multi assignment\n if (!this.usesSingleAssignment) {\n copy.resourceId = null;\n }\n return copy;\n }\n /**\n * Override persistable getter to prevent sending resourceId when using multiple resource assignment mode\n * https://github.com/bryntum/support/issues/1345\n * @private\n */\n get persistableData() {\n const data = super.persistableData;\n if (!this.usesSingleAssignment) {\n delete data.resourceId;\n }\n return data;\n }\n /**\n * Returns the first assigned resource, or assigns a resource\n * @member {Scheduler.model.ResourceModel} resource\n * @category Assignments & Resources\n */\n get resource() {\n const { resources } = this;\n return resources.length ? resources[0] : null;\n }\n set resource(resourceRecord) {\n // Use the resourceId setter for single assignment\n this.resourceId = this.constructor.asId(resourceRecord);\n }\n get resourceId() {\n return this.usesSingleAssignment ? this.get('resourceId') : this.assignments[0]?.resourceId;\n }\n set resourceId(resourceId) {\n this.applyResourceId(resourceId);\n }\n get resourceIds() {\n if (this.fieldMap?.resourceIds.persist) {\n return this.get('resourceIds');\n }\n else {\n return this.resources?.map(r => r.id) ?? [];\n }\n }\n set resourceIds(ids) {\n this.set('resourceIds', ids);\n }\n // Resources + any links to any of them\n get $linkedResources() {\n return this.resources?.flatMap(resourceRecord => ([\n resourceRecord,\n ...resourceRecord.$links\n ])) ?? [];\n }\n applyResourceId(resourceId, fromApplyValue = false) {\n const\n me = this,\n { eventStore, assignments } = me;\n // When part of an EventStore, resourceId are changed to be AssignmentModels\n if (eventStore) {\n // If not yet part of project, we cant resolve assignmentStore from ourselves\n const assignmentStore = eventStore.assignmentStore || eventStore.crudManager?.assignmentStore;\n if (resourceId != null) {\n if (!me.meta.skipEnforcingSingleAssignment) {\n eventStore.usesSingleAssignment = true;\n }\n // Reassign if already assigned, only single assignment allowed\n if (assignments?.length && resourceId !== assignments[0].resourceId) {\n //assignments[0].set('resourceId', resourceId, Boolean(me.eventStore.eventsSuspended));\n // Silent reassign if events are suspended on event store, won't be expecting UI update then\n const eventsSuspended = Boolean(eventStore.eventsSuspended);\n eventsSuspended && assignmentStore.suspendEvents();\n assignments[0].resource = resourceId;\n eventsSuspended && assignmentStore.resumeEvents();\n }\n // Otherwise assign\n else {\n assignmentStore.assignEventToResource(me, resourceId);\n }\n }\n // Setting resourceId to null removes all assignments, if resourceIds is not set\n else if (me.usesSingleAssignment || me.resourceIds?.length) {\n assignmentStore.remove(assignments);\n }\n }\n // Not part of an EventStore, edge case. Set to data unless we are in such operation already\n else if (!fromApplyValue) {\n me.set({ resourceId });\n }\n }\n applyResourceIds(resourceIds, fromApplyValue = false) {\n const\n me = this,\n { eventStore, assignments } = me;\n if (me.fieldMap['resourceIds'].persist === false) {\n return false;\n }\n // Remove duplicated value\n resourceIds = [...new Set(resourceIds)];\n // When part of an EventStore, resourceIds are changed to be AssignmentModels\n if (eventStore) {\n // If not yet part of project, we cant resolve assignmentStore from ourselves\n const assignmentStore = eventStore.assignmentStore || eventStore.crudManager?.assignmentStore;\n if (resourceIds?.length) {\n // If there are assignments, update them with new resourceIds. If resourceIds\n // contains more elements than existing assignments, add new ones,\n // otherwise remove excess assignments not used anymore\n if (assignments?.length) {\n const eventsSuspended = Boolean(eventStore.eventsSuspended);\n eventsSuspended && assignmentStore.suspendEvents();\n assignments.forEach(assignment => {\n const resourceIdToUpdate = resourceIds.find(resourceId =>\n !assignments.some(a => a.resourceId === resourceId));\n if (resourceIdToUpdate) {\n assignment.resource = resourceIdToUpdate;\n }\n });\n const { onlyInA : toAdd, onlyInB: toRemove } = ArrayHelper.delta(resourceIds, assignments.map(assignment => assignment.resourceId));\n assignmentStore.add(toAdd.map(resourceId => ({ resource : resourceId, event : me })));\n assignmentStore.remove(toRemove.map(resourceId => assignments.find(a => a.resource.id === resourceId)));\n eventsSuspended && assignmentStore.resumeEvents();\n }\n // Otherwise assign\n else {\n assignmentStore.add(resourceIds.map(resourceId => ({ resource : resourceId, event : me })));\n }\n }\n else {\n // Setting resourceIds to an empty list removes all assignments\n assignmentStore.remove(assignments);\n }\n }\n // Not part of an EventStore, edge case. Set to data unless we are in such operation already\n else if (!fromApplyValue) {\n me.set({ resourceIds });\n }\n }\n // Special handling of setting resourceId and resourceIds, creates assignment\n applyValue(useProp, mapping, value, skipAccessors, field) {\n if (field && !this.meta.isAssigning) {\n const { eventStore } = this;\n switch (field.name) {\n case 'resourceId':\n eventStore && (eventStore.isAssigning = true);\n this.applyResourceId(value, true);\n break;\n case 'resourceIds':\n eventStore && (eventStore.isAssigning = true);\n this.applyResourceIds(value, true);\n break;\n }\n eventStore && (eventStore.isAssigning = false);\n }\n super.applyValue(useProp, mapping, value, skipAccessors, field);\n }\n //endregion\n //region Assignment\n /**\n * Returns all assignments for the event. Event must be part of the store for this method to work.\n * @property {Scheduler.model.AssignmentModel[]}\n * @readonly\n * @category Assignments & Resources\n */\n get assignments() {\n return [...(this.assigned || [])];\n }\n /**\n * Assigns this event to the specified resource.\n *\n * *Note:* The event must be part of an EventStore for this to work. If the EventStore uses single assignment\n * (loaded using resourceId) existing assignments will always be removed.\n *\n * @param {Scheduler.model.ResourceModel|String|Number|Scheduler.model.ResourceModel[]|String[]|Number[]} resource A new resource for this event, either as a full\n * Resource record or an id (or an array of such).\n * @param {Boolean} [removeExistingAssignments] `true` to first remove existing assignments\n * @typings removeExistingAssignments -> {Boolean||Number}\n * @category Assignments & Resources\n * @typings async\n */\n assign(resource, removeExistingAssignments = false) {\n const { eventStore } = this;\n if (eventStore && !eventStore.usesSingleAssignment) {\n eventStore.assignEventToResource(this, resource, removeExistingAssignments);\n }\n else {\n // Remember what resource to assign, directly in single assignment mode or for later when we are joined to\n // an EventStore\n this.resourceId = this.constructor.asId(resource);\n if (!eventStore) {\n // Prevent flagging EventStore as using single assignment when that happens, we cannot know that here\n this.meta.skipEnforcingSingleAssignment = true;\n }\n }\n }\n /**\n * Unassigns this event from the specified resource\n *\n * @param {Scheduler.model.ResourceModel|String|Number} [resource] The resource to unassign from.\n * @category Assignments & Resources\n * @typings async\n */\n unassign(resource, removingResource = false) {\n const me = this;\n resource = me.constructor.asId(resource);\n // If unassigned is caused by removing the resource the UI should be able to find out to not do extra redraws etc.\n me.meta.removingResource = removingResource;\n me.eventStore?.unassignEventFromResource(me, resource);\n me.meta.removingResource = null;\n }\n /**\n * Reassigns an event from an old resource to a new resource\n *\n * @param {Scheduler.model.ResourceModel|String|Number} oldResourceId A resource to unassign from or its id\n * @param {Scheduler.model.ResourceModel|String|Number} newResourceId A resource to assign to or its id\n * @category Assignments & Resources\n */\n reassign(oldResourceId, newResourceId) {\n this.eventStore && this.eventStore.reassignEventFromResourceToResource(this, oldResourceId, newResourceId);\n }\n /**\n * Returns true if this event is assigned to a certain resource.\n *\n * @param {Scheduler.model.ResourceModel|String|Number} resource The resource to query for\n * @returns {Boolean}\n * @category Assignments & Resources\n */\n isAssignedTo(resource) {\n const resourceId = this.constructor.asId(resource);\n return this.assignments.some(assignment => assignment.resourceId === resourceId);\n }\n //endregion\n //region Dependencies\n /**\n * Returns all predecessor dependencies of this event\n *\n * @readonly\n * @property {Scheduler.model.DependencyBaseModel[]}\n * @category Dependencies\n */\n get predecessors() {\n return [...this.incomingDeps ?? []];\n }\n /**\n * Returns all successor dependencies of this event\n *\n * @readonly\n * @property {Scheduler.model.DependencyBaseModel[]}\n * @category Dependencies\n *\n */\n get successors() {\n return [...this.outgoingDeps ?? []];\n }\n get dependencies() {\n // Dependency feature listens for assignment changes pre commit, thus we risk deps not being set up yet\n return [...this.incomingDeps ?? [], ...this.outgoingDeps ?? []];\n }\n //endregion\n normalize() {\n // Normalization handled by Engine\n }\n inSetNormalize() {\n // Normalization handled by Engine\n }\n /**\n * The \"main\" event this model is an occurrence of.\n * Returns `null` for non-occurrences.\n * @property {Scheduler.model.EventModel}\n * @alias #Scheduler.model.mixin.RecurringTimeSpan#property-recurringTimeSpan\n * @readonly\n * @category Scheduling\n */\n get recurringEvent() {\n return this.recurringTimeSpan;\n }\n /**\n * Flag which indicates that this event is an interday event. This means that it spans\n * an entire day or multiple days.\n *\n * This is essentially used by the Calendar package to determine if an event should\n * go into the all day zone of a DayView.\n *\n * @property {Boolean}\n * @readonly\n * @category Scheduling\n */\n get isInterDay() {\n const { durationMS } = this;\n // A full day (86400000 or more) marks as it as interDay,\n // which means it belongs in the all day row of a Calendar DayView\n if (durationMS >= oneDayMS || (!durationMS && this.allDay)) {\n return true;\n }\n // Working out whether it crosses midnight is a little more difficult\n const\n {\n endDate,\n startDate\n } = this,\n eventStartMidnight = DH.clearTime(startDate);\n // If either is null or NaN, we have to answer falsy\n if (startDate && endDate) {\n eventStartMidnight.setDate(eventStartMidnight.getDate() + 1);\n // If the endDate is past midnight, it's interDay and goes in the all day row of a Calendar DayView\n return (endDate || DH.add(startDate, durationMS)) > eventStartMidnight;\n }\n }\n //region All day statics\n static getAllDayStartDate(dt) {\n if (dt && dt.isEvent) {\n dt = dt.get('startDate');\n }\n if (dt) {\n dt = DH.clearTime(dt, true);\n }\n return dt;\n }\n static getAllDayEndDate(dt) {\n if (dt && dt.isEvent) {\n dt = dt.get('endDate');\n }\n if (dt && (dt.getHours() > 0 || dt.getMinutes() > 0 || dt.getSeconds() > 0 || dt.getMilliseconds() > 0)) {\n dt = DH.getNext(dt, 'd', 1);\n }\n return dt;\n }\n static getAllDayDisplayStartDate(dt) {\n if (dt && dt.isEvent) {\n dt = dt.get('startDate');\n }\n return DH.clearTime(dt, true);\n }\n static getAllDayDisplayEndDate(startDate, endDate) {\n if (startDate && startDate.isEvent) {\n endDate = startDate.get('endDate');\n startDate = startDate.get('startDate');\n }\n if (endDate) {\n startDate = this.constructor.getAllDayDisplayStartDate(startDate);\n // If date falls on start of the day - subtract one day to show end date correctly\n // e.g. event starts on 2017-01-01 00:00 and ends on 2017-01-02 00:00, editor should show\n // 2017-01-01 for both start and end\n if (DH.clearTime(endDate, true).valueOf() === endDate.valueOf()) {\n endDate = DH.add(endDate, DH.DAY, -1);\n }\n else if (startDate.valueOf() !== endDate.valueOf()) {\n endDate = DH.clearTime(endDate, true);\n }\n }\n return endDate;\n }\n /**\n * Defines if the given event field should be manually editable in UI.\n * You can override this method to provide your own logic.\n *\n * By default, the method defines {@link #field-endDate}, {@link #field-duration} and {@link #field-fullDuration}\n * fields editable for leaf events only (in case the event is part of a tree store) and all other fields as\n * editable.\n *\n * @param {String} fieldName Name of the field\n * @returns {Boolean} Returns `true` if the field is editable, `false` if it is not and `undefined` if the event has\n * no such field.\n * @category Editing\n */\n isEditable(fieldName) {\n switch (fieldName) {\n // end/duration is allowed to edit for leafs\n case 'endDate' :\n case 'duration' :\n case 'fullDuration' :\n return this.isLeaf;\n }\n return super.isEditable(fieldName);\n }\n //endregion\n};\n", "import { Mixin } from \"../../../../ChronoGraph/class/BetterMixin.js\";\nimport { CorePartOfProjectModelMixin } from \"../mixin/CorePartOfProjectModelMixin.js\";\nimport DateHelper from \"../../../../Core/helper/DateHelper.js\";\n/**\n * Core event entity mixin type.\n *\n * At this level event is only aware about its dates\n * The functionality, related to the assignments etc is provided in other mixins.\n */\nexport class CoreEventMixin extends Mixin([CorePartOfProjectModelMixin], (base) => {\n const superProto = base.prototype;\n class CoreEventMixin extends base {\n constructor() {\n super(...arguments);\n this._startDate = null;\n this._endDate = null;\n this._duration = null;\n }\n // Proper engine defines these fields since they enter graph, thus we need them\n static get fields() {\n return [\n { name: 'startDate', type: 'date' },\n { name: 'endDate', type: 'date' },\n { name: 'duration', type: 'number' },\n { name: 'durationUnit', type: 'durationunit', defaultValue: 'day' }\n ];\n }\n // Getters return current or proposed value\n get startDate() { return this._startDate ?? this.get('startDate') ?? null; }\n get endDate() { return this._endDate ?? this.get('endDate') ?? null; }\n get duration() { return this._duration ?? this.get('duration') ?? null; }\n // Route all setting through applyXX (setStartDate, startDate = , set('startDate'), batching)\n set startDate(value) { this.proposeStartDate(value); }\n set endDate(value) { this.proposeEndDate(value); }\n set duration(value) { this.proposeDuration(value); }\n //region Edge case normalization\n inSet(field, value, silent, fromRelationUpdate, skipAccessors) {\n const me = this;\n // Catch \"normal\" set calls\n if (me.project && !me.project.isWritingData && typeof field !== 'string' && !skipAccessors) {\n // Flag fields as changed even if we are given a no-change value, to let calculations take decision on\n // whether to keep duration or not\n if ('startDate' in field && !('startDate' in me.$changed)) {\n me.$changed.startDate = true;\n me.invalidate();\n }\n if ('endDate' in field && !('endDate' in me.$changed)) {\n me.$changed.endDate = true;\n me.invalidate();\n }\n }\n // @ts-ignore\n return superProto.inSet.call(me, field, value, silent, fromRelationUpdate, skipAccessors);\n }\n //endregion\n //region StartDate\n getStartDate() {\n return this.startDate;\n }\n proposeStartDate(startDate, keepDuration = !('endDate' in this.$changed)) {\n if (this.inSetting || startDate?.getTime() !== this.startDate?.getTime()) {\n this._startDate = startDate;\n this.propose({ startDate, keepDuration });\n }\n }\n async setStartDate(startDate, keepDuration = true) {\n this.proposeStartDate(startDate, keepDuration);\n return this.project?.commitAsync();\n }\n //endregion\n //region EndDate\n getEndDate() {\n return this.endDate;\n }\n proposeEndDate(endDate, keepDuration = false) {\n if (this.inSetting || endDate?.getTime() !== this.endDate?.getTime()) {\n this._endDate = endDate;\n this.propose({ endDate, keepDuration });\n }\n }\n async setEndDate(endDate, keepDuration = false) {\n this.proposeEndDate(endDate, keepDuration);\n return this.project?.commitAsync();\n }\n //endregion\n //region Duration\n getDuration() {\n return this.duration;\n }\n proposeDuration(duration, unit, keepStart = true) {\n this._duration = duration;\n this.propose({ duration, keepStart });\n if (unit)\n this.propose({ durationUnit: unit });\n }\n async setDuration(duration, unit, keepStart = true) {\n this.proposeDuration(duration, unit, keepStart);\n return this.project?.commitAsync();\n }\n getDurationUnit() {\n return this.durationUnit;\n }\n //endregion\n // When joining as part of inline data, store is available. If joining through load, it is passed\n joinProject() {\n const me = this;\n const changed = me.$changed;\n const startDate = me.getCurrentOrProposed('startDate');\n const endDate = me.getCurrentOrProposed('endDate');\n const duration = me.getCurrentOrProposed('duration');\n // Initial values should be considered changed, to be normalized\n if (startDate != null)\n changed.startDate = me._startDate = startDate;\n if (endDate != null)\n changed.endDate = me._endDate = endDate;\n if (duration != null)\n changed.duration = me._duration = duration;\n // Resolve assignments when event joins project after load\n if (me.eventStore && !me.eventStore.isLoadingData) {\n const unresolved = me.assignmentStore?.storage.findItem('event', null);\n if (unresolved) {\n // To avoid n\u00B2 iterations over raw assignments we cache them by raw eventId, which saves us\n // some iterations over the storage\n // https://github.com/bryntum/support/issues/3141\n const cachedAssignments = me.assignmentStore?.storage.findItem('eventId', me.id);\n if (cachedAssignments) {\n for (const assignment of cachedAssignments) {\n assignment.setChanged('event', me);\n }\n }\n else {\n for (const assignment of unresolved) {\n if (assignment.getCurrentOrProposed('event') === me.id) {\n assignment.setChanged('event', me);\n }\n }\n }\n }\n }\n superProto.joinProject.call(me);\n }\n // Mimic how proper engine applies values\n applyValue(useProp, key, value, skipAccessors, field) {\n // @ts-ignore\n if ((this.project || this.recurringTimeSpan?.project) && field) {\n const { name } = field;\n if (name === 'startDate' || name == 'duration' || name === 'endDate') {\n useProp = true;\n // Update cached value\n this['_' + name] = value;\n }\n if (skipAccessors) {\n useProp = false;\n }\n }\n superProto.applyValue.call(this, useProp, key, value, skipAccessors, field);\n }\n // Catch changes from batches etc. In which case it is sometimes expected for data to be available directly\n afterChange(toSet, wasSet, silent, fromRelationUpdate, skipAccessors) {\n if (!this.$isCalculating && !skipAccessors) {\n // In certain scenarios data is expected to be available of the bat, messy!\n this.setData({\n startDate: this.getCurrentOrProposed('startDate'),\n endDate: this.getCurrentOrProposed('endDate'),\n duration: this.getCurrentOrProposed('duration'),\n durationUnit: this.getCurrentOrProposed('durationUnit')\n });\n }\n superProto.afterChange.call(this, toSet, wasSet, silent, fromRelationUpdate, skipAccessors);\n }\n // Normalizes dates & duration\n calculateInvalidated() {\n const me = this;\n const changed = me.$changed;\n const changedStart = 'startDate' in changed;\n const changedEnd = 'endDate' in changed;\n const changedDuration = 'duration' in changed;\n const { startDate, endDate, duration, keepDuration, keepStart } = changed;\n let calculate = null;\n // Only start changed\n if (changedStart && !changedEnd && !changedDuration) {\n // Also null end when nulling start (keeping duration)\n if (startDate === null) {\n changed.endDate = null;\n }\n // Start after end without keeping duration -> move end to start\n else if (me.hasCurrentOrProposed('endDate') && startDate > me.getCurrentOrProposed('endDate') && !keepDuration) {\n changed.endDate = startDate;\n changed.duration = 0;\n }\n // Start changed and we either have a duration that we want to keep or no end -> calculate end\n else if (me.hasCurrentOrProposed('duration') && (keepDuration || !me.hasCurrentOrProposed('endDate'))) {\n calculate = 'endDate';\n }\n // Start change and we have an end already -> calculate duration\n else if (me.hasCurrentOrProposed('endDate')) {\n calculate = 'duration';\n }\n }\n // Only end changed\n else if (!changedStart && changedEnd && !changedDuration) {\n // Also null start when nulling end (keeping duration)\n if (endDate === null) {\n changed.startDate = null;\n }\n // End before start without keeping duration -> move start to end\n else if (me.hasCurrentOrProposed('startDate') && !keepDuration && endDate !== true && endDate < me.getCurrentOrProposed('startDate')) {\n changed.startDate = endDate;\n changed.duration = 0;\n }\n // End changed and we either have a duration that we want to keep or no start -> calculate start\n else if (me.hasCurrentOrProposed('duration') && (keepDuration || !me.hasCurrentOrProposed('startDate'))) {\n calculate = 'startDate';\n }\n // End changed and we have a start already -> calculate duration\n else if (me.hasCurrentOrProposed('startDate')) {\n calculate = 'duration';\n }\n }\n // Only duration changed\n else if (!changedStart && !changedEnd && changedDuration) {\n // Also null end when nulling duration (keeping start)\n if (duration === null) {\n changed.endDate = null;\n }\n // Duration changed and we either have a start that we want to keep or no end -> calculate end\n else if (me.hasCurrentOrProposed('startDate') && (keepStart || !me.hasCurrentOrProposed('endDate'))) {\n if (keepStart && changed.duration < 0) {\n changed.duration = 0;\n }\n calculate = 'endDate';\n }\n // Duration changed and we have an end already -> calculate start\n else if (me.hasCurrentOrProposed('endDate')) {\n calculate = 'startDate';\n }\n }\n // Start and end change, affect duration\n else if (changedStart && changedEnd && !changedDuration) {\n // Both nulled, null duration\n if (startDate === null && endDate === null) {\n changed.duration = null;\n }\n // Other cases -> calculate duration\n else {\n calculate = 'duration';\n }\n }\n // Start and duration change -> calculate end\n else if (changedStart && !changedEnd && changedDuration) {\n calculate = 'endDate';\n }\n // End and duration changed -> calculate start\n else if (!changedStart && changedEnd && changedDuration) {\n calculate = 'startDate';\n }\n // All changed -> calculate whichever is null or by default end to be sure things add up\n else if (changedStart && changedEnd && changedDuration) {\n if (duration == null) {\n calculate = 'duration';\n }\n else if (startDate == null) {\n calculate = 'startDate';\n }\n else {\n calculate = 'endDate';\n }\n }\n // Normalize if needed\n const currentOrProposedStartDate = me.getCurrentOrProposed('startDate');\n const currentOrProposedEndDate = me.getCurrentOrProposed('endDate');\n const currentOrProposedDuration = me.getCurrentOrProposed('duration');\n const currentOrProposedDurationUnit = me.getCurrentOrProposed('durationUnit');\n const adjustDurationToDST = me.getProject()?.adjustDurationToDST ?? false;\n switch (calculate) {\n case 'startDate':\n const newStartDate = DateHelper.add(currentOrProposedEndDate, -currentOrProposedDuration, currentOrProposedDurationUnit);\n if (adjustDurationToDST) {\n const dstDiff = currentOrProposedEndDate.getTimezoneOffset() - newStartDate.getTimezoneOffset();\n newStartDate.setTime(newStartDate.getTime() - dstDiff * 60 * 1000);\n }\n changed.startDate = newStartDate;\n break;\n case 'endDate':\n const newEndDate = DateHelper.add(currentOrProposedStartDate, currentOrProposedDuration, currentOrProposedDurationUnit);\n if (adjustDurationToDST) {\n const dstDiff = currentOrProposedStartDate.getTimezoneOffset() - newEndDate.getTimezoneOffset();\n newEndDate.setTime(newEndDate.getTime() - dstDiff * 60 * 1000);\n }\n changed.endDate = newEndDate;\n break;\n case 'duration':\n let newDuration = DateHelper.diff(currentOrProposedStartDate, currentOrProposedEndDate, 'millisecond');\n if (adjustDurationToDST) {\n const dstDiff = currentOrProposedStartDate.getTimezoneOffset() - currentOrProposedEndDate.getTimezoneOffset();\n newDuration += dstDiff * 60 * 1000;\n }\n changed.duration = DateHelper.as(currentOrProposedDurationUnit, newDuration, 'millisecond');\n break;\n }\n if ('startDate' in changed && changed.startDate !== true)\n this._startDate = changed.startDate;\n if ('endDate' in changed && changed.endDate !== true)\n this._endDate = changed.endDate;\n if ('duration' in changed && changed.duration !== true)\n this._duration = changed.duration;\n // Clean up flags, not intended to be actually set\n if (changed.startDate === true)\n delete changed.startDate;\n if (changed.endDate === true)\n delete changed.endDate;\n delete changed.keepDuration;\n delete changed.keepStart;\n }\n }\n return CoreEventMixin;\n}) {\n}\n", "import { Mixin } from \"../../../ChronoGraph/class/Mixin.js\";\nimport { AbstractPartOfProjectModelMixin } from './mixin/AbstractPartOfProjectModelMixin.js';\n/**\n * This is a mixin enabling events to handle assignments. It is mixed by CoreHasAssignmentsMixin and\n * BaseHasAssignmentsMixin. It provides a collection of all assignments, which reference this event.\n *\n * Doesn't affect scheduling.\n */\nexport class AbstractHasAssignmentsMixin extends Mixin([AbstractPartOfProjectModelMixin], (base) => {\n const superProto = base.prototype;\n class HasAssignmentsMixin extends base {\n /**\n * If a given resource is assigned to this task, returns a [[BaseAssignmentMixin]] instance for it.\n * Otherwise returns `null`\n */\n getAssignmentFor(resource) {\n // Bucket `assigned` might not be set up yet when using delayed calculations\n for (const assignment of this.assigned ?? []) {\n if (assignment.resource === resource)\n return assignment;\n }\n return null;\n }\n isAssignedTo(resource) {\n return Boolean(this.getAssignmentFor(resource));\n }\n /**\n * A method which assigns a resource to the current event\n */\n async assign(resource) {\n const assignmentCls = this.project.assignmentStore.modelClass;\n this.addAssignment(new assignmentCls({\n event: this,\n resource: resource\n }));\n return this.commitAsync();\n }\n /**\n * A method which unassigns a resource from the current event\n */\n async unassign(resource) {\n const assignment = this.getAssignmentFor(resource);\n this.removeAssignment(assignment);\n return this.commitAsync();\n }\n leaveProject() {\n // `this.assigned` will be empty if model is added to project and then removed immediately\n // w/o any propagations\n // @ts-ignore\n if (this.isInActiveTransaction && this.assigned) {\n const eventStore = this.getEventStore();\n // to batch the assignments removal, we don't remove the assignments right away, but instead\n // add them for the batched removal to the `assignmentsForRemoval` property of the event store\n this.assigned.forEach(assignment => eventStore.assignmentsForRemoval.add(assignment));\n }\n superProto.leaveProject.call(this, ...arguments);\n }\n remove() {\n if (this.parent) {\n // need to get the event store in advance, because after removal the project reference will be cleared (all that is what provide\n // references to all stores\n const eventStore = this.getEventStore();\n superProto.remove.call(this);\n eventStore && eventStore.afterEventRemoval();\n }\n else {\n return superProto.remove.call(this);\n }\n }\n // template methods, overridden in scheduling modes mixins\n // should probably be named something like \"onEventAssignmentAdded\"\n // should be a listener for the `add` event of the assignment store instead\n addAssignment(assignment) {\n this.getProject().assignmentStore.add(assignment);\n return assignment;\n }\n // should be a listener for the `remove` event of the assignment store instead\n removeAssignment(assignment) {\n this.getProject().assignmentStore.remove(assignment);\n return assignment;\n }\n }\n return HasAssignmentsMixin;\n}) {\n}\n", "import { Mixin } from \"../../../../ChronoGraph/class/BetterMixin.js\";\nimport { CoreEventMixin } from \"./CoreEventMixin.js\";\nimport ObjectHelper from \"../../../../Core/helper/ObjectHelper.js\";\nimport { AbstractHasAssignmentsMixin } from '../AbstractHasAssignmentsMixin.js';\n/**\n * This is a mixin, which can be applied to the [[CoreEventMixin]]. It provides the collection of all assignments,\n * which reference this event.\n *\n * Doesn't affect scheduling.\n */\nexport class CoreHasAssignmentsMixin extends Mixin([CoreEventMixin, AbstractHasAssignmentsMixin], (base) => {\n const superProto = base.prototype;\n class CoreHasAssignmentsMixin extends base {\n get assigned() {\n return this.project?.assignmentStore.getEventsAssignments(this) ?? this.$cachedAssignments;\n }\n leaveProject(isReplacing = false) {\n // Expected to still be able to return assignments when removed from project\n this.$cachedAssignments = this.assigned;\n super.leaveProject(isReplacing);\n }\n applyValue(useProp, key, value, skipAccessor, field) {\n // Changing id on an event should update resourceId on its assignments\n if (key === 'id') {\n this.assigned?.forEach(assignment => assignment.set('eventId', value));\n }\n superProto.applyValue.call(this, useProp, key, value, skipAccessor, field);\n }\n copy(newId = null, deep = null) {\n const copy = superProto.copy.call(this, newId, deep);\n // If deep is everything but object - use default behavior, which is to invoke accessors\n // If deep is an object, check if it has certain field disabled\n if ((ObjectHelper.isObject(deep) && !deep.skipFieldIdentifiers) || !ObjectHelper.isObject(deep)) {\n // Copy current assignments, used for occurrences\n copy.$cachedAssignments = this.assigned;\n }\n return copy;\n }\n }\n return CoreHasAssignmentsMixin;\n}) {\n}\n", "import { Mixin } from \"../../../../ChronoGraph/class/BetterMixin.js\";\nimport { CoreEventMixin } from \"./CoreEventMixin.js\";\n/**\n * This is a mixin, which can be applied to the [[CoreEventMixin]]. It provides the collection of all dependencies,\n * which reference this event.\n *\n * Doesn't affect scheduling.\n */\nexport class CoreHasDependenciesMixin extends Mixin([CoreEventMixin], (base) => {\n const superProto = base.prototype;\n class CoreHasDependenciesMixin extends base {\n get outgoingDeps() {\n return this.project.dependencyStore.getOutgoingDepsForEvent(this);\n }\n get incomingDeps() {\n return this.project.dependencyStore.getIncomingDepsForEvent(this);\n }\n leaveProject() {\n const eventStore = this.eventStore;\n // the buckets may be empty if a model is removed from the project immediately after adding\n // (without propagation)\n if (this.outgoingDeps) {\n this.outgoingDeps.forEach(dependency => eventStore.dependenciesForRemoval.add(dependency));\n }\n if (this.incomingDeps) {\n this.incomingDeps.forEach(dependency => eventStore.dependenciesForRemoval.add(dependency));\n }\n superProto.leaveProject.call(this);\n }\n }\n return CoreHasDependenciesMixin;\n}) {\n}\n", "import { Mixin } from '../../../../ChronoGraph/class/BetterMixin.js';\nimport { CoreEventMixin } from './CoreEventMixin.js';\nimport { CoreHasAssignmentsMixin } from \"./CoreHasAssignmentsMixin.js\";\nimport { CoreHasDependenciesMixin } from './CoreHasDependenciesMixin.js';\n/**\n * This is an event class, [[SchedulerCoreProjectMixin]] is working with.\n * It is constructed as [[CoreEventMixin]], enhanced with [[CoreHasAssignmentsMixin]] and [[CoreHasDependenciesMixin]]\n */\nexport class SchedulerCoreEvent extends Mixin([\n CoreEventMixin,\n CoreHasAssignmentsMixin,\n CoreHasDependenciesMixin\n], (base) => {\n const superProto = base.prototype;\n class SchedulerCoreEvent extends base {\n }\n return SchedulerCoreEvent;\n}) {\n}\n", "import TimeSpan from './TimeSpan.js';\nimport RecurringTimeSpan from './mixin/RecurringTimeSpan.js';\nimport EventModelMixin from './mixin/EventModelMixin.js';\nimport PartOfProject from '../data/mixin/PartOfProject.js';\nimport { SchedulerCoreEvent } from '../../Engine/quark/model/scheduler_core/SchedulerCoreEvent.js';\nconst EngineMixin = SchedulerCoreEvent;\n/**\n * @module Scheduler/model/EventModel\n */\n/**\n * This class represent a single event in your schedule, usually added to a {@link Scheduler.data.EventStore}.\n *\n * It is a subclass of the {@link Scheduler.model.TimeSpan}, which is in turn subclass of {@link Core.data.Model}.\n * Please refer to documentation of that class to become familiar with the base interface of the event.\n *\n * ## Async date calculations\n *\n * A record created from an {@link Scheduler/model/EventModel} is normally part of an {@link Scheduler.data.EventStore},\n * which in turn is part of a project. When dates or the duration of an event is changed, the project performs async calculations\n * to normalize the other fields.\n * For example if {@link #field-duration} is changed, it will calculate {@link #field-endDate}.\n *\n * As a result of this being an async operation, the values of other fields are not guaranteed to be up to date\n * immediately after a change. To ensure data is up to date, await the calculations to finish.\n *\n * For example, {@link #field-endDate} is not up to date after this operation:\n *\n * ```javascript\n * eventRecord.duration = 5;\n * // endDate not yet calculated\n * ```\n *\n * But if calculations are awaited it is up to date:\n *\n * ```javascript\n * eventRecord.duration = 5;\n * await eventRecord.project.commitAsync();\n * // endDate is calculated\n * ```\n *\n * As an alternative, you can also use `setAsync()` to trigger calculations directly after the change:\n *\n * ```javascript\n * await eventRecord.setAsync({ duration : 5});\n * // endDate is calculated\n * ```\n *\n * ## Subclassing the Event model class\n * The Event model has a few predefined fields as seen below. If you want to add new fields or change the options for the existing fields,\n * you can do that by subclassing this class (see example below).\n *\n * ```javascript\n * class MyEvent extends EventModel {\n *\n * static get fields() {\n * return [\n * // Add new field\n * { name: 'myField', type : 'number', defaultValue : 0 }\n * ];\n * },\n *\n * myCheckMethod() {\n * return this.myField > 0\n * },\n *\n * ...\n * });\n * ```\n *\n * If you in your data want to use other names for the {@link #field-startDate}, {@link #field-endDate}, {@link #field-resourceId} and name fields you can configure\n * them as seen below:\n *\n * ```javascript\n * class MyEvent extends EventModel {\n *\n * static get fields() {\n * return [\n * { name: 'startDate', dataSource : 'taskStart' },\n * { name: 'endDate', dataSource : 'taskEnd', format: 'YYYY-MM-DD' },\n * { name: 'resourceId', dataSource : 'userId' },\n * { name: 'name', dataSource : 'taskTitle' },\n * ];\n * },\n * ...\n * });\n * ```\n *\n * Please refer to {@link Core.data.Model} for additional details.\n *\n * @extends Scheduler/model/TimeSpan\n * @mixes Scheduler/model/mixin/RecurringTimeSpan\n * @mixes Scheduler/model/mixin/EventModelMixin\n */\nexport default class EventModel extends EngineMixin.derive(TimeSpan).mixin(\n RecurringTimeSpan,\n PartOfProject,\n EventModelMixin\n) {\n static get $name() {\n return 'EventModel';\n }\n}\nEventModel.exposeProperties();\nEventModel._$name = 'EventModel';", "import { Mixin } from \"../../../ChronoGraph/class/Mixin.js\";\nimport { AbstractPartOfProjectStoreMixin } from \"./mixin/AbstractPartOfProjectStoreMixin.js\";\nconst dataAddRemoveActions = {\n splice: 1,\n clear: 1\n};\n// Shared functionality for CoreEventStore & ChronoEventStore\nexport class AbstractEventStoreMixin extends Mixin([AbstractPartOfProjectStoreMixin], (base) => {\n const superProto = base.prototype;\n class AbstractEventStoreMixin extends base {\n constructor() {\n super(...arguments);\n this.assignmentsForRemoval = new Set();\n this.dependenciesForRemoval = new Set();\n }\n // we need `onDataChange` for `syncDataOnLoad` option to work\n onDataChange(event) {\n // remove from a filter action must be ignored.\n const isAddRemove = dataAddRemoveActions[event.action];\n super.onDataChange(event);\n if (isAddRemove && event.removed?.length)\n this.afterEventRemoval();\n }\n // it seems `onDataChange` is not triggered for `remove` with `silent` flag\n remove(records, silent) {\n const res = superProto.remove.call(this, records, silent);\n this.afterEventRemoval();\n return res;\n }\n // it seems `onDataChange` is not triggered for `TreeStore#removeAll()`\n removeAll(silent) {\n const res = superProto.removeAll.call(this, silent);\n this.afterEventRemoval();\n return res;\n }\n onNodeRemoveChild(parent, children, index, flags) {\n // @ts-ignore\n const removed = superProto.onNodeRemoveChild.call(this, ...arguments);\n this.afterEventRemoval();\n return removed;\n }\n afterEventRemoval() {\n const { assignmentsForRemoval, dependenciesForRemoval } = this;\n // Can be called from `set data` during construction\n if (!assignmentsForRemoval)\n return;\n // ORDER IS IMPORTANT!\n // First remove assignments\n const assignmentStore = this.getAssignmentStore();\n if (assignmentStore && !assignmentStore.allAssignmentsForRemoval && assignmentsForRemoval.size) {\n const toRemove = [...assignmentsForRemoval].filter(assignment => !assignmentStore.assignmentsForRemoval.has(assignment));\n toRemove.length > 0 && assignmentStore.remove(toRemove);\n }\n assignmentsForRemoval.clear();\n // Then remove dependencies\n const dependencyStore = this.getDependencyStore();\n if (dependencyStore && !dependencyStore.allDependenciesForRemoval && dependenciesForRemoval.size) {\n const toRemove = [...dependenciesForRemoval].filter(dependency => !dependencyStore.dependenciesForRemoval.has(dependency));\n toRemove.length > 0 && dependencyStore.remove(toRemove);\n }\n dependenciesForRemoval.clear();\n }\n processRecord(eventRecord, isDataset = false) {\n if (!this.project?.isRepopulatingStores) {\n const existingRecord = this.getById(eventRecord.id);\n const isReplacing = existingRecord && existingRecord !== eventRecord;\n //@ts-ignore\n if (isReplacing && existingRecord.assigned) {\n //@ts-ignore\n for (const assignment of existingRecord.assigned) {\n assignment.event = eventRecord;\n }\n }\n }\n return eventRecord;\n }\n }\n return AbstractEventStoreMixin;\n}) {\n}\n", "import { Mixin } from \"../../../ChronoGraph/class/BetterMixin.js\";\nimport { SchedulerCoreEvent } from \"../model/scheduler_core/SchedulerCoreEvent.js\";\nimport { CorePartOfProjectStoreMixin } from \"./mixin/CorePartOfProjectStoreMixin.js\";\nimport { AbstractEventStoreMixin } from \"./AbstractEventStoreMixin.js\";\n/**\n * A store mixin class, that represent collection of all events in the [[SchedulerCoreProjectMixin|project]].\n */\nexport class CoreEventStoreMixin extends Mixin([AbstractEventStoreMixin, CorePartOfProjectStoreMixin], (base) => {\n const superProto = base.prototype;\n class CoreEventStoreMixin extends base {\n static get defaultConfig() {\n return {\n modelClass: SchedulerCoreEvent\n };\n }\n joinProject() {\n this.assignmentStore?.linkAssignments(this, 'event');\n }\n afterLoadData() {\n this.afterEventRemoval();\n this.assignmentStore?.linkAssignments(this, 'event');\n }\n }\n return CoreEventStoreMixin;\n}) {\n}\n// /**\n// * The tree store version of [[EventStoreMixin]].\n// */\n// export class EventTreeStoreMixin extends Mixin(\n// [ EventStoreMixin ],\n// (base : AnyConstructor) => {\n//\n// const superProto : InstanceType = base.prototype\n//\n//\n// class EventTreeStoreMixin extends base {\n// rootNode : SchedulerBasicProjectMixin\n//\n// buildRootNode () : object {\n// return this.getProject() || {}\n// }\n//\n//\n// static get defaultConfig () : object {\n// return {\n// tree : true\n// }\n// }\n// }\n//\n// return EventTreeStoreMixin\n// }){}\n//\n", "import AjaxStore from '../../Core/data/AjaxStore.js';\nimport EventStoreMixin from './mixin/EventStoreMixin.js';\nimport GetEventsMixin from './mixin/GetEventsMixin.js';\nimport DayIndexMixin from './mixin/DayIndexMixin.js';\nimport RecurringEventsMixin from './mixin/RecurringEventsMixin.js';\nimport EventModel from '../model/EventModel.js';\nimport PartOfProject from './mixin/PartOfProject.js';\nimport { CoreEventStoreMixin } from '../../Engine/quark/store/CoreEventStoreMixin.js';\nimport PartOfBaseProject from './mixin/PartOfBaseProject.js';\nconst EngineMixin = PartOfProject(CoreEventStoreMixin.derive(AjaxStore));\n/**\n * @module Scheduler/data/EventStore\n */\n/**\n * A store holding all the {@link Scheduler.model.EventModel events} to be rendered into a {@link Scheduler.view.Scheduler Scheduler}.\n *\n * This store only accepts a model class inheriting from {@link Scheduler.model.EventModel}.\n *\n * An EventStore is usually connected to a project, which binds it to other related stores (AssignmentStore,\n * ResourceStore and DependencyStore). The project also handles normalization/calculation of the data on the records in\n * the store. For example if a record is added with a `startDate` and an `endDate`, it will calculate the `duration`.\n *\n * The calculations happens async, records are not guaranteed to have up to date data until they are finished. To be\n * certain that calculations have finished, call `await project.commitAsync()` after store actions. Or use one of the\n * `xxAsync` functions, such as `loadDataAsync()`.\n *\n * Using `commitAsync()`:\n *\n * ```javascript\n * eventStore.data = [{ startDate, endDate }, ...];\n *\n * // duration of the record is not yet calculated\n *\n * await eventStore.project.commitAsync();\n *\n * // now it is\n * ```\n *\n * Using `loadDataAsync()`:\n *\n * ```javascript\n * await eventStore.loadDataAsync([{ startDate, endDate }, ...]);\n *\n * // duration is calculated\n * ```\n *\n * ## Using recurring events\n * When recurring events are in the database, **all recurring event definitions** which started before\n * the requested start date, and have not yet finished recurring MUST be loaded into the EventStore.\n *\n * Only the **base** recurring event **definitions** are stored in the EventStore. You do not\n * need to calculate the future occurrence dates of these events. This is all handled by the EventStore.\n *\n * When asked to yield a set of events for a certain date range for creating a UI through\n * {@link #function-getEvents}, the EventStore *automatically* interpolates any occurrences of\n * recurring events into the results. They do not occupy slots in the EventStore for every date\n * in their repetition range (that would be very inefficient, and *might* be infinite).\n *\n * @mixes Scheduler/data/mixin/PartOfProject\n * @mixes Scheduler/data/mixin/EventStoreMixin\n * @mixes Scheduler/data/mixin/RecurringEventsMixin\n * @mixes Scheduler/data/mixin/GetEventsMixin\n * @extends Core/data/AjaxStore\n */\nexport default class EventStore extends EngineMixin.mixin(\n RecurringEventsMixin,\n EventStoreMixin,\n DayIndexMixin,\n GetEventsMixin\n) {\n static $name = 'EventStore';\n static get defaultConfig() {\n return {\n /**\n * Class used to represent records\n * @config {Scheduler.model.EventModel}\n * @typings {typeof EventModel}\n * @default\n * @category Common\n */\n modelClass : EventModel\n };\n }\n}\nEventStore._$name = 'EventStore';", "import ObjectHelper from '../../../Core/helper/ObjectHelper.js';\n/**\n * @module Scheduler/model/mixin/AssignmentModelMixin\n */\nconst\n getPath = ObjectHelper.getPath,\n setFieldValue = (data, field, complexMapping, value) => {\n if (complexMapping) {\n ObjectHelper.setPath(data, field, value);\n }\n else {\n data[field] = value;\n }\n },\n setModelField = (data, field, complexMapping, model) => {\n if (model?.isModel && !getPath(data, field)?.model) {\n setFieldValue(data, field, complexMapping, model);\n }\n };\n/**\n * Mixin that holds configuration shared between assignments in Scheduler and Scheduler Pro.\n * @mixin\n */\nexport default Target => class AssignmentModelMixin extends Target {\n static get $name() {\n return 'AssignmentModelMixin';\n }\n /**\n * Set value for the specified field(s), triggering engine calculations immediately. See\n * {@link Core.data.Model#function-set Model#set()} for arguments.\n *\n * ```javascript\n * assignment.set('resourceId', 2);\n * // assignment.resource is not yet resolved\n *\n * await assignment.setAsync('resourceId', 2);\n * // assignment.resource is resolved\n * ```\n *\n * @param {String|Object} field The field to set value for, or an object with multiple values to set in one call\n * @param {*} [value] Value to set\n * @param {Boolean} [silent=false] Set to true to not trigger events\n * automatically.\n * @function setAsync\n * @category Editing\n * @async\n */\n //region Fields\n static get fields() {\n return [\n /**\n * Id for the resource to assign to\n * @field {String|Number} resourceId\n * @category Common\n */\n 'resourceId',\n /**\n * Id for the event to assign\n * @field {String|Number} eventId\n * @category Common\n */\n 'eventId',\n /**\n * Specify `false` to opt out of drawing dependencies from/to this assignment\n * @field {Boolean} drawDependencies\n * @category Common\n */\n { name : 'drawDependencies', type : 'boolean' },\n 'event',\n 'resource'\n ];\n }\n //endregion\n construct(data, ...args) {\n data = data || {};\n const\n { fieldMap } = this,\n eventIdField = fieldMap.eventId.dataSource,\n resourceIdField = fieldMap.resourceId.dataSource,\n eventField = fieldMap.event.dataSource,\n resourceField = fieldMap.resource.dataSource,\n eventIdComplexMapping = fieldMap.eventId.complexMapping,\n resourceIdComplexMapping = fieldMap.resourceId.complexMapping,\n eventComplexMapping = fieldMap.event.complexMapping,\n resourceComplexMapping = fieldMap.resource.complexMapping,\n eventId = eventIdComplexMapping ? getPath(data, eventIdField) : data[eventIdField],\n resourceId = resourceIdComplexMapping ? getPath(data, resourceIdField) : data[resourceIdField],\n event = data.event?.isModel ? data.event : eventComplexMapping ? getPath(data, eventField) : data[eventField],\n resource = data.resource?.isModel ? data.resource : resourceComplexMapping ? getPath(data, resourceField) : data[resourceField];\n // Engine expects event and resource, not eventId and resourceId. We need to support both\n if (eventId != null) {\n setFieldValue(data, eventField, eventComplexMapping, eventId);\n }\n else if (event != null) {\n const value = event.isModel ? event.id : event;\n setFieldValue(data, eventIdField, eventIdComplexMapping, value);\n }\n if (resourceId != null) {\n setFieldValue(data, resourceField, resourceComplexMapping, resourceId);\n }\n else if (resource != null) {\n const value = resource.isModel ? resource.id : resource;\n setFieldValue(data, resourceIdField, resourceIdComplexMapping, value);\n }\n setModelField(data, eventField, eventComplexMapping, data.event);\n setModelField(data, resourceField, resourceComplexMapping, data.resource);\n super.construct(data, ...args);\n }\n //region Event & resource\n /**\n * A key made up from the event id and the id of the resource assigned to.\n * @property eventResourceKey\n * @readonly\n * @internal\n */\n get eventResourceKey() {\n return this.buildEventResourceKey(this.event, this.resource);\n }\n buildEventResourceKey(event, resource) {\n let eventKey, resourceKey;\n if (event) {\n eventKey = event.isModel ? event.id : event;\n }\n else {\n eventKey = this.internalId;\n }\n if (resource) {\n resourceKey = resource.isModel ? resource.id : resource;\n }\n else {\n resourceKey = this.internalId;\n }\n return `${eventKey}-${resourceKey}`;\n }\n buildIndexKey({ event, resource }) {\n return this.buildEventResourceKey(event, resource);\n }\n set(field, value, ...args) {\n const toSet = this.fieldToKeys(field, value);\n // If resource was set, store its id as resourceId and announce it\n if ('resource' in toSet) {\n if (toSet.resource?.id !== undefined) {\n toSet.resourceId = toSet.resource.id;\n }\n }\n // If resourceId was set, we need to replace resource to have it re-referenced in engine\n else if ('resourceId' in toSet && this.constructor.isProAssignmentModel) {\n toSet.resource = toSet.resourceId;\n }\n // Same for event\n if ('event' in toSet) {\n if (toSet.event?.id !== undefined) {\n toSet.eventId = toSet.event.id;\n }\n }\n else if ('eventId' in toSet && this.constructor.isProAssignmentModel) {\n toSet.event = toSet.eventId;\n }\n return super.set(toSet, null, ...args);\n }\n afterChange(toSet, wasSet, silent, fromRelationUpdate, skipAccessors) {\n const me = this;\n // Make sure Core Engine implementation notices \"resourceId\" change\n // and updates \"resource\" field value respectively\n if (!me.constructor.isProAssignmentModel && wasSet?.resourceId &&\n me.resource?.id !== wasSet.resourceId.value) {\n me.resource = wasSet.resourceId.value;\n }\n // If that's non-Core Engine and we have \"eventId\" indicated as just set\n // and there was also \"event\" passed to set but it was not set\n // and if that happens when propagating after sync-response applied\n // - this means an event has changed its identifier\n // (this fixes 11_backend.t.js in the Gantt)\n else if (me.constructor.isProAssignmentModel && me.project?.propagatingSyncChanges &&\n wasSet?.eventId && !wasSet?.event &&\n (toSet.event.value === wasSet.eventId.value || toSet.event.value.id === wasSet.eventId.value)\n ) {\n // sanitize both wasSet and meta.modified\n delete wasSet.eventId;\n delete me.meta.modified.eventId;\n }\n return super.afterChange(...arguments);\n }\n // Settings resourceId relays to `resource`. Underlying data will be updated in `afterChange()` above\n set resourceId(value) {\n const { resource } = this;\n // When assigning a new id to a resource, it will update the resourceId of the assignment. But the assignments\n // resource is still the same so we need to announce here\n if (resource?.isModel && resource.id === value) {\n this.set('resourceId', value);\n }\n else {\n this.resource = value;\n }\n }\n get resourceId() {\n // If assigned using `resource` and not `resourceId` there will be no resourceId\n return this.resource?.id ?? this.get('resourceId');\n }\n // Same for event as for resourceId\n set eventId(value) {\n const { event } = this;\n // When assigning a new id to an event, it will update the eventId of the assignment. But the assignments\n // event is still the same so we need to announce here\n if (event?.isModel && event.id === value) {\n this.set('eventId', value);\n }\n else {\n this.event = value;\n }\n }\n get eventId() {\n // If assigned using `event` and not `eventId` there will be no eventId\n return this.event?.id ?? this.get('eventId');\n }\n /**\n * Convenience property to get the name of the associated event.\n * @property {String}\n * @readonly\n */\n get eventName() {\n return this.event?.name;\n }\n /**\n * Convenience property to get the name of the associated resource.\n * @property {String}\n * @readonly\n */\n get resourceName() {\n return this.resource?.name;\n }\n /**\n * Returns the resource associated with this assignment.\n *\n * @returns {Scheduler.model.ResourceModel} Instance of resource\n */\n getResource() {\n return this.resource;\n }\n //endregion\n // Convenience getter to not have to check `instanceof AssignmentModel`\n get isAssignment() {\n return true;\n }\n /**\n * Returns true if the Assignment can be persisted (e.g. task and resource are not 'phantoms')\n *\n * @property {Boolean}\n */\n get isPersistable() {\n const\n {\n event,\n resource,\n unjoinedStores,\n assignmentStore\n } = this,\n crudManager = assignmentStore?.crudManager;\n let result;\n if (assignmentStore) {\n // If the owning event is not persistable, this assignment is also not persistable.\n // if crud manager is used it can deal with phantom event/resource since it persists all records in one batch\n // if no crud manager used we have to wait till event/resource are persisted\n result = this.isValid && event.isPersistable && (crudManager || !event.hasGeneratedId && !resource.hasGeneratedId);\n }\n // if we remove the record\n else {\n result = !this.isPhantom && Boolean(unjoinedStores[0]);\n }\n // Records not yet fully created cannot be persisted\n return result && super.isPersistable && !this.event?.isCreating;\n }\n get isValid() {\n return this.resource != null && this.event != null;\n }\n /**\n * Returns a textual representation of this assignment (e.g. Mike 50%).\n * @returns {String}\n */\n toString() {\n if (this.resourceName) {\n return `${this.resourceName} ${Math.round(this.units)}%`;\n }\n return '';\n }\n //region STM hooks\n shouldRecordFieldChange(fieldName, oldValue, newValue) {\n if (!super.shouldRecordFieldChange(fieldName, oldValue, newValue)) {\n return false;\n }\n if (fieldName === 'event' || fieldName === 'eventId') {\n const eventStore = this.project?.eventStore;\n if (eventStore && eventStore.oldIdMap[oldValue] === eventStore.getById(newValue)) {\n return false;\n }\n }\n if (fieldName === 'resource' || fieldName === 'resourceId') {\n const resourceStore = this.project?.resourceStore;\n if (resourceStore && resourceStore.oldIdMap[oldValue] === resourceStore.getById(newValue)) {\n return false;\n }\n }\n return true;\n }\n //endregion\n};\n", "import { Mixin, isInstanceOf } from \"../../../../ChronoGraph/class/BetterMixin.js\";\nimport { CorePartOfProjectModelMixin } from \"../mixin/CorePartOfProjectModelMixin.js\";\nimport { CoreEventMixin } from \"./CoreEventMixin.js\";\nimport { CoreResourceMixin } from \"./CoreResourceMixin.js\";\nfunction asId(recordOrId) {\n return recordOrId?.isModel ? recordOrId.id : recordOrId;\n}\n/**\n * Core assignment model class. It just contains references to the [[CoreEventMixin|event]] and [[CoreResourceMixin|resource]] being assigned.\n */\nexport class CoreAssignmentMixin extends Mixin([CorePartOfProjectModelMixin], (base) => {\n const superProto = base.prototype;\n class CoreAssignmentMixin extends base {\n // Fields declared in the Model way, existing decorators all assume ChronoGraph is used\n static get fields() {\n return [\n // isEqual required to properly detect changed resource / event\n { name: 'resource', isEqual: (a, b) => a === b, persist: false },\n { name: 'event', isEqual: (a, b) => a === b, persist: false }\n ];\n }\n // Resolve early + update indices to have buckets ready before commit\n setChanged(field, value, invalidate) {\n const { assignmentStore, eventStore, resourceStore, project } = this;\n let update = false;\n if (field === 'event') {\n const event = isInstanceOf(value, CoreEventMixin) ? value : eventStore?.$master.getById(value);\n if (event)\n update = true;\n value = event || value;\n }\n if (field === 'resource') {\n const resource = isInstanceOf(value, CoreResourceMixin) ? value : resourceStore?.$master.getById(value);\n if (resource)\n update = true;\n value = resource || value;\n }\n // Passing true as last arg, bucket expected to work before commit\n superProto.setChanged.call(this, field, value, invalidate, true);\n // Update on resolve, if this is a single operation and record is part of project (might be standalone record)\n if (assignmentStore && update && !project.isPerformingCommit && !assignmentStore.isLoadingData && !resourceStore?.isLoadingData && !assignmentStore.skipInvalidateIndices) {\n assignmentStore.invalidateIndices();\n }\n }\n // Resolve event and resource when joining project\n joinProject() {\n superProto.joinProject.call(this);\n this.setChanged('event', this.get('event'));\n this.setChanged('resource', this.get('resource'));\n }\n // Resolved resource & event as part of commit\n // Normally done earlier in setChanged, but stores might not have been available yet at that point\n calculateInvalidated() {\n // Changed values, should be used instead of current where available\n let { event = this.event, resource = this.resource } = this.$changed;\n if (event !== null && !(isInstanceOf(event, CoreEventMixin))) {\n const resolved = this.eventStore?.getById(event);\n if (resolved)\n this.setChanged('event', resolved, false);\n }\n if (resource !== null && !(isInstanceOf(resource, CoreResourceMixin))) {\n const resolved = this.resourceStore?.getById(resource);\n if (resolved)\n this.setChanged('resource', resolved, false);\n }\n }\n // resourceId and eventId required to be available for new datasets\n finalizeInvalidated(silent) {\n const changed = this.$changed;\n if ('resource' in changed) {\n changed.resourceId = asId(changed.resource);\n }\n if ('event' in changed) {\n changed.eventId = asId(changed.event);\n }\n superProto.finalizeInvalidated.call(this, silent);\n }\n //region Event\n set event(event) {\n this.setChanged('event', event);\n this.setChanged('eventId', asId(event));\n }\n get event() {\n const event = this.get('event');\n // Engine returns null instead of id when unresolved\n return event?.id != null ? event : null;\n }\n //endregion\n //region Resource\n set resource(resource) {\n this.setChanged('resource', resource);\n this.setChanged('resourceId', asId(resource));\n }\n get resource() {\n const resource = this.get('resource');\n // Engine returns null instead of id when unresolved\n return resource?.id != null ? resource : null;\n }\n }\n return CoreAssignmentMixin;\n}) {\n}\n", "import Model from '../../Core/data/Model.js';\nimport PartOfProject from '../data/mixin/PartOfProject.js';\nimport AssignmentModelMixin from './mixin/AssignmentModelMixin.js';\nimport { CoreAssignmentMixin } from '../../Engine/quark/model/scheduler_core/CoreAssignmentMixin.js';\nconst EngineMixin = CoreAssignmentMixin;\n/**\n * @module Scheduler/model/AssignmentModel\n */\n/**\n * This model represents a single assignment of a resource to an event in the scheduler, usually added to a\n * {@link Scheduler.data.AssignmentStore}.\n *\n * It is a subclass of the {@link Core.data.Model} class. Please refer to the documentation for that class to become\n * familiar with the base interface of this class.\n *\n * ## Fields and references\n *\n * An Assignment has the following fields:\n * - `id` - The id of the assignment\n * - `resourceId` - The id of the resource assigned (optionally replaced with `resource` for load)\n * - `eventId` - The id of the event to which the resource is assigned (optionally replaced with `event` for load)\n *\n * The data source for these fields can be customized by subclassing this class:\n *\n * ```javascript\n * class MyAssignment extends AssignmentModel {\n * static get fields() {\n * return [\n * { name : 'resourceId', dataSource : 'linkedResource' }\n * ];\n * }\n * }\n * ```\n *\n * After load and project normalization, these references are accessible (assuming their respective stores are loaded):\n * - `event` - The linked event record\n * - `resource` - The linked resource record\n *\n * ## Async resolving of references\n *\n * As described above, an assignment links an event to a resource. It holds references to an event record and a resource\n * record. These references are populated async, using the calculation engine of the project that the assignment via\n * its store is a part of. Because of this asyncness, references cannot be used immediately after modifications:\n *\n * ```javascript\n * assignment.resourceId = 2;\n * // assignment.resource is not yet available\n * ```\n *\n * To make sure references are updated, wait for calculations to finish:\n *\n * ```javascript\n * assignment.resourceId = 2;\n * await assignment.project.commitAsync();\n * // assignment.resource is available\n * ```\n *\n * As an alternative, you can also use `setAsync()` to trigger calculations directly after the change:\n *\n * ```javascript\n * await assignment.setAsync({ resourceId : 2});\n * // assignment.resource is available\n * ```\n *\n * @extends Core/data/Model\n * @mixes Scheduler/model/mixin/AssignmentModelMixin\n * @uninherit Core/data/mixin/TreeNode\n */\nexport default class AssignmentModel extends AssignmentModelMixin(PartOfProject(EngineMixin.derive(Model))) {\n // NOTE: Leave field defs at top to be picked up by jsdoc\n /**\n * Id for event to assign. Can be used as an alternative to `eventId`, but please note that after\n * load it will be populated with the actual event and not its id. This field is not persistable.\n * @field {Scheduler.model.EventModel} event\n * @accepts {String|Number|Scheduler.model.EventModel}\n * @typings {String||Number||Scheduler.model.EventModel||Scheduler.model.TimeSpan}\n * @category Common\n */\n /**\n * Id for resource to assign to. Can be used as an alternative to `resourceId`, but please note that after\n * load it will be populated with the actual resource and not its id. This field is not persistable.\n * @field {Scheduler.model.ResourceModel} resource\n * @accepts {String|Number|Scheduler.model.ResourceModel}\n * @category Common\n */\n static get $name() {\n return 'AssignmentModel';\n }\n}\nAssignmentModel.exposeProperties();\nAssignmentModel._$name = 'AssignmentModel';", "import Model from '../../../Core/data/Model.js';\nimport ArrayHelper from '../../../Core/helper/ArrayHelper.js';\n/**\n * @module Scheduler/data/mixin/AssignmentStoreMixin\n */\n/**\n * This is a mixin, containing functionality related to managing assignments.\n *\n * It is consumed by the regular {@link Scheduler.data.AssignmentStore} class and Scheduler Pros counterpart.\n *\n * @mixin\n */\nexport default Target => class AssignmentStoreMixin extends Target {\n static get $name() {\n return 'AssignmentStoreMixin';\n }\n /**\n * Add assignments to the store.\n *\n * NOTE: References (event, resource) on the assignments are determined async by a calculation engine. Thus they\n * cannot be directly accessed after using this function.\n *\n * For example:\n *\n * ```javascript\n * const [assignment] = assignmentStore.add({ eventId, resourceId });\n * // assignment.event is not yet available\n * ```\n *\n * To guarantee references are set up, wait for calculations for finish:\n *\n * ```javascript\n * const [assignment] = assignmentStore.add({ eventId, resourceId });\n * await assignmentStore.project.commitAsync();\n * // assignment.event is available (assuming EventStore is loaded and so on)\n * ```\n *\n * Alternatively use `addAsync()` instead:\n *\n * ```javascript\n * const [assignment] = await assignmentStore.addAsync({ eventId, resourceId });\n * // assignment.event is available (assuming EventStore is loaded and so on)\n * ```\n *\n * @param {Scheduler.model.AssignmentModel|Scheduler.model.AssignmentModel[]|AssignmentModelConfig|AssignmentModelConfig[]} records\n * Array of records/data or a single record/data to add to store\n * @param {Boolean} [silent] Specify `true` to suppress events\n * @returns {Scheduler.model.AssignmentModel[]} Added records\n * @function add\n * @category CRUD\n */\n /**\n * Add assignments to the store and triggers calculations directly after. Await this function to have up to date\n * references on the added assignments.\n *\n * ```javascript\n * const [assignment] = await assignmentStore.addAsync({ eventId, resourceId });\n * // assignment.event is available (assuming EventStore is loaded and so on)\n * ```\n *\n * @param {Scheduler.model.AssignmentModel|Scheduler.model.AssignmentModel[]|AssignmentModelConfig|AssignmentModelConfig[]} records\n * Array of records/data or a single record/data to add to store\n * @param {Boolean} [silent] Specify `true` to suppress events\n * @returns {Scheduler.model.AssignmentModel[]} Added records\n * @function addAsync\n * @category CRUD\n * @async\n */\n /**\n * Applies a new dataset to the AssignmentStore. Use it to plug externally fetched data into the store.\n *\n * NOTE: References (assignments, resources) on the assignments are determined async by a calculation engine. Thus\n * they cannot be directly accessed after assigning the new dataset.\n *\n * For example:\n *\n * ```javascript\n * assignmentStore.data = [{ eventId, resourceId }];\n * // assignmentStore.first.event is not yet available\n * ```\n *\n * To guarantee references are available, wait for calculations for finish:\n *\n * ```javascript\n * assignmentStore.data = [{ eventId, resourceId }];\n * await assignmentStore.project.commitAsync();\n * // assignmentStore.first.event is available\n * ```\n *\n * Alternatively use `loadDataAsync()` instead:\n *\n * ```javascript\n * await assignmentStore.loadDataAsync([{ eventId, resourceId }]);\n * // assignmentStore.first.event is available\n * ```\n *\n * @member {AssignmentModelConfig[]} data\n * @category Records\n */\n /**\n * Applies a new dataset to the AssignmentStore and triggers calculations directly after. Use it to plug externally\n * fetched data into the store.\n *\n * ```javascript\n * await assignmentStore.loadDataAsync([{ eventId, resourceId }]);\n * // assignmentStore.first.event is available\n * ```\n *\n * @param {AssignmentModelConfig[]} data Array of AssignmentModel data objects\n * @function loadDataAsync\n * @category CRUD\n * @async\n */\n static get defaultConfig() {\n return {\n /**\n * CrudManager must load stores in the correct order. Lowest first.\n * @private\n */\n loadPriority : 300,\n /**\n * CrudManager must sync stores in the correct order. Lowest first.\n * @private\n */\n syncPriority : 300,\n storeId : 'assignments'\n };\n }\n add(newAssignments, ...args) {\n newAssignments = ArrayHelper.asArray(newAssignments);\n for (let i = 0; i < newAssignments.length; i++) {\n let assignment = newAssignments[i];\n if (!(assignment instanceof Model)) {\n newAssignments[i] = assignment = this.createRecord(assignment);\n }\n if (!this.isSyncingDataOnLoad && this.storage.findIndex('eventResourceKey', assignment.eventResourceKey, true) !== -1) {\n throw new Error(`Duplicate assignment Event: ${assignment.eventId} to resource: ${assignment.resourceId}`);\n }\n if (assignment.event?.isCreating) {\n assignment.isCreating = true;\n }\n }\n return super.add(newAssignments, ...args);\n }\n includesAssignment(eventId, resourceId) {\n return this.storage.findIndex('eventResourceKey', `${eventId}-${resourceId}`, true) !== -1;\n }\n setStoreData(data) {\n if (this.usesSingleAssignment) {\n throw new Error('Data loading into AssignmentStore (multi-assignment mode) cannot be combined EventStore data containing resourceId (single-assignment mode)');\n }\n super.setStoreData(data);\n }\n //region Init & destroy\n // This index fixes poor performance when you add large number of events to an event store with large number of\n // events - if cache is missing existing records are iterated n\u00B2 times.\n // https://github.com/bryntum/support/issues/3154#issuecomment-881336588\n set storage(storage) {\n super.storage = storage;\n // This allows a map based, fast lookup of assignments by their eventResourceKey.\n // This is so that the test for duplicate assignment adding is fast.\n this.storage.addIndex({\n property : 'eventResourceKey',\n dependentOn : { event : true, resource : true },\n onDuplicate(assignment) {\n console.warn(`Duplicate assignment of event ${assignment.eventId} to resource ${assignment.resourceId}`);\n }\n });\n }\n get storage() {\n // Micro optimization to avoid expensive super call\n return this._storage || super.storage;\n }\n //endregion\n //region Stores\n // To not have to do instanceof checks\n get isAssignmentStore() {\n return true;\n }\n //endregion\n //region Recurrence\n /**\n * Returns a \"fake\" assignment used to identify a certain occurrence of a recurring event.\n * If passed the original event, it returns `originalAssignment`.\n * @param {Scheduler.model.AssignmentModel} originalAssignment\n * @param {Scheduler.model.EventModel} occurrence\n * @returns {Object} Temporary assignment\n * @internal\n */\n getOccurrence(originalAssignment, occurrence) {\n // Pass along the original assignment for non occurrence related calls\n if (!originalAssignment || !occurrence?.isOccurrence) {\n return originalAssignment;\n }\n // Not for saving chars, needed in fn below\n const me = this;\n return {\n id : `${occurrence.id}:a${originalAssignment.id}`,\n event : occurrence,\n resource : originalAssignment.resource,\n eventId : occurrence.id,\n resourceId : originalAssignment.resource.id,\n isAssignment : true,\n // This field is required to distinguish this fake assignment when event is being removed from UI\n isOccurrenceAssignment : true,\n // Not being an actual record, instanceMeta is stored on the store instead\n instanceMeta(instanceOrId) {\n return me.occurrenceInstanceMeta(this, instanceOrId);\n }\n };\n }\n // Per fake assignment instance meta, stored on store since fakes are always generated on demand\n occurrenceInstanceMeta(occurrenceAssignment, instanceOrId) {\n const\n me = this,\n instanceId = instanceOrId.id || instanceOrId,\n { id } = occurrenceAssignment;\n let { occurrenceMeta } = me;\n if (!occurrenceMeta) {\n occurrenceMeta = me.occurrenceMeta = {};\n }\n if (!occurrenceMeta[id]) {\n occurrenceMeta[id] = {};\n }\n return occurrenceMeta[id][instanceId] || (occurrenceMeta[id][instanceId] = {});\n }\n //endregion\n //region Mapping\n /**\n * Maps over event assignments.\n *\n * @param {Scheduler.model.EventModel} event\n * @param {Function} [fn]\n * @param {Function} [filterFn]\n * @returns {Scheduler.model.EventModel[]|Array}\n * @category Assignments\n */\n mapAssignmentsForEvent(event, fn, filterFn) {\n event = this.eventStore.getById(event);\n const\n fnSet = Boolean(fn),\n filterFnSet = Boolean(filterFn);\n if (fnSet || filterFnSet) {\n return event.assignments.reduce((result, assignment) => {\n const mapResult = fnSet ? fn(assignment) : assignment;\n if (!filterFnSet || filterFn(mapResult)) {\n result.push(mapResult);\n }\n return result;\n }, []);\n }\n return event.assignments;\n }\n /**\n * Maps over resource assignments.\n *\n * @param {Scheduler.model.ResourceModel|Number|String} resource\n * @param {Function} [fn]\n * @param {Function} [filterFn]\n * @returns {Scheduler.model.ResourceModel[]|Array}\n * @category Assignments\n */\n mapAssignmentsForResource(resource, fn, filterFn) {\n resource = this.resourceStore.getById(resource);\n const\n fnSet = Boolean(fn),\n filterFnSet = Boolean(filterFn);\n if (fnSet || filterFnSet) {\n return resource.assignments.reduce((result, assignment) => {\n const mapResult = fnSet ? fn(assignment) : assignment;\n if (!filterFnSet || filterFn(mapResult)) {\n result.push(mapResult);\n }\n return result;\n }, []);\n }\n return resource.assignments;\n }\n /**\n * Returns all assignments for a given event.\n *\n * @param {Scheduler.model.TimeSpan} event\n * @returns {Scheduler.model.AssignmentModel[]}\n * @category Assignments\n */\n getAssignmentsForEvent(event) {\n return event.assignments;\n }\n /**\n * Removes all assignments for given event\n *\n * @param {Scheduler.model.TimeSpan} event\n * @category Assignments\n */\n removeAssignmentsForEvent(event) {\n return this.remove(event.assignments);\n }\n /**\n * Returns all assignments for a given resource.\n *\n * @param {Scheduler.model.ResourceModel} resource\n * @returns {Scheduler.model.AssignmentModel[]}\n * @category Assignments\n */\n getAssignmentsForResource(resource) {\n resource = this.resourceStore.getById(resource);\n return resource.assignments;\n }\n /**\n * Removes all assignments for given resource\n *\n * @param {Scheduler.model.ResourceModel|*} resource\n * @category Assignments\n */\n removeAssignmentsForResource(resource) {\n this.remove(this.getAssignmentsForResource(resource));\n }\n /**\n * Returns all resources assigned to an event.\n *\n * @param {Scheduler.model.EventModel} event\n * @returns {Scheduler.model.ResourceModel[]}\n * @category Assignments\n */\n getResourcesForEvent(event) {\n return event.resources;\n }\n /**\n * Returns all events assigned to a resource\n *\n * @param {Scheduler.model.ResourceModel|String|Number} resource\n * @returns {Scheduler.model.TimeSpan[]}\n * @category Assignments\n */\n getEventsForResource(resource) {\n resource = this.resourceStore.getById(resource);\n return resource?.events;\n }\n /**\n * Creates and adds assignment record(s) for a given event and resource(s).\n *\n * @param {Scheduler.model.TimeSpan} event\n * @param {Scheduler.model.ResourceModel|Scheduler.model.ResourceModel[]} resources The resource(s) to assign to the event\n * @param {Function} [assignmentSetupFn] A hook function which takes an assignment as its argument and must return an assignment.\n * @param {Boolean} [removeExistingAssignments] `true` to remove assignments for other resources\n * @returns {Scheduler.model.AssignmentModel[]} An array with the created assignment(s)\n * @category Assign\n */\n assignEventToResource(event, resources, assignmentSetupFn = null, removeExistingAssignments = false) {\n const\n me = this,\n toRemove = removeExistingAssignments ? new Set(event.assignments) : null;\n resources = ArrayHelper.asArray(resources).map(r => r.$original ?? r);\n if (me.eventStore?.usesSingleAssignment) {\n // Use same code path as other single assignments if already assigned\n if (event.assignments?.length) {\n if (!me.isEventAssignedToResource(event, resources[0])) {\n event.resource = resources[0];\n }\n return [];\n }\n // otherwise - set \"resourceId\" and proceed to assignment creation\n else {\n event.resourceId = resources[0]?.id;\n }\n }\n let newAssignments = [];\n me.suspendAutoCommit();\n // Assign\n resources.forEach(resource => {\n const existingAssignment = me.getAssignmentForEventAndResource(event, resource);\n if (!existingAssignment) {\n const assignment = {\n event,\n resource\n };\n newAssignments.push(assignmentSetupFn?.(assignment) ?? assignment);\n }\n else if (removeExistingAssignments) {\n toRemove.delete(existingAssignment);\n }\n });\n newAssignments = me.add(newAssignments);\n if (removeExistingAssignments) {\n me.remove(Array.from(toRemove));\n }\n // If true, will trigger a commit\n me.resumeAutoCommit();\n return newAssignments;\n }\n /**\n * Removes assignment record for a given event and resource.\n *\n * @param {Scheduler.model.TimeSpan|String|Number} event\n * @param {Scheduler.model.ResourceModel|String|Number} [resources] The resource to unassign the event from. If omitted, all resources of the events will be unassigned\n * @returns {Scheduler.model.AssignmentModel|Scheduler.model.AssignmentModel[]}\n * @category Assign\n */\n unassignEventFromResource(event, resources) {\n const\n me = this,\n assignmentsToRemove = [];\n if (!resources) {\n return me.removeAssignmentsForEvent(event);\n }\n resources = ArrayHelper.asArray(resources);\n for (let i = 0; i < resources.length; i++) {\n if (me.isEventAssignedToResource(event, resources[i])) {\n assignmentsToRemove.push(me.getAssignmentForEventAndResource(event, resources[i]));\n }\n }\n return me.remove(assignmentsToRemove);\n }\n /**\n * Checks whether an event is assigned to a resource.\n *\n * @param {Scheduler.model.EventModel|String|Number} event Event record or id\n * @param {Scheduler.model.ResourceModel|String|Number} resource Resource record or id\n * @returns {Boolean}\n * @category Assignments\n */\n isEventAssignedToResource(event, resource) {\n return Boolean(this.getAssignmentForEventAndResource(event, resource));\n }\n /**\n * Returns an assignment record for a given event and resource\n *\n * @param {Scheduler.model.EventModel|String|Number} event The event or its id\n * @param {Scheduler.model.ResourceModel|String|Number} resource The resource or its id\n * @returns {Scheduler.model.AssignmentModel}\n * @category Assignments\n */\n getAssignmentForEventAndResource(event, resource) {\n let assignments;\n // Note: In order to not evaluate conditions which do not have to be evaluated each condition is assigned to a\n // variable within the condition.\n if (\n !(event = this.eventStore.getById(event)) ||\n !(assignments = event.assignments) ||\n // Also note that resources are looked for in the master store if chained, to handle dragging between\n // schedulers using chained versions of the same resource store. Needed since assignmentStore is shared and\n // might point to wrong resourceStore (can only point to one)\n !(resource = this.resourceStore.$master.getById(resource))\n ) {\n return null;\n }\n return this.getOccurrence(assignments.find(a => a.resource?.$original === resource.$original), event);\n }\n //endregion\n};\n", "import { CI } from \"../../ChronoGraph/collection/Iterator.js\";\nexport const isNotNumber = (value) => Number(value) !== value;\nexport const CIFromSetOrArrayOrValue = (value) => {\n if (value instanceof Set || value instanceof Array)\n return CI(value);\n return CI([value]);\n};\nexport const delay = (value) => new Promise(resolve => setTimeout(resolve, value));\nexport const format = (format, ...values) => {\n return format.replace(/{(\\d+)}/g, (match, number) => typeof values[number] !== 'undefined' ? values[number] : match);\n};\n", "import { Mixin } from \"../../../ChronoGraph/class/Mixin.js\";\nimport { AbstractPartOfProjectStoreMixin } from \"./mixin/AbstractPartOfProjectStoreMixin.js\";\nimport { CIFromSetOrArrayOrValue } from \"../../util/Functions.js\";\n// Shared functionality for CoreAssignmentStore & ChronoAssignmentStore\nexport class AbstractAssignmentStoreMixin extends Mixin([AbstractPartOfProjectStoreMixin], (base) => {\n const superProto = base.prototype;\n class AbstractAssignmentStoreMixin extends base {\n constructor() {\n super(...arguments);\n this.assignmentsForRemoval = new Set();\n this.allAssignmentsForRemoval = false;\n }\n remove(records, silent) {\n this.assignmentsForRemoval = CIFromSetOrArrayOrValue(records).toSet();\n const res = superProto.remove.call(this, records, silent);\n this.assignmentsForRemoval.clear();\n return res;\n }\n removeAll(silent) {\n this.allAssignmentsForRemoval = true;\n const res = superProto.removeAll.call(this, silent);\n this.allAssignmentsForRemoval = false;\n return res;\n }\n }\n return AbstractAssignmentStoreMixin;\n}) {\n}\n", "import { CoreAssignmentMixin } from \"../model/scheduler_core/CoreAssignmentMixin.js\";\nimport { Mixin } from \"../../../ChronoGraph/class/BetterMixin.js\";\nimport { CorePartOfProjectStoreMixin } from \"./mixin/CorePartOfProjectStoreMixin.js\";\nimport { AbstractAssignmentStoreMixin } from \"./AbstractAssignmentStoreMixin.js\";\nconst emptySet = new Set();\n/**\n * A store mixin class, that represent collection of all assignments in the [[SchedulerCoreProjectMixin|project]].\n */\nexport class CoreAssignmentStoreMixin extends Mixin([AbstractAssignmentStoreMixin, CorePartOfProjectStoreMixin], (base) => {\n const superProto = base.prototype;\n class CoreAssignmentStoreMixin extends base {\n constructor() {\n super(...arguments);\n this.skipInvalidateIndices = false;\n }\n static get defaultConfig() {\n return {\n modelClass: CoreAssignmentMixin,\n storage: {\n extraKeys: [\n { property: 'event', unique: false },\n { property: 'resource', unique: false },\n { property: 'eventId', unique: false }\n ]\n }\n };\n }\n set data(value) {\n this.allAssignmentsForRemoval = true;\n super.data = value;\n this.allAssignmentsForRemoval = false;\n }\n getEventsAssignments(event) {\n return this.storage.findItem('event', event, true) || emptySet;\n }\n getResourcesAssignments(resource) {\n return this.storage.findItem('resource', resource.$original, true) || emptySet;\n }\n updateIndices() {\n this.storage.rebuildIndices();\n }\n invalidateIndices() {\n this.storage.invalidateIndices();\n }\n afterLoadData() {\n this.eventStore && this.linkAssignments(this.eventStore, 'event');\n this.resourceStore && this.linkAssignments(this.resourceStore, 'resource');\n }\n // Link events/resources to assignments, called when those stores are populated or joined to project\n linkAssignments(store, modelName) {\n // If we are passed a chained store, the ultimate source of truth is the masterStore\n store = store.masterStore || store;\n const unresolved = this.count && this.storage.findItem(modelName, null, true);\n if (unresolved) {\n for (const assignment of unresolved) {\n const record = store.getById(assignment.getCurrentOrProposed(modelName));\n if (record)\n assignment.setChanged(modelName, record);\n }\n this.invalidateIndices();\n }\n }\n // Unlink events/resources from assignments, called when those stores are cleared\n unlinkAssignments(modelName) {\n // Invalidate links to events/resources, need to link to new records so set it back to the id (might be resource or resourceId)\n // As assignment.resource returns null if it's an id, need to check for that in data\n this.forEach(assignment => assignment.setChanged(modelName, assignment[modelName]?.id ?? assignment?.getData(modelName) ?? assignment[modelName + 'Id']));\n this.invalidateIndices();\n }\n onCommitAsync() {\n this.updateIndices();\n }\n }\n return CoreAssignmentStoreMixin;\n}) {\n}\n", "import AjaxStore from '../../Core/data/AjaxStore.js';\nimport AssignmentModel from '../model/AssignmentModel.js';\nimport PartOfProject from './mixin/PartOfProject.js';\nimport PartOfBaseProject from './mixin/PartOfBaseProject.js';\nimport AssignmentStoreMixin from './mixin/AssignmentStoreMixin.js';\nimport { CoreAssignmentStoreMixin } from '../../Engine/quark/store/CoreAssignmentStoreMixin.js';\nconst EngineMixin = PartOfProject(CoreAssignmentStoreMixin.derive(AjaxStore));\n/**\n * @module Scheduler/data/AssignmentStore\n */\n/**\n * A store representing a collection of assignments between events in the {@link Scheduler.data.EventStore} and resources\n * in the {@link Scheduler.data.ResourceStore}.\n *\n * This store only accepts a model class inheriting from {@link Scheduler.model.AssignmentModel}.\n *\n * An AssignmentStore is usually connected to a project, which binds it to other related stores (EventStore,\n * ResourceStore and DependencyStore). The project also handles references (event, resource) to related records for the\n * records in the store.\n *\n * Resolving the references happens async, records are not guaranteed to have up to date references until calculations\n * are finished. To be certain that references are resolved, call `await project.commitAsync()` after store actions. Or\n * use one of the `xxAsync` functions, such as `loadDataAsync()`.\n *\n * Using `commitAsync()`:\n *\n * ```javascript\n * assignmentStore.data = [{ eventId, resourceId }, ...];\n *\n * // references (event, resource) not resolved yet\n *\n * await assignmentStore.project.commitAsync();\n *\n * // now they are\n * ```\n *\n * Using `loadDataAsync()`:\n *\n * ```javascript\n * await assignmentStore.loadDataAsync([{ eventId, resourceId }, ...]);\n *\n * // references (event, resource) are resolved\n * ```\n *\n * @mixes Scheduler/data/mixin/AssignmentStoreMixin\n * @mixes Scheduler/data/mixin/PartOfProject\n * @extends Core/data/AjaxStore\n */\nexport default class AssignmentStore extends AssignmentStoreMixin(EngineMixin) {\n static $name = 'AssignmentStore';\n static get defaultConfig() {\n return {\n modelClass : AssignmentModel\n };\n }\n}\nAssignmentStore._$name = 'AssignmentStore';", "import DateHelper from '../../Core/helper/DateHelper.js';\nimport Model from '../../Core/data/Model.js';\nimport Duration from '../../Core/data/Duration.js';\n/**\n * @module Scheduler/model/DependencyBaseModel\n */\nconst canonicalDependencyTypes = [\n 'SS',\n 'SF',\n 'FS',\n 'FF'\n];\n/**\n * Base class used for both Scheduler and Gantt. Not intended to be used directly\n *\n * @extends Core/data/Model\n */\nexport default class DependencyBaseModel extends Model {\n static get $name() {\n return 'DependencyBaseModel';\n }\n /**\n * Set value for the specified field(s), triggering engine calculations immediately. See\n * {@link Core.data.Model#function-set Model#set()} for arguments.\n **\n * ```javascript\n * dependency.set('from', 2);\n * // dependency.fromEvent is not yet up to date\n *\n * await dependency.setAsync('from', 2);\n * // dependency.fromEvent is up to date\n * ```\n *\n * @param {String|Object} field The field to set value for, or an object with multiple values to set in one call\n * @param {*} [value] Value to set\n * @param {Boolean} [silent=false] Set to true to not trigger events\n * automatically.\n * @function setAsync\n * @category Editing\n * @async\n */\n //region Fields\n /**\n * An enumerable object, containing names for the dependency types integer constants.\n * - 0 StartToStart\n * - 1 StartToEnd\n * - 2 EndToStart\n * - 3 EndToEnd\n * @property {Object}\n * @readonly\n * @category Dependency\n */\n static get Type() {\n return {\n StartToStart : 0,\n StartToEnd : 1,\n EndToStart : 2,\n EndToEnd : 3\n };\n }\n static get fields() {\n return [\n // 3 mandatory fields\n /**\n * From event, id of source event\n * @field {String|Number} from\n * @category Dependency\n */\n { name : 'from' },\n /**\n * To event, id of target event\n * @field {String|Number} to\n * @category Dependency\n */\n { name : 'to' },\n /**\n * Dependency type, see static property {@link #property-Type-static}\n * @field {Number} type=2\n * @category Dependency\n */\n { name : 'type', type : 'int', defaultValue : 2 },\n /**\n * CSS class to apply to lines drawn for the dependency\n * @field {String} cls\n * @category Styling\n */\n { name : 'cls', defaultValue : '' },\n /**\n * Bidirectional, drawn with arrows in both directions\n * @field {Boolean} bidirectional\n * @category Dependency\n */\n { name : 'bidirectional', type : 'boolean' },\n /**\n * Start side on source (top, left, bottom, right)\n * @field {'top'|'left'|'bottom'|'right'} fromSide\n * @category Dependency\n */\n { name : 'fromSide', type : 'string' },\n /**\n * End side on target (top, left, bottom, right)\n * @field {'top'|'left'|'bottom'|'right'} toSide\n * @category Dependency\n */\n { name : 'toSide', type : 'string' },\n /**\n * The magnitude of this dependency's lag (the number of units).\n * @field {Number} lag\n * @category Dependency\n */\n { name : 'lag', type : 'number', allowNull : true, defaultValue : 0 },\n /**\n * The units of this dependency's lag, defaults to \"d\" (days). Valid values are:\n *\n * - \"ms\" (milliseconds)\n * - \"s\" (seconds)\n * - \"m\" (minutes)\n * - \"h\" (hours)\n * - \"d\" (days)\n * - \"w\" (weeks)\n * - \"M\" (months)\n * - \"y\" (years)\n *\n * This field is readonly after creation, to change `lagUnit` use {@link #function-setLag setLag()}.\n * @field {DurationUnitShort} lagUnit\n * @category Dependency\n * @readonly\n */\n {\n name : 'lagUnit',\n type : 'string',\n defaultValue : 'd'\n },\n { name : 'highlighted', persist : false, internal : true }\n ];\n }\n // fromEvent/toEvent defined in CoreDependencyMixin in engine\n /**\n * Gets/sets the source event of the dependency.\n *\n * Accepts multiple formats but always returns an {@link Scheduler.model.EventModel}.\n *\n * **NOTE:** This is not a proper field but rather an alias, it will be serialized but cannot be remapped. If you\n * need to remap, consider using {@link #field-from} instead.\n *\n * @field {Scheduler.model.EventModel} fromEvent\n * @accepts {String|Number|Scheduler.model.EventModel}\n * @category Dependency\n */\n /**\n * Gets/sets the target event of the dependency.\n *\n * Accepts multiple formats but always returns an {@link Scheduler.model.EventModel}.\n *\n * **NOTE:** This is not a proper field but rather an alias, it will be serialized but cannot be remapped. If you\n * need to remap, consider using {@link #field-to} instead.\n *\n * @field {Scheduler.model.EventModel} toEvent\n * @accepts {String|Number|Scheduler.model.EventModel}\n * @category Dependency\n */\n //endregion\n //region Init\n construct(data) {\n const\n from = data[this.fieldMap.from.dataSource],\n to = data[this.fieldMap.to.dataSource];\n // Engine expects fromEvent and toEvent, not from and to. We need to support both\n if (from != null) {\n data.fromEvent = from;\n }\n if (to != null) {\n data.toEvent = to;\n }\n super.construct(...arguments);\n }\n //endregion\n get eventStore() {\n return this.eventStore || this.unjoinedStores[0]?.eventStore;\n }\n set from(value) {\n const { fromEvent } = this;\n // When assigning a new id to an event, it will update the eventId of the assignment. But the assignments\n // event is still the same so we need to announce here\n if (fromEvent?.isModel && fromEvent.id === value) {\n this.set('from', value);\n }\n else {\n this.fromEvent = value;\n }\n }\n get from() {\n return this.get('from');\n }\n set to(value) {\n const { toEvent } = this;\n // When assigning a new id to an event, it will update the eventId of the assignment. But the assignments\n // event is still the same so we need to announce here\n if (toEvent?.isModel && toEvent.id === value) {\n this.set('to', value);\n }\n else {\n this.toEvent = value;\n }\n }\n get to() {\n return this.get('to');\n }\n /**\n * Alias to dependency type, but when set resets {@link #field-fromSide} & {@link #field-toSide} to null as well.\n *\n * @property {Number}\n * @category Dependency\n */\n get hardType() {\n return this.getHardType();\n }\n set hardType(type) {\n this.setHardType(type);\n }\n /**\n * Returns dependency hard type, see {@link #property-hardType}.\n *\n * @returns {Number}\n * @category Dependency\n */\n getHardType() {\n return this.get('type');\n }\n /**\n * Sets dependency {@link #field-type} and resets {@link #field-fromSide} and {@link #field-toSide} to null.\n *\n * @param {Number} type\n * @category Dependency\n */\n setHardType(type) {\n let result;\n if (type !== this.hardType) {\n result = this.set({\n type,\n fromSide : null,\n toSide : null\n });\n }\n return result;\n }\n get lag() {\n return this.get('lag');\n }\n set lag(lag) {\n this.setLag(lag);\n }\n /**\n * Sets lag and lagUnit in one go. Only allowed way to change lagUnit, the lagUnit field is readonly after creation\n * @param {Number|String|Object} lag The lag value. May be just a numeric magnitude, or a full string descriptor eg '1d'\n * @param {DurationUnitShort} [lagUnit] Unit for numeric lag value, see\n * {@link #field-lagUnit} for valid values\n * @category Dependency\n */\n setLag(lag, lagUnit = this.lagUnit) {\n // Either they're only setting the magnitude\n // or, if it's a string, parse the full duration.\n if (arguments.length === 1) {\n if (typeof lag === 'number') {\n this.lag = lag;\n }\n else {\n lag = DateHelper.parseDuration(lag);\n this.set({\n lag : lag.magnitude,\n lagUnit : lag.unit\n });\n }\n return;\n }\n // Must be a number\n lag = parseFloat(lag);\n this.set({\n lag,\n lagUnit\n });\n }\n getLag() {\n if (this.lag) {\n return `${this.lag < 0 ? '-' : '+'}${Math.abs(this.lag)}${DateHelper.getShortNameOfUnit(this.lagUnit)}`;\n }\n return '';\n }\n /**\n * Property which encapsulates the lag's magnitude and units. An object which contains two properties:\n * @property {Core.data.Duration}\n * @property {Number} fullLag.magnitude The magnitude of the duration\n * @property {DurationUnitShort} fullLag.unit The unit in which the duration is measured, eg\n * `'d'` for days\n * @category Dependency\n */\n get fullLag() {\n return new Duration({\n unit : this.lagUnit,\n magnitude : this.lag\n });\n }\n set fullLag(lag) {\n if (typeof lag === 'string') {\n this.setLag(lag);\n }\n else {\n this.setLag(lag.magnitude, lag.unit);\n }\n }\n /**\n * Returns true if the linked events have been persisted (e.g. neither of them are 'phantoms')\n *\n * @property {Boolean}\n * @readonly\n * @category Editing\n */\n get isPersistable() {\n const\n me = this,\n { stores, unjoinedStores } = me,\n store = stores[0];\n let result;\n if (store) {\n const\n { fromEvent, toEvent } = me,\n crudManager = store.crudManager;\n // if crud manager is used it can deal with phantom source/target since it persists all records in one batch\n // if no crud manager used we have to wait till source/target are persisted\n result = fromEvent && (crudManager || !fromEvent.hasGeneratedId) && toEvent && (crudManager || !toEvent.hasGeneratedId);\n }\n else {\n result = Boolean(unjoinedStores[0]);\n }\n return result && super.isPersistable;\n }\n getDateRange() {\n const { fromEvent, toEvent } = this;\n if (fromEvent?.isScheduled && toEvent?.isScheduled) {\n const Type = DependencyBaseModel.Type;\n let sourceDate,\n targetDate;\n switch (this.type) {\n case Type.StartToStart:\n sourceDate = fromEvent.startDateMS;\n targetDate = toEvent.startDateMS;\n break;\n case Type.StartToEnd:\n sourceDate = fromEvent.startDateMS;\n targetDate = toEvent.endDateMS;\n break;\n case Type.EndToEnd:\n sourceDate = fromEvent.endDateMS;\n targetDate = toEvent.endDateMS;\n break;\n case Type.EndToStart:\n sourceDate = fromEvent.endDateMS;\n targetDate = toEvent.startDateMS;\n break;\n default:\n throw new Error('Invalid dependency type: ' + this.type);\n }\n return {\n start : Math.min(sourceDate, targetDate),\n end : Math.max(sourceDate, targetDate)\n };\n }\n return null;\n }\n /**\n * Applies given CSS class to dependency, the value doesn't persist\n *\n * @param {String} cls\n * @category Dependency\n */\n highlight(cls) {\n const classes = this.highlighted?.split(' ') ?? [];\n if (!classes.includes(cls)) {\n this.highlighted = classes.concat(cls).join(' ');\n }\n }\n /**\n * Removes given CSS class from dependency if applied, the value doesn't persist\n *\n * @param {String} cls\n * @category Dependency\n */\n unhighlight(cls) {\n const { highlighted } = this;\n if (highlighted) {\n const\n classes = highlighted.split(' '),\n index = classes.indexOf(cls);\n if (index >= 0) {\n classes.splice(index, 1);\n this.highlighted = classes.join(' ');\n }\n }\n }\n /**\n * Checks if the given CSS class is applied to dependency.\n *\n * @param {String} cls\n * @returns {Boolean}\n * @category Dependency\n */\n isHighlightedWith(cls) {\n return this.highlighted && this.highlighted.split(' ').includes(cls);\n }\n getConnectorString(raw) {\n const rawValue = canonicalDependencyTypes[this.type];\n if (raw) {\n return rawValue;\n }\n // FS => empty string; it's the default\n if (this.type === DependencyBaseModel.Type.EndToStart) {\n return '';\n }\n return rawValue;\n }\n // getConnectorStringFromType(type, raw) {\n // const rawValue = canonicalDependencyTypes[type];\n //\n // if (raw) {\n // return rawValue;\n // }\n //\n // // FS => empty string; it's the default\n // if (type === DependencyBaseModel.Type.EndToStart) {\n // return '';\n // }\n //\n // const locale = LocaleManager.locale;\n //\n // // See if there is a local version of SS, SF or FF\n // if (locale) {\n // const localized = locale.Scheduler && locale.Scheduler[rawValue];\n // if (localized) {\n // return localized;\n // }\n // }\n //\n // return rawValue;\n // }\n // getConnectorString(raw) {\n // return this.getConnectorStringFromType(this.type);\n // }\n // * getConnectorStringGenerator(raw) {\n // return this.getConnectorStringFromType(yield this.$.type);\n // }\n toString() {\n return `${this.from}${this.getConnectorString()}${this.getLag()}`;\n }\n /**\n * Returns `true` if the dependency is valid. It is considered valid if it has a valid type and both from and to\n * events are set and pointing to different events.\n *\n * @property {Boolean}\n * @typings ignore\n * @category Editing\n */\n get isValid() {\n const { fromEvent, toEvent, type } = this;\n return typeof type === 'number' && fromEvent && toEvent && fromEvent !== toEvent;\n }\n get fromEventName() {\n return this.fromEvent?.name || '';\n }\n get toEventName() {\n return this.toEvent?.name || '';\n }\n //region STM hooks\n shouldRecordFieldChange(fieldName, oldValue, newValue) {\n if (!super.shouldRecordFieldChange(fieldName, oldValue, newValue)) {\n return false;\n }\n if (fieldName === 'from' || fieldName === 'to' || fieldName === 'fromEvent' || fieldName === 'toEvent') {\n const eventStore = this.project?.eventStore;\n if (eventStore && eventStore.oldIdMap[oldValue] === eventStore.getById(newValue)) {\n return false;\n }\n }\n return true;\n }\n //endregion\n}\nDependencyBaseModel.exposeProperties();\nDependencyBaseModel._$name = 'DependencyBaseModel';", "import { CorePartOfProjectModelMixin } from \"../mixin/CorePartOfProjectModelMixin.js\";\nimport { Mixin } from \"../../../../ChronoGraph/class/BetterMixin.js\";\nimport { CoreEventMixin } from \"./CoreEventMixin.js\";\nimport { isInstanceOf } from '../../../../ChronoGraph/class/Mixin.js';\nexport class CoreDependencyMixin extends Mixin([CorePartOfProjectModelMixin], (base) => {\n const superProto = base.prototype;\n class CoreDependencyMixin extends base {\n static get fields() {\n return [\n { name: 'fromEvent', isEqual: (a, b) => a === b, persist: false },\n { name: 'toEvent', isEqual: (a, b) => a === b, persist: false }\n ];\n }\n // Resolve early + update indices to have buckets ready before commit\n setChanged(field, value, invalidate) {\n let update = false;\n if (field === 'fromEvent' || field === 'toEvent') {\n const event = isInstanceOf(value, CoreEventMixin) ? value : this.eventStore?.getById(value);\n if (event)\n update = true;\n value = event || value;\n }\n superProto.setChanged.call(this, field, value, invalidate, true);\n if (update && !this.project.isPerformingCommit && !this.dependencyStore?.isLoadingData) {\n this.dependencyStore?.invalidateIndices();\n }\n }\n // Resolve events when joining project\n joinProject() {\n superProto.joinProject.call(this);\n // Initial values should be considered changed, to be normalized\n // (needs to pass through setChanged for early normalization expected for buckets)\n this.setChanged('fromEvent', this.get('fromEvent'));\n this.setChanged('toEvent', this.get('toEvent'));\n }\n // Resolved events as part of commit\n // Normally done earlier in setChanged, but stores might not have been available yet at that point\n calculateInvalidated() {\n // Changed values, should be used instead of current where available\n let { fromEvent, toEvent } = this.$changed;\n if (fromEvent !== null && !(isInstanceOf(fromEvent, CoreEventMixin))) {\n const resolved = this.eventStore?.getById(fromEvent);\n if (resolved)\n this.$changed.fromEvent = resolved;\n }\n if (toEvent !== null && !(isInstanceOf(toEvent, CoreEventMixin))) {\n const resolved = this.eventStore?.getById(toEvent);\n if (resolved)\n this.$changed.toEvent = resolved;\n }\n }\n //region Events\n // Not using \"propose\" mechanism from CoreEventMixin, because buckets are expected to be up to date right away\n set fromEvent(fromEvent) {\n this.setChanged('fromEvent', fromEvent);\n }\n get fromEvent() {\n const fromEvent = this.get('fromEvent');\n // Engine returns null instead of id when unresolved\n return fromEvent?.id != null ? fromEvent : null;\n }\n set toEvent(toEvent) {\n this.setChanged('toEvent', toEvent);\n }\n get toEvent() {\n const toEvent = this.get('toEvent');\n // Engine returns null instead of id when unresolved\n return toEvent?.id != null ? toEvent : null;\n }\n }\n return CoreDependencyMixin;\n}) {\n}\n", "import DependencyBaseModel from './DependencyBaseModel.js';\nimport PartOfProject from '../data/mixin/PartOfProject.js';\nimport { CoreDependencyMixin } from '../../Engine/quark/model/scheduler_core/CoreDependencyMixin.js';\nconst EngineMixin = CoreDependencyMixin;\n/**\n * @module Scheduler/model/DependencyModel\n */\n/**\n * This model represents a dependency between two events, usually added to a {@link Scheduler.data.DependencyStore}.\n *\n * It is a subclass of the {@link Scheduler.model.DependencyBaseModel} class, which in its turn subclasses\n * {@link Core.data.Model}. Please refer to documentation of those classes to become familiar with the base interface of\n * this class.\n *\n * ## Fields and references\n *\n * A Dependency has a few predefined fields, see Fields below. The name of any fields data source can be customized in\n * the subclass, see the example below. Please also refer to {@link Core.data.Model} for details.\n *\n * ```javascript\n * class MyDependency extends DependencyModel {\n * static get fields() {\n * return [\n * { name: 'to', dataSource: 'targetId' },\n * { name: 'from', dataSource: 'sourceId' }\n * ]);\n * }\n * }\n * ```\n *\n * After load and project normalization, these references are accessible (assuming their respective stores are loaded):\n * - `fromEvent` - The event on the start side of the dependency\n * - `toEvent` - The event on the end side of the dependency\n *\n * ## Async resolving of references\n *\n * As described above, a dependency has links to events. These references are populated async, using the calculation\n * engine of the project that the resource via its store is a part of. Because of this asyncness, references cannot be\n * used immediately after modifications:\n *\n * ```javascript\n * dependency.from = 2;\n * // dependency.fromEvent is not yet up to date\n * ```\n *\n * To make sure references are updated, wait for calculations to finish:\n *\n * ```javascript\n * dependency.from = 2;\n * await dependency.project.commitAsync();\n * // dependency.fromEvent is up to date\n * ```\n *\n * As an alternative, you can also use `setAsync()` to trigger calculations directly after the change:\n *\n * ```javascript\n * await dependency.setAsync({ from : 2});\n * // dependency.fromEvent is up to date\n * ```\n *\n * @extends Scheduler/model/DependencyBaseModel\n * @uninherit Core/data/mixin/TreeNode\n */\nexport default class DependencyModel extends PartOfProject(EngineMixin.derive(DependencyBaseModel)) {\n static get $name() {\n return 'DependencyModel';\n }\n // Determines the type of dependency based on fromSide and toSide\n getTypeFromSides(fromSide, toSide, rtl) {\n const\n types = DependencyBaseModel.Type,\n startSide = rtl ? 'right' : 'left',\n endSide = rtl ? 'left' : 'right';\n if (fromSide === startSide) {\n return (toSide === startSide) ? types.StartToStart : types.StartToEnd;\n }\n return (toSide === endSide) ? types.EndToEnd : types.EndToStart;\n }\n}\nDependencyModel.exposeProperties();\nDependencyModel._$name = 'DependencyModel';", "import ArrayHelper from '../../../Core/helper/ArrayHelper.js';\nimport Model from '../../../Core/data/Model.js';\n/**\n * @module Scheduler/data/mixin/DependencyStoreMixin\n */\n/**\n * This is a mixin, containing functionality related to managing dependencies.\n *\n * It is consumed by the regular {@link Scheduler.data.DependencyStore} class and Scheduler Pros counterpart.\n *\n * @mixin\n */\nexport default Target => class DependencyStoreMixin extends Target {\n static get $name() {\n return 'DependencyStoreMixin';\n }\n /**\n * Add dependencies to the store.\n *\n * NOTE: References (fromEvent, toEvent) on the dependencies are determined async by a calculation engine. Thus they\n * cannot be directly accessed after using this function.\n *\n * For example:\n *\n * ```javascript\n * const [dependency] = dependencyStore.add({ from, to });\n * // dependency.fromEvent is not yet available\n * ```\n *\n * To guarantee references are set up, wait for calculations for finish:\n *\n * ```javascript\n * const [dependency] = dependencyStore.add({ from, to });\n * await dependencyStore.project.commitAsync();\n * // dependency.fromEvent is available (assuming EventStore is loaded and so on)\n * ```\n *\n * Alternatively use `addAsync()` instead:\n *\n * ```javascript\n * const [dependency] = await dependencyStore.addAsync({ from, to });\n * // dependency.fromEvent is available (assuming EventStore is loaded and so on)\n * ```\n *\n * @param {Scheduler.model.DependencyModel|Scheduler.model.DependencyModel[]|DependencyModelConfig|DependencyModelConfig[]} records\n * Array of records/data or a single record/data to add to store\n * @param {Boolean} [silent] Specify `true` to suppress events\n * @returns {Scheduler.model.DependencyModel[]} Added records\n * @function add\n * @category CRUD\n */\n /**\n * Add dependencies to the store and triggers calculations directly after. Await this function to have up to date\n * references on the added dependencies.\n *\n * ```javascript\n * const [dependency] = await dependencyStore.addAsync({ from, to });\n * // dependency.fromEvent is available (assuming EventStore is loaded and so on)\n * ```\n *\n * @param {Scheduler.model.DependencyModel|Scheduler.model.DependencyModel[]|DependencyModelConfig|DependencyModelConfig[]} records\n * Array of records/data or a single record/data to add to store\n * @param {Boolean} [silent] Specify `true` to suppress events\n * @returns {Scheduler.model.DependencyModel[]} Added records\n * @function addAsync\n * @category CRUD\n * @async\n */\n /**\n * Applies a new dataset to the DependencyStore. Use it to plug externally fetched data into the store.\n *\n * NOTE: References (fromEvent, toEvent) on the dependencies are determined async by a calculation engine. Thus\n * they cannot be directly accessed after assigning the new dataset.\n *\n * For example:\n *\n * ```javascript\n * dependencyStore.data = [{ from, to }];\n * // dependencyStore.first.fromEvent is not yet available\n * ```\n *\n * To guarantee references are available, wait for calculations for finish:\n *\n * ```javascript\n * dependencyStore.data = [{ from, to }];\n * await dependencyStore.project.commitAsync();\n * // dependencyStore.first.fromEvent is available\n * ```\n *\n * Alternatively use `loadDataAsync()` instead:\n *\n * ```javascript\n * await dependencyStore.loadDataAsync([{ from, to }]);\n * // dependencyStore.first.fromEvent is available\n * ```\n *\n * @member {DependencyModelConfig[]} data\n * @category Records\n */\n /**\n * Applies a new dataset to the DependencyStore and triggers calculations directly after. Use it to plug externally\n * fetched data into the store.\n *\n * ```javascript\n * await dependencyStore.loadDataAsync([{ from, to }]);\n * // dependencyStore.first.fromEvent is available\n * ```\n *\n * @param {DependencyModelConfig[]} data Array of DependencyModel data objects\n * @function loadDataAsync\n * @category CRUD\n * @async\n */\n static get defaultConfig() {\n return {\n /**\n * CrudManager must load stores in the correct order. Lowest first.\n * @private\n */\n loadPriority : 400,\n /**\n * CrudManager must sync stores in the correct order. Lowest first.\n * @private\n */\n syncPriority : 400,\n storeId : 'dependencies'\n };\n }\n reduceEventDependencies(event, reduceFn, result, flat = true, depsGetterFn) {\n depsGetterFn = depsGetterFn || (event => this.getEventDependencies(event));\n event = ArrayHelper.asArray(event);\n event.reduce((result, event) => {\n if (event.children && !flat) {\n event.traverse(evt => {\n result = depsGetterFn(evt).reduce(reduceFn, result);\n });\n }\n else {\n result = depsGetterFn(event).reduce(reduceFn, result);\n }\n }, result);\n return result;\n }\n mapEventDependencies(event, fn, filterFn, flat, depsGetterFn) {\n return this.reduceEventDependencies(event, (result, dependency) => {\n filterFn(dependency) && result.push(dependency);\n return result;\n }, [], flat, depsGetterFn);\n }\n mapEventPredecessors(event, fn, filterFn, flat) {\n return this.reduceEventPredecessors(event, (result, dependency) => {\n filterFn(dependency) && result.push(dependency);\n return result;\n }, [], flat);\n }\n mapEventSuccessors(event, fn, filterFn, flat) {\n return this.reduceEventSuccessors(event, (result, dependency) => {\n filterFn(dependency) && result.push(dependency);\n return result;\n }, [], flat);\n }\n /**\n * Returns all dependencies for a certain event (both incoming and outgoing)\n *\n * @param {Scheduler.model.EventModel} event\n * @returns {Scheduler.model.DependencyModel[]}\n */\n getEventDependencies(event) {\n return [].concat(event.predecessors || [], event.successors || []);\n }\n removeEventDependencies(event) {\n this.remove(this.getEventDependencies(event));\n }\n removeEventPredecessors(event) {\n this.remove(event.predecessors);\n }\n removeEventSuccessors(event, flat) {\n this.remove(event.successors);\n }\n getBySourceTargetId(key) {\n return this.records.find(r =>\n key == this.constructor.makeDependencySourceTargetCompositeKey(r.from, r.to)\n );\n }\n /**\n * Returns dependency model instance linking tasks with given ids. The dependency can be forward (from 1st\n * task to 2nd) or backward (from 2nd to 1st).\n *\n * @param {Scheduler.model.EventModel|String} sourceEvent 1st event\n * @param {Scheduler.model.EventModel|String} targetEvent 2nd event\n * @returns {Scheduler.model.DependencyModel}\n */\n getDependencyForSourceAndTargetEvents(sourceEvent, targetEvent) {\n sourceEvent = Model.asId(sourceEvent);\n targetEvent = Model.asId(targetEvent);\n return this.getBySourceTargetId(this.constructor.makeDependencySourceTargetCompositeKey(sourceEvent, targetEvent));\n }\n /**\n * Returns a dependency model instance linking given events if such dependency exists in the store.\n * The dependency can be forward (from 1st event to 2nd) or backward (from 2nd to 1st).\n *\n * @param {Scheduler.model.EventModel|String} sourceEvent\n * @param {Scheduler.model.EventModel|String} targetEvent\n * @returns {Scheduler.model.DependencyModel}\n */\n getEventsLinkingDependency(sourceEvent, targetEvent) {\n return this.getDependencyForSourceAndTargetEvents(sourceEvent, targetEvent) ||\n this.getDependencyForSourceAndTargetEvents(targetEvent, sourceEvent);\n }\n /**\n * Validation method used to validate a dependency. Override and return `true` to indicate that an\n * existing dependency between two tasks is valid. For a new dependency being created please see\n * {@link #function-isValidDependencyToCreate}.\n *\n * @param {Scheduler.model.DependencyModel|Scheduler.model.TimeSpan|Number|String} dependencyOrFromId The dependency\n * model, the from task/event or the id of the from task/event\n * @param {Scheduler.model.TimeSpan|Number|String} [toId] To task/event or id thereof if the first parameter is not\n * a dependency record\n * @param {Number} [type] Dependency {@link Scheduler.model.DependencyBaseModel#property-Type-static} if the first\n * parameter is not a dependency model instance.\n * @returns {Boolean}\n */\n async isValidDependency(dependencyOrFromId, toId, type) {\n let fromEvent = dependencyOrFromId, toEvent = toId;\n if (dependencyOrFromId == null) {\n return false;\n }\n // Accept dependency model\n if (dependencyOrFromId.isDependencyModel) {\n ({ fromEvent, toEvent } = dependencyOrFromId);\n }\n // Accept from as id\n fromEvent = this.eventStore.getById(fromEvent);\n // Accept to as id\n toEvent = this.eventStore.getById(toEvent);\n // This condition is supposed to map all model instances to be validated by project. Lowest common ancestor\n // for scheduler event, scheduler pro event and gantt task is TimeSpan\n if (fromEvent && toEvent) {\n // Block creating dependencies to display only tasks in Gantt\n if (!fromEvent.project || !toEvent.project) {\n return false;\n }\n // Not asserting dependency type here. Default value should normally suffice.\n return this.project.isValidDependency(fromEvent, toEvent, type);\n }\n return dependencyOrFromId !== toId;\n }\n /**\n * Validation method used to validate a dependency while creating. Override and return `true` to indicate that\n * a new dependency is valid to be created.\n *\n * @param {Scheduler.model.TimeSpan|Number|String} fromId From event/task or id\n * @param {Scheduler.model.TimeSpan|Number|String} toId To event/task or id\n * @param {Number} type Dependency {@link Scheduler.model.DependencyBaseModel#property-Type-static}\n * @returns {Boolean}\n */\n isValidDependencyToCreate(fromId, toId, type) {\n return this.isValidDependency(fromId, toId, type);\n }\n /**\n * Returns all dependencies highlighted with the given CSS class\n *\n * @param {String} cls\n * @returns {Scheduler.model.DependencyBaseModel[]}\n */\n getHighlightedDependencies(cls) {\n return this.records.reduce((result, dep) => {\n if (dep.isHighlightedWith(cls)) result.push(dep);\n return result;\n }, []);\n }\n static makeDependencySourceTargetCompositeKey(from, to) {\n return `source(${from})-target(${to})`;\n }\n //region Product neutral\n getTimeSpanDependencies(record) {\n return this.getEventDependencies(record);\n }\n //endregion\n};\n", "import { Mixin } from \"../../../ChronoGraph/class/Mixin.js\";\nimport { AbstractPartOfProjectStoreMixin } from \"./mixin/AbstractPartOfProjectStoreMixin.js\";\nimport { CIFromSetOrArrayOrValue } from '../../util/Functions.js';\n// Shared functionality for CoreDependencyStore & ChronoDependencyStore\nexport class AbstractDependencyStoreMixin extends Mixin([AbstractPartOfProjectStoreMixin], (base) => {\n const superProto = base.prototype;\n class AbstractDependencyStoreMixin extends base {\n constructor() {\n super(...arguments);\n this.dependenciesForRemoval = new Set();\n this.allDependenciesForRemoval = false;\n }\n remove(records, silent) {\n this.dependenciesForRemoval = CIFromSetOrArrayOrValue(records).toSet();\n const res = superProto.remove.call(this, records, silent);\n this.dependenciesForRemoval.clear();\n return res;\n }\n removeAll(silent) {\n this.allDependenciesForRemoval = true;\n const res = superProto.removeAll.call(this, silent);\n this.allDependenciesForRemoval = false;\n return res;\n }\n }\n return AbstractDependencyStoreMixin;\n}) {\n}\n", "import { Mixin } from \"../../../ChronoGraph/class/BetterMixin.js\";\nimport { CorePartOfProjectStoreMixin } from \"./mixin/CorePartOfProjectStoreMixin.js\";\nimport { CoreDependencyMixin } from \"../model/scheduler_core/CoreDependencyMixin.js\";\nimport { AbstractDependencyStoreMixin } from \"./AbstractDependencyStoreMixin.js\";\nconst emptySet = new Set();\n/**\n * A store mixin class, that represent collection of all dependencies in the [[SchedulerCoreProjectMixin|project]].\n */\nexport class CoreDependencyStoreMixin extends Mixin([AbstractDependencyStoreMixin, CorePartOfProjectStoreMixin], (base) => {\n const superProto = base.prototype;\n class CoreDependencyStoreMixin extends base {\n constructor() {\n super(...arguments);\n this.dependenciesForRemoval = new Set();\n this.allDependenciesForRemoval = false;\n }\n static get defaultConfig() {\n return {\n modelClass: CoreDependencyMixin,\n storage: {\n extraKeys: [\n { property: 'fromEvent', unique: false },\n { property: 'toEvent', unique: false }\n ]\n }\n };\n }\n getIncomingDepsForEvent(event) {\n return this.storage.findItem('toEvent', event) || emptySet;\n }\n getOutgoingDepsForEvent(event) {\n return this.storage.findItem('fromEvent', event) || emptySet;\n }\n set data(value) {\n this.allDependenciesForRemoval = true;\n super.data = value;\n this.allDependenciesForRemoval = false;\n }\n updateIndices() {\n this.storage.rebuildIndices();\n }\n invalidateIndices() {\n this.storage.invalidateIndices();\n }\n onCommitAsync() {\n this.updateIndices();\n }\n }\n return CoreDependencyStoreMixin;\n}) {\n}\n", "import AjaxStore from '../../Core/data/AjaxStore.js';\nimport DependencyModel from '../model/DependencyModel.js';\nimport PartOfProject from './mixin/PartOfProject.js';\nimport DependencyStoreMixin from './mixin/DependencyStoreMixin.js';\nimport { CoreDependencyStoreMixin } from '../../Engine/quark/store/CoreDependencyStoreMixin.js';\nimport PartOfBaseProject from './mixin/PartOfBaseProject.js';\nconst EngineMixin = PartOfProject(CoreDependencyStoreMixin.derive(AjaxStore));\n/**\n * @module Scheduler/data/DependencyStore\n */\n/**\n * A store representing a collection of dependencies between events in the {@link Scheduler.data.EventStore}.\n *\n * This store only accepts a model class inheriting from {@link Scheduler.model.DependencyModel}.\n *\n * A DependencyStore is usually connected to a project, which binds it to other related stores (EventStore,\n * AssignmentStore and ResourceStore). The project also handles references (fromEvent, toEvent) to related records\n * for the records in the store.\n *\n * Resolving the references happens async, records are not guaranteed to have up to date references until calculations\n * are finished. To be certain that references are resolved, call `await project.commitAsync()` after store actions. Or\n * use one of the `xxAsync` functions, such as `loadDataAsync()`.\n *\n * Using `commitAsync()`:\n *\n * ```javascript\n * dependencyStore.data = [{ from, to }, ...];\n *\n * // references (fromEvent, toEvent) not resolved yet\n *\n * await dependencyStore.project.commitAsync();\n *\n * // now they are\n * ```\n *\n * Using `loadDataAsync()`:\n *\n * ```javascript\n * await dependencyStore.loadDataAsync([{ from, to }, ...]);\n *\n * // references (fromEvent, toEvent) are resolved\n * ```\n *\n * @mixes Scheduler/data/mixin/PartOfProject\n * @mixes Scheduler/data/mixin/DependencyStoreMixin\n * @extends Core/data/AjaxStore\n */\nexport default class DependencyStore extends DependencyStoreMixin(EngineMixin.derive(AjaxStore)) {\n static get defaultConfig() {\n return {\n modelClass : DependencyModel\n };\n }\n}\nDependencyStore._$name = 'DependencyStore';", "/**\n * @module Scheduler/crud/mixin/AbstractCrudManagerValidation\n */\n/**\n * Mixin proving responses validation API to Crud Manager.\n * @mixin\n */\nexport default Target => class AbstractCrudManagerValidation extends Target {\n static get $name() {\n return 'AbstractCrudManagerValidation';\n }\n static get configurable() {\n return {\n /**\n * This config validates the response structure for requests made by the Crud Manager.\n * When `true`, the Crud Manager checks every parsed response structure for errors\n * and if the response format is invalid, a warning is logged to the browser console.\n *\n * The config is intended to help developers implementing backend integration.\n *\n * @config {Boolean}\n * @default\n * @category CRUD\n */\n validateResponse : true,\n /**\n * When `true` treats parsed responses without `success` property as successful.\n * In this mode a parsed response is treated as invalid if it has explicitly set `success : false`.\n * @config {Boolean}\n * @default\n * @category CRUD\n */\n skipSuccessProperty : true,\n crudLoadValidationWarningPrefix : 'CrudManager load response error(s):',\n crudSyncValidationWarningPrefix : 'CrudManager sync response error(s):',\n supportShortSyncResponseNote : 'Note: Please consider enabling \"supportShortSyncResponse\" option to allow less detailed sync responses (https://bryntum.com/products/scheduler/docs/api/Scheduler/crud/AbstractCrudManagerMixin#config-supportShortSyncResponse)',\n disableValidationNote : 'Note: To disable this validation please set the \"validateResponse\" config to false'\n };\n }\n get crudLoadValidationMandatoryStores() {\n return [];\n }\n getStoreLoadResponseWarnings(storeInfo, responded, expectedResponse) {\n const\n messages = [],\n { storeId } = storeInfo,\n mandatoryStores = this.crudLoadValidationMandatoryStores,\n result = { [storeId] : {} };\n // if the store section is responded\n if (responded) {\n if (!responded.rows) {\n messages.push(`- \"${storeId}\" store section should have a \"rows\" property with an array of the store records.`);\n result[storeId].rows = ['...'];\n }\n }\n // if the store is mandatory\n else if (mandatoryStores?.includes(storeId)) {\n messages.push(`- No \"${storeId}\" store section found. It should contain the store data.`);\n result[storeId].rows = ['...'];\n }\n // extend expected response w/ this store part\n if (messages.length) {\n Object.assign(expectedResponse, result);\n }\n return messages;\n }\n getLoadResponseWarnings(response) {\n const\n messages = [],\n expectedResponse = {};\n if (!this.skipSuccessProperty) {\n expectedResponse.success = true;\n }\n // iterate stores to check properties validity\n this.forEachCrudStore((store, storeId, storeInfo) => {\n messages.push(...this.getStoreLoadResponseWarnings(storeInfo, response?.[storeId], expectedResponse));\n });\n if (messages.length) {\n messages.push('Please adjust your response to look like this:\\n' +\n JSON.stringify(expectedResponse, null, 4).replace(/\"\\.\\.\\.\"/g, '...'));\n messages.push(this.disableValidationNote);\n }\n return messages;\n }\n validateLoadResponse(response) {\n const messages = this.getLoadResponseWarnings(response);\n if (messages.length) {\n console.warn(this.crudLoadValidationWarningPrefix + '\\n' + messages.join('\\n'));\n }\n }\n getStoreSyncResponseWarnings(storeInfo, requested, responded, expectedResponse) {\n const\n messages = [],\n missingRows = [],\n missingRemoved = [],\n { storeId } = storeInfo,\n result = { [storeId] : {} },\n phantomIdField = storeInfo.phantomIdField || this.phantomIdField,\n { modelClass } = storeInfo.store,\n { idField } = modelClass,\n respondedRows = responded?.rows || [],\n respondedRemoved = responded?.removed || [];\n let showSupportShortSyncResponseNote = false;\n // if added records were passed in the request they should be mentioned in the response\n if (requested?.added) {\n missingRows.push(\n ...requested.added.filter(record => {\n return !respondedRows.find(row => row[phantomIdField] == record[phantomIdField]) &&\n !respondedRemoved.find(row => row[phantomIdField] == record[phantomIdField] || row[idField] == record[phantomIdField]);\n }).map(record => ({ [phantomIdField] : record[phantomIdField], [idField] : '...' }))\n );\n if (missingRows.length) {\n const missingIds = missingRows.map(row => '#' + row[phantomIdField]).join(', ');\n messages.push(`- \"${storeId}\" store \"rows\" section should mention added record(s) ${missingIds} sent in the request. ` +\n 'It should contain the added records identifiers (both phantom and \"real\" ones assigned by the backend).');\n }\n }\n // if short responses are enabled\n if (this.supportShortSyncResponse) {\n // if the data is not object, will return error\n if (!missingRows.length && responded) {\n if (typeof responded !== 'object' || Array.isArray(responded)) {\n messages.push(`- \"${storeId}\" store section should be an Object.`);\n result[storeId]['...'] = '...';\n }\n // for request to edit records, if rows is present, it must be an array\n if (responded.rows && !Array.isArray(responded.rows)) {\n messages.push(`- \"${storeId}\" store \"rows\" section should be an array`);\n missingRows.push('...');\n }\n // removed if presented must be an array\n if (responded.removed && !Array.isArray(responded.removed)) {\n messages.push(`- \"${storeId}\" store \"removed\" section should be an array:`);\n missingRemoved.push('...');\n }\n }\n }\n // if short responses are disabled\n else {\n // if updated records were passed in the request they should be mentioned in the response\n if (requested?.updated) {\n const missingUpdatedRows = requested.updated.filter(record => !respondedRows.find(row => row[idField] == record[idField]))\n .map(record => ({ [idField] : record[idField] }));\n missingRows.push(...missingUpdatedRows);\n if (missingUpdatedRows.length) {\n const missingIds = missingUpdatedRows.map(row => '#' + row[idField]).join(', ');\n messages.push(`- \"${storeId}\" store \"rows\" section should mention updated record(s) ${missingIds} sent in the request. ` +\n `It should contain the updated record identifiers.`);\n showSupportShortSyncResponseNote = true;\n }\n }\n if (missingRows.length) {\n missingRows.push('...');\n }\n // if removed records were passed in the request they should be mentioned in the response\n if (requested?.removed) {\n missingRemoved.push(\n ...requested.removed.filter(record => !respondedRows.find(row => row[idField] == record[idField]))\n .map(record => ({ [idField] : record[idField] }))\n );\n if (missingRemoved.length) {\n const missingIds = missingRemoved.map(row => '#' + row[idField]).join(', ');\n messages.push(`- \"${storeId}\" store \"removed\" section should mention removed record(s) ${missingIds} sent in the request. ` +\n `It should contain the removed record identifiers.`);\n result[storeId].removed = missingRemoved;\n missingRemoved.push('...');\n showSupportShortSyncResponseNote = true;\n }\n }\n }\n if (missingRows.length) {\n result[storeId].rows = missingRows;\n }\n // get rid of store section if no rows/removed there\n if (!messages.length) {\n delete result[storeId];\n }\n // extend expected response w/ this store part\n Object.assign(expectedResponse, result);\n return { messages, showSupportShortSyncResponseNote };\n }\n getSyncResponseWarnings(response, requestDesc) {\n const\n messages = [],\n expectedResponse = {},\n request = requestDesc.pack;\n if (!this.skipSuccessProperty) {\n expectedResponse.success = true;\n }\n let showSupportShortSyncResponseNote = false;\n // iterate stores to check properties validity\n this.forEachCrudStore((store, storeId, storeInfo) => {\n const warnings = this.getStoreSyncResponseWarnings(storeInfo, request?.[storeId], response[storeId], expectedResponse);\n showSupportShortSyncResponseNote = showSupportShortSyncResponseNote || warnings.showSupportShortSyncResponseNote;\n messages.push(...warnings.messages);\n });\n if (messages.length) {\n messages.push('Please adjust your response to look like this:\\n' +\n JSON.stringify(expectedResponse, null, 4).replace(/\"\\.\\.\\.\":\\s*\"\\.\\.\\.\"/g, ',,,').replace(/\"\\.\\.\\.\"/g, '...'));\n if (showSupportShortSyncResponseNote) {\n messages.push(this.supportShortSyncResponseNote);\n }\n messages.push(this.disableValidationNote);\n }\n return messages;\n }\n validateSyncResponse(response, request) {\n const messages = this.getSyncResponseWarnings(response, request);\n if (messages.length) {\n console.warn(this.crudSyncValidationWarningPrefix + '\\n' + messages.join('\\n'));\n }\n }\n};\n", "import Store from '../../Core/data/Store.js';\nimport Delayable from '../../Core/mixin/Delayable.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\nimport ArrayHelper from '../../Core/helper/ArrayHelper.js';\nimport Objects from '../../Core/helper/util/Objects.js';\nimport Base from '../../Core/Base.js';\nimport Events from '../../Core/mixin/Events.js';\nimport AbstractCrudManagerValidation from './mixin/AbstractCrudManagerValidation.js';\n/**\n * @module Scheduler/crud/AbstractCrudManagerMixin\n */\nexport class AbstractCrudManagerError extends Error {}\nexport class CrudManagerRequestError extends AbstractCrudManagerError {\n constructor(cfg = {}) {\n super(cfg.message || cfg.request && StringHelper.capitalize(cfg.request?.type) + ' failed' || 'Crud Manager request failed');\n Object.assign(this, cfg);\n this.action = this.request?.type;\n }\n}\nconst\n storeSortFn = function(lhs, rhs, sortProperty) {\n if (lhs.store) {\n lhs = lhs.store;\n }\n if (rhs.store) {\n rhs = rhs.store;\n }\n lhs = lhs[sortProperty] || 0;\n rhs = rhs[sortProperty] || 0;\n return (lhs < rhs) ? -1 : ((lhs > rhs) ? 1 : 0);\n },\n // Sorter function to keep stores in loadPriority order\n storeLoadSortFn = function(lhs, rhs) {\n return storeSortFn(lhs, rhs, 'loadPriority');\n },\n // Sorter function to keep stores in syncPriority order\n storeSyncSortFn = function(lhs, rhs) {\n return storeSortFn(lhs, rhs, 'syncPriority');\n };\n/**\n * An abstract mixin that supplies most of the CrudManager functionality.\n * It implements basic mechanisms of collecting stores to organize batch communication with a server.\n * It does not contain methods related to _data transfer_ nor _encoding_.\n * These methods are to be provided in sub-classes.\n * Out of the box there are mixins implementing {@link Scheduler/crud/transport/AjaxTransport support of AJAX for data transferring}\n * and {@link Scheduler/crud/encoder/JsonEncoder JSON for data encoding system}.\n * For example this is how we make a model that will implement CrudManager protocol and use AJAX/JSON to pass the data\n * to the server:\n *\n * ```javascript\n * class SystemSettings extends JsonEncode(AjaxTransport(AbstractCrudManagerMixin(Model))) {\n * ...\n * }\n * ```\n *\n * ## Data transfer and encoding methods\n *\n * These are methods that must be provided by subclasses of this class:\n *\n * - {@link #function-sendRequest}\n * - {@link #function-cancelRequest}\n * - {@link #function-encode}\n * - {@link #function-decode}\n *\n * @mixin\n * @mixes Core/mixin/Delayable\n * @mixes Core/mixin/Events\n * @mixes Scheduler/crud/mixin/AbstractCrudManagerValidation\n * @abstract\n */\nexport default Target => {\n // Trigger $meta calculation to get up-to-date is \"isXXX\" flags\n // (kinky construction to avoid production minification faced in Angular https://github.com/bryntum/support/issues/2889)\n Target.$$meta = Target.$meta;\n const mixins = [];\n // These two mixins are mixed in the Scheduling Engine code ..but in its own way\n // so that Base.mixin() cannot understand that they are already there and applies them 2nd time\n if (!Target.isEvents) {\n mixins.push(Events);\n }\n if (!Target.isDelayable) {\n mixins.push(Delayable);\n }\n mixins.push(AbstractCrudManagerValidation);\n return class AbstractCrudManagerMixin extends (Target || Base).mixin(...mixins) {\n /**\n * Fires before server response gets applied to the stores. Return `false` to prevent data applying.\n * This event can be used for server data preprocessing. To achieve it user can modify the `response` object.\n * @event beforeResponseApply\n * @param {Scheduler.crud.AbstractCrudManager} source The CRUD manager.\n * @param {'sync'|'load'} requestType The request type (`sync` or `load`).\n * @param {Object} response The decoded server response object.\n * @preventable\n */\n /**\n * Fires before loaded data get applied to the stores. Return `false` to prevent data applying.\n * This event can be used for server data preprocessing. To achieve it user can modify the `response` object.\n * @event beforeLoadApply\n * @param {Scheduler.crud.AbstractCrudManager} source The CRUD manager.\n * @param {Object} response The decoded server response object.\n * @param {Object} options Options provided to the {@link #function-load} method.\n * @preventable\n */\n /**\n * Fires before sync response data get applied to the stores. Return `false` to prevent data applying.\n * This event can be used for server data preprocessing. To achieve it user can modify the `response` object.\n * @event beforeSyncApply\n * @param {Scheduler.crud.AbstractCrudManager} source The CRUD manager.\n * @param {Object} response The decoded server response object.\n * @preventable\n */\n static get $name() {\n return 'AbstractCrudManagerMixin';\n }\n //region Default config\n static get defaultConfig() {\n return {\n /**\n * The server revision stamp.\n * The _revision stamp_ is a number which should be incremented after each server-side change.\n * This property reflects the current version of the data retrieved from the server and gets updated\n * after each {@link #function-load} and {@link #function-sync} call.\n * @property {Number}\n * @readonly\n * @category CRUD\n */\n crudRevision : null,\n /**\n * A list of registered stores whose server communication will be collected into a single batch.\n * Each store is represented by a _store descriptor_.\n * @member {CrudManagerStoreDescriptor[]} crudStores\n * @category CRUD\n */\n /**\n * Sets the list of stores controlled by the CRUD manager.\n *\n * When adding a store to the CrudManager, make sure the server response format is correct for `load`\n * and `sync` requests. Learn more in the\n * [Working with data](#Scheduler/guides/data/crud_manager.md#loading-data) guide.\n *\n * Store can be provided by itself, its storeId or as a _store descriptor_.\n * @config {Core.data.Store[]|String[]|CrudManagerStoreDescriptor[]}\n * @category CRUD\n */\n crudStores : [],\n /**\n * Name of a store property to retrieve store identifiers from. Make sure you have an instance of a\n * store to use it by id. Store identifier is used as a container name holding corresponding store data\n * while transferring them to/from the server. By default, `storeId` property is used. And in case a\n * container identifier has to differ this config can be used:\n *\n * ```javascript\n * class CatStore extends Store {\n * static configurable = {\n * // store id is \"meow\" but for sending/receiving store data\n * // we want to have \"cats\" container in JSON, so we create a new property \"storeIdForCrud\"\n * id : 'meow',\n * storeIdForCrud : 'cats'\n * }\n * });\n *\n * // create an instance to use a store by id\n * new CatStore();\n *\n * class MyCrudManager extends CrudManager {\n * ...\n * crudStores : ['meow'],\n * // crud manager will get store identifier from \"storeIdForCrud\" property\n * storeIdProperty : 'storeIdForCrud'\n * });\n * ```\n * The `storeIdProperty` property can also be specified directly on a store:\n *\n * ```javascript\n * class CatStore extends Store {\n * static configurable = {\n * // storeId is \"meow\" but for sending/receiving store data\n * // we want to have \"cats\" container in JSON\n * id : 'meow',\n * // so we create a new property \"storeIdForCrud\"..\n * storeIdForCrud : 'cats',\n * // and point CrudManager to use it as the store identifier source\n * storeIdProperty : 'storeIdForCrud'\n * }\n * });\n *\n * class DogStore extends Store {\n * static configurable = {\n * // storeId is \"dogs\" and it will be used as a container name for the store data\n * storeId : 'dogs',\n * // id is set to get a store by identifier\n * id : 'dogs'\n * }\n * });\n *\n * // create an instance to use a store by id\n * new CatStore();\n * new DogStore();\n *\n * class MyCrudManager extends CrudManager {\n * ...\n * crudStores : ['meow', 'dogs']\n * });\n * ```\n * @config {String}\n * @category CRUD\n */\n storeIdProperty : 'storeId',\n crudFilterParam : 'filter',\n /**\n * Sends request to the server.\n * @function sendRequest\n * @param {Object} request The request to send. An object having following properties:\n * @param {'load'|'sync'} request.type Request type, can be either `load` or `sync`\n * @param {String} request.data {@link #function-encode Encoded} request.\n * @param {Function} request.success Callback to be started on successful request transferring\n * @param {Function} request.failure Callback to be started on request transfer failure\n * @param {Object} request.thisObj `this` reference for the above `success` and `failure` callbacks\n * @returns {Promise} The request promise.\n * @abstract\n */\n /**\n * Cancels request to the server.\n * @function cancelRequest\n * @param {Promise} promise The request promise to cancel (a value returned by corresponding\n * {@link #function-sendRequest} call).\n * @param {Function} reject Reject handle of the corresponding promise\n * @abstract\n */\n /**\n * Encodes request to the server.\n * @function encode\n * @param {Object} request The request to encode.\n * @returns {String} The encoded request.\n * @abstract\n */\n /**\n * Decodes response from the server.\n * @function decode\n * @param {String} response The response to decode.\n * @returns {Object} The decoded response.\n * @abstract\n */\n transport : {},\n /**\n * When `true` forces the CRUD manager to process responses depending on their `type` attribute.\n * So `load` request may be responded with `sync` response for example.\n * Can be used for smart server logic allowing the server to decide when it's better to respond with a\n * complete data set (`load` response) or it's enough to return just a delta (`sync` response).\n * @config {Boolean}\n * @default\n * @category CRUD\n */\n trackResponseType : false,\n /**\n * When `true` the Crud Manager does not require all updated and removed records to be mentioned in the\n * *sync* response. In this case response should include only server side changes.\n *\n * **Please note that added records should still be mentioned in response to provide real identifier\n * instead of the phantom one.**\n * @config {Boolean}\n * @default\n * @category CRUD\n */\n supportShortSyncResponse : true,\n /**\n * Field name to be used to transfer a phantom record identifier.\n * @config {String}\n * @default\n * @category CRUD\n */\n phantomIdField : '$PhantomId',\n /**\n * Field name to be used to transfer a phantom parent record identifier.\n * @config {String}\n * @default\n * @category CRUD\n */\n phantomParentIdField : '$PhantomParentId',\n /**\n * Specify `true` to automatically call {@link #function-load} method on the next frame after creation.\n *\n * Called on the next frame to allow a Scheduler (or similar) linked to a standalone CrudManager to\n * register its stores before loading starts.\n *\n * @config {Boolean}\n * @default\n * @category CRUD\n */\n autoLoad : false,\n /**\n * The timeout in milliseconds to wait before persisting changes to the server.\n * Used when {@link #config-autoSync} is set to `true`.\n * @config {Number}\n * @default\n * @category CRUD\n */\n autoSyncTimeout : 100,\n /**\n * `true` to automatically persist store changes after edits are made in any of the stores monitored.\n * Please note that sync request will not be invoked immediately but only after\n * {@link #config-autoSyncTimeout} interval.\n * @config {Boolean}\n * @default\n * @category CRUD\n */\n autoSync : false,\n /**\n * `True` to reset identifiers (defined by `idField` config) of phantom records before submitting them\n * to the server.\n * @config {Boolean}\n * @default\n * @category CRUD\n */\n resetIdsBeforeSync : true,\n /**\n * @member {CrudManagerStoreDescriptor[]} syncApplySequence\n * An array of stores presenting an alternative sync responses apply order.\n * Each store is represented by a _store descriptor_.\n * @category CRUD\n */\n /**\n * An array of store identifiers sets an alternative sync responses apply order.\n * By default, the order in which sync responses are applied to the stores is the same as they\n * registered in. But in case of some tricky dependencies between stores this order can be changed:\n *\n *```javascript\n * class MyCrudManager extends CrudManager {\n * // register stores (will be loaded in this order: 'store1' then 'store2' and finally 'store3')\n * crudStores : ['store1', 'store2', 'store3'],\n * // but we apply changes from server to them in an opposite order\n * syncApplySequence : ['store3', 'store2', 'store1']\n * });\n *```\n * @config {String[]}\n * @category CRUD\n */\n syncApplySequence : [],\n orderedCrudStores : [],\n /**\n * `true` to write all fields from the record to the server.\n * If set to `false` it will only send the fields that were modified.\n * Note that any fields that have {@link Core/data/field/DataField#config-persist} set to `false` will\n * still be ignored and fields having {@link Core/data/field/DataField#config-alwaysWrite} set to `true`\n * will always be included.\n * @config {Boolean}\n * @default\n * @category CRUD\n */\n writeAllFields : false,\n crudIgnoreUpdates : 0,\n autoSyncSuspendCounter : 0,\n // Flag that shows if crud manager performed successful load request\n crudLoaded : false,\n applyingLoadResponse : false,\n applyingSyncResponse : false,\n callOnFunctions : true\n };\n }\n static configurable = {\n /**\n * Convenience shortcut to set only the url to load from, when you do not need to supply any other config\n * options in the `load` section of the `transport` config.\n *\n * Using `loadUrl`:\n * ```javascript\n * {\n * loadUrl : 'read.php\n * }\n * ```\n *\n * Equals the following `transport` config:\n * ```javascript\n * {\n * transport : {\n * load : {\n * url : 'read.php'\n * }\n * }\n * }\n * ```\n *\n * When read at runtime, it will return the value from `transport.load.url`.\n *\n * @prp {String}\n */\n loadUrl : null,\n /**\n * Convenience shortcut to set only the url to sync to, when you do not need to supply any other config\n * options in the `sync` section of the `transport` config.\n *\n * Using `loadUrl`:\n * ```javascript\n * {\n * syncUrl : 'sync.php\n * }\n * ```\n *\n * Equals the following `transport` config:\n * ```javascript\n * {\n * transport : {\n * load : {\n * url : 'sync.php'\n * }\n * }\n * }\n * ```\n *\n * When read at runtime, it will return the value from `transport.sync.url`.\n *\n * @prp {String}\n */\n syncUrl : null,\n /**\n * Specify as `true` to force sync requests to be sent when calling `sync()`, even if there are no local\n * changes. Useful in a polling scenario, to keep client up to date with the backend.\n * @prp {Boolean}\n */\n forceSync : null\n };\n static delayable = {\n // Postponed to next frame, to allow Scheduler created after CrudManager to inject its stores\n // (timeRanges, resourceTimeRanges)\n doAutoLoad : 'raf'\n };\n get isCrudManager() {\n return true;\n }\n //endregion\n //region Init\n construct(config = {}) {\n this._requestId = 0;\n this.activeRequests = {};\n this.crudStoresIndex = {};\n super.construct(config);\n }\n afterConstruct() {\n super.afterConstruct();\n if (this.autoLoad) {\n this._autoLoadPromise = this.doAutoLoad();\n }\n }\n //endregion\n //region Configs\n get loadUrl() {\n return this.transport?.load?.url;\n }\n updateLoadUrl(url) {\n ObjectHelper.setPath(this, 'transport.load.url', url);\n }\n get syncUrl() {\n return this.transport?.sync?.url;\n }\n updateSyncUrl(url) {\n ObjectHelper.setPath(this, 'transport.sync.url', url);\n }\n //endregion\n //region Store descriptors & index\n /**\n * Returns a registered store descriptor.\n * @param {String|Core.data.Store} storeId The store identifier or registered store instance.\n * @returns {CrudManagerStoreDescriptor} The descriptor of the store.\n * @category CRUD\n */\n getStoreDescriptor(storeId) {\n if (!storeId) return null;\n if (storeId instanceof Store) return this.crudStores.find(storeDesc => storeDesc.store === storeId);\n if (typeof storeId === 'object') return this.crudStoresIndex[storeId.storeId];\n return this.crudStoresIndex[storeId] || this.getStoreDescriptor(Store.getStore(storeId));\n }\n fillStoreDescriptor(descriptor) {\n const\n { store } = descriptor,\n {\n storeIdProperty = this.storeIdProperty,\n modelClass\n } = store;\n if (!descriptor.storeId) {\n descriptor.storeId = store[storeIdProperty] || store.id;\n }\n if (!descriptor.idField) {\n descriptor.idField = modelClass.idField;\n }\n if (!descriptor.phantomIdField) {\n descriptor.phantomIdField = modelClass.phantomIdField;\n }\n if (!descriptor.phantomParentIdField) {\n descriptor.phantomParentIdField = modelClass.phantomParentIdField;\n }\n if (!('writeAllFields' in descriptor)) {\n descriptor.writeAllFields = store.writeAllFields;\n }\n return descriptor;\n }\n updateCrudStoreIndex() {\n const\n crudStoresIndex = this.crudStoresIndex = {};\n this.crudStores.forEach(store => store.storeId && (crudStoresIndex[store.storeId] = store));\n }\n //endregion\n //region Store collection (add, remove, get & iterate)\n /**\n * Returns a registered store.\n * @param {String} storeId Store identifier.\n * @returns {Core.data.Store} Found store instance.\n * @category CRUD\n */\n getCrudStore(storeId) {\n const storeDescriptor = this.getStoreDescriptor(storeId);\n return storeDescriptor?.store;\n }\n forEachCrudStore(fn, thisObj = this) {\n if (!fn) {\n throw new Error('Iterator function must be provided');\n }\n this.crudStores.every(store =>\n fn.call(thisObj, store.store, store.storeId, store) !== false\n );\n }\n set crudStores(stores) {\n this._crudStores = [];\n this.addCrudStore(stores);\n // Ensure preconfigured stores stay stable at the start of the array when\n // addPrioritizedStore attempts to insert in order. Only featured gantt/scheduler stores\n // must participate in the ordering. If they were configured in, they must not move.\n for (const store of this._crudStores) {\n store.loadPriority = store.syncPriority = 0;\n }\n }\n get crudStores() {\n return this._crudStores;\n }\n get orderedCrudStores() {\n return this._orderedCrudStores;\n }\n set orderedCrudStores(stores) {\n return this._orderedCrudStores = stores;\n }\n set syncApplySequence(stores) {\n this._syncApplySequence = [];\n this.addStoreToApplySequence(stores);\n }\n get syncApplySequence() {\n return this._syncApplySequence;\n }\n internalAddCrudStore(store) {\n const\n me = this;\n let storeInfo;\n // if store instance provided\n if (store instanceof Store) {\n storeInfo = { store };\n }\n else if (typeof store === 'object') {\n if (!store.store) {\n // not a store descriptor, assume it is a store config\n store = {\n storeId : store.id,\n store : new Store(store)\n };\n }\n storeInfo = store;\n }\n // if it's a store identifier\n else {\n storeInfo = { store : Store.getStore(store) };\n }\n me.fillStoreDescriptor(storeInfo);\n // store instance\n store = storeInfo.store;\n // if the store has \"setCrudManager\" hook - use it\n if (store.setCrudManager) {\n store.setCrudManager(me);\n }\n // otherwise decorate the store w/ \"crudManager\" property\n else {\n store.crudManager = me;\n }\n // Stores have a defaultConfig for pageSize. CrudManager does not support that.\n store.pageSize = null;\n // Prevent AjaxStores from performing their own CRUD operations if CrudManager is configured with an URL\n if (me.loadUrl || me.syncUrl) {\n store.autoCommit = false;\n store.autoLoad = false;\n if (store.createUrl || store.updateUrl || store.deleteUrl || store.readUrl) {\n console.warn('You have configured an URL on a Store that is handled by a CrudManager that is also configured with an URL. The Store URL\\'s should be removed.');\n }\n }\n // listen to store changes\n me.bindCrudStoreListeners(store);\n return storeInfo;\n }\n /**\n * Adds a store to the collection.\n *\n *```javascript\n * // append stores to the end of collection\n * crudManager.addCrudStore([\n * store1,\n * // storeId\n * 'bar',\n * // store descriptor\n * {\n * storeId : 'foo',\n * store : store3\n * },\n * {\n * storeId : 'bar',\n * store : store4,\n * // to write all fields of modified records\n * writeAllFields : true\n * }\n * ]);\n *```\n *\n * **Note:** Order in which stores are kept in the collection is very essential sometimes.\n * Exactly in this order the loaded data will be put into each store.\n *\n * When adding a store to the CrudManager, make sure the server response format is correct for `load` and `sync`\n * requests. Learn more in the [Working with data](#Scheduler/guides/data/crud_manager.md#loading-data) guide.\n *\n * @param {Core.data.Store|String|CrudManagerStoreDescriptor|Core.data.Store[]|String[]|CrudManagerStoreDescriptor[]} store\n * A store or list of stores. Each store might be specified by its instance, `storeId` or _descriptor_.\n * @param {Number} [position] The relative position of the store. If `fromStore` is specified the position\n * will be taken relative to it. If not specified then store(s) will be appended to the end of collection.\n * Otherwise, it will be just a position in stores collection.\n *\n * ```javascript\n * // insert stores store4, store5 to the start of collection\n * crudManager.addCrudStore([ store4, store5 ], 0);\n * ```\n *\n * @param {String|Core.data.Store|CrudManagerStoreDescriptor} [fromStore] The store relative to which position\n * should be calculated. Can be defined as a store identifier, instance or descriptor (the result of\n * {@link #function-getStoreDescriptor} call).\n *\n * ```javascript\n * // insert store6 just before a store having storeId equal to 'foo'\n * crudManager.addCrudStore(store6, 0, 'foo');\n *\n * // insert store7 just after store3 store\n * crudManager.addCrudStore(store7, 1, store3);\n * ```\n * @category CRUD\n */\n addCrudStore(store, position, fromStore) {\n store = ArrayHelper.asArray(store);\n if (!store?.length) {\n return;\n }\n const\n me = this,\n stores = store.map(me.internalAddCrudStore, me);\n // if no position specified then append stores to the end\n if (typeof position === 'undefined') {\n me.crudStores.push(...stores);\n }\n // if position specified\n else {\n // if specified the store relative to which we should insert new one(-s)\n if (fromStore) {\n if (fromStore instanceof Store || typeof fromStore !== 'object') fromStore = me.getStoreDescriptor(fromStore);\n // get its position\n position += me.crudStores.indexOf(fromStore);\n }\n // insert new store(-s)\n me.crudStores.splice(position, 0, ...stores);\n }\n me.orderedCrudStores.push(...stores);\n me.updateCrudStoreIndex();\n }\n // Adds configured scheduler stores to the store collection ensuring correct order\n // unless they're already registered.\n addPrioritizedStore(store) {\n const me = this;\n if (!me.hasCrudStore(store)) {\n me.addCrudStore(store, ArrayHelper.findInsertionIndex(store, me.crudStores, storeLoadSortFn));\n }\n if (!me.hasApplySequenceStore(store)) {\n me.addStoreToApplySequence(store, ArrayHelper.findInsertionIndex(store, me.syncApplySequence, storeSyncSortFn));\n }\n }\n hasCrudStore(store) {\n return this.crudStores?.some(s => s === store || s.store === store || s.storeId === store);\n }\n /**\n * Removes a store from collection. If the store was registered in alternative sync sequence list\n * it will be removed from there as well.\n *\n * ```javascript\n * // remove store having storeId equal to \"foo\"\n * crudManager.removeCrudStore(\"foo\");\n *\n * // remove store3\n * crudManager.removeCrudStore(store3);\n * ```\n *\n * @param {CrudManagerStoreDescriptor|String|Core.data.Store} store The store to remove. Either the store\n * descriptor, store identifier or store itself.\n * @category CRUD\n */\n removeCrudStore(store) {\n const\n me = this,\n stores = me.crudStores,\n foundStore = stores.find(s => s === store || s.store === store || s.storeId === store);\n if (foundStore) {\n // unbind store listeners\n me.unbindCrudStoreListeners(foundStore.store);\n delete me.crudStoresIndex[foundStore.storeId];\n ArrayHelper.remove(stores, foundStore);\n if (me.syncApplySequence) {\n me.removeStoreFromApplySequence(store);\n }\n }\n else {\n throw new Error('Store not found in stores collection');\n }\n }\n //endregion\n //region Store listeners\n bindCrudStoreListeners(store) {\n store.ion({\n name : store.id,\n // When a tentatively added record gets confirmed as permanent, this signals a change\n addConfirmed : 'onCrudStoreChange',\n change : 'onCrudStoreChange',\n destroy : 'onCrudStoreDestroy',\n thisObj : this\n });\n }\n unbindCrudStoreListeners(store) {\n this.detachListeners(store.id);\n }\n //endregion\n //region Apply sequence\n /**\n * Adds a store to the alternative sync responses apply sequence.\n * By default, the order in which sync responses are applied to the stores is the same as they registered in.\n * But this order can be changes either on construction step using {@link #config-syncApplySequence} option\n * or by calling this method.\n *\n * **Please note**, that if the sequence was not initialized before this method call then\n * you will have to do it yourself like this for example:\n *\n * ```javascript\n * // alternative sequence was not set for this crud manager\n * // so let's fill it with existing stores keeping the same order\n * crudManager.addStoreToApplySequence(crudManager.crudStores);\n *\n * // and now we can add our new store\n *\n * // we will load its data last\n * crudManager.addCrudStore(someNewStore);\n * // but changes to it will be applied first\n * crudManager.addStoreToApplySequence(someNewStore, 0);\n * ```\n * add registered stores to the sequence along with the store(s) you want to add\n *\n * @param {Core.data.Store|CrudManagerStoreDescriptor|Core.data.Store[]|CrudManagerStoreDescriptor[]} store The\n * store to add or its _descriptor_ (or array of stores or descriptors).\n * @param {Number} [position] The relative position of the store. If `fromStore` is specified the position\n * will be taken relative to it. If not specified then store(s) will be appended to the end of collection.\n * Otherwise, it will be just a position in stores collection.\n *\n * ```javascript\n * // insert stores store4, store5 to the start of sequence\n * crudManager.addStoreToApplySequence([ store4, store5 ], 0);\n * ```\n * @param {String|Core.data.Store|CrudManagerStoreDescriptor} [fromStore] The store relative to which position\n * should be calculated. Can be defined as a store identifier, instance or its descriptor (the result of\n * {@link #function-getStoreDescriptor} call).\n *\n * ```javascript\n * // insert store6 just before a store having storeId equal to 'foo'\n * crudManager.addStoreToApplySequence(store6, 0, 'foo');\n *\n * // insert store7 just after store3 store\n * crudManager.addStoreToApplySequence(store7, 1, store3);\n * ```\n * @category CRUD\n */\n addStoreToApplySequence(store, position, fromStore) {\n if (!store) {\n return;\n }\n store = ArrayHelper.asArray(store);\n const\n me = this,\n // loop over list of stores to add\n data = store.reduce((collection, store) => {\n const s = me.getStoreDescriptor(store);\n s && collection.push(s);\n return collection;\n }, []);\n // if no position specified then append stores to the end\n if (typeof position === 'undefined') {\n me.syncApplySequence.push(...data);\n // if position specified\n }\n else {\n let pos = position;\n // if specified the store relative to which we should insert new one(-s)\n if (fromStore) {\n if (fromStore instanceof Store || typeof fromStore !== 'object') fromStore = me.getStoreDescriptor(fromStore);\n // get its position\n pos += me.syncApplySequence.indexOf(fromStore);\n }\n // insert new store(-s)\n //me.syncApplySequence.splice.apply(me.syncApplySequence, [].concat([pos, 0], data));\n me.syncApplySequence.splice(pos, 0, ...data);\n }\n const sequenceKeys = me.syncApplySequence.map(({ storeId }) => storeId);\n me.orderedCrudStores = [...me.syncApplySequence];\n me.crudStores.forEach(storeDesc => {\n if (!sequenceKeys.includes(storeDesc.storeId)) {\n me.orderedCrudStores.push(storeDesc);\n }\n });\n }\n /**\n * Removes a store from the alternative sync sequence.\n *\n * ```javascript\n * // remove store having storeId equal to \"foo\"\n * crudManager.removeStoreFromApplySequence(\"foo\");\n * ```\n *\n * @param {CrudManagerStoreDescriptor|String|Core.data.Store} store The store to remove. Either the store\n * descriptor, store identifier or store itself.\n * @category CRUD\n */\n removeStoreFromApplySequence(store) {\n const index = this.syncApplySequence.findIndex(s => s === store || s.store === store || s.storeId === store);\n if (index > -1) {\n this.syncApplySequence.splice(index, 1);\n // ordered crud stores list starts with syncApplySequence, we can use same index\n this.orderedCrudStores.splice(index, 1);\n }\n }\n hasApplySequenceStore(store) {\n return this.syncApplySequence.some(s => s === store || s.store === store || s.storeId === store);\n }\n //endregion\n //region Events\n // Remove stores that are destroyed, to not try and apply response changes etc. to them\n onCrudStoreDestroy({ source : store }) {\n this.removeCrudStore(store);\n }\n onCrudStoreChange(event) {\n const me = this;\n if (me.crudIgnoreUpdates) {\n return;\n }\n /**\n * Fires when data in any of the registered data stores is changed.\n * ```javascript\n * crudManager.on('hasChanges', function (crud) {\n * // enable persist changes button when some store gets changed\n * saveButton.enable();\n * });\n * ```\n *\n * You can suspend this event with {@link #function-suspendChangeTracking} API call.\n *\n * @event hasChanges\n * @param {Scheduler.crud.AbstractCrudManager} source The CRUD manager.\n */\n if (me.crudStoreHasChanges(event?.source)) {\n me.trigger('hasChanges');\n if (me.autoSync) {\n me.scheduleAutoSync();\n }\n }\n else {\n me.trigger('noChanges');\n }\n }\n /**\n * Suspends automatic sync upon store changes. Can be called multiple times (it uses an internal counter).\n * @category CRUD\n */\n suspendAutoSync() {\n this.autoSyncSuspendCounter++;\n }\n /**\n * Resumes automatic sync upon store changes. Will schedule a sync if the internal counter is 0.\n * @param {Boolean} [doSync=true] Pass `true` to schedule a sync after resuming (if there are pending\n * changes) and `false` to not persist the changes.\n * @category CRUD\n */\n resumeAutoSync(doSync = true) {\n const me = this;\n me.autoSyncSuspendCounter--;\n if (me.autoSyncSuspendCounter <= 0) {\n me.autoSyncSuspendCounter = 0;\n // if configured to trigger persisting and there are changes\n if (doSync && me.autoSync && me.crudStoreHasChanges()) {\n me.scheduleAutoSync();\n }\n }\n }\n get isAutoSyncSuspended() {\n return this.autoSyncSuspendCounter > 0;\n }\n scheduleAutoSync() {\n const me = this;\n // add deferred call if it's not scheduled yet\n if (!me.hasTimeout('autoSync') && !me.isAutoSyncSuspended) {\n me.setTimeout({\n name : 'autoSync',\n fn : () => {\n me.sync().catch(error => {\n });\n },\n delay : me.autoSyncTimeout\n });\n }\n }\n async triggerFailedRequestEvents(request, response, responseText, fetchOptions) {\n const { options, type : requestType } = request;\n /**\n * Fires when a request fails.\n * @event requestFail\n * @param {Scheduler.crud.AbstractCrudManager} source The CRUD manager instance.\n * @param {'sync'|'load'} requestType The request type (`sync` or `load`).\n * @param {Object} response The decoded server response object.\n * @param {String} responseText The raw server response text\n * @param {Object} responseOptions The response options.\n */\n this.trigger('requestFail', { requestType, response, responseText, responseOptions : fetchOptions });\n /**\n * Fires when a {@link #function-load load request} fails.\n * @event loadFail\n * @param {Scheduler.crud.AbstractCrudManager} source The CRUD manager instance.\n * @param {Object} response The decoded server response object.\n * @param {String} responseText The raw server response text\n * @param {Object} responseOptions The response options.\n * @params {Object} options Options provided to the {@link #function-load} method.\n */\n /**\n * Fires when a {@link #function-sync sync request} fails.\n * @event syncFail\n * @param {Scheduler.crud.AbstractCrudManager} source The CRUD manager instance.\n * @param {Object} response The decoded server response object.\n * @param {String} responseText The raw server response text\n * @param {Object} responseOptions The response options.\n */\n this.trigger(requestType + 'Fail', { response, responseOptions : fetchOptions, responseText, options });\n }\n async internalOnResponse(request, responseText, fetchOptions) {\n const\n me = this,\n response = responseText ? me.decode(responseText) : null,\n { options, type : requestType } = request;\n if (responseText && !response) {\n console.error('Failed to parse response: ' + responseText);\n }\n if (!response || (me.skipSuccessProperty ? response.success === false : !response.success)) {\n me.triggerFailedRequestEvents(request, response, responseText, fetchOptions);\n }\n else if (\n me.trigger('beforeResponseApply', { requestType, response }) !== false &&\n me.trigger(`before${StringHelper.capitalize(requestType)}Apply`, { response, options }) !== false\n ) {\n me.crudRevision = response.revision;\n await me.applyResponse(request, response, options);\n // Might have been destroyed while applying response\n if (me.isDestroyed) {\n return;\n }\n /**\n * Fires on successful request completion after data gets applied to the stores.\n * @event requestDone\n * @param {Scheduler.crud.AbstractCrudManager} source The CRUD manager.\n * @param {'sync'|'load'} requestType The request type (`sync` or `load`).\n * @param {Object} response The decoded server response object.\n * @param {Object} responseOptions The server response options.\n */\n me.trigger('requestDone', { requestType, response, responseOptions : fetchOptions });\n /**\n * Fires on successful {@link #function-load load request} completion after data gets loaded to the stores.\n * @event load\n * @param {Scheduler.crud.AbstractCrudManager} source The CRUD manager.\n * @param {Object} response The decoded server response object.\n * @param {Object} responseOptions The server response options.\n * @params {Object} options Options provided to the {@link #load} method.\n */\n /**\n * Fires on successful {@link #function-sync sync request} completion.\n * @event sync\n * @param {Scheduler.crud.AbstractCrudManager} source The CRUD manager.\n * @param {Object} response The decoded server response object.\n * @param {Object} responseOptions The server response options.\n */\n me.trigger(requestType, { response, responseOptions : fetchOptions, options });\n if (requestType === 'load' || !me.crudStoreHasChanges()) {\n /**\n * Fires when registered stores get into state when they don't have any\n * not persisted change. This happens after {@link #function-load} or {@link #function-sync} request\n * completion. Or this may happen after a record update which turns its fields back to their original state.\n *\n * ```javascript\n * crudManager.on('nochanges', function (crud) {\n * // disable persist changes button when there is no changes\n * saveButton.disable();\n * });\n * ```\n *\n * You can suspend this event with {@link #function-suspendChangeTracking} API call.\n *\n * @event noChanges\n * @param {Scheduler.crud.AbstractCrudManager} source The CRUD manager.\n */\n me.trigger('noChanges');\n if (requestType === 'load') {\n me.emitCrudStoreEvents(request.pack.stores, 'afterRequest');\n }\n }\n }\n return response;\n }\n //endregion\n //region Changes tracking\n /**\n * Suspends {@link #event-hasChanges} and {@link #event-noChanges} events.\n * @category CRUD\n */\n suspendChangeTracking() {\n this.crudIgnoreUpdates++;\n }\n /**\n * Resumes {@link #event-hasChanges} and {@link #event-noChanges} events. By default, it will check for changes\n * and if there are any, `hasChanges` or `noChanges` event will be triggered.\n * @param {Boolean} [skipChangeCheck]\n * @category CRUD\n */\n resumeChangeTracking(skipChangeCheck) {\n if (this.crudIgnoreUpdates && !--this.crudIgnoreUpdates && !skipChangeCheck) {\n this.onCrudStoreChange();\n }\n }\n /**\n * Returns `true` if changes tracking is suspended\n * @property {Boolean}\n * @readonly\n * @category CRUD\n */\n get isChangeTrackingSuspended() {\n return this.crudIgnoreUpdates > 0;\n }\n /**\n * Returns `true` if any of registered stores (or some particular store) has non persisted changes.\n *\n * ```javascript\n * // if we have any unsaved changes\n * if (crudManager.crudStoreHasChanges()) {\n * // persist them\n * crudManager.sync();\n * // otherwise\n * } else {\n * alert(\"There are no unsaved changes...\");\n * }\n * ```\n *\n * @param {String|Core.data.Store} [storeId] The store identifier or store instance to check changes for.\n * If not specified then will check changes for all of the registered stores.\n * @returns {Boolean} `true` if there are not persisted changes.\n * @category CRUD\n */\n crudStoreHasChanges(storeId) {\n return storeId\n ? this.isCrudStoreDirty(this.getCrudStore(storeId))\n : this.crudStores.some(config => this.isCrudStoreDirty(config.store));\n }\n isCrudStoreDirty(store) {\n return Boolean(store.changes);\n }\n //endregion\n //region Load\n doAutoLoad() {\n return this.load().catch(error => {\n });\n }\n emitCrudStoreEvents(stores, eventName, eventParams) {\n const event = { action : 'read' + eventName, ...eventParams };\n for (const store of this.crudStores) {\n if (stores.includes(store.storeId)) {\n store.store.trigger(eventName, event);\n }\n }\n }\n getLoadPackage(options) {\n const\n pack = {\n type : 'load',\n requestId : this.requestId\n },\n stores = this.crudStores,\n optionsCopy = Object.assign({}, options);\n // This is a special option which does not apply to a store.\n // It's used as options to the AjaxTransport#sendRequest method\n delete optionsCopy.request;\n pack.stores = stores.map(store => {\n const\n opts = optionsCopy?.[store.storeId],\n pageSize = store.pageSize || store.store?.pageSize;\n if (opts || pageSize) {\n const\n params = Object.assign({\n storeId : store.storeId,\n page : 1\n }, opts);\n if (pageSize) {\n params.pageSize = pageSize;\n }\n store.currentPage = params.page;\n // Remove from common request options\n if (opts) {\n delete optionsCopy[store.storeId];\n }\n return params;\n }\n return store.storeId;\n });\n // Apply common request options\n Object.assign(pack, optionsCopy);\n return pack;\n }\n loadCrudStore(store, data, options) {\n const rows = data?.rows;\n if (options?.append || data?.append) {\n // Add records clean - that is they are not treated as new, syncable records\n // which need syncing with the server. They are *from* the server.\n store.add(rows, false, { clean : true });\n }\n else {\n store.data = rows;\n }\n store.trigger('load', { data : rows });\n }\n loadDataToCrudStore(storeDesc, data, options) {\n const\n store = storeDesc.store,\n rows = data?.rows;\n store.__loading = true;\n if (rows) {\n this.loadCrudStore(store, data, options, storeDesc);\n }\n store.__loading = false;\n }\n /**\n * Loads data to the Crud Manager\n * @param {Object} response A simple object representing the data.\n * The object structure matches the decoded `load` response structure:\n *\n * ```js\n * // load static data into crudManager\n * crudManager.loadCrudManagerData({\n * success : true,\n * resources : {\n * rows : [\n * { id : 1, name : 'John' },\n * { id : 2, name : 'Abby' }\n * ]\n * }\n * });\n * ```\n * @param {Object} [options] Extra data loading options.\n * @category CRUD\n */\n loadCrudManagerData(response, options = {}) {\n const me = this;\n me.trigger('beforeLoadCrudManagerData');\n // we don't want to react to store changes during loading of them\n me.suspendChangeTracking();\n // we load data to the stores in the order they're kept in this.stores array\n me.crudStores.forEach(storeDesc => {\n const\n storeId = storeDesc.storeId,\n data = response[storeId];\n if (data) {\n me.loadDataToCrudStore(storeDesc, data, options[storeId]);\n }\n });\n me.resumeChangeTracking(true);\n me.trigger('loadCrudManagerData');\n }\n /**\n * Returns true if the crud manager is currently loading data\n * @property {Boolean}\n * @readonly\n * @category CRUD\n */\n get isCrudManagerLoading() {\n return Boolean(this.activeRequests.load || this.applyingLoadResponse);\n }\n /**\n * Returns true if the crud manager is currently syncing data\n * @property {Boolean}\n * @readonly\n * @category CRUD\n */\n get isCrudManagerSyncing() {\n return Boolean(this.activeRequests.sync || this.applyingSyncResponse);\n }\n get isLoadingOrSyncing() {\n return Boolean(this.isCrudManagerLoading || this.isCrudManagerSyncing);\n }\n /**\n * Loads data to the stores registered in the crud manager. For example:\n *\n * ```javascript\n * crudManager.load(\n * // here are request parameters\n * {\n * store1 : { append : true, page : 3, smth : 'foo' },\n * store2 : { page : 2, bar : '!!!' }\n * }\n * ).then(\n * () => alert('OMG! It works!'),\n * ({ response, cancelled }) => console.log(`Error: ${cancelled ? 'Cancelled' : response.message}`)\n * );\n * ```\n *\n * ** Note: ** If there is an incomplete load request in progress then system will try to cancel it by calling {@link #function-cancelRequest}.\n * @param {Object|String} [options] The request parameters or a URL.\n * @param {Object} [options.request] An object which contains options to merge\n * into the options which are passed to {@link Scheduler/crud/transport/AjaxTransport#function-sendRequest}.\n * ```javascript\n * {\n * store1 : { page : 3, append : true, smth : 'foo' },\n * store2 : { page : 2, bar : '!!!' },\n * request : {\n * params : {\n * startDate : '2021-01-01'\n * }\n * }\n * },\n * ```\n *\n * Omitting request arg:\n * ```javascript\n * crudManager.load().then(\n * () => alert('OMG! It works!'),\n * ({ response, cancelled }) => console.log(`Error: ${cancelled ? 'Cancelled' : response.message}`)\n * );\n * ```\n *\n * When presented it should be an object where keys are store Ids and values are, in turn, objects\n * of parameters related to the corresponding store. These parameters will be transferred in each\n * store's entry in the `stores` property of the POST data.\n *\n * Additionally, for flat stores `append: true` can be specified to add loaded records to the existing records,\n * default is to remove corresponding store's existing records first.\n * **Please note** that for delta loading you can also use an {@link #config-trackResponseType alternative approach}.\n * @param {'sync'|'load'} [options.request.type] The request type. Either `load` or `sync`.\n * @param {String} [options.request.url] The URL for the request. Overrides the URL defined in the `transport`\n * object\n * @param {String} [options.request.data] The encoded _Crud Manager_ request data.\n * @param {Object} [options.request.params] An object specifying extra HTTP params to send with the request.\n * @param {Function} [options.request.success] A function to be started on successful request transferring.\n * @param {String} [options.request.success.rawResponse] `Response` object returned by the\n * [fetch api](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API).\n * @param {Function} [options.request.failure] A function to be started on request transfer failure.\n * @param {String} [options.request.failure.rawResponse] `Response` object returned by the\n * [fetch api](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API).\n * @param {Object} [options.request.thisObj] `this` reference for the above `success` and `failure` functions.\n * @returns {Promise} Promise, which is resolved if request was successful.\n * Both the resolve and reject functions are passed a `state` object. State object has following structure:\n *\n * ```\n * {\n * cancelled : Boolean, // **optional** flag, which is present when promise was rejected\n * rawResponse : String, // raw response from ajax request, either response xml or text\n * rawResponseText : String, // raw response text as String from ajax request\n * response : Object, // processed response in form of object\n * options : Object // options, passed to load request\n * }\n * ```\n *\n * If promise was rejected by {@link #event-beforeLoad} event, `state` object will have the following structure:\n *\n * ```\n * {\n * cancelled : true\n * }\n * ```\n * @category CRUD\n * @async\n */\n load(options) {\n if (typeof options === 'string') {\n options = {\n request : {\n url : options\n }\n };\n }\n const\n me = this,\n pack = me.getLoadPackage(options);\n me._autoLoadPromise = null;\n return new Promise((resolve, reject) => {\n /**\n * Fires before {@link #function-load load request} is sent. Return `false` to cancel load request.\n * @event beforeLoad\n * @param {Scheduler.crud.AbstractCrudManager} source The CRUD manager.\n * @param {Object} pack The data package which contains data for all stores managed by the crud manager.\n * @preventable\n */\n if (me.trigger('beforeLoad', { pack }) !== false) {\n // if another load request is in progress let's cancel it\n const { load } = me.activeRequests;\n if (load) {\n me.cancelRequest(load.desc, load.reject);\n me.trigger('loadCanceled', { pack });\n }\n const request = Objects.assign({\n id : pack.requestId,\n data : me.encode(pack),\n type : 'load',\n success : me.onCrudRequestSuccess,\n failure : me.onCrudRequestFailure,\n thisObj : me\n }, options?.request);\n me.activeRequests.load = {\n type : 'load',\n options,\n pack,\n resolve,\n reject(...args) {\n // sendRequest will start a fetch promise, which we cannot reject from here. In fact what we\n // need to do, is to make fetch.then() to not call any real handlers. Which is what we do here.\n request.success = request.failure = null;\n reject(...args);\n },\n id : pack.requestId,\n desc : me.sendRequest(request)\n };\n me.emitCrudStoreEvents(pack.stores, 'loadStart');\n me.trigger('loadStart', { pack });\n }\n else {\n /**\n * Fired after {@link #function-load load request} was canceled by some {@link #event-beforeLoad}\n * listener or due to incomplete prior load request.\n * @event loadCanceled\n * @param {Scheduler.crud.AbstractCrudManager} source The CRUD manager.\n * @param {Object} pack The data package which contains data for all stores managed by the crud\n * manager.\n */\n me.trigger('loadCanceled', { pack });\n reject({ cancelled : true });\n }\n });\n }\n getActiveCrudManagerRequest(requestType) {\n let request = this.activeRequests[requestType];\n if (!request && this.trackResponseType) {\n request = Object.values(this.activeRequests)[0];\n }\n return request;\n }\n //endregion\n //region Changes (prepare, process, get)\n prepareAddedRecordData(record, storeInfo) {\n const\n me = this,\n { store } = storeInfo,\n { isTree } = store,\n phantomIdField = storeInfo.phantomIdField || me.phantomIdField,\n phantomParentIdField = storeInfo.phantomParentIdField || me.phantomParentIdField,\n subStoreFields = store.modelClass.allFields.filter(field => field.subStore),\n cls = record.constructor,\n data = Object.assign(record.persistableData, {\n [phantomIdField] : record.id\n });\n if (isTree) {\n const { parent } = record;\n if (parent && !parent.isRoot && parent.isPhantom) {\n data[phantomParentIdField] = parent.id;\n }\n }\n if (me.resetIdsBeforeSync) {\n ObjectHelper.deletePath(data, cls.idField);\n }\n // If we have store fields that should be persisted w/ Crud Manager protocol\n subStoreFields.forEach(field => {\n const subStore = record.get(field.name);\n if (subStore.allCount) {\n data[field.dataSource] = {\n added : subStore.getRange()\n .map(record => me.prepareAddedRecordData(record, { store : subStore }))\n };\n }\n });\n return data;\n }\n prepareAdded(list, storeInfo) {\n return list.filter(record => record.isValid).map(record => this.prepareAddedRecordData(record, storeInfo));\n }\n prepareUpdated(list, storeInfo) {\n const\n { store } = storeInfo,\n { isTree } = store,\n writeAllFields = storeInfo.writeAllFields || (storeInfo.writeAllFields !== false && this.writeAllFields),\n phantomParentIdField = storeInfo.phantomParentIdField || this.phantomParentIdField,\n subStoreFields = store.modelClass.allFields.filter(field => field.subStore);\n if (storeInfo.store.tree) {\n const rootNode = storeInfo.store.rootNode;\n list = list.filter(record => record !== rootNode);\n }\n return list.filter(record => record.isValid).reduce((data, record) => {\n let recordData;\n // write all fields\n if (writeAllFields) {\n recordData = record.persistableData;\n }\n else {\n recordData = record.modificationDataToWrite;\n }\n if (isTree) {\n const { parent } = record;\n if (parent && !parent.isRoot && parent.isPhantom) {\n recordData[phantomParentIdField] = parent.id;\n }\n }\n // If we have store fields that should be persisted w/ Crud Manager protocal\n subStoreFields.forEach(field => {\n const subStore = record.get(field.name);\n recordData[field.dataSource] = this.getCrudStoreChanges({ store : subStore });\n });\n // recordData can be null\n if (!ObjectHelper.isEmpty(recordData)) {\n data.push(recordData);\n }\n return data;\n }, []);\n }\n prepareRemoved(list) {\n return list.map(record => {\n const cls = record.constructor;\n return ObjectHelper.setPath({}, cls.idField, record.id);\n });\n }\n getCrudStoreChanges(storeDescriptor) {\n const { store } = storeDescriptor;\n let { added = [], modified : updated = [], removed = [] } = (store.changes || {}),\n result;\n if (added.length) added = this.prepareAdded(added, storeDescriptor);\n if (updated.length) updated = this.prepareUpdated(updated, storeDescriptor);\n if (removed.length) removed = this.prepareRemoved(removed);\n // if this store has changes\n if (added.length || updated.length || removed.length) {\n result = {};\n if (added.length) result.added = added;\n if (updated.length) result.updated = updated;\n if (removed.length) result.removed = removed;\n }\n return result;\n }\n getChangesetPackage() {\n const { changes } = this;\n return changes || this.forceSync\n ? {\n type : 'sync',\n requestId : this.requestId,\n revision : this.crudRevision,\n ...changes\n } : null;\n }\n //endregion\n //region Apply\n /**\n * Returns current changes as an object consisting of added/modified/removed arrays of records for every\n * managed store, keyed by each store's `id`. Returns `null` if no changes exist. Format:\n *\n * ```javascript\n * {\n * resources : {\n * added : [{ name : 'New guy' }],\n * modified : [{ id : 2, name : 'Mike' }],\n * removed : [{ id : 3 }]\n * },\n * events : {\n * modified : [{ id : 12, name : 'Cool task' }]\n * },\n * ...\n * }\n * ```\n *\n * @property {Object}\n * @readonly\n * @category CRUD\n */\n get changes() {\n const data = {};\n this.crudStores.forEach(store => {\n const changes = this.getCrudStoreChanges(store);\n if (changes) {\n data[store.storeId] = changes;\n }\n });\n return Object.keys(data).length > 0 ? data : null;\n }\n getRowsToApplyChangesTo({ store, storeId }, storeResponse, storePack) {\n const\n me = this,\n { modelClass } = store,\n idDataSource = modelClass.idField,\n // request data\n {\n updated : requestUpdated,\n removed : requestRemoved\n } = storePack || {};\n let rows, removed, remote;\n // If the response contains the store section\n if (storeResponse) {\n remote = true;\n const respondedIds = {};\n // responded record changes/removals\n rows = storeResponse.rows?.slice() || [];\n removed = storeResponse.removed?.slice() || [];\n // Collect hash w/ identifiers of responded records\n [...rows, ...removed].forEach(responseRecord => {\n const id = ObjectHelper.getPath(responseRecord, idDataSource);\n respondedIds[id] = true;\n });\n // If it's told to support providing server changes only in response\n // CrudManager should collect other records to commit from current requested data\n if (me.supportShortSyncResponse) {\n // append records requested to update (if not there already)\n requestUpdated?.forEach(data => {\n const id = ObjectHelper.getPath(data, idDataSource);\n // if response doesn't include\n if (!respondedIds[id]) {\n rows.push({ [idDataSource] : id });\n }\n });\n // append records requested to remove (if not there already)\n requestRemoved?.forEach(data => {\n const id = ObjectHelper.getPath(data, idDataSource);\n // if response doesn't include\n if (!respondedIds[id]) {\n removed.push({ [idDataSource] : id });\n }\n });\n }\n }\n // If there is no this store section we use records mentioned in the current request\n else if (requestUpdated || requestRemoved) {\n remote = false;\n rows = requestUpdated;\n removed = requestRemoved;\n }\n // return nullish \"rows\"/\"removed\" if no entries\n rows = rows?.length ? rows : null;\n removed = removed?.length ? removed : null;\n return {\n rows,\n removed,\n remote\n };\n }\n applyChangesToStore(storeDesc, storeResponse, storePack) {\n const\n me = this,\n phantomIdField = storeDesc.phantomIdField || me.phantomIdField,\n { store } = storeDesc,\n idField = store.modelClass.getFieldDataSource('id'),\n subStoreFields = store.modelClass.allFields.filter(field => field.subStore),\n // collect records we need to process\n { rows, removed, remote } = me.getRowsToApplyChangesTo(storeDesc, storeResponse, storePack),\n added = [],\n updated = [];\n // Convert to the { updated, added } format accepted by stores\n if (rows) {\n for (const data of rows) {\n // Existing records are updated\n if (store.getById(data[phantomIdField] ?? data[idField])) {\n updated.push(data);\n }\n // Others added\n else {\n added.push(data);\n }\n }\n }\n const extraLogEntries = [];\n // Handle sub-stores (if any)\n if (updated.length && subStoreFields.length) {\n updated.forEach(updateData => {\n const\n record = store.getById(updateData[phantomIdField] ?? updateData[idField]),\n // find the request portion related to the record\n recordRequest = storePack.added?.find(t => t[phantomIdField] == updateData[phantomIdField]) ||\n storePack.updated?.find(t => t[idField] == updateData[idField]);\n const extraLogInfo = {};\n subStoreFields.forEach(field => {\n const store = record.get(field.name);\n me.applyChangesToStore({ store }, updateData[field.dataSource],\n recordRequest?.[field.dataSource]\n );\n // We're putting the store field entry to the log\n // just to indicate the fact it was actually changed.\n // The value will not be used for comparison so we can use any.\n extraLogInfo[field.dataSource] = 'foo';\n delete updateData[field.dataSource];\n });\n extraLogEntries.push([record, extraLogInfo]);\n });\n }\n // process added/updated records\n const log = store.applyChangeset({ removed, added, updated }, null, phantomIdField, remote, true);\n extraLogEntries.forEach(([record, logEntry]) => Object.assign(log.get(record.id), logEntry));\n return log;\n }\n applySyncResponse(response, request) {\n const\n me = this,\n stores = me.orderedCrudStores;\n me.applyingChangeset = me.applyingSyncResponse = true;\n me.suspendChangeTracking();\n for (const store of stores) {\n me.applyChangesToStore(store, response[store.storeId], request?.pack?.[store.storeId]);\n }\n me.resumeChangeTracking(true);\n me.applyingChangeset = me.applyingSyncResponse = false;\n }\n applyLoadResponse(response, options) {\n this.applyingLoadResponse = true;\n this.loadCrudManagerData(response, options);\n this.applyingLoadResponse = false;\n }\n async applyResponse(request, response, options) {\n const\n me = this,\n // in trackResponseType mode we check response type before deciding how to react on the response\n responseType = me.trackResponseType && response.type || request.type;\n switch (responseType) {\n case 'load' :\n if (me.validateResponse) {\n me.validateLoadResponse(response);\n }\n me.applyLoadResponse(response, options);\n break;\n case 'sync' :\n if (me.validateResponse) {\n me.validateSyncResponse(response, request);\n }\n me.applySyncResponse(response, request);\n break;\n }\n }\n /**\n * Applies a set of changes, as an object keyed by store id, to the affected stores. This function is intended\n * to use in apps that handle their own data syncing, it is not needed when using the CrudManager approach.\n *\n * Example of a changeset:\n * ```javascript\n * project.applyChangeset({\n * events : {\n * added : [\n * { id : 10, name : 'Event 10', startDate : '2022-06-07' }\n * ],\n * updated : [\n * { id : 5, name : 'Changed' }\n * ],\n * removed : [\n * { id : 1 }\n * ]\n * },\n * resources : { ... },\n * ...\n * });\n * ```\n *\n * Optionally accepts a `transformFn` to convert an incoming changeset to the expected format.\n * See {@link Core/data/Store#function-applyChangeset} for more details.\n *\n * @param {Object} changes Changeset to apply, an object keyed by store id where each value follows the\n * format described in {@link Core/data/Store#function-applyChangeset}\n * @param {Function} [transformFn] Optional function used to preprocess a changeset per store in a different\n * format, should return an object with the format expected by {@link Core/data/Store#function-applyChangeset}\n * @param {String} [phantomIdField] Field used by the backend when communicating a record being assigned a\n * proper id instead of a phantom id\n */\n applyChangeset(changes, transformFn = null, phantomIdField, logChanges = false) {\n const\n me = this,\n log = logChanges ? new Map() : undefined;\n me.suspendAutoSync();\n me.suspendChangeTracking();\n for (const { store, phantomIdField } of me.orderedCrudStores) {\n if (changes[store.id]) {\n const storeLog = store.applyChangeset(\n changes[store.id],\n transformFn,\n phantomIdField || me.phantomIdField,\n // mark this changeset as remote to enforce it\n true,\n logChanges\n );\n if (storeLog) {\n log.set(store.id, storeLog);\n }\n }\n }\n me.resumeChangeTracking(true);\n me.resumeAutoSync(false);\n return log;\n }\n //endregion\n /**\n * Generates unique request identifier.\n * @internal\n * @template\n * @returns {Number} The request identifier.\n * @category CRUD\n */\n get requestId() {\n return Number.parseInt(`${Date.now()}${(this._requestId++)}`);\n }\n /**\n * Persists changes made on the registered stores to the server and/or receives changes made on the backend.\n * Usage:\n *\n * ```javascript\n * // persist and run a callback on request completion\n * crud.sync().then(\n * () => console.log(\"Changes saved...\"),\n * ({ response, cancelled }) => console.log(`Error: ${cancelled ? 'Cancelled' : response.message}`)\n * );\n * ```\n *\n * ** Note: ** If there is an incomplete sync request in progress then system will queue the call and delay it\n * until previous request completion.\n * In this case {@link #event-syncDelayed} event will be fired.\n *\n * ** Note: ** Please take a look at {@link #config-autoSync} config. This option allows to persist changes\n * automatically after any data modification.\n *\n * ** Note: ** By default a sync request is only sent if there are any local {@link #property-changes}. To\n * always send a request when calling this function, configure {@link #config-forceSync} as `true`.\n *\n * @returns {Promise} Promise, which is resolved if request was successful.\n * Both the resolve and reject functions are passed a `state` object. State object has the following structure:\n * ```\n * {\n * cancelled : Boolean, // **optional** flag, which is present when promise was rejected\n * rawResponse : String, // raw response from ajax request, either response xml or text\n * rawResponseText : String, // raw response text as String from ajax request\n * response : Object, // processed response in form of object\n * }\n * ```\n * If promise was rejected by the {@link #event-beforeSync} event, `state` object will have this structure:\n * ```\n * {\n * cancelled : true\n * }\n * ```\n * @category CRUD\n * @async\n */\n sync() {\n const me = this;\n // A direct call to sync cancels any outstanding autoSync\n me.clearTimeout('autoSync');\n if (me.activeRequests.sync) {\n // let's delay this call and start it only after server response\n /**\n * Fires after {@link #function-sync sync request} was delayed due to incomplete previous one.\n * @event syncDelayed\n * @param {Scheduler.crud.AbstractCrudManager} source The CRUD manager.\n * @param {Object} arguments The arguments of {@link #function-sync} call.\n */\n me.trigger('syncDelayed');\n // Queue sync request after current one\n return me.activeSyncPromise = me.activeSyncPromise.finally(() => me.sync());\n }\n // Store current request promise. While this one is pending, all following sync requests will create chain\n // of sequential promises\n return me.activeSyncPromise = new Promise((resolve, reject) => {\n // get current changes set package\n const pack = me.getChangesetPackage();\n // if no data to persist we resolve immediately\n if (!pack) {\n resolve(null);\n return;\n }\n /**\n * Fires before {@link #function-sync sync request} is sent. Return `false` to cancel sync request.\n *\n * ```javascript\n * crudManager.on('beforesync', function() {\n * // cannot persist changes before at least one record is added\n * // to the `someStore` store\n * if (!someStore.getCount()) return false;\n * });\n * ```\n * @event beforeSync\n * @param {Scheduler.crud.AbstractCrudManager} source The CRUD manager.\n * @param {Object} pack The data package which contains data for all stores managed by the crud manager.\n * @preventable\n */\n if (me.trigger('beforeSync', { pack }) !== false) {\n me.trigger('syncStart', { pack });\n // keep active request details\n me.activeRequests.sync = {\n type : 'sync',\n pack,\n resolve,\n reject,\n id : pack.requestId,\n desc : me.sendRequest({\n id : pack.requestId,\n data : me.encode(pack),\n type : 'sync',\n success : me.onCrudRequestSuccess,\n failure : me.onCrudRequestFailure,\n thisObj : me\n })\n };\n }\n else {\n /**\n * Fires after {@link #function-sync sync request} was canceled by some {@link #event-beforeSync} listener.\n * @event syncCanceled\n * @param {Scheduler.crud.AbstractCrudManager} source The CRUD manager.\n * @param {Object} pack The data package which contains data for all stores managed by the crud manager.\n */\n me.trigger('syncCanceled', { pack });\n reject({ cancelled : true });\n }\n }).catch(error => {\n // If the request was not cancelled in beforeSync listener, forward the error so the user's `catch` handler can catch it\n if (error && !error.cancelled) {\n throw error;\n }\n // Pass the error object as a param to the next `then` chain\n return error;\n });\n }\n async onCrudRequestSuccess(rawResponse, fetchOptions, request) {\n const\n me = this,\n {\n type : requestType,\n id : requestId\n } = request;\n if (me.isDestroyed) return;\n let responseText = '';\n request = me.activeRequests[requestType];\n // we throw exception below to let events trigger first in internalOnResponse() call\n try {\n responseText = await rawResponse.text();\n }\n catch (e) {\n }\n // since we break the method w/ promises chain ..need to check if the instance is not destroyed in the meantime\n if (me.isDestroyed) return;\n // This situation should never occur.\n // In the load() method, if a load is called while there is a load\n // ongoing, the ongoing Transport request is cancelled and loadCanceled triggered.\n // But having got here, it's too late to cancel a Transport request, so\n // the operation is unregistered below.\n // In the sync() method, if a sync is called while there is a sync\n // ongoing, it waits until completion, before syncing.\n // The activeRequest for any operation should NEVER be able to be\n // replaced while this operation is ongoing, so this must be fatal.\n if (request?.id !== requestId) {\n throw new Error(`Interleaved ${requestType} operation detected`);\n }\n // Reset the active request info before we enter async code which could allow\n // application code to run which could potentially call another request.\n // It is too late for this request to be canceled - the activeRequest represented\n // the Transport object and that has completed now.\n me.activeRequests[requestType] = null;\n const response = await me.internalOnResponse(request, responseText, fetchOptions);\n // since we break the method w/ promises chain ..need to check if the instance is not destroyed in the meantime\n if (me.isDestroyed) return;\n if (!response || (me.skipSuccessProperty ? response?.success === false : !response?.success)) {\n const error = {\n rawResponse,\n response,\n request\n };\n if (response?.message) {\n error.message = response.message;\n }\n request.reject(new CrudManagerRequestError(error));\n }\n // Successful request type done flag (this.crudLoaded or this.crudSynced)..\n me['crud' + StringHelper.capitalize(request.type) + 'ed'] = true;\n request.resolve({ response, rawResponse, responseText, request });\n }\n async onCrudRequestFailure(rawResponse, fetchOptions, request) {\n const me = this;\n if (me.isDestroyed) return;\n request = me.activeRequests[request.type];\n const\n signal = fetchOptions?.abortController?.signal,\n wasAborted = Boolean(signal?.aborted);\n if (!wasAborted) {\n let response,\n responseText = '';\n try {\n responseText = await rawResponse.text();\n response = me.decode(responseText);\n }\n catch (e) {\n }\n // since we break the method w/ promises chain ..need to check if the instance is not destroyed in the meantime\n if (me.isDestroyed) return;\n me.triggerFailedRequestEvents(request, response, responseText, fetchOptions);\n // since we break the method w/ promises chain ..need to check if the instance is not destroyed in the meantime\n if (me.isDestroyed) return;\n request.reject(new CrudManagerRequestError({\n rawResponse,\n request\n }));\n }\n // reset the active request info\n me.activeRequests[request.type] = null;\n }\n /**\n * Accepts all changes in all stores, resets the modification tracking:\n * * Clears change tracking for all records\n * * Clears added\n * * Clears modified\n * * Clears removed\n * Leaves the store in an \"unmodified\" state.\n * @category CRUD\n */\n acceptChanges() {\n this.crudStores.forEach(store => store.store.acceptChanges());\n }\n /**\n * Reverts all changes in all stores and re-inserts any records that were removed locally. Any new uncommitted\n * records will be removed.\n * @category CRUD\n */\n revertChanges() {\n // the method aliases revertCrudStoreChanges\n this.revertCrudStoreChanges();\n }\n revertCrudStoreChanges() {\n const { usesSingleAssignment } = this.eventStore;\n // Ignore assignment store if using single assignment, otherwise reverting changes will undo changes from\n // reverting the event store after reassignment\n this.orderedCrudStores.forEach(({ store }) => (!store.isAssignmentStore || !usesSingleAssignment) && store.revertChanges());\n }\n /**\n * Removes all stores and cancels active requests.\n * @category CRUD\n * @internal\n */\n doDestroy() {\n const\n me = this,\n { load, sync } = me.activeRequests;\n load && me.cancelRequest(load.desc, load.reject);\n sync && me.cancelRequest(sync.desc, sync.reject);\n while (me.crudStores.length > 0) {\n me.removeCrudStore(me.crudStores[0]);\n }\n super.doDestroy && super.doDestroy();\n }\n };\n};\n", "import Base from '../../../Core/Base.js';\nimport AjaxHelper from '../../../Core/helper/AjaxHelper.js';\nimport Objects from '../../../Core/helper/util/Objects.js';\n/**\n * @module Scheduler/crud/transport/AjaxTransport\n */\n/**\n * Implements data transferring functional that can be used for {@link Scheduler.crud.AbstractCrudManager} super classing.\n * Uses the fetch API for transport, https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API\n *\n * ```javascript\n * // create a new CrudManager using AJAX as a transport system and JSON for encoding\n * class MyCrudManager extends AjaxTransport(JsonEncode(AbstractCrudManager)) {}\n * ```\n *\n * @abstract\n * @mixin\n */\nexport default Target => class AjaxTransport extends (Target || Base) {\n static get $name() {\n return 'AjaxTransport';\n }\n /**\n * Configuration of the AJAX requests used by _Crud Manager_ to communicate with a server-side.\n *\n * ```javascript\n * transport : {\n * load : {\n * url : 'http://mycool-server.com/load.php',\n * // HTTP request parameter used to pass serialized \"load\"-requests\n * paramName : 'data',\n * // pass extra HTTP request parameter\n * params : {\n * foo : 'bar'\n * }\n * },\n * sync : {\n * url : 'http://mycool-server.com/sync.php',\n * // specify Content-Type for requests\n * headers : {\n * 'Content-Type' : 'application/json'\n * }\n * }\n * }\n *```\n * Since the class uses Fetch API you can use\n * any its [Request interface](https://developer.mozilla.org/en-US/docs/Web/API/Request) options:\n *\n * ```javascript\n * transport : {\n * load : {\n * url : 'http://mycool-server.com/load.php',\n * // HTTP request parameter used to pass serialized \"load\"-requests\n * paramName : 'data',\n * // pass few Fetch API options\n * method : 'GET',\n * credentials : 'include',\n * cache : 'no-cache'\n * },\n * sync : {\n * url : 'http://mycool-server.com/sync.php',\n * // specify Content-Type for requests\n * headers : {\n * 'Content-Type' : 'application/json'\n * },\n * credentials : 'include'\n * }\n * }\n *```\n *\n * An object where you can set the following possible properties:\n * @config {Object} transport\n * @property {Object} [transport.load] Load requests configuration:\n * @property {String} [transport.load.url] URL to request for data loading.\n * @property {String} [transport.load.method='GET'] HTTP method to be used for load requests.\n * @property {String} [transport.load.paramName='data'] Name of the parameter that will contain a serialized `load`\n * request. The value is mandatory for requests using `GET` method (default for `load`) so if the value is not\n * provided `data` string is used as default.\n * This value is optional for HTTP methods like `POST` and `PUT`, the request body will be used for data\n * transferring in these cases.\n * @property {Object} [transport.load.params] An object containing extra HTTP parameters to pass to the server when\n * sending a `load` request.\n *\n * ```javascript\n * transport : {\n * load : {\n * url : 'http://mycool-server.com/load.php',\n * // HTTP request parameter used to pass serialized \"load\"-requests\n * paramName : 'data',\n * // pass extra HTTP request parameter\n * // so resulting URL will look like: http://mycool-server.com/load.php?userId=123456&data=...\n * params : {\n * userId : '123456'\n * }\n * },\n * ...\n * }\n * ```\n * @property {Object} [transport.load.headers] An object containing headers to pass to each server request.\n *\n * ```javascript\n * transport : {\n * load : {\n * url : 'http://mycool-server.com/load.php',\n * // HTTP request parameter used to pass serialized \"load\"-requests\n * paramName : 'data',\n * // specify Content-Type for \"load\" requests\n * headers : {\n * 'Content-Type' : 'application/json'\n * }\n * },\n * ...\n * }\n * ```\n * @property {Object} [transport.load.fetchOptions] **DEPRECATED:** Any Fetch API options can be simply defined on\n * the upper configuration level:\n * ```javascript\n * transport : {\n * load : {\n * url : 'http://mycool-server.com/load.php',\n * // HTTP request parameter used to pass serialized \"load\"-requests\n * paramName : 'data',\n * // Fetch API options\n * method : 'GET',\n * credentials : 'include'\n * },\n * ...\n * }\n * ```\n * @property {Object} [transport.load.requestConfig] **DEPRECATED:** The config options can be defined on the upper\n * configuration level.\n * @property {Object} [transport.sync] Sync requests (`sync` in further text) configuration:\n * @property {String} [transport.sync.url] URL to request for `sync`.\n * @property {String} [transport.sync.method='POST'] HTTP request method to be used for `sync`.\n * @property {String} [transport.sync.paramName=undefined] Name of the parameter in which `sync` data will be\n * transferred. This value is optional for requests using methods like `POST` and `PUT`, the request body will be\n * used for data transferring in this case (default for `sync`). And the value is mandatory for requests using `GET`\n * method (if the value is not provided `data` string will be used as fallback).\n * @property {Object} [transport.sync.params] HTTP parameters to pass with an HTTP request handling `sync`.\n *\n * ```javascript\n * transport : {\n * sync : {\n * url : 'http://mycool-server.com/sync.php',\n * // extra HTTP request parameter\n * params : {\n * userId : '123456'\n * }\n * },\n * ...\n * }\n * ```\n * @property {Object} [transport.sync.headers] HTTP headers to pass with an HTTP request handling `sync`.\n *\n * ```javascript\n * transport : {\n * sync : {\n * url : 'http://mycool-server.com/sync.php',\n * // specify Content-Type for \"sync\" requests\n * headers : {\n * 'Content-Type' : 'application/json'\n * }\n * },\n * ...\n * }\n * ```\n * @property {Object} [transport.sync.fetchOptions] **DEPRECATED:** Any Fetch API options can be simply defined on\n * the upper configuration level:\n * ```javascript\n * transport : {\n * sync : {\n * url : 'http://mycool-server.com/sync.php',\n * credentials : 'include'\n * },\n * ...\n * }\n * ```\n * @property {Object} [transport.sync.requestConfig] **DEPRECATED:** The config options can be defined on the upper\n * configuration level.\n * @category CRUD\n */\n static get defaultMethod() {\n return {\n load : 'GET',\n sync : 'POST'\n };\n }\n /**\n * Cancels a sent request.\n * @param {Promise} requestPromise The Promise object wrapping the Request to be cancelled.\n * The _requestPromise_ is the value returned from the corresponding {@link #function-sendRequest} call.\n * @category CRUD\n */\n cancelRequest(requestPromise, reject) {\n requestPromise.abort?.();\n if (!this.isDestroying) {\n reject({ cancelled : true });\n }\n }\n shouldUseBodyForRequestData(packCfg, method, paramName) {\n return !(method === 'HEAD' || method === 'GET') && !paramName;\n }\n /**\n * Sends a _Crud Manager_ request to the server.\n * @param {Object} request The request configuration object having following properties:\n * @param {'load'|'sync'} request.type The request type. Either `load` or `sync`.\n * @param {String} request.url The URL for the request. Overrides the URL defined in the `transport` object\n * @param {String} request.data The encoded _Crud Manager_ request data.\n * @param {Object} request.params An object specifying extra HTTP params to send with the request.\n * @param {Function} request.success A function to be started on successful request transferring.\n * @param {String} request.success.rawResponse `Response` object returned by the [fetch api](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API).\n * @param {Function} request.failure A function to be started on request transfer failure.\n * @param {String} request.failure.rawResponse `Response` object returned by the [fetch api](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API).\n * @param {Object} request.thisObj `this` reference for the above `success` and `failure` functions.\n * @returns {Promise} The fetch Promise object.\n * @fires beforeSend\n * @async\n * @category CRUD\n */\n sendRequest(request) {\n const\n me = this,\n { data } = request,\n transportConfig = me.transport[request.type] || {},\n // clone parameters defined for this type of request\n requestConfig = Objects.assign({}, transportConfig, transportConfig.requestConfig);\n if (request.url) {\n requestConfig.url = request.url;\n }\n requestConfig.method = requestConfig.method || AjaxTransport.defaultMethod[request.type];\n requestConfig.params = Objects.assign(requestConfig.params || {}, request.params);\n let { paramName } = requestConfig;\n // transfer package in the request body for some types of HTTP requests\n if (me.shouldUseBodyForRequestData(transportConfig, requestConfig.method, paramName)) {\n requestConfig.body = data;\n // for requests having body we set Content-Type to 'application/json' by default\n requestConfig.headers = requestConfig.headers || {};\n requestConfig.headers['Content-Type'] = requestConfig.headers['Content-Type'] || 'application/json';\n }\n else {\n // when we don't use body paramName is mandatory so fallback to 'data' as name\n paramName = paramName || 'data';\n requestConfig.params[paramName] = data;\n }\n if (!requestConfig.url) {\n throw new Error('Trying to request without URL specified');\n }\n // sanitize request config\n delete requestConfig.requestConfig;\n delete requestConfig.paramName;\n let ajaxPromise, resultPromise;\n function performSend() {\n // AjaxHelper.fetch call it \"queryParams\"\n requestConfig.queryParams = requestConfig.params;\n delete requestConfig.params;\n let cancelled = false;\n const fetchOptions = Objects.assign({}, requestConfig, requestConfig.fetchOptions);\n ajaxPromise = AjaxHelper.fetch(requestConfig.url, fetchOptions);\n return ajaxPromise.catch(error => {\n ajaxPromise.done = true;\n me.trigger?.('responseReceived', { success : false });\n const signal = fetchOptions.abortController?.signal;\n if (signal) {\n cancelled = signal.aborted;\n if (!cancelled) {\n console.warn(error);\n }\n }\n return { error, cancelled };\n }).then(response => {\n ajaxPromise.done = true;\n me.trigger?.('responseReceived', { success : Boolean(response?.ok) });\n const callback = response?.ok ? request.success : request.failure;\n return callback?.call(request.thisObj || me, response, fetchOptions, request);\n });\n }\n /**\n * Fires before a request is sent to the server.\n *\n * ```javascript\n * crudManager.on('beforeSend', function ({ params, type }) {\n * // let's set \"sync\" request parameters\n * if (type == 'sync') {\n * // dynamically depending on \"flag\" value\n * if (flag) {\n * params.foo = 'bar';\n * }\n * else {\n * params.foo = 'smth';\n * }\n * }\n * });\n * ```\n * @event beforeSend\n * @param {Scheduler.crud.AbstractCrudManager} crudManager The CRUD manager.\n * @param {Object} params HTTP request params to be passed in the request URL.\n * @param {'sync'|'load'} requestType CrudManager request type (`load`/`sync`)\n * @param {Object} requestConfig Configuration object for Ajax request call\n * @async\n */\n const beforeSendResult = me.trigger('beforeSend', {\n params : requestConfig.params,\n requestType : request.type,\n requestConfig,\n config : request\n });\n if (Objects.isPromise(beforeSendResult)) {\n resultPromise = beforeSendResult.then(performSend);\n }\n else {\n resultPromise = performSend();\n }\n resultPromise.abort = () => {\n if (!ajaxPromise.done) {\n ajaxPromise.abort?.();\n }\n };\n return resultPromise;\n }\n};\n", "import Base from '../../../Core/Base.js';\nimport StringHelper from '../../../Core/helper/StringHelper.js';\n/**\n * @module Scheduler/crud/encoder/JsonEncoder\n */\n/**\n * Implements data encoding functional that should be mixed to a {@link Scheduler.crud.AbstractCrudManager} sub-class.\n * Uses _JSON_ as an encoding system.\n *\n * ```javascript\n * // create a new CrudManager using AJAX as a transport system and JSON for encoding\n * class MyCrudManager extends JsonEncode(AjaxTransport(AbstractCrudManager)) {}\n * ```\n *\n * @mixin\n */\nexport default Target => class JsonEncoder extends (Target || Base) {\n static get $name() {\n return 'JsonEncoder';\n }\n static get defaultConfig() {\n return {\n /**\n * Configuration of the JSON encoder used by the _Crud Manager_.\n *\n * @config {Object}\n * @property {Object} encoder.requestData Static data to send with the data request.\n *\n * ```js\n * new CrudManager({\n * // add static \"foo\" property to all requests data\n * encoder : {\n * requestData : {\n * foo : 'Bar'\n * }\n * },\n * ...\n * });\n * ```\n *\n * The above snippet will result adding \"foo\" property to all requests data:\n *\n * ```json\n * {\n * \"requestId\" : 756,\n * \"type\" : \"load\",\n *\n * \"foo\" : \"Bar\",\n *\n * \"stores\" : [\n * ...\n * ```\n * @category CRUD\n */\n encoder : {}\n };\n }\n /**\n * Encodes a request object to _JSON_ encoded string. If encoding fails (due to circular structure), it returns null.\n * Supposed to be overridden in case data provided by the _Crud Manager_ has to be transformed into format requested by server.\n * @param {Object} requestData The request to encode.\n * @returns {String} The encoded request.\n * @category CRUD\n */\n encode(requestData) {\n requestData = Object.assign({}, this.encoder?.requestData, requestData);\n return StringHelper.safeJsonStringify(requestData);\n }\n /**\n * Decodes (parses) a _JSON_ response string to an object. If parsing fails, it returns null.\n * Supposed to be overridden in case data provided by server has to be transformed into format requested by the _Crud Manager_.\n * @param {String} responseText The response text to decode.\n * @returns {Object} The decoded response.\n * @category CRUD\n */\n decode(responseText) {\n return StringHelper.safeJsonParse(responseText);\n }\n};\n", "import AbstractCrudManagerMixin from '../../../Scheduler/crud/AbstractCrudManagerMixin.js';\nimport StringHelper from '../../../Core/helper/StringHelper.js';\nimport Base from '../../../Core/Base.js';\nimport AjaxTransport from '../../crud/transport/AjaxTransport.js';\nimport JsonEncoder from '../../crud/encoder/JsonEncoder.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\n/**\n * @module Scheduler/data/mixin/ProjectCrudManager\n */\n/**\n * This mixin provides Crud Manager functionality supporting loading of scheduling engine projects.\n *\n * @mixin\n * @mixes Scheduler/crud/AbstractCrudManagerMixin\n * @mixes Scheduler/crud/transport/AjaxTransport\n * @mixes Scheduler/crud/encoder/JsonEncoder\n */\nexport default Target => class ProjectCrudManager extends (Target || Base).mixin(AbstractCrudManagerMixin, AjaxTransport, JsonEncoder) {\n //region Config\n static get defaultConfig() {\n return {\n project : null\n };\n }\n startConfigure(config) {\n // process the project first which ingests any configured data sources,\n this.getConfig('project');\n super.startConfigure(config);\n this._changesToClear = new Map();\n }\n async doAutoLoad() {\n const { project } = this;\n // Delay autoLoad to after projects initial commit if configured with a project\n if (project) {\n await project.commitAsync();\n }\n return super.doAutoLoad();\n }\n applyProjectResponse(response) {\n const\n me = this,\n { project } = me;\n me.applyingProjectResponse = true;\n const\n startDateField = project.fieldMap.startDate,\n endDateField = project.fieldMap.endDate,\n startDate = ObjectHelper.getPath(response, startDateField.dataSource),\n endDate = ObjectHelper.getPath(response, endDateField.dataSource);\n // With early rendering engine won't convert project dates in time, do it manually first\n if (typeof startDate === 'string') {\n ObjectHelper.setPath(response, startDateField.dataSource, startDateField.convert(startDate));\n }\n if (typeof endDate === 'string') {\n ObjectHelper.setPath(response, endDateField.dataSource, endDateField.convert(endDate));\n }\n project.setByDataSource(response);\n me._changesToClear.set(me, response);\n me.applyingProjectResponse = false;\n }\n loadCrudManagerData(response, options = {}) {\n const\n me = this,\n { project } = me;\n // We don't want to react on store changes while loading them\n me.suspendChangeTracking();\n super.loadCrudManagerData(...arguments);\n // If there is project data provided\n if (response?.project) {\n // If the project is delaying its linking to a new graph instance\n // wait till it detaches all records from the old graph\n // and then apply the project data.\n // Otherwise, the project changes we apply here will be overridden when detaching from the old graph.\n // Since the code copies last identifier values from the graph when detaching.\n if (project.delayEnteringReplica && project.hasDataInStores) {\n project.ion({\n recordsUnlinked : () => {\n me.suspendChangeTracking();\n me.applyProjectResponse(response.project);\n me.resumeChangeTracking();\n },\n once : true\n });\n }\n else {\n me.applyProjectResponse(response.project);\n }\n }\n me.resumeChangeTracking();\n }\n async sync() {\n const { project } = this;\n // Suspend Crud Manager autoSync to not react on changes during commitAsync() call\n this.suspendAutoSync();\n // Make sure data is in a calculated state before syncing\n if (project) {\n await project.commitAsync();\n }\n if (this.isDestroying) {\n return;\n }\n // resume autoSync silently\n this.resumeAutoSync(false);\n return super.sync();\n }\n async applyResponse(request, response, options) {\n const me = this;\n if (me.isDestroyed || me.project?.isDestroyed) {\n return;\n }\n me.trigger('beforeApplyResponse');\n await super.applyResponse(request, response, options);\n // If there is the project data provided or it's not provided but short responses are enabled\n // in such cases we treat a successful response covering all sent changes as much as that's possible\n // so responding `project : { ... }` should not be really needed\n if (response?.project || (me.supportShortSyncResponse && request?.pack?.project)) {\n // apply the responded changes (or accept the requested ones)\n me.applyProjectResponse(response.project || request?.pack?.project);\n }\n // if we have a project\n if (me.project) {\n let requestType = request.type;\n // response can force its type\n if (me.trackResponseType) {\n requestType = response.type || requestType;\n }\n // Make a boolean flag indicating what has triggered the propagation (\"propagatingLoadChanges\" or \"propagatingSyncChanges\")\n const propagationFlag = `propagating${StringHelper.capitalize(requestType)}Changes`;\n me.suspendAutoSync();\n me[propagationFlag] = true;\n const loud = me.project.isInitialCommit && !me.project.silenceInitialCommit;\n // Wait till calculation gets done\n await me.project.commitAsync();\n me[propagationFlag] = false;\n // for initial commit we still trigger the sync, but not for following\n me.resumeAutoSync?.(loud);\n // Accept changes came from the server (might have been destroyed while waiting above)\n me.commitRespondedChanges?.();\n }\n // Trigger if we did not get destroyed while waiting above\n me.trigger?.('applyResponse');\n }\n applySyncResponse(...args) {\n const\n me = this,\n stmDisabled = me.project?.stm.disabled;\n if (stmDisabled === false && me.ignoreRemoteChangesInSTM) {\n me.project.stm.disable();\n }\n me.suspendAutoSync();\n super.applySyncResponse(...args);\n me.resumeAutoSync(false);\n if (stmDisabled === false) {\n me.project.stm.enable();\n }\n }\n shouldClearRecordFieldChange(record, field, value) {\n const oldValue = record.getValue(field);\n field = record.getFieldDefinition(field);\n // If the field value matches the one responded from the server\n // we silently accept it\n return field?.isEqual ? field.isEqual(oldValue, value) : ObjectHelper.isEqual(oldValue, value);\n }\n commitRespondedChanges() {\n // We silently accept changes came from the server\n this._changesToClear.forEach((changes, record) => {\n Object.entries(changes).forEach(([key, value]) => {\n // If the field value matches the one responded from the server\n // we silently accept it\n if (this.shouldClearRecordFieldChange(record, key, value)) {\n delete record.meta.modified[key];\n }\n });\n });\n this._changesToClear.clear();\n }\n applyChangesToStore(storeDesc, storeResponse, storePack, ...rest) {\n const changesMap = super.applyChangesToStore(storeDesc, storeResponse, storePack, ...rest);\n // The changes enter graph first but not store until later, clearing changes in StoreChanges might still leave\n // records modified. We need to clean up after the next propagation, so we store record changes in a map for now\n if (changesMap.size && this.project) {\n for (const [id, changes] of changesMap) {\n const record = storeDesc.store.getById(id);\n record && this._changesToClear.set(record, changes);\n }\n }\n return changesMap;\n }\n};\n", "import Base from '../../Core/Base.js';\nimport AbstractCrudManagerMixin from './AbstractCrudManagerMixin.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\n/**\n * @module Scheduler/crud/AbstractCrudManager\n */\n/**\n * @typedef {Object} CrudManagerStoreDescriptor\n * @property {String} storeId Unique store identifier. Store related requests/responses will be sent under this name.\n * @property {Core.data.Store} store The store itself.\n * @property {String} [phantomIdField] Set this if the store model has a predefined field to keep phantom record identifier.\n * @property {String} [idField] id field name, if it's not specified then class will try to get it from store model.\n * @property {Boolean} [writeAllFields] Set to true to write all fields from modified records\n */\n/**\n * This is an abstract class serving as the base for the {@link Scheduler.data.CrudManager} class.\n * It implements basic mechanisms to organize batch communication with a server.\n * Yet it does not contain methods related to _data transfer_ nor _encoding_.\n * These methods are to be provided in sub-classes by consuming the appropriate mixins.\n *\n * For example, this is how the class can be used to implement an JSON encoding system:\n *\n * ```javascript\n * // let's make new CrudManager using AJAX as a transport system and JSON for encoding\n * class MyCrudManager extends JsonEncode(AjaxTransport(AbstractCrudManager)) {\n *\n * }\n * ```\n *\n * ## Data transfer and encoding methods\n *\n * These are methods that must be provided by subclasses of this class:\n *\n * - [#sendRequest](#Scheduler/crud/AbstractCrudManagerMixin#function-sendRequest)\n * - [#cancelRequest](#Scheduler/crud/AbstractCrudManagerMixin#function-cancelRequest)\n * - [#encode](#Scheduler/crud/AbstractCrudManagerMixin#function-encode)\n * - [#decode](#Scheduler/crud/AbstractCrudManagerMixin#function-decode)\n *\n * @extends Core/Base\n * @mixes Scheduler/crud/AbstractCrudManagerMixin\n * @abstract\n */\nexport default class AbstractCrudManager extends Base.mixin(AbstractCrudManagerMixin) {\n //region Default config\n /**\n * The server revision stamp.\n * The _revision stamp_ is a number which should be incremented after each server-side change.\n * This property reflects the current version of the data retrieved from the server and gets updated after each\n * {@link Scheduler/crud/AbstractCrudManagerMixin#function-load} and {@link Scheduler/crud/AbstractCrudManagerMixin#function-sync} call.\n * @property {Number}\n * @readonly\n */\n get revision() {\n return this.crudRevision;\n }\n set revision(value) {\n this.crudRevision = value;\n }\n /**\n * Get or set data of {@link #property-crudStores} as a JSON string.\n *\n * Get a JSON string:\n * ```javascript\n *\n * const jsonString = scheduler.crudManager.json;\n *\n * // returned jsonString:\n * '{\"eventsData\":[...],\"resourcesData\":[...],...}'\n *\n * // object representation of the returned jsonString:\n * {\n * resourcesData : [...],\n * eventsData : [...],\n * assignmentsData : [...],\n * dependenciesData : [...],\n * timeRangesData : [...],\n * // data from other stores\n * }\n * ```\n *\n * Set a JSON string (to populate the CrudManager stores):\n *\n * ```javascript\n * scheduler.crudManager.json = '{\"eventsData\":[...],\"resourcesData\":[...],...}'\n * ```\n *\n * @property {String}\n */\n get json() {\n return StringHelper.safeJsonStringify(this);\n }\n set json(json) {\n if (typeof json === 'string') {\n json = StringHelper.safeJsonParse(json);\n }\n this.forEachCrudStore(store => {\n const dataName = `${store.storeId}Data`;\n if (json[dataName]) {\n store.data = json[dataName];\n }\n });\n }\n static get defaultConfig() {\n return {\n /**\n * Sets the list of stores controlled by the CRUD manager.\n *\n * When adding a store to the CrudManager, make sure the server response format is correct for `load` and `sync` requests.\n * Learn more in the [Working with data](#Scheduler/guides/data/crud_manager.md#loading-data) guide.\n *\n * Store can be provided as in instance, using its `storeId` or as an {@link #typedef-CrudManagerStoreDescriptor}\n * object.\n * @config {Core.data.Store[]|String[]|CrudManagerStoreDescriptor[]}\n */\n stores : null\n /**\n * Encodes request to the server.\n * @function encode\n * @param {Object} request The request to encode.\n * @returns {String} The encoded request.\n * @abstract\n */\n /**\n * Decodes response from the server.\n * @function decode\n * @param {String} response The response to decode.\n * @returns {Object} The decoded response.\n * @abstract\n */\n };\n }\n //endregion\n //region Init\n construct(config = {}) {\n if (config.stores) {\n config.crudStores = config.stores;\n delete config.stores;\n }\n super.construct(config);\n }\n //endregion\n //region inline data\n /**\n * Returns the data from all CrudManager `crudStores` in a format that can be consumed by `inlineData`.\n *\n * Used by JSON.stringify to correctly convert this CrudManager to json.\n *\n * The returned data is identical to what {@link Scheduler/crud/AbstractCrudManager#property-inlineData} contains.\n *\n * ```javascript\n *\n * const json = scheduler.crudManager.toJSON();\n *\n * // json:\n * {\n * eventsData : [...],\n * resourcesData : [...],\n * dependenciesData : [...],\n * assignmentsData : [...],\n * timeRangesData : [...],\n * resourceTimeRangesData : [...],\n * // ... other stores data\n * }\n * ```\n *\n * Output can be consumed by `inlineData`.\n *\n * ```javascript\n * const json = scheduler.crudManager.toJSON();\n *\n * // Plug it back in later\n * scheduler.crudManager.inlineData = json;\n * ```\n *\n * @function toJSON\n * @returns {Object}\n * @category JSON\n */\n toJSON() {\n // Collect data from crudStores\n const result = {};\n this.forEachCrudStore((store, storeId) => result[`${storeId}Data`] = store.toJSON());\n return result;\n }\n /**\n * Get or set data of CrudManager stores. The returned data is identical to what\n * {@link Scheduler/crud/AbstractCrudManager#function-toJSON} returns:\n *\n * ```javascript\n *\n * const data = scheduler.crudManager.inlineData;\n *\n * // data:\n * {\n * eventsData : [...],\n * resourcesData : [...],\n * dependenciesData : [...],\n * assignmentsData : [...],\n * timeRangesData : [...],\n * resourceTimeRangesData : [...],\n * ... other stores data\n * }\n *\n *\n * // Plug it back in later\n * scheduler.crudManager.inlineData = data;\n * ```\n *\n * @property {Object}\n */\n get inlineData() {\n return this.toJSON();\n }\n set inlineData(data) {\n this.json = data;\n }\n //endregion\n //region Store collection (add, remove, get & iterate)\n set stores(stores) {\n if (stores !== this.crudStores) {\n this.crudStores = stores;\n }\n }\n /**\n * A list of registered stores whose server communication will be collected into a single batch.\n * Each store is represented by a _store descriptor_.\n * @member {CrudManagerStoreDescriptor[]} stores\n */\n get stores() {\n return this.crudStores;\n }\n //endregion\n /**\n * Returns true if the crud manager is currently loading data\n * @property {Boolean}\n * @readonly\n * @category CRUD\n */\n get isLoading() {\n return this.isCrudManagerLoading;\n }\n /**\n * Adds a store to the collection.\n *\n *```javascript\n * // append stores to the end of collection\n * crudManager.addStore([\n * store1,\n * // storeId\n * 'bar',\n * // store descriptor\n * {\n * storeId : 'foo',\n * store : store3\n * },\n * {\n * storeId : 'bar',\n * store : store4,\n * // to write all fields of modified records\n * writeAllFields : true\n * }\n * ]);\n *```\n *\n * **Note:** Order in which stores are kept in the collection is very essential sometimes.\n * Exactly in this order the loaded data will be put into each store.\n *\n * When adding a store to the CrudManager, make sure the server response format is correct for `load` and `sync`\n * requests. Learn more in the [Working with data](#Scheduler/guides/data/crud_manager.md#loading-data) guide.\n *\n * @param {Core.data.Store|String|CrudManagerStoreDescriptor|Core.data.Store[]|String[]|CrudManagerStoreDescriptor[]} store\n * A store or list of stores. Each store might be specified by its instance, `storeId` or _descriptor_.\n * @param {Number} [position] The relative position of the store. If `fromStore` is specified the position will be\n * taken relative to it.\n * If not specified then store(s) will be appended to the end of collection.\n * Otherwise, it will be an index in stores collection.\n *\n * ```javascript\n * // insert stores store4, store5 to the start of collection\n * crudManager.addStore([ store4, store5 ], 0);\n * ```\n *\n * @param {String|Core.data.Store|CrudManagerStoreDescriptor} [fromStore] The store relative to which position\n * should be calculated. Can be defined as a store identifier, instance or descriptor (the result of\n * {@link Scheduler/crud/AbstractCrudManagerMixin#function-getStoreDescriptor} call).\n *\n * ```javascript\n * // insert store6 just before a store having storeId equal to 'foo'\n * crudManager.addStore(store6, 0, 'foo');\n *\n * // insert store7 just after store3 store\n * crudManager.addStore(store7, 1, store3);\n * ```\n */\n addStore(...args) {\n return this.addCrudStore(...args);\n }\n removeStore(...args) {\n return this.removeCrudStore(...args);\n }\n getStore(...args) {\n return this.getCrudStore(...args);\n }\n hasChanges(...args) {\n return this.crudStoreHasChanges(...args);\n }\n loadData(...args) {\n return this.loadCrudManagerData(...args);\n }\n}\nAbstractCrudManager._$name = 'AbstractCrudManager';", "import Model from '../../../Core/data/Model.js';\n/**\n * @module Scheduler/model/mixin/ProjectModelCommon\n */\n/**\n * Mixin that provides helpful methods and properties for a `ProjectModel`. This mixin applies to all Bryntum products.\n * @mixin\n * @internal\n */\nexport default Target => class ProjectModelCommon extends (Target || Model) {\n static $name = 'ProjectModelCommon';\n static get configurable() {\n return {\n // Documented in Gantt/Scheduler/SchedulerPro version of ./model/ProjectModel since types differ\n assignments : null,\n dependencies : null,\n resources : null,\n timeRanges : null\n };\n }\n // Project is a Model which triggers events, therefore it can define event handlers using `onEvent` syntax. Event\n // handler can be a string (for another instance property), or a function. Therefore, it is impossible to tell them\n // apart and project model can not expose fields.\n // https://github.com/bryntum/support/issues/7457\n static get autoExposeFields() {\n return false;\n }\n //region Inline data\n get assignments() {\n return this.assignmentStore.allRecords;\n }\n updateAssignments(assignments) {\n this.assignmentStore.data = assignments;\n }\n get dependencies() {\n return this.dependencyStore.allRecords;\n }\n updateDependencies(dependencies) {\n this.dependencyStore.data = dependencies;\n }\n get resources() {\n return this.resourceStore.allRecords;\n }\n updateResources(resources) {\n this.resourceStore.data = resources;\n }\n get timeRanges() {\n return this.timeRangeStore.allRecords;\n }\n getTimeRanges(startDate, endDate) {\n const\n store = this.timeRangeStore,\n ret = [];\n for (const timeSpan of store) {\n // Collect occurrences for the recurring events in the record set\n if (timeSpan.isRecurring) {\n ret.push(...timeSpan.getOccurrencesForDateRange(startDate, endDate));\n }\n else if (timeSpan.startDate < endDate && startDate < timeSpan.endDate) {\n ret.push(timeSpan);\n }\n }\n return ret;\n }\n updateTimeRanges(timeRanges) {\n this.timeRangeStore.data = timeRanges;\n }\n getResourceTimeRanges(startDate, endDate) {\n const\n store = this.resourceTimeRangeStore,\n ret = [];\n for (const timeSpan of store) {\n // Collect occurrences for the recurring events in the record set\n if (timeSpan.isRecurring) {\n ret.push(...timeSpan.getOccurrencesForDateRange(startDate, endDate));\n }\n // A timerange may consist of just a startDate if it is intended to be a line.\n else if (timeSpan.startDate < endDate && (!timeSpan.endDate || startDate < timeSpan.endDate)) {\n ret.push(timeSpan);\n }\n }\n return ret;\n }\n //endregion\n};\n", "import TimeSpan from './TimeSpan.js';\nimport RecurringTimeSpan from './mixin/RecurringTimeSpan.js';\n/**\n * @module Scheduler/model/ResourceTimeRangeModel\n */\n/**\n * This class represent a single resource time range in your schedule.\n * To style the rendered elements, use {@link Scheduler.model.TimeSpan#field-cls} or {@link #field-timeRangeColor} field.\n * The class is used by the {@link Scheduler.feature.ResourceTimeRanges} feature.\n *\n * ## Recurring ranges support\n *\n * You can also make ranges recurring by adding a `recurrenceRule` to the range data.\n *\n * ```javascript\n *\n * // Make new store that supports time ranges recurrence\n * const store = new ResourceTimeRangeStore({\n * data : [{ {\n * id : 1,\n * resourceId : 'r1',\n * startDate : '2019-01-01T11:00',\n * endDate : '2019-01-01T13:00',\n * name : 'Coffee break',\n * // this time range should repeat every day\n * recurrenceRule : 'FREQ=DAILY'\n * }]\n * });\n * ```\n *\n * @extends Scheduler/model/TimeSpan\n */\nexport default class ResourceTimeRangeModel extends TimeSpan.mixin(RecurringTimeSpan) {\n static $name = 'ResourceTimeRangeModel';\n //region Fields\n static fields = [\n /**\n * Id of the resource this time range is associated with\n * @field {String|Number} resourceId\n */\n 'resourceId',\n /**\n * Controls this time range's primary color, defaults to using current themes default time range color.\n * @field {String} timeRangeColor\n */\n 'timeRangeColor'\n ];\n static relations = {\n /**\n * The associated resource, retrieved using a relation to a ResourceStore determined by the value assigned\n * to `resourceId`. The relation also lets you access all time ranges on a resource through\n * {@link Scheduler.model.ResourceModel#property-timeRanges}`.\n * @member {Scheduler.model.ResourceModel} resource\n */\n resource : {\n foreignKey : 'resourceId',\n foreignStore : 'resourceStore',\n relatedCollectionName : 'timeRanges',\n nullFieldOnRemove : true\n }\n };\n static domIdPrefix = 'resourcetimerange';\n get domId() {\n return `${this.constructor.domIdPrefix}-${this.id}`;\n }\n //endregion\n // Used internally to differentiate between Event and ResourceTimeRange\n get isResourceTimeRange() {\n return true;\n }\n // To match EventModel API\n get resources() {\n return this.resource ? [this.resource] : [];\n }\n // To match EventModel API\n get $linkedResources() {\n return this.resources;\n }\n}\nResourceTimeRangeModel._$name = 'ResourceTimeRangeModel';", "import AjaxStore from '../../Core/data/AjaxStore.js';\nimport ResourceTimeRangeModel from '../model/ResourceTimeRangeModel.js';\nimport RecurringTimeSpansMixin from './mixin/RecurringTimeSpansMixin.js';\n/**\n * @module Scheduler/data/ResourceTimeRangeStore\n */\n/**\n * A class representing a collection of resource time ranges.\n * Contains a collection of {@link Scheduler.model.ResourceTimeRangeModel} records.\n * The class is used by the {@link Scheduler.feature.ResourceTimeRanges} feature.\n *\n * ## Recurring ranges support\n *\n * This class supports recurrence:\n *\n * ```javascript\n * const store = new ResourceTimeRangeStore({\n * data : [{ {\n * id : 1,\n * resourceId : 'r1',\n * startDate : '2019-01-01T11:00',\n * endDate : '2019-01-01T13:00',\n * name : 'Coffee break',\n * // this time range should repeat every day\n * recurrenceRule : 'FREQ=DAILY'\n * }]\n * });\n * ```\n * @mixes Scheduler/data/mixin/RecurringTimeSpansMixin\n * @extends Core/data/AjaxStore\n */\nexport default class ResourceTimeRangeStore extends AjaxStore.mixin(RecurringTimeSpansMixin) {\n static $name = 'ResourceTimeRangeStore';\n static get defaultConfig() {\n return {\n /**\n * CrudManager must load stores in the correct order. Lowest first.\n * @private\n */\n loadPriority : 500,\n /**\n * CrudManager must sync stores in the correct order. Lowest first.\n * @private\n */\n syncPriority : 500,\n /**\n * This store should be linked to a ResourceStore to link the time ranges to resources\n * @config {Scheduler.data.ResourceStore}\n */\n resourceStore : null,\n modelClass : ResourceTimeRangeModel,\n storeId : 'resourceTimeRanges'\n };\n }\n set resourceStore(store) {\n this._resourceStore = store;\n // If store is assigned after configuration we need to init relations\n if (!this.isConfiguring) {\n this.initRelations(true);\n }\n }\n get resourceStore() {\n return this._resourceStore;\n }\n // Matching signature in EventStore to allow reusage of SchedulerStores#onInternalEventStoreChange()\n getResourcesForEvent(resourceTimeRange) {\n return [resourceTimeRange.resource];\n }\n /**\n * Get resource time ranges intersecting the specified date range for a resource.\n *\n * The result is sorted by `startDate`.\n *\n * @param {Object} options Options\n * @param {Scheduler.model.ResourceModel} options.resourceRecord Resource record\n * @param {Date} options.startDate Start date of the range\n * @param {Date} options.endDate End date of the range\n * @returns {Scheduler.model.ResourceTimeRangeModel[]}\n */\n getRanges({ resourceRecord, startDate, endDate }) {\n const rangesInDateRange = resourceRecord.timeRanges.flatMap(range => {\n if (range.supportsRecurring) {\n return range.getOccurrencesForDateRange(startDate, endDate);\n }\n if (range.intersectsRange(startDate, endDate)) {\n return range;\n }\n return [];\n });\n return rangesInDateRange.sort((span1, span2) => span1.startDate - span2.startDate);\n }\n}\nResourceTimeRangeStore._$name = 'ResourceTimeRangeStore';", "import InstancePlugin from '../../../Core/mixin/InstancePlugin.js';\n/**\n * @module Scheduler/data/plugin/ProjectModelMixin\n */\n/**\n * Plugs in to a time zone convertable Store to affect and add some functionality.\n * @plugin\n * @private\n */\nexport default class StoreTimeZonePlugin extends InstancePlugin {\n static $name = 'storeTimeZonePlugin';\n static pluginConfig = {\n before : ['processRecord'],\n assign : ['beforeSyncRecord', 'afterSyncRecord']\n };\n get timeZone() {\n return this.client.project.timeZone;\n }\n // Overrides a Store's processRecord function to be able to convert records added by a dataset\n // before they are processed by the engine\n processRecord(record, isDataSet) {\n if (isDataSet || this.client.isLoadingData || record.timeZone !== undefined) {\n // When loading or changing dataset, de data is treated as local dates and need to be converted\n // Also convert when adding a record with a timeZone specified (null means local time zone)\n this.convertRecordToTimeZone(record);\n }\n }\n convertRecordToTimeZone(record, timeZone = this.timeZone) {\n if (record.timeZone !== timeZone) {\n record.$ignoreChange = true; // Used to ignore changes in NestedEvents feature\n // Convert baselines if exists\n if (record.baselines?.count) {\n for (const bl of record.baselines) {\n // The baseline records is not marked with a timezone when they are created\n if (record.timeZone !== bl.timeZone) {\n bl.timeZone = record.timeZone;\n }\n bl.convertToTimeZone(timeZone);\n }\n }\n if (record.occurrences?.length) {\n for (const o of record.occurrences) {\n if (record.timeZone !== o.timeZone) {\n o.timeZone = record.timeZone;\n }\n o.convertToTimeZone(timeZone);\n }\n }\n record.convertToTimeZone(timeZone);\n record.$ignoreChange = false;\n }\n }\n beforeSyncRecord({ record }) {\n if (record.timeZone != null) {\n record.$restoreTimeZone = record.timeZone;\n record.convertToTimeZone();\n }\n }\n afterSyncRecord({ record }) {\n if (record.$restoreTimeZone) {\n record.convertToTimeZone(record.$restoreTimeZone);\n record.$restoreTimeZone = null;\n }\n }\n}\nStoreTimeZonePlugin._$name = 'StoreTimeZonePlugin';", "import Model from '../../../Core/data/Model.js';\nimport TimeZoneHelper from '../../../Core/helper/TimeZoneHelper.js';\nimport StoreTimeZonePlugin from '../../data/plugin/StoreTimeZonePlugin.js';\n/**\n * @module Scheduler/model/mixin/ProjectModelTimeZoneMixin\n */\n/**\n * Mixin that holds TimeZone functionality shared between projects in Scheduler, Scheduler Pro, Gantt and Calendar\n * @mixin\n */\nexport default Target => class ProjectModelTimeZoneMixin extends (Target || Model) {\n static $name = 'ProjectModelTimeZoneMixin';\n static configurable = {\n /**\n * Set to a IANA time zone (i.e. `Europe/Stockholm`) or a UTC offset in minutes (i.e. `-120`). This will\n * convert all events, tasks and time ranges to the specified time zone or offset. It will also affect the\n * displayed timeline's headers as well at the start and end date of it.\n *\n * There is currently no built-in time zone support in JavaScript which means that the converted dates\n * technically still are in the local system time zone, but adjusted to match the configured time zone.\n *\n * ### DST\n * If a IANA time zone is provided, there will be support for DST. But if local system time zone has DST that\n * will affect the time zone conversion at the exact hour when the local system time zone switches DST on and\n * off.\n *\n * *For example:*\n * 1. The local system time zone is `Europe/Stockholm` (which is UTC+1 or UTC+2 when DST).\n * 2. The date `2022-03-27T07:00:00Z` (which is UTC) is converted to `America/Chicago` (which is UTC-6 or UTC-5\n * when DST).\n * 3. The converted JS date will be created from `2022-03-27T02:00:00` which is exactly the hour when\n * `Europe/Stockholm` adds an DST hour. This has the effect that the converted date shows up incorrectly as\n * `2022-03-27T03:00` instead.\n *\n * If a UTC offset is provided, there is no DST support at all.\n *\n * ### Editing\n * If creating new records or editing existing record dates, the dates will be interpreted as in the selected\n * time zone.\n *\n * If you want to create new records with dates that either should be interpreted as local system time zone or\n * from any other time zone, specify the {@link Scheduler.model.mixin.TimeZonedDatesMixin#field-timeZone} field\n * on the record.\n *\n * ### Saving\n * When saving or syncing data, the dates will be restored to local system time and converted to JSON\n * ISO formatted.\n *\n * @prp {String|Number} [timeZone]\n * @category Advanced\n */\n timeZone : {\n // Don't ingest the config eagerly because it relies on project being present.\n // Lazy means it waits for ingestion until timeZone property is referenced.\n $config : 'lazy',\n value : null\n }\n };\n get _storesWithDates() {\n return [this.taskStore, this.timeRangeStore, this.resourceTimeRangeStore].filter(s => s);\n }\n plugStore(store) {\n if (!store.hasPlugin(StoreTimeZonePlugin)) {\n store.addPlugins(StoreTimeZonePlugin);\n }\n }\n unplugStore(store) {\n store.plugins.storeTimeZonePlugin?.destroy();\n }\n attachStore(store) {\n super.attachStore(store);\n // If a new store is attached, convert it to the configured timezone\n if (store && this.timeZone != null && this._storesWithDates.includes(store)) {\n this.plugStore(store);\n this.convertStoresToTimeZone([store]);\n }\n }\n detachStore(store) {\n super.detachStore(store);\n // When a store is detached, the records isn't timezone converted anymore\n if (store && !store.isDestroyed && this.timeZone != null) {\n // Convert records back to local system timezone\n this.convertStoresToTimeZone([store], null);\n // Removes the plugin\n this.unplugStore(store);\n }\n }\n relayStoreChange({ source, action, records, replaced }) {\n const me = this;\n if (me.timeZone != null && me._storesWithDates.includes(source)) {\n // When a record is added or replaced, it is treated as in current configured timezone\n if (['add', 'replace'].includes(action)) {\n if (!records?.length && replaced?.length) {\n records = replaced;\n }\n if (records.length) {\n records.forEach(record => record.timeZone = me.timeZone);\n }\n }\n }\n }\n convertStoresToTimeZone(stores, timeZone = this.timeZone) {\n const\n me = this,\n stmAutoRecord = me.stm?.autoRecord;\n // Disable STM while updating timezone values\n if (stmAutoRecord) {\n me.stm.autoRecord = false;\n }\n for (const store of stores) {\n store?.forEach(r => store.plugins.storeTimeZonePlugin.convertRecordToTimeZone(r, timeZone));\n }\n if (stmAutoRecord) {\n // Restore original value\n me.stmAutoRecord = stmAutoRecord;\n }\n }\n updateTimeZone(timeZone, oldTimeZone) {\n const\n me = this,\n isConfiguring = me._isConfiguringTimeZone || me.isConfiguring;\n me.trigger('beforeTimeZoneChange', {\n timeZone,\n oldTimeZone,\n isConfiguring\n });\n me.calendarManagerStore.forEach(calendar => calendar.bumpVersion());\n me._storesWithDates.forEach(store => me.plugStore(store));\n // Convert data to time zone\n me.convertStoresToTimeZone(me._storesWithDates);\n // Convert project startdate\n if (me.startDate) {\n const startDate = oldTimeZone != null ? TimeZoneHelper.fromTimeZone(me.startDate, oldTimeZone) : me.startDate;\n me.startDate = timeZone != null ? TimeZoneHelper.toTimeZone(startDate, timeZone) : startDate;\n }\n me.ignoreRecordChanges = true;\n me.commitAsync().then(() => {\n if (!me.isDestroyed) {\n me.trigger('timeZoneChange', {\n timeZone,\n oldTimeZone,\n isConfiguring\n });\n }\n delete me._isConfiguringTimeZone;\n });\n }\n};\n", "import TimeSpan from './TimeSpan.js';\nimport RecurringTimeSpan from './mixin/RecurringTimeSpan.js';\n/**\n * @module Scheduler/model/TimeRangeModel\n */\n/**\n * This class represents a named time range. It is used by the {@link Scheduler.feature.TimeRanges} feature.\n *\n * This class inherits most of its fields from {@link Scheduler.model.TimeSpan}. The most important of these fields are\n * the following:\n *\n * - {@link #field-name}\n * - {@link #field-startDate}\n * - {@link #field-endDate}\n * - {@link #field-iconCls}\n *\n * It's an indirect subclass of {@link Core.data.Model}. Please refer to documentation of those classes to become\n * familiar with the base interface of this class.\n * The data source of any field can be customized in the subclass. Please refer to {@link Core.data.Model} for details.\n *\n * Time ranges may recur. See the {@link #field-recurrenceRule} field.\n *\n * @extends Scheduler/model/TimeSpan\n * @mixes Scheduler/model/mixin/RecurringTimeSpan\n * @uninherit Core/data/mixin/TreeNode\n */\nexport default class TimeRangeModel extends TimeSpan.mixin(RecurringTimeSpan) {\n static $name = 'TimeRangeModel';\n /**\n * @hidefields children, parentId, parentIndex\n */\n afterConstruct() {\n if (!this.endDate) {\n this.endDate = this.startDate;\n }\n super.afterConstruct();\n }\n}\nTimeRangeModel._$name = 'TimeRangeModel';", "import AjaxStore from '../../Core/data/AjaxStore.js';\nimport TimeRangeModel from '../model/TimeRangeModel.js';\nimport RecurringTimeSpansMixin from './mixin/RecurringTimeSpansMixin.js';\n/**\n * @module Scheduler/data/TimeRangeStore\n */\n/**\n * A class representing a collection of time ranges.\n * Contains a collection of {@link Scheduler.model.TimeRangeModel} records.\n * The class is used by the {@link Scheduler.feature.TimeRanges} feature.\n *\n * ## Recurring ranges support\n *\n * This class supports recurrence:\n *\n * ```javascript\n * const store = new TimeRangeStore({\n * data : [{ {\n * id : 1,\n * startDate : '2019-01-01T11:00',\n * endDate : '2019-01-01T13:00',\n * name : 'Coffee break',\n * // this time range should repeat every day\n * recurrenceRule : 'FREQ=DAILY'\n * }]\n * });\n * ```\n *\n * @mixes Scheduler/data/mixin/RecurringTimeSpansMixin\n * @extends Core/data/AjaxStore\n */\nexport default class TimeRangeStore extends AjaxStore.mixin(RecurringTimeSpansMixin) {\n static $name = 'TimeRangeStore';\n static defaultConfig = {\n /**\n * CrudManager must load stores in the correct order. Lowest first.\n * @private\n */\n loadPriority : 500,\n /**\n * CrudManager must sync stores in the correct order. Lowest first.\n * @private\n */\n syncPriority : 500,\n modelClass : TimeRangeModel,\n storeId : 'timeRanges'\n };\n}\nTimeRangeStore._$name = 'TimeRangeStore';", "import Model from '../../../Core/data/Model.js';\nimport ProjectModelCommon from './ProjectModelCommon.js';\nimport ResourceTimeRangeModel from '../ResourceTimeRangeModel.js';\nimport StringHelper from '../../../Core/helper/StringHelper.js';\nimport ResourceTimeRangeStore from '../../data/ResourceTimeRangeStore.js';\nimport ProjectModelTimeZoneMixin from './ProjectModelTimeZoneMixin.js';\nimport TimeRangeStore from '../../data/TimeRangeStore.js';\nimport TimeRangeModel from '../TimeRangeModel.js';\n/**\n * @module Scheduler/model/mixin/ProjectModelMixin\n */\n/**\n * Mixin that holds configuration shared between projects in Scheduler and Scheduler Pro.\n * @mixes Scheduler/model/mixin/ProjectModelTimeZoneMixin\n *\n * @typings extends Core.data.Model\n *\n * @mixin\n */\nexport default Target => class ProjectModelMixin extends (Target || Model).mixin(\n ProjectModelCommon,\n ProjectModelTimeZoneMixin\n) {\n static get $name() {\n return 'ProjectModelMixin';\n }\n //region Config\n static get defaultConfig() {\n return {\n /**\n * State tracking manager instance the project relies on\n * @member {Core.data.stm.StateTrackingManager} stm\n * @category Advanced\n */\n /**\n * Configuration options to provide to the STM manager\n *\n * @config {StateTrackingManagerConfig|Core.data.stm.StateTrackingManager}\n * @category Advanced\n */\n stm : {},\n timeRangeModelClass : TimeRangeModel,\n resourceTimeRangeModelClass : ResourceTimeRangeModel,\n /**\n * The constructor to create a time range store instance with. Should be a class subclassing the\n * {@link Scheduler.data.TimeRangeStore}\n * @config {Scheduler.data.TimeRangeStore|Object}\n * @typings {typeof TimeRangeStore|object}\n * @category Models & Stores\n */\n timeRangeStoreClass : TimeRangeStore,\n /**\n * The constructor to create a resource time range store instance with. Should be a class subclassing the\n * {@link Scheduler.data.ResourceTimeRangeStore}\n * @config {Scheduler.data.ResourceTimeRangeStore|Object}\n * @typings {typeof ResourceTimeRangeStore|object}\n * @category Models & Stores\n */\n resourceTimeRangeStoreClass : ResourceTimeRangeStore,\n /**\n * The initial data, to fill the {@link #property-timeRangeStore timeRangeStore} with.\n * Should be an array of {@link Scheduler.model.TimeSpan TimeSpan} or its configuration objects.\n *\n * @config {Scheduler.model.TimeSpan[]} [timeRangesData]\n * @category Legacy inline data\n */\n /**\n * The initial data, to fill the {@link #property-resourceTimeRangeStore resourceTimeRangeStore} with.\n * Should be an array of {@link Scheduler.model.ResourceTimeRangeModel ResourceTimeRangeModel} or it's\n * configuration objects.\n *\n * @config {Scheduler.model.ResourceTimeRangeModel[]} [resourceTimeRangesData]\n * @category Legacy inline data\n */\n eventStore : {},\n assignmentStore : {},\n dependencyStore : {},\n resourceStore : {},\n timeRangesData : null,\n resourceTimeRangesData : null\n };\n }\n static configurable = {\n /**\n * Project data as a JSON string, used to populate its stores.\n *\n * ```javascript\n * const project = new ProjectModel({\n * json : '{\"eventsData\":[...],\"resourcesData\":[...],...}'\n * }\n * ```\n *\n * @config {String}\n * @category Inline data\n */\n json : null,\n /**\n * The {@link Core.data.Store store} holding the time ranges information.\n *\n * See also {@link Scheduler.model.TimeSpan}\n *\n * @member {Core.data.Store} timeRangeStore\n * @category Models & Stores\n */\n /**\n * A {@link Core.data.Store} instance or a config object.\n * @config {Core.data.Store|StoreConfig}\n * @category Models & Stores\n */\n timeRangeStore : {\n value : {},\n $config : 'nullify'\n },\n /**\n * The {@link Scheduler.data.ResourceTimeRangeStore store} holding the resource time ranges information.\n *\n * See also {@link Scheduler.model.ResourceTimeRangeModel}\n *\n * @member {Scheduler.data.ResourceTimeRangeStore} resourceTimeRangeStore\n * @category Models & Stores\n */\n /**\n * A {@link Scheduler.data.ResourceTimeRangeStore} instance or a config object.\n * @config {Scheduler.data.ResourceTimeRangeStore|ResourceTimeRangeStoreConfig}\n * @category Models & Stores\n */\n resourceTimeRangeStore : {\n value : {},\n $config : 'nullify'\n },\n // Documented in Scheduler/SchedulerPro versions of model/ProjectModel since types differ\n events : null,\n resourceTimeRanges : null\n };\n //endregion\n //region Properties\n /**\n * Get or set data of project stores. The returned data is identical to what\n * {@link #function-toJSON} returns:\n *\n * ```javascript\n *\n * const data = scheduler.project.inlineData;\n *\n * // data:\n * {\n * eventsData : [...],\n * resourcesData : [...],\n * dependenciesData : [...],\n * assignmentsData : [...],\n * resourceTimeRangesData : [...],\n * timeRangesData : [...]\n * }\n *\n *\n * // Plug it back in later\n * scheduler.project.inlineData = data;\n * ```\n *\n * @property {Object}\n * @category Inline data\n */\n get inlineData() {\n return StringHelper.safeJsonParse(super.json);\n }\n set inlineData(inlineData) {\n this.json = inlineData;\n }\n //endregion\n //region Functions\n /**\n * Accepts a \"data package\" consisting of data for the projects stores, which is then loaded into the stores.\n *\n * The package can hold data for `EventStore`, `AssignmentStore`, `ResourceStore`, `DependencyStore`,\n * `TimeRangeStore` and `ResourceTimeRangeStore`. It uses the same format as when creating a project with inline\n * data:\n *\n * ```javascript\n * await project.loadInlineData({\n * eventsData : [...],\n * resourcesData : [...],\n * assignmentsData : [...],\n * dependenciesData : [...],\n * resourceTimeRangesData : [...],\n * timeRangesData : [...]\n * });\n * ```\n *\n * After populating the stores it commits the project, starting its calculations. By awaiting `loadInlineData()` you\n * can be sure that project calculations are finished.\n *\n * @function loadInlineData\n * @param {Object} dataPackage A data package as described above\n * @fires load\n * @async\n * @category Inline data\n */\n /**\n * Project changes (CRUD operations to records in its stores) are automatically committed on a buffer to the\n * underlying graph based calculation engine. The engine performs it calculations async.\n *\n * By calling this function, the commit happens right away. And by awaiting it you are sure that project\n * calculations are finished and that references between records are up to date.\n *\n * The returned promise is resolved with an object. If that object has `rejectedWith` set, there has been a conflict and the calculation failed.\n *\n * ```javascript\n * // Move an event in time\n * eventStore.first.shift(1);\n *\n * // Trigger calculations directly and wait for them to finish\n * const result = await project.commitAsync();\n *\n * if (result.rejectedWith) {\n * // there was a conflict during the scheduling\n * }\n * ```\n *\n * @async\n * @function commitAsync\n * @category Common\n */\n //endregion\n //region Init\n construct(config = {}) {\n super.construct(...arguments);\n // These stores are not handled by engine, but still held on project\n if (config.timeRangesData) {\n this.timeRangeStore.data = config.timeRangesData;\n }\n if (config.resourceTimeRangesData) {\n this.resourceTimeRangeStore.data = config.resourceTimeRangesData;\n }\n }\n afterConstruct() {\n super.afterConstruct();\n const me = this;\n !me.timeRangeStore.stm && me.stm.addStore(me.timeRangeStore);\n !me.resourceTimeRangeStore.stm && me.stm.addStore(me.resourceTimeRangeStore);\n }\n //endregion\n //region Attaching stores\n // Attach to a store, relaying its change events\n attachStore(store) {\n if (store) {\n store.ion({\n name : store.$$name,\n change : 'relayStoreChange',\n thisObj : this\n });\n }\n super.attachStore(store);\n }\n // Detach a store, stop relaying its change events\n detachStore(store) {\n if (store) {\n this.detachListeners(store.$$name);\n super.detachStore(store);\n }\n }\n relayStoreChange(event) {\n super.relayStoreChange(event);\n /**\n * Fired when data in any of the projects stores changes.\n *\n * Basically a relayed version of each stores own change event, decorated with which store it originates from.\n * See the {@link Core.data.Store#event-change store change event} documentation for more information.\n *\n * @event change\n * @param {Scheduler.model.ProjectModel} source This project\n * @typings source -> {Scheduler.model.ProjectModel||any}\n * @param {Core.data.Store} store Affected store\n * @param {'remove'|'removeAll'|'add'|'updatemultiple'|'clearchanges'|'filter'|'update'|'dataset'|'replace'} action\n * Name of action which triggered the change. May be one of:\n * * `'remove'`\n * * `'removeAll'`\n * * `'add'`\n * * `'updatemultiple'`\n * * `'clearchanges'`\n * * `'filter'`\n * * `'update'`\n * * `'dataset'`\n * * `'replace'`\n * @param {Core.data.Model} record Changed record, for actions that affects exactly one record (`'update'`)\n * @param {Core.data.Model[]} records Changed records, passed for all actions except `'removeAll'`\n * @param {Object} changes Passed for the `'update'` action, info on which record fields changed\n */\n return this.trigger('change', { store : event.source, ...event, source : this });\n }\n updateTimeRangeStore(store, oldStore) {\n this.detachStore(oldStore);\n this.attachStore(store);\n if (oldStore) {\n oldStore.project = null;\n }\n if (store) {\n store.project = this;\n }\n }\n setTimeRangeStore(store) {\n this.timeRangeStore = store;\n }\n changeTimeRangeStore(store) {\n // If it's not being nullified, upgrade a config object to be a full store\n if (store && !store.isStore) {\n store = this.timeRangeStoreClass.new({\n modelClass : this.timeRangeModelClass\n }, store);\n }\n return store;\n }\n updateResourceTimeRangeStore(store, oldStore) {\n this.detachStore(oldStore);\n this.attachStore(store);\n if (oldStore) {\n oldStore.project = null;\n }\n if (store) {\n store.project = this;\n }\n }\n changeResourceTimeRangeStore(store) {\n // If it's not being nullified, upgrade a config object to be a full store\n if (store && !store.isStore) {\n store = this.resourceTimeRangeStoreClass.new({\n modelClass : this.resourceTimeRangeModelClass\n }, store);\n }\n return store;\n }\n setResourceTimeRangeStore(store) {\n this.resourceTimeRangeStore = store;\n }\n //endregion\n //region Inline data\n get events() {\n return this.eventStore.allRecords;\n }\n updateEvents(events) {\n this.eventStore.data = events;\n }\n get resourceTimeRanges() {\n return this.resourceTimeRangeStore.allRecords;\n }\n updateResourceTimeRanges(resourceTimeRanges) {\n this.resourceTimeRangeStore.data = resourceTimeRanges;\n }\n async loadInlineData(data) {\n // Flag reset in super\n this.isLoadingInlineData = true;\n // Stores not handled by engine\n if (data.resourceTimeRangesData) {\n this.resourceTimeRangeStore.data = data.resourceTimeRangesData;\n }\n if (data.timeRangesData) {\n this.timeRangeStore.data = data.timeRangesData;\n }\n return super.loadInlineData(data);\n }\n //endregion\n //region JSON\n /**\n * Returns the data from the records of the projects stores, in a format that can be consumed by `loadInlineData()`.\n *\n * Used by JSON.stringify to correctly convert this record to json.\n *\n *\n * ```javascript\n * const project = new ProjectModel({\n * eventsData : [...],\n * resourcesData : [...],\n * assignmentsData : [...],\n * dependenciesData : [...],\n * resourceTimeRangesData : [...],\n * timeRangesData : [...]\n * });\n *\n * const json = project.toJSON();\n *\n * // json:\n * {\n * eventsData : [...],\n * resourcesData : [...],\n * dependenciesData : [...],\n * assignmentsData : [...],\n * resourceTimeRangesData : [...],\n * timeRangesData : [...]\n * }\n * ```\n *\n * Output can be consumed by `loadInlineData()`:\n *\n * ```javascript\n * const json = project.toJSON();\n *\n * // Plug it back in later\n * project.loadInlineData(json);\n * ```\n *\n * @returns {Object}\n * @category Inline data\n */\n toJSON() {\n const\n me = this,\n result = {\n eventsData : me.eventStore.toJSON(),\n resourcesData : me.resourceStore.toJSON(),\n dependenciesData : me.dependencyStore.toJSON(),\n timeRangesData : me.timeRangeStore.toJSON(),\n resourceTimeRangesData : me.resourceTimeRangeStore.toJSON()\n };\n if (!me.eventStore.usesSingleAssignment) {\n result.assignmentsData = me.assignmentStore.toJSON();\n }\n return result;\n }\n /**\n * Get or set project data (records from its stores) as a JSON string.\n *\n * Get a JSON string:\n *\n * ```javascript\n * const project = new ProjectModel({\n * eventsData : [...],\n * resourcesData : [...],\n * assignmentsData : [...],\n * dependenciesData : [...],\n * resourceTimeRangesData : [...],\n * timeRangesData : [...]\n * });\n *\n * const jsonString = project.json;\n *\n * // jsonString:\n * '{\"eventsData\":[...],\"resourcesData\":[...],...}'\n * ```\n *\n * Set a JSON string (to populate the project stores):\n *\n * ```javascript\n * project.json = '{\"eventsData\":[...],\"resourcesData\":[...],...}'\n * ```\n *\n * @property {String}\n * @category Inline data\n */\n get json() {\n return super.json;\n }\n changeJson(json) {\n if (typeof json === 'string') {\n json = StringHelper.safeJsonParse(json);\n }\n return json;\n }\n updateJson(json) {\n json && this.loadInlineData(json);\n }\n //endregion\n afterChange(toSet, wasSet) {\n super.afterChange(...arguments);\n if (wasSet.calendar) {\n this.trigger('calendarChange');\n }\n }\n doDestroy() {\n this.timeRangeStore.destroy();\n this.resourceTimeRangeStore.destroy();\n super.doDestroy();\n }\n};\n", "/**\n * @module Scheduler/model/mixin/ProjectCurrentConfig\n */\n/**\n * Mixin that makes sure current config for a project includes store data and is cleaned up properly.\n *\n * @mixin\n * @private\n */\nexport default Target => class ProjectCurrentConfig extends Target {\n // This function is not meant to be called by any code other than Base#getCurrentConfig().\n // It extracts the current configs/fields for the project, with special handling for inline data\n getCurrentConfig(options) {\n const\n me = this,\n result = super.getCurrentConfig(options);\n if (result) {\n for (const storeName of ['eventStore', 'resourceStore', 'assignmentStore', 'dependencyStore', 'timeRangeStore', 'resourceTimeRangeStore']) {\n const store = me[storeName];\n if (store) {\n if (store.count) {\n result[store.id + 'Data'] = store.getInlineData(options);\n }\n // Get stores current state, in case it has filters etc. added at runtime\n const storeState = store.getCurrentConfig(options);\n if (storeState && Object.keys(storeState).length > 0) {\n // If only the data property exists, remove the store to the config\n if ((Object.keys(storeState).length === 1 && storeState.data)) {\n delete result[storeName];\n }\n else {\n result[storeName] = Object.assign(result[storeName] || {}, storeState);\n }\n }\n // Remove empty store configs\n else if (result[storeName] && Object.keys(result[storeName]).length === 0) {\n delete result[storeName];\n }\n }\n }\n // Gantt specifics\n if (me.taskStore.isTaskStore) {\n delete result.eventModelClass;\n delete result.eventStoreClass;\n delete result.children;\n }\n return result;\n }\n }\n};\n", "import Base from '../../../Core/Base.js';\n/**\n * @module Scheduler/data/util/ModelPersistencyManager\n */\n/**\n * This class manages model persistency, it listens to model stores' beforesync event and removes all non persistable\n * records from sync operation. The logic has meaning only for CRUD-less sync operations.\n *\n * @private\n */\nexport default class ModelPersistencyManager extends Base {\n // region Event attachers\n set eventStore(newEventStore) {\n const me = this;\n me.eventStoreDetacher && me.eventStoreDetacher();\n me._eventStore = newEventStore;\n if (newEventStore && newEventStore.autoCommit) {\n me.eventStoreDetacher = newEventStore.ion({\n beforecommit : me.onEventStoreBeforeSync,\n thisObj : me,\n detachable : true,\n // Just in case\n prio : 100\n });\n }\n }\n get eventStore() {\n return this._eventStore;\n }\n set resourceStore(newResourceStore) {\n const me = this;\n me.resourceStoreDetacher && me.resourceStoreDetacher();\n me._resourceStore = newResourceStore;\n if (newResourceStore && newResourceStore.autoCommit) {\n me.resourceStoreDetacher = newResourceStore.ion({\n beforecommit : me.onResourceStoreBeforeSync,\n thisObj : me,\n detachable : true,\n // Just in case\n prio : 100\n });\n }\n }\n get resourceStore() {\n return this._resourceStore;\n }\n set assignmentStore(newAssignmentStore) {\n const me = this;\n me.assignmentStoreDetacher && me.assignmentStoreDetacher();\n me._assignmentStore = newAssignmentStore;\n if (newAssignmentStore && newAssignmentStore.autoSync) {\n me.assignmentStoreDetacher = newAssignmentStore.ion({\n beforecommit : me.onAssignmentStoreBeforeSync,\n thisObj : me,\n detachable : true,\n // Just in case\n prio : 100\n });\n }\n }\n get assignmentStore() {\n return this._assignmentStore;\n }\n set dependencyStore(newDependencyStore) {\n const me = this;\n me.dependencyStoreDetacher && me.dependencyStoreDetacher();\n me._dependencyStore = newDependencyStore;\n if (newDependencyStore && newDependencyStore.autoSync) {\n me.dependencyStoreDetacher = newDependencyStore.ion({\n beforecommit : me.onDependencyStoreBeforeSync,\n thisObj : me,\n detachable : true,\n // Just in case\n prio : 100\n });\n }\n }\n get dependencyStore() {\n return this._dependencyStore;\n }\n // endregion\n // region Event handlers\n onEventStoreBeforeSync({ changes }) {\n const me = this;\n me.removeNonPersistableRecordsToCreate(changes);\n return me.shallContinueSync(changes);\n }\n onResourceStoreBeforeSync({ changes }) {\n const me = this;\n me.removeNonPersistableRecordsToCreate(changes);\n return me.shallContinueSync(changes);\n }\n onAssignmentStoreBeforeSync({ changes }) {\n const me = this;\n me.removeNonPersistableRecordsToCreate(changes);\n return me.shallContinueSync(changes);\n }\n onDependencyStoreBeforeSync({ changes }) {\n const me = this;\n me.removeNonPersistableRecordsToCreate(changes);\n return me.shallContinueSync(changes);\n }\n // endregion\n // region Management rules\n removeNonPersistableRecordsToCreate(changes) {\n const recordsToCreate = changes.added || [];\n let r, i;\n // We remove from the array we iterate thus we iterate from end to start\n for (i = recordsToCreate.length - 1; i >= 0; --i) {\n r = recordsToCreate[i];\n if (!r.isPersistable) {\n recordsToCreate.splice(recordsToCreate.indexOf(r), 1);\n }\n }\n // Prevent empty create request\n if (recordsToCreate.length === 0) {\n changes.added.length = 0;\n }\n }\n shallContinueSync(options) {\n return Boolean((options.added && options.added.length > 0) ||\n (options.modified && options.modified.length > 0) ||\n (options.removed && options.removed.length > 0));\n }\n // endregion\n}\nModelPersistencyManager._$name = 'ModelPersistencyManager';", "// @ts-nocheck\nconst diffSecond = (date, diff) => {\n return new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds() + diff,\n date.getMilliseconds()\n );\n};\n/**\n * The code just copy/pasted from pre-built later.js file and made exported\n *\n * @private\n */\nexport const later = (function () {\n \"use strict\";\n var later = {\n version: \"1.2.0\"\n };\n if (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement) {\n \"use strict\";\n if (this == null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n }\n else if (n != 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n }\n if (!String.prototype.trim) {\n String.prototype.trim = function () {\n return this.replace(/^\\s+|\\s+$/g, \"\");\n };\n }\n later.array = {};\n later.array.sort = function (arr, zeroIsLast) {\n arr.sort(function (a, b) {\n return +a - +b;\n });\n if (zeroIsLast && arr[0] === 0) {\n arr.push(arr.shift());\n }\n };\n later.array.next = function (val, values, extent) {\n var cur, zeroIsLargest = extent[0] !== 0, nextIdx = 0;\n for (var i = values.length - 1; i > -1; --i) {\n cur = values[i];\n if (cur === val) {\n return cur;\n }\n if (cur > val || cur === 0 && zeroIsLargest && extent[1] > val) {\n nextIdx = i;\n continue;\n }\n break;\n }\n return values[nextIdx];\n };\n later.array.nextInvalid = function (val, values, extent) {\n var min = extent[0], max = extent[1], len = values.length, zeroVal = values[len - 1] === 0 && min !== 0 ? max : 0, next = val, i = values.indexOf(val), start = next;\n while (next === (values[i] || zeroVal)) {\n next++;\n if (next > max) {\n next = min;\n }\n i++;\n if (i === len) {\n i = 0;\n }\n if (next === start) {\n return undefined;\n }\n }\n return next;\n };\n later.array.prev = function (val, values, extent) {\n var cur, len = values.length, zeroIsLargest = extent[0] !== 0, prevIdx = len - 1;\n for (var i = 0; i < len; i++) {\n cur = values[i];\n if (cur === val) {\n return cur;\n }\n if (cur < val || cur === 0 && zeroIsLargest && extent[1] < val) {\n prevIdx = i;\n continue;\n }\n break;\n }\n return values[prevIdx];\n };\n later.array.prevInvalid = function (val, values, extent) {\n var min = extent[0], max = extent[1], len = values.length, zeroVal = values[len - 1] === 0 && min !== 0 ? max : 0, next = val, i = values.indexOf(val), start = next;\n while (next === (values[i] || zeroVal)) {\n next--;\n if (next < min) {\n next = max;\n }\n i--;\n if (i === -1) {\n i = len - 1;\n }\n if (next === start) {\n return undefined;\n }\n }\n return next;\n };\n later.day = later.D = {\n name: \"day\",\n range: 86400,\n val: function (d) {\n return d.D || (d.D = later.date.getDate.call(d));\n },\n isValid: function (d, val) {\n return later.D.val(d) === (val || later.D.extent(d)[1]);\n },\n extent: function (d) {\n if (d.DExtent)\n return d.DExtent;\n var month = later.M.val(d), max = later.DAYS_IN_MONTH[month - 1];\n if (month === 2 && later.dy.extent(d)[1] === 366) {\n max = max + 1;\n }\n return d.DExtent = [1, max];\n },\n start: function (d) {\n return d.DStart || (d.DStart = later.date.next(later.Y.val(d), later.M.val(d), later.D.val(d)));\n },\n end: function (d) {\n return d.DEnd || (d.DEnd = later.date.prev(later.Y.val(d), later.M.val(d), later.D.val(d)));\n },\n next: function (d, val) {\n val = val > later.D.extent(d)[1] ? 1 : val;\n var month = later.date.nextRollover(d, val, later.D, later.M), DMax = later.D.extent(month)[1];\n val = val > DMax ? 1 : val || DMax;\n return later.date.next(later.Y.val(month), later.M.val(month), val);\n },\n prev: function (d, val) {\n var month = later.date.prevRollover(d, val, later.D, later.M), DMax = later.D.extent(month)[1];\n return later.date.prev(later.Y.val(month), later.M.val(month), val > DMax ? DMax : val || DMax);\n }\n };\n later.dayOfWeekCount = later.dc = {\n name: \"day of week count\",\n range: 604800,\n val: function (d) {\n return d.dc || (d.dc = Math.floor((later.D.val(d) - 1) / 7) + 1);\n },\n isValid: function (d, val) {\n return later.dc.val(d) === val || val === 0 && later.D.val(d) > later.D.extent(d)[1] - 7;\n },\n extent: function (d) {\n return d.dcExtent || (d.dcExtent = [1, Math.ceil(later.D.extent(d)[1] / 7)]);\n },\n start: function (d) {\n return d.dcStart || (d.dcStart = later.date.next(later.Y.val(d), later.M.val(d), Math.max(1, (later.dc.val(d) - 1) * 7 + 1 || 1)));\n },\n end: function (d) {\n return d.dcEnd || (d.dcEnd = later.date.prev(later.Y.val(d), later.M.val(d), Math.min(later.dc.val(d) * 7, later.D.extent(d)[1])));\n },\n next: function (d, val) {\n val = val > later.dc.extent(d)[1] ? 1 : val;\n var month = later.date.nextRollover(d, val, later.dc, later.M), dcMax = later.dc.extent(month)[1];\n val = val > dcMax ? 1 : val;\n var next = later.date.next(later.Y.val(month), later.M.val(month), val === 0 ? later.D.extent(month)[1] - 6 : 1 + 7 * (val - 1));\n if (next.getTime() <= d.getTime()) {\n month = later.M.next(d, later.M.val(d) + 1);\n return later.date.next(later.Y.val(month), later.M.val(month), val === 0 ? later.D.extent(month)[1] - 6 : 1 + 7 * (val - 1));\n }\n return next;\n },\n prev: function (d, val) {\n var month = later.date.prevRollover(d, val, later.dc, later.M), dcMax = later.dc.extent(month)[1];\n val = val > dcMax ? dcMax : val || dcMax;\n return later.dc.end(later.date.prev(later.Y.val(month), later.M.val(month), 1 + 7 * (val - 1)));\n }\n };\n later.dayOfWeek = later.dw = later.d = {\n name: \"day of week\",\n range: 86400,\n val: function (d) {\n return d.dw || (d.dw = later.date.getDay.call(d) + 1);\n },\n isValid: function (d, val) {\n return later.dw.val(d) === (val || 7);\n },\n extent: function () {\n return [1, 7];\n },\n start: function (d) {\n return later.D.start(d);\n },\n end: function (d) {\n return later.D.end(d);\n },\n next: function (d, val) {\n val = val > 7 ? 1 : val || 7;\n return later.date.next(later.Y.val(d), later.M.val(d), later.D.val(d) + (val - later.dw.val(d)) + (val <= later.dw.val(d) ? 7 : 0));\n },\n prev: function (d, val) {\n val = val > 7 ? 7 : val || 7;\n return later.date.prev(later.Y.val(d), later.M.val(d), later.D.val(d) + (val - later.dw.val(d)) + (val >= later.dw.val(d) ? -7 : 0));\n }\n };\n later.dayOfYear = later.dy = {\n name: \"day of year\",\n range: 86400,\n val: function (d) {\n return d.dy || (d.dy = Math.ceil(1 + (later.D.start(d).getTime() - later.Y.start(d).getTime()) / later.DAY));\n },\n isValid: function (d, val) {\n return later.dy.val(d) === (val || later.dy.extent(d)[1]);\n },\n extent: function (d) {\n var year = later.Y.val(d);\n return d.dyExtent || (d.dyExtent = [1, year % 4 ? 365 : 366]);\n },\n start: function (d) {\n return later.D.start(d);\n },\n end: function (d) {\n return later.D.end(d);\n },\n next: function (d, val) {\n val = val > later.dy.extent(d)[1] ? 1 : val;\n var year = later.date.nextRollover(d, val, later.dy, later.Y), dyMax = later.dy.extent(year)[1];\n val = val > dyMax ? 1 : val || dyMax;\n return later.date.next(later.Y.val(year), later.M.val(year), val);\n },\n prev: function (d, val) {\n var year = later.date.prevRollover(d, val, later.dy, later.Y), dyMax = later.dy.extent(year)[1];\n val = val > dyMax ? dyMax : val || dyMax;\n return later.date.prev(later.Y.val(year), later.M.val(year), val);\n }\n };\n later.hour = later.h = {\n name: \"hour\",\n range: 3600,\n val: function (d) {\n return d.h || (d.h = later.date.getHour.call(d));\n },\n isValid: function (d, val) {\n return later.h.val(d) === val;\n },\n extent: function () {\n return [0, 23];\n },\n start: function (d) {\n return d.hStart || (d.hStart = later.date.next(later.Y.val(d), later.M.val(d), later.D.val(d), later.h.val(d)));\n },\n end: function (d) {\n return d.hEnd || (d.hEnd = later.date.prev(later.Y.val(d), later.M.val(d), later.D.val(d), later.h.val(d)));\n },\n next: function (d, val) {\n val = val > 23 ? 0 : val;\n var next = later.date.next(later.Y.val(d), later.M.val(d), later.D.val(d) + (val <= later.h.val(d) ? 1 : 0), val);\n if (!later.date.isUTC && next.getTime() <= d.getTime()) {\n next = later.date.next(later.Y.val(next), later.M.val(next), later.D.val(next), val + 1);\n }\n return next;\n },\n prev: function (d, val) {\n val = val > 23 ? 23 : val;\n return later.date.prev(later.Y.val(d), later.M.val(d), later.D.val(d) + (val >= later.h.val(d) ? -1 : 0), val);\n }\n };\n later.minute = later.m = {\n name: \"minute\",\n range: 60,\n val: function (d) {\n return d.m || (d.m = later.date.getMin.call(d));\n },\n isValid: function (d, val) {\n return later.m.val(d) === val;\n },\n extent: function (d) {\n return [0, 59];\n },\n start: function (d) {\n return d.mStart || (d.mStart = later.date.next(later.Y.val(d), later.M.val(d), later.D.val(d), later.h.val(d), later.m.val(d)));\n },\n end: function (d) {\n return d.mEnd || (d.mEnd = later.date.prev(later.Y.val(d), later.M.val(d), later.D.val(d), later.h.val(d), later.m.val(d)));\n },\n next: function (d, val) {\n var m = later.m.val(d), s = later.s.val(d), inc = val > 59 ? 60 - m : val <= m ? 60 - m + val : val - m, next = new Date(d.getTime() + inc * later.MIN - s * later.SEC);\n if (!later.date.isUTC && next.getTime() <= d.getTime()) {\n next = new Date(d.getTime() + (inc + 120) * later.MIN - s * later.SEC);\n }\n return next;\n },\n prev: function (d, val) {\n val = val > 59 ? 59 : val;\n return later.date.prev(later.Y.val(d), later.M.val(d), later.D.val(d), later.h.val(d) + (val >= later.m.val(d) ? -1 : 0), val);\n }\n };\n later.month = later.M = {\n name: \"month\",\n range: 2629740,\n val: function (d) {\n return d.M || (d.M = later.date.getMonth.call(d) + 1);\n },\n isValid: function (d, val) {\n return later.M.val(d) === (val || 12);\n },\n extent: function () {\n return [1, 12];\n },\n start: function (d) {\n return d.MStart || (d.MStart = later.date.next(later.Y.val(d), later.M.val(d)));\n },\n end: function (d) {\n return d.MEnd || (d.MEnd = later.date.prev(later.Y.val(d), later.M.val(d)));\n },\n next: function (d, val) {\n val = val > 12 ? 1 : val || 12;\n return later.date.next(later.Y.val(d) + (val > later.M.val(d) ? 0 : 1), val);\n },\n prev: function (d, val) {\n val = val > 12 ? 12 : val || 12;\n return later.date.prev(later.Y.val(d) - (val >= later.M.val(d) ? 1 : 0), val);\n }\n };\n later.second = later.s = {\n name: \"second\",\n range: 1,\n val: function (d) {\n return d.s || (d.s = later.date.getSec.call(d));\n },\n isValid: function (d, val) {\n return later.s.val(d) === val;\n },\n extent: function () {\n return [0, 59];\n },\n start: function (d) {\n return d;\n },\n end: function (d) {\n return d;\n },\n next: function (d, val) {\n var s = later.s.val(d), inc = val > 59 ? 60 - s : val <= s ? 60 - s + val : val - s, next = new Date(d.getTime() + inc * later.SEC);\n if (!later.date.isUTC && next.getTime() <= d.getTime()) {\n next = new Date(d.getTime() + (inc + 7200) * later.SEC);\n }\n return next;\n },\n prev: function (d, val, cache) {\n val = val > 59 ? 59 : val;\n return later.date.prev(later.Y.val(d), later.M.val(d), later.D.val(d), later.h.val(d), later.m.val(d) + (val >= later.s.val(d) ? -1 : 0), val);\n }\n };\n later.time = later.t = {\n name: \"time\",\n range: 1,\n val: function (d) {\n return d.t || (d.t = later.h.val(d) * 3600 + later.m.val(d) * 60 + later.s.val(d));\n },\n isValid: function (d, val) {\n return later.t.val(d) === val;\n },\n extent: function () {\n return [0, 86399];\n },\n start: function (d) {\n return d;\n },\n end: function (d) {\n return d;\n },\n next: function (d, val) {\n val = val > 86399 ? 0 : val;\n var next = later.date.next(later.Y.val(d), later.M.val(d), later.D.val(d) + (val <= later.t.val(d) ? 1 : 0), 0, 0, val);\n if (!later.date.isUTC && next.getTime() < d.getTime()) {\n next = later.date.next(later.Y.val(next), later.M.val(next), later.D.val(next), later.h.val(next), later.m.val(next), val + 7200);\n }\n return next;\n },\n prev: function (d, val) {\n val = val > 86399 ? 86399 : val;\n return later.date.next(later.Y.val(d), later.M.val(d), later.D.val(d) + (val >= later.t.val(d) ? -1 : 0), 0, 0, val);\n }\n };\n later.weekOfMonth = later.wm = {\n name: \"week of month\",\n range: 604800,\n val: function (d) {\n return d.wm || (d.wm = (later.D.val(d) + (later.dw.val(later.M.start(d)) - 1) + (7 - later.dw.val(d))) / 7);\n },\n isValid: function (d, val) {\n return later.wm.val(d) === (val || later.wm.extent(d)[1]);\n },\n extent: function (d) {\n return d.wmExtent || (d.wmExtent = [1, (later.D.extent(d)[1] + (later.dw.val(later.M.start(d)) - 1) + (7 - later.dw.val(later.M.end(d)))) / 7]);\n },\n start: function (d) {\n return d.wmStart || (d.wmStart = later.date.next(later.Y.val(d), later.M.val(d), Math.max(later.D.val(d) - later.dw.val(d) + 1, 1)));\n },\n end: function (d) {\n return d.wmEnd || (d.wmEnd = later.date.prev(later.Y.val(d), later.M.val(d), Math.min(later.D.val(d) + (7 - later.dw.val(d)), later.D.extent(d)[1])));\n },\n next: function (d, val) {\n val = val > later.wm.extent(d)[1] ? 1 : val;\n var month = later.date.nextRollover(d, val, later.wm, later.M), wmMax = later.wm.extent(month)[1];\n val = val > wmMax ? 1 : val || wmMax;\n return later.date.next(later.Y.val(month), later.M.val(month), Math.max(1, (val - 1) * 7 - (later.dw.val(month) - 2)));\n },\n prev: function (d, val) {\n var month = later.date.prevRollover(d, val, later.wm, later.M), wmMax = later.wm.extent(month)[1];\n val = val > wmMax ? wmMax : val || wmMax;\n return later.wm.end(later.date.next(later.Y.val(month), later.M.val(month), Math.max(1, (val - 1) * 7 - (later.dw.val(month) - 2))));\n }\n };\n later.weekOfYear = later.wy = {\n name: \"week of year (ISO)\",\n range: 604800,\n val: function (d) {\n if (d.wy)\n return d.wy;\n var wThur = later.dw.next(later.wy.start(d), 5), YThur = later.dw.next(later.Y.prev(wThur, later.Y.val(wThur) - 1), 5);\n return d.wy = 1 + Math.ceil((wThur.getTime() - YThur.getTime()) / later.WEEK);\n },\n isValid: function (d, val) {\n return later.wy.val(d) === (val || later.wy.extent(d)[1]);\n },\n extent: function (d) {\n if (d.wyExtent)\n return d.wyExtent;\n var year = later.dw.next(later.wy.start(d), 5), dwFirst = later.dw.val(later.Y.start(year)), dwLast = later.dw.val(later.Y.end(year));\n return d.wyExtent = [1, dwFirst === 5 || dwLast === 5 ? 53 : 52];\n },\n start: function (d) {\n return d.wyStart || (d.wyStart = later.date.next(later.Y.val(d), later.M.val(d), later.D.val(d) - (later.dw.val(d) > 1 ? later.dw.val(d) - 2 : 6)));\n },\n end: function (d) {\n return d.wyEnd || (d.wyEnd = later.date.prev(later.Y.val(d), later.M.val(d), later.D.val(d) + (later.dw.val(d) > 1 ? 8 - later.dw.val(d) : 0)));\n },\n next: function (d, val) {\n val = val > later.wy.extent(d)[1] ? 1 : val;\n var wyThur = later.dw.next(later.wy.start(d), 5), year = later.date.nextRollover(wyThur, val, later.wy, later.Y);\n if (later.wy.val(year) !== 1) {\n year = later.dw.next(year, 2);\n }\n var wyMax = later.wy.extent(year)[1], wyStart = later.wy.start(year);\n val = val > wyMax ? 1 : val || wyMax;\n return later.date.next(later.Y.val(wyStart), later.M.val(wyStart), later.D.val(wyStart) + 7 * (val - 1));\n },\n prev: function (d, val) {\n var wyThur = later.dw.next(later.wy.start(d), 5), year = later.date.prevRollover(wyThur, val, later.wy, later.Y);\n if (later.wy.val(year) !== 1) {\n year = later.dw.next(year, 2);\n }\n var wyMax = later.wy.extent(year)[1], wyEnd = later.wy.end(year);\n val = val > wyMax ? wyMax : val || wyMax;\n return later.wy.end(later.date.next(later.Y.val(wyEnd), later.M.val(wyEnd), later.D.val(wyEnd) + 7 * (val - 1)));\n }\n };\n later.year = later.Y = {\n name: \"year\",\n range: 31556900,\n val: function (d) {\n return d.Y || (d.Y = later.date.getYear.call(d));\n },\n isValid: function (d, val) {\n return later.Y.val(d) === val;\n },\n extent: function () {\n return [1970, 2099];\n },\n start: function (d) {\n return d.YStart || (d.YStart = later.date.next(later.Y.val(d)));\n },\n end: function (d) {\n return d.YEnd || (d.YEnd = later.date.prev(later.Y.val(d)));\n },\n next: function (d, val) {\n return val > later.Y.val(d) && val <= later.Y.extent()[1] ? later.date.next(val) : later.NEVER;\n },\n prev: function (d, val) {\n return val < later.Y.val(d) && val >= later.Y.extent()[0] ? later.date.prev(val) : later.NEVER;\n }\n };\n later.fullDate = later.fd = {\n name: \"full date\",\n range: 1,\n val: function (d) {\n return d.fd || (d.fd = d.getTime());\n },\n isValid: function (d, val) {\n return later.fd.val(d) === val;\n },\n extent: function () {\n return [0, 3250368e7];\n },\n start: function (d) {\n return d;\n },\n end: function (d) {\n return d;\n },\n next: function (d, val) {\n return later.fd.val(d) < val ? new Date(val) : later.NEVER;\n },\n prev: function (d, val) {\n return later.fd.val(d) > val ? new Date(val) : later.NEVER;\n }\n };\n later.modifier = {};\n later.modifier.after = later.modifier.a = function (constraint, values) {\n var value = values[0];\n return {\n name: \"after \" + constraint.name,\n range: (constraint.extent(new Date())[1] - value) * constraint.range,\n val: constraint.val,\n isValid: function (d, val) {\n return this.val(d) >= value;\n },\n extent: constraint.extent,\n start: constraint.start,\n end: constraint.end,\n next: function (startDate, val) {\n if (val != value)\n val = constraint.extent(startDate)[0];\n return constraint.next(startDate, val);\n },\n prev: function (startDate, val) {\n val = val === value ? constraint.extent(startDate)[1] : value - 1;\n return constraint.prev(startDate, val);\n }\n };\n };\n later.modifier.before = later.modifier.b = function (constraint, values) {\n var value = values[values.length - 1];\n return {\n name: \"before \" + constraint.name,\n range: constraint.range * (value - 1),\n val: constraint.val,\n isValid: function (d, val) {\n return this.val(d) < value;\n },\n extent: constraint.extent,\n start: constraint.start,\n end: constraint.end,\n next: function (startDate, val) {\n val = val === value ? constraint.extent(startDate)[0] : value;\n return constraint.next(startDate, val);\n },\n prev: function (startDate, val) {\n val = val === value ? value - 1 : constraint.extent(startDate)[1];\n return constraint.prev(startDate, val);\n }\n };\n };\n later.compile = function (schedDef) {\n var constraints = [], constraintsLen = 0, tickConstraint;\n for (var key in schedDef) {\n var nameParts = key.split(\"_\"), name = nameParts[0], mod = nameParts[1], vals = schedDef[key], constraint = mod ? later.modifier[mod](later[name], vals) : later[name];\n constraints.push({\n constraint: constraint,\n vals: vals\n });\n constraintsLen++;\n }\n constraints.sort(function (a, b) {\n var ra = a.constraint.range, rb = b.constraint.range;\n return rb < ra ? -1 : rb > ra ? 1 : 0;\n });\n tickConstraint = constraints[constraintsLen - 1].constraint;\n function compareFn(dir) {\n return dir === \"next\" ? function (a, b) {\n return a.getTime() > b.getTime();\n } : function (a, b) {\n return b.getTime() > a.getTime();\n };\n }\n return {\n start: function (dir, startDate) {\n var next = startDate, nextVal = later.array[dir], maxAttempts = 1e3, done;\n while (maxAttempts-- && !done && next) {\n done = true;\n for (var i = 0; i < constraintsLen; i++) {\n var constraint = constraints[i].constraint, curVal = constraint.val(next), extent = constraint.extent(next), newVal = nextVal(curVal, constraints[i].vals, extent);\n if (!constraint.isValid(next, newVal)) {\n next = constraint[dir](next, newVal);\n done = false;\n break;\n }\n }\n }\n if (next !== later.NEVER) {\n next = dir === \"next\" ? tickConstraint.start(next) : tickConstraint.end(next);\n }\n return next;\n },\n end: function (dir, startDate) {\n var result, nextVal = later.array[dir + \"Invalid\"], compare = compareFn(dir);\n for (var i = constraintsLen - 1; i >= 0; i--) {\n var constraint = constraints[i].constraint, curVal = constraint.val(startDate), extent = constraint.extent(startDate), newVal = nextVal(curVal, constraints[i].vals, extent), next;\n if (newVal !== undefined) {\n next = constraint[dir](startDate, newVal);\n if (next && (!result || compare(result, next))) {\n result = next;\n }\n }\n }\n return result;\n },\n tick: function (dir, date) {\n return new Date(dir === \"next\" ? tickConstraint.end(date).getTime() + later.SEC : tickConstraint.start(date).getTime() - later.SEC);\n },\n // PATCH\n tickSafe: function (dir, date) {\n return dir === \"next\"\n ? diffSecond(tickConstraint.end(date), 1)\n : diffSecond(tickConstraint.start(date), -1)\n ;\n },\n // EOF PATCH\n tickStart: function (date) {\n return tickConstraint.start(date);\n }\n };\n };\n later.schedule = function (sched) {\n if (!sched)\n throw new Error(\"Missing schedule definition.\");\n if (!sched.schedules)\n throw new Error(\"Definition must include at least one schedule.\");\n var schedules = [], schedulesLen = sched.schedules.length, exceptions = [], exceptionsLen = sched.exceptions ? sched.exceptions.length : 0;\n for (var i = 0; i < schedulesLen; i++) {\n schedules.push(later.compile(sched.schedules[i]));\n }\n for (var j = 0; j < exceptionsLen; j++) {\n exceptions.push(later.compile(sched.exceptions[j]));\n }\n function getInstances(dir, count, startDate, endDate, isRange) {\n var compare = compareFn(dir), loopCount = count, maxAttempts = 1e6, schedStarts = [], exceptStarts = [], next, end, results = [], isForward = dir === \"next\", lastResult, rStart = isForward ? 0 : 1, rEnd = isForward ? 1 : 0;\n startDate = startDate ? new Date(startDate) : new Date();\n if (!startDate || !startDate.getTime())\n throw new Error(\"Invalid start date.\");\n setNextStarts(dir, schedules, schedStarts, startDate);\n setRangeStarts(dir, exceptions, exceptStarts, startDate);\n while (maxAttempts-- && loopCount && (next = findNext(schedStarts, compare))) {\n if (endDate && compare(next, endDate)) {\n break;\n }\n if (exceptionsLen) {\n updateRangeStarts(dir, exceptions, exceptStarts, next);\n if (end = calcRangeOverlap(dir, exceptStarts, next)) {\n updateNextStarts(dir, schedules, schedStarts, end);\n continue;\n }\n }\n if (isRange) {\n var maxEndDate = calcMaxEndDate(exceptStarts, compare);\n end = calcEnd(dir, schedules, schedStarts, next, maxEndDate);\n var r = isForward ? [new Date(Math.max(startDate, next)), end ? new Date(endDate ? Math.min(end, endDate) : end) : undefined] : [end ? new Date(endDate ? Math.max(endDate, end.getTime() + later.SEC) : end.getTime() + later.SEC) : undefined, new Date(Math.min(startDate, next.getTime() + later.SEC))];\n if (lastResult && r[rStart].getTime() === lastResult[rEnd].getTime()) {\n lastResult[rEnd] = r[rEnd];\n loopCount++;\n }\n else {\n lastResult = r;\n results.push(lastResult);\n }\n if (!end)\n break;\n updateNextStarts(dir, schedules, schedStarts, end);\n }\n else {\n results.push(isForward ? new Date(Math.max(startDate, next)) : getStart(schedules, schedStarts, next, endDate));\n tickStarts(dir, schedules, schedStarts, next);\n }\n loopCount--;\n }\n for (var i = 0, len = results.length; i < len; i++) {\n var result = results[i];\n results[i] = Object.prototype.toString.call(result) === \"[object Array]\" ? [cleanDate(result[0]), cleanDate(result[1])] : cleanDate(result);\n }\n return results.length === 0 ? later.NEVER : count === 1 ? results[0] : results;\n }\n function cleanDate(d) {\n if (d instanceof Date && !isNaN(d.valueOf())) {\n return new Date(d);\n }\n return undefined;\n }\n function setNextStarts(dir, schedArr, startsArr, startDate) {\n for (var i = 0, len = schedArr.length; i < len; i++) {\n startsArr[i] = schedArr[i].start(dir, startDate);\n }\n }\n function updateNextStarts(dir, schedArr, startsArr, startDate) {\n var compare = compareFn(dir);\n for (var i = 0, len = schedArr.length; i < len; i++) {\n if (startsArr[i] && !compare(startsArr[i], startDate)) {\n startsArr[i] = schedArr[i].start(dir, startDate);\n }\n }\n }\n function setRangeStarts(dir, schedArr, rangesArr, startDate) {\n var compare = compareFn(dir);\n for (var i = 0, len = schedArr.length; i < len; i++) {\n var nextStart = schedArr[i].start(dir, startDate);\n if (!nextStart) {\n rangesArr[i] = later.NEVER;\n }\n else {\n rangesArr[i] = [nextStart, schedArr[i].end(dir, nextStart)];\n }\n }\n }\n function updateRangeStarts(dir, schedArr, rangesArr, startDate) {\n var compare = compareFn(dir);\n for (var i = 0, len = schedArr.length; i < len; i++) {\n if (rangesArr[i] && !compare(rangesArr[i][0], startDate)) {\n var nextStart = schedArr[i].start(dir, startDate);\n if (!nextStart) {\n rangesArr[i] = later.NEVER;\n }\n else {\n rangesArr[i] = [nextStart, schedArr[i].end(dir, nextStart)];\n }\n }\n }\n }\n function tickStarts(dir, schedArr, startsArr, startDate) {\n for (var i = 0, len = schedArr.length; i < len; i++) {\n if (startsArr[i] && startsArr[i].getTime() === startDate.getTime()) {\n // PATCH\n const newStart = schedArr[i].start(dir, schedArr[i].tick(dir, startDate));\n // if the calculated `newStart` is the same as previous, this is probably\n // an endless loop caused by the DST shift (the browser won't halt because later.js\n // has a limit of 100000 iterations, but the calculated schedules will be all wrong)\n if (newStart !== later.NEVER && newStart.getTime() === startsArr[i].getTime()) {\n // in such case we use our own \"safe\" implementation of the \"tick\" method\n // which performs symbolic date manipulation\n // (instead of advancing on milliseconds since epoch timeaxis)\n // the former seems to be slower, that's why we only switch to it\n // in the case of infinite loop\n startsArr[i] = schedArr[i].start(dir, schedArr[i].tickSafe(dir, startDate));\n } else {\n startsArr[i] = newStart\n }\n // EOF PATCH\n }\n }\n }\n function getStart(schedArr, startsArr, startDate, minEndDate) {\n var result;\n for (var i = 0, len = startsArr.length; i < len; i++) {\n if (startsArr[i] && startsArr[i].getTime() === startDate.getTime()) {\n var start = schedArr[i].tickStart(startDate);\n if (minEndDate && start < minEndDate) {\n return minEndDate;\n }\n if (!result || start > result) {\n result = start;\n }\n }\n }\n return result;\n }\n function calcRangeOverlap(dir, rangesArr, startDate) {\n var compare = compareFn(dir), result;\n for (var i = 0, len = rangesArr.length; i < len; i++) {\n var range = rangesArr[i];\n if (range && !compare(range[0], startDate) && (!range[1] || compare(range[1], startDate))) {\n if (!result || compare(range[1], result)) {\n result = range[1];\n }\n }\n }\n return result;\n }\n function calcMaxEndDate(exceptsArr, compare) {\n var result;\n for (var i = 0, len = exceptsArr.length; i < len; i++) {\n if (exceptsArr[i] && (!result || compare(result, exceptsArr[i][0]))) {\n result = exceptsArr[i][0];\n }\n }\n return result;\n }\n function calcEnd(dir, schedArr, startsArr, startDate, maxEndDate) {\n var compare = compareFn(dir), result;\n for (var i = 0, len = schedArr.length; i < len; i++) {\n var start = startsArr[i];\n if (start && start.getTime() === startDate.getTime()) {\n var end = schedArr[i].end(dir, start);\n if (maxEndDate && (!end || compare(end, maxEndDate))) {\n return maxEndDate;\n }\n if (!result || compare(end, result)) {\n result = end;\n }\n }\n }\n return result;\n }\n function compareFn(dir) {\n return dir === \"next\" ? function (a, b) {\n return !b || a.getTime() > b.getTime();\n } : function (a, b) {\n return !a || b.getTime() > a.getTime();\n };\n }\n function findNext(arr, compare) {\n var next = arr[0];\n for (var i = 1, len = arr.length; i < len; i++) {\n if (arr[i] && compare(next, arr[i])) {\n next = arr[i];\n }\n }\n return next;\n }\n return {\n isValid: function (d) {\n return getInstances(\"next\", 1, d, d) !== later.NEVER;\n },\n next: function (count, startDate, endDate) {\n return getInstances(\"next\", count || 1, startDate, endDate);\n },\n prev: function (count, startDate, endDate) {\n return getInstances(\"prev\", count || 1, startDate, endDate);\n },\n nextRange: function (count, startDate, endDate) {\n return getInstances(\"next\", count || 1, startDate, endDate, true);\n },\n prevRange: function (count, startDate, endDate) {\n return getInstances(\"prev\", count || 1, startDate, endDate, true);\n }\n };\n };\n later.setTimeout = function (fn, sched) {\n var s = later.schedule(sched), t;\n if (fn) {\n scheduleTimeout();\n }\n function scheduleTimeout() {\n var now = Date.now(), next = s.next(2, now);\n if (!next[0]) {\n t = undefined;\n return;\n }\n var diff = next[0].getTime() - now;\n if (diff < 1e3) {\n diff = next[1] ? next[1].getTime() - now : 1e3;\n }\n if (diff < 2147483647) {\n t = setTimeout(fn, diff);\n }\n else {\n t = setTimeout(scheduleTimeout, 2147483647);\n }\n }\n return {\n isDone: function () {\n return !t;\n },\n clear: function () {\n clearTimeout(t);\n }\n };\n };\n later.setInterval = function (fn, sched) {\n if (!fn) {\n return;\n }\n var t = later.setTimeout(scheduleTimeout, sched), done = t.isDone();\n function scheduleTimeout() {\n if (!done) {\n fn();\n t = later.setTimeout(scheduleTimeout, sched);\n }\n }\n return {\n isDone: function () {\n return t.isDone();\n },\n clear: function () {\n done = true;\n t.clear();\n }\n };\n };\n later.date = {};\n later.date.timezone = function (useLocalTime) {\n later.date.build = useLocalTime ? function (Y, M, D, h, m, s) {\n return new Date(Y, M, D, h, m, s);\n } : function (Y, M, D, h, m, s) {\n return new Date(Date.UTC(Y, M, D, h, m, s));\n };\n var get = useLocalTime ? \"get\" : \"getUTC\", d = Date.prototype;\n later.date.getYear = d[get + \"FullYear\"];\n later.date.getMonth = d[get + \"Month\"];\n later.date.getDate = d[get + \"Date\"];\n later.date.getDay = d[get + \"Day\"];\n later.date.getHour = d[get + \"Hours\"];\n later.date.getMin = d[get + \"Minutes\"];\n later.date.getSec = d[get + \"Seconds\"];\n later.date.isUTC = !useLocalTime;\n };\n later.date.UTC = function () {\n later.date.timezone(false);\n };\n later.date.localTime = function () {\n later.date.timezone(true);\n };\n later.date.UTC();\n later.SEC = 1e3;\n later.MIN = later.SEC * 60;\n later.HOUR = later.MIN * 60;\n later.DAY = later.HOUR * 24;\n later.WEEK = later.DAY * 7;\n later.DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n later.NEVER = 0;\n later.date.next = function (Y, M, D, h, m, s) {\n return later.date.build(Y, M !== undefined ? M - 1 : 0, D !== undefined ? D : 1, h || 0, m || 0, s || 0);\n };\n later.date.nextRollover = function (d, val, constraint, period) {\n var cur = constraint.val(d), max = constraint.extent(d)[1];\n return (val || max) <= cur || val > max ? new Date(period.end(d).getTime() + later.SEC) : period.start(d);\n };\n later.date.prev = function (Y, M, D, h, m, s) {\n var len = arguments.length;\n M = len < 2 ? 11 : M - 1;\n D = len < 3 ? later.D.extent(later.date.next(Y, M + 1))[1] : D;\n h = len < 4 ? 23 : h;\n m = len < 5 ? 59 : m;\n s = len < 6 ? 59 : s;\n return later.date.build(Y, M, D, h, m, s);\n };\n later.date.prevRollover = function (d, val, constraint, period) {\n var cur = constraint.val(d);\n return val >= cur || !val ? period.start(period.prev(d, period.val(d) - 1)) : period.start(d);\n };\n later.parse = {};\n later.parse.cron = function (expr, hasSeconds) {\n var NAMES = {\n JAN: 1,\n FEB: 2,\n MAR: 3,\n APR: 4,\n MAY: 5,\n JUN: 6,\n JUL: 7,\n AUG: 8,\n SEP: 9,\n OCT: 10,\n NOV: 11,\n DEC: 12,\n SUN: 1,\n MON: 2,\n TUE: 3,\n WED: 4,\n THU: 5,\n FRI: 6,\n SAT: 7\n };\n var REPLACEMENTS = {\n \"* * * * * *\": \"0/1 * * * * *\",\n \"@YEARLY\": \"0 0 1 1 *\",\n \"@ANNUALLY\": \"0 0 1 1 *\",\n \"@MONTHLY\": \"0 0 1 * *\",\n \"@WEEKLY\": \"0 0 * * 0\",\n \"@DAILY\": \"0 0 * * *\",\n \"@HOURLY\": \"0 * * * *\"\n };\n var FIELDS = {\n s: [0, 0, 59],\n m: [1, 0, 59],\n h: [2, 0, 23],\n D: [3, 1, 31],\n M: [4, 1, 12],\n Y: [6, 1970, 2099],\n d: [5, 1, 7, 1]\n };\n function getValue(value, offset, max) {\n return isNaN(value) ? NAMES[value] || null : Math.min(+value + (offset || 0), max || 9999);\n }\n function cloneSchedule(sched) {\n var clone = {}, field;\n for (field in sched) {\n if (field !== \"dc\" && field !== \"d\") {\n clone[field] = sched[field].slice(0);\n }\n }\n return clone;\n }\n function add(sched, name, min, max, inc) {\n var i = min;\n if (!sched[name]) {\n sched[name] = [];\n }\n while (i <= max) {\n if (sched[name].indexOf(i) < 0) {\n sched[name].push(i);\n }\n i += inc || 1;\n }\n sched[name].sort(function (a, b) {\n return a - b;\n });\n }\n function addHash(schedules, curSched, value, hash) {\n if (curSched.d && !curSched.dc || curSched.dc && curSched.dc.indexOf(hash) < 0) {\n schedules.push(cloneSchedule(curSched));\n curSched = schedules[schedules.length - 1];\n }\n add(curSched, \"d\", value, value);\n add(curSched, \"dc\", hash, hash);\n }\n function addWeekday(s, curSched, value) {\n var except1 = {}, except2 = {};\n if (value === 1) {\n add(curSched, \"D\", 1, 3);\n add(curSched, \"d\", NAMES.MON, NAMES.FRI);\n add(except1, \"D\", 2, 2);\n add(except1, \"d\", NAMES.TUE, NAMES.FRI);\n add(except2, \"D\", 3, 3);\n add(except2, \"d\", NAMES.TUE, NAMES.FRI);\n }\n else {\n add(curSched, \"D\", value - 1, value + 1);\n add(curSched, \"d\", NAMES.MON, NAMES.FRI);\n add(except1, \"D\", value - 1, value - 1);\n add(except1, \"d\", NAMES.MON, NAMES.THU);\n add(except2, \"D\", value + 1, value + 1);\n add(except2, \"d\", NAMES.TUE, NAMES.FRI);\n }\n s.exceptions.push(except1);\n s.exceptions.push(except2);\n }\n function addRange(item, curSched, name, min, max, offset) {\n var incSplit = item.split(\"/\"), inc = +incSplit[1], range = incSplit[0];\n if (range !== \"*\" && range !== \"0\") {\n var rangeSplit = range.split(\"-\");\n min = getValue(rangeSplit[0], offset, max);\n max = getValue(rangeSplit[1], offset, max) || max;\n }\n add(curSched, name, min, max, inc);\n }\n function parse(item, s, name, min, max, offset) {\n var value, split, schedules = s.schedules, curSched = schedules[schedules.length - 1];\n if (item === \"L\") {\n item = min - 1;\n }\n if ((value = getValue(item, offset, max)) !== null) {\n add(curSched, name, value, value);\n }\n else if ((value = getValue(item.replace(\"W\", \"\"), offset, max)) !== null) {\n addWeekday(s, curSched, value);\n }\n else if ((value = getValue(item.replace(\"L\", \"\"), offset, max)) !== null) {\n addHash(schedules, curSched, value, min - 1);\n }\n else if ((split = item.split(\"#\")).length === 2) {\n value = getValue(split[0], offset, max);\n addHash(schedules, curSched, value, getValue(split[1]));\n }\n else {\n addRange(item, curSched, name, min, max, offset);\n }\n }\n function isHash(item) {\n return item.indexOf(\"#\") > -1 || item.indexOf(\"L\") > 0;\n }\n function itemSorter(a, b) {\n return isHash(a) && !isHash(b) ? 1 : a - b;\n }\n function parseExpr(expr) {\n var schedule = {\n schedules: [{}],\n exceptions: []\n }, components = expr.replace(/(\\s)+/g, \" \").split(\" \"), field, f, component, items;\n for (field in FIELDS) {\n f = FIELDS[field];\n component = components[f[0]];\n if (component && component !== \"*\" && component !== \"?\") {\n items = component.split(\",\").sort(itemSorter);\n var i, length = items.length;\n for (i = 0; i < length; i++) {\n parse(items[i], schedule, field, f[1], f[2], f[3]);\n }\n }\n }\n return schedule;\n }\n function prepareExpr(expr) {\n var prepared = expr.toUpperCase();\n return REPLACEMENTS[prepared] || prepared;\n }\n var e = prepareExpr(expr);\n return parseExpr(hasSeconds ? e : \"0 \" + e);\n };\n later.parse.recur = function () {\n var schedules = [], exceptions = [], cur, curArr = schedules, curName, values, every, modifier, applyMin, applyMax, i, last;\n function add(name, min, max) {\n name = modifier ? name + \"_\" + modifier : name;\n if (!cur) {\n curArr.push({});\n cur = curArr[0];\n }\n if (!cur[name]) {\n cur[name] = [];\n }\n curName = cur[name];\n if (every) {\n values = [];\n for (i = min; i <= max; i += every) {\n values.push(i);\n }\n last = {\n n: name,\n x: every,\n c: curName.length,\n m: max\n };\n }\n values = applyMin ? [min] : applyMax ? [max] : values;\n var length = values.length;\n for (i = 0; i < length; i += 1) {\n var val = values[i];\n if (curName.indexOf(val) < 0) {\n curName.push(val);\n }\n }\n values = every = modifier = applyMin = applyMax = 0;\n }\n return {\n schedules: schedules,\n exceptions: exceptions,\n on: function () {\n values = arguments[0] instanceof Array ? arguments[0] : arguments;\n return this;\n },\n every: function (x) {\n every = x || 1;\n return this;\n },\n after: function (x) {\n modifier = \"a\";\n values = [x];\n return this;\n },\n before: function (x) {\n modifier = \"b\";\n values = [x];\n return this;\n },\n first: function () {\n applyMin = 1;\n return this;\n },\n last: function () {\n applyMax = 1;\n return this;\n },\n time: function () {\n for (var i = 0, len = values.length; i < len; i++) {\n var split = values[i].split(\":\");\n if (split.length < 3)\n split.push(0);\n values[i] = +split[0] * 3600 + +split[1] * 60 + +split[2];\n }\n add(\"t\");\n return this;\n },\n second: function () {\n add(\"s\", 0, 59);\n return this;\n },\n minute: function () {\n add(\"m\", 0, 59);\n return this;\n },\n hour: function () {\n add(\"h\", 0, 23);\n return this;\n },\n dayOfMonth: function () {\n add(\"D\", 1, applyMax ? 0 : 31);\n return this;\n },\n dayOfWeek: function () {\n add(\"d\", 1, 7);\n return this;\n },\n onWeekend: function () {\n values = [1, 7];\n return this.dayOfWeek();\n },\n onWeekday: function () {\n values = [2, 3, 4, 5, 6];\n return this.dayOfWeek();\n },\n dayOfWeekCount: function () {\n add(\"dc\", 1, applyMax ? 0 : 5);\n return this;\n },\n dayOfYear: function () {\n add(\"dy\", 1, applyMax ? 0 : 366);\n return this;\n },\n weekOfMonth: function () {\n add(\"wm\", 1, applyMax ? 0 : 5);\n return this;\n },\n weekOfYear: function () {\n add(\"wy\", 1, applyMax ? 0 : 53);\n return this;\n },\n month: function () {\n add(\"M\", 1, 12);\n return this;\n },\n year: function () {\n add(\"Y\", 1970, 2450);\n return this;\n },\n fullDate: function () {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i] = values[i].getTime();\n }\n add(\"fd\");\n return this;\n },\n customModifier: function (id, vals) {\n var custom = later.modifier[id];\n if (!custom)\n throw new Error(\"Custom modifier \" + id + \" not recognized!\");\n modifier = id;\n values = arguments[1] instanceof Array ? arguments[1] : [arguments[1]];\n return this;\n },\n customPeriod: function (id) {\n var custom = later[id];\n if (!custom)\n throw new Error(\"Custom time period \" + id + \" not recognized!\");\n add(id, custom.extent(new Date())[0], custom.extent(new Date())[1]);\n return this;\n },\n startingOn: function (start) {\n return this.between(start, last.m);\n },\n between: function (start, end) {\n cur[last.n] = cur[last.n].splice(0, last.c);\n every = last.x;\n add(last.n, start, end);\n return this;\n },\n and: function () {\n cur = curArr[curArr.push({}) - 1];\n return this;\n },\n except: function () {\n curArr = exceptions;\n cur = null;\n return this;\n }\n };\n };\n later.parse.text = function (str) {\n var recur = later.parse.recur, pos = 0, input = \"\", error;\n var TOKENTYPES = {\n eof: /^$/,\n fullDate: /^(\\d\\d\\d\\d-\\d\\d-\\d\\dt\\d\\d:\\d\\d:\\d\\d)\\b/,\n rank: /^((\\d\\d\\d\\d)|([2-5]?1(st)?|[2-5]?2(nd)?|[2-5]?3(rd)?|(0|[1-5]?[4-9]|[1-5]0|1[1-3])(th)?))\\b/,\n time: /^((([0]?[1-9]|1[0-2]):[0-5]\\d(\\s)?(am|pm))|(([0]?\\d|1\\d|2[0-3]):[0-5]\\d))\\b/,\n dayName: /^((sun|mon|tue(s)?|wed(nes)?|thu(r(s)?)?|fri|sat(ur)?)(day)?)\\b/,\n monthName: /^(jan(uary)?|feb(ruary)?|ma((r(ch)?)?|y)|apr(il)?|ju(ly|ne)|aug(ust)?|oct(ober)?|(sept|nov|dec)(ember)?)\\b/,\n yearIndex: /^(\\d\\d\\d\\d)\\b/,\n every: /^every\\b/,\n after: /^after\\b/,\n before: /^before\\b/,\n second: /^(s|sec(ond)?(s)?)\\b/,\n minute: /^(m|min(ute)?(s)?)\\b/,\n hour: /^(h|hour(s)?)\\b/,\n day: /^(day(s)?( of the month)?)\\b/,\n dayInstance: /^day instance\\b/,\n dayOfWeek: /^day(s)? of the week\\b/,\n dayOfYear: /^day(s)? of the year\\b/,\n weekOfYear: /^week(s)?( of the year)?\\b/,\n weekOfMonth: /^week(s)? of the month\\b/,\n weekday: /^weekday\\b/,\n weekend: /^weekend\\b/,\n month: /^month(s)?\\b/,\n year: /^year(s)?\\b/,\n between: /^between (the)?\\b/,\n start: /^(start(ing)? (at|on( the)?)?)\\b/,\n at: /^(at|@)\\b/,\n and: /^(,|and\\b)/,\n except: /^(except\\b)/,\n also: /(also)\\b/,\n first: /^(first)\\b/,\n last: /^last\\b/,\n \"in\": /^in\\b/,\n of: /^of\\b/,\n onthe: /^on the\\b/,\n on: /^on\\b/,\n through: /(-|^(to|through)\\b)/\n };\n var NAMES = {\n jan: 1,\n feb: 2,\n mar: 3,\n apr: 4,\n may: 5,\n jun: 6,\n jul: 7,\n aug: 8,\n sep: 9,\n oct: 10,\n nov: 11,\n dec: 12,\n sun: 1,\n mon: 2,\n tue: 3,\n wed: 4,\n thu: 5,\n fri: 6,\n sat: 7,\n \"1st\": 1,\n fir: 1,\n \"2nd\": 2,\n sec: 2,\n \"3rd\": 3,\n thi: 3,\n \"4th\": 4,\n \"for\": 4\n };\n function t(start, end, text, type) {\n return {\n startPos: start,\n endPos: end,\n text: text,\n type: type\n };\n }\n function peek(expected) {\n var scanTokens = expected instanceof Array ? expected : [expected], whiteSpace = /\\s+/, token, curInput, m, scanToken, start, len;\n scanTokens.push(whiteSpace);\n start = pos;\n while (!token || token.type === whiteSpace) {\n len = -1;\n curInput = input.substring(start);\n token = t(start, start, input.split(whiteSpace)[0]);\n var i, length = scanTokens.length;\n for (i = 0; i < length; i++) {\n scanToken = scanTokens[i];\n m = scanToken.exec(curInput);\n if (m && m.index === 0 && m[0].length > len) {\n len = m[0].length;\n token = t(start, start + len, curInput.substring(0, len), scanToken);\n }\n }\n if (token.type === whiteSpace) {\n start = token.endPos;\n }\n }\n return token;\n }\n function scan(expectedToken) {\n var token = peek(expectedToken);\n pos = token.endPos;\n return token;\n }\n function parseThroughExpr(tokenType) {\n var start = +parseTokenValue(tokenType), end = checkAndParse(TOKENTYPES.through) ? +parseTokenValue(tokenType) : start, nums = [];\n for (var i = start; i <= end; i++) {\n nums.push(i);\n }\n return nums;\n }\n function parseRanges(tokenType) {\n var nums = parseThroughExpr(tokenType);\n while (checkAndParse(TOKENTYPES.and)) {\n nums.push.apply(nums, parseThroughExpr(tokenType));\n }\n // https://github.com/bryntum/support/issues/7233\n // always sort the provided set of day names, otherwise\n // the `next` function returns unpredictable values\n if (tokenType === TOKENTYPES.dayName) {\n nums.sort((a, b) => a - b)\n }\n return nums;\n }\n function parseEvery(r) {\n var num, period, start, end;\n if (checkAndParse(TOKENTYPES.weekend)) {\n r.on(NAMES.sun, NAMES.sat).dayOfWeek();\n }\n else if (checkAndParse(TOKENTYPES.weekday)) {\n r.on(NAMES.mon, NAMES.tue, NAMES.wed, NAMES.thu, NAMES.fri).dayOfWeek();\n }\n else {\n num = parseTokenValue(TOKENTYPES.rank);\n r.every(num);\n period = parseTimePeriod(r);\n if (checkAndParse(TOKENTYPES.start)) {\n num = parseTokenValue(TOKENTYPES.rank);\n r.startingOn(num);\n parseToken(period.type);\n }\n else if (checkAndParse(TOKENTYPES.between)) {\n start = parseTokenValue(TOKENTYPES.rank);\n if (checkAndParse(TOKENTYPES.and)) {\n end = parseTokenValue(TOKENTYPES.rank);\n r.between(start, end);\n }\n }\n }\n }\n function parseOnThe(r) {\n if (checkAndParse(TOKENTYPES.first)) {\n r.first();\n }\n else if (checkAndParse(TOKENTYPES.last)) {\n r.last();\n }\n else {\n r.on(parseRanges(TOKENTYPES.rank));\n }\n parseTimePeriod(r);\n }\n function parseScheduleExpr(str) {\n pos = 0;\n input = str;\n error = -1;\n var r = recur();\n while (pos < input.length && error < 0) {\n var token = parseToken([TOKENTYPES.every, TOKENTYPES.after, TOKENTYPES.before, TOKENTYPES.onthe, TOKENTYPES.on, TOKENTYPES.of, TOKENTYPES[\"in\"], TOKENTYPES.at, TOKENTYPES.and, TOKENTYPES.except, TOKENTYPES.also]);\n switch (token.type) {\n case TOKENTYPES.every:\n parseEvery(r);\n break;\n case TOKENTYPES.after:\n if (peek(TOKENTYPES.time).type !== undefined) {\n r.after(parseTokenValue(TOKENTYPES.time));\n r.time();\n }\n else if (peek(TOKENTYPES.fullDate).type !== undefined) {\n r.after(parseTokenValue(TOKENTYPES.fullDate));\n r.fullDate();\n }\n else {\n r.after(parseTokenValue(TOKENTYPES.rank));\n parseTimePeriod(r);\n }\n break;\n case TOKENTYPES.before:\n if (peek(TOKENTYPES.time).type !== undefined) {\n r.before(parseTokenValue(TOKENTYPES.time));\n r.time();\n }\n else if (peek(TOKENTYPES.fullDate).type !== undefined) {\n r.before(parseTokenValue(TOKENTYPES.fullDate));\n r.fullDate();\n }\n else {\n r.before(parseTokenValue(TOKENTYPES.rank));\n parseTimePeriod(r);\n }\n break;\n case TOKENTYPES.onthe:\n parseOnThe(r);\n break;\n case TOKENTYPES.on:\n r.on(parseRanges(TOKENTYPES.dayName)).dayOfWeek();\n break;\n case TOKENTYPES.of:\n r.on(parseRanges(TOKENTYPES.monthName)).month();\n break;\n case TOKENTYPES[\"in\"]:\n r.on(parseRanges(TOKENTYPES.yearIndex)).year();\n break;\n case TOKENTYPES.at:\n r.on(parseTokenValue(TOKENTYPES.time)).time();\n while (checkAndParse(TOKENTYPES.and)) {\n r.on(parseTokenValue(TOKENTYPES.time)).time();\n }\n break;\n case TOKENTYPES.and:\n break;\n case TOKENTYPES.also:\n r.and();\n break;\n case TOKENTYPES.except:\n r.except();\n break;\n default:\n error = pos;\n }\n }\n return {\n schedules: r.schedules,\n exceptions: r.exceptions,\n error: error\n };\n }\n function parseTimePeriod(r) {\n var timePeriod = parseToken([TOKENTYPES.second, TOKENTYPES.minute, TOKENTYPES.hour, TOKENTYPES.dayOfYear, TOKENTYPES.dayOfWeek, TOKENTYPES.dayInstance, TOKENTYPES.day, TOKENTYPES.month, TOKENTYPES.year, TOKENTYPES.weekOfMonth, TOKENTYPES.weekOfYear]);\n switch (timePeriod.type) {\n case TOKENTYPES.second:\n r.second();\n break;\n case TOKENTYPES.minute:\n r.minute();\n break;\n case TOKENTYPES.hour:\n r.hour();\n break;\n case TOKENTYPES.dayOfYear:\n r.dayOfYear();\n break;\n case TOKENTYPES.dayOfWeek:\n r.dayOfWeek();\n break;\n case TOKENTYPES.dayInstance:\n r.dayOfWeekCount();\n break;\n case TOKENTYPES.day:\n r.dayOfMonth();\n break;\n case TOKENTYPES.weekOfMonth:\n r.weekOfMonth();\n break;\n case TOKENTYPES.weekOfYear:\n r.weekOfYear();\n break;\n case TOKENTYPES.month:\n r.month();\n break;\n case TOKENTYPES.year:\n r.year();\n break;\n default:\n error = pos;\n }\n return timePeriod;\n }\n function checkAndParse(tokenType) {\n var found = peek(tokenType).type === tokenType;\n if (found) {\n scan(tokenType);\n }\n return found;\n }\n function parseToken(tokenType) {\n var t = scan(tokenType);\n if (t.type) {\n t.text = convertString(t.text, tokenType);\n }\n else {\n error = pos;\n }\n return t;\n }\n function parseTokenValue(tokenType) {\n return parseToken(tokenType).text;\n }\n function convertString(str, tokenType) {\n var output = str;\n switch (tokenType) {\n case TOKENTYPES.time:\n var parts = str.split(/(:|am|pm)/), hour = parts[3] === \"pm\" && parts[0] < 12 ? parseInt(parts[0], 10) + 12 : parts[0], min = parts[2].trim();\n output = (hour.length === 1 ? \"0\" : \"\") + hour + \":\" + min;\n break;\n case TOKENTYPES.rank:\n output = parseInt(/^\\d+/.exec(str)[0], 10);\n break;\n case TOKENTYPES.monthName:\n case TOKENTYPES.dayName:\n output = NAMES[str.substring(0, 3)];\n break;\n case TOKENTYPES.fullDate:\n output = new Date(str.toUpperCase());\n break;\n }\n return output;\n }\n return parseScheduleExpr(str.toLowerCase());\n };\n return later;\n})();\n// Set the local time mode for \"later\" library\nlater.date.localTime();\nexport default later;\n", "import { Mixin } from \"../../ChronoGraph/class/BetterMixin.js\";\nimport later from \"../vendor/later/later.js\";\nimport { AbstractPartOfProjectModelMixin } from \"../quark/model/mixin/AbstractPartOfProjectModelMixin.js\";\n/**\n * This is a calendar interval mixin.\n *\n * Can be either a static time interval (if [[startDate]]/[[endDate]] are specified) or recurrent time interval\n * ([[recurrentStartDate]]/[[recurrentEndDate]]).\n *\n * By default it defines a non-working period ([[isWorking]] field has default value `false`),\n * but can also define an explicit working time, for example to override some previous period.\n *\n * You probably don't need to create instances of this mixin directly, instead you pass its configuration object to the [[AbstractCalendarMixin.addInterval]]\n */\nexport class CalendarIntervalMixin extends Mixin([AbstractPartOfProjectModelMixin], (base) => {\n const superProto = base.prototype;\n class CalendarIntervalMixin extends base {\n static get fields() {\n return [\n 'name',\n { name: 'startDate', type: 'date' },\n { name: 'endDate', type: 'date' },\n 'recurrentStartDate',\n 'recurrentEndDate',\n 'cls',\n 'iconCls',\n { name: 'isWorking', type: 'boolean', defaultValue: false },\n { name: 'priority', type: 'number' }\n ];\n }\n getCalendar() {\n return this.stores[0].calendar;\n }\n resetPriority() {\n this.priorityField = null;\n this.getCalendar().getDepth();\n }\n // not just `getPriority` to avoid clash with auto-generated getter in the subclasses\n getPriorityField() {\n if (this.priorityField != null)\n return this.priorityField;\n // 0 - 10000 interval is reserved for \"unspecified time\" intervals\n // then 10000 - 10100, 10100-10200, ... etc intervals are for the calendars at depth 0, 1, ... etc\n let base = 10000 + this.getCalendar().getDepth() * 100;\n let priority = this.priority;\n if (priority == null) {\n // recurrent intervals are considered \"base\" and have lower priority\n // static intervals are considered special case overrides and have higher priority\n priority = this.isRecurrent() ? 20 : 30;\n }\n // intervals from parent calendars will have lower priority\n return this.priorityField = base + priority;\n }\n /**\n * Whether this interval is recurrent (both [[recurrentStartDate]] and [[recurrentEndDate]] are present and parsed correctly\n * by the `later` library)\n */\n isRecurrent() {\n return Boolean(this.recurrentStartDate && this.recurrentEndDate && this.getStartDateSchedule() && this.getEndDateSchedule());\n }\n /**\n * Whether this interval is static - both [[startDate]] and [[endDate]] are present.\n */\n isStatic() {\n return Boolean(this.startDate && this.endDate);\n }\n /**\n * Helper method to parse [[recurrentStartDate]] and [[recurrentEndDate]] field values.\n * @param {Object|String} schedule Recurrence schedule\n * @returns {Object} Processed schedule ready to be used by later.schedule() method.\n * @private\n */\n parseDateSchedule(value) {\n let schedule = value;\n if (value && value !== Object(value)) {\n schedule = later.parse.text(value);\n if (schedule !== Object(schedule) || schedule.error >= 0) {\n // can be provided as JSON text\n try {\n schedule = JSON.parse(value);\n }\n catch (e) {\n return null;\n }\n }\n }\n return schedule;\n }\n getStartDateSchedule() {\n if (this.startDateSchedule)\n return this.startDateSchedule;\n const schedule = this.parseDateSchedule(this.recurrentStartDate);\n return this.startDateSchedule = later.schedule(schedule);\n }\n getEndDateSchedule() {\n if (this.endDateSchedule)\n return this.endDateSchedule;\n if (this.recurrentEndDate === 'EOD')\n return 'EOD';\n const schedule = this.parseDateSchedule(this.recurrentEndDate);\n return this.endDateSchedule = later.schedule(schedule);\n }\n }\n return CalendarIntervalMixin;\n}) {\n}\n", "import { Mixin } from \"../../ChronoGraph/class/BetterMixin.js\";\nimport { CalendarIntervalMixin } from \"./CalendarIntervalMixin.js\";\nimport { AbstractPartOfProjectStoreMixin } from \"../quark/store/mixin/AbstractPartOfProjectStoreMixin.js\";\n/**\n * This a collection of [[CalendarIntervalMixin]] items. Its a dumb collection though, the \"real\" calendar\n * is a [[AbstractCalendarMixin]] model, which is part of the [[AbstractCalendarManagerStoreMixin]].\n */\nexport class CalendarIntervalStore extends Mixin([AbstractPartOfProjectStoreMixin], (base) => {\n const superProto = base.prototype;\n class CalendarIntervalStore extends base {\n constructor() {\n super(...arguments);\n this.disableHasLoadedDataToCommitFlag = true;\n }\n static get defaultConfig() {\n return {\n modelClass: CalendarIntervalMixin\n };\n }\n }\n return CalendarIntervalStore;\n}) {\n}\n", "/**\n * The enumeration for the time units\n */\nexport var TimeUnit;\n(function (TimeUnit) {\n TimeUnit[\"Millisecond\"] = \"millisecond\";\n TimeUnit[\"Second\"] = \"second\";\n TimeUnit[\"Minute\"] = \"minute\";\n TimeUnit[\"Hour\"] = \"hour\";\n TimeUnit[\"Day\"] = \"day\";\n TimeUnit[\"Week\"] = \"week\";\n TimeUnit[\"Month\"] = \"month\";\n TimeUnit[\"Quarter\"] = \"quarter\";\n TimeUnit[\"Year\"] = \"year\";\n})(TimeUnit || (TimeUnit = {}));\n/**\n * The enumeration for the project constraint resolution ways.\n */\nexport var ProjectConstraintResolution;\n(function (ProjectConstraintResolution) {\n /**\n * Adjust the event dates to honor the constraint.\n */\n ProjectConstraintResolution[\"Honor\"] = \"honor\";\n /**\n * Ignore the constraint date and keep the event dates.\n */\n ProjectConstraintResolution[\"Ignore\"] = \"ignore\";\n /**\n * Yield a conflict to pick a resolution based on some application logic\n * (like UI dialog allowing user to choose a resolution).\n */\n ProjectConstraintResolution[\"Conflict\"] = \"conflict\";\n})(ProjectConstraintResolution || (ProjectConstraintResolution = {}));\n/**\n * The enumeration for the supported constraint types\n */\nexport var ConstraintType;\n(function (ConstraintType) {\n /**\n * \"Must start on\" constraint.\n * Restricts an event to start on a [[HasDateConstraintMixin.constraintDate|specified date]].\n * The constraint cannot be used for a summary event.\n */\n ConstraintType[\"MustStartOn\"] = \"muststarton\";\n /**\n * \"Must finish on\" constraint.\n * Restricts an event to finish on a [[HasDateConstraintMixin.constraintDate|specified date]].\n * The constraint cannot be used for a summary event.\n */\n ConstraintType[\"MustFinishOn\"] = \"mustfinishon\";\n /**\n * \"Start no earlier than\" constraint.\n * Restricting an event to start on or after a [[HasDateConstraintMixin.constraintDate|specified date]].\n */\n ConstraintType[\"StartNoEarlierThan\"] = \"startnoearlierthan\";\n /**\n * \"Start no later than\" constraint.\n * Restricting an event to start on or before a [[HasDateConstraintMixin.constraintDate|specified date]].\n *\n * The constraint cannot be used for a summary task.\n */\n ConstraintType[\"StartNoLaterThan\"] = \"startnolaterthan\";\n /**\n * \"Finish no earlier than\" constraint.\n * Restricting an event to finish on or after a [[HasDateConstraintMixin.constraintDate|specified date]].\n *\n * The constraint cannot be used for a summary task.\n */\n ConstraintType[\"FinishNoEarlierThan\"] = \"finishnoearlierthan\";\n /**\n * \"Finish no later than\" constraint.\n * Restricting an event to finish on or before a [[HasDateConstraintMixin.constraintDate|specified date]].\n */\n ConstraintType[\"FinishNoLaterThan\"] = \"finishnolaterthan\";\n /**\n * \"As soon as possible\" constraint.\n * Note this is not a date constraint per se, but a flag, that indicates that a task \"gravitates\" (is \"stickying\")\n * to the project's start date.\n */\n ConstraintType[\"AsSoonAsPossible\"] = \"assoonaspossible\";\n /**\n * \"As late as possible\" constraint.\n * Note this is not a date constraint per se, but a flag, that indicates that a task \"gravitates\" (is \"stickying\")\n * to the project's end date.\n */\n ConstraintType[\"AsLateAsPossible\"] = \"aslateaspossible\";\n})(ConstraintType || (ConstraintType = {}));\n/**\n * The enumeration for the supported scheduling modes\n */\nexport var SchedulingMode;\n(function (SchedulingMode) {\n SchedulingMode[\"Normal\"] = \"Normal\";\n SchedulingMode[\"FixedDuration\"] = \"FixedDuration\";\n SchedulingMode[\"FixedEffort\"] = \"FixedEffort\";\n SchedulingMode[\"FixedUnits\"] = \"FixedUnits\";\n})(SchedulingMode || (SchedulingMode = {}));\n/**\n * The enumeration for the dependency validation result\n */\nexport var DependencyValidationResult;\n(function (DependencyValidationResult) {\n /**\n * Dependency has no errors\n */\n DependencyValidationResult[DependencyValidationResult[\"NoError\"] = 0] = \"NoError\";\n /**\n * Indicates that the validated dependency builds a cycle\n */\n DependencyValidationResult[DependencyValidationResult[\"CyclicDependency\"] = 1] = \"CyclicDependency\";\n /**\n * Indicates that a dependency with the same predecessor and successor as validated one's already exists\n */\n DependencyValidationResult[DependencyValidationResult[\"DuplicatingDependency\"] = 2] = \"DuplicatingDependency\";\n})(DependencyValidationResult || (DependencyValidationResult = {}));\n/**\n * The enumeration for the supported dependency types\n */\nexport var DependencyType;\n(function (DependencyType) {\n /**\n * Start-to-Start (_SS_)\n *\n * With this dependency type, the succeeding event is delayed to start not earlier than the preceding event starts.\n */\n DependencyType[DependencyType[\"StartToStart\"] = 0] = \"StartToStart\";\n /**\n * Start-to-Finish (_SF_)\n *\n * The finish of the succeeding event is constrained by the start of the preceding event.\n * So the successor cannot finish before the predecessor starts.\n */\n DependencyType[DependencyType[\"StartToEnd\"] = 1] = \"StartToEnd\";\n /**\n * Finish-to-Start (_FS_)\n *\n * This type of dependency, restricts the dependent event to not start earlier than the preceding event finishes.\n */\n DependencyType[DependencyType[\"EndToStart\"] = 2] = \"EndToStart\";\n /**\n * Finish-to-Finish (_FF_)\n *\n * The succeeding event cannot finish before the completion of the preceding event.\n */\n DependencyType[DependencyType[\"EndToEnd\"] = 3] = \"EndToEnd\";\n})(DependencyType || (DependencyType = {}));\n/**\n * The enumeration for the supported sources of the calendar for the dependency.\n */\nexport var DependenciesCalendar;\n(function (DependenciesCalendar) {\n DependenciesCalendar[\"Project\"] = \"Project\";\n DependenciesCalendar[\"FromEvent\"] = \"FromEvent\";\n DependenciesCalendar[\"ToEvent\"] = \"ToEvent\";\n})(DependenciesCalendar || (DependenciesCalendar = {}));\n/**\n * Engine provides with different project types, the enumeration describes the types currently available\n */\nexport var ProjectType;\n(function (ProjectType) {\n ProjectType[ProjectType[\"SchedulerBasic\"] = 1] = \"SchedulerBasic\";\n ProjectType[ProjectType[\"SchedulerPro\"] = 2] = \"SchedulerPro\";\n ProjectType[ProjectType[\"Gantt\"] = 3] = \"Gantt\";\n})(ProjectType || (ProjectType = {}));\n/**\n * The enumeration for the scheduling direction\n */\nexport var Direction;\n(function (Direction) {\n /**\n * Forward (or As Soon As Possible (ASAP)) scheduling.\n */\n Direction[\"Forward\"] = \"Forward\";\n /**\n * Backward (or As Late As Possible (ALAP)) scheduling.\n */\n Direction[\"Backward\"] = \"Backward\";\n Direction[\"None\"] = \"None\";\n})(Direction || (Direction = {}));\nexport const isEqualEffectiveDirection = (a, b) => {\n if (a && !b || !a && b)\n return false;\n if (!a && !b)\n return true;\n return (a.direction === b.direction)\n && (a.kind === 'own' && b.kind === 'own'\n || (a.kind === 'enforced' && b.kind === 'enforced' && a.enforcedBy === b.enforcedBy)\n || (a.kind === 'inherited' && b.kind === 'inherited' && a.inheritedFrom === b.inheritedFrom));\n};\nexport var ConstraintIntervalSide;\n(function (ConstraintIntervalSide) {\n ConstraintIntervalSide[\"Start\"] = \"Start\";\n ConstraintIntervalSide[\"End\"] = \"End\";\n})(ConstraintIntervalSide || (ConstraintIntervalSide = {}));\n", "// http://ecma-international.org/ecma-262/5.1/#sec-15.9.1.1\n/**\n * Minimal date representable with native Date class\n */\nexport const MIN_DATE = new Date(-8640000000000000);\n/**\n * Maximal date representable with native Date class\n */\nexport const MAX_DATE = new Date(8640000000000000);\nexport const isDateFinite = (date) => {\n if (!date)\n return false;\n const time = date.getTime();\n return time !== MIN_DATE.getTime() && time !== MAX_DATE.getTime();\n};\n", "/**\n * The date intervals in the scheduling engine are always inclusive on one end and opened on another.\n * The \"opened\" end is not considered to be a part of the interval.\n *\n * Depending from the scheduling direction (forward/backward) this property may need to be inverted.\n *\n * This enum specifies what edge of the interval is inclusive.\n */\nexport var EdgeInclusion;\n(function (EdgeInclusion) {\n EdgeInclusion[EdgeInclusion[\"Left\"] = 0] = \"Left\";\n EdgeInclusion[EdgeInclusion[\"Right\"] = 1] = \"Right\";\n})(EdgeInclusion || (EdgeInclusion = {}));\n", "import DateHelper from \"../../Core/helper/DateHelper.js\";\nimport { TimeUnit } from \"../scheduling/Types.js\";\nimport { MAX_DATE, MIN_DATE } from \"../util/Constants.js\";\nimport { EdgeInclusion } from \"../util/Types.js\";\n/**\n * The enum type for result of [[forEachAvailabilityInterval]].\n */\nexport var CalendarIteratorResult;\n(function (CalendarIteratorResult) {\n /**\n * Indicates the iteration has completed by iterating the whole given timespan or has reached the MAX_DATE or MIN_DATE.\n */\n CalendarIteratorResult[CalendarIteratorResult[\"FullRangeIterated\"] = 0] = \"FullRangeIterated\";\n /**\n * Indicates the iteration has been stopped by returning `false` from the iterator.\n */\n CalendarIteratorResult[CalendarIteratorResult[\"StoppedByIterator\"] = 1] = \"StoppedByIterator\";\n /**\n * Indicates the iteration has exceeded the `maxRange` option\n */\n CalendarIteratorResult[CalendarIteratorResult[\"MaxCacheExtendCyclesReached\"] = 2] = \"MaxCacheExtendCyclesReached\";\n /**\n * Indicates the iteration has exceeded the `maxRange` option\n */\n CalendarIteratorResult[CalendarIteratorResult[\"MaxRangeReached\"] = 3] = \"MaxRangeReached\";\n})(CalendarIteratorResult || (CalendarIteratorResult = {}));\n/**\n * Calendar cache.\n */\nexport class CalendarCache {\n constructor(config) {\n this.cacheFilledStartDate = MAX_DATE;\n this.cacheFilledEndDate = MIN_DATE;\n this.intervalsCachingChunkDuration = 30;\n this.intervalsCachingChunkUnit = TimeUnit.Day;\n this.maxCacheExtendCycles = 1000;\n // max range for the iteration - 5 years\n this.maxRange = 5 * 365 * 24 * 60 * 60 * 1000;\n config && Object.assign(this, config);\n }\n includeWrappingRangeFrom(cache, startDate, endDate) {\n cache.ensureCacheFilledForInterval(startDate, endDate);\n this.intervalCache.includeWrappingRange(cache.intervalCache, startDate, endDate);\n }\n // after this method, we guarantee, that for every point between `startDate` and `endDate` (_inclusive_)\n // we'll have a final representation of the cache, that is, we'll be able to get an interval to which this point belongs\n // _both_ for forward and backward directions\n ensureCacheFilledForInterval(startDate, endDate) {\n const cacheFilledStartDateN = this.cacheFilledStartDate.getTime();\n const cacheFilledEndDateN = this.cacheFilledEndDate.getTime();\n if (cacheFilledStartDateN !== MAX_DATE.getTime()) {\n const startDateN = startDate.getTime();\n const endDateN = endDate.getTime();\n if (cacheFilledStartDateN <= startDateN && endDateN <= cacheFilledEndDateN)\n return;\n // asked to cache an interval which is to the left from the cached area - extend to the right\n if (endDateN <= cacheFilledStartDateN) {\n endDate = new Date(cacheFilledStartDateN - 1);\n }\n else if (startDateN >= cacheFilledEndDateN) {\n startDate = new Date(cacheFilledEndDateN);\n }\n else if (cacheFilledStartDateN <= startDateN && startDateN <= cacheFilledEndDateN) {\n startDate = new Date(cacheFilledEndDateN + 1);\n }\n else if (cacheFilledStartDateN <= endDateN && endDateN <= cacheFilledEndDateN) {\n endDate = new Date(cacheFilledStartDateN - 1);\n }\n else {\n this.ensureCacheFilledForInterval(startDate, new Date(cacheFilledStartDateN - 1));\n this.ensureCacheFilledForInterval(new Date(cacheFilledEndDateN + 1), endDate);\n return;\n }\n }\n if (cacheFilledStartDateN === MAX_DATE.getTime() || startDate.getTime() < cacheFilledEndDateN) {\n this.cacheFilledStartDate = startDate;\n }\n if (cacheFilledEndDateN === MIN_DATE.getTime() || cacheFilledEndDateN < endDate.getTime()) {\n this.cacheFilledEndDate = endDate;\n }\n this.fillCache(startDate, endDate);\n }\n fillCache(_1 /* startDate */, _2 /* endDate */) {\n throw new Error(\"Abstract method\");\n }\n clear() {\n this.cacheFilledStartDate = MAX_DATE;\n this.cacheFilledEndDate = MIN_DATE;\n this.intervalCache.clear();\n }\n /**\n * The core iterator method of the calendar cache.\n *\n * @param options The options for iterator. Should contain at least one of the `startDate`/`endDate` properties\n * which indicates what timespan to examine for availability intervals. If one of boundaries is not provided\n * iterator function should return `false` at some point, to avoid infinite loops.\n *\n * Another recognized option is `isForward`, which indicates the direction in which to iterate through the timespan.\n *\n * Another recognized option is `maxRange`, which indicates the maximum timespan for this iterator (in milliseconds). When iterator\n * exceeds this timespan, the iteration is stopped and [[CalendarIteratorResult.MaxRangeReached]] value is returned.\n * Default value is 5 years.\n *\n * @param func The iterator function to call. It will be called for every distinct set of availability intervals, found\n * in the given timespan. All the intervals, which are \"active\" for current interval are collected in the 3rd argument\n * for this function. If iterator returns `false` (checked with `===`) the iteration stops.\n *\n * @param scope The scope (`this` value) to execute the iterator in.\n */\n forEachAvailabilityInterval(options, func, scope) {\n scope = scope || this;\n const startDate = options.startDate;\n const endDate = options.endDate;\n const startDateN = startDate && startDate.getTime();\n const endDateN = endDate && endDate.getTime();\n const maxRange = options.maxRange ?? this.maxRange;\n // `isForward = true` by default\n const isForward = options.isForward !== false;\n if (isForward ? !startDate : !endDate) {\n throw new Error(\"At least `startDate` or `endDate` is required, depending from the `isForward` option\");\n }\n const intervalCache = this.intervalCache;\n let cacheCursorDate = isForward ? startDate : endDate;\n let cursorDate = isForward ? startDate : endDate;\n const rangeStart = cursorDate.getTime();\n // this is generally an endless loop, but we artificially limit it to `maxCacheExtendCycles` iterations\n // to avoid freezing in unforeseen edge cases\n for (let cycle = 1; cycle < this.maxCacheExtendCycles; cycle++) {\n if (isForward) {\n this.ensureCacheFilledForInterval(cacheCursorDate, endDate || DateHelper.add(cacheCursorDate, this.intervalsCachingChunkDuration, this.intervalsCachingChunkUnit));\n }\n else {\n this.ensureCacheFilledForInterval(startDate || DateHelper.add(cacheCursorDate, -this.intervalsCachingChunkDuration, this.intervalsCachingChunkUnit), cacheCursorDate);\n }\n let interval = intervalCache.getIntervalOf(cursorDate, isForward ? EdgeInclusion.Left : EdgeInclusion.Right);\n while (interval) {\n const intervalStartDate = interval.startDate;\n const intervalEndDate = interval.endDate;\n // out of requested range - all done\n if ((isForward && endDateN && intervalStartDate.getTime() >= endDateN)\n ||\n (!isForward && startDateN && intervalEndDate.getTime() <= startDateN)) {\n return CalendarIteratorResult.FullRangeIterated;\n }\n if ((isForward && intervalStartDate.getTime() - rangeStart >= maxRange)\n ||\n (!isForward && rangeStart - intervalEndDate.getTime() >= maxRange)) {\n return CalendarIteratorResult.MaxRangeReached;\n }\n // we are out of cached area, need to extend the cache,\n // using `>=, <=` here, because, as an edge case the cache can be filled exactly up to that interval\n // and following interval will be infinity, which will trigger premature loop exit\n // caused by the https://github.com/bryntum/support/issues/6406\n if ((isForward && intervalStartDate.getTime() >= this.cacheFilledEndDate.getTime())\n ||\n (!isForward && intervalEndDate.getTime() <= this.cacheFilledStartDate.getTime())) {\n break;\n }\n // save the last processed point, from which we should start after cache will be extended\n cursorDate = isForward ? intervalEndDate : intervalStartDate;\n // adjust to start / end date limits in iterator\n const countFrom = startDateN && intervalStartDate.getTime() < startDateN ? startDate : intervalStartDate;\n const countTill = endDateN && intervalEndDate.getTime() > endDateN ? endDate : intervalEndDate;\n if (func.call(scope, countFrom, countTill, interval.cacheInterval) === false) {\n // indicates premature exit if iterator returns `false`\n return CalendarIteratorResult.StoppedByIterator;\n }\n interval = isForward ? intervalCache.getNextInterval(interval) : intervalCache.getPrevInterval(interval);\n }\n if (isForward && cursorDate.getTime() === MAX_DATE.getTime() || !isForward && cursorDate.getTime() === MIN_DATE.getTime()) {\n return CalendarIteratorResult.FullRangeIterated;\n }\n cacheCursorDate = isForward ? this.cacheFilledEndDate : this.cacheFilledStartDate;\n }\n return CalendarIteratorResult.MaxCacheExtendCyclesReached;\n }\n}\n", "export const stripDuplicates = (array) => Array.from(new Set(array));\n", "import { stripDuplicates } from \"../util/StripDuplicates.js\";\n/**\n * A class, that represent a cached set of availability intervals. One can use the [[getIsWorking]] method\n * to determine if this set intervals represents working time or non-working.\n */\nexport class CalendarCacheInterval {\n constructor(config) {\n this.intervals = [];\n config && Object.assign(this, config);\n if (!this.calendar)\n throw new Error(\"Required attribute `calendar` is missing\");\n }\n includeInterval(interval) {\n if (this.intervals.indexOf(interval) == -1) {\n const copy = this.intervals.slice();\n copy.push(interval);\n return new CalendarCacheInterval({ intervals: copy, calendar: this.calendar });\n }\n else\n return this;\n }\n combineWith(interval) {\n return new CalendarCacheInterval({ intervals: this.intervals.concat(interval.intervals), calendar: this.calendar });\n }\n /**\n * Returns the working status of this intervals set. It is determined as a working status\n * of the most prioritized interval (intervals are prioritized from child to parent)\n */\n getIsWorking() {\n if (this.isWorking != null)\n return this.isWorking;\n const intervals = this.intervals = this.normalizeIntervals(this.intervals);\n // return the value of the interval with the highest priority\n return this.isWorking = intervals[0].isWorking;\n }\n normalizeIntervals(intervals) {\n const filtered = stripDuplicates(intervals);\n // sort in decreasing order\n filtered.sort((interval1, interval2) => interval2.getPriorityField() - interval1.getPriorityField());\n return filtered;\n }\n}\n", "// Generic binary search\nexport const binarySearch = (value, array, comparator = (a, b) => a - b) => {\n let left = 0;\n let right = array.length;\n while (left < right) {\n // | 0 to make it integer, faster according to: https://jsperf.com/or-vs-floor/2\n const mid = (left + right) / 2 | 0;\n const compare = comparator(value, array[mid]);\n if (compare === 0)\n return { found: true, index: mid };\n else if (compare < 0)\n right = mid;\n else\n left = mid + 1;\n }\n return { found: false, index: right };\n};\n", "import { binarySearch } from \"../util/BinarySearch.js\";\nexport var IndexPosition;\n(function (IndexPosition) {\n IndexPosition[IndexPosition[\"Exact\"] = 0] = \"Exact\";\n IndexPosition[IndexPosition[\"Next\"] = 1] = \"Next\";\n})(IndexPosition || (IndexPosition = {}));\nexport class SortedMap {\n constructor(comparator) {\n this.keys = [];\n this.values = [];\n this.comparator = comparator || ((a, b) => a - b);\n }\n set(key, value) {\n const search = binarySearch(key, this.keys, this.comparator);\n if (search.found) {\n this.values[search.index] = value;\n }\n else {\n this.keys.splice(search.index, 0, key);\n this.values.splice(search.index, 0, value);\n }\n return search.index;\n }\n // you need to know what you are doing when using this method\n insertAt(index, key, value) {\n this.keys.splice(index, 0, key);\n this.values.splice(index, 0, value);\n }\n setValueAt(index, value) {\n this.values[index] = value;\n }\n get(key) {\n const search = binarySearch(key, this.keys, this.comparator);\n return search.found ? this.values[search.index] : undefined;\n }\n getEntryAt(index) {\n return index < this.keys.length ? { key: this.keys[index], value: this.values[index] } : undefined;\n }\n getKeyAt(index) {\n return this.keys[index];\n }\n getValueAt(index) {\n return this.values[index];\n }\n delete(key) {\n const search = binarySearch(key, this.keys, this.comparator);\n if (search.found)\n this.deleteAt(search.index);\n }\n size() {\n return this.keys.length;\n }\n deleteAt(index) {\n this.keys.splice(index, 1);\n this.values.splice(index, 1);\n }\n indexOfKey(key) {\n const search = binarySearch(key, this.keys, this.comparator);\n return {\n found: search.found ? IndexPosition.Exact : IndexPosition.Next,\n index: search.index\n };\n }\n map(func) {\n const keys = this.keys;\n const values = this.values;\n const result = [];\n for (let i = 0; i < keys.length; i++)\n result.push(func(values[i], keys[i], i));\n return result;\n }\n getAllEntries() {\n return this.map((value, key) => { return { value, key }; });\n }\n clear() {\n this.keys.length = 0;\n this.values.length = 0;\n }\n}\n", "import { MAX_DATE, MIN_DATE } from \"../util/Constants.js\";\nimport { EdgeInclusion } from \"../util/Types.js\";\nimport { IndexPosition, SortedMap } from \"./SortedMap.js\";\nexport class IntervalCache {\n constructor(config) {\n this.points = new SortedMap((a, b) => a.getTime() - b.getTime());\n this.leftInfinityKey = MIN_DATE;\n this.rightInfinityKey = MAX_DATE;\n Object.assign(this, config);\n if (this.emptyInterval === undefined || !this.combineIntervalsFn)\n throw new Error(\"All of `emptyPoint`, `combineIntervalsFn` are required\");\n this.points.set(this.leftInfinityKey, this.emptyInterval);\n }\n size() {\n return this.points.size();\n }\n indexOf(date) {\n return this.points.indexOfKey(date);\n }\n getDateAt(index) {\n return this.points.getKeyAt(index);\n }\n getPointAt(index) {\n return this.points.getValueAt(index);\n }\n getIntervalOf(date, edgeInclusion = EdgeInclusion.Left) {\n // the `index` here is guaranteed to be > 0, because at index 0 there's a `emptyPoint`\n let { found, index } = this.indexOf(date);\n let startDateIndex;\n if (edgeInclusion === EdgeInclusion.Left) {\n startDateIndex = found === IndexPosition.Exact ? index : index - 1;\n }\n else {\n startDateIndex = index - 1;\n }\n return this.getIntervalWithStartDateIndex(startDateIndex);\n }\n getPrevInterval(interval) {\n if (interval.startDateIndex === 0)\n return null;\n return this.getIntervalWithStartDateIndex(interval.startDateIndex - 1);\n }\n getNextInterval(interval) {\n if (interval.startDateIndex >= this.size() - 1)\n return null;\n return this.getIntervalWithStartDateIndex(interval.startDateIndex + 1);\n }\n getIntervalWithStartDateIndex(startDateIndex) {\n return {\n startDateIndex: startDateIndex,\n startDate: this.getDateAt(startDateIndex),\n endDate: startDateIndex + 1 < this.size() ? this.getDateAt(startDateIndex + 1) : this.rightInfinityKey,\n cacheInterval: this.getPointAt(startDateIndex)\n };\n }\n addInterval(startDate, endDate, extendInterval) {\n const points = this.points;\n // there is always \"leftInfinityKey\" empty point, so `index >= 0`\n const { found, index } = points.indexOfKey(startDate);\n let curIndex;\n let lastUpdatedPoint;\n if (found == IndexPosition.Exact) {\n const inclusion = extendInterval(lastUpdatedPoint = points.getValueAt(index));\n points.setValueAt(index, inclusion);\n curIndex = index + 1;\n }\n else {\n const inclusion = extendInterval(lastUpdatedPoint = points.getValueAt(index - 1));\n points.insertAt(index, startDate, inclusion);\n curIndex = index + 1;\n }\n while (curIndex < points.size()) {\n const curDate = points.getKeyAt(curIndex);\n if (curDate.getTime() >= endDate.getTime())\n break;\n const inclusion = extendInterval(lastUpdatedPoint = points.getValueAt(curIndex));\n points.setValueAt(curIndex, inclusion);\n curIndex++;\n }\n if (curIndex === points.size()) {\n points.insertAt(points.size(), endDate, this.emptyInterval);\n }\n else {\n const curDate = points.getKeyAt(curIndex);\n if (curDate.getTime() === endDate.getTime()) {\n // we advanced till some point, which matches `endDate` config\n // this point will setup a new label, no need to add an explicit end date point,\n // we are done, do nothing\n }\n else {\n points.insertAt(curIndex, endDate, lastUpdatedPoint);\n }\n }\n }\n includeWrappingRange(intervalCache, startDate, endDate) {\n let interval = intervalCache.getIntervalOf(startDate);\n while (interval) {\n this.addInterval(interval.startDate, interval.endDate, existingInterval => this.combineIntervalsFn(existingInterval, interval.cacheInterval));\n if (interval.endDate.getTime() > endDate.getTime())\n break;\n interval = intervalCache.getNextInterval(interval);\n }\n }\n getSummary() {\n return this.points.map((label, date) => { return { label, date }; });\n }\n clear() {\n this.points.clear();\n this.points.set(this.leftInfinityKey, this.emptyInterval);\n }\n}\n", "import later from \"../vendor/later/later.js\";\nimport { CalendarCache } from \"./CalendarCache.js\";\nimport { CalendarCacheInterval } from \"./CalendarCacheInterval.js\";\nimport { IntervalCache } from \"./IntervalCache.js\";\nimport DateHelper from \"../../Core/helper/DateHelper.js\";\nimport TimeZoneHelper from \"../../Core/helper/TimeZoneHelper.js\";\nexport class CalendarCacheSingle extends CalendarCache {\n constructor(config) {\n super(config);\n this.staticIntervalsCached = false;\n if (!this.unspecifiedTimeInterval)\n throw new Error(\"Required attribute `unspecifiedTimeInterval` is missing\");\n this.intervalCache = new IntervalCache({\n emptyInterval: new CalendarCacheInterval({\n intervals: [this.unspecifiedTimeInterval],\n calendar: this.calendar\n }),\n combineIntervalsFn: (interval1, interval2) => {\n return interval1.combineWith(interval2);\n }\n });\n }\n fillCache(startDate, endDate) {\n if (!this.staticIntervalsCached) {\n this.cacheStaticIntervals();\n this.staticIntervalsCached = true;\n }\n if (this.parentCache)\n this.includeWrappingRangeFrom(this.parentCache, startDate, endDate);\n const startDateN = startDate.getTime();\n const endDateN = endDate.getTime();\n const timeZone = this.calendar.ignoreTimeZone ? null : this.calendar.project?.timeZone;\n if (startDateN > endDateN)\n throw new Error(\"Invalid cache fill interval\");\n const NEVER = later.NEVER;\n this.forEachRecurrentInterval(interval => {\n const startSchedule = interval.getStartDateSchedule();\n const endSchedule = interval.getEndDateSchedule();\n let wrappingStartDate = startSchedule.prev(1, startDate);\n let wrappingEndDate;\n if (endSchedule === 'EOD') {\n const nextEndDate = startSchedule.next(1, endDate);\n if (nextEndDate !== NEVER) {\n wrappingEndDate = DateHelper.getStartOfNextDay(nextEndDate, true);\n }\n else {\n wrappingEndDate = NEVER;\n }\n }\n else {\n wrappingEndDate = endSchedule.next(1, endDate);\n }\n // if the `startDate` is an occurrence in the interval's schedule, we need to advance one point prior\n // this is to provide the backward-scheduling information for the `startDate` point\n if (wrappingStartDate !== NEVER && wrappingStartDate.getTime() === startDateN) {\n const wrappingStartDates = startSchedule.prev(2, startDate);\n if (wrappingStartDates !== NEVER && wrappingStartDates.length === 2)\n wrappingStartDate = wrappingStartDates[1];\n }\n if (wrappingEndDate !== NEVER && wrappingEndDate.getTime() === endDateN) {\n const wrappingEndDates = endSchedule.next(2, endDate);\n if (wrappingEndDates !== NEVER && wrappingEndDates.length === 2)\n wrappingEndDate = wrappingEndDates[1];\n }\n const startDates = startSchedule.next(Infinity, wrappingStartDate !== NEVER ? wrappingStartDate : startDate, wrappingEndDate !== NEVER ? new Date(wrappingEndDate.getTime() - 1) : endDate);\n // schedule is empty for the interval of interest, do nothing\n if (startDates === NEVER)\n return;\n // at this point `startDates` is a non-empty array\n const endDates = endSchedule === 'EOD'\n ? startDates.map(date => DateHelper.getStartOfNextDay(date, true))\n : endSchedule.next(Infinity, new Date(startDates[0].getTime() + 1), wrappingEndDate !== NEVER ? wrappingEndDate : endDate);\n if (endDates === NEVER)\n return;\n if (endDates.length > startDates.length) {\n // safe to ignore \"extra\" end dates\n endDates.length = startDates.length;\n }\n else if (endDates.length < startDates.length) {\n // monkey patch\n startDates.length = endDates.length;\n // throw new Error(\"Recurrent interval inconsistency: \" + interval + \", caching startDate: \" + startDate + \", caching endDate: \" + endDate)\n }\n startDates.forEach((startDate, index) => {\n let recStartDate = startDate;\n let recEndDate = endDates[index];\n // Adjust calendar intervals when changing time zone\n if (timeZone != null) {\n recStartDate = TimeZoneHelper.toTimeZone(recStartDate, timeZone);\n recEndDate = TimeZoneHelper.toTimeZone(recEndDate, timeZone);\n }\n // if (recStartDate.getTime() > recEndDate.getTime())\n // throw new Error(\"Recurrent interval inconsistency: \" + interval + \", startDate: \" + startDate + \", endDate: \" + endDates[ index ])\n this.intervalCache.addInterval(recStartDate, recEndDate, existingCacheInterval => existingCacheInterval.includeInterval(interval));\n });\n });\n }\n clear() {\n this.staticIntervalsCached = false;\n super.clear();\n }\n cacheStaticIntervals() {\n this.forEachStaticInterval(interval => {\n const timeZone = this.calendar.project?.timeZone;\n let { startDate, endDate } = interval;\n // Adjust calendar intervals when changing time zone\n if (timeZone != null) {\n startDate = TimeZoneHelper.toTimeZone(startDate, timeZone);\n endDate = TimeZoneHelper.toTimeZone(endDate, timeZone);\n }\n this.intervalCache.addInterval(startDate, endDate, existingCacheInterval => existingCacheInterval.includeInterval(interval));\n });\n }\n forEachStaticInterval(func) {\n this.intervalStore.forEach((interval) => {\n if (interval.isStatic())\n func(interval);\n });\n }\n forEachRecurrentInterval(func) {\n this.intervalStore.forEach((interval) => {\n if (interval.isRecurrent())\n func(interval);\n });\n }\n}\n", "import { Mixin } from \"../../ChronoGraph/class/BetterMixin.js\";\nimport { CalendarIntervalMixin } from \"./CalendarIntervalMixin.js\";\n// Calendar interval model denoting unspecified interval\nexport class UnspecifiedTimeIntervalModel extends Mixin([CalendarIntervalMixin], (base) => {\n const superProto = base.prototype;\n class UnspecifiedTimeIntervalModel extends base {\n getCalendar() {\n return this.calendar;\n }\n // NOTE: See parent class implementation for further comments\n getPriorityField() {\n if (this.priorityField != null)\n return this.priorityField;\n return this.priorityField = this.getCalendar().getDepth();\n }\n }\n return UnspecifiedTimeIntervalModel;\n}) {\n}\n", "import { Mixin } from \"../../../ChronoGraph/class/BetterMixin.js\";\nimport { CalendarIntervalStore } from \"../../calendar/CalendarIntervalStore.js\";\nimport { CalendarIteratorResult } from \"../../calendar/CalendarCache.js\";\nimport { TimeUnit } from \"../../scheduling/Types.js\";\nimport { CalendarCacheSingle } from \"../../calendar/CalendarCacheSingle.js\";\nimport { UnspecifiedTimeIntervalModel } from \"../../calendar/UnspecifiedTimeIntervalModel.js\";\nimport DateHelper from \"../../../Core/helper/DateHelper.js\";\nimport { AbstractPartOfProjectModelMixin } from \"./mixin/AbstractPartOfProjectModelMixin.js\";\n/**\n * Calendar for project scheduling, mixed by CoreCalendarMixin and BaseCalendarMixin. It is used to mark certain time\n * intervals as \"non-working\" and ignore them during scheduling.\n *\n * The calendar consists from several [[CalendarIntervalMixin|intervals]]. The intervals can be either static or recurrent.\n */\nexport class AbstractCalendarMixin extends Mixin([AbstractPartOfProjectModelMixin], (base) => {\n const superProto = base.prototype;\n class CalendarMixin extends base {\n constructor() {\n super(...arguments);\n this.version = 1;\n }\n static get fields() {\n return [\n { name: 'version', type: 'number' },\n 'name',\n { name: 'unspecifiedTimeIsWorking', type: 'boolean', defaultValue: true },\n { name: 'intervals', type: 'store', subStore: true },\n 'cls',\n 'iconCls'\n ];\n }\n get intervalStoreClass() {\n return CalendarIntervalStore;\n }\n get intervalStore() {\n // @ts-ignore\n return this.meta.intervalsStore;\n }\n // Not a typo, name is generated from the fields name = intervals\n initIntervalsStore(config) {\n config.storeClass = this.intervalStoreClass;\n // @ts-ignore\n config.modelClass = this.getDefaultConfiguration().calendarIntervalModelClass || this.intervalStoreClass.defaultConfig.modelClass;\n config.calendar = this;\n }\n // this method is called when the new value for the `intervals` field of this model is assigned\n // the type of the `intervals` field is \"store\" that's why this magic\n processIntervalsStoreData(intervals) {\n this.bumpVersion();\n }\n isDefault() {\n const project = this.getProject();\n if (project) {\n return this === project.defaultCalendar;\n }\n return false;\n }\n getDepth() {\n return this.childLevel + 1;\n }\n /**\n * The core iterator method of the calendar.\n *\n * @param options The options for iterator. Should contain at least one of the `startDate`/`endDate` properties\n * which indicates what timespan to examine for availability intervals. If one of boundaries is not provided\n * iterator function should return `false` at some point, to avoid infinite loops.\n *\n * Another recognized option is `isForward`, which indicates the direction in which to iterate through the timespan.\n *\n * @param func The iterator function to call. It will be called for every distinct set of availability intervals, found\n * in the given timespan. All the intervals, which are \"active\" for current interval are collected in the 3rd argument\n * for this function - [[CalendarCacheInterval|calendarCacheInterval]]. If iterator returns `false` (checked with `===`)\n * the iteration stops.\n *\n * @param scope The scope (`this` value) to execute the iterator in.\n */\n forEachAvailabilityInterval(options, func, scope) {\n const maxRange = options.maxRange ?? this.getProject()?.maxCalendarRange;\n if (maxRange) {\n options = { ...options, maxRange };\n }\n return this.calendarCache.forEachAvailabilityInterval(options, func, scope);\n }\n /**\n * This method starts at the given `date` and moves forward or backward in time, depending on `isForward`.\n * It stops moving as soon as it accumulates the `durationMs` milliseconds of working time and returns the date\n * at which it has stopped and remaining duration - the [[AccumulateWorkingTimeResult]] object.\n *\n * Normally, the remaining duration will be 0, indicating the full `durationMs` has been accumulated.\n * However, sometimes, calendar might not be able to accumulate enough working time due to various reasons,\n * like if it does not contain enough working time - this case will be indicated with remaining duration bigger than 0.\n *\n * @param date\n * @param durationMs\n * @param isForward\n */\n accumulateWorkingTime(date, durationMs, isForward) {\n // if duration is 0 - return the same date\n if (durationMs === 0)\n return { finalDate: new Date(date), remainingDurationInMs: 0 };\n if (isNaN(durationMs))\n throw new Error(\"Invalid duration\");\n let finalDate = date;\n const adjustDurationToDST = this.getProject()?.adjustDurationToDST ?? this.adjustDurationToDST ?? false;\n this.forEachAvailabilityInterval(isForward ? { startDate: date, isForward: true } : { endDate: date, isForward: false }, (intervalStartDate, intervalEndDate, calendarCacheInterval) => {\n let result = true;\n if (calendarCacheInterval.getIsWorking()) {\n let diff = intervalEndDate.getTime() - intervalStartDate.getTime();\n if (durationMs <= diff) {\n if (adjustDurationToDST) {\n const dstDiff = isForward\n ? intervalStartDate.getTimezoneOffset() - (new Date(intervalStartDate.getTime() + durationMs)).getTimezoneOffset()\n : (new Date(intervalEndDate.getTime() - durationMs)).getTimezoneOffset() - intervalEndDate.getTimezoneOffset();\n durationMs -= dstDiff * 60 * 1000;\n }\n finalDate = isForward\n ? new Date(intervalStartDate.getTime() + durationMs)\n : new Date(intervalEndDate.getTime() - durationMs);\n durationMs = 0;\n result = false;\n }\n else {\n if (adjustDurationToDST) {\n const dstDiff = intervalStartDate.getTimezoneOffset() - intervalEndDate.getTimezoneOffset();\n diff += dstDiff * 60 * 1000;\n }\n finalDate = isForward ? intervalEndDate : intervalStartDate;\n durationMs -= diff;\n }\n }\n return result;\n });\n return { finalDate: new Date(finalDate), remainingDurationInMs: durationMs };\n }\n /**\n * Calculate the working time duration between the 2 dates, in milliseconds.\n *\n * @param {Date} startDate\n * @param {Date} endDate\n * @param {Boolean} [allowNegative] Method ignores negative values by default, returning 0. Set to true to get\n * negative duration.\n */\n calculateDurationMs(startDate, endDate, allowNegative = false) {\n let duration = 0;\n const multiplier = startDate.getTime() <= endDate.getTime() || !allowNegative ? 1 : -1;\n if (multiplier < 0) {\n [startDate, endDate] = [endDate, startDate];\n }\n const adjustDurationToDST = this.getProject()?.adjustDurationToDST ?? this.adjustDurationToDST ?? false;\n this.forEachAvailabilityInterval({ startDate: startDate, endDate: endDate }, (intervalStartDate, intervalEndDate, calendarCacheInterval) => {\n if (calendarCacheInterval.getIsWorking()) {\n duration += intervalEndDate.getTime() - intervalStartDate.getTime();\n if (adjustDurationToDST) {\n const dstDiff = intervalStartDate.getTimezoneOffset() - intervalEndDate.getTimezoneOffset();\n duration += dstDiff * 60 * 1000;\n }\n }\n });\n return duration * multiplier;\n }\n /**\n * Calculate the end date of the time interval which starts at `startDate` and has `durationMs` working time duration\n * (in milliseconds).\n *\n * @param startDate\n * @param durationMs\n */\n calculateEndDate(startDate, durationMs) {\n // the method goes forward by default ..unless a negative duration provided\n const isForward = durationMs >= 0;\n const res = this.accumulateWorkingTime(startDate, Math.abs(durationMs), isForward);\n return res.remainingDurationInMs === 0 ? res.finalDate : null;\n }\n /**\n * Calculate the start date of the time interval which ends at `endDate` and has `durationMs` working time duration\n * (in milliseconds).\n *\n * @param endDate\n * @param durationMs\n */\n calculateStartDate(endDate, durationMs) {\n // the method goes backwards by default ..unless a negative duration provided\n const isForward = durationMs <= 0;\n const res = this.accumulateWorkingTime(endDate, Math.abs(durationMs), isForward);\n return res.remainingDurationInMs === 0 ? res.finalDate : null;\n }\n /**\n * Returns the earliest point at which a working period of time starts, following the given date.\n * Can be the date itself, if it comes on the working time.\n *\n * @param date The date after which to skip the non-working time.\n * @param isForward Whether the \"following\" means forward in time or backward.\n */\n skipNonWorkingTime(date, isForward = true) {\n let workingDate;\n const res = this.forEachAvailabilityInterval(isForward ? { startDate: date, isForward: true } : { endDate: date, isForward: false }, (intervalStartDate, intervalEndDate, calendarCacheInterval) => {\n if (calendarCacheInterval.getIsWorking()) {\n workingDate = isForward ? intervalStartDate : intervalEndDate;\n return false;\n }\n });\n if (res === CalendarIteratorResult.MaxRangeReached || res === CalendarIteratorResult.FullRangeIterated)\n return 'empty_calendar';\n return workingDate ? new Date(workingDate) : new Date(date);\n }\n /**\n * This method adds a single [[CalendarIntervalMixin]] to the internal collection of the calendar\n */\n addInterval(interval) {\n return this.addIntervals([interval]);\n }\n /**\n * This method adds an array of [[CalendarIntervalMixin]] to the internal collection of the calendar\n */\n addIntervals(intervals) {\n this.bumpVersion();\n return this.intervalStore.add(intervals);\n }\n /**\n * This method removes a single [[CalendarIntervalMixin]] from the internal collection of the calendar\n */\n removeInterval(interval) {\n return this.removeIntervals([interval]);\n }\n /**\n * This method removes an array of [[CalendarIntervalMixin]] from the internal collection of the calendar\n */\n removeIntervals(intervals) {\n this.bumpVersion();\n return this.intervalStore.remove(intervals);\n }\n /**\n * This method removes all intervals from the internal collection of the calendar\n */\n clearIntervals(silent) {\n if (!silent) {\n this.bumpVersion();\n }\n return this.intervalStore.removeAll(silent);\n }\n bumpVersion() {\n this.clearCache();\n this.version++;\n }\n get calendarCache() {\n if (this.$calendarCache !== undefined)\n return this.$calendarCache;\n const unspecifiedTimeInterval = new UnspecifiedTimeIntervalModel({\n isWorking: this.unspecifiedTimeIsWorking\n });\n unspecifiedTimeInterval.calendar = this;\n return this.$calendarCache = new CalendarCacheSingle({\n calendar: this,\n unspecifiedTimeInterval: unspecifiedTimeInterval,\n intervalStore: this.intervalStore,\n parentCache: this.parent && !this.parent.isRoot ? this.parent.calendarCache : null\n });\n }\n clearCache() {\n // not strictly needed, we just help garbage collector\n this.$calendarCache && this.$calendarCache.clear();\n this.$calendarCache = undefined;\n }\n resetPriorityOfAllIntervals() {\n this.traverse((calendar) => {\n calendar.intervalStore.forEach((interval) => interval.resetPriority());\n });\n }\n insertChild(child, before, silent) {\n let res = superProto.insertChild.call(this, ...arguments);\n if (!Array.isArray(res)) {\n res = [res];\n }\n // invalidate cache of the child record, since now it should take parent into account\n res.forEach((r) => {\n r.bumpVersion();\n r.resetPriorityOfAllIntervals();\n });\n return res;\n }\n joinProject() {\n superProto.joinProject.call(this);\n this.intervalStore.setProject(this.getProject());\n }\n leaveProject() {\n superProto.leaveProject.call(this);\n this.intervalStore.setProject(null);\n this.clearCache();\n }\n doDestroy() {\n this.leaveProject();\n this.intervalStore.destroy();\n super.doDestroy();\n }\n isDayHoliday(day) {\n const startDate = DateHelper.clearTime(day), endDate = DateHelper.getNext(day, TimeUnit.Day);\n let hasWorkingTime = false;\n this.forEachAvailabilityInterval({ startDate, endDate, isForward: true }, (_intervalStartDate, _intervalEndDate, calendarCacheInterval) => {\n hasWorkingTime = calendarCacheInterval.getIsWorking();\n return !hasWorkingTime;\n });\n return !hasWorkingTime;\n }\n getDailyHolidaysRanges(startDate, endDate) {\n const result = [];\n startDate = DateHelper.clearTime(startDate);\n while (startDate < endDate) {\n if (this.isDayHoliday(startDate)) {\n result.push({\n startDate,\n endDate: DateHelper.getStartOfNextDay(startDate, true, true)\n });\n }\n startDate = DateHelper.getNext(startDate, TimeUnit.Day);\n }\n return result;\n }\n /**\n * Returns working time ranges between the provided dates.\n * @param {Date} startDate Start of the period to get ranges from.\n * @param {Date} endDate End of the period to get ranges from.\n */\n getWorkingTimeRanges(startDate, endDate, maxRange) {\n const result = [];\n this.forEachAvailabilityInterval({ startDate, endDate, isForward: true, maxRange }, (intervalStartDate, intervalEndDate, calendarCacheInterval) => {\n if (calendarCacheInterval.getIsWorking()) {\n const entry = calendarCacheInterval.intervals[0];\n result.push({\n name: entry.name,\n startDate: intervalStartDate,\n endDate: intervalEndDate\n });\n }\n });\n return result;\n }\n /**\n * Returns non-working time ranges between the provided dates.\n * @param {Date} startDate Start of the period to get ranges from.\n * @param {Date} endDate End of the period to get ranges from.\n */\n getNonWorkingTimeRanges(startDate, endDate, maxRange) {\n const result = [];\n this.forEachAvailabilityInterval({ startDate, endDate, isForward: true, maxRange }, (intervalStartDate, intervalEndDate, calendarCacheInterval) => {\n if (!calendarCacheInterval.getIsWorking()) {\n const entry = calendarCacheInterval.intervals[0];\n result.push({\n name: entry.name,\n iconCls: entry.iconCls,\n cls: entry.cls,\n startDate: intervalStartDate,\n endDate: intervalEndDate\n });\n }\n });\n return result;\n }\n /**\n * Checks if there is a working time interval in the provided time range (or when just startDate is provided,\n * checks if the date is contained inside a working time interval in this calendar)\n * @param startDate\n * @param [endDate]\n * @param [fullyContained] Pass true to check if the range is fully covered by a single continuous working time block\n */\n isWorkingTime(startDate, endDate, fullyContained) {\n if (fullyContained) {\n let found;\n const res = this.forEachAvailabilityInterval({ startDate, endDate, isForward: true }, (intervalStartDate, intervalEndDate, calendarCacheInterval) => {\n if (calendarCacheInterval.getIsWorking() && intervalStartDate <= startDate && intervalEndDate >= endDate) {\n found = true;\n return false;\n }\n });\n if (res === CalendarIteratorResult.MaxRangeReached || res === CalendarIteratorResult.FullRangeIterated)\n return false;\n return found;\n }\n else {\n // Can be Date | null | 'empty_calendar'\n const workingTimeStart = this.skipNonWorkingTime(startDate);\n return workingTimeStart && workingTimeStart !== 'empty_calendar' ? (endDate ? workingTimeStart < endDate : workingTimeStart.getTime() === startDate.getTime()) : false;\n }\n }\n }\n return CalendarMixin;\n}) {\n}\n", "import { CorePartOfProjectModelMixin } from '../mixin/CorePartOfProjectModelMixin.js';\nimport { Mixin } from \"../../../../ChronoGraph/class/BetterMixin.js\";\nimport { AbstractCalendarMixin } from \"../AbstractCalendarMixin.js\";\n/**\n * The calendar for project scheduling, it is used to mark certain time intervals as \"non-working\" and ignore them during scheduling.\n *\n * The calendar consists from several [[CalendarIntervalMixin|intervals]]. The intervals can be either static or recurrent.\n */\nexport class CoreCalendarMixin extends Mixin([AbstractCalendarMixin, CorePartOfProjectModelMixin], (base) => {\n const superProto = base.prototype;\n class CoreCalendarMixin extends base {\n }\n return CoreCalendarMixin;\n}) {\n}\n", "import { Mixin } from \"../../../ChronoGraph/class/Mixin.js\";\nimport { AbstractPartOfProjectStoreMixin } from \"./mixin/AbstractPartOfProjectStoreMixin.js\";\n/**\n * Shared functionality for [[CoreCalendarManagerStoreMixin]] and [[ChronoCalendarManagerStoreMixin]]\n */\nexport class AbstractCalendarManagerStoreMixin extends Mixin([AbstractPartOfProjectStoreMixin], (base) => {\n const superProto = base.prototype;\n class AbstractCalendarManagerStoreMixin extends base {\n // special handling to destroy calendar models as part of destroying this store\n doDestroy() {\n const records = [];\n // When chained, traverse can be called on destroyed nodes.\n if (!this.rootNode?.isDestroyed) {\n this.traverse(record => records.push(record));\n }\n super.doDestroy();\n records.forEach(record => record.destroy());\n }\n }\n return AbstractCalendarManagerStoreMixin;\n}) {\n}\n", "import { Mixin } from \"../../../ChronoGraph/class/BetterMixin.js\";\nimport { CorePartOfProjectStoreMixin } from './mixin/CorePartOfProjectStoreMixin.js';\nimport { CoreCalendarMixin } from '../model/scheduler_core/CoreCalendarMixin.js';\nimport { AbstractCalendarManagerStoreMixin } from \"./AbstractCalendarManagerStoreMixin.js\";\n/**\n * A store mixin class, that represent collection of all calendars in the [[SchedulerCoreProjectMixin|project]].\n */\nexport class CoreCalendarManagerStoreMixin extends Mixin([AbstractCalendarManagerStoreMixin, CorePartOfProjectStoreMixin], (base) => {\n const superProto = base.prototype;\n class CoreCalendarManagerStoreMixin extends base {\n static get defaultConfig() {\n return {\n tree: true,\n modelClass: CoreCalendarMixin\n };\n }\n }\n return CoreCalendarManagerStoreMixin;\n}) {\n}\n", "import { Mixin } from \"../../../ChronoGraph/class/BetterMixin.js\";\nimport Delayable from \"../../../Core/mixin/Delayable.js\";\nimport Events from \"../../../Core/mixin/Events.js\";\nimport Model from \"../../../Core/data/Model.js\";\nexport class EventsWrapper extends Mixin([], Events) {\n}\nexport class DelayableWrapper extends Mixin([], Delayable) {\n}\n/**\n * This is an abstract project, which just lists the available stores.\n *\n * The actual project classes are [[SchedulerCoreProjectMixin]], [[SchedulerBasicProjectMixin]],\n * [[SchedulerProProjectMixin]], [[GanttProjectMixin]].\n */\nexport class AbstractProjectMixin extends Mixin([\n EventsWrapper,\n DelayableWrapper,\n Model\n], (base) => {\n const superProto = base.prototype;\n class AbstractProjectMixin extends base {\n constructor() {\n super(...arguments);\n this.isRestoringData = false;\n }\n get isRepopulatingStores() {\n return false;\n }\n get isInitialCommit() {\n return !this.isInitialCommitPerformed || this.hasLoadedDataToCommit;\n }\n construct(config = {}) {\n // Define default values for these flags here\n // if defined where declared then TS compiles them this way:\n // constructor() {\n // super(...arguments)\n // this.isInitialCommitPerformed = false\n // this.isLoadingInlineData = false\n // this.isWritingData = false\n //\n // }\n // which messes the flags values for inline data loading (since it's async)\n this.isInitialCommitPerformed = false;\n this.isLoadingInlineData = false;\n this.isWritingData = false;\n this.hasLoadedDataToCommit = false;\n const silenceInitialCommit = ('silenceInitialCommit' in config) ? config.silenceInitialCommit : true;\n const adjustDurationToDST = ('adjustDurationToDST' in config) ? config.adjustDurationToDST : false;\n // 5 years roughly === 5 * 365 * 24 * 60 * 60 * 1000\n this.maxCalendarRange = ('maxCalendarRange' in config) ? config.maxCalendarRange : 157680000000;\n // delete configs otherwise super.construct() call treat them as fields and makes accessors for them\n delete config.maxCalendarRange;\n delete config.silenceInitialCommit;\n delete config.adjustDurationToDST;\n superProto.construct.call(this, config);\n this.silenceInitialCommit = silenceInitialCommit;\n this.adjustDurationToDST = adjustDurationToDST;\n }\n // Template method called when a stores dataset is replaced. Implemented in SchedulerBasicProjectMixin\n repopulateStore(store) { }\n // Template method called when replica should be repopulated. Implemented in SchedulerBasicProjectMixin\n repopulateReplica() { }\n deferUntilRepopulationIfNeeded(deferId, func, args) {\n // no deferring at this level (happens in projects using engine)\n func(...args);\n }\n // Template method called when a store is attached to the project\n attachStore(store) { }\n // Template method called when a store is detached to the project\n detachStore(store) { }\n async commitAsync() {\n throw new Error(\"Abstract method called\");\n }\n // Different implementations for Core and Basic engines\n isEngineReady() {\n throw new Error(\"Abstract method called\");\n }\n getStm() {\n throw new Error(\"Abstract method called\");\n }\n }\n return AbstractProjectMixin;\n}) {\n}\n", "import { Mixin } from \"../../../../ChronoGraph/class/BetterMixin.js\";\nimport { SchedulerCoreEvent } from \"./SchedulerCoreEvent.js\";\nimport Store from \"../../../../Core/data/Store.js\";\nimport Model from \"../../../../Core/data/Model.js\";\nimport Delayable from \"../../../../Core/mixin/Delayable.js\";\nimport { CoreEventStoreMixin } from \"../../store/CoreEventStoreMixin.js\";\nimport { CoreAssignmentMixin } from \"./CoreAssignmentMixin.js\";\nimport { CoreAssignmentStoreMixin } from \"../../store/CoreAssignmentStoreMixin.js\";\nimport { CoreResourceMixin } from \"./CoreResourceMixin.js\";\nimport { CoreResourceStoreMixin } from \"../../store/CoreResourceStoreMixin.js\";\nimport { CorePartOfProjectGenericMixin } from \"../../CorePartOfProjectGenericMixin.js\";\nimport { CoreDependencyStoreMixin } from \"../../store/CoreDependencyStoreMixin.js\";\nimport { CoreDependencyMixin } from \"./CoreDependencyMixin.js\";\nimport { CoreCalendarMixin } from './CoreCalendarMixin.js';\nimport { CoreCalendarManagerStoreMixin } from '../../store/CoreCalendarManagerStoreMixin.js';\nimport { delay } from \"../../../util/Functions.js\";\nimport StateTrackingManager from \"../../../../Core/data/stm/StateTrackingManager.js\";\nimport { AbstractProjectMixin } from \"../AbstractProjectMixin.js\";\nimport ObjectHelper from \"../../../../Core/helper/ObjectHelper.js\";\nexport class DelayableWrapper extends Mixin([], Delayable) {\n}\n/**\n * This is a project, implementing _basic scheduling_ as [[SchedulerBasicProjectMixin]] does.\n * Yet this class does not use _chronograph_ based engine.\n */\nexport class SchedulerCoreProjectMixin extends Mixin([\n AbstractProjectMixin,\n CorePartOfProjectGenericMixin,\n DelayableWrapper,\n Model\n], (base) => {\n const superProto = base.prototype;\n class SchedulerCoreProjectMixin extends base {\n static get configurable() {\n return {\n stm: {},\n eventStore: {},\n assignmentStore: {},\n resourceStore: {},\n dependencyStore: {},\n calendarManagerStore: {},\n eventModelClass: SchedulerCoreEvent,\n assignmentModelClass: CoreAssignmentMixin,\n resourceModelClass: CoreResourceMixin,\n dependencyModelClass: CoreDependencyMixin,\n calendarModelClass: CoreCalendarMixin,\n eventStoreClass: CoreEventStoreMixin,\n assignmentStoreClass: CoreAssignmentStoreMixin,\n resourceStoreClass: CoreResourceStoreMixin,\n dependencyStoreClass: CoreDependencyStoreMixin,\n calendarManagerStoreClass: CoreCalendarManagerStoreMixin,\n assignmentsData: null,\n calendarsData: null,\n dependenciesData: null,\n eventsData: null,\n resourcesData: null\n };\n }\n //endregion\n //region Init\n construct(config = {}) {\n const me = this;\n // Cannot be created with declaration, because of how TS is compiled to JS. Ends up after `construct()`\n me.$invalidated = new Set();\n // Define default values for these flags here\n // if defined where declared then TS compiles them this way:\n // constructor() {\n // super(...arguments)\n // this.isPerformingCommit = false\n // this.silenceInitialCommit = true\n // this.ongoing = Promise.resolve()\n // }\n // which messes the flags values for inline data loading (since it's async)\n me.isPerformingCommit = false;\n me.silenceInitialCommit = true;\n me.ongoing = Promise.resolve();\n if (config.eventStore && !config.assignmentStore) {\n const eventStore = config.eventStore.masterStore || config.eventStore;\n // If chained from a CrudManager, the assignment store might not be part of a project, and we might\n // need to ingest it from the CrudManager\n // @ts-ignore\n const assignmentStore = eventStore.assignmentStore || eventStore.crudManager?.assignmentStore;\n // In this case we must ingest the assignment store from the eventStore\n if (assignmentStore?.isAssignmentStore) {\n config.assignmentStore = assignmentStore;\n me.isSharingAssignmentStore = true;\n }\n }\n superProto.construct.call(me, config);\n // not part of the CalendarManagerStore intentionally, not persisted\n me.defaultCalendar = new me.calendarManagerStore.modelClass({\n unspecifiedTimeIsWorking: me.unspecifiedTimeIsWorking\n });\n me.defaultCalendar.project = me;\n const { calendarsData, eventsData, dependenciesData, resourcesData, assignmentsData } = me;\n const hasInlineData = Boolean(calendarsData || eventsData || dependenciesData || resourcesData || assignmentsData);\n if (hasInlineData) {\n me.loadInlineData({\n calendarsData,\n eventsData,\n dependenciesData,\n resourcesData,\n assignmentsData\n });\n delete me.calendarsData;\n delete me.eventsData;\n delete me.dependenciesData;\n delete me.resourcesData;\n delete me.assignmentsData;\n }\n else {\n // Trigger initial commit\n me.bufferedCommitAsync();\n }\n }\n doDestroy() {\n const me = this;\n me.eventStore?.destroy();\n me.dependencyStore?.destroy();\n me.assignmentStore?.destroy();\n me.resourceStore?.destroy();\n me.calendarManagerStore?.destroy();\n me.defaultCalendar.destroy();\n me.stm?.destroy();\n superProto.doDestroy.call(this);\n }\n /**\n * This method loads the \"raw\" data into the project. The loading is basically happening by\n * assigning the individual data entries to the `data` property of the corresponding store.\n *\n * @param data\n */\n async loadInlineData(data) {\n const me = this;\n me.isLoadingInlineData = true;\n if (data.calendarsData) {\n me.calendarManagerStore.data = data.calendarsData;\n }\n if (data.resourcesData) {\n me.resourceStore.data = data.resourcesData;\n }\n if (data.assignmentsData) {\n me.assignmentStore.data = data.assignmentsData;\n }\n if (data.eventsData) {\n me.eventStore.data = data.eventsData;\n }\n if (data.tasksData) {\n me.eventStore.data = data.tasksData;\n }\n if (data.dependenciesData) {\n me.dependencyStore.data = data.dependenciesData;\n }\n await me.commitLoad();\n me.isLoadingInlineData = false;\n return;\n }\n //endregion\n //region Join\n async commitLoad() {\n await this.commitAsync();\n // Might have been destroyed during the async operation above\n if (!this.isDestroyed)\n this.trigger('load');\n }\n joinStoreRecords(store) {\n const fn = (record) => {\n record.setProject(this);\n record.joinProject();\n };\n if (store.rootNode) {\n store.rootNode.traverse(fn);\n }\n else {\n store.forEach(fn);\n }\n }\n unJoinStoreRecords(store) {\n const fn = (record) => {\n record.leaveProject();\n record.setProject(this);\n };\n if (store.rootNode) {\n store.rootNode.traverse(node => {\n // do not unjoin/leave project for the root node, which is the project itself\n if (node !== store.rootNode)\n fn(node);\n });\n }\n else {\n store.forEach(fn);\n }\n }\n //endregion\n //region EventStore\n resolveStoreAndModelClass(name, config) {\n // storeClass from supplied config or our properties\n const storeClass = config?.storeClass || this[`${name}StoreClass`];\n // modelClass from supplied config\n let modelClass = config?.modelClass;\n if (!modelClass) {\n // or from storeClass.modelClass if customized\n // @ts-ignore\n if (this.getDefaultConfiguration()[`${name}ModelClass`] !== storeClass.getDefaultConfiguration().modelClass) {\n modelClass = storeClass.getDefaultConfiguration().modelClass;\n }\n // and if none of the above, use from our properties\n else {\n modelClass = this[`${name}ModelClass`];\n }\n }\n return { storeClass, modelClass };\n }\n setEventStore(eventStore) {\n this.eventStore = eventStore;\n }\n changeEventStore(eventStore, oldStore) {\n const me = this, { stm } = me;\n me.detachStore(oldStore);\n if (!(eventStore instanceof Store)) {\n const { storeClass, modelClass } = me.resolveStoreAndModelClass('event', eventStore);\n eventStore = new storeClass(ObjectHelper.assign({\n modelClass,\n project: me,\n stm\n }, eventStore));\n }\n else {\n eventStore.project = me;\n stm.addStore(eventStore);\n me.joinStoreRecords(eventStore);\n }\n if (oldStore && stm.hasStore(oldStore)) {\n stm.removeStore(oldStore);\n me.unJoinStoreRecords(oldStore);\n const { assignmentsForRemoval } = oldStore;\n // remap the assignment\n assignmentsForRemoval.forEach(assignment => {\n const oldEvent = assignment.event;\n if (oldEvent) {\n const newEvent = eventStore.getById(oldEvent.id);\n if (newEvent) {\n assignment.event = newEvent;\n // keep the assignment\n assignmentsForRemoval.delete(assignment);\n }\n }\n });\n oldStore.afterEventRemoval();\n }\n eventStore.setProject(me);\n return eventStore;\n }\n updateEventStore(eventStore, oldStore) {\n this.attachStore(eventStore);\n this.trigger('eventStoreChange', { store: eventStore });\n }\n //endregion\n //region AssignmentStore\n setAssignmentStore(assignmentStore) {\n this.assignmentStore = assignmentStore;\n }\n changeAssignmentStore(assignmentStore, oldStore) {\n const me = this, { stm } = me;\n me.detachStore(oldStore);\n if (oldStore && stm.hasStore(oldStore)) {\n stm.removeStore(oldStore);\n me.unJoinStoreRecords(oldStore);\n }\n if (!(assignmentStore instanceof Store)) {\n const { storeClass, modelClass } = me.resolveStoreAndModelClass('assignment', assignmentStore);\n assignmentStore = new storeClass(ObjectHelper.assign({\n modelClass,\n project: me,\n stm\n }, assignmentStore));\n }\n else {\n assignmentStore.project = me;\n stm.addStore(assignmentStore);\n me.joinStoreRecords(assignmentStore);\n }\n assignmentStore.setProject(me);\n return assignmentStore;\n }\n updateAssignmentStore(assignmentStore, oldStore) {\n this.attachStore(assignmentStore);\n this.trigger('assignmentStoreChange', { store: assignmentStore });\n }\n //endregion\n //region ResourceStore\n setResourceStore(resourceStore) {\n this.resourceStore = resourceStore;\n }\n changeResourceStore(resourceStore, oldStore) {\n const me = this, { stm } = me;\n me.detachStore(oldStore);\n if (!(resourceStore instanceof Store)) {\n const { storeClass, modelClass } = me.resolveStoreAndModelClass('resource', resourceStore);\n resourceStore = new storeClass(ObjectHelper.assign({\n modelClass,\n project: me,\n stm\n }, resourceStore));\n }\n else {\n resourceStore.project = me;\n stm.addStore(resourceStore);\n me.joinStoreRecords(resourceStore);\n }\n if (oldStore && stm.hasStore(oldStore)) {\n stm.removeStore(oldStore);\n me.unJoinStoreRecords(oldStore);\n const { assignmentsForRemoval } = oldStore;\n // remap the assignment\n assignmentsForRemoval.forEach(assignment => {\n const oldResource = assignment.resource;\n if (oldResource) {\n const newResource = resourceStore.getById(oldResource.id);\n if (newResource) {\n assignment.resource = newResource;\n // keep the assignment\n assignmentsForRemoval.delete(assignment);\n }\n }\n });\n oldStore.afterResourceRemoval();\n }\n resourceStore.setProject(me);\n return resourceStore;\n }\n updateResourceStore(resourceStore, oldStore) {\n this.attachStore(resourceStore);\n this.trigger('resourceStoreChange', { store: resourceStore });\n }\n //endregion\n //region DependencyStore\n setDependencyStore(dependencyStore) {\n this.dependencyStore = dependencyStore;\n }\n changeDependencyStore(dependencyStore, oldStore) {\n const me = this;\n me.detachStore(oldStore);\n if (!(dependencyStore instanceof Store)) {\n const { storeClass, modelClass } = me.resolveStoreAndModelClass('dependency', dependencyStore);\n dependencyStore = new storeClass(ObjectHelper.assign({\n modelClass,\n project: me,\n stm: me.stm\n }, dependencyStore));\n }\n else {\n dependencyStore.project = me;\n me.stm.addStore(dependencyStore);\n me.joinStoreRecords(dependencyStore);\n }\n return dependencyStore;\n }\n updateDependencyStore(dependencyStore, oldStore) {\n this.attachStore(dependencyStore);\n this.trigger('dependencyStoreChange', { store: dependencyStore });\n }\n //endregion\n //region CalendarManagerStore\n setCalendarManagerStore(calendarManagerStore) {\n this.calendarManagerStore = calendarManagerStore;\n }\n changeCalendarManagerStore(calendarManagerStore, oldStore) {\n const me = this;\n me.detachStore(oldStore);\n if (!(calendarManagerStore instanceof Store)) {\n // @ts-ignore\n const storeClass = calendarManagerStore?.storeClass || me.calendarManagerStoreClass;\n // @ts-ignore\n const modelClass = calendarManagerStore?.modelClass || storeClass.getDefaultConfiguration().modelClass || me.calendarModelClass;\n calendarManagerStore = new storeClass(ObjectHelper.assign({\n modelClass,\n project: me,\n stm: me.stm\n }, calendarManagerStore));\n }\n else {\n me.stm.addStore(calendarManagerStore);\n }\n calendarManagerStore.setProject(me);\n return calendarManagerStore;\n }\n updateCalendarManagerStore(calendarManagerStore, oldStore) {\n this.attachStore(calendarManagerStore);\n this.trigger('calendarManagerStoreChange', { store: calendarManagerStore });\n }\n //endregion\n //region Calendar\n get calendar() {\n return this.$calendar || this.defaultCalendar;\n }\n set calendar(calendar) {\n this.$calendar = calendar;\n }\n get effectiveCalendar() {\n return this.calendar;\n }\n //endregion\n //region Add records\n async addEvent(event) {\n this.eventStore.add(event);\n return this.commitAsync();\n }\n async addAssignment(assignment) {\n this.assignmentStore.add(assignment);\n return this.commitAsync();\n }\n async addResource(resource) {\n this.resourceStore.add(resource);\n return this.commitAsync();\n }\n async addDependency(dependency) {\n this.dependencyStore.add(dependency);\n return this.commitAsync();\n }\n //endregion\n //region Auto commit\n // Buffer commitAsync using setTimeout. Not using `buffer` on purpose, for performance reasons and to better\n // mimic how graph does it\n bufferedCommitAsync() {\n if (!this.hasPendingAutoCommit) {\n this.setTimeout({\n fn: 'commitAsync',\n delay: 10\n });\n }\n }\n get hasPendingAutoCommit() {\n return this.hasTimeout('commitAsync');\n }\n unScheduleAutoCommit() {\n this.clearTimeout('commitAsync');\n }\n //endregion\n //region Commit\n async commitAsync() {\n if (this.isPerformingCommit)\n return this.ongoing;\n return this.ongoing = this.doCommitAsync();\n }\n async doCommitAsync() {\n const me = this;\n me.isPerformingCommit = true;\n // Cancel any outstanding commit\n me.unScheduleAutoCommit();\n await delay(0);\n if (!me.isDestroyed) {\n // Calculate all invalidated records, updates their data silently\n for (const record of me.$invalidated) {\n record.calculateInvalidated();\n }\n const { isInitialCommit, silenceInitialCommit } = me;\n // apply changes silently if this is initial commit and \"silenceInitialCommit\" option is enabled\n const silenceCommit = isInitialCommit && silenceInitialCommit;\n // Notify stores that care about commit (internal)\n me.assignmentStore.onCommitAsync();\n me.dependencyStore.onCommitAsync();\n me.isInitialCommitPerformed = true;\n me.hasLoadedDataToCommit = false;\n me.isPerformingCommit = false;\n const stores = [me.assignmentStore, me.dependencyStore, me.eventStore, me.resourceStore, me.calendarManagerStore];\n stores.forEach(store => store.suspendAutoCommit?.());\n me.isWritingData = true;\n // \"Real\" project triggers refresh before data is written back to records\n me.trigger('refresh', { isInitialCommit, isCalculated: true });\n // If we are not announcing changes, take a cheaper path\n if (silenceCommit) {\n for (const record of me.$invalidated) {\n record.finalizeInvalidated(true);\n }\n }\n else {\n // Two loops looks a bit weird, but needed since editing assignment might affect event etc.\n // And we do only want a single update in the end\n // 1. Start batches and perform all calculations\n for (const record of me.$invalidated) {\n record.beginBatch(true);\n record.finalizeInvalidated();\n }\n // 2. End batches, announcing changes (unless initial commit)\n for (const record of me.$invalidated) {\n record.endBatch(false, true);\n }\n }\n me.isWritingData = false;\n me.$invalidated.clear();\n // Mimic real projects events\n me.trigger('dataReady');\n stores.forEach(store => store.resumeAutoCommit?.());\n // Chrono version triggers \"dataReady\" only if there were no commit rejection\n // (in case of a rejection it triggers \"commitRejected\" event)\n // but in both cases it triggers \"commitFinalized\" afterwards\n me.trigger('commitFinalized');\n return true;\n }\n }\n async propagateAsync() {\n return this.commitAsync();\n }\n // Called when a record invalidates itself, queues it for calculation\n invalidate(record) {\n this.$invalidated.add(record);\n this.bufferedCommitAsync();\n }\n // this does not account for possible scheduling conflicts\n async isValidDependency() {\n return true;\n }\n //endregion\n //region STM\n getStm() {\n return this.stm;\n }\n /**\n * State tracking manager instance the project relies on\n */\n set stm(stm) {\n stm = this.$stm = new StateTrackingManager(ObjectHelper.assign({\n disabled: true\n }, stm));\n stm.ion({\n // Propagate on undo/redo\n restoringStop: async () => {\n // Disable STM meanwhile to not pick it up as a new STM transaction\n stm.disable();\n await this.commitAsync();\n if (!this.isDestroyed) {\n stm.enable();\n this.trigger('stateRestoringDone');\n }\n }\n });\n }\n get stm() {\n return this.$stm;\n }\n //endregion\n isEngineReady() {\n return !this.hasPendingAutoCommit && !this.isPerformingCommit && this.isInitialCommitPerformed;\n }\n }\n //region Config\n SchedulerCoreProjectMixin.applyConfigs = true;\n return SchedulerCoreProjectMixin;\n}) {\n}\n", "import VersionHelper from '../../Core/helper/VersionHelper.js';\nimport ProjectModelMixin from './mixin/ProjectModelMixin.js';\nimport ProjectCurrentConfig from './mixin/ProjectCurrentConfig.js';\nimport ModelPersistencyManager from '../data/util/ModelPersistencyManager.js';\nimport { SchedulerCoreProjectMixin } from '../../Engine/quark/model/scheduler_core/SchedulerCoreProjectMixin.js';\nimport EventModel from './EventModel.js';\nimport DependencyModel from './DependencyModel.js';\nimport ResourceModel from './ResourceModel.js';\nimport AssignmentModel from './AssignmentModel.js';\nimport EventStore from '../data/EventStore.js';\nimport DependencyStore from '../data/DependencyStore.js';\nimport ResourceStore from '../data/ResourceStore.js';\nimport AssignmentStore from '../data/AssignmentStore.js';\nconst EngineMixin = SchedulerCoreProjectMixin;\n/**\n * @module Scheduler/model/ProjectModel\n */\n/**\n * This class represents a global project of your Scheduler - a central place for all data.\n *\n * It holds and links the stores usually used by Scheduler:\n *\n * - {@link Scheduler.data.EventStore}\n * - {@link Scheduler.data.ResourceStore}\n * - {@link Scheduler.data.AssignmentStore}\n * - {@link Scheduler.data.DependencyStore}\n * - {@link Scheduler.data.TimeRangeStore}\n * - {@link Scheduler.data.ResourceTimeRangeStore}\n *\n * The project uses a calculation engine to normalize dates and durations. It is also responsible for\n * handling references between models, for example to link an event via an assignment to a resource. These operations\n * are asynchronous, a fact that is hidden when working in the Scheduler UI but which you must know about when performing\n * more advanced operations on the data level.\n *\n * When there is a change to data that requires something else to be recalculated, the project schedules a calculation (a\n * commit) which happens moments later. It is also possible to trigger these calculations directly. This snippet illustrate\n * the process:\n *\n 1. Something changes which requires the project to recalculate, for example adding a new task:\n *\n * ```javascript\n * const [event] = project.eventStore.add({ startDate, endDate });\n * ```\n *\n * 2. A recalculation is scheduled, thus:\n *\n * ```javascript\n * event.duration; // <- Not yet calculated\n * ```\n *\n * 3. Calculate now instead of waiting for the scheduled calculation\n *\n * ```javascript\n * await project.commitAsync();\n *\n * event.duration; // <- Now available\n * ```\n *\n * ## Using inline data\n *\n * The project provides settable property {@link Scheduler.crud.AbstractCrudManager#property-inlineData} that can\n * be used to get data from all its stores at once and to set this data as well. Populating the stores this way can\n * be useful if you cannot or you do not want to use CrudManager for server requests but you pull the data by other\n * means and have it ready outside of ProjectModel. Also, the data from all stores is available in a single\n * assignment statement.\n *\n * ### Getting data\n * ```javascript\n * const data = scheduler.project.inlineData;\n *\n * // use the data in your application\n * ```\n *\n * ### Setting data\n * ```javascript\n * const data = // your function to pull server data\n *\n * scheduler.project.inlineData = data;\n * ```\n *\n * ## Monitoring data changes\n *\n * While it is possible to listen for data changes on the projects individual stores, it is sometimes more convenient\n * to have a centralized place to handle all data changes. By listening for the {@link #event-change change event} your\n * code gets notified when data in any of the stores changes. Useful for example to keep an external data model up to\n * date:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * project: {\n * listeners : {\n * change({ store, action, records }) {\n * const { $name } = store.constructor;\n *\n * if (action === 'add') {\n * externalDataModel.add($name, records);\n * }\n *\n * if (action === 'remove') {\n * externalDataModel.remove($name, records);\n * }\n * }\n * }\n * }\n * });\n * ```\n *\n * ## Built-in StateTrackingManager\n *\n * The project also has a built-in {@link Core.data.stm.StateTrackingManager StateTrackingManager} (STM for short), that\n * handles undo/redo for the project stores (additional stores can also be added). You can enable it to track all\n * project store changes:\n *\n * ```javascript\n * // Turn on auto recording when you create your Scheduler:\n * const scheduler = new Scheduler({\n * project : {\n * stm : {\n * autoRecord : true\n * }\n * }\n * });\n *\n * // Undo a transaction\n * project.stm.undo();\n *\n * // Redo\n * project.stm.redo();\n * ```\n *\n * Check out the `undoredo` demo to see it in action.\n *\n * @extends Core/data/Model\n * @mixes Scheduler/model/mixin/ProjectModelMixin\n * @uninherit Core/data/mixin/TreeNode\n */\nexport default class ProjectModel extends ProjectCurrentConfig(ProjectModelMixin(EngineMixin)) {\n static get $name() {\n return 'ProjectModel';\n }\n //region Inline data configs & properties\n /**\n * @hidefields id, readOnly, children, parentId, parentIndex\n */\n /**\n * A flag, indicating whether the dates and duration calculations should adjust the result to DST time shift.\n *\n * @config {Boolean} adjustDurationToDST\n * @default false\n */\n /**\n * Get/set {@link #property-eventStore} data.\n *\n * Always returns an array of {@link Scheduler.model.EventModel EventModels} but also accepts an array of\n * its configuration objects as input.\n *\n * @member {Scheduler.model.EventModel[]} events\n * @accepts {Scheduler.model.EventModel[]|EventModelConfig[]}\n * @category Inline data\n */\n /**\n * Data use to fill the {@link #property-eventStore}. Should be an array of\n * {@link Scheduler.model.EventModel EventModels} or its configuration objects.\n *\n * @config {Scheduler.model.EventModel[]|EventModelConfig[]} events\n * @category Inline data\n */\n /**\n * Get/set {@link #property-resourceStore} data.\n *\n * Always returns an array of {@link Scheduler.model.ResourceModel ResourceModels} but also accepts an array\n * of its configuration objects as input.\n *\n * @member {Scheduler.model.ResourceModel[]} resources\n * @accepts {Scheduler.model.ResourceModel[]|ResourceModelConfig[]}\n * @category Inline data\n */\n /**\n * Data use to fill the {@link #property-resourceStore}. Should be an array of\n * {@link Scheduler.model.ResourceModel ResourceModels} or its configuration objects.\n *\n * @config {Scheduler.model.ResourceModel[]|ResourceModelConfig[]} resources\n * @category Inline data\n */\n /**\n * Get/set {@link #property-assignmentStore} data.\n *\n * Always returns an array of {@link Scheduler.model.AssignmentModel AssignmentModels} but also accepts an\n * array of its configuration objects as input.\n *\n * @member {Scheduler.model.AssignmentModel[]} assignments\n * @accepts {Scheduler.model.AssignmentModel[]|AssignmentModelConfig[]}\n * @category Inline data\n */\n /**\n * Data use to fill the {@link #property-assignmentStore}. Should be an array of\n * {@link Scheduler.model.AssignmentModel AssignmentModels} or its configuration objects.\n *\n * @config {Scheduler.model.AssignmentModel[]|AssignmentModelConfig[]} assignments\n * @category Inline data\n */\n /**\n * Get/set {@link #property-dependencyStore} data.\n *\n * Always returns an array of {@link Scheduler.model.DependencyModel DependencyModels} but also accepts an\n * array of its configuration objects as input.\n *\n * @member {Scheduler.model.DependencyModel[]} dependencies\n * @accepts {Scheduler.model.DependencyModel[]|DependencyModelConfig[]}\n * @category Inline data\n */\n /**\n * Data use to fill the {@link #property-dependencyStore}. Should be an array of\n * {@link Scheduler.model.DependencyModel DependencyModels} or its configuration objects.\n *\n * @config {Scheduler.model.DependencyModel[]|DependencyModelConfig[]} dependencies\n * @category Inline data\n */\n /**\n * Get/set {@link #property-timeRangeStore} data.\n *\n * Always returns an array of {@link Scheduler.model.TimeRangeModel TimeRangeModels} but also accepts an\n * array of its configuration objects as input.\n *\n * @member {Scheduler.model.TimeRangeModel[]} timeRanges\n * @accepts {Scheduler.model.TimeRangeModel[]|TimeRangeModelConfig[]}\n * @category Inline data\n */\n /**\n * Data use to fill the {@link #property-timeRangeStore}. Should be an array of\n * {@link Scheduler.model.TimeRangeModel TimeRangeModels} or its configuration objects.\n *\n * @config {Scheduler.model.TimeRangeModel[]|TimeRangeModelConfig[]} timeRanges\n * @category Inline data\n */\n /**\n * Get/set {@link #property-resourceTimeRangeStore} data.\n *\n * Always returns an array of {@link Scheduler.model.ResourceTimeRangeModel ResourceTimeRangeModels} but\n * also accepts an array of its configuration objects as input.\n *\n * @member {Scheduler.model.ResourceTimeRangeModel[]} resourceTimeRanges\n * @accepts {Scheduler.model.ResourceTimeRangeModel[]|ResourceTimeRangeModelConfig[]}\n * @category Inline data\n */\n /**\n * Data use to fill the {@link #property-resourceTimeRangeStore}. Should be an array\n * of {@link Scheduler.model.ResourceTimeRangeModel ResourceTimeRangeModels} or its configuration objects.\n *\n * @config {Scheduler.model.ResourceTimeRangeModel[]|ResourceTimeRangeModelConfig[]} resourceTimeRanges\n * @category Inline data\n */\n //endregion\n //region Legacy inline data configs & properties\n /**\n * The initial data, to fill the {@link #property-eventStore} with.\n * Should be an array of {@link Scheduler.model.EventModel EventModels} or its configuration objects.\n *\n * @config {Scheduler.model.EventModel[]|EventModelConfig[]} eventsData\n * @category Legacy inline data\n */\n /**\n * The initial data, to fill the {@link #property-dependencyStore} with.\n * Should be an array of {@link Scheduler.model.DependencyModel DependencyModels} or its configuration\n * objects.\n *\n * @config {Scheduler.model.DependencyModel[]|DependencyModelConfig[]} [dependenciesData]\n * @category Legacy inline data\n */\n /**\n * The initial data, to fill the {@link #property-resourceStore} with.\n * Should be an array of {@link Scheduler.model.ResourceModel ResourceModels} or its configuration objects.\n *\n * @config {Scheduler.model.ResourceModel[]|ResourceModelConfig[]} [resourcesData]\n * @category Legacy inline data\n */\n /**\n * The initial data, to fill the {@link #property-assignmentStore} with.\n * Should be an array of {@link Scheduler.model.AssignmentModel AssignmentModels} or its configuration\n * objects.\n *\n * @config {Scheduler.model.AssignmentModel[]|AssignmentModelConfig[]} [assignmentsData]\n * @category Legacy inline data\n */\n //endregion\n //region Store configs & properties\n /**\n * The {@link Scheduler.data.EventStore store} holding the events information.\n *\n * See also {@link Scheduler.model.EventModel}\n *\n * @member {Scheduler.data.EventStore} eventStore\n * @category Models & Stores\n */\n /**\n * An {@link Scheduler.data.EventStore} instance or a config object.\n * @config {Scheduler.data.EventStore|EventStoreConfig} eventStore\n * @category Models & Stores\n */\n /**\n * The {@link Scheduler.data.DependencyStore store} holding the dependencies information.\n *\n * See also {@link Scheduler.model.DependencyModel}\n *\n * @member {Scheduler.data.DependencyStore} dependencyStore\n * @category Models & Stores\n */\n /**\n * A {@link Scheduler.data.DependencyStore} instance or a config object.\n * @config {Scheduler.data.DependencyStore|DependencyStoreConfig} dependencyStore\n * @category Models & Stores\n */\n /**\n * The {@link Scheduler.data.ResourceStore store} holding the resources that can be assigned to the events in the event store.\n *\n * See also {@link Scheduler.model.ResourceModel}\n *\n * @member {Scheduler.data.ResourceStore} resourceStore\n * @category Models & Stores\n */\n /**\n * A {@link Scheduler.data.ResourceStore} instance or a config object.\n * @config {Scheduler.data.ResourceStore|ResourceStoreConfig} resourceStore\n * @category Models & Stores\n */\n /**\n * The {@link Scheduler.data.AssignmentStore store} holding the assignments information.\n *\n * See also {@link Scheduler.model.AssignmentModel}\n *\n * @member {Scheduler.data.AssignmentStore} assignmentStore\n * @category Models & Stores\n */\n /**\n * An {@link Scheduler.data.AssignmentStore} instance or a config object.\n * @config {Scheduler.data.AssignmentStore|AssignmentStoreConfig} assignmentStore\n * @category Models & Stores\n */\n //endregion\n //region Configs\n static get defaultConfig() {\n return {\n /**\n * The constructor of the event model class, to be used in the project. Will be set as the\n * {@link Core.data.Store#config-modelClass modelClass} property of the {@link #property-eventStore}\n *\n * @config {Scheduler.model.EventModel}\n * @typings {typeof EventModel}\n * @category Models & Stores\n */\n eventModelClass : EventModel,\n /**\n * The constructor of the dependency model class, to be used in the project. Will be set as the\n * {@link Core.data.Store#config-modelClass modelClass} property of the {@link #property-dependencyStore}\n *\n * @config {Scheduler.model.DependencyModel}\n * @typings {typeof DependencyModel}\n * @category Models & Stores\n */\n dependencyModelClass : DependencyModel,\n /**\n * The constructor of the resource model class, to be used in the project. Will be set as the\n * {@link Core.data.Store#config-modelClass modelClass} property of the {@link #property-resourceStore}\n *\n * @config {Scheduler.model.ResourceModel}\n * @typings {typeof ResourceModel}\n * @category Models & Stores\n */\n resourceModelClass : ResourceModel,\n /**\n * The constructor of the assignment model class, to be used in the project. Will be set as the\n * {@link Core.data.Store#config-modelClass modelClass} property of the {@link #property-assignmentStore}\n *\n * @config {Scheduler.model.AssignmentModel}\n * @typings {typeof AssignmentModel}\n * @category Models & Stores\n */\n assignmentModelClass : AssignmentModel,\n /**\n * The constructor to create an event store instance with. Should be a class, subclassing the\n * {@link Scheduler.data.EventStore}\n * @config {Scheduler.data.EventStore|Object}\n * @typings {typeof EventStore|object}\n * @category Models & Stores\n */\n eventStoreClass : EventStore,\n /**\n * The constructor to create a dependency store instance with. Should be a class, subclassing the\n * {@link Scheduler.data.DependencyStore}\n * @config {Scheduler.data.DependencyStore|Object}\n * @typings {typeof DependencyStore|object}\n * @category Models & Stores\n */\n dependencyStoreClass : DependencyStore,\n /**\n * The constructor to create a resource store instance with. Should be a class, subclassing the\n * {@link Scheduler.data.ResourceStore}\n * @config {Scheduler.data.ResourceStore|Object}\n * @typings {typeof ResourceStore|object}\n * @category Models & Stores\n */\n resourceStoreClass : ResourceStore,\n /**\n * The constructor to create an assignment store instance with. Should be a class, subclassing the\n * {@link Scheduler.data.AssignmentStore}\n * @config {Scheduler.data.AssignmentStore|Object}\n * @typings {typeof AssignmentStore|object}\n * @category Models & Stores\n */\n assignmentStoreClass : AssignmentStore\n };\n }\n //endregion\n //region Events\n /**\n * Fired when the engine has finished its calculations and the results has been written back to the records.\n *\n * ```javascript\n * scheduler.project.on({\n * dataReady() {\n * console.log('Calculations finished');\n * }\n * });\n *\n * scheduler.eventStore.first.duration = 10;\n *\n * // At some point a bit later it will log 'Calculations finished'\n * ```\n *\n * @event dataReady\n * @param {Scheduler.model.ProjectModel} source The project\n * @typings source -> {Scheduler.model.ProjectModel||any}\n * @param {Boolean} isInitialCommit Flag that shows if this commit is initial\n * @param {Set} records Set of all {@link Core.data.Model}s that were modified in the completed transaction.\n * Use the {@link Core.data.Model#property-modifications} property of each Model to identify\n * modified fields.\n */\n //endregion\n /**\n * Silences propagations caused by the project loading.\n *\n * Applying the loaded data to the project occurs in two basic stages:\n *\n * 1. Data gets into the engine graph which triggers changes propagation\n * 2. The changes caused by the propagation get written to related stores\n *\n * Setting this flag to `true` makes the component perform step 2 silently without triggering events causing reactions on those changes\n * (like sending changes back to the server if `autoSync` is enabled) and keeping stores in unmodified state.\n *\n * This is safe if the loaded data is consistent so propagation doesn't really do any adjustments.\n * By default the system treats the data as consistent so this option is `true`.\n *\n * ```js\n * new Scheduler({\n * project : {\n * // We want scheduling engine to recalculate the data properly\n * // so then we could save it back to the server\n * silenceInitialCommit : false\n * }\n * ...\n * })\n * ```\n *\n * @config {Boolean} silenceInitialCommit\n * @default true\n * @category Advanced\n */\n construct(...args) {\n super.construct(...args);\n if (VersionHelper.isTestEnv) {\n globalThis.bryntum.testProject = this;\n }\n // Moved here from EventStore, since project is now the container instead of it\n this.modelPersistencyManager = this.createModelPersistencyManager();\n }\n /**\n * Creates and returns model persistency manager\n *\n * @returns {Scheduler.data.util.ModelPersistencyManager}\n * @internal\n */\n createModelPersistencyManager() {\n return new ModelPersistencyManager({\n eventStore : this,\n resourceStore : this.resourceStore,\n assignmentStore : this.assignmentStore,\n dependencyStore : this.dependencyStore\n });\n }\n doDestroy() {\n this.modelPersistencyManager.destroy();\n super.doDestroy();\n }\n // To comply with TaskBoards expectations\n get taskStore() {\n return this.eventStore;\n }\n}\nProjectModel.applyConfigs = true;\nProjectModel.initClass();\nProjectModel._$name = 'ProjectModel';", "import ResourceStore from './ResourceStore.js';\nimport EventStore from './EventStore.js';\nimport AssignmentStore from './AssignmentStore.js';\nimport DependencyStore from './DependencyStore.js';\nimport Store from '../../Core/data/Store.js';\nimport ProjectCrudManager from './mixin/ProjectCrudManager.js';\nimport AbstractCrudManager from '../crud/AbstractCrudManager.js';\nimport AjaxTransport from '../crud/transport/AjaxTransport.js';\nimport JsonEncoder from '../crud/encoder/JsonEncoder.js';\nimport ProjectModel from '../model/ProjectModel.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\n/**\n * @module Scheduler/data/CrudManager\n */\n/**\n * The Crud Manager (or \"CM\") is a class implementing centralized loading and saving of data in multiple stores.\n * Loading the stores and saving all changes is done using a single request. The stores managed by CRUD manager should\n * not be configured with their own CRUD URLs or use {@link Core/data/AjaxStore#config-autoLoad}/{@link Core/data/AjaxStore#config-autoCommit}.\n *\n * This class uses JSON as its data encoding format.\n *\n * ## Scheduler stores\n *\n * The class supports Scheduler specific stores (namely: resource, event, assignment and dependency stores).\n * For these stores, the CM has separate configs ({@link #config-resourceStore}, {@link #config-eventStore},\n * {@link #config-assignmentStore}) to register them.\n *\n * ```javascript\n * const crudManager = new CrudManager({\n * autoLoad : true,\n * resourceStore : resourceStore,\n * eventStore : eventStore,\n * assignmentStore : assignmentStore,\n * transport : {\n * load : {\n * url : 'php/read.php'\n * },\n * sync : {\n * url : 'php/save.php'\n * }\n * }\n * });\n * ```\n *\n * ## AJAX request configuration\n *\n * To configure AJAX request parameters please take a look at the\n * {@link Scheduler/crud/transport/AjaxTransport} docs.\n *\n * ```javascript\n * const crudManager = new CrudManager({\n * autoLoad : true,\n * resourceStore,\n * eventStore,\n * assignmentStore,\n * transport : {\n * load : {\n * url : 'php/read.php',\n * // use GET request\n * method : 'GET',\n * // pass request JSON in \"rq\" parameter\n * paramName : 'rq',\n * // extra HTTP request parameters\n * params : {\n * foo : 'bar'\n * },\n * // pass some extra Fetch API option\n * credentials : 'include'\n * },\n * sync : {\n * url : 'php/save.php'\n * }\n * }\n * });\n * ```\n *\n * ## Using inline data\n *\n * The CrudManager provides settable property {@link #property-inlineData} that can\n * be used to get data from all {@link #property-crudStores} at once and to set this\n * data as well. Populating the stores this way can be useful if you cannot or you do not want to use CrudManager for\n * server requests but you pull the data by other means and have it ready outside CrudManager. Also, the data from all\n * stores is available in a single assignment statement.\n *\n * ### Getting data\n * ```javascript\n * const data = scheduler.crudManager.inlineData;\n *\n * // use the data in your application\n * ```\n *\n * ### Setting data\n * ```javascript\n * const data = // your function to pull server data\n *\n * scheduler.crudManager.inlineData = data;\n * ```\n *\n * ## Load order\n *\n * The CM is aware of the proper load order for Scheduler specific stores so you don't need to worry about it.\n * If you provide any extra stores (using {@link #config-stores} config) they will be\n * added to the start of collection before the Scheduler specific stores.\n * If you need a different loading order, you should use {@link #function-addStore} method to\n * register your store:\n *\n * ```javascript\n * const crudManager = new CrudManager({\n * resourceStore : resourceStore,\n * eventStore : eventStore,\n * assignmentStore : assignmentStore,\n * // extra user defined stores will get to the start of collection\n * // so they will be loaded first\n * stores : [ store1, store2 ],\n * transport : {\n * load : {\n * url : 'php/read.php'\n * },\n * sync : {\n * url : 'php/save.php'\n * }\n * }\n * });\n *\n * // append store3 to the end so it will be loaded last\n * crudManager.addStore(store3);\n *\n * // now when we registered all the stores let's load them\n * crudManager.load();\n * ```\n *\n * ## Assignment store\n *\n * The Crud Manager is designed to use {@link Scheduler/data/AssignmentStore} for assigning events to one or multiple resources.\n * However if server provides `resourceId` for any of the `events` then the Crud Manager enables backward compatible mode when\n * an event could have a single assignment only. This also disables multiple assignments in Scheduler UI.\n * In order to use multiple assignments server backend should be able to receive/send `assignments` for `load` and `sync` requests.\n *\n * ## Project\n *\n * The Crud Manager automatically consumes stores of the provided project (namely its {@link Scheduler/model/ProjectModel#property-eventStore},\n * {@link Scheduler/model/ProjectModel#property-resourceStore}, {@link Scheduler/model/ProjectModel#property-assignmentStore},\n * {@link Scheduler/model/ProjectModel#property-dependencyStore}, {@link Scheduler/model/ProjectModel#property-timeRangeStore} and\n * {@link Scheduler/model/ProjectModel#property-resourceTimeRangeStore}):\n *\n * ```javascript\n * const crudManager = new CrudManager({\n * // crud manager will get stores from myAppProject project\n * project : myAppProject,\n * transport : {\n * load : {\n * url : 'php/read.php'\n * },\n * sync : {\n * url : 'php/save.php'\n * }\n * }\n * });\n * ```\n *\n * @mixes Scheduler/data/mixin/ProjectCrudManager\n * @mixes Scheduler/crud/encoder/JsonEncoder\n * @mixes Scheduler/crud/transport/AjaxTransport\n * @extends Scheduler/crud/AbstractCrudManager\n */\nexport default class CrudManager extends AbstractCrudManager.mixin(ProjectCrudManager, AjaxTransport, JsonEncoder) {\n static $name = 'CrudManager';\n //region Config\n static get defaultConfig() {\n return {\n projectClass : ProjectModel,\n resourceStoreClass : ResourceStore,\n eventStoreClass : EventStore,\n assignmentStoreClass : AssignmentStore,\n dependencyStoreClass : DependencyStore,\n /**\n * A store with resources (or a config object).\n * @config {Scheduler.data.ResourceStore|ResourceStoreConfig}\n */\n resourceStore : {},\n /**\n * A store with events (or a config object).\n *\n * ```\n * crudManager : {\n * eventStore {\n * storeClass : MyEventStore\n * }\n * }\n * ```\n * @config {Scheduler.data.EventStore|EventStoreConfig}\n */\n eventStore : {},\n /**\n * A store with assignments (or a config object).\n * @config {Scheduler.data.AssignmentStore|AssignmentStoreConfig}\n */\n assignmentStore : {},\n /**\n * A store with dependencies(or a config object).\n * @config {Scheduler.data.DependencyStore|DependencyStoreConfig}\n */\n dependencyStore : {},\n /**\n * A project that holds and links stores\n * @config {Scheduler.model.ProjectModel}\n */\n project : null\n };\n }\n //endregion\n buildProject() {\n return new this.projectClass(this.buildProjectConfig());\n }\n buildProjectConfig() {\n return ObjectHelper.cleanupProperties({\n eventStore : this.eventStore,\n resourceStore : this.resourceStore,\n assignmentStore : this.assignmentStore,\n dependencyStore : this.dependencyStore,\n resourceTimeRangeStore : this.resourceTimeRangeStore\n });\n }\n //region Stores\n set project(project) {\n const me = this;\n if (project !== me._project) {\n me.detachListeners('beforeDataReady');\n me.detachListeners('afterDataReady');\n me._project = project;\n if (project) {\n me.eventStore = project.eventStore;\n me.resourceStore = project.resourceStore;\n me.assignmentStore = project.assignmentStore;\n me.dependencyStore = project.dependencyStore;\n me.timeRangeStore = project.timeRangeStore;\n me.resourceTimeRangeStore = project.resourceTimeRangeStore;\n // When adding multiple events to the store it will trigger multiple change events each of which will\n // call crudManager.hasChanges, which will try to actually get the changeset package. It takes some time\n // and we better skip that part for the dataready event, suspending changes tracking.\n project.ion({\n name : 'beforeDataReady',\n dataReady : () => me.suspendChangeTracking(),\n prio : 100,\n thisObj : me\n });\n project.ion({\n name : 'afterDataReady',\n dataReady : () => me.resumeChangeTracking(),\n prio : -100,\n thisObj : me\n });\n }\n if (!me.eventStore) {\n me.eventStore = {};\n }\n if (!me.resourceStore) {\n me.resourceStore = {};\n }\n if (!me.assignmentStore) {\n me.assignmentStore = {};\n }\n if (!me.dependencyStore) {\n me.dependencyStore = {};\n }\n }\n }\n get project() {\n return this._project;\n }\n /**\n * Store for {@link Scheduler/feature/TimeRanges timeRanges} feature.\n * @property {Core.data.Store}\n */\n get timeRangeStore() {\n return this._timeRangeStore?.store;\n }\n set timeRangeStore(store) {\n this.setFeaturedStore('_timeRangeStore', store, this.project?.timeRangeStoreClass);\n }\n /**\n * Store for {@link Scheduler/feature/ResourceTimeRanges resourceTimeRanges} feature.\n * @property {Core.data.Store}\n */\n get resourceTimeRangeStore() {\n return this._resourceTimeRangeStore?.store;\n }\n set resourceTimeRangeStore(store) {\n this.setFeaturedStore('_resourceTimeRangeStore', store, this.project?.resourceTimeRangeStoreClass);\n }\n /**\n * Get/set the resource store bound to the CRUD manager.\n * @property {Scheduler.data.ResourceStore}\n */\n get resourceStore() {\n return this._resourceStore?.store;\n }\n set resourceStore(store) {\n const me = this;\n me.setFeaturedStore('_resourceStore', store, me.resourceStoreClass);\n }\n /**\n * Get/set the event store bound to the CRUD manager.\n * @property {Scheduler.data.EventStore}\n */\n get eventStore() {\n return this._eventStore?.store;\n }\n set eventStore(store) {\n const me = this;\n me.setFeaturedStore('_eventStore', store, me.eventStoreClass);\n }\n /**\n * Get/set the assignment store bound to the CRUD manager.\n * @property {Scheduler.data.AssignmentStore}\n */\n get assignmentStore() {\n return this._assignmentStore?.store;\n }\n set assignmentStore(store) {\n this.setFeaturedStore('_assignmentStore', store, this.assignmentStoreClass);\n }\n /**\n * Get/set the dependency store bound to the CRUD manager.\n * @property {Scheduler.data.DependencyStore}\n */\n get dependencyStore() {\n return this._dependencyStore?.store;\n }\n set dependencyStore(store) {\n this.setFeaturedStore('_dependencyStore', store, this.dependencyStoreClass);\n }\n setFeaturedStore(property, store, storeClass) {\n const\n me = this,\n oldStore = me[property]?.store;\n // if not the same store\n if (oldStore !== store) {\n // normalize store value (turn it into a storeClass instance if needed)\n store = Store.getStore(store, store?.storeClass || storeClass);\n if (oldStore) {\n me.removeStore(oldStore);\n }\n me[property] = store && { store } || null;\n // Adds configured scheduler stores to the store collection ensuring correct order\n // unless they're already registered.\n me.addPrioritizedStore(me[property]);\n }\n return me[property];\n }\n getChangesetPackage() {\n const pack = super.getChangesetPackage();\n // Remove assignments from changes if using single assignment mode (resourceId) or resourceIds\n if (pack && (this.eventStore.usesSingleAssignment || this.eventStore.modelClass.fieldMap?.resourceIds?.persist)) {\n delete pack[this.assignmentStore.storeId];\n // No other changes?\n if (!this.crudStores.some(storeInfo => pack[storeInfo.storeId])) {\n return null;\n }\n }\n return pack;\n }\n //endregion\n get crudLoadValidationMandatoryStores() {\n return [this._eventStore.storeId, this._resourceStore.storeId];\n }\n};\nCrudManager._$name = 'CrudManager';", "/**\n * @module Scheduler/view/mixin/CurrentConfig\n */\nconst\n stores = [\n 'eventStore',\n 'taskStore',\n 'assignmentStore',\n 'resourceStore',\n 'dependencyStore',\n 'timeRangeStore',\n 'resourceTimeRangeStore'\n ],\n inlineProperties = [\n 'events',\n 'tasks',\n 'resources',\n 'assignments',\n 'dependencies',\n 'timeRanges',\n 'resourceTimeRanges'\n ];\n/**\n * Mixin that makes sure inline data & crud manager data are removed from current config for products using a project.\n * The data is instead inlined in the project (by ProjectModel.js)\n *\n * @mixin\n * @private\n */\nexport default Target => class CurrentConfig extends Target {\n static get $name() {\n return 'CurrentConfig';\n }\n preProcessCurrentConfigs(configs) {\n // Remove inline data on the component\n for (const prop of inlineProperties) {\n delete configs[prop];\n }\n super.preProcessCurrentConfigs(configs);\n }\n // This function is not meant to be called by any code other than Base#getCurrentConfig().\n getCurrentConfig(options) {\n const\n project = this.project.getCurrentConfig?.(options),\n result = super.getCurrentConfig(options);\n // Force project with inline data\n if (project) {\n result.project = project;\n const { crudManager } = result;\n // Transfer crud store configs to project (mainly fields)\n if (crudManager) {\n for (const store of stores) {\n if (crudManager[store]) {\n project[store] = crudManager[store];\n }\n }\n }\n if (Object.keys(project).length === 0) {\n delete result.project;\n }\n }\n // Store (resource store) data is included in project\n delete result.data;\n // Store data is also included in project\n delete result.store;\n delete result.eventStore;\n delete result.resourceStore;\n // Remove CrudManager, since data will be placed inline\n delete result.crudManager;\n return result;\n }\n get widgetClass() {}\n};\n", "import Base from '../../../Core/Base.js';\nimport DateHelper from '../../../Core/helper/DateHelper.js';\n/**\n * @module Scheduler/view/mixin/Describable\n */\nconst\n arrayify = format => (!format || Array.isArray(format)) ? format : [format],\n pickFormat = (formats, index, defaultFormat) => (formats && formats[index] !== true) ? formats[index] : defaultFormat;\n/**\n * Mixin that provides a consistent method for describing the ranges of time presented by a view. This is currently\n * consumed only by the Calendar widget for describing its child views. This mixin is defined here to facilitate using\n * a Scheduler as a child view of a Calendar.\n *\n * @mixin\n */\nexport default Target => class Describable extends (Target || Base) {\n static $name = 'Describable';\n static configurable = {\n /**\n * A {@link Core.helper.DateHelper} format string to use to create date output for view descriptions.\n * @prp {String}\n * @default\n */\n dateFormat : 'MMMM d, YYYY',\n /**\n * A string used to separate start and end dates in the {@link #config-descriptionFormat}.\n * @prp {String}\n * @default\n */\n dateSeparator : ' - ',\n /**\n * The date format used by the default {@link #config-descriptionRenderer} for rendering the view's description.\n * If this value is `null`, the {@link #config-dateFormat} (and potentially {@link #config-dateSeparator}) will\n * be used.\n *\n * For views that can span a range of dates, this can be a 2-item array with the following interpretation:\n *\n * - `descriptionFormat[0]` is either a date format string or `true` (to use {@link #config-dateFormat}). The\n * result of formatting the `startDate` with this format specification is used when the formatting both the\n * `startDate` and `endDate` with this specification produces the same result. For example, a week view\n * displays only the month and year components of the date, so this will be used unless the end of the week\n * crosses into the next month.\n *\n * - `descriptionFormat[1]` is used with {@link Core.helper.DateHelper#function-formatRange-static} when the\n * `startDate` and `endDate` format differently using `descriptionFormat[0]` (as described above). This one\n * format string produces a result for both dates. If this value is `true`, the {@link #config-dateFormat} and\n * {@link #config-dateSeparator} are combined to produce the range format.\n *\n * @prp {String|String[]|Boolean[]}\n * @default\n */\n descriptionFormat : null,\n /**\n * A function that provides the textual description for this view. If provided, this function overrides the\n * {@link #config-descriptionFormat}.\n *\n * ```javascript\n * descriptionRenderer() {\n * const\n * eventsInView = this.eventStore.records.filter(\n * eventRec => DateHelper.intersectSpans(\n * this.startDate, this.endDate,\n * eventRec.startDate, eventRec.endDate)).length,\n * sd = DateHelper.format(this.startDate, 'DD/MM/YYY'),\n * ed = DateHelper.format(this.endDate, 'DD/MM/YYY');\n *\n * return `${sd} - ${ed}, ${eventsInView} event${eventsInView === 1 ? '' : 's'}`;\n * }\n * ```\n * @config {Function} descriptionRenderer\n * @param {Core.widget.Widget} view The active view in case the function is in another scope.\n * @returns {String} Description string\n */\n descriptionRenderer : null\n };\n /**\n * Returns the date or ranges of included dates as an array. If there is only one significant date, the array will\n * have only one element. Otherwise, a range of dates is returned as a two-element array with `[0]` being the\n * `startDate` and `[1]` the `lastDate`.\n * @member {Date[]}\n * @internal\n */\n get dateBounds() {\n return [this.date];\n }\n /**\n * The textual description generated by the {@link #config-descriptionRenderer} if present, or by the\n * view's date (or date *range* if it has a range) and the {@link #config-descriptionFormat}.\n * @property {String}\n * @readonly\n */\n get description() {\n const\n me = this,\n { descriptionRenderer } = me;\n return descriptionRenderer ? me.callback(descriptionRenderer, me, [me]) : me.formattedDescription;\n }\n get formattedDescription() {\n const\n me = this,\n { dateBounds, dateFormat } = me,\n descriptionFormat = me.descriptionFormat ?? arrayify(me.defaultDescriptionFormat),\n format0 = pickFormat(descriptionFormat, 0, dateFormat),\n end = dateBounds.length > 1 && descriptionFormat?.length > 1 && (\n DateHelper.format(dateBounds[0], format0) !== DateHelper.format(dateBounds[1], format0)\n );\n // Format the startDate and endDate using the first format\n let ret = DateHelper.format(dateBounds[0], format0);\n if (end) {\n // The endDate renders a different description, and we have a range format.\n ret = DateHelper.formatRange(dateBounds,\n pickFormat(descriptionFormat, 1, `S${dateFormat}${me.dateSeparator}E${dateFormat}`));\n }\n return ret;\n }\n changeDescriptionFormat(format) {\n return arrayify(format);\n }\n get widgetClass() {} // no b-describable class\n};\n", "import Base from '../../../Core/Base.js';\n/**\n * @module Scheduler/view/mixin/SchedulerDom\n */\n/**\n * Mixin with EventModel and ResourceModel <-> HTMLElement mapping functions\n *\n * @mixin\n */\nexport default Target => class SchedulerDom extends (Target || Base) {\n static get $name() {\n return 'SchedulerDom';\n }\n //region Get\n /**\n * Returns a single HTMLElement representing an event record assigned to a specific resource.\n * @param {Scheduler.model.AssignmentModel} assignmentRecord An assignment record\n * @returns {HTMLElement} The element representing the event record\n * @category DOM\n */\n getElementFromAssignmentRecord(assignmentRecord, returnWrapper = false, checkReleased = false) {\n if (this.isPainted && assignmentRecord) {\n let wrapper = this.foregroundCanvas.syncIdMap?.[assignmentRecord.id];\n // When using links, the original might not be rendered but a link might\n if (!wrapper && assignmentRecord.resource?.hasLinks) {\n for (const link of assignmentRecord.resource.$links) {\n wrapper = this.foregroundCanvas.syncIdMap?.[`${assignmentRecord.id}_${link.id}`];\n if (!wrapper) {\n if (checkReleased) {\n // When event is released, it needs to retrieve it from releasedIdMap\n wrapper = this.foregroundCanvas.releasedIdMap?.[`${assignmentRecord.id}_${link.id}`];\n if (wrapper) {\n break;\n }\n }\n }\n else {\n break;\n }\n }\n }\n // When event is released, it needs to retrieve it from releasedIdMap\n if (!wrapper && checkReleased) {\n wrapper = this.foregroundCanvas.releasedIdMap?.[assignmentRecord.id];\n }\n // Wrapper won't have syncIdMap when saving dragcreated event from editor\n return returnWrapper ? wrapper : wrapper?.syncIdMap?.event;\n }\n return null;\n }\n /**\n * Returns a single HTMLElement representing an event record assigned to a specific resource.\n * @param {Scheduler.model.EventModel} eventRecord An event record\n * @param {Scheduler.model.ResourceModel} resourceRecord A resource record\n * @returns {HTMLElement} The element representing the event record\n * @category DOM\n */\n getElementFromEventRecord(eventRecord, resourceRecord = eventRecord.resources?.[0], returnWrapper = false, checkReleased = false) {\n if (eventRecord.isResourceTimeRange) {\n const wrapper = this.foregroundCanvas.syncIdMap?.[eventRecord.domId];\n return returnWrapper ? wrapper : wrapper?.syncIdMap.event;\n }\n const assignmentRecord = this.assignmentStore.getAssignmentForEventAndResource(eventRecord, resourceRecord);\n return this.getElementFromAssignmentRecord(assignmentRecord, returnWrapper, checkReleased);\n }\n /**\n * Returns all the HTMLElements representing an event record.\n *\n * @param {Scheduler.model.EventModel} eventRecord An event record\n * @param {Scheduler.model.ResourceModel} [resourceRecord] A resource record\n *\n * @returns {HTMLElement[]} The element(s) representing the event record\n * @category DOM\n */\n getElementsFromEventRecord(eventRecord, resourceRecord, returnWrapper = false, checkReleased = false) {\n // Single event instance, as array\n if (resourceRecord) {\n return [this.getElementFromEventRecord(eventRecord, resourceRecord, returnWrapper, checkReleased)];\n }\n // All instances\n else {\n return eventRecord.resources.reduce((result, resourceRecord) => {\n const el = this.getElementFromEventRecord(eventRecord, resourceRecord, returnWrapper, checkReleased);\n el && result.push(el);\n return result;\n }, []);\n }\n }\n //endregion\n //region Resolve\n /**\n * Resolves the resource based on a dom element or event. In vertical mode, if resolving from an element higher up in\n * the hierarchy than event elements, then it is required to supply an coordinates since resources are virtual\n * columns.\n * @param {HTMLElement|Event} elementOrEvent The HTML element or DOM event to resolve a resource from\n * @param {Number[]} [xy] X and Y coordinates, required in some cases in vertical mode, disregarded in horizontal\n * @returns {Scheduler.model.ResourceModel} The resource corresponding to the element, or null if not found.\n * @category DOM\n */\n resolveResourceRecord(elementOrEvent, xy) {\n return this.currentOrientation.resolveRowRecord(elementOrEvent, xy);\n }\n /**\n * Product agnostic method which yields the {@link Scheduler.model.ResourceModel} record which underpins the row which\n * encapsulates the passed element. The element can be a grid cell, or an event element, and the result\n * will be a {@link Scheduler.model.ResourceModel}\n * @param {HTMLElement|Event} elementOrEvent The HTML element or DOM event to resolve a record from\n * @returns {Scheduler.model.ResourceModel} The resource corresponding to the element, or null if not found.\n * @category DOM\n */\n resolveRowRecord(elementOrEvent) {\n return this.resolveResourceRecord(elementOrEvent);\n }\n /**\n * Returns the event record for a DOM element\n * @param {HTMLElement|Event} elementOrEvent The DOM node to lookup\n * @returns {Scheduler.model.EventModel} The event record\n * @category DOM\n */\n resolveEventRecord(elementOrEvent) {\n if (elementOrEvent instanceof Event) {\n elementOrEvent = elementOrEvent.target;\n }\n const element = elementOrEvent?.closest(this.eventSelector);\n if (element) {\n if (element.dataset.eventId) {\n return this.eventStore.getById(element.dataset.eventId);\n }\n if (element.dataset.assignmentId) {\n return this.assignmentStore.getById(element.dataset.assignmentId).event;\n }\n }\n return null;\n }\n // Used by shared features to resolve an event or task\n resolveTimeSpanRecord(element) {\n return this.resolveEventRecord(element);\n }\n /**\n * Returns an assignment record for a DOM element\n * @param {HTMLElement} element The DOM node to lookup\n * @privateparam {Boolean} allowReleased Whether to allow resolving from a released event\n * @returns {Scheduler.model.AssignmentModel} The assignment record\n * @category DOM\n */\n resolveAssignmentRecord(element, allowReleased = false) {\n const\n eventElement = element.closest(allowReleased ? '[data-assignment-id][data-event-id]' : this.eventSelector),\n assignmentRecord = eventElement && this.assignmentStore.getById(eventElement.dataset.assignmentId),\n eventRecord = eventElement && this.eventStore.getById(eventElement.dataset.eventId);\n // When resolving a recurring event, we might be resolving an occurrence\n return this.assignmentStore.getOccurrence(assignmentRecord, eventRecord);\n }\n //endregion\n // Decide if a record is inside a collapsed tree node, or inside a collapsed group (using grouping feature)\n isRowVisible(resourceRecord) {\n // records in collapsed groups/branches etc. are removed from processedRecords\n return this.store.indexOf(resourceRecord) >= 0;\n }\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "import Base from '../../../Core/Base.js';\n/**\n * @module Scheduler/view/mixin/SchedulerDomEvents\n */\n/**\n * Mixin that handles dom events (click etc) for scheduler and rendered events.\n *\n * @mixin\n */\nexport default Target => class SchedulerDomEvents extends (Target || Base) {\n static get $name() {\n return 'SchedulerDomEvents';\n }\n //region Events\n /**\n * Triggered when user mousedowns over an empty area in the schedule.\n * @event scheduleMouseDown\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Date} date Date at mouse position\n * @param {Date} tickStartDate The start date of the current time axis tick\n * @param {Date} tickEndDate The end date of the current time axis tick\n * @param {Grid.row.Row} row Row under the mouse (in horizontal mode only)\n * @param {Number} index Resource index\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record\n * @param {MouseEvent} event Browser event\n */\n /**\n * Triggered when mouse enters an empty area in the schedule.\n * @event scheduleMouseEnter\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Date} date Date at mouse position\n * @param {Date} tickStartDate The start date of the current time axis tick\n * @param {Date} tickEndDate The end date of the current time axis tick\n * @param {Grid.row.Row} row Row under the mouse (in horizontal mode only)\n * @param {Number} index Resource index\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record\n * @param {MouseEvent} event Browser event\n */\n /**\n * Triggered when mouse leaves an empty area in the schedule.\n * @event scheduleMouseLeave\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {MouseEvent} event Browser event\n */\n /**\n * Triggered when user mouseups over an empty area in the schedule.\n * @event scheduleMouseUp\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Date} date Date at mouse position\n * @param {Date} tickStartDate The start date of the current time axis tick\n * @param {Date} tickEndDate The end date of the current time axis tick\n * @param {Grid.row.Row} row Row under the mouse (in horizontal mode only)\n * @param {Number} index Resource index\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record\n * @param {MouseEvent} event Browser event\n */\n /**\n * Triggered when user moves mouse over an empty area in the schedule.\n * @event scheduleMouseMove\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Date} date Date at mouse position\n * @param {Scheduler.model.TimeSpan} tick A record which encapsulates the time axis tick clicked on.\n * @param {Number} tickIndex The index of the time axis tick clicked on.\n * @param {Date} tickStartDate The start date of the current time axis tick\n * @param {Date} tickEndDate The end date of the current time axis tick\n * @param {Grid.row.Row} row Row under the mouse (in horizontal mode only)\n * @param {Number} index Resource index\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record\n * @param {MouseEvent} event Browser event\n */\n /**\n * Triggered when user clicks an empty area in the schedule.\n * @event scheduleClick\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Date} date Date at mouse position\n * @param {Scheduler.model.TimeSpan} tick A record which encapsulates the time axis tick clicked on.\n * @param {Number} tickIndex The index of the time axis tick clicked on.\n * @param {Date} tickStartDate The start date of the current time axis tick\n * @param {Date} tickEndDate The end date of the current time axis tick\n * @param {Grid.row.Row} row Row under the mouse (in horizontal mode only)\n * @param {Number} index Resource index\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record\n * @param {MouseEvent} event Browser event\n */\n /**\n * Triggered when user double-clicks an empty area in the schedule.\n * @event scheduleDblClick\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Date} date Date at mouse position\n * @param {Scheduler.model.TimeSpan} tick A record which encapsulates the time axis tick clicked on.\n * @param {Number} tickIndex The index of the time axis tick clicked on.\n * @param {Date} tickStartDate The start date of the current time axis tick\n * @param {Date} tickEndDate The end date of the current time axis tick\n * @param {Grid.row.Row} row Row under the mouse (in horizontal mode only)\n * @param {Number} index Index of double-clicked resource\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record\n * @param {MouseEvent} event Browser event\n */\n /**\n * Triggered when user right-clicks an empty area in the schedule.\n * @event scheduleContextMenu\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Date} date Date at mouse position\n * @param {Scheduler.model.TimeSpan} tick A record which encapsulates the time axis tick clicked on.\n * @param {Number} tickIndex The index of the time axis tick clicked on.\n * @param {Date} tickStartDate The start date of the current time axis tick\n * @param {Date} tickEndDate The end date of the current time axis tick\n * @param {Grid.row.Row} row Row under the mouse (in horizontal mode only)\n * @param {Number} index Resource index\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record\n * @param {MouseEvent} event Browser event\n */\n /**\n * Triggered for mouse down on an event.\n * @event eventMouseDown\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.model.EventModel} eventRecord Event record\n * @param {Scheduler.model.AssignmentModel} assignmentRecord Assignment record\n * @param {MouseEvent} event Browser event\n */\n /**\n * Triggered for mouse up on an event.\n * @event eventMouseUp\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.model.EventModel} eventRecord Event record\n * @param {Scheduler.model.AssignmentModel} assignmentRecord Assignment record\n * @param {MouseEvent} event Browser event\n */\n /**\n * Triggered for click on an event.\n * @event eventClick\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.model.EventModel} eventRecord Event record\n * @param {Scheduler.model.AssignmentModel} assignmentRecord Assignment record\n * @param {MouseEvent} event Browser event\n */\n /**\n * Triggered for double-click on an event.\n * @event eventDblClick\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.model.EventModel} eventRecord Event record\n * @param {Scheduler.model.AssignmentModel} assignmentRecord Assignment record\n * @param {MouseEvent} event Browser event\n */\n /**\n * Triggered for right-click on an event.\n * @event eventContextMenu\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.model.EventModel} eventRecord Event record\n * @param {Scheduler.model.AssignmentModel} assignmentRecord Assignment record\n * @param {MouseEvent} event Browser event\n */\n /**\n * Triggered when the mouse enters an event bar.\n * @event eventMouseEnter\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.model.EventModel} eventRecord Event record\n * @param {Scheduler.model.AssignmentModel} assignmentRecord Assignment record\n * @param {MouseEvent} event Browser event\n */\n /**\n * Triggered when the mouse leaves an event bar.\n * @event eventMouseLeave\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.model.EventModel} eventRecord Event record\n * @param {Scheduler.model.AssignmentModel} assignmentRecord Assignment record\n * @param {MouseEvent} event Browser event\n */\n /**\n * Triggered for mouse over events when moving into and within an event bar.\n *\n * Note that `mouseover` events bubble, therefore this event will fire while moving from\n * element to element *within* an event bar.\n *\n * _If only an event when moving into the event bar is required, use the {@link #event-eventMouseEnter} event._\n * @event eventMouseOver\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.model.EventModel} eventRecord Event record\n * @param {Scheduler.model.AssignmentModel} assignmentRecord Assignment record\n * @param {MouseEvent} event Browser event\n */\n /**\n * Triggered for mouse out events within and when moving out of an event bar.\n *\n * Note that `mouseout` events bubble, therefore this event will fire while moving from\n * element to element *within* an event bar.\n *\n * _If only an event when moving out of the event bar is required, use the {@link #event-eventMouseLeave} event._\n * @event eventMouseOut\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.model.EventModel} eventRecord Event record\n * @param {Scheduler.model.AssignmentModel} assignmentRecord Assignment record\n * @param {MouseEvent} event Browser event\n */\n //endregion\n //region Event handling\n getTimeSpanMouseEventParams(eventElement, event) {\n // May have hovered a record being removed / faded out\n const eventRecord = this.resolveEventRecord(eventElement);\n return eventRecord && {\n eventRecord,\n resourceRecord : this.resolveResourceRecord(eventElement),\n assignmentRecord : this.resolveAssignmentRecord(eventElement),\n eventElement,\n event\n };\n }\n getScheduleMouseEventParams(cellData, event) {\n const resourceRecord = this.isVertical ? this.resolveResourceRecord(event) : this.store.getById(cellData.id);\n return { resourceRecord };\n }\n /**\n * Relays keydown events as eventkeydown if we have a selected task.\n * @private\n */\n onElementKeyDown(event) {\n const\n result = super.onElementKeyDown(event),\n me = this;\n if (me.selectedEvents.length) {\n me.trigger(me.scheduledEventName + 'KeyDown', {\n eventRecords : me.selectedEvents,\n assignmentRecords : me.selectedAssignments,\n event,\n eventRecord : me.selectedEvents,\n assignmentRecord : me.selectedAssignments\n });\n }\n return result;\n }\n /**\n * Relays keyup events as eventkeyup if we have a selected task.\n * @private\n */\n onElementKeyUp(event) {\n super.onElementKeyUp(event);\n const me = this;\n if (me.selectedEvents.length) {\n me.trigger(me.scheduledEventName + 'KeyUp', {\n eventRecords : me.selectedEvents,\n assignmentRecords : me.selectedAssignments,\n event,\n eventRecord : me.selectedEvents,\n assignmentRecord : me.selectedAssignments\n });\n }\n }\n //endregion\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "import Base from '../../Core/Base.js';\n/**\n * @module Scheduler/eventlayout/HorizontalLayout\n */\n/**\n * Base class for horizontal layouts (HorizontalLayoutPack and HorizontalLayoutStack). Should not be used directly,\n * instead specify {@link Scheduler.view.mixin.SchedulerEventRendering#config-eventLayout} in Scheduler config (stack,\n * pack or none):\n *\n * ```javascript\n * let scheduler = new Scheduler({\n * eventLayout: 'stack'\n * });\n * ```\n *\n * @abstract\n * @private\n */\nexport default class HorizontalLayout extends Base {\n static get defaultConfig() {\n return {\n nbrOfBandsByResource : {},\n bandIndexToPxConvertFn : null,\n bandIndexToPxConvertThisObj : null\n };\n }\n clearCache(resource) {\n if (resource) {\n delete this.nbrOfBandsByResource[resource.id];\n }\n else {\n this.nbrOfBandsByResource = {};\n }\n }\n /**\n * This method performs layout on an array of event render data and returns amount of _bands_. Band is a multiplier of a\n * configured {@link Scheduler.view.Scheduler#config-rowHeight} to calculate total row height required to fit all\n * events.\n * This method should not be used directly, it is called by the Scheduler during the row rendering process.\n * @param {EventRenderData[]} events Unordered array of event render data, sorting may be required\n * @param {Scheduler.model.ResourceModel} resource The resource for which the events are being laid out.\n * @returns {Number}\n */\n applyLayout(events, resource) {\n // Return number of bands required\n return this.nbrOfBandsByResource[resource.id] = this.layoutEventsInBands(events, resource);\n }\n /**\n * This method iterates over events and calculates top position for each of them. Default layouts calculate\n * positions to avoid events overlapping horizontally (except for the 'none' layout). Pack layout will squeeze events to a single\n * row by reducing their height, Stack layout will increase the row height and keep event height intact.\n * This method should not be used directly, it is called by the Scheduler during the row rendering process.\n * @param {EventRenderData[]} events Unordered array of event render data, sorting may be required\n * @param {Scheduler.model.ResourceModel} resource The resource for which the events are being laid out.\n */\n layoutEventsInBands(events, resource) {\n throw new Error('Implement in subclass');\n }\n}\nHorizontalLayout._$name = 'HorizontalLayout';", "import HorizontalLayout from './HorizontalLayout.js';\n/**\n * @module Scheduler/eventlayout/HorizontalLayoutStack\n */\n/**\n * Handles layout of events within a row (resource) in horizontal mode. Stacks events, increasing row height when to fit\n * all overlapping events.\n *\n * This layout is used by default in horizontal mode.\n *\n * @extends Scheduler/eventlayout/HorizontalLayout\n * @private\n */\nexport default class HorizontalLayoutStack extends HorizontalLayout {\n static get $name() {\n return 'HorizontalLayoutStack';\n }\n static get configurable() {\n return {\n type : 'stack'\n };\n }\n // Input: Array of event layout data\n // heightRun is used when pre-calculating row heights, taking a cheaper path\n layoutEventsInBands(events, resource, heightRun = false) {\n let verticalPosition = 0;\n do {\n let eventIndex = 0,\n event = events[0];\n while (event) {\n if (!heightRun) {\n // Apply band height to the event cfg\n event.top = this.bandIndexToPxConvertFn.call(\n this.bandIndexToPxConvertThisObj || this,\n verticalPosition,\n event.eventRecord,\n event.resourceRecord\n );\n }\n // Remove it from the array and continue searching\n events.splice(eventIndex, 1);\n eventIndex = this.findClosestSuccessor(event, events);\n event = events[eventIndex];\n }\n verticalPosition++;\n } while (events.length > 0);\n // Done!\n return verticalPosition;\n }\n findClosestSuccessor(eventRenderData, events) {\n const\n { endMS, group } = eventRenderData,\n isMilestone = eventRenderData.eventRecord?.duration === 0;\n let minGap = Infinity,\n closest,\n gap,\n event,\n eventIsMilestone;\n for (let i = 0, l = events.length; i < l; i++) {\n event = events[i];\n gap = event.startMS - endMS;\n eventIsMilestone = event.endMS - event.startMS === 0 && !event.eventRecord?.meta.isDragCreating;\n if (\n gap >= 0 && gap < minGap &&\n // Two milestones should not overlap\n (gap > 0 || !eventIsMilestone || !isMilestone) &&\n // Milestone at events endDate goes on next band\n !(gap === 0 && eventIsMilestone && !isMilestone)\n ) {\n // Events are sorted by group, so when we find first event with a different group, we can stop iteration\n if (this.grouped && group !== event.group) {\n break;\n }\n closest = i;\n minGap = gap;\n }\n }\n return closest;\n }\n}\nHorizontalLayoutStack._$name = 'HorizontalLayoutStack';", "import Base from '../../Core/Base.js';\n/**\n * @module Scheduler/eventlayout/PackMixin\n */\nconst rangesIntersect = (range1Start, range1End, range2Start, range2End) => {\n return (range2Start <= range1Start && range1Start < range2End) ||\n (range1Start <= range2Start && range2Start < range1End);\n};\n/**\n * Mixin holding functionality shared between HorizontalLayoutPack and VerticalLayout.\n *\n * @mixin\n * @private\n */\nexport default Target => class PackMixin extends (Target || Base) {\n static get $name() {\n return 'PackMixin';\n }\n static get defaultConfig() {\n return {\n coordProp : 'top',\n sizeProp : 'height',\n inBandCoordProp : 'inBandTop',\n inBandSizeProp : 'inBandHeight'\n };\n }\n isSameGroup(a, b) {\n return this.grouped ? a.group === b.group : true;\n }\n // Packs the events to consume as little space as possible\n packEventsInBands(events, applyClusterFn) {\n const\n me = this,\n { coordProp, sizeProp } = me;\n let slot,\n firstInCluster,\n cluster,\n j;\n for (let i = 0, l = events.length; i < l; i++) {\n firstInCluster = events[i];\n slot = me.findStartSlot(events, firstInCluster);\n cluster = me.getCluster(events, i);\n if (cluster.length > 1) {\n firstInCluster[coordProp] = slot.start;\n firstInCluster[sizeProp] = slot.end - slot.start;\n // If there are multiple slots, and events in the cluster have multiple start dates, group all same-start events into first slot\n j = 1;\n while (j < (cluster.length - 1) && cluster[j + 1].start - firstInCluster.start === 0) {\n j++;\n }\n // See if there's more than 1 slot available for this cluster, if so - first group in cluster consumes the entire first slot\n const nextSlot = me.findStartSlot(events, cluster[j]);\n if (nextSlot && nextSlot.start < 0.8) {\n cluster.length = j;\n }\n }\n const\n clusterSize = cluster.length,\n slotSize = (slot.end - slot.start) / clusterSize;\n // Apply fraction values\n for (j = 0; j < clusterSize; j++) {\n applyClusterFn(cluster[j], j, slot, slotSize);\n }\n i += clusterSize - 1;\n }\n return 1;\n }\n findStartSlot(events, event) {\n const\n {\n inBandSizeProp,\n inBandCoordProp,\n coordProp,\n sizeProp\n } = this,\n priorOverlappers = this.getPriorOverlappingEvents(events, event);\n let i;\n if (priorOverlappers.length === 0) {\n return {\n start : 0,\n end : 1\n };\n }\n for (i = 0; i < priorOverlappers.length; i++) {\n const\n item = priorOverlappers[i],\n COORD_PROP = inBandCoordProp in item ? inBandCoordProp : coordProp,\n SIZE_PROP = inBandSizeProp in item ? inBandSizeProp : sizeProp;\n if (i === 0 && item[COORD_PROP] > 0) {\n return {\n start : 0,\n end : item[COORD_PROP]\n };\n }\n else {\n if (item[COORD_PROP] + item[SIZE_PROP] < (i < priorOverlappers.length - 1 ? priorOverlappers[i + 1][COORD_PROP] : 1)) {\n return {\n start : item[COORD_PROP] + item[SIZE_PROP],\n end : i < priorOverlappers.length - 1 ? priorOverlappers[i + 1][COORD_PROP] : 1\n };\n }\n }\n }\n return false;\n }\n getPriorOverlappingEvents(events, event) {\n const\n { startMS, endMS } = event,\n overlappers = [];\n for (let i = 0, l = events.indexOf(event); i < l; i++) {\n const item = events[i];\n if (this.isSameGroup(item, event) && rangesIntersect(startMS, endMS, item.startMS, item.endMS)) {\n overlappers.push(item);\n }\n }\n overlappers.sort(this.sortOverlappers.bind(this));\n return overlappers;\n }\n sortOverlappers(e1, e2) {\n const { coordProp } = this;\n return e1[coordProp] - e2[coordProp];\n }\n getCluster(events, startIndex) {\n const\n startEvent = events[startIndex],\n result = [startEvent];\n if (startIndex >= events.length - 1) {\n return result;\n }\n let { startMS, endMS } = startEvent;\n for (let i = startIndex + 1, l = events.length; i < l; i++) {\n const item = events[i];\n if (!this.isSameGroup(item, startEvent) || !rangesIntersect(startMS, endMS, item.startMS, item.endMS)) {\n break;\n }\n result.push(item);\n startMS = Math.max(startMS, item.startMS);\n endMS = Math.min(item.endMS, endMS);\n }\n return result;\n }\n};\n", "import HorizontalLayout from './HorizontalLayout.js';\nimport PackMixin from './PackMixin.js';\n/**\n * @module Scheduler/eventlayout/HorizontalLayoutPack\n */\n/**\n * Handles layout of events within a row (resource) in horizontal mode. Packs events (adjusts their height) to fit\n * available row height\n *\n * @extends Scheduler/eventlayout/HorizontalLayout\n * @mixes Scheduler/eventlayout/PackMixin\n * @private\n */\nexport default class HorizontalLayoutPack extends HorizontalLayout.mixin(PackMixin) {\n static get $name() {\n return 'HorizontalLayoutPack';\n }\n static get configurable() {\n return {\n type : 'pack'\n };\n }\n // Packs the events to consume as little space as possible\n layoutEventsInBands(events) {\n const result = this.packEventsInBands(events, (event, j, slot, slotSize) => {\n event.height = slotSize;\n event.top = slot.start + (j * slotSize);\n });\n events.forEach(event => {\n Object.assign(\n event,\n this.bandIndexToPxConvertFn.call(\n this.bandIndexToPxConvertThisObj || this,\n event.top,\n event.height,\n event.eventRecord,\n event.resourceRecord\n )\n );\n });\n return result;\n }\n}\nHorizontalLayoutPack._$name = 'HorizontalLayoutPack';", "import Base from '../../../Core/Base.js';\n/**\n * @module Scheduler/view/mixin/SchedulerResourceRendering\n */\n/**\n * Configs and functions used for resource rendering\n * and by the {@link Scheduler/column/ResourceInfoColumn} class.\n *\n * @mixin\n */\nexport default Target => class SchedulerResourceRendering extends (Target || Base) {\n static $name = 'SchedulerResourceRendering';\n //region Default config\n static configurable = {\n /**\n * Control how much space to leave between the first event/last event and the resources edge (top/bottom\n * margin within the resource row in horizontal mode, left/right margin within the resource column in\n * vertical mode), in px. Defaults to the value of {@link Scheduler.view.Scheduler#config-barMargin}.\n *\n * Can be configured per resource by setting {@link Scheduler.model.ResourceModel#field-resourceMargin\n * resource.resourceMargin}.\n *\n * It's also possible to set different values for top/left and bottom/right\n * by assigning an object to `resourceMargin` with `start` (margin top in horizontal mode,\n * margin left in vertical mode) and `end` (margin bottom / margin right) properties:\n * ```javascript\n * scheduler = new Scheduler({\n * resourceMargin : {\n * start : 15,\n * end : 1\n * }\n * });\n * ```\n *\n * @prp {Number|ResourceMarginConfig}\n * @category Scheduled events\n */\n resourceMargin : null,\n /**\n * A config object used to configure the resource columns in vertical mode.\n * See {@link Scheduler.view.ResourceHeader} for more details on available properties.\n *\n * ```javascript\n * new Scheduler({\n * resourceColumns : {\n * columnWidth : 100,\n * headerRenderer : ({ resourceRecord }) => `${resourceRecord.id} - ${resourceRecord.name}`\n * }\n * })\n * ```\n * @config {ResourceHeaderConfig}\n * @category Resources\n */\n resourceColumns : null,\n /**\n * Path to load resource images from. Used by the resource header in vertical mode and the\n * {@link Scheduler.column.ResourceInfoColumn} in horizontal mode. Set this to display miniature\n * images for each resource using their `image` or `imageUrl` fields.\n *\n * * `image` represents image name inside the specified `resourceImagePath`,\n * * `imageUrl` represents fully qualified image URL.\n *\n * If set and a resource has no `imageUrl` or `image` specified it will try show miniature using\n * the resource's name with {@link #config-resourceImageExtension} appended.\n *\n * **NOTE**: The path should end with a `/`:\n *\n * ```\n * new Scheduler({\n * resourceImagePath : 'images/resources/'\n * });\n * ```\n * @config {String}\n * @category Resources\n */\n resourceImagePath : null,\n /**\n * Generic resource image, used when provided `imageUrl` or `image` fields or path calculated from resource\n * name are all invalid. If left blank, resource name initials will be shown when no image can be loaded.\n * @default\n * @config {String}\n * @category Resources\n */\n defaultResourceImageName : null,\n /**\n * Resource image extension, used when creating image path from resource name.\n * @default\n * @config {String}\n * @category Resources\n */\n resourceImageExtension : '.jpg'\n };\n //endregion\n //region Resource header/columns\n // NOTE: The configs below are initially applied to the resource header in `TimeAxisColumn#set mode`\n /**\n * Use it to manipulate resource column properties at runtime.\n * @property {Scheduler.view.ResourceHeader}\n * @readonly\n */\n get resourceColumns() {\n return this.timeAxisColumn?.resourceColumns || this._resourceColumns;\n }\n /**\n * Get resource column width. Only applies to vertical mode. To set it, assign to\n * `scheduler.resourceColumns.columnWidth`.\n * @property {Number}\n * @readonly\n */\n get resourceColumnWidth() {\n return this.resourceColumns?.columnWidth || null;\n }\n //endregion\n //region Event rendering\n // Returns a resource specific resourceMargin, falling back to Schedulers setting\n // This fn could be made public to allow hooking it as an alternative to only setting this in data\n getResourceMarginObject(resourceRecord) {\n if (resourceRecord?.resourceMargin) {\n const margin = resourceRecord?.resourceMargin ?? this.resourceMargin;\n if (typeof margin === 'number') {\n return {\n start : margin,\n end : margin,\n total : margin * 2\n };\n }\n else {\n margin.total = margin.start + margin.end;\n return margin;\n }\n }\n else {\n return this.resourceMarginObject;\n }\n }\n // Returns a resource specific barMargin, falling back to Schedulers setting\n // This fn could be made public to allow hooking it as an alternative to only setting this in data\n getBarMargin(resourceRecord) {\n return resourceRecord?.barMargin ?? this.barMargin;\n }\n // Returns a resource specific rowHeight, falling back to Schedulers setting\n // Prio order: Height from record, configured height\n // This fn could be made public to allow hooking it as an alternative to only setting this in data\n getResourceHeight(resourceRecord) {\n return resourceRecord.rowHeight ?? (this.isHorizontal ? this.rowHeight : this.getResourceWidth(resourceRecord));\n }\n getResourceWidth(resourceRecord) {\n return resourceRecord.instanceMeta(this).columnWidth ?? this.resourceColumnWidth;\n }\n // Similar to getResourceHeight(), but for usage later in the process to take height set by renderers into account.\n // Cant be used earlier in the process because then the row will grow\n // Prio order: Height requested by renderer, height from record, configured height\n getAppliedResourceHeight(resourceRecord) {\n const row = this.getRowById(resourceRecord);\n return row?.maxRequestedHeight ?? this.getResourceHeight(resourceRecord);\n }\n // Combined convenience getter for destructuring on calling side\n // Second arg only passed for nested events, handled by NestedEvent feature\n getResourceLayoutSettings(resourceRecord, parentEventRecord = null) {\n const\n resourceMarginObject = this.getResourceMarginObject(resourceRecord, parentEventRecord),\n rowHeight = this.getAppliedResourceHeight(resourceRecord, parentEventRecord);\n return {\n barMargin : this.getBarMargin(resourceRecord, parentEventRecord),\n contentHeight : Math.max(rowHeight - resourceMarginObject.total, 1),\n rowHeight,\n resourceMarginObject\n };\n }\n //endregion\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "import Base from '../../../Core/Base.js';\nimport DomClassList from '../../../Core/helper/util/DomClassList.js';\nimport HorizontalLayoutStack from '../../eventlayout/HorizontalLayoutStack.js';\nimport HorizontalLayoutPack from '../../eventlayout/HorizontalLayoutPack.js';\nimport BrowserHelper from '../../../Core/helper/BrowserHelper.js';\nimport DomHelper from '../../../Core/helper/DomHelper.js';\nimport EventHelper from '../../../Core/helper/EventHelper.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\nimport StringHelper from '../../../Core/helper/StringHelper.js';\nimport VersionHelper from '../../../Core/helper/VersionHelper.js';\nimport Rectangle from '../../../Core/helper/util/Rectangle.js';\nimport SchedulerResourceRendering from './SchedulerResourceRendering.js';\n/**\n * @module Scheduler/view/mixin/SchedulerEventRendering\n */\n/**\n * Layout data object used to lay out an event record.\n * @typedef {Object} EventRenderData\n * @property {Scheduler.model.EventModel} eventRecord Event instance\n * @property {Scheduler.model.ResourceModel} resourceRecord Assigned resource\n * @property {Scheduler.model.AssignmentModel} assignmentRecord Assignment instance\n * @property {Number} startMS Event start date time in milliseconds\n * @property {Number} endMS Event end date in milliseconds\n * @property {Number} height Calculated event element height\n * @property {Number} width Calculated event element width\n * @property {Number} top Calculated event element top position in the row (or column)\n * @property {Number} left Calculated event element left position in the row (or column)\n */\n/**\n * Functions to handle event rendering (EventModel -> dom elements).\n *\n * @mixes Scheduler/view/mixin/SchedulerResourceRendering\n * @mixin\n */\nexport default Target => class SchedulerEventRendering extends SchedulerResourceRendering(Target || Base) {\n static get $name() {\n return 'SchedulerEventRendering';\n }\n //region Default config\n static get configurable() {\n return {\n /**\n * Position of the milestone text:\n * * 'inside' - for short 1-char text displayed inside the diamond, not applicable when using\n * {@link #config-milestoneLayoutMode})\n * * 'outside' - for longer text displayed outside the diamond, but inside it when using\n * {@link #config-milestoneLayoutMode}\n * * 'always-outside' - outside even when combined with {@link #config-milestoneLayoutMode}\n *\n * @prp {'inside'|'outside'|'always-outside'}\n * @default\n * @category Milestones\n */\n milestoneTextPosition : 'outside',\n /**\n * How to align milestones in relation to their startDate. Only applies when using a `milestoneLayoutMode`\n * other than `default`. Valid values are:\n * * start\n * * center (default)\n * * end\n * @prp {'start'|'center'|'end'}\n * @default\n * @category Milestones\n */\n milestoneAlign : 'center',\n /**\n * Factor representing the average char width in pixels used to determine milestone width when configured\n * with `milestoneLayoutMode: 'estimate'`.\n * @prp {Number}\n * @default\n * @category Milestones\n */\n milestoneCharWidth : 10,\n /**\n * How to handle milestones during event layout. How the milestones are displayed when part of the layout\n * are controlled using {@link #config-milestoneTextPosition}.\n *\n * Options are:\n * * default - Milestones do not affect event layout\n * * estimate - Milestone width is estimated by multiplying text length with Scheduler#milestoneCharWidth\n * * data - Milestone width is determined by checking EventModel#milestoneWidth\n * * measure - Milestone width is determined by measuring label width\n * Please note that currently text width is always determined using EventModel#name.\n * Also note that only 'default' is supported by eventStyles line, dashed and minimal.\n * @prp {'default'|'estimate'|'data'|'measure'}\n * @default\n * @category Milestones\n */\n milestoneLayoutMode : 'default',\n /**\n * Defines how to handle overlapping events. Valid values are:\n * - `stack`, adjusts row height (only horizontal)\n * - `pack`, adjusts event height\n * - `mixed`, allows two events to overlap, more packs (only vertical)\n * - `none`, allows events to overlap\n *\n * This config can also accept an object:\n *\n * ```javascript\n * new Scheduler({\n * eventLayout : { type : 'stack' }\n * })\n * ```\n *\n * @prp {'stack'|'pack'|'mixed'|'none'|Object}\n * @default\n * @category Scheduled events\n */\n eventLayout : 'stack',\n /**\n * Override this method to provide a custom sort function to sort any overlapping events. See {@link\n * #config-overlappingEventSorter} for more details.\n *\n * @param {Scheduler.model.EventModel} a First event\n * @param {Scheduler.model.EventModel} b Second event\n * @returns {Number} Return -1 to display `a` above `b`, 1 for `b` above `a`\n * @member {Function} overlappingEventSorter\n * @category Misc\n */\n /**\n * Override this method to provide a custom sort function to sort any overlapping events. This only applies\n * to the horizontal mode, where the order the events are sorted in determines their vertical placement\n * within a resource.\n *\n * By default, overlapping events are laid out based on the start date. If the start date is equal, events\n * with earlier end date go first. And lastly the name of events is taken into account.\n *\n * Here's a sample sort function, sorting on start- and end date. If this function returns -1, then event\n * `a` is placed above event `b`:\n *\n * ```javascript\n * overlappingEventSorter(a, b) {\n *\n * const startA = a.startDate, endA = a.endDate;\n * const startB = b.startDate, endB = b.endDate;\n *\n * const sameStart = (startA - startB === 0);\n *\n * if (sameStart) {\n * return endA > endB ? -1 : 1;\n * } else {\n * return (startA < startB) ? -1 : 1;\n * }\n * }\n * ```\n *\n * NOTE: The algorithms (stack, pack) that lay the events out expects them to be served in chronological\n * order, be sure to first sort by `startDate` to get predictable results.\n *\n * @param {Scheduler.model.EventModel} a First event\n * @param {Scheduler.model.EventModel} b Second event\n * @returns {Number} Return -1 to display `a` above `b`, 1 for `b` above `a`\n * @config {Function}\n * @category Misc\n */\n overlappingEventSorter : null,\n /**\n * Deprecated, to be removed in version 6.0. Replaced by {@link #config-overlappingEventSorter}.\n * @deprecated Since 5.0. Use {@link #config-overlappingEventSorter} instead.\n * @config {Function}\n * @category Misc\n */\n horizontalEventSorterFn : null,\n /**\n * By default, scheduler fade events in on load. Specify `false` to prevent this animation or specify one\n * of the available animation types to use it (`true` equals `'fade-in'`):\n * * fade-in (default)\n * * slide-from-left\n * * slide-from-top\n * ```\n * // Slide events in from the left on load\n * scheduler = new Scheduler({\n * useInitialAnimation : 'slide-from-left'\n * });\n * ```\n * @prp {Boolean|'fade-in'|'slide-from-left'|'slide-from-top'|String}\n * @default\n * @category Misc\n */\n useInitialAnimation : true,\n /**\n * An empty function by default, but provided so that you can override it. This function is called each time\n * an event is rendered into the schedule to render the contents of the event. It's called with the event,\n * its resource and a `renderData` object which allows you to populate data placeholders inside the event\n * template. **IMPORTANT** You should never modify any data on the EventModel inside this method.\n *\n * By default, the DOM markup of an event bar includes placeholders for 'cls' and 'style'. The cls property\n * is a {@link Core.helper.util.DomClassList} which will be added to the event element. The style property\n * is an inline style declaration for the event element.\n *\n * IMPORTANT: When returning content, be sure to consider how that content should be encoded to avoid XSS\n * (Cross-Site Scripting) attacks. This is especially important when including user-controlled data such as\n * the event's `name`. The function {@link Core.helper.StringHelper#function-encodeHtml-static} as well as\n * {@link Core.helper.StringHelper#function-xss-static} can be helpful in these cases.\n *\n * ```javascript\n * eventRenderer({ eventRecord, resourceRecord, renderData }) {\n * renderData.style = 'color:white'; // You can use inline styles too.\n *\n * // Property names with truthy values are added to the resulting elements CSS class.\n * renderData.cls.isImportant = this.isImportant(eventRecord);\n * renderData.cls.isModified = eventRecord.isModified;\n *\n * // Remove a class name by setting the property to false\n * renderData.cls[scheduler.generatedIdCls] = false;\n *\n * // Or, you can treat it as a string, but this is less efficient, especially\n * // if your renderer wants to *remove* classes that may be there.\n * renderData.cls += ' extra-class';\n *\n * return StringHelper.xss`${DateHelper.format(eventRecord.startDate, 'YYYY-MM-DD')}: ${eventRecord.name}`;\n * }\n * ```\n *\n * @param {Object} detail An object containing the information needed to render an Event.\n * @param {Scheduler.model.EventModel} detail.eventRecord The event record.\n * @param {Scheduler.model.ResourceModel} detail.resourceRecord The resource record.\n * @param {Scheduler.model.AssignmentModel} detail.assignmentRecord The assignment record.\n * @param {Object} detail.renderData An object containing details about the event rendering.\n * @param {Scheduler.model.EventModel} detail.renderData.event The event record.\n * @param {Core.helper.util.DomClassList|String} detail.renderData.cls An object whose property names\n * represent the CSS class names to be added to the event bar element. Set a property's value to truthy or\n * falsy to add or remove the class name based on the property name. Using this technique, you do not have\n * to know whether the class is already there, or deal with concatenation.\n * @param {Core.helper.util.DomClassList|String} detail.renderData.wrapperCls An object whose property names\n * represent the CSS class names to be added to the event wrapper element. Set a property's value to truthy\n * or falsy to add or remove the class name based on the property name. Using this technique, you do not\n * have to know whether the class is already there, or deal with concatenation.\n * @param {Core.helper.util.DomClassList|String} detail.renderData.iconCls An object whose property names\n * represent the CSS class names to be added to an event icon element.\n *\n * Note that an element carrying this icon class is injected into the event element *after*\n * the renderer completes, *before* the renderer's created content.\n *\n * To disable this if the renderer takes full control and creates content using the iconCls,\n * you can set `renderData.iconCls = null`.\n * @param {Number} detail.renderData.left Vertical offset position (in pixels) on the time axis.\n * @param {Number} detail.renderData.width Width in pixels of the event element.\n * @param {Number} detail.renderData.height Height in pixels of the event element.\n * @param {String|Object} detail.renderData.style Inline styles for the event bar DOM element.\n * Use either 'border: 1px solid black' or `{ border: '1px solid black' }`\n * @param {String|Object} detail.renderData.wrapperStyle Inline styles for wrapper of the\n * event bar DOM element. Use either 'border: 1px solid green' or `{ border: '1px solid green' }`\n * @param {String} detail.renderData.eventStyle The `eventStyle` of the event. Use this to apply custom\n * styles to the event DOM element\n * @param {String} detail.renderData.eventColor The `eventColor` of the event. Use this to set a custom\n * color for the rendered event\n * @param {DomConfig[]} detail.renderData.children An array of DOM configs used as children to the\n * `b-sch-event` element. Can be populated with additional DOM configs to have more control over contents.\n * @returns {String|Object|DomConfig|DomConfig[]} A simple string, or a custom object which will be applied to the\n * {@link #config-eventBodyTemplate}, creating the actual HTML\n * @config {Function}\n * @category Scheduled events\n */\n eventRenderer : null,\n /**\n * `this` reference for the {@link #config-eventRenderer} function\n * @config {Object}\n * @category Scheduled events\n */\n eventRendererThisObj : null,\n /**\n * Field from EventModel displayed as text in the bar when rendering\n * @config {String}\n * @default\n * @category Scheduled events\n */\n eventBarTextField : 'name',\n /**\n * The template used to generate the markup of your events in the scheduler. To 'populate' the\n * eventBodyTemplate with data, use the {@link #config-eventRenderer} method.\n * @config {Function}\n * @param {*} data Data passed from {@link #config-eventRenderer} method.\n * @returns {DomConfig|String|null}\n * @deprecated Since 5.6.2. Return markup/DomConfigs from {@link #config-eventRenderer} instead, will be\n * removed in 6.0.0\n * @category Scheduled events\n */\n eventBodyTemplate : null,\n /**\n * The class responsible for the packing horizontal event layout process.\n * Override this to take control over the layout process.\n * @config {Scheduler.eventlayout.HorizontalLayout}\n * @typings {typeof HorizontalLayout}\n * @default\n * @private\n * @category Misc\n */\n horizontalLayoutPackClass : HorizontalLayoutPack,\n /**\n * The class name responsible for the stacking horizontal event layout process.\n * Override this to take control over the layout process.\n * @config {Scheduler.eventlayout.HorizontalLayout}\n * @typings {typeof HorizontalLayout}\n * @default\n * @private\n * @category Misc\n */\n horizontalLayoutStackClass : HorizontalLayoutStack,\n /**\n * Controls how much space to leave between stacked event bars in px.\n *\n * Can be configured per resource by setting {@link Scheduler.model.ResourceModel#field-barMargin\n * resource.barMargin}.\n *\n * @config {Number} barMargin\n * @default\n * @category Scheduled events\n */\n // Used to animate events on first render\n isFirstRender : true,\n initialAnimationDuration : 2000,\n /**\n * When an event bar has a width less than this value, it gets the CSS class `b-sch-event-narrow`\n * added. You may apply custom CSS rules using this class.\n *\n * In vertical mode, this class causes the text to be rotated so that it runs vertically.\n * @default\n * @config {Number}\n * @category Scheduled events\n */\n narrowEventWidth : 10,\n internalEventLayout : null,\n eventPositionMode : 'translate',\n eventScrollMode : 'move'\n };\n }\n //endregion\n //region Settings\n changeEventLayout(eventLayout) {\n // Pass layout config to internal config to normalize its form\n this.internalEventLayout = eventLayout;\n // Return normalized string type\n return this.internalEventLayout.type;\n }\n changeInternalEventLayout(eventLayout) {\n return this.getEventLayout(eventLayout);\n }\n updateInternalEventLayout(eventLayout, oldEventLayout) {\n const me = this;\n if (oldEventLayout) {\n me.element.classList.remove(`b-eventlayout-${oldEventLayout.type}`);\n }\n me.element.classList.add(`b-eventlayout-${eventLayout.type}`);\n if (!me.isConfiguring) {\n me.refreshWithTransition();\n me.trigger('stateChange');\n }\n }\n changeHorizontalEventSorterFn(fn) {\n VersionHelper.deprecate('Scheduler', '6.0.0', 'Replaced by overlappingEventSorter()');\n this.overlappingEventSorter = fn;\n }\n updateOverlappingEventSorter(fn) {\n if (!this.isConfiguring) {\n this.refreshWithTransition();\n }\n }\n updateEventBodyTemplate() {\n VersionHelper.deprecate('Scheduler', '6.0.0', 'Return markup/DomConfigs from eventRenderer() instead');\n }\n //endregion\n //region Layout helpers\n // Wraps string config to object with type\n getEventLayout(value) {\n if (value?.isModel) {\n value = value.eventLayout || this.internalEventLayout;\n }\n if (typeof value === 'string') {\n value = { type : value };\n }\n return value;\n }\n /**\n * Get event layout handler. The handler decides the vertical placement of events within a resource.\n * Returns null if no eventLayout is used (if {@link #config-eventLayout} is set to \"none\")\n * @internal\n * @returns {Scheduler.eventlayout.HorizontalLayout}\n * @readonly\n * @category Scheduled events\n */\n getEventLayoutHandler(eventLayout) {\n const me = this;\n if (!me.isHorizontal) {\n return null;\n }\n const\n { timeAxisViewModel, horizontal } = me,\n { type } = eventLayout;\n if (!me.layouts) {\n me.layouts = {};\n }\n switch (type) {\n // stack, adjust row height to fit all events\n case 'stack': {\n if (!me.layouts.horizontalStack) {\n me.layouts.horizontalStack = new me.horizontalLayoutStackClass(ObjectHelper.assign({\n scheduler : me,\n timeAxisViewModel,\n bandIndexToPxConvertFn : horizontal.layoutEventVerticallyStack,\n bandIndexToPxConvertThisObj : horizontal\n }, eventLayout));\n }\n return me.layouts.horizontalStack;\n }\n // pack, fit all events in available height by adjusting their height\n case 'pack': {\n if (!me.layouts.horizontalPack) {\n me.layouts.horizontalPack = new me.horizontalLayoutPackClass(ObjectHelper.assign({\n scheduler : me,\n timeAxisViewModel,\n bandIndexToPxConvertFn : horizontal.layoutEventVerticallyPack,\n bandIndexToPxConvertThisObj : horizontal\n }, eventLayout));\n }\n return me.layouts.horizontalPack;\n }\n default:\n return null;\n }\n }\n //endregion\n //region Event rendering\n // Chainable function called with the events to render for a specific resource. Allows features to add/remove.\n // Chained by ResourceTimeRanges\n getEventsToRender(resource, events) {\n return events;\n }\n /**\n * Rerenders events for specified resource (by rerendering the entire row).\n * @param {Scheduler.model.ResourceModel} resourceRecord\n * @category Rendering\n */\n repaintEventsForResource(resourceRecord) {\n this.currentOrientation.repaintEventsForResource(resourceRecord);\n }\n /**\n * Rerenders the events for all resources connected to the specified event\n * @param {Scheduler.model.EventModel} eventRecord\n * @private\n */\n repaintEvent(eventRecord) {\n const resources = this.eventStore.getResourcesForEvent(eventRecord);\n resources.forEach(resourceRecord => this.repaintEventsForResource(resourceRecord));\n }\n getEventStyle(eventRecord, resourceRecord) {\n return eventRecord.eventStyle || resourceRecord.eventStyle || this.eventStyle;\n }\n getEventColor(eventRecord, resourceRecord) {\n return eventRecord.eventColor || eventRecord.event?.eventColor || eventRecord.parent?.eventColor || resourceRecord.eventColor || this.eventColor;\n }\n //endregion\n //region Template\n /**\n * Generates data used in the template when rendering an event. For example which css classes to use. Also applies\n * #eventBodyTemplate and calls the {@link #config-eventRenderer}.\n * @private\n * @param {Scheduler.model.EventModel} eventRecord Event to generate data for\n * @param {Scheduler.model.ResourceModel} resourceRecord Events resource\n * @param {Boolean|Object} includeOutside Specify true to get boxes for timespans outside the rendered zone in both\n * dimensions. This option is used when calculating dependency lines, and we need to include routes from timespans\n * which may be outside the rendered zone.\n * @param {Boolean} includeOutside.timeAxis Pass as `true` to include timespans outside the TimeAxis's bounds\n * @param {Boolean} includeOutside.viewport Pass as `true` to include timespans outside the vertical timespan viewport's bounds.\n * @returns {Object} Data to use in event template, or `undefined` if the event is outside the rendered zone.\n */\n generateRenderData(eventRecord, resourceRecord, includeOutside = { viewport : true }) {\n const\n me = this,\n // generateRenderData calculates layout for events which are outside the vertical viewport\n // because the RowManager needs to know a row height.\n renderData = me.currentOrientation.getTimeSpanRenderData(eventRecord, resourceRecord, includeOutside),\n { isEvent } = eventRecord,\n { eventResize } = me.features,\n // Don't want events drag created to zero duration to render as milestones\n isMilestone = !eventRecord.meta.isDragCreating && eventRecord.isMilestone,\n // $originalId allows lookup to yield same result for original resources and linked resources\n assignmentRecord = isEvent && eventRecord.assignments.find(a => a.resourceId === resourceRecord.$originalId),\n // Events inner element, will be populated by renderer and/or eventBodyTemplate\n eventContent = {\n className : 'b-sch-event-content',\n role : 'presentation',\n dataset : {\n taskBarFeature : 'content'\n }\n };\n // Events excluded by time axis filtering get no renderData\n if (renderData) {\n renderData.tabIndex = '0';\n let resizable = eventRecord.isResizable;\n if (eventResize && resizable) {\n if (renderData.startsOutsideView) {\n if (resizable === true) {\n resizable = 'end';\n }\n else if (resizable === 'start') {\n resizable = false;\n }\n }\n if (renderData.endsOutsideView) {\n if (resizable === true) {\n resizable = 'start';\n }\n else if (resizable === 'end') {\n resizable = false;\n }\n }\n // Let the feature veto start/end handles\n if (resizable) {\n if (me.isHorizontal) {\n if ((!me.rtl && !eventResize.leftHandle) || (me.rtl && !eventResize.rightHandle)) {\n resizable = resizable === 'start' ? false : 'end';\n }\n else if ((!me.rtl && !eventResize.rightHandle) || (me.rtl && !eventResize.leftHandle)) {\n resizable = resizable === 'end' ? false : 'start';\n }\n }\n else {\n if (!eventResize.topHandle) {\n resizable = resizable === 'start' ? false : 'end';\n }\n else if (!eventResize.bottomHandle) {\n resizable = resizable === 'end' ? false : 'start';\n }\n }\n }\n }\n // Event record cls properties are now DomClassList instances, so clone them\n // so that they can be manipulated here and by renderers.\n // Truthy value means the key will be added as a class name.\n // ResourceTimeRanges applies custom cls to wrapper.\n const\n // Boolean needed here, otherwise DomSync will dig into comparing the modifications\n isDirty = Boolean(\n eventRecord.hasPersistableChanges || assignmentRecord?.hasPersistableChanges\n ),\n clsListObj = {\n [resourceRecord.cls] : resourceRecord.cls,\n [me.generatedIdCls] : !eventRecord.isOccurrence && eventRecord.hasGeneratedId,\n [me.dirtyCls] : isDirty,\n [me.committingCls] : eventRecord.isCommitting,\n [me.endsOutsideViewCls] : renderData.endsOutsideView,\n [me.startsOutsideViewCls] : renderData.startsOutsideView,\n 'b-clipped-start' : renderData.clippedStart,\n 'b-clipped-end' : renderData.clippedEnd,\n 'b-iscreating' : eventRecord.isCreating,\n 'b-rtl' : me.rtl\n },\n wrapperClsListObj = {\n [`${me.eventCls}-parent`] : resourceRecord.isParent,\n 'b-readonly' : eventRecord.readOnly || assignmentRecord?.readOnly,\n 'b-linked-resource' : resourceRecord.isLinked,\n 'b-original-resource' : resourceRecord.hasLinks\n },\n clsList = eventRecord.isResourceTimeRange ? new DomClassList() : eventRecord.internalCls.clone(),\n wrapperClsList = eventRecord.isResourceTimeRange ? eventRecord.internalCls.clone() : new DomClassList();\n renderData.wrapperStyle = '';\n // mark as wrapper to make sure fire render events for this level only\n renderData.isWrap = true;\n // Event specifics, things that do not apply to ResourceTimeRanges\n if (isEvent) {\n const selected = assignmentRecord && me.isAssignmentSelected(assignmentRecord);\n ObjectHelper.assign(clsListObj, {\n [me.eventCls] : 1,\n 'b-milestone' : isMilestone,\n 'b-sch-event-narrow' : !isMilestone && renderData.width < me.narrowEventWidth,\n [me.fixedEventCls] : eventRecord.isDraggable === false,\n [`b-sch-event-resizable-${resizable}`] : Boolean(eventResize && !eventRecord.readOnly),\n [me.eventSelectedCls] : selected,\n [me.eventAssignHighlightCls] : me.eventAssignHighlightCls && !selected && me.isEventSelected(eventRecord),\n 'b-recurring' : eventRecord.isRecurring,\n 'b-occurrence' : eventRecord.isOccurrence,\n 'b-inactive' : eventRecord.inactive\n });\n renderData.eventId = eventRecord.id;\n const\n eventStyle = me.getEventStyle(eventRecord, resourceRecord),\n eventColor = me.getEventColor(eventRecord, resourceRecord),\n hasAnimation = me.isFirstRender && me.useInitialAnimation && globalThis.bryntum.noAnimations !== true;\n ObjectHelper.assign(wrapperClsListObj, {\n [`${me.eventCls}-wrap`] : 1,\n 'b-milestone-wrap' : isMilestone,\n [me.navigator.focusCls] : eventRecord.assignments.some(a => a === me.activeAssignment)\n });\n if (hasAnimation) {\n const\n index = renderData.row ? renderData.row.index : (renderData.top - me.scrollTop) / me.tickSize,\n delayMS = index / 20 * 1000;\n renderData.wrapperStyle = `animation-delay: ${delayMS}ms;`;\n me.maxDelay = Math.max(me.maxDelay || 0, delayMS);\n // Add an extra delay to wait for the most delayed animation to finish\n // before we call stopInitialAnimation. In this way, we allow them all to finish\n // before we remove the b-initial-${me._useInitialAnimation} class.\n if (!me.initialAnimationDetacher) {\n me.initialAnimationDetacher = EventHelper.on({\n element : me.foregroundCanvas,\n delegate : me.eventSelector,\n // Just listen for the first animation end fired by our event els\n once : true,\n animationend : () => me.setTimeout({\n fn : 'stopInitialAnimation',\n delay : me.maxDelay,\n cancelOutstanding : true\n }),\n // Fallback in case animation is interrupted\n expires : {\n alt : 'stopInitialAnimation',\n delay : me.initialAnimationDuration + me.maxDelay\n },\n thisObj : me\n });\n }\n }\n renderData.eventColor = eventColor;\n renderData.eventStyle = eventStyle;\n renderData.assignmentRecord = renderData.assignment = assignmentRecord;\n }\n // If not using a wrapping div, this cls will be added to event div for correct rendering\n renderData.wrapperCls = ObjectHelper.assign(wrapperClsList, wrapperClsListObj);\n renderData.cls = ObjectHelper.assign(clsList, clsListObj);\n renderData.iconCls = new DomClassList(eventRecord.getValue(me.eventBarIconClsField) || eventRecord.iconCls);\n // ResourceTimeRanges applies custom style to the wrapper\n if (eventRecord.isResourceTimeRange) {\n renderData.style = '';\n renderData.wrapperStyle += eventRecord.style || '';\n }\n // Others to inner\n else {\n renderData.style = eventRecord.style || '';\n }\n renderData.resource = renderData.resourceRecord = resourceRecord;\n renderData.resourceId = renderData.rowId;\n if (isEvent) {\n let childContent = null,\n milestoneLabelConfig = null,\n value;\n if (me.eventRenderer) {\n // User has specified a renderer fn, either to return a simple string, or an object intended for the eventBodyTemplate\n const\n rendererValue = me.eventRenderer.call(me.eventRendererThisObj || me, {\n eventRecord,\n resourceRecord,\n assignmentRecord : renderData.assignmentRecord,\n renderData\n });\n // If the user's renderer coerced it into a string, recreate a DomClassList.\n if (typeof renderData.cls === 'string') {\n renderData.cls = new DomClassList(renderData.cls);\n }\n if (typeof renderData.wrapperCls === 'string') {\n renderData.wrapperCls = new DomClassList(renderData.wrapperCls);\n }\n // Same goes for iconCls\n if (typeof renderData.iconCls === 'string') {\n renderData.iconCls = new DomClassList(renderData.iconCls);\n }\n if (me.eventBodyTemplate) {\n value = me.eventBodyTemplate(rendererValue);\n }\n else {\n value = rendererValue;\n }\n }\n else if (me.eventBodyTemplate) {\n // User has specified an eventBodyTemplate, but no renderer - just apply the entire event record data.\n value = me.eventBodyTemplate(eventRecord);\n }\n else if (me.eventBarTextField) {\n // User has specified a field in the data model to read from\n value = StringHelper.encodeHtml(eventRecord.getValue(me.eventBarTextField) || '');\n }\n if (!me.eventBodyTemplate || Array.isArray(value)) {\n eventContent.children = [];\n // Give milestone a dedicated label element so we can use padding\n if (isMilestone && (me.milestoneLayoutMode === 'default' || me.milestoneTextPosition === 'always-outside') && value != null && value !== '') {\n eventContent.children.unshift(milestoneLabelConfig = {\n tag : 'label',\n children : []\n });\n }\n if (renderData.iconCls?.length) {\n eventContent.children.unshift({\n tag : 'i',\n className : renderData.iconCls\n });\n }\n // Array, assumed to contain DOM configs for eventContent children (or milestone label)\n if (Array.isArray(value)) {\n (milestoneLabelConfig || eventContent).children.push(...value);\n }\n // Likely HTML content\n else if (StringHelper.isHtml(value)) {\n if (eventContent.children.length) {\n childContent = {\n tag : 'span',\n class : 'b-event-text-wrap',\n html : value\n };\n }\n else {\n eventContent.children = null;\n eventContent.html = value;\n }\n }\n // DOM config or plain string can be used as is\n else if (typeof value === 'string' || typeof value === 'object') {\n childContent = value;\n }\n // Other, use string\n else if (value != null) {\n childContent = String(value);\n }\n // Must allow empty string as valid content\n if (childContent != null) {\n // Milestones have content in their label, other events in their \"body\"\n (milestoneLabelConfig || eventContent).children.push(childContent);\n renderData.cls.add('b-has-content');\n }\n if (eventContent.html != null || eventContent.children.length) {\n renderData.children.push(eventContent);\n }\n }\n else {\n eventContent.html = value;\n renderData.children.push(eventContent);\n }\n }\n const { eventStyle, eventColor, wrapperCls } = renderData;\n // Renderers have last say on style & color\n wrapperCls[`b-sch-style-${eventStyle || 'none'}`] = 1;\n // Named colors are applied as a class to the wrapper\n if (DomHelper.isNamedColor(eventColor)) {\n wrapperCls[`b-sch-color-${eventColor}`] = eventColor;\n }\n else if (eventColor) {\n const\n colorProp = eventStyle ? 'color' : 'background-color',\n style = `${colorProp}:${eventColor};`;\n renderData.style = style + renderData.style;\n wrapperCls['b-sch-custom-color'] = 1;\n renderData._customColorStyle = style; // Saves the styling string to be able to remove it if needed\n }\n else {\n wrapperCls[`b-sch-color-none`] = 1;\n }\n // Milestones has to apply styling to b-sch-event-content\n if (renderData.style && isMilestone && eventContent) {\n eventContent.style = renderData.style;\n delete renderData.style;\n }\n // If there are any iconCls entries...\n renderData.cls['b-sch-event-withicon'] = renderData.iconCls?.length;\n // For comparison in sync, cheaper than comparing DocumentFragments\n renderData.eventContent = eventContent;\n renderData.wrapperChildren = [];\n // Method which features may chain in to\n me.onEventDataGenerated(renderData);\n }\n return renderData;\n }\n /**\n * A method which may be chained by features. It is called when an event's render\n * data is calculated so that features may update the style, class list or body.\n * @param {Object} eventData\n * @internal\n */\n onEventDataGenerated(eventData) {}\n //endregion\n //region Initial animation\n changeUseInitialAnimation(name) {\n return name === true ? 'fade-in' : name;\n }\n updateUseInitialAnimation(name, old) {\n const { classList } = this.element;\n if (old) {\n classList.remove(`b-initial-${old}`);\n }\n if (name) {\n classList.add(`b-initial-${name}`);\n // Transition block for FF, to not interfere with animations\n if (BrowserHelper.isFirefox) {\n classList.add('b-prevent-event-transitions');\n }\n }\n }\n /**\n * Restarts initial events animation with new value {@link #config-useInitialAnimation}.\n * @param {Boolean|String} initialAnimation new initial animation value\n * @category Misc\n */\n restartInitialAnimation(initialAnimation) {\n const me = this;\n me.initialAnimationDetacher?.();\n me.initialAnimationDetacher = null;\n me.useInitialAnimation = initialAnimation;\n me.isFirstRender = true;\n me.refresh();\n }\n stopInitialAnimation() {\n const me = this;\n me.initialAnimationDetacher();\n me.isFirstRender = false;\n // Prevent any further initial animations\n me.useInitialAnimation = false;\n // Remove transition block for FF a bit later, to not interfere with animations\n if (BrowserHelper.isFirefox) {\n me.setTimeout(() => me.element.classList.remove('b-prevent-event-transitions'), 100);\n }\n }\n //endregion\n //region Milestones\n /**\n * Determines width of a milestones label. How width is determined is decided by configuring\n * {@link #config-milestoneLayoutMode}. Please note that text width is always determined using the events\n * {@link Scheduler/model/EventModel#field-name}.\n * @param {Scheduler.model.EventModel} eventRecord\n * @param {Scheduler.model.ResourceModel} resourceRecord\n * @returns {Number}\n * @category Milestones\n */\n getMilestoneLabelWidth(eventRecord, resourceRecord) {\n const\n me = this,\n mode = me.milestoneLayoutMode,\n size = me.getResourceLayoutSettings(resourceRecord).contentHeight;\n if (mode === 'measure') {\n const\n html = StringHelper.encodeHtml(eventRecord.name),\n color = me.getEventColor(eventRecord, resourceRecord),\n style = me.getEventStyle(eventRecord, resourceRecord),\n element = me.milestoneMeasureElement || (me.milestoneMeasureElement = DomHelper.createElement({\n className : {\n 'b-sch-event-wrap' : 1,\n 'b-milestone-wrap' : 1,\n 'b-measure' : 1,\n [`b-sch-color-${color}`] : color,\n [`b-sch-style-${style}`] : style\n },\n children : [\n {\n className : 'b-sch-event b-milestone',\n children : [\n {\n className : 'b-sch-event-content',\n children : [\n { tag : 'label' }\n ]\n }\n ]\n }\n ],\n parent : me.foregroundCanvas\n }));\n // DomSync should not touch\n element.retainElement = true;\n element.style.fontSize = `${size}px`;\n if (me.milestoneTextPosition === 'always-outside') {\n const label = element.firstElementChild.firstElementChild.firstElementChild;\n label.innerHTML = html;\n const bounds = Rectangle.from(label, label.parentElement);\n // +2 for a little margin\n return bounds.left + bounds.width + 2;\n }\n else {\n // b-sch-event-content\n element.firstElementChild.firstElementChild.innerHTML = `${html}`;\n return element.firstElementChild.offsetWidth;\n }\n }\n if (mode === 'estimate') {\n return eventRecord.name.length * me.milestoneCharWidth + (me.milestoneTextPosition === 'always-outside' ? size : 0);\n }\n if (mode === 'data') {\n return eventRecord.milestoneWidth;\n }\n return 0;\n }\n updateMilestoneLayoutMode(mode) {\n const\n me = this,\n alwaysOutside = me.milestoneTextPosition === 'always-outside';\n me.element.classList.toggle('b-sch-layout-milestones', mode !== 'default' && !alwaysOutside);\n me.element.classList.toggle('b-sch-layout-milestone-labels', mode !== 'default' && alwaysOutside);\n if (!me.isConfiguring) {\n me.refreshWithTransition();\n }\n }\n updateMilestoneTextPosition(position) {\n this.element.classList.toggle('b-sch-layout-milestone-text-position-inside', position === 'inside');\n this.updateMilestoneLayoutMode(this.milestoneLayoutMode);\n }\n updateMilestoneAlign() {\n if (!this.isConfiguring) {\n this.refreshWithTransition();\n }\n }\n updateMilestoneCharWidth() {\n if (!this.isConfiguring) {\n this.refreshWithTransition();\n }\n }\n // endregion\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "import Base from '../../../Core/Base.js';\nimport ProjectModel from '../../model/ProjectModel.js';\nimport StringHelper from '../../../Core/helper/StringHelper.js';\nimport TimeZoneHelper from '../../../Core/helper/TimeZoneHelper.js';\n/**\n * @module Scheduler/data/mixin/ProjectConsumer\n */\nconst engineStoreNames = [\n 'assignmentStore',\n 'dependencyStore',\n 'eventStore',\n 'resourceStore'\n];\n/**\n * Creates a Project using any configured stores, and sets the stores configured into the project into\n * the host object.\n *\n * @mixin\n */\nexport default Target => class ProjectConsumer extends (Target || Base) {\n static get $name() {\n return 'ProjectConsumer';\n }\n //region Default config\n static get declarable() {\n return ['projectStores'];\n }\n static get configurable() {\n return {\n projectModelClass : ProjectModel,\n /**\n * A {@link Scheduler.model.ProjectModel} instance or a config object. The project holds all Scheduler data.\n * Can be omitted in favor of individual store configs or {@link Scheduler.view.mixin.SchedulerStores#config-crudManager} config.\n *\n * **Note:** In SchedulerPro the project is instance of SchedulerPro.model.ProjectModel class.\n * @prp {Scheduler.model.ProjectModel|ProjectModelConfig} project\n * @typings {ProjectModel|ProjectModelConfig}\n * @category Data\n */\n project : {},\n /**\n * Configure as `true` to destroy the Project and stores when `this` is destroyed.\n * @config {Boolean}\n * @category Data\n */\n destroyStores : null,\n // Will be populated by AttachToProjectMixin which features mix in\n projectSubscribers : []\n };\n }\n #suspendedByRestore;\n //endregion\n startConfigure(config) {\n // process the project first which ingests any configured data sources,\n this.getConfig('project');\n super.startConfigure(config);\n }\n //region Project\n // This is where all the ingestion happens.\n // At config time, the changers inject incoming values into the project config object\n // that we are building. At the end we instantiate the project with all incoming\n // config values filled in.\n changeProject(project, oldProject) {\n const\n me = this,\n {\n projectStoreNames,\n projectDataNames\n } = me.constructor;\n me.projectCallbacks = new Set();\n if (project) {\n // Flag for changes to know what stage we are at\n me.buildingProjectConfig = true;\n if (!project.isModel) {\n // When configuring, prio order:\n // 1. If using an already existing CrudManager, it is assumed to already have the stores we should use,\n // adopt them as ours.\n // 2. If a supplied store already has a project, it is assumed to be shared with another scheduler and\n // that project is adopted as ours. Unless we are given some store not part of that project,\n // in which case we create a new project.\n // 3. Use stores from a supplied project config.\n // 4. Use stores configured on scheduler.\n // + Pass on inline data (events, resources, dependencies, assignments -> xxData on the project config)\n //\n // What happens during project initialization is this:\n // this._project is the project *config* object.\n // changeXxxx methods put incoming values directly into it through this.project\n // to be used as its configuration.\n // So when it is instantiated, it has had all configs injected.\n if (me.isConfiguring) {\n // Set property for changers to put incoming values into\n me._project = project;\n // crudManager will be a clone of the raw config if it is a raw config.\n const { crudManager } = me;\n // Pull in stores from the crudManager config first\n if (crudManager) {\n const { isCrudManager } = crudManager;\n for (const storeName of projectStoreNames) {\n if (crudManager[storeName]) {\n // We configure the project with the stores, and *not* the CrudManager.\n // The CrudManager ends up having its project set and thereby adopting ours.\n me[storeName] = crudManager[storeName];\n // If it's just a config, take the stores out.\n // We will *configure* it with this project and it will ingest\n // its stores from there.\n if (!isCrudManager) {\n delete crudManager[storeName];\n }\n }\n }\n }\n // Pull in all our configured stores into the project config object.\n // That also extracts any project into this._sharedProject\n me.getConfig('projectStores');\n // Referencing these data configs causes them to be pulled into\n // the _project.xxxData config property if they are present.\n for (const dataName of projectDataNames) {\n me.getConfig(dataName);\n }\n }\n const { eventStore } = project;\n let { _sharedProject : sharedProject } = me;\n // Delay autoLoading until listeners are set up, to be able to inject params\n if (eventStore && !eventStore.isEventStoreMixin && eventStore.autoLoad && !eventStore.count) {\n eventStore.autoLoad = false;\n me.delayAutoLoad = true;\n }\n // We should not adopt a project from a store if we are given any store not part of that project\n if (sharedProject && engineStoreNames.some(store => project[store] && project[store] !== sharedProject[store])) {\n // We have to chain any store used by the other project, they can only belong to one\n for (const store of engineStoreNames) {\n if (project[store] && project[store] === sharedProject[store]) {\n project[store] = project[store].chain();\n }\n }\n sharedProject = null;\n }\n // Use sharedProject if found, else instantiate our config.\n project = sharedProject || new me.projectModelClass(project);\n // Clear the property so that the updater is called.\n delete me._project;\n }\n // In the updater, configs are live\n me.buildingProjectConfig = false;\n }\n return project;\n }\n /**\n * Implement in subclass to take action when project is replaced.\n *\n * __`super.updateProject(...arguments)` must be called first.__\n *\n * @param {Scheduler.model.ProjectModel} project\n * @category Data\n */\n updateProject(project, oldProject) {\n const\n me = this,\n {\n projectListeners,\n crudManager\n } = me;\n me.detachListeners('projectConsumer');\n // When we set the crudManager now, it will go through to the CrudManagerVIew\n delete me._crudManager;\n if (project) {\n projectListeners.thisObj = me;\n project.ion(projectListeners);\n // If the project is a CrudManager, use it as such.\n if (project.isCrudManager) {\n me.crudManager = project;\n }\n // Apply the project to CrudManager, making sure the same stores are used there and here\n else if (crudManager) {\n crudManager.project = project;\n // CrudManager goes through the changer as usual and is initialized\n // from the Project, not any stores it was originally configured with.\n me.crudManager = crudManager;\n }\n // Notifies classes that mix AttachToProjectMixin that we have a new project\n me.projectSubscribers.forEach(subscriber => {\n subscriber.detachFromProject(oldProject);\n subscriber.attachToProject(project);\n });\n // Sets the project's stores into the host object\n for (const storeName of me.constructor.projectStoreNames) {\n me[storeName] = project[storeName];\n }\n // Listeners are set up, if EventStore was configured with autoLoad now is the time to load\n if (me.delayAutoLoad) {\n // Restore the flag, not needed but to look good on inspection\n project.eventStore.autoLoad = true;\n project.eventStore.load();\n }\n project.stm?.ion({\n name : 'projectConsumer',\n restoringStart : 'onProjectRestoringStart',\n restoringStop : 'onProjectRestoringStop',\n thisObj : me\n });\n }\n me.trigger('projectChange', { project });\n }\n // Implementation here because we need to get first look at it to adopt its stores\n changeCrudManager(crudManager) {\n // Set the property to be scanned for incoming stores.\n // If it's a config, it will be stripped of those stores prior to construction.\n if (this.buildingProjectConfig) {\n this._crudManager = crudManager.isCrudManager ? crudManager : Object.assign({}, crudManager);\n }\n else {\n return super.changeCrudManager(crudManager);\n }\n }\n // Called when project changes are committed, after data is written back to records\n onProjectDataReady() {\n const me = this;\n // Only update the UI when we are visible\n me.whenVisible(() => {\n if (me.projectCallbacks.size) {\n me.projectCallbacks.forEach(callback => callback());\n me.projectCallbacks.clear();\n }\n }, null, null, 'onProjectDataReady');\n }\n onProjectRestoringStart({ stm }) {\n const { rawQueue } = stm;\n // Suspend refresh if undo/redo potentially leads to multiple refreshes\n if (rawQueue.length && rawQueue[rawQueue.length - 1].length > 1) {\n this.#suspendedByRestore = true;\n this.suspendRefresh();\n }\n }\n onProjectRestoringStop() {\n if (this.#suspendedByRestore) {\n this.#suspendedByRestore = false;\n this.resumeRefresh(true);\n }\n }\n // Overridden in CalendarStores.js\n onBeforeTimeZoneChange() {}\n // When project changes time zone, change start and end dates\n onTimeZoneChange({ timeZone, oldTimeZone }) {\n const me = this;\n // The timeAxis timeZone could be equal to timeZone if we are a partnered scheduler\n if (me.startDate && me.timeAxis.timeZone !== timeZone) {\n const startDate = oldTimeZone != null ? TimeZoneHelper.fromTimeZone(me.startDate, oldTimeZone) : me.startDate;\n me.startDate = timeZone != null ? TimeZoneHelper.toTimeZone(startDate, timeZone) : startDate;\n // Saves the timeZone on the timeAxis as it is shared between partnered schedulers\n me.timeAxis.timeZone = timeZone;\n }\n }\n onStartApplyChangeset() {\n this.suspendRefresh();\n }\n onEndApplyChangeset() {\n this.resumeRefresh(true);\n }\n /**\n * Accepts a callback that will be called when the underlying project is ready (no commit pending and current commit\n * finalized)\n * @param {Function} callback\n * @category Data\n */\n whenProjectReady(callback) {\n // Might already be ready, call directly\n if (this.isEngineReady) {\n callback();\n }\n else {\n this.projectCallbacks.add(callback);\n }\n }\n /**\n * Returns `true` if engine is in a stable calculated state, `false` otherwise.\n * @property {Boolean}\n * @category Misc\n */\n get isEngineReady() {\n // NonWorkingTime calls this during destruction, hence the ?.\n return Boolean(this.project.isEngineReady?.());\n }\n //endregion\n //region Destroy\n // Cleanup, destroys stores if this.destroyStores is true.\n doDestroy() {\n super.doDestroy();\n if (this.destroyStores) {\n // Shared project might already be destroyed\n !this.project.isDestroyed && this.project.destroy();\n }\n }\n //endregion\n get projectStores() {\n const { projectStoreNames } = this.constructor;\n return projectStoreNames.map(storeName => this[storeName]);\n }\n static get projectStoreNames() {\n return Object.keys(this.projectStores);\n }\n static get projectDataNames() {\n return this.projectStoreNames.reduce((result, storeName) => {\n const { dataName } = this.projectStores[storeName];\n if (dataName) {\n result.push(dataName);\n }\n return result;\n }, []);\n }\n static setupProjectStores(cls, meta) {\n const { projectStores } = cls;\n if (projectStores) {\n const\n projectListeners = {\n name : 'projectConsumer',\n dataReady : 'onProjectDataReady',\n change : 'relayProjectDataChange',\n beforeTimeZoneChange : 'onBeforeTimeZoneChange',\n timeZoneChange : 'onTimeZoneChange',\n startApplyChangeset : 'onStartApplyChangeset',\n endApplyChangeset : 'onEndApplyChangeset'\n },\n storeConfigs = {\n projectListeners\n };\n let previousDataName;\n // Create a property and updater for each dataName and a changer for each store\n for (const storeName in projectStores) {\n const { dataName } = projectStores[storeName];\n // Define \"eventStore\" and \"events\" configs\n storeConfigs[storeName] = storeConfigs[dataName] = null;\n // Define up the \"events\" property\n if (dataName) {\n // Getter to return store data\n Object.defineProperty(meta.class.prototype, dataName, {\n configurable : true, // So that Config can add its setter.\n get() {\n // get events() { return this.project.eventStore.records; }\n return this.project[storeName]?.records;\n }\n });\n // Create an updater for the data name;\n this.createDataUpdater(storeName, dataName, previousDataName, meta);\n }\n this.createStoreDescriptor(meta, storeName, projectStores[storeName], projectListeners);\n // The next data updater must reference this data name\n previousDataName = dataName;\n }\n // Create the projectListeners config.\n this.setupConfigs(meta, storeConfigs);\n }\n }\n static createDataUpdater(storeName, dataName, previousDataName, meta) {\n // Create eg \"updateEvents(data)\".\n // We need it to call this.getConfig('resources') so that ordering of\n // data ingestion is corrected.\n meta.class.prototype[`update${StringHelper.capitalize(dataName)}`] = function(data) {\n const { project } = this;\n // Ensure a dataName that we depend on is called in.\n // For example dependencies must load in order after the events.\n previousDataName && this.getConfig(previousDataName);\n if (this.buildingProjectConfig) {\n // Set the property in the project config object.\n // eg project.eventsData = [...]\n project[`${dataName}Data`] = data;\n }\n else {\n // Live update the project when in use.\n project[storeName].data = data;\n }\n };\n }\n // eslint-disable-next-line bryntum/no-listeners-in-lib\n static createStoreDescriptor(meta, storeName, { listeners }, projectListeners) {\n const\n { prototype : clsProto } = meta.class,\n storeNameCap = StringHelper.capitalize(storeName);\n // Set up onProjectEventStoreChange to set this.eventStore\n projectListeners[`${storeName}Change`] = function({ store }) {\n this[storeName] = store;\n };\n // create changeEventStore\n clsProto[`change${storeNameCap}`] = function(store, oldStore) {\n const\n me = this,\n { project } = me,\n storeProject = store?.project;\n if (me.buildingProjectConfig) {\n // Capture any project found at project config time\n // to use as our shared project\n if (storeProject?.isProjectModel) {\n me._sharedProject = storeProject;\n }\n // Set the property in the project config object.\n // Must not go through the updater. It's too early to\n // inform host of store change.\n project[storeName] = store;\n return;\n }\n // Live update the project when in use.\n if (!me.initializingProject) {\n if (project[storeName] !== store) {\n project[`set${storeNameCap}`](store);\n store = project[storeName];\n }\n }\n // Implement processing here instead of creating a separate updater.\n // Subclasses can implement updaters.\n if (store !== oldStore) {\n if (listeners) {\n listeners.thisObj = me;\n listeners.name = `${storeName}Listeners`;\n // Ensure we don't trigger one refresh per record during data loading\n listeners.startApplyChangeset = 'onProjectStoreStartApplyChangeset';\n listeners.endApplyChangeset = 'onProjectStoreEndApplyChangeset';\n me.detachListeners(listeners.name);\n store.ion(listeners);\n }\n // Set backing var temporarily, so it can be accessed from AttachToProjectMixin subscribers\n me[`_${storeName}`] = store;\n // Notifies classes that mix AttachToProjectMixin that we have a new XxxxxStore\n me.projectSubscribers.forEach(subscriber => {\n subscriber[`attachTo${storeNameCap}`]?.(store);\n });\n me[`_${storeName}`] = null;\n }\n return store;\n };\n }\n onProjectStoreStartApplyChangeset() {\n this.suspendRefresh();\n }\n onProjectStoreEndApplyChangeset() {\n this.resumeRefresh(true);\n }\n relayProjectDataChange(event) {\n // Don't trigger change event for tree node collapse/expand\n if ((event.isExpand || event.isCollapse) && !event.records[0].fieldMap.expanded.persist) {\n return;\n }\n /**\n * Fired when data in any of the projects stores changes.\n *\n * Basically a relayed version of each store's own change event, decorated with which store it originates from.\n * See the {@link Core.data.Store#event-change store change event} documentation for more information.\n *\n * @event dataChange\n * @param {Scheduler.data.mixin.ProjectConsumer} source Owning component\n * @typings source -> {typeof Scheduler.data.mixin.ProjectConsumer||any}\n * @param {Scheduler.model.mixin.ProjectModelMixin} project Project model\n * @typings project -> {typeof Scheduler.model.mixin.ProjectModelMixin||any}\n * @param {Core.data.Store} store Affected store\n * @param {'remove'|'removeAll'|'add'|'updatemultiple'|'clearchanges'|'filter'|'update'|'dataset'|'replace'} action\n * Name of action which triggered the change. May be one of:\n * * `'remove'`\n * * `'removeAll'`\n * * `'add'`\n * * `'updatemultiple'`\n * * `'clearchanges'`\n * * `'filter'`\n * * `'update'`\n * * `'dataset'`\n * * `'replace'`\n * @param {Core.data.Model} record Changed record, for actions that affects exactly one record (`'update'`)\n * @param {Core.data.Model[]} records Changed records, passed for all actions except `'removeAll'`\n * @param {Object} changes Passed for the `'update'` action, info on which record fields changed\n */\n return this.trigger('dataChange', { project : event.source, ...event, source : this });\n }\n //region WidgetClass\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n //endregion\n};\n", "import Base from '../../../Core/Base.js';\nimport Store from '../../../Core/data/Store.js';\nimport Rectangle from '../../../Core/helper/util/Rectangle.js';\nimport VersionHelper from '../../../Core/helper/VersionHelper.js';\nimport ProjectConsumer from '../../data/mixin/ProjectConsumer.js';\n/**\n * @module Scheduler/view/mixin/SchedulerStores\n */\n/**\n * Functions for store assignment and store event listeners.\n *\n * @mixin\n * @extends Scheduler/data/mixin/ProjectConsumer\n */\nexport default Target => class SchedulerStores extends ProjectConsumer(Target || Base) {\n static get $name() {\n return 'SchedulerStores';\n }\n //region Default config\n // This is the static definition of the Stores we consume from the project, and\n // which we must provide *TO* the project if we or our CrudManager is configured\n // with them.\n // The property name is the store name, and within that there is the dataName which\n // is the property which provides static data definition. And there is a listeners\n // definition which specifies the listeners *on this object* for each store.\n //\n // To process incoming stores, implement an updateXxxxxStore method such\n // as `updateEventStore(eventStore)`.\n //\n // To process an incoming Project implement `updateProject`. __Note that\n // `super.updateProject(...arguments)` must be called first.__\n static get projectStores() {\n return {\n resourceStore : {\n dataName : 'resources'\n },\n eventStore : {\n dataName : 'events',\n // eslint-disable-next-line bryntum/no-listeners-in-lib\n listeners : {\n batchedUpdate : 'onEventStoreBatchedUpdate',\n changePreCommit : 'onInternalEventStoreChange',\n commitStart : 'onEventCommitStart',\n commit : 'onEventCommit',\n exception : 'onEventException',\n idchange : 'onEventIdChange',\n beforeLoad : 'onBeforeLoad'\n }\n },\n assignmentStore : {\n dataName : 'assignments',\n // eslint-disable-next-line bryntum/no-listeners-in-lib\n listeners : {\n changePreCommit : 'onAssignmentChange', // In EventSelection.js\n commitStart : 'onAssignmentCommitStart',\n commit : 'onAssignmentCommit',\n exception : 'onAssignmentException',\n beforeRemove : {\n fn : 'onAssignmentBeforeRemove',\n // We must go last in case an app vetoes a remove\n // by returning false from a handler.\n prio : -1000\n }\n }\n },\n dependencyStore : {\n dataName : 'dependencies'\n },\n calendarManagerStore : {},\n timeRangeStore : {},\n resourceTimeRangeStore : {}\n };\n }\n static get configurable() {\n return {\n /**\n * Overridden to *not* auto create a store at the Scheduler level.\n * The store is the {@link Scheduler.data.ResourceStore} of the backing project\n * @config {Core.data.Store}\n * @private\n */\n store : null,\n /**\n * The name of the start date parameter that will be passed to in every `eventStore` load request.\n * @config {String}\n * @category Data\n */\n startParamName : 'startDate',\n /**\n * The name of the end date parameter that will be passed to in every `eventStore` load request.\n * @config {String}\n * @category Data\n */\n endParamName : 'endDate',\n /**\n * Set to true to include `startDate` and `endDate` params indicating the currently viewed date range.\n * Dates are formatted using the same format as the `startDate` field on the EventModel\n * (e.g. 2023-03-08T00:00:00+01:00).\n *\n * Enabled by default in version 6.0 and above.\n *\n * @config {Boolean}\n */\n passStartEndParameters : VersionHelper.checkVersion('core', '6.0', '>='),\n /**\n * Class that should be used to instantiate a CrudManager in case it's provided as a simple object to\n * {@link #config-crudManager} config.\n * @config {Scheduler.data.CrudManager}\n * @typings {typeof CrudManager}\n * @category Data\n */\n crudManagerClass : null,\n /**\n * Get/set the CrudManager instance\n * @member {Scheduler.data.CrudManager} crudManager\n * @category Data\n */\n /**\n * Supply a {@link Scheduler.data.CrudManager} instance or a config object if you want to use\n * CrudManager for handling data.\n * @config {CrudManagerConfig|Scheduler.data.CrudManager}\n * @category Data\n */\n crudManager : null\n };\n }\n //endregion\n //region Project\n updateProject(project, oldProject) {\n super.updateProject(project, oldProject);\n this.detachListeners('schedulerStores');\n project.ion({\n name : 'schedulerStores',\n refresh : 'onProjectRefresh',\n thisObj : this\n });\n }\n // Called when project changes are committed, before data is written back to records (but still ready to render\n // since data is fetched from engine)\n onProjectRefresh({ isInitialCommit }) {\n const me = this;\n // Only update the UI immediately if we are visible\n if (me.isVisible) {\n if (isInitialCommit) {\n if (me.isVertical) {\n me.refreshAfterProjectRefresh = false;\n me.refreshWithTransition();\n }\n }\n if (me.refreshAfterProjectRefresh) {\n me.refreshWithTransition(false, !isInitialCommit);\n me.refreshAfterProjectRefresh = false;\n }\n if (me.navigateToAfterRefresh) {\n me.navigateTo(me.navigateToAfterRefresh, {\n scrollIntoView : false\n });\n me.navigateToAfterRefresh = null;\n }\n }\n // Otherwise wait till next time we get painted (shown, or a hidden ancestor shown)\n else {\n me.whenVisible('refresh', me, [true]);\n }\n }\n //endregion\n //region CrudManager\n changeCrudManager(crudManager) {\n const me = this;\n if (crudManager && !crudManager.isCrudManager) {\n // CrudManager injects itself into is Scheduler's _crudManager property\n // because code it triggers needs to access it through its getter.\n crudManager = me.crudManagerClass.new({\n scheduler : me\n }, crudManager);\n }\n // config setter will veto because of above described behaviour\n // of setting the property early on creation\n me._crudManager = crudManager;\n me.bindCrudManager(crudManager);\n }\n //endregion\n //region Row store\n get store() {\n // Vertical uses a dummy store\n if (!this._store && this.isVertical) {\n this._store = new Store({\n data : [\n {\n id : 'verticalTimeAxisRow', \n cls : 'b-verticaltimeaxis-row'\n }\n ]\n });\n }\n return super.store;\n }\n set store(store) {\n super.store = store;\n }\n // Wrap w/ transition refreshFromRowOnStoreAdd() inherited from Grid\n refreshFromRowOnStoreAdd(row, { isExpand, records }) {\n const args = arguments;\n this.runWithTransition(() => {\n // Postpone drawing of events for a new resource until the following project refresh. Previously the draw\n // would not happen because engine was not ready, but now when we allow commits and can read values during\n // commit that block is no longer there\n this.currentOrientation.suspended = !isExpand && !records.some(r => r.isLinked);\n super.refreshFromRowOnStoreAdd(row, ...args);\n this.currentOrientation.suspended = false;\n }, !isExpand);\n }\n onStoreAdd(event) {\n super.onStoreAdd(event);\n if (this.isPainted) {\n this.calculateRowHeights(event.records);\n }\n }\n onStoreUpdateRecord({ source : store, record, changes }) {\n // Ignore engine changes that do not affect row rendering\n let ignoreCount = 0;\n if ('assigned' in changes) {\n ignoreCount++;\n }\n if ('calendar' in changes) {\n ignoreCount++;\n }\n if (ignoreCount !== Object.keys(changes).length) {\n super.onStoreUpdateRecord(...arguments);\n }\n }\n //endregion\n //region ResourceStore\n updateResourceStore(resourceStore) {\n // Reconfigure grid if resourceStore is backing the rows\n if (resourceStore && this.isHorizontal) {\n resourceStore.metaMapId = this.id;\n this.store = resourceStore;\n }\n }\n get usesDisplayStore() {\n return this.store !== this.resourceStore;\n }\n //endregion\n //region Events\n onEventIdChange(params) {\n this.currentOrientation.onEventStoreIdChange && this.currentOrientation.onEventStoreIdChange(params);\n }\n /**\n * Listener to the batchedUpdate event which fires when a field is changed on a record which\n * is batch updating. Occasionally UIs must keep in sync with batched changes.\n * For example, the EventResize feature performs batched updating of the startDate/endDate\n * and it tells its client to listen to batchedUpdate.\n * @private\n */\n onEventStoreBatchedUpdate(event) {\n if (this.listenToBatchedUpdates) {\n return this.onInternalEventStoreChange(event);\n }\n }\n /**\n * Calls appropriate functions for current event layout when the event store is modified.\n * @private\n */\n // Named as Internal to avoid naming collision with wrappers that relay events\n onInternalEventStoreChange(params) {\n // Too early, bail out\n // Also bail out if this is a reassign using resourceId, any updates will be handled by AssignmentStore instead\n if (!this.isPainted || !this._mode || params.isAssign || this.assignmentStore.isRemovingAssignment) {\n return;\n }\n // Only respond if we are visible. If not, defer until we are shown\n if (this.isVisible) {\n this.currentOrientation.onEventStoreChange(params);\n }\n else {\n this.whenVisible(this.onInternalEventStoreChange, this, [params]);\n }\n }\n /**\n * Refreshes committed events, to remove dirty/committing flag.\n * CSS is added\n * @private\n */\n onEventCommit({ changes }) {\n let resourcesToRepaint = [...changes.added, ...changes.modified].map(\n eventRecord => this.eventStore.getResourcesForEvent(eventRecord)\n );\n // getResourcesForEvent returns an array, so need to flatten resourcesToRepaint\n resourcesToRepaint = Array.prototype.concat.apply([], resourcesToRepaint);\n // repaint relevant resource rows\n new Set(resourcesToRepaint).forEach(\n resourceRecord => this.repaintEventsForResource(resourceRecord)\n );\n }\n /**\n * Adds the committing flag to changed events before commit.\n * @private\n */\n onEventCommitStart({ changes }) {\n const { currentOrientation, committingCls } = this;\n // Committing sets a flag in meta that during event rendering applies a CSS class. But to not mess up drag and\n // drop between resources no redraw is performed before committing, so class is never applied to the element(s).\n // Applying here instead\n [...changes.added, ...changes.modified].forEach(eventRecord =>\n eventRecord.assignments.forEach(\n assignmentRecord => currentOrientation.toggleCls(assignmentRecord, committingCls, true)\n )\n );\n }\n // Clear committing flag\n onEventException({ action }) {\n if (action === 'commit') {\n const { changes } = this.eventStore;\n [...changes.added, ...changes.modified, ...changes.removed].forEach(eventRecord =>\n this.repaintEvent(eventRecord)\n );\n }\n }\n onAssignmentCommit({ changes }) {\n this.repaintEventsForAssignmentChanges(changes);\n }\n onAssignmentCommitStart({ changes }) {\n const { currentOrientation, committingCls } = this;\n [...changes.added, ...changes.modified].forEach(assignmentRecord => {\n currentOrientation.toggleCls(assignmentRecord, committingCls, true);\n });\n }\n // Clear committing flag\n onAssignmentException({ action }) {\n if (action === 'commit') {\n this.repaintEventsForAssignmentChanges(this.assignmentStore.changes);\n }\n }\n repaintEventsForAssignmentChanges(changes) {\n const resourcesToRepaint = [...changes.added, ...changes.modified, ...changes.removed].map(\n assignmentRecord => assignmentRecord.getResource()\n );\n // repaint relevant resource rows\n new Set(resourcesToRepaint).forEach(\n resourceRecord => this.repaintEventsForResource(resourceRecord)\n );\n }\n onAssignmentBeforeRemove({ records, removingAll }) {\n if (removingAll) {\n return;\n }\n const\n me = this,\n { activeAssignment } = me,\n deletingActiveAssignment = records.includes(activeAssignment);\n let moveTo;\n // Deassigning the active assignment\n if (!me.isConfiguring &&\n // If we have current active assignment or we scheduled navigating to an assignment, we should check\n // if we're removing that assignment in order to avoid navigating to it\n (me.navigateToAfterRefresh || activeAssignment && deletingActiveAssignment)\n ) {\n // If next navigation target is removed, clean up the flag\n if (records.includes(me.navigateToAfterRefresh)) {\n me.navigateToAfterRefresh = null;\n }\n const fromEl = me.getElementFromAssignmentRecord(activeAssignment, true);\n // When deleting active assignment, if still part of this scheduler (when dragging to another, it might not\n // be in Safari where focus out happens later), look for a close target until we find an existing record,\n // not scheduled for removal and in view. Otherwise, push focus to the Scheduler.\n if (deletingActiveAssignment && fromEl) {\n const\n viewport = me.timeAxisSubGrid.rectangle().intersect(me._bodyRectangle),\n fromRect = Rectangle.from(fromEl),\n fromCenter = fromRect.center,\n resourceDim = me.isHorizontal ? 'y' : 'x',\n distanceSort = ({ element : e1, distance : d1, center : c1, edgeDistance : ed1 }, { element : e2, distance : d2, center : c2, edgeDistance : ed2 }) => {\n // Sort blocks which are closer in the Y axis to earlier\n // Unless we're in the same row, in which case use only distance.\n if (e1.dataset.resourceId !== e2.dataset.resourceId) {\n if (Math.abs(c1[resourceDim] - fromCenter[resourceDim]) < Math.abs(c2[resourceDim] - fromCenter[resourceDim])) {\n return -1;\n }\n if (Math.abs(c1[resourceDim] - fromCenter[resourceDim]) > Math.abs(c2[resourceDim] - fromCenter[resourceDim])) {\n return 1;\n }\n }\n return Math.min(ed1, d1) - Math.min(ed2, d2) || c2[resourceDim] - c1[resourceDim];\n },\n to = Array.from(me.foregroundCanvas.querySelectorAll(me.navigator.itemSelector)).reduce((result, element) => {\n // Don't consider the from element\n if (element !== fromEl) {\n const\n rectangle = Rectangle.from(element).intersect(viewport),\n assignment = rectangle && me.resolveAssignmentRecord(element);\n // If there's an intersection with the viewport, add to candidate array\n if (assignment) {\n const\n { center } = rectangle,\n d = fromCenter.getDelta(center),\n vertGap = center.y < fromCenter.y ? fromRect.y - rectangle.bottom : center.y > fromCenter.y ? rectangle.y - fromRect.bottom : 0,\n horizGap = center.x < fromCenter.x ? fromRect.x - rectangle.right : center.x > fromCenter.x ? rectangle.x - fromRect.right : 0;\n result.push({\n element,\n assignment,\n center,\n distance : Math.sqrt(d[0] ** 2 + d[1] ** 2),\n edgeDistance : Math.max(\n vertGap, horizGap\n )\n });\n }\n }\n return result;\n }, []).sort(distanceSort)[0];\n if (to) {\n moveTo = to.assignment;\n }\n }\n // Move focus away from the element which will soon have no backing data.\n // Only if a UI element for it is in view.\n if (moveTo) {\n // Although removing records from assignment store will trigger project commit and consequently\n // `refresh` event on the project which will use this record to navigate to, some tests expect\n // immediate navigation\n me.navigateTo(moveTo, {\n scrollIntoView : false\n });\n me.navigateToAfterRefresh = moveTo;\n }\n // Focus must exit the Scheduler's subgrid, otherwise, if a navigation\n // key gesture is delivered before the outgoing event's element has faded\n // out and been removed, navigation will be attempted from a deleted\n // event. Animated hiding is problematic.\n //\n // We cannot just revertFocus() because that might move focus back to an\n // element in a floating EventEditor which is not yet faded out and\n // been removed. Animated hiding is problematic.\n //\n // We cannot focus scheduler.timeAxisColumn.element because the browser\n // would scroll it in some way if we have horizontal overflow.\n //\n // The only thing we can know about to focus here is the Scheduler itself.\n else {\n me.focusElement.focus({ preventScroll : true });\n }\n }\n }\n //endregion\n //region TimeRangeStore & TimeRanges\n /**\n * Inline time ranges, will be loaded into an internally created store if {@link Scheduler.feature.TimeRanges}\n * is enabled.\n * @config {Scheduler.model.TimeSpan[]|TimeSpanConfig[]} timeRanges\n * @category Data\n */\n /**\n * Get/set time ranges, applies to the backing project's TimeRangeStore.\n * @member {Scheduler.model.TimeSpan[]} timeRanges\n * @accepts {Scheduler.model.TimeSpan[]|TimeSpanConfig[]}\n * @category Data\n */\n /**\n * Get/set the time ranges store instance or config object for {@link Scheduler.feature.TimeRanges} feature.\n * @member {Core.data.Store} timeRangeStore\n * @accepts {Core.data.Store|StoreConfig}\n * @category Data\n */\n /**\n * The time ranges store instance for {@link Scheduler.feature.TimeRanges} feature.\n * @config {Core.data.Store|StoreConfig} timeRangeStore\n * @category Data\n */\n set timeRanges(timeRanges) {\n this.project.timeRanges = timeRanges;\n }\n get timeRanges() {\n return this.project.timeRanges;\n }\n //endregion\n //region ResourceTimeRangeStore\n /**\n * Inline resource time ranges, will be loaded into an internally created store if\n * {@link Scheduler.feature.ResourceTimeRanges} is enabled.\n * @prp {Scheduler.model.ResourceTimeRangeModel[]} resourceTimeRanges\n * @accepts {Scheduler.model.ResourceTimeRangeModel[]|ResourceTimeRangeModelConfig[]}\n * @category Data\n */\n /**\n * Get/set the resource time ranges store instance for {@link Scheduler.feature.ResourceTimeRanges} feature.\n * @member {Scheduler.data.ResourceTimeRangeStore} resourceTimeRangeStore\n * @accepts {Scheduler.data.ResourceTimeRangeStore|ResourceTimeRangeStoreConfig}\n * @category Data\n */\n /**\n * Resource time ranges store instance or config object for {@link Scheduler.feature.ResourceTimeRanges} feature.\n * @config {Scheduler.data.ResourceTimeRangeStore|ResourceTimeRangeStoreConfig} resourceTimeRangeStore\n * @category Data\n */\n set resourceTimeRanges(resourceTimeRanges) {\n this.project.resourceTimeRanges = resourceTimeRanges;\n }\n get resourceTimeRanges() {\n return this.project.resourceTimeRanges;\n }\n //endregion\n //region Other functions\n onBeforeLoad({ params }) {\n this.applyStartEndParameters(params);\n }\n /**\n * Get events grouped by timeAxis ticks from resources array\n * @category Data\n * @param {Scheduler.model.ResourceModel[]} resources An array of resources to process. If not passed, all resources\n * will be used.\n * @param {Function} filterFn filter function to filter events if required. Optional.\n * @private\n */\n getResourcesEventsPerTick(resources, filterFn) {\n const\n { timeAxis, resourceStore } = this,\n eventsByTick = [];\n resources = resources || resourceStore.records;\n resources.forEach(resource => {\n resource.events.forEach(event => {\n if (!timeAxis.isTimeSpanInAxis(event) || (filterFn && !filterFn.call(this, { resource, event }))) {\n return;\n }\n // getTickFromDate may return float if event starts/ends in a middle of a tick\n let startTick = Math.floor(timeAxis.getTickFromDate(event.startDate)),\n endTick = Math.ceil(timeAxis.getTickFromDate(event.endDate));\n // if startDate/endDate of the event is out of timeAxis' bounds, use first/last tick id instead\n if (startTick == -1) {\n startTick = 0;\n }\n if (endTick === -1) {\n endTick = timeAxis.ticks.length;\n }\n do {\n if (!eventsByTick[startTick]) {\n eventsByTick[startTick] = [event];\n }\n else {\n eventsByTick[startTick].push(event);\n }\n } while (++startTick < endTick);\n });\n });\n return eventsByTick;\n }\n //endregion\n //region WidgetClass\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n //endregion\n};\n", "import Base from '../../../Core/Base.js';\nimport DomHelper from '../../../Core/helper/DomHelper.js';\nimport AsyncHelper from '../../../Core/helper/AsyncHelper.js';\n/**\n * @module Scheduler/view/mixin/SchedulerScroll\n */\nconst\n defaultScrollOptions = {\n block : 'nearest',\n edgeOffset : 20\n };\n/**\n * Functions for scrolling to events, dates etc.\n *\n * @mixin\n */\nexport default Target => class SchedulerScroll extends (Target || Base) {\n static get $name() {\n return 'SchedulerScroll';\n }\n //region Scroll to event\n /**\n * Scrolls an event record into the viewport.\n * If the resource store is a tree store, this method will also expand all relevant parent nodes to locate the event.\n *\n * This function is not applicable for events with multiple assignments, please use #scrollResourceEventIntoView instead.\n *\n * @param {Scheduler.model.EventModel} eventRecord the event record to scroll into view\n * @param {BryntumScrollOptions} [options] How to scroll.\n * @returns {Promise} A Promise which resolves when the scrolling is complete.\n * @async\n * @category Scrolling\n */\n async scrollEventIntoView(eventRecord, options = defaultScrollOptions) {\n const\n me = this,\n resources = eventRecord.resources || [eventRecord];\n if (resources.length > 1) {\n throw new Error('scrollEventIntoView() is not applicable for events with multiple assignments, please use scrollResourceEventIntoView() instead.');\n }\n if (!resources.length) {\n console.warn('You have asked to scroll to an event which is not assigned to a resource');\n }\n await me.scrollResourceEventIntoView(resources[0], eventRecord, options);\n }\n /**\n * Scrolls an assignment record into the viewport.\n *\n * If the resource store is a tree store, this method will also expand all relevant parent nodes\n * to locate the event.\n *\n * @param {Scheduler.model.AssignmentModel} assignmentRecord A resource record an event record is assigned to\n * @param {BryntumScrollOptions} [options] How to scroll.\n * @returns {Promise} A Promise which resolves when the scrolling is complete.\n * @category Scrolling\n */\n scrollAssignmentIntoView(assignmentRecord, ...args) {\n return this.scrollResourceEventIntoView(assignmentRecord.resource, assignmentRecord.event, ...args);\n }\n /**\n * Scrolls a resource event record into the viewport.\n *\n * If the resource store is a tree store, this method will also expand all relevant parent nodes\n * to locate the event.\n *\n * @param {Scheduler.model.ResourceModel} resourceRecord A resource record an event record is assigned to\n * @param {Scheduler.model.EventModel} eventRecord An event record to scroll into view\n * @param {BryntumScrollOptions} [options] How to scroll.\n * @returns {Promise} A Promise which resolves when the scrolling is complete.\n * @category Scrolling\n * @async\n */\n async scrollResourceEventIntoView(resourceRecord, eventRecord, options = defaultScrollOptions) {\n const\n me = this,\n { store, timeAxis } = me,\n eventStart = eventRecord.startDate,\n eventEnd = eventRecord.endDate,\n eventIsOutside = eventRecord.isScheduled && eventStart < me.timeAxis.startDate | ((eventEnd > me.timeAxis.endDate) << 1);\n if (arguments.length > 3) {\n options = arguments[3];\n }\n let el;\n if (options.edgeOffset == null) {\n options.edgeOffset = 20;\n }\n // Make sure event is within TimeAxis time span unless extendTimeAxis passed as false.\n // The EventEdit feature passes false because it must not mutate the TimeAxis.\n // Bitwise flag:\n // 1 === start is before TimeAxis start.\n // 2 === end is after TimeAxis end.\n if (eventIsOutside && options.extendTimeAxis !== false) {\n const currentTimeSpanRange = timeAxis.endDate - timeAxis.startDate;\n // Event is too wide, expand the range to encompass it.\n if (eventIsOutside === 3) {\n await me.setTimeSpan(\n new Date(eventStart.getTime() - currentTimeSpanRange / 2),\n new Date(eventEnd.getTime() + currentTimeSpanRange / 2)\n );\n }\n else if (me.infiniteScroll) {\n const\n { visibleDateRange } = me,\n visibleMS = visibleDateRange.endMS - visibleDateRange.startMS,\n // If event starts before time axis, scroll to a date one full viewport after target date\n // (reverse for an event starting after time axis), to allow a scroll animation\n sign = eventIsOutside & 1 ? 1 : -1;\n await me.setTimeSpan(\n new Date(eventStart.getTime() - currentTimeSpanRange / 2),\n new Date(eventStart.getTime() + currentTimeSpanRange / 2),\n {\n visibleDate : new Date(eventEnd.getTime() + (sign * visibleMS))\n }\n );\n }\n // Event is partially or wholly outside but will fit.\n // Move the TimeAxis to include it. That will maintain visual position.\n else {\n // Event starts before\n if (eventIsOutside & 1) {\n await me.setTimeSpan(\n new Date(eventStart),\n new Date(eventStart.getTime() + currentTimeSpanRange)\n );\n }\n // Event ends after\n else {\n await me.setTimeSpan(\n new Date(eventEnd.getTime() - currentTimeSpanRange),\n new Date(eventEnd)\n );\n }\n }\n }\n if (me.isDestroyed) {\n return;\n }\n if (store.tree) {\n // If resources are in a tree, ensure parents are expanded first\n await me.expandTo?.(resourceRecord);\n }\n if (store.isGrouped) {\n // If resources are grouped, ensure the relevant group is expanded first\n await store.expand(store.getGroupHeaderForRecord(resourceRecord));\n }\n // Handle nested events too\n if (me.features.nestedEvents?.enabled && eventRecord.parent && !eventRecord.parent.isRoot) {\n await me.scrollEventIntoView(eventRecord.parent);\n }\n // Establishing element to scroll to\n el = me.getElementFromEventRecord(eventRecord, resourceRecord);\n if (el) {\n // It's usually the event wrapper that holds focus\n if (!DomHelper.isFocusable(el)) {\n el = el.parentNode;\n }\n const scroller = me.timeAxisSubGrid.scrollable;\n // Scroll into view with animation and highlighting if needed.\n await scroller.scrollIntoView(el, options);\n if (me.isDestroyed) {\n return;\n }\n let element;\n do {\n element = me.getElementFromEventRecord(eventRecord, resourceRecord);\n // need to await a frame for event to be rendered again\n // (it seems it can be un-rendered during the scroll somehow)\n if (!element) {\n await AsyncHelper.animationFrame();\n }\n if (me.isDestroyed) {\n return;\n }\n } while (!element);\n }\n // If event is fully outside the range, and we are not allowed to extend\n // the range, then we cannot perform the operation.\n else if (eventIsOutside === 3 && options.extendTimeAxis === false) {\n console.warn('You have asked to scroll to an event which is outside the current view and extending timeaxis is disabled');\n }\n else if (!eventRecord.isOccurrence && me.eventStore.isFilteredOut(eventRecord)) {\n console.warn('You have asked to scroll to an event which is not available');\n }\n else if (eventRecord.isScheduled) {\n // Event scheduled but not rendered, scroll to calculated location\n await me.scrollUnrenderedEventIntoView(resourceRecord, eventRecord, options);\n }\n else {\n // Event not scheduled, just scroll resource row into view\n await me.scrollResourceIntoView(resourceRecord, options);\n }\n }\n /**\n * Scrolls an unrendered event into view. Internal function used from #scrollResourceEventIntoView.\n * @private\n * @category Scrolling\n */\n scrollUnrenderedEventIntoView(resourceRec, eventRec, options = defaultScrollOptions) {\n // We must only resolve when the event's element has been painted\n // *and* the scroll has fully completed.\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async resolve => {\n const\n me = this,\n scroller = me.timeAxisSubGrid.scrollable,\n scrollerViewport = scroller.viewport,\n { rowManager } = me,\n initialY = scroller.y;\n // Event may fall on a time not included by workingTime settings\n if (!scrollerViewport) {\n resolve();\n return;\n }\n let eventElement, delta, counter = 0;\n do {\n // don't risk with the infinite loop, better to throw\n if (++counter >= 50) {\n throw new Error(`Too many preparational scrolls during 'scrollIntoView' for event id = ${eventRec.id}`);\n }\n // note, that this box is only a rough estimation of the event position\n // it will be precise only in trivial cases\n // in general case, it indicates the direction in which we should scroll\n // and our best guess on the distance\n // this is because we don't know the row heights (even if `preCalculateHeightLimit` is used)\n // row height might change because of:\n // - horizontal scroll (predictable with certain effort)\n // - row height set in some column renderer (completely unpredictable)\n // so we scroll several times, until we have the event's element (meaning the event is rendered)\n const box = me.getResourceEventBox(eventRec, resourceRec);\n // Event may fall on a time not included by workingTime settings\n if (!box) {\n resolve();\n return;\n }\n // In case of subPixel position, scroll the whole pixel into view\n box.x = Math.ceil(box.x);\n box.y = Math.ceil(box.y);\n if (me.rtl) {\n // RTL scrolls in negative direction but coordinates are still LTR\n box.translate(-me.timeAxisViewModel.totalSize + scrollerViewport.width, 0);\n }\n // Note use of scroller.scrollLeft here. We need the natural DOM scrollLeft value\n // not the +ve X position along the scrolling axis.\n box.translate(scrollerViewport.x - scroller.scrollLeft, scrollerViewport.y - scroller.y);\n const instantScrollOptions = Object.assign({}, defaultScrollOptions);\n // only interested in the direction of initial jump\n if (delta === undefined) {\n delta = scroller.getDeltaTo(box, instantScrollOptions);\n }\n const scrollPromise = scroller.scrollIntoView(box, instantScrollOptions);\n await scrollPromise;\n if (scrollPromise.cancelled || me.isDestroyed) {\n resolve();\n return true;\n }\n await AsyncHelper.animationFrame();\n if (me.isDestroyed) {\n resolve();\n return true;\n }\n eventElement = me.getElementFromEventRecord(eventRec, resourceRec);\n } while (!eventElement);\n // now we have arrived to the local area of the event\n // probably we don't need to suspend/resume events on scroller, since DOM `scroll` event is fired\n // asynchronously, and we resume the events right away in the synchronous flow below\n scroller.suspendEvents();\n // position the scroller above/below of all rows, but not exceeding the initial Y position\n if (delta.yDelta >= 0) {\n scroller.y = Math.max(rowManager.topRow.top - scroller.viewport.height, initialY);\n }\n else {\n scroller.y = Math.min(rowManager.bottomRow.bottom, initialY);\n }\n // this is a quite important call, which fixes the internal scroller state after the scrolls above\n me.fixElementHeights();\n scroller.resumeEvents();\n // now make a final animated scroll, pretending we arrived there from the very 1st jump\n const scrollPromise2 = scroller.scrollIntoView(\n eventElement,\n Object.assign({}, options, { elementAfterScroll : () => me.getElementFromEventRecord(eventRec, resourceRec) })\n );\n await scrollPromise2;\n if (scrollPromise2.canceled || me.isDestroyed) {\n resolve();\n return true;\n }\n // final await for animation frame for the event element rendering to complete\n await AsyncHelper.animationFrame();\n resolve();\n });\n }\n /**\n * Scrolls the specified resource into view, works for both horizontal and vertical modes.\n * @param {Scheduler.model.ResourceModel} resourceRecord A resource record an event record is assigned to\n * @param {BryntumScrollOptions} [options] How to scroll.\n * @returns {Promise} A promise which is resolved when the scrolling has finished.\n * @category Scrolling\n */\n scrollResourceIntoView(resourceRecord, options = defaultScrollOptions) {\n if (this.isVertical) {\n return this.currentOrientation.scrollResourceIntoView(resourceRecord, options);\n }\n return this.scrollRowIntoView(resourceRecord, options);\n }\n //endregion\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "import Base from '../../../Core/Base.js';\n/**\n * @module Scheduler/view/mixin/SchedulerRegions\n */\n/**\n * Functions to get regions (bounding boxes) for scheduler, events etc.\n *\n * @mixin\n */\nexport default Target => class SchedulerRegions extends (Target || Base) {\n static get $name() {\n return 'SchedulerRegions';\n }\n //region Orientation dependent regions\n /**\n * Gets the region represented by the schedule and optionally only for a single resource. The view will ask the\n * scheduler for the resource availability by calling getResourceAvailability. By overriding that method you can\n * constrain events differently for different resources.\n * @param {Scheduler.model.ResourceModel} resourceRecord (optional) The resource record\n * @param {Scheduler.model.EventModel} eventRecord (optional) The event record\n * @returns {Core.helper.util.Rectangle} The region of the schedule\n */\n getScheduleRegion(resourceRecord, eventRecord, local = true, dateConstraints) {\n return this.currentOrientation.getScheduleRegion(...arguments);\n }\n /**\n * Gets the region, relative to the timeline view element, representing the passed resource and optionally just for a certain date interval.\n * @param {Scheduler.model.ResourceModel} resourceRecord The resource record\n * @param {Date} startDate A start date constraining the region\n * @param {Date} endDate An end date constraining the region\n * @returns {Core.helper.util.Rectangle} A Rectangle which encapsulates the resource time span\n */\n getResourceRegion(resourceRecord, startDate, endDate) {\n return this.currentOrientation.getRowRegion(...arguments);\n }\n //endregion\n //region ResourceEventBox\n getAssignmentEventBox(assignmentRecord, includesOutside) {\n return this.getResourceEventBox(assignmentRecord.event, assignmentRecord.resource, includesOutside);\n }\n /**\n * Get the region for a specified resources specified event.\n * @param {Scheduler.model.EventModel} eventRecord\n * @param {Scheduler.model.ResourceModel} resourceRecord\n * @param {Boolean} includeOutside Specify true to get boxes for events outside of the rendered zone in both\n * dimensions. This option is used when calculating dependency lines, and we need to include routes from events\n * which may be outside the rendered zone.\n * @returns {Core.helper.util.Rectangle}\n */\n getResourceEventBox(eventRecord, resourceRecord, includeOutside = false, roughly = false) {\n return this.currentOrientation.getResourceEventBox(...arguments);\n }\n //endregion\n //region Item box\n /**\n * Gets box for displayed item designated by the record. If several boxes are displayed for the given item\n * then the method returns all of them. Box coordinates are in view coordinate system.\n *\n * Boxes outside scheduling view timeaxis timespan and inside collapsed rows (if row defining store is a tree store)\n * will not be returned. Boxes outside scheduling view vertical visible area (i.e. boxes above currently visible\n * top row or below currently visible bottom row) will be calculated approximately.\n *\n * @param {Scheduler.model.EventModel} event\n * @returns {Object|Object[]}\n * @returns {Boolean} return.isPainted Whether the box was calculated for the rendered scheduled record or was\n * approximately calculated for the scheduled record outside of the current vertical view area.\n * @returns {Number} return.top\n * @returns {Number} return.bottom\n * @returns {Number} return.start\n * @returns {Number} return.end\n * @returns {'before'|'after'} return.relPos if the item is not rendered then provides a view relative\n * position one of 'before', 'after'\n * @internal\n */\n getItemBox(event, includeOutside = false) {\n return event.resources.map(resource => this.getResourceEventBox(event, resource, includeOutside));\n }\n //endregion\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "import Base from '../../../Core/Base.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\n/**\n * @module Scheduler/view/mixin/SchedulerState\n */\nconst copyProperties = [\n 'startDate',\n 'endDate',\n 'eventLayout',\n 'barMargin',\n 'mode',\n 'tickSize',\n 'eventColor',\n 'eventStyle',\n 'fillTicks'\n];\n/**\n * A Mixin for Scheduler that handles state. It serializes the following scheduler properties, in addition to what\n * is already stored by its superclass {@link Grid/view/mixin/GridState}:\n *\n * * startDate\n * * endDate\n * * eventLayout\n * * barMargin\n * * mode\n * * tickSize\n * * zoomLevel\n * * eventColor\n * * eventStyle\n * * fillTicks\n *\n * See {@link Grid.view.mixin.GridState} and {@link Core.mixin.State} for more information on state.\n *\n * @mixin\n */\nexport default Target => class SchedulerState extends (Target || Base) {\n static $name = 'SchedulerState';\n static configurable = {\n statefulEvents : ['dateRangeChange']\n };\n /**\n * Gets or sets scheduler's state. Check out {@link Scheduler.view.mixin.SchedulerState} mixin\n * and {@link Grid.view.mixin.GridState} for more details.\n * @member {Object} state\n * @property {Date} state.startDate\n * @property {Date} state.endDate\n * @property {String} state.eventLayout\n * @property {String} state.eventStyle\n * @property {String} state.eventColor\n * @property {Number} state.barMargin\n * @property {Number} state.tickSize\n * @property {Boolean} state.fillTicks\n * @property {Number} state.zoomLevel\n * @property {'horizontal'|'vertical'} state.mode\n * @property {Object[]} state.columns\n * @property {Boolean} state.readOnly\n * @property {Number} state.rowHeight\n * @property {Object} state.scroll\n * @property {Number} state.scroll.scrollLeft\n * @property {Number} state.scroll.scrollTop\n * @property {Array} state.selectedRecords\n * @property {String} state.selectedCell\n * @property {String} state.style\n * @property {Object} state.subGrids\n * @property {Object} state.store\n * @property {Sorter[]} state.store.sorters\n * @property {Grouper[]} state.store.groupers\n * @property {CollectionFilterConfig[]} state.store.filters\n * @property {String[]} state.store.collapsedGroups\n * @category State\n */\n /**\n * Get scheduler's current state for serialization. State includes rowHeight, headerHeight, readOnly, selectedCell,\n * selectedRecordId, column states and store state etc.\n * @returns {Object} State object to be serialized\n * @private\n */\n getState() {\n return ObjectHelper.copyProperties(super.getState(), this, copyProperties);\n }\n /**\n * Apply previously stored state.\n * @param {Object} state\n * @private\n */\n applyState(state) {\n this.suspendRefresh();\n let propsToCopy = copyProperties.slice();\n if (state?.eventLayout === 'layoutFn') {\n delete state.eventLayout;\n propsToCopy.splice(propsToCopy.indexOf('eventLayout'), 1);\n }\n // Zoom level will set tick size, no need to update model additionally\n if (state?.zoomLevelOptions?.width) {\n propsToCopy = propsToCopy.filter(p => p !== 'tickSize');\n }\n ObjectHelper.copyProperties(this, state, propsToCopy);\n super.applyState(state);\n this.resumeRefresh(true, false);\n }\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "import Base from '../../../Core/Base.js';\nimport Collection from '../../../Core/util/Collection.js';\nimport ArrayHelper from '../../../Core/helper/ArrayHelper.js';\n/**\n * @module Scheduler/view/mixin/EventSelection\n */\n/**\n * Mixin that tracks event or assignment selection by clicking on one or more events in the scheduler.\n * @mixin\n */\nexport default Target => class EventSelection extends (Target || Base) {\n static get $name() {\n return 'EventSelection';\n }\n //region Default config\n static get configurable() {\n return {\n /**\n * Configure as `true`, or set property to `true` to highlight dependent events as well when selecting an event.\n * @config {Boolean}\n * @default\n * @category Selection\n */\n highlightPredecessors : false,\n /**\n * Configure as `true`, or set property to `true` to highlight dependent events as well when selecting an event.\n * @config {Boolean}\n * @default\n * @category Selection\n */\n highlightSuccessors : false,\n /**\n * Configure as `true` to deselect a selected event upon click.\n * @config {Boolean}\n * @default\n * @category Selection\n */\n deselectOnClick : false,\n /**\n * Configure as `false` to preserve selection when clicking the empty schedule area.\n * @config {Boolean}\n * @default\n * @category Selection\n */\n deselectAllOnScheduleClick : true,\n /**\n * Set to `false` to not select the resource of the event when clicking an event bar.\n * @prp {Boolean}\n * @default\n * @category Selection\n */\n selectResourceOnEventNavigate : true,\n /**\n * Set to `false` to not select the row/resource when clicking the empty area in a time axis cell.\n * @prp {Boolean}\n * @default\n * @category Selection\n */\n selectResourceOnScheduleClick : true,\n /**\n * Collection to store selection.\n * @config {Core.util.Collection}\n * @private\n */\n selectedCollection : {}\n };\n }\n static get defaultConfig() {\n return {\n /**\n * Configure as `true` to allow `CTRL+click` to select multiple events in the scheduler.\n * @config {Boolean}\n * @category Selection\n */\n multiEventSelect : false,\n /**\n * Configure as `true`, or set property to `true` to disable event selection.\n * @config {Boolean}\n * @default\n * @category Selection\n */\n eventSelectionDisabled : false,\n /**\n * CSS class to add to selected events.\n * @config {String}\n * @default\n * @category CSS\n * @private\n */\n eventSelectedCls : 'b-sch-event-selected',\n /**\n * Configure as `true` to trigger `selectionChange` when removing a selected event/assignment.\n * @config {Boolean}\n * @default\n * @category Selection\n */\n triggerSelectionChangeOnRemove : false,\n /**\n * This flag controls whether Scheduler should preserve its selection of events when loading a new dataset\n * (if selected event ids are included in the newly loaded dataset).\n * @config {Boolean}\n * @default\n * @category Selection\n */\n maintainSelectionOnDatasetChange : true,\n /**\n * CSS class to add to other instances of a selected event, to highlight them.\n * @config {String}\n * @default\n * @category CSS\n * @private\n */\n eventAssignHighlightCls : 'b-sch-event-assign-selected'\n };\n }\n //endregion\n //region Events\n /**\n * Fired any time there is a change to the events selected in the Scheduler.\n * @event eventSelectionChange\n * @param {'select'|'deselect'|'update'|'clear'} action One of the actions 'select', 'deselect', 'update',\n * 'clear'\n * @param {Scheduler.model.EventModel[]} selected An array of the Events added to the selection.\n * @param {Scheduler.model.EventModel[]} deselected An array of the Event removed from the selection.\n * @param {Scheduler.model.EventModel[]} selection The new selection.\n */\n /**\n * Fired any time there is going to be a change to the events selected in the Scheduler.\n * Returning `false` prevents the change\n * @event beforeEventSelectionChange\n * @preventable\n * @param {String} action One of the actions 'select', 'deselect', 'update', 'clear'\n * @param {Scheduler.model.EventModel[]} selected An array of events that will be added to the selection.\n * @param {Scheduler.model.EventModel[]} deselected An array of events that will be removed from the selection.\n * @param {Scheduler.model.EventModel[]} selection The currently selected events, before applying `selected` and `deselected`.\n */\n /**\n * Fired any time there is a change to the assignments selected in the Scheduler.\n * @event assignmentSelectionChange\n * @param {'select'|'deselect'|'update'|'clear'} action One of the actions 'select', 'deselect', 'update',\n * 'clear'\n * @param {Scheduler.model.AssignmentModel[]} selected An array of the Assignments added to the selection.\n * @param {Scheduler.model.AssignmentModel[]} deselected An array of the Assignments removed from the selection.\n * @param {Scheduler.model.AssignmentModel[]} selection The new selection.\n */\n /**\n * Fired any time there is going to be a change to the assignments selected in the Scheduler.\n * Returning `false` prevents the change\n * @event beforeAssignmentSelectionChange\n * @preventable\n * @param {String} action One of the actions 'select', 'deselect', 'update', 'clear'\n * @param {Scheduler.model.EventModel[]} selected An array of assignments that will be added to the selection.\n * @param {Scheduler.model.EventModel[]} deselected An array of assignments that will be removed from the selection.\n * @param {Scheduler.model.EventModel[]} selection The currently selected assignments, before applying `selected` and `deselected`.\n */\n //endregion\n //region Init\n afterConstruct() {\n super.afterConstruct();\n this.navigator?.ion({\n navigate : 'onEventNavigate',\n thisObj : this\n });\n }\n //endregion\n //region Selected Collection\n changeSelectedCollection(selectedCollection) {\n if (!selectedCollection.isCollection) {\n selectedCollection = new Collection(selectedCollection);\n }\n return selectedCollection;\n }\n updateSelectedCollection(selectedCollection) {\n const me = this;\n // When sharing collection, only the owner should destroy it\n if (!selectedCollection.owner) {\n selectedCollection.owner = me;\n }\n // Fire row change events from onSelectedCollectionChange\n selectedCollection.ion({\n change : (...args) => me.project.deferUntilRepopulationIfNeeded(\n 'onSelectedCollectionChange',\n (...args) => !me.isDestroying && me.onSelectedCollectionChange(...args),\n args\n ),\n // deferring this handler breaks the UI\n beforeSplice : 'onBeforeSelectedCollectionSplice',\n thisObj : me\n });\n }\n get selectedCollection() {\n return this._selectedCollection;\n }\n getActionType(selection, selected, deselected, before) {\n if ((before && selection.length > 0 && deselected.length === selection.length && selected.length === 0) ||\n (!before && selection.length === 0 && deselected.length > 0)) {\n return 'clear';\n }\n return (selected.length > 0 && deselected.length > 0) ? 'update' : (selected.length > 0\n ? 'select' : 'deselect');\n }\n //endregion\n //region Modify selection\n getEventsFromAssignments(assignments) {\n return ArrayHelper.unique(assignments.map(assignment => assignment.event));\n }\n /**\n * The {@link Scheduler.model.EventModel events} which are selected.\n * @property {Scheduler.model.EventModel[]}\n * @category Selection\n */\n get selectedEvents() {\n return this.getEventsFromAssignments(this.selectedCollection.values);\n }\n set selectedEvents(events) {\n // Select all assignments\n const assignments = [];\n events = ArrayHelper.asArray(events);\n events?.forEach(event => {\n if (this.isEventSelectable(event) !== false) {\n if (event.isOccurrence) {\n event.assignments.forEach(as => {\n assignments.push(this.assignmentStore.getOccurrence(as, event));\n });\n }\n else {\n assignments.push(...event.assignments);\n }\n }\n });\n // Replace the entire selected collection with the new record set\n this.selectedCollection.splice(0, this.selectedCollection.count, assignments);\n }\n /**\n * The {@link Scheduler.model.AssignmentModel events} which are selected.\n * @property {Scheduler.model.AssignmentModel[]}\n * @category Selection\n */\n get selectedAssignments() {\n return this.selectedCollection.values;\n }\n set selectedAssignments(assignments) {\n // Replace the entire selected collection with the new record set\n this.selectedCollection.splice(0, this.selectedCollection.count, assignments || []);\n }\n /**\n * Returns `true` if the {@link Scheduler.model.EventModel event} is selected.\n * @param {Scheduler.model.EventModel} event The event\n * @returns {Boolean} Returns `true` if the event is selected\n * @category Selection\n */\n isEventSelected(event) {\n const { selectedCollection } = this;\n return Boolean(selectedCollection.count && selectedCollection.includes(event.assignments));\n }\n /**\n * A template method (empty by default) allowing you to control if an event can be selected or not.\n *\n * ```javascript\n * new Scheduler({\n * isEventSelectable(event) {\n * return event.startDate >= Date.now();\n * }\n * })\n * ```\n *\n * This selection process is applicable to calendar too:\n *\n * ```javascript\n * new Calendar({\n * isEventSelectable(event) {\n * return event.startDate >= Date.now();\n * }\n * })\n * ```\n *\n * @param {Scheduler.model.EventModel} event The event record\n * @returns {Boolean} true if event can be selected, otherwise false\n * @prp {Function}\n * @category Selection\n */\n isEventSelectable(event) {}\n /**\n * Returns `true` if the {@link Scheduler.model.AssignmentModel assignment} is selected.\n * @param {Scheduler.model.AssignmentModel} assignment The assignment\n * @returns {Boolean} Returns `true` if the assignment is selected\n * @category Selection\n */\n isAssignmentSelected(assignment) {\n return this.selectedCollection.includes(assignment);\n }\n /**\n * Selects the passed {@link Scheduler.model.EventModel event} or {@link Scheduler.model.AssignmentModel assignment}\n * *if it is not selected*. Selecting events results in all their assignments being selected.\n * @param {Scheduler.model.EventModel|Scheduler.model.AssignmentModel} eventOrAssignment The event or assignment to select\n * @param {Boolean} [preserveSelection] Pass `true` to preserve any other selected events or assignments\n * @category Selection\n */\n select(eventOrAssignment, preserveSelection = false) {\n if (eventOrAssignment.isAssignment) {\n this.selectAssignment(eventOrAssignment, preserveSelection);\n }\n else {\n this.selectEvent(eventOrAssignment, preserveSelection);\n }\n }\n /**\n * Selects the passed {@link Scheduler.model.EventModel event} *if it is not selected*. Selecting an event will\n * select all its assignments.\n * @param {Scheduler.model.EventModel} event The event to select\n * @param {Boolean} [preserveSelection] Pass `true` to preserve any other selected events\n * @category Selection\n */\n selectEvent(event, preserveSelection = false) {\n // If the event is already selected, this is a no-op.\n // In this case, selection must not be cleared even in the absence of preserveSelection\n if (!this.isEventSelected(event)) {\n this.selectEvents([event], preserveSelection);\n }\n }\n /**\n * Selects the passed {@link Scheduler.model.AssignmentModel assignment} *if it is not selected*.\n * @param {Scheduler.model.AssignmentModel} assignment The assignment to select\n * @param {Boolean} [preserveSelection] Pass `true` to preserve any other selected assignments\n * @param {Event} [event] If this method was invoked as a result of a user action, this is the DOM event that triggered it\n * @category Selection\n */\n selectAssignment(assignment, preserveSelection = false, event) {\n // If the event is already selected, this is a no-op.\n // In this case, selection must not be cleared even in the absence of preserveSelection\n if (!this.isAssignmentSelected(assignment)) {\n preserveSelection ? this.selectedCollection.add(assignment) : this.selectedAssignments = assignment;\n }\n }\n /**\n * Deselects the passed {@link Scheduler.model.EventModel event} or {@link Scheduler.model.AssignmentModel assignment}\n * *if it is selected*.\n * @param {Scheduler.model.EventModel|Scheduler.model.AssignmentModel} eventOrAssignment The event or assignment to deselect.\n * @category Selection\n */\n deselect(eventOrAssignment) {\n if (eventOrAssignment.isAssignment) {\n this.deselectAssignment(eventOrAssignment);\n }\n else {\n this.deselectEvent(eventOrAssignment);\n }\n }\n /**\n * Deselects the passed {@link Scheduler.model.EventModel event} *if it is selected*.\n * @param {Scheduler.model.EventModel} event The event to deselect.\n * @category Selection\n */\n deselectEvent(event) {\n if (this.isEventSelected(event)) {\n this.selectedCollection.remove(...event.assignments);\n }\n }\n /**\n * Deselects the passed {@link Scheduler.model.AssignmentModel assignment} *if it is selected*.\n * @param {Scheduler.model.AssignmentModel} assignment The assignment to deselect\n * @param {Event} [event] If this method was invoked as a result of a user action, this is the DOM event that triggered it\n * @category Selection\n */\n deselectAssignment(assignment) {\n if (this.isAssignmentSelected(assignment)) {\n this.selectedCollection.remove(assignment);\n }\n }\n /**\n * Adds {@link Scheduler.model.EventModel events} to the selection.\n * @param {Scheduler.model.EventModel[]} events Events to be selected\n * @param {Boolean} [preserveSelection] Pass `true` to preserve any other selected events\n * @category Selection\n */\n selectEvents(events, preserveSelection = false) {\n if (preserveSelection) {\n const assignments = (events.reduce((assignments, event) => {\n if (this.isEventSelectable(event) !== false) {\n assignments.push(...event.assignments);\n }\n return assignments;\n }, []));\n this.selectedCollection.add(assignments);\n }\n else {\n this.selectedEvents = events;\n }\n }\n /**\n * Removes {@link Scheduler.model.EventModel events} from the selection.\n * @param {Scheduler.model.EventModel[]} events Events or assignments to be deselected\n * @category Selection\n */\n deselectEvents(events) {\n this.selectedCollection.remove(events.reduce((assignments, event) => {\n assignments.push(...event.assignments);\n return assignments;\n }, []));\n }\n /**\n * Adds {@link Scheduler.model.AssignmentModel assignments} to the selection.\n * @param {Scheduler.model.AssignmentModel[]} assignments Assignments to be selected\n * @category Selection\n */\n selectAssignments(assignments) {\n this.selectedCollection.add(assignments);\n }\n /**\n * Removes {@link Scheduler.model.AssignmentModel assignments} from the selection.\n * @param {Scheduler.model.AssignmentModel[]} assignments Assignments to be deselected\n * @category Selection\n */\n deselectAssignments(assignments) {\n this.selectedCollection.remove(assignments);\n }\n /**\n * Deselects all {@link Scheduler.model.EventModel events} and {@link Scheduler.model.AssignmentModel assignments}.\n * @category Selection\n */\n clearEventSelection() {\n this.selectedAssignments = [];\n }\n //endregion\n //region Events\n /**\n * Responds to mutations of the underlying selection Collection.\n * Keeps the UI synced, eventSelectionChange and assignmentSelectionChange event is fired when `me.silent` is falsy.\n * @private\n */\n onBeforeSelectedCollectionSplice({ toAdd, toRemove, index }) {\n const\n me = this,\n selection = me._selectedCollection.values,\n selected = toAdd,\n deselected = toRemove > 0 ? selection.slice(index, toRemove + index) : [],\n action = me.getActionType(selection, selected, deselected, true);\n if (toAdd.length === 0 && toRemove === 0) {\n return;\n }\n if (me.trigger('beforeEventSelectionChange', {\n action,\n selection : me.getEventsFromAssignments(selection) || [],\n selected : me.getEventsFromAssignments(selected) || [],\n deselected : me.getEventsFromAssignments(deselected) || []\n }) === false) {\n return false;\n }\n if (me.trigger('beforeAssignmentSelectionChange', {\n action,\n selection,\n selected,\n deselected\n }) === false) {\n return false;\n }\n }\n onSelectedCollectionChange({ added, removed }) {\n const\n me = this,\n selection = me.selectedAssignments,\n selected = added || [],\n deselected = removed || [];\n function updateSelection(assignmentRecord, select) {\n const eventRecord = assignmentRecord.event;\n if (eventRecord) {\n const\n returnWrapper = false,\n checkReleased = true,\n { eventAssignHighlightCls } = me,\n element = me.getElementFromAssignmentRecord(assignmentRecord, returnWrapper, checkReleased);\n me.currentOrientation.toggleCls(assignmentRecord, me.eventSelectedCls, select, returnWrapper, checkReleased);\n eventAssignHighlightCls && me.getElementsFromEventRecord(eventRecord, null, returnWrapper, checkReleased).forEach(el => {\n if (el !== element) {\n const otherAssignmentRecord = me.resolveAssignmentRecord(el, checkReleased);\n me.currentOrientation.toggleCls(otherAssignmentRecord, eventAssignHighlightCls, select, returnWrapper, checkReleased);\n // When selection changes, we toggle classes also for released events above, to make sure the\n // element & lastDomConfig matches (to not get incorrect state later). But we do not want to\n // animate that (cant be seen anyway)\n if (select && !el.parentElement.isReleased) {\n // Need to force a reflow to get the highlightning animation triggered\n el.style.animation = 'none';\n el.offsetHeight;\n el.style.animation = '';\n }\n el.classList.toggle(eventAssignHighlightCls, select);\n }\n });\n }\n }\n deselected.forEach(record => updateSelection(record, false));\n selected.forEach(record => updateSelection(record, true));\n if (me.highlightSuccessors || me.highlightPredecessors) {\n me.highlightLinkedEvents(me.selectedEvents);\n }\n // To be able to restore selection after reloading resources (which might lead to regenerated assignments in\n // the single assignment scenario, so cannot rely on records or ids)\n me.$selectedAssignments = selection.map(assignment => ({\n eventId : assignment.eventId,\n resourceId : assignment.resourceId\n }));\n if (!me.silent) {\n const action = this.getActionType(selection, selected, deselected);\n me.trigger('assignmentSelectionChange', {\n action,\n selection,\n selected,\n deselected\n });\n me.trigger('eventSelectionChange', {\n action,\n selection : me.selectedEvents,\n selected : me.getEventsFromAssignments(selected),\n deselected : me.getEventsFromAssignments(deselected)\n });\n }\n }\n /**\n * Assignment change listener to remove events from selection which are no longer in the assignments.\n * @private\n */\n onAssignmentChange(event) {\n super.onAssignmentChange(event);\n const\n me = this,\n { action, records : assignments } = event;\n me.silent = !me.triggerSelectionChangeOnRemove;\n if (action === 'remove') {\n me.deselectAssignments(assignments);\n }\n else if (action === 'removeall' && !me.eventStore.isSettingData) {\n me.clearEventSelection();\n }\n else if (action === 'dataset' && me.$selectedAssignments) {\n if (!me.maintainSelectionOnDatasetChange) {\n me.clearEventSelection();\n }\n else {\n const newAssignments = me.$selectedAssignments.map(selector =>\n assignments.find(a =>\n a.eventId === selector.eventId &&\n a.resourceId === selector.resourceId\n )\n );\n me.selectedAssignments = ArrayHelper.clean(newAssignments);\n }\n }\n me.silent = false;\n }\n onInternalEventStoreChange({ source, action, records }) {\n // Setting empty event dataset cannot be handled in onAssignmentChange above, no assignments might be affected\n if (!source.isResourceTimeRangeStore && action === 'dataset' && !records.length) {\n this.clearEventSelection();\n }\n super.onInternalEventStoreChange(...arguments);\n }\n /**\n * Mouse listener to update selection.\n * @private\n */\n onAssignmentSelectionClick(event, clickedRecord) {\n const me = this;\n // Multi selection: CTRL means preserve selection, just add or remove the event.\n // Single selection: CTRL deselects already selected event\n if (me.isAssignmentSelected(clickedRecord)) {\n if (me.deselectOnClick || event.ctrlKey) {\n me.deselectAssignment(clickedRecord, me.multiEventSelect, event);\n }\n }\n else if (this.isEventSelectable(clickedRecord.event) !== false) {\n me.selectAssignment(clickedRecord, event.ctrlKey && me.multiEventSelect, event);\n }\n }\n /**\n * Navigation listener to update selection.\n * @private\n */\n onEventNavigate({ event, item }) {\n if (!this.eventSelectionDisabled) {\n const assignment = item && (item.nodeType === Element.ELEMENT_NODE ? this.resolveAssignmentRecord(item) : item);\n if (assignment) {\n this.onAssignmentSelectionClick(event, assignment);\n }\n // The click was not an event or assignment\n else if (this.deselectAllOnScheduleClick) {\n this.clearEventSelection();\n }\n }\n }\n changeHighlightSuccessors(value) {\n return this.changeLinkedEvents(value);\n }\n changeHighlightPredecessors(value) {\n return this.changeLinkedEvents(value);\n }\n changeLinkedEvents(value) {\n const me = this;\n if (value) {\n me.highlighted = me.highlighted || new Set();\n me.highlightLinkedEvents(me.selectedEvents);\n }\n else if (me.highlighted) {\n me.highlightLinkedEvents();\n }\n return value;\n }\n // Function that highlights/unhighlights events in a dependency chain\n highlightLinkedEvents(eventRecords = []) {\n const\n me = this,\n {\n highlighted,\n eventStore\n } = me,\n dependenciesFeature = me.features.dependencies;\n // Unhighlight previously highlighted records\n highlighted.forEach(eventRecord => {\n if (!eventRecords.includes(eventRecord)) {\n eventRecord.meta.highlight = false;\n highlighted.delete(eventRecord);\n if (eventStore.includes(eventRecord)) {\n eventRecord.dependencies.forEach(dep => dependenciesFeature.unhighlight(dep, 'b-highlight'));\n }\n }\n });\n eventRecords.forEach(eventRecord => {\n const toWalk = [eventRecord];\n // Collect all events along the dependency chain\n while (toWalk.length) {\n const record = toWalk.pop();\n highlighted.add(record);\n if (me.highlightSuccessors) {\n record.outgoingDeps.forEach(outgoing => {\n dependenciesFeature.highlight(outgoing, 'b-highlight');\n !highlighted.has(outgoing.toEvent) && toWalk.push(outgoing.toEvent);\n });\n }\n if (me.highlightPredecessors) {\n record.incomingDeps.forEach(incoming => {\n dependenciesFeature.highlight(incoming, 'b-highlight');\n !highlighted.has(incoming.fromEvent) && toWalk.push(incoming.fromEvent);\n });\n }\n }\n // Highlight them\n highlighted.forEach(record => record.meta.highlight = true);\n });\n // Toggle flag on schedulers element, to fade others in or out\n me.element.classList.toggle('b-highlighting', eventRecords.length > 0);\n me.refreshWithTransition();\n }\n onEventDataGenerated(renderData) {\n if (this.highlightSuccessors || this.highlightPredecessors) {\n renderData.cls['b-highlight'] = renderData.eventRecord.meta.highlight;\n }\n super.onEventDataGenerated(renderData);\n }\n updateProject(project, old) {\n this.clearEventSelection();\n super.updateProject(project, old);\n }\n //endregion\n doDestroy() {\n this._selectedCollection?.owner === this && this._selectedCollection.destroy();\n super.doDestroy();\n }\n //region Getters/Setters\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n //endregion\n};\n", "import Base from '../../../Core/Base.js';\nimport Navigator from '../../../Core/helper/util/Navigator.js';\nimport Delayable from '../../../Core/mixin/Delayable.js';\nimport Location from '../../../Grid/util/Location.js';\n/**\n * @module Scheduler/view/mixin/EventNavigation\n */\nconst\n preventDefault = e => e.preventDefault(),\n isArrowKey = {\n ArrowRight : 1,\n ArrowLeft : 1,\n ArrowUp : 1,\n ArrowDown : 1\n },\n animate100 = {\n animate : 100\n },\n emptyObject = Object.freeze({});\n/**\n * Mixin that tracks event or assignment selection by clicking on one or more events in the scheduler.\n * @mixin\n */\nexport default Target => class EventNavigation extends Delayable(Target || Base) {\n static get $name() {\n return 'EventNavigation';\n }\n //region Default config\n static get configurable() {\n return {\n /**\n * A config object to use when creating the {@link Core.helper.util.Navigator}\n * to use to perform keyboard navigation in the timeline.\n * @config {NavigatorConfig}\n * @default\n * @category Misc\n * @internal\n */\n navigator : {\n allowCtrlKey : true,\n scrollSilently : true,\n keys : {\n Space : 'onEventSpaceKey',\n Enter : 'onEventEnterKey',\n Delete : 'onDeleteKey',\n Backspace : 'onDeleteKey',\n ArrowUp : 'onArrowUpKey',\n ArrowDown : 'onArrowDownKey',\n Escape : 'onEscapeKey',\n // These are processed by GridNavigation's handlers\n Tab : 'onTab',\n 'SHIFT+Tab' : 'onShiftTab'\n }\n },\n isNavigationKey : {\n ArrowDown : 1,\n ArrowUp : 1,\n ArrowLeft : 1,\n ArrowRight : 1\n }\n };\n }\n static get defaultConfig() {\n return {\n /**\n * A CSS class name to add to focused events.\n * @config {String}\n * @default\n * @category CSS\n * @private\n */\n focusCls : 'b-active',\n /**\n * Allow using [Delete] and [Backspace] to remove events/assignments\n * @config {Boolean}\n * @default\n * @category Misc\n */\n enableDeleteKey : true,\n // Number in milliseconds to buffer handlers execution. See `Delayable.throttle` function docs.\n onDeleteKeyBuffer : 500,\n navigatePreviousBuffer : 200,\n navigateNextBuffer : 200,\n testConfig : {\n onDeleteKeyBuffer : 1\n }\n };\n }\n //endregion\n //region Events\n /**\n * Fired when a user gesture causes the active item to change.\n * @event navigate\n * @param {Event} event The browser event which instigated navigation. May be a click or key or focus event.\n * @param {HTMLElement|null} item The newly active item, or `null` if focus moved out.\n * @param {HTMLElement|null} oldItem The previously active item, or `null` if focus is moving in.\n */\n //endregion\n construct(config) {\n const me = this;\n me.isInTimeAxis = me.isInTimeAxis.bind(me);\n me.onDeleteKey = me.throttle(me.onDeleteKey, me.onDeleteKeyBuffer, me);\n super.construct(config);\n }\n changeNavigator(navigator) {\n const me = this;\n me.getConfig('subGridConfigs');\n return new Navigator(me.constructor.mergeConfigs({\n ownerCmp : me,\n target : me.timeAxisSubGridElement,\n processEvent : me.processEvent,\n itemSelector : `.${me.eventCls}-wrap`,\n focusCls : me.focusCls,\n navigatePrevious : me.throttle(me.navigatePrevious, { delay : me.navigatePreviousBuffer, throttled : preventDefault }),\n navigateNext : me.throttle(me.navigateNext, { delay : me.navigateNextBuffer, throttled : preventDefault })\n }, navigator));\n }\n doDestroy() {\n this.navigator.destroy();\n super.doDestroy();\n }\n isInTimeAxis(record) {\n // If event is hidden by workingTime configs, horizontal mapper would raise a flag on instance meta\n // We still need to check if time span is included in axis\n return !record.instanceMeta(this).excluded && this.timeAxis.isTimeSpanInAxis(record);\n }\n onElementKeyDown(keyEvent) {\n const\n me = this,\n { navigator } = me;\n // If we're focused in the time axis, and *not* on an event, then ENTER means\n // jump down into the first visible assignment in the cell.\n if (me.focusedCell?.rowIndex !== -1 && me.focusedCell?.column === me.timeAxisColumn && !keyEvent.target.closest(navigator.itemSelector) && keyEvent.key === 'Enter') {\n const firstAssignment = me.getFirstVisibleAssignment();\n if (firstAssignment) {\n me.navigateTo(firstAssignment, {\n uiEvent : keyEvent\n });\n return false;\n }\n }\n else {\n super.onElementKeyDown?.(keyEvent);\n }\n }\n getFirstVisibleAssignment(location = this.focusedCell) {\n const\n me = this,\n {\n currentOrientation,\n rowManager,\n eventStore\n } = me;\n if (me.isHorizontal) {\n let renderedEvents = currentOrientation.rowMap.get(rowManager.getRow(location.rowIndex));\n if (renderedEvents?.length) {\n return renderedEvents[0]?.elementData.assignmentRecord;\n }\n else {\n renderedEvents = currentOrientation.resourceMap.get(location.id)?.eventsData;\n if (renderedEvents?.length) {\n // When events are gathered from resource, we need to check they're available\n return renderedEvents.filter(e => eventStore.isAvailable(e.eventRecord))[0]?.assignmentRecord;\n }\n }\n }\n else {\n const\n firstResource = [...currentOrientation.resourceMap.values()][0],\n renderedEvents = firstResource && Object.values(firstResource);\n if (renderedEvents?.length) {\n return renderedEvents.filter(e => eventStore.isAvailable(e.renderData.eventRecord))[0].renderData.assignmentRecord;\n }\n }\n }\n onGridBodyFocusIn(focusEvent) {\n const isGridCellFocus = focusEvent.target.closest(this.focusableSelector);\n // Event navigation only has a say when navigation is inside the TimeAxisSubGrid\n if (this.timeAxisSubGridElement.contains(focusEvent.target)) {\n const\n me = this,\n { navigationEvent } = me,\n { target } = focusEvent,\n eventFocus = target.closest(me.navigator.itemSelector),\n destinationCell = eventFocus ? me.normalizeCellContext({\n rowIndex : me.isVertical ? 0\n : me.resourceStore.indexOf(me.resolveResourceRecord(target)),\n column : me.timeAxisColumn,\n target\n }) : new Location(target);\n // Don't take over what the event navigator does if it's doing event navigation.\n // Just silently cache our actionable location.\n if (eventFocus) {\n const { _focusedCell } = me;\n me._focusedCell = destinationCell;\n me.onCellNavigate?.(me, _focusedCell, destinationCell, navigationEvent, true);\n return;\n }\n // Depending on how we got here, try to focus the first event in the cell *if we're in a cell*.\n if (isGridCellFocus && (!navigationEvent || isArrowKey[navigationEvent.key])) {\n const firstAssignment = me.getFirstVisibleAssignment(destinationCell);\n if (firstAssignment) {\n me.navigateTo(firstAssignment, {\n // Only change scroll if focus came from key press\n scrollIntoView : Boolean(navigationEvent && navigationEvent.type !== 'mousedown'),\n uiEvent : navigationEvent || focusEvent\n });\n return;\n }\n }\n }\n // Grid-level focus movement, let superclass handle it.\n if (isGridCellFocus) {\n super.onGridBodyFocusIn(focusEvent);\n }\n }\n /*\n * Override of GridNavigation#focusCell method to handle the TimeAxisColumn.\n * Not needed until we implement full keyboard accessibility.\n */\n accessibleFocusCell(cellSelector, options) {\n const me = this;\n cellSelector = me.normalizeCellContext(cellSelector);\n if (cellSelector.columnId !== me.timeAxisColumn.id) {\n return super.focusCell(cellSelector, options);\n }\n }\n // Interface method to extract the navigated to record from a populated 'navigate' event.\n // Gantt, Scheduler and Calendar handle event differently, adding different properties to it.\n // This method is meant to be overridden to return correct target from event\n normalizeTarget(event) {\n return event.assignmentRecord;\n }\n getPrevious(assignmentRecord, isDelete) {\n const\n me = this,\n { resourceStore } = me,\n { eventSorter } = me.currentOrientation,\n // start/end dates are required to limit time span to look at in case recurrence feature is enabled\n { startDate, endDate } = me.timeAxis,\n eventRecord = assignmentRecord.event,\n resourceEvents = me.eventStore\n .getEvents({\n resourceRecord : assignmentRecord.resource,\n startDate,\n endDate\n })\n .filter(this.isInTimeAxis)\n .sort(eventSorter);\n let resourceRecord = assignmentRecord.resource,\n previousEvent = resourceEvents[resourceEvents.indexOf(eventRecord) - 1];\n // At first event for resource, traverse up the resource store.\n if (!previousEvent) {\n // If we are deleting an event, skip other instances of the event which we may encounter\n // due to multi-assignment.\n for (\n let rowIdx = resourceStore.indexOf(resourceRecord) - 1;\n (!previousEvent || (isDelete && previousEvent === eventRecord)) && rowIdx >= 0;\n rowIdx--\n ) {\n resourceRecord = resourceStore.getAt(rowIdx);\n const events = me.eventStore\n .getEvents({\n resourceRecord,\n startDate,\n endDate\n })\n .filter(me.isInTimeAxis)\n .sort(eventSorter);\n previousEvent = events.length && events[events.length - 1];\n }\n }\n return me.assignmentStore.getAssignmentForEventAndResource(previousEvent, resourceRecord);\n }\n navigatePrevious(keyEvent) {\n const\n me = this,\n previousAssignment = me.getPrevious(me.normalizeTarget(keyEvent));\n keyEvent.preventDefault();\n if (previousAssignment) {\n if (!keyEvent.ctrlKey) {\n me.clearEventSelection();\n }\n return me.navigateTo(previousAssignment, {\n uiEvent : keyEvent\n });\n }\n // No previous event/task, fall back to Grid's handling of this gesture\n return me.doGridNavigation(keyEvent);\n }\n getNext(assignmentRecord, isDelete) {\n const\n me = this,\n { resourceStore } = me,\n { eventSorter } = me.currentOrientation,\n // start/end dates are required to limit time span to look at in case recurrence feature is enabled\n { startDate, endDate } = me.timeAxis,\n eventRecord = assignmentRecord.event,\n resourceEvents = me.eventStore\n .getEvents({\n resourceRecord : assignmentRecord.resource,\n // start/end are required to limit time\n startDate,\n endDate\n })\n .filter(this.isInTimeAxis)\n .sort(eventSorter);\n let resourceRecord = assignmentRecord.resource,\n nextEvent = resourceEvents[resourceEvents.indexOf(eventRecord) + 1];\n // At last event for resource, traverse down the resource store\n if (!nextEvent) {\n // If we are deleting an event, skip other instances of the event which we may encounter\n // due to multi-assignment.\n for (let rowIdx = resourceStore.indexOf(resourceRecord) + 1; (!nextEvent || (isDelete && nextEvent === eventRecord)) && rowIdx < resourceStore.count; rowIdx++) {\n resourceRecord = resourceStore.getAt(rowIdx);\n const events = me.eventStore\n .getEvents({\n resourceRecord,\n startDate,\n endDate\n })\n .filter(me.isInTimeAxis)\n .sort(eventSorter);\n nextEvent = events[0];\n }\n }\n return me.assignmentStore.getAssignmentForEventAndResource(nextEvent, resourceRecord);\n }\n navigateNext(keyEvent) {\n const\n me = this,\n nextAssignment = me.getNext(me.normalizeTarget(keyEvent));\n keyEvent.preventDefault();\n if (nextAssignment) {\n if (!keyEvent.ctrlKey) {\n me.clearEventSelection();\n }\n return me.navigateTo(nextAssignment, {\n uiEvent : keyEvent\n });\n }\n // No next event/task, fall back to Grid's handling of this gesture\n return me.doGridNavigation(keyEvent);\n }\n doGridNavigation(keyEvent) {\n if (!keyEvent.handled && keyEvent.key.indexOf('Arrow') === 0) {\n this[`navigate${keyEvent.key.substring(5)}ByKey`](keyEvent);\n }\n }\n async navigateTo(targetAssignment, {\n scrollIntoView = true,\n uiEvent = {}\n } = emptyObject) {\n const\n me = this,\n { navigator } = me,\n { skipScrollIntoView } = navigator;\n if (targetAssignment) {\n if (scrollIntoView) {\n // No key processing during scroll\n navigator.disabled = true;\n await me.scrollAssignmentIntoView(targetAssignment, {\n extendTimeAxis : me.infiniteScroll,\n ...animate100\n });\n navigator.disabled = false;\n }\n else {\n navigator.skipScrollIntoView = true;\n }\n // Panel can be destroyed before promise is resolved\n // Perform a sanity check to make sure element is still in the DOM (syncIdMap actually).\n if (!me.isDestroyed && this.getElementFromAssignmentRecord(targetAssignment)) {\n me.activeAssignment = targetAssignment;\n navigator.skipScrollIntoView = skipScrollIntoView;\n navigator.trigger('navigate', {\n event : uiEvent,\n item : me.getElementFromAssignmentRecord(targetAssignment).closest(navigator.itemSelector)\n });\n }\n }\n }\n set activeAssignment(assignmentRecord) {\n const assignmentEl = this.getElementFromAssignmentRecord(assignmentRecord, true);\n if (assignmentEl) {\n this.navigator.activeItem = assignmentEl;\n }\n }\n get activeAssignment() {\n const { activeItem } = this.navigator;\n if (activeItem) {\n return this.resolveAssignmentRecord(activeItem);\n }\n }\n get previousActiveEvent() {\n const { previousActiveItem } = this.navigator;\n if (previousActiveItem) {\n return this.resolveEventRecord(previousActiveItem);\n }\n }\n processEvent(keyEvent) {\n const\n me = this,\n eventElement = keyEvent.target.closest(me.eventSelector);\n if (!me.navigator.disabled && eventElement) {\n keyEvent.assignmentRecord = me.resolveAssignmentRecord(eventElement);\n keyEvent.eventRecord = me.resolveEventRecord(eventElement);\n keyEvent.resourceRecord = me.resolveResourceRecord(eventElement);\n }\n return keyEvent;\n }\n onDeleteKey(keyEvent) {\n const me = this;\n if (!me.readOnly && me.enableDeleteKey) {\n const records = me.eventStore.usesSingleAssignment ? me.selectedEvents : me.selectedAssignments;\n me.removeEvents(records.filter(r => !r.readOnly));\n }\n }\n onArrowUpKey(keyEvent) {\n this.focusCell({\n rowIndex : this.focusedCell.rowIndex - 1,\n column : this.timeAxisColumn\n });\n keyEvent.handled = true;\n }\n onArrowDownKey(keyEvent) {\n if (this.focusedCell.rowIndex < this.resourceStore.count - 1) {\n this.focusCell({\n rowIndex : this.focusedCell.rowIndex + 1,\n column : this.timeAxisColumn\n });\n keyEvent.handled = true;\n }\n }\n onEscapeKey(keyEvent) {\n if (!keyEvent.target.closest('.b-dragging')) {\n this.focusCell({\n rowIndex : this.focusedCell.rowIndex,\n column : this.timeAxisColumn\n });\n keyEvent.handled = true;\n }\n }\n onEventSpaceKey(keyEvent) {\n // Empty, to be chained by features\n }\n onEventEnterKey(keyEvent) {\n // Empty, to be chained by features\n }\n get isActionableLocation() {\n // Override from grid if the Navigator's location is an event (or task if we're in Gantt)\n // Being focused on a task/event means that it's *not* actionable. It's not valid to report\n // that we're \"inside\" the cell in a TimeLine, so ESC must not attempt to focus the cell.\n if (!this.navigator.activeItem) {\n return super.isActionableLocation;\n }\n }\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "/**\n * @module Scheduler/view/mixin/TransactionalFeatureMixin\n */\n/**\n * This mixin declares a common config to disable feature transactions in components which support scheduling engine:\n * SchedulerPro and Gantt.\n * @mixin\n */\nexport default Target => class TransactionalFeatureMixin extends Target {\n static get $name() {\n return 'TransactionalFeatureMixin';\n }\n static configurable = {\n /**\n * When true, some features will start a project transaction, blocking the project queue, suspending\n * store events and preventing UI from updates. It behaves similar to\n * {@link Grid.column.Column#config-instantUpdate} set to `false`.\n * Set `false` to not use project queue.\n * @config {Boolean}\n * @internal\n * @default\n */\n enableTransactionalFeatures : false,\n testConfig : {\n enableTransactionalFeatures : false\n }\n };\n get widgetClass() {}\n /**\n * Returns `true` if queue is supported and enabled\n * @member {Boolean}\n * @internal\n * @readonly\n */\n get transactionalFeaturesEnabled() {\n return this.enableTransactionalFeatures && this.project && !!this.project._queue;\n }\n get isTransactionalFeatureActive() {\n return this._featureTransactionId != null;\n }\n construct(...config) {\n super.construct(...config);\n this.ion({\n beforeFeatureTransactionStart : ({ id }) => this._featureTransactionId = id,\n featureTransactionComplete : () => delete this._featureTransactionId\n });\n }\n afterFeatureTransaction(callback) {\n if (!this.transactionalFeaturesEnabled) {\n return;\n }\n // If transaction in progress, we need to schedule call to after transaction ends\n if (this.isTransactionalFeatureActive) {\n this.once('featureTransactionComplete', callback);\n }\n else {\n callback.call(this);\n }\n }\n};\n", "/**\n * @module Scheduler/crud/mixin/CrudManagerView\n */\nimport LoadMaskable from '../../../Core/mixin/LoadMaskable.js';\nimport Mask from '../../../Core/widget/Mask.js';\n/**\n * Mixin to track Crud Manager requests to the server and mask the view during them. For masking, it\n * uses the {@link Core.mixin.LoadMaskable#config-loadMask} and {@link Core.mixin.LoadMaskable#config-syncMask}\n * properties.\n *\n * @mixin\n * @extends Core/mixin/LoadMaskable\n */\nexport default Target => class CrudManagerView extends Target.mixin(LoadMaskable) {\n static get $name() {\n return 'CrudManagerView';\n }\n static config = {\n clearMaskDelay : null,\n // Test environment may be in a poll wait for mask to disappear.\n // Hiding the mask immediately, before the load sequence ends releases it too early\n testConfig : {\n clearMaskDelay : 0\n }\n };\n //region Init\n afterConstruct() {\n super.afterConstruct();\n const { crudManager, project } = this;\n if (this.loadMask && (crudManager || project).isCrudManagerLoading) {\n // Show loadMask if crud manager is already loading\n this.onCrudManagerLoadStart();\n }\n }\n //endregion\n /**\n * Applies the {@link Scheduler.crud.mixin.CrudManagerView#config-syncMask} as the\n * {@link Core.widget.Widget#config-masked mask} for this widget.\n * @internal\n */\n applySyncMask() {\n const { syncMask } = this;\n if (syncMask) {\n this.masked = Mask.mergeConfigs(this.loadMaskDefaults, syncMask);\n }\n }\n /**\n * Hooks up crud manager listeners\n * @private\n * @category Store\n */\n bindCrudManager(crudManager) {\n this.detachListeners('crudManager');\n let additionalListeners = {};\n // TaskBoard does not need suspending/resuming refreshes\n if (!this.isTaskBoardBase) {\n additionalListeners = {\n beforeApplyResponse : 'onCrudManagerBeforeApplyResponse',\n applyResponse : 'onCrudManagerApplyResponse',\n beforeLoadCrudManagerData : 'onCrudManagerBeforeLoadCrudManagerData',\n loadCrudManagerData : 'onCrudManagerLoadCrudManagerData'\n };\n }\n crudManager?.ion({\n name : 'crudManager',\n loadStart : 'onCrudManagerLoadStart',\n beforeSend : 'onCrudManagerBeforeSend',\n load : 'onCrudManagerLoad',\n loadCanceled : 'onCrudManagerLoadCanceled',\n syncStart : 'onCrudManagerSyncStart',\n sync : 'onCrudManagerSync',\n syncCanceled : 'onCrudManagerSyncCanceled',\n requestFail : 'onCrudManagerRequestFail',\n responseReceived : 'onAjaxTransportResponseReceived',\n ...additionalListeners,\n thisObj : this\n });\n }\n onCrudManagerBeforeSend({ params }) {\n this.applyStartEndParameters?.(params);\n }\n onCrudManagerLoadStart() {\n // Show loadMask before crud manager starts loading\n this.applyLoadMask();\n this.toggleEmptyText?.();\n }\n onCrudManagerSyncStart() {\n this.applySyncMask();\n }\n onCrudManagerBeforeApplyResponse() {\n // Prevent redrawing for each applied change, instead do it once after all changes are applied\n this.suspendRefresh();\n }\n onCrudManagerApplyResponse() {\n // Repaint rows once after applying changes\n this.resumeRefresh(true);\n }\n onCrudManagerBeforeLoadCrudManagerData() {\n // Suspend when app calls loadCrudManagerData() directly\n if (!this.crudManager.applyingLoadResponse) {\n this.suspendRefresh();\n }\n }\n async onCrudManagerLoadCrudManagerData() {\n if (!this.crudManager.applyingLoadResponse) {\n await this.project.commitAsync();\n !this.isDestroyed && this.resumeRefresh(true);\n }\n }\n onCrudManagerRequestFinalize(successful = true, requestType, response) {\n const me = this;\n if (successful) {\n me.toggleEmptyText?.();\n }\n else {\n if (!me.masked) {\n me.applyLoadMask();\n }\n me.applyMaskError(\n `
\n
${me.L(`L{GridBase.${requestType}FailedMessage}`)}
\n ${response && response.message ? `
${me.L('L{CrudManagerView.serverResponseLabel}')} ${response.message}
` : ''}\n
`);\n }\n }\n onCrudManagerLoadCanceled() {\n this.onCrudManagerRequestFinalize(true, 'load');\n }\n onCrudManagerSyncCanceled() {\n this.onCrudManagerRequestFinalize(true, 'sync');\n }\n onCrudManagerLoad() {\n this.onCrudManagerRequestFinalize(true, 'load');\n }\n onCrudManagerSync() {\n this.onCrudManagerRequestFinalize(true, 'sync');\n }\n onCrudManagerRequestFail({ requestType, response }) {\n this.onCrudManagerRequestFinalize(false, requestType, response);\n }\n onAjaxTransportResponseReceived() {\n const me = this;\n if (me.clearMaskDelay != null) {\n me.setTimeout(() => me.masked = null, me.clearMaskDelay);\n }\n else {\n me.masked = null;\n }\n }\n get widgetClass() {}\n};\n", "/**\n * @module Scheduler/data/mixin/AttachToProjectMixin\n */\n/**\n * Mixin that calls the target class `attachToProject()` function when a new project is assigned to Scheduler/Gantt.\n *\n * @mixin\n */\nexport default Target => class AttachToProjectMixin extends Target {\n static get $name() {\n return 'AttachToProjectMixin';\n }\n async afterConstruct() {\n super.afterConstruct();\n const\n me = this,\n projectHolder = (me.client || me.grid),\n { project } = projectHolder;\n projectHolder.projectSubscribers?.push(me);\n // Attach to already existing stores\n if (project) {\n me.attachToProject(project);\n me.attachToResourceStore(project.resourceStore);\n me.attachToEventStore(project.eventStore);\n me.attachToAssignmentStore(project.assignmentStore);\n me.attachToDependencyStore(project.dependencyStore);\n me.attachToCalendarManagerStore(project.calendarManagerStore);\n }\n }\n /**\n * Override to take action when the project instance is replaced.\n *\n * @param {Scheduler.model.ProjectModel} project\n */\n attachToProject(project) {\n this.detachListeners('project');\n this._project = project;\n super.attachToProject?.(project);\n }\n detachFromProject(project) {\n super.detachFromProject?.(project);\n }\n /**\n * Override to take action when the EventStore instance is replaced, either from being replaced on the project or\n * from assigning a new project.\n *\n * @param {Scheduler.data.EventStore} store\n */\n attachToEventStore(store) {\n this.detachListeners('eventStore');\n super.attachToEventStore?.(store);\n }\n /**\n * Override to take action when the ResourceStore instance is replaced, either from being replaced on the project\n * or from assigning a new project.\n *\n * @param {Scheduler.data.ResourceStore} store\n */\n attachToResourceStore(store) {\n this.detachListeners('resourceStore');\n super.attachToResourceStore?.(store);\n }\n /**\n * Override to take action when the AssignmentStore instance is replaced, either from being replaced on the project\n * or from assigning a new project.\n *\n * @param {Scheduler.data.AssignmentStore} store\n */\n attachToAssignmentStore(store) {\n this.detachListeners('assignmentStore');\n super.attachToAssignmentStore?.(store);\n }\n /**\n * Override to take action when the DependencyStore instance is replaced, either from being replaced on the project\n * or from assigning a new project.\n *\n * @param {Scheduler.data.DependencyStore} store\n */\n attachToDependencyStore(store) {\n this.detachListeners('dependencyStore');\n super.attachToDependencyStore?.(store);\n }\n /**\n * Override to take action when the CalendarManagerStore instance is replaced, either from being replaced on the\n * project or from assigning a new project.\n *\n * @param {Core.data.Store} store\n */\n attachToCalendarManagerStore(store) {\n this.detachListeners('calendarManagerStore');\n super.attachToCalendarManagerStore?.(store);\n }\n get project() {\n return this._project;\n }\n get calendarManagerStore() {\n return this.project.calendarManagerStore;\n }\n get assignmentStore() {\n return this.project.assignmentStore;\n }\n get resourceStore() {\n return this.project.resourceStore;\n }\n get eventStore() {\n return this.project.eventStore;\n }\n get dependencyStore() {\n return this.project.dependencyStore;\n }\n};\n", "import BrowserHelper from '../../../Core/helper/BrowserHelper.js';\nimport DomSync from '../../../Core/helper/DomSync.js';\nimport Base from '../../../Core/Base.js';\nimport Model from '../../../Core/data/Model.js';\nimport ArrayHelper from '../../../Core/helper/ArrayHelper.js';\nimport DomHelper from '../../../Core/helper/DomHelper.js';\nimport Rectangle from '../../../Core/helper/util/Rectangle.js';\nimport DateHelper from '../../../Core/helper/DateHelper.js';\nimport AttachToProjectMixin from '../../data/mixin/AttachToProjectMixin.js';\n/**\n * @module Scheduler/view/orientation/HorizontalRendering\n */\n/**\n * @typedef HorizontalRenderData\n * @property {Scheduler.model.EventModel} eventRecord\n * @property {Date} start Span start\n * @property {Date} end Span end\n * @property {String} rowId Id of the resource row\n * @property {DomConfig[]} children Child elements\n * @property {Number} startMS Wrap element start in milliseconds\n * @property {Number} endMS Span Wrap element end in milliseconds\n * @property {Number} durationMS Wrap duration in milliseconds (not just a difference between start and end)\n * @property {Number} innerStartMS Actual event start in milliseconds\n * @property {Number} innerEndMS Actual event end in milliseconds\n * @property {Number} innerDurationMS Actual event duration in milliseconds\n * @property {Boolean} startsOutsideView True if span starts before time axis start\n * @property {Boolean} endsOutsideView True if span ends after time axis end\n * @property {Number} left Absolute left coordinate of the wrap element\n * @property {Number} width\n * @property {Number} top Absolute top coordinate of the wrap element (can be changed by layout)\n * @property {Number} height\n * @property {Boolean} clippedStart True if start is clipped\n * @property {Boolean} clippedEnd True if end is clipped\n * @private\n */\nconst\n releaseEventActions = {\n releaseElement : 1, // Not used at all at the moment\n reuseElement : 1 // Used by some other element\n },\n renderEventActions = {\n newElement : 1,\n reuseOwnElement : 1,\n reuseElement : 1\n },\n MAX_WIDTH = 9999999,\n heightEventSorter = ({ startDateMS : lhs }, { startDateMS : rhs }) => lhs - rhs,\n chronoFields = {\n startDate : 1,\n endDate : 1,\n duration : 1\n };\nfunction getStartEnd(scheduler, eventRecord, useEnd, fieldName, useEventBuffer) {\n // Must use Model.get in order to get latest values in case we are inside a batch.\n // EventResize changes the endDate using batching to enable a tentative change\n // via the batchedUpdate event which is triggered when changing a field in a batch.\n // Fall back to accessor if propagation has not populated date fields.\n const\n { timeAxis } = scheduler,\n date = eventRecord.isBatchUpdating && !useEventBuffer ? eventRecord.get(fieldName) : eventRecord[fieldName],\n hasBatchedChange = eventRecord.hasBatchedChange?.(fieldName),\n // fillTicks shouldn't be used during resizing for changing date for smooth animation.\n // correct date will be applied after resize, when `isResizing` will be falsy\n useTickDates = scheduler.fillTicks && (!eventRecord.meta?.isResizing || !hasBatchedChange);\n if (useTickDates) {\n let tick = timeAxis.getTickFromDate(date);\n if (tick >= 0) {\n // If date matches a tick start/end, use the earlier tick\n if (useEnd && tick === Math.round(tick) && tick > 0) {\n tick--;\n }\n const\n tickIndex = Math.floor(tick),\n tickRecord = timeAxis.getAt(tickIndex);\n return tickRecord[fieldName].getTime();\n }\n }\n return date?.getTime();\n}\n/**\n * Handles event rendering in Schedulers horizontal mode. Reacts to project/store changes to keep the UI up to date.\n *\n * @internal\n */\nexport default class HorizontalRendering extends Base.mixin(AttachToProjectMixin) {\n //region Config & Init\n static $name = 'HorizontalRendering';\n static get configurable() {\n return {\n /**\n * Amount of pixels to extend the current visible range at both ends with when deciding which events to\n * render. Only applies when using labels or for milestones\n * @config {Number}\n * @default\n */\n bufferSize : 150,\n verticalBufferSize : 150\n };\n }\n static get properties() {\n return {\n // Map with event DOM configs, keyed by resource id\n resourceMap : new Map(),\n // Map with visible events DOM configs, keyed by row instance\n rowMap : new Map(),\n eventConfigs : [],\n // Flag to avoid transitioning on first refresh\n isFirstRefresh : true,\n toDrawOnProjectRefresh : new Set(),\n toDrawOnDataReady : new Set()\n };\n }\n construct(scheduler) {\n const me = this;\n me.client = me.scheduler = scheduler;\n me.eventSorter = me.eventSorter.bind(scheduler);\n me.scrollBuffer = scheduler.scrollBuffer;\n // Catch scroll before renderers are called\n scheduler.scrollable.ion({\n scroll : 'onEarlyScroll',\n prio : 1,\n thisObj : me\n });\n scheduler.rowManager.ion({\n name : 'rowManager',\n renderDone : 'onRenderDone',\n removeRows : 'onRemoveRows',\n translateRow : 'onTranslateRow',\n offsetRows : 'onOffsetRows',\n beforeRowHeight : 'onBeforeRowHeightChange',\n thisObj : me\n });\n super.construct({});\n }\n init() {}\n updateVerticalBufferSize() {\n const { rowManager } = this.scheduler;\n if (this.scheduler.isPainted) {\n // Refresh rows when vertical buffer size changes to trigger event repaint. Required for the export feature.\n rowManager.renderRows(rowManager.rows);\n }\n }\n //endregion\n //region Region, dates & coordinates\n get visibleDateRange() {\n return this._visibleDateRange;\n }\n getDateFromXY(xy, roundingMethod, local, allowOutOfRange = false) {\n const { scheduler } = this;\n let coord = xy[0];\n if (!local) {\n coord = this.translateToScheduleCoordinate(coord);\n }\n coord = scheduler.getRtlX(coord);\n return scheduler.timeAxisViewModel.getDateFromPosition(coord, roundingMethod, allowOutOfRange);\n }\n translateToScheduleCoordinate(x) {\n const\n { scheduler } = this,\n { scrollable } = scheduler.timeAxisSubGrid;\n let result = x - scheduler.timeAxisSubGridElement.getBoundingClientRect().left - globalThis.scrollX;\n // Because we use getBoundingClientRect's left, we have to adjust for page scroll.\n // The vertical counterpart uses the _bodyRectangle which was created with that adjustment.\n if (scheduler.rtl) {\n result += scrollable.maxX - Math.abs(scheduler.scrollLeft);\n }\n else {\n result += scheduler.scrollLeft;\n }\n return result;\n }\n translateToPageCoordinate(x) {\n const\n { scheduler } = this,\n { scrollable } = scheduler.timeAxisSubGrid;\n let result = x + scheduler.timeAxisSubGridElement.getBoundingClientRect().left;\n if (scheduler.rtl) {\n result -= scrollable.maxX - Math.abs(scheduler.scrollLeft);\n }\n else {\n result -= scheduler.scrollLeft;\n }\n return result;\n }\n /**\n * Gets the region, relative to the page, represented by the schedule and optionally only for a single resource.\n * This method will call getDateConstraints to allow for additional resource/event based constraints. By overriding\n * that method you can constrain events differently for different resources.\n * @param {Scheduler.model.ResourceModel} [resourceRecord] (optional) The row record\n * @param {Scheduler.model.EventModel} [eventRecord] (optional) The event record\n * @returns {Core.helper.util.Rectangle} The region of the schedule\n */\n getScheduleRegion(resourceRecord, eventRecord, local = true, dateConstraints, stretch = false) {\n const\n me = this,\n { scheduler } = me,\n { timeAxisSubGridElement, timeAxis } = scheduler,\n { start, end } = (!stretch || resourceRecord) && scheduler.getResourceMarginObject(resourceRecord) || { start : 0, end : 0 };\n let region;\n if (resourceRecord) {\n const\n row = scheduler.getRowById(resourceRecord.id),\n eventElement = eventRecord && scheduler.getElementsFromEventRecord(eventRecord, resourceRecord)[0];\n // If the row is in rendered space, use its rectangle.\n // If not, use the calculated rectangle. This will be adjusted as we respond\n // to change events\n region = row ? Rectangle.from(row.getElement('normal'), timeAxisSubGridElement) : scheduler.getRecordCoords(resourceRecord, true);\n if (eventElement) {\n const eventRegion = Rectangle.from(eventElement, timeAxisSubGridElement);\n region.y = eventRegion.y;\n region.bottom = eventRegion.bottom;\n }\n else {\n region.y = region.y + start;\n region.bottom = region.bottom - end;\n }\n }\n else {\n // The coordinate space needs to be sorted out here!\n region = Rectangle.from(timeAxisSubGridElement).moveTo(null, 0);\n region.width = timeAxisSubGridElement.scrollWidth;\n region.y = region.y + start;\n region.bottom = region.bottom - end;\n }\n const\n taStart = timeAxis.startDate,\n taEnd = timeAxis.endDate;\n dateConstraints = (dateConstraints?.start && dateConstraints) || scheduler.getDateConstraints?.(resourceRecord, eventRecord) || {\n start : taStart,\n end : taEnd\n };\n let startX = scheduler.getCoordinateFromDate(dateConstraints.start ? DateHelper.max(taStart, dateConstraints.start) : taStart),\n endX = scheduler.getCoordinateFromDate(dateConstraints.end ? DateHelper.min(taEnd, dateConstraints.end) : taEnd);\n if (!local) {\n startX = me.translateToPageCoordinate(startX);\n endX = me.translateToPageCoordinate(endX);\n }\n region.left = Math.min(startX, endX);\n region.right = Math.max(startX, endX);\n return region;\n }\n /**\n * Gets the Region, relative to the timeline view element, representing the passed row and optionally just for a\n * certain date interval.\n * @param {Core.data.Model} rowRecord The row record\n * @param {Date} startDate A start date constraining the region\n * @param {Date} endDate An end date constraining the region\n * @returns {Core.helper.util.Rectangle} The Rectangle which encapsulates the row\n */\n getRowRegion(rowRecord, startDate, endDate) {\n const\n { scheduler } = this,\n { timeAxis } = scheduler,\n row = scheduler.getRowById(rowRecord.id);\n // might not be rendered\n if (!row) {\n return null;\n }\n const\n taStart = timeAxis.startDate,\n taEnd = timeAxis.endDate,\n start = startDate ? DateHelper.max(taStart, startDate) : taStart,\n end = endDate ? DateHelper.min(taEnd, endDate) : taEnd,\n startX = scheduler.getCoordinateFromDate(start),\n endX = scheduler.getCoordinateFromDate(end, true, true),\n y = row.top,\n x = Math.min(startX, endX),\n bottom = y + row.offsetHeight;\n return new Rectangle(x, y, Math.max(startX, endX) - x, bottom - y);\n }\n getResourceEventBox(eventRecord, resourceRecord, includeOutside, roughly = false) {\n const\n { scheduler } = this,\n resourceData = this.resourceMap.get(resourceRecord.id);\n let eventLayout = null,\n approx = false;\n if (resourceData) {\n eventLayout = resourceData.eventsData.find(d => d.eventRecord === eventRecord);\n }\n // Outside of view, layout now if supposed to be included\n if (!eventLayout) {\n eventLayout = this.getTimeSpanRenderData(\n eventRecord,\n resourceRecord,\n { viewport : true, timeAxis : includeOutside }\n );\n approx = true;\n }\n if (eventLayout) {\n // Event layout is relative to row, need to make to absolute before returning\n const\n // Event might be outside visible area, estimate the height (for managedEventSizing = false case)\n boxHeight = eventLayout.height ?? scheduler.getResourceLayoutSettings(resourceRecord).contentHeight,\n rowBox = scheduler.rowManager.getRecordCoords(resourceRecord, true, roughly),\n absoluteTop = eventLayout.top + rowBox.top,\n box = new Rectangle(eventLayout.left, absoluteTop, eventLayout.width, boxHeight);\n // Flag informing other parts of the code that this box is approximated\n box.layout = !approx;\n box.rowTop = rowBox.top;\n box.rowBottom = rowBox.bottom;\n box.resourceId = resourceRecord.id;\n return box;\n }\n return null;\n }\n //endregion\n //region Element <-> Record mapping\n resolveRowRecord(elementOrEvent) {\n const\n me = this,\n { scheduler } = me,\n element = elementOrEvent.nodeType ? elementOrEvent : elementOrEvent.target,\n // Fix for FF on Linux having text nodes as event.target\n el = element.nodeType === Element.TEXT_NODE ? element.parentElement : element,\n eventNode = el.closest(scheduler.eventSelector);\n if (eventNode) {\n return me.resourceStore.getById(eventNode.dataset.resourceId);\n }\n // When resourceNonWorkingTime.enableMouseEvents is set to true, and the current element is a resource non working time range,\n // in order to get the corresponding resource row, we need to read from data-resource-id attribute.\n // That's because element has not a .b-grid-row as parent when enableMouseEvents is set to true.\n if (!el.closest('.b-grid-row') && el.dataset.resourceId) {\n return me.resourceStore.getById(el.dataset.resourceId);\n }\n return scheduler.getRecordFromElement(el);\n }\n //endregion\n //region Project\n attachToProject(project) {\n super.attachToProject(project);\n this.refreshAllWhenReady = true;\n // Perform a full clear when replacing the project, to not leave any references to old project in DOM\n if (!this.scheduler.isConfiguring) {\n this.clearAll({ clearDom : true });\n }\n project?.ion({\n name : 'project',\n refresh : 'onProjectRefresh',\n commitFinalized : 'onProjectCommitFinalized',\n thisObj : this\n });\n }\n onProjectCommitFinalized() {\n const { scheduler, toDrawOnDataReady, project } = this;\n // Only update the UI immediately if we are visible\n if (scheduler.isVisible) {\n if (scheduler.isPainted && !scheduler.refreshSuspended) {\n // If this is a timezone commit, we got here from a store dataset\n // We need to do a full refresh\n if (!toDrawOnDataReady.size && project.timeZone != null && project.ignoreRecordChanges) {\n project.resourceStore.forEach(r => toDrawOnDataReady.add(r.id));\n }\n if (toDrawOnDataReady.size) {\n this.clearResources(toDrawOnDataReady);\n this.refreshResources(toDrawOnDataReady);\n }\n toDrawOnDataReady.clear();\n }\n }\n // Otherwise wait till next time we get painted (shown, or a hidden ancestor shown)\n else {\n scheduler.whenVisible('refreshRows');\n }\n }\n onProjectRefresh({ isCalculated, isInitialCommit }) {\n const\n me = this,\n { scheduler, toDrawOnProjectRefresh } = me;\n // Only update the UI immediately if we are visible\n if (scheduler.isVisible) {\n if (scheduler.isPainted && !scheduler.isConfiguring && !scheduler.refreshSuspended) {\n // Either refresh all rows (on for example dataset or when delayed calculations are finished)\n if (me.refreshAllWhenReady || (isInitialCommit && isCalculated)) {\n scheduler.calculateAllRowHeights(true);\n const { rowManager } = scheduler;\n // Rows rendered? Refresh\n if (rowManager.topRow) {\n me.clearAll();\n // Refresh only if it won't be refreshed elsewhere (SchedulerStore#onProjectRefresh())\n if (!scheduler.refreshAfterProjectRefresh) {\n // If refresh was suspended when replacing the dataset in a scrolled view we might end up with a\n // topRow outside of available range -> reset it. Call renderRows() to mimic what normally happens\n // when refresh is not suspended\n if (rowManager.topRow.dataIndex >= scheduler.store.count) {\n scheduler.renderRows(false);\n }\n else {\n // Don't transition first refresh / early render\n scheduler.refreshWithTransition(false, !me.isFirstRefresh && isCalculated && !isInitialCommit);\n }\n }\n me.isFirstRefresh = false;\n }\n // No rows yet, reinitialize (happens if initial project empty and then non empty project assigned)\n else {\n rowManager.reinitialize();\n }\n me.refreshAllWhenReady = false;\n }\n // Or only affected rows (if any)\n else if (toDrawOnProjectRefresh.size) {\n me.refreshResources(toDrawOnProjectRefresh);\n }\n toDrawOnProjectRefresh.clear();\n }\n }\n // Otherwise wait till next time we get painted (shown, or a hidden ancestor shown)\n else {\n scheduler.whenVisible('refresh', scheduler, [true]);\n }\n }\n //endregion\n //region AssignmentStore\n attachToAssignmentStore(assignmentStore) {\n this.refreshAllWhenReady = true;\n super.attachToAssignmentStore(assignmentStore);\n if (assignmentStore) {\n assignmentStore.ion({\n name : 'assignmentStore',\n changePreCommit : 'onAssignmentStoreChange',\n refreshPreCommit : 'onAssignmentStoreRefresh',\n thisObj : this\n });\n }\n }\n onAssignmentStoreChange({ source, action, records : assignmentRecords = [], replaced, changes }) {\n const\n me = this,\n { scheduler } = me,\n resourceIds = new Set(assignmentRecords.flatMap(assignmentRecord => ([\n assignmentRecord.resourceId,\n // Also include any linked resources (?. twice since resource might not be resolved and point to id)\n ...assignmentRecord.resource?.$links?.map(link => link.id) ?? []\n ])));\n // Ignore assignment changes caused by removing resources, the remove will redraw things anyway\n // Also ignore case when resource id is changed. In this case row will be refreshed by the grid\n if (me.resourceStore.isRemoving || me.resourceStore.isChangingId) {\n return;\n }\n switch (action) {\n // These operations will invalidate the graph, need to draw later\n case 'dataset': {\n // Ignore dataset when using single assignment mode\n if (!me.eventStore.usesSingleAssignment) {\n if (resourceIds.size) {\n me.refreshResourcesWhenReady(resourceIds);\n }\n else {\n me.clearAll();\n scheduler.refreshWithTransition();\n }\n }\n return;\n }\n case 'add':\n case 'remove':\n case 'updateMultiple':\n me.refreshResourcesWhenReady(resourceIds);\n return;\n case 'removeall':\n me.refreshAllWhenReady = true;\n return;\n case 'replace':\n // Gather resources from both the old record and the new one\n replaced.forEach(([oldAssignment, newAssignment]) => {\n resourceIds.add(oldAssignment.resourceId);\n resourceIds.add(newAssignment.resourceId);\n });\n // And refresh them\n me.refreshResourcesWhenReady(resourceIds);\n return;\n // These operations won't invalidate the graph, redraw now\n case 'filter':\n me.clearAll();\n scheduler.calculateAllRowHeights(true);\n scheduler.refreshWithTransition();\n return;\n case 'update': {\n if ('eventId' in changes || 'resourceId' in changes || 'id' in changes) {\n // When reassigning, clear old resource also\n if ('resourceId' in changes) {\n resourceIds.add(changes.resourceId.oldValue);\n }\n // When chaining stores in single assignment mode, we might not be the project store\n if (source === scheduler.project.assignmentStore) {\n me.refreshResourcesOnDataReady(resourceIds);\n }\n // Refresh directly when we are not\n else {\n me.refreshResources(resourceIds);\n }\n }\n break;\n }\n case 'clearchanges': {\n const { added, modified, removed } = changes;\n // If modified records appear in the clearchanges action we need to refresh entire view\n // because we have not enough information about previously assigned resource\n if (modified.length) {\n scheduler.refreshWithTransition();\n }\n else {\n added.forEach(r => resourceIds.add(r.resourceId));\n removed.forEach(r => resourceIds.add(r.resourceId));\n me.refreshResourcesOnDataReady(resourceIds);\n }\n }\n }\n }\n onAssignmentStoreRefresh({ action, records }) {\n if (action === 'batch') {\n this.clearAll();\n this.scheduler.refreshWithTransition();\n }\n }\n //endregion\n //region EventStore\n attachToEventStore(eventStore) {\n this.refreshAllWhenReady = true;\n super.attachToEventStore(eventStore);\n if (eventStore) {\n eventStore.ion({\n name : 'eventStore',\n addConfirmed : 'onEventStoreAddConfirmed',\n refreshPreCommit : 'onEventStoreRefresh',\n thisObj : this\n });\n }\n }\n onEventStoreAddConfirmed({ record }) {\n for (const element of this.client.getElementsFromEventRecord(record)) {\n element.classList.remove('b-iscreating');\n }\n }\n onEventStoreRefresh({ action }) {\n if (action === 'batch') {\n const { scheduler } = this;\n if (scheduler.isEngineReady && scheduler.isPainted) {\n this.clearAll();\n scheduler.refreshWithTransition();\n }\n }\n }\n onEventStoreChange({ action, records : eventRecords = [], record, replaced, changes, source }) {\n const\n me = this,\n { scheduler } = me,\n isResourceTimeRange = source.isResourceTimeRangeStore,\n resourceIds = new Set();\n if (!scheduler.isPainted) {\n return;\n }\n eventRecords.forEach(eventRecord => {\n // Update all resource rows to which this event is assigned *if* the resourceStore\n // contains that resource (We could have filtered the resourceStore)\n const renderedEventResources = eventRecord.$linkedResources?.filter(r => me.resourceStore.includes(r));\n // When rendering a Gantt project, the project model also passes through here -> no `resources`\n renderedEventResources?.forEach(resourceRecord => resourceIds.add(resourceRecord.id));\n });\n if (isResourceTimeRange) {\n switch (action) {\n // - dataset cant pass through same path as events, which relies on project being invalidated. and\n // resource time ranges does not pass through engine\n // - removeall also needs special path, since no resources to redraw will be collected\n case 'removeall':\n case 'dataset':\n me.clearAll();\n scheduler.refreshWithTransition();\n return;\n }\n me.refreshResources(resourceIds);\n }\n else {\n switch (action) {\n // No-ops\n case 'batch': // Handled elsewhere, don't want it to clear again\n case 'sort': // Order in EventStore does not matter, so these actions are no-ops\n case 'group':\n case 'move':\n return;\n case 'remove':\n // Remove is a no-op since assignment will also be removed\n return;\n case 'clearchanges':\n me.clearAll();\n scheduler.refreshWithTransition();\n return;\n case 'dataset': {\n me.clearAll();\n // This is mainly for chained stores, where data is set from main store without project being\n // invalidated. Nothing to wait for, refresh now\n if (scheduler.isEngineReady) {\n scheduler.refreshWithTransition();\n }\n else {\n me.refreshAllWhenReady = true;\n }\n return;\n }\n case 'add':\n case 'updateMultiple':\n // Just refresh below\n break;\n case 'replace':\n // Gather resources from both the old record and the new one\n replaced.forEach(([, newEvent]) => {\n // Old cleared by changed assignment\n newEvent.resources.map(resourceRecord => resourceIds.add(resourceRecord.id));\n });\n break;\n case 'removeall':\n case 'filter':\n // Filter might be caused by add retriggering filters, in which case we need to refresh later\n if (!scheduler.isEngineReady) {\n me.refreshAllWhenReady = true;\n return;\n }\n // Clear all when filtering for simplicity. If that turns out to give bad performance, one would need to\n // figure out which events was filtered out and only clear their resources.\n me.clearAll();\n scheduler.calculateAllRowHeights(true);\n scheduler.refreshWithTransition();\n return;\n case 'update': {\n // Check if changes are graph related or not\n const allChrono = record.$entity\n ? !Object.keys(changes).some(name => !record.$entity.getField(name))\n : !Object.keys(changes).some(name => !chronoFields[name]);\n let dateChanges = 0;\n 'startDate' in changes && dateChanges++;\n 'endDate' in changes && dateChanges++;\n 'duration' in changes && dateChanges++;\n if ('resourceId' in changes) {\n resourceIds.add(changes.resourceId.oldValue);\n }\n // If we have a set of resources to update, refresh them.\n // Always redraw non chrono changes (name etc) and chrono changes that can affect appearance\n if (\n resourceIds.size && (\n !allChrono ||\n // Skip case when changed \"duration\" only (w/o start/end affected)\n dateChanges && !('duration' in changes && dateChanges === 1) ||\n 'percentDone' in changes ||\n 'inactive' in changes ||\n 'constraintDate' in changes ||\n 'constraintType' in changes ||\n 'segments' in changes\n )\n ) {\n const { eventResize, eventDragCreate } = scheduler.features;\n // Cheaper updates when resizing/drag creating using lockLayout\n if (record.isBatchUpdating && ((eventResize?.isResizing && eventResize.lockLayout) || (eventDragCreate?.isResizing && eventDragCreate.lockLayout))) {\n for (const id of resourceIds) {\n me.refreshEventsForResource(scheduler.resourceStore.getById(id), undefined, false);\n }\n me.onRenderDone();\n }\n // If we are finalizing data loading let's delay the resources refresh till all the\n // propagation results get into stores\n else if (me.project?.propagatingLoadChanges || me.project?.isWritingData) {\n me.refreshResourcesOnDataReady(resourceIds);\n }\n else {\n me.refreshResources(resourceIds);\n }\n }\n return;\n }\n }\n me.refreshResourcesWhenReady(resourceIds);\n }\n }\n //endregion\n //region ResourceStore\n attachToResourceStore(resourceStore) {\n this.refreshAllWhenReady = true;\n super.attachToResourceStore(resourceStore);\n if (resourceStore) {\n this.clearAll({ clearLayoutCache : true });\n resourceStore.ion({\n name : 'resourceStore',\n changePreCommit : 'onResourceStoreChange',\n thisObj : this\n });\n }\n }\n get resourceStore() {\n return this.client.store;\n }\n onResourceStoreChange({ action, isExpand, records, changes }) {\n const\n me = this,\n // Update link + original when asked for link\n resourceIds = records?.flatMap(r => r.isLinked ? [r.id, r.$originalId] : [r.id]);\n if (!me.scheduler.isPainted) {\n return;\n }\n switch (action) {\n case 'add':\n // #635 Events disappear when toggling other node\n // If we are expanding project won't fire refresh event\n if (!isExpand) {\n // Links won't cause calculations, refresh now\n if (records.every(r => r.isLinked)) {\n me.refreshResources(resourceIds);\n }\n // Otherwise refresh when project is ready\n else {\n me.refreshResourcesWhenReady(resourceIds);\n }\n }\n return;\n case 'update': {\n // Ignore changes from project commit, if they affect events they will be redrawn anyway\n // Also ignore explicit transformation of leaf <-> parent\n if (!me.project.isChangeTrackingSuspended && !changes.isLeaf) {\n // Resource changes might affect events, refresh\n me.refreshResources(resourceIds);\n }\n return;\n }\n case 'filter':\n // Bail out on filter action. Map was already updated on `refresh` event triggered before this `change`\n // one. And extra records are removed from rowMap by `onRemoveRows`\n return;\n case 'removeall':\n me.clearAll({ clearLayoutCache : true });\n return;\n // We must not clear all resources when whole dataset changes\n // https://github.com/bryntum/support/issues/3292\n case 'dataset':\n return;\n }\n resourceIds && me.clearResources(resourceIds);\n }\n //endregion\n //region RowManager\n onTranslateRow({ row }) {\n // Newly added rows are translated prior to having an id, rule those out since they will be rendered later\n if (row.id != null) {\n // Event layouts are stored relative to the resource, only need to rerender the row to have its absolute\n // position updated to match new translation\n this.refreshEventsForResource(row, false);\n }\n }\n // RowManager error correction, cached layouts will no longer match.\n // Redraw to have events correctly positioned for dependency feature to draw to their elements\n onOffsetRows() {\n this.clearAll();\n this.doUpdateTimeView();\n }\n // Used to pre-calculate row heights\n calculateRowHeight(resourceRecord) {\n const\n { scheduler } = this,\n rowHeight = scheduler.getResourceHeight(resourceRecord),\n eventLayout = scheduler.getEventLayout(resourceRecord),\n layoutType = eventLayout.type,\n lockLayout = scheduler.features.eventResize?.lockLayout;\n if (\n layoutType === 'stack' &&\n scheduler.isEngineReady &&\n !resourceRecord.isSpecialRow &&\n // Generated parents when TreeGrouping do not have assigned bucket\n resourceRecord.assigned?.size > 1\n ) {\n const\n {\n assignmentStore,\n eventStore,\n timeAxis\n } = scheduler,\n {\n barMargin,\n resourceMarginObject : { total },\n contentHeight\n } = scheduler.getResourceLayoutSettings(resourceRecord),\n // When using an AssignmentStore we will get all events for the resource even if the EventStore is\n // filtered\n eventFilter = (eventStore.isFiltered || assignmentStore.isFiltered) && (eventRecord =>\n eventRecord.assignments.some(a => a.resource === resourceRecord.$original && assignmentStore.includes(a))),\n events = eventStore\n .getEvents({\n resourceRecord,\n includeOccurrences : scheduler.enableRecurringEvents,\n startDate : timeAxis.startDate,\n endDate : timeAxis.endDate,\n filter : eventFilter\n })\n .sort(heightEventSorter)\n .map(eventRecord => {\n const\n useCurrent = eventRecord.isBatchUpdating && !(lockLayout && eventRecord.meta?.isResizing),\n // Must use Model.get in order to get latest values in case we are inside a batch.\n // EventResize changes the endDate using batching to enable a tentative change\n // via the batchedUpdate event which is triggered when changing a field in a batch.\n // Fall back to accessor if propagation has not populated date fields.\n startDate = useCurrent ? eventRecord.get('startDate') : eventRecord.startDate,\n endDate = useCurrent ? eventRecord.get('endDate') : eventRecord.endDate || startDate;\n return {\n eventRecord,\n resourceRecord,\n startMS : startDate.getTime(),\n endMS : endDate.getTime()\n };\n }),\n layoutHandler = scheduler.getEventLayoutHandler(eventLayout),\n nbrOfBandsRequired = layoutHandler.layoutEventsInBands(events, resourceRecord, true);\n if (layoutHandler.type === 'layoutFn') {\n return nbrOfBandsRequired;\n }\n return (nbrOfBandsRequired * contentHeight) + ((nbrOfBandsRequired - 1) * barMargin) + total;\n }\n return rowHeight;\n }\n //endregion\n //region TimeAxis\n doUpdateTimeView() {\n const { scrollable } = this.scheduler.timeAxisSubGrid;\n // scrollLeft is the DOM's concept which is -ve in RTL mode.\n // scrollX is always the +ve scroll offset from the origin.\n // Both may be needed for different calculations.\n this.updateFromHorizontalScroll(scrollable.x, true);\n }\n onTimeAxisViewModelUpdate() {\n const\n me = this,\n { scheduler } = me;\n me.clearAll();\n // If refresh is suspended, update timeView as soon as refresh gets unsuspended\n if (scheduler.refreshSuspended) {\n me.detachListeners('renderingSuspend');\n scheduler.ion({\n name : 'renderingSuspend',\n resumeRefresh({ trigger }) {\n // This code will try to refresh rows, but resumeRefresh event doesn't guarantee rowManager rows are\n // in actual state. e.g. if resources were removed during a suspended refresh rowManager won't get a\n // chance to update them until `refresh` event from the project. We can safely update the view only\n // if engine in ready (not committing), otherwise we leave refresh a liability of normal project refresh\n // logic. Covered by SchedulerRendering.t.js\n // https://github.com/bryntum/support/issues/1462\n if (scheduler.isEngineReady && trigger) {\n me.doUpdateTimeView();\n }\n },\n thisObj : me,\n once : true\n });\n }\n // Call update anyway. If refresh is suspended this call will only update visible date range and will not redraw rows\n me.doUpdateTimeView();\n }\n //endregion\n //region Dependency connectors\n /**\n * Gets displaying item start side\n *\n * @param {Scheduler.model.EventModel} eventRecord\n * @returns {'start'|'end'|'top'|'bottom'} 'start' / 'end' / 'top' / 'bottom'\n */\n getConnectorStartSide(eventRecord) {\n return 'start';\n }\n /**\n * Gets displaying item end side\n *\n * @param {Scheduler.model.EventModel} eventRecord\n * @returns {'start'|'end'|'top'|'bottom'} 'start' / 'end' / 'top' / 'bottom'\n */\n getConnectorEndSide(eventRecord) {\n return 'end';\n }\n //endregion\n //region Scheduler hooks\n refreshRows(reLayoutEvents) {\n if (reLayoutEvents) {\n this.clearAll();\n }\n }\n // Clear events in case they use date as part of displayed info\n onLocaleChange() {\n this.clearAll();\n }\n // Called when viewport size changes\n onViewportResize(width, height, oldWidth, oldHeight) {\n // We don't draw events for all rendered rows, \"refresh\" when height changes to make sure events in previously\n // invisible rows gets displayed\n if (height > oldHeight) {\n this.onRenderDone();\n }\n }\n // Called from EventDrag\n onDragAbort({ context, dragData }) {\n // Aborted a drag in a scrolled scheduler, with origin now out of view. Element is no longer needed\n if (this.resourceStore.indexOf(dragData.record.resource) < this.scheduler.topRow.dataIndex) {\n context.element.remove();\n }\n }\n // Called from EventSelection\n toggleCls(assignmentRecord, cls, add = true, useWrapper = false, checkReleased = false) {\n const\n element = this.client.getElementFromAssignmentRecord(assignmentRecord, useWrapper, checkReleased),\n resourceData = this.resourceMap.get(assignmentRecord.isModel ? assignmentRecord.get('resourceId') : assignmentRecord.resourceId),\n eventData = resourceData?.eventsData.find(d => d.eventId === assignmentRecord.eventId);\n // Update cached config\n if (eventData) {\n eventData[useWrapper ? 'wrapperCls' : 'cls'][cls] = add;\n }\n // Live update element\n if (element) {\n // Update element\n element.classList.toggle(cls, add);\n // And its DOM config\n element.lastDomConfig.className[cls] = add;\n }\n }\n // React to rows being removed, refreshes view without any relayouting needed since layout is cached relative to row\n onRemoveRows({ rows }) {\n rows.forEach(row => this.rowMap.delete(row));\n this.onRenderDone();\n }\n // Reset renderer flag before any renderers are called\n onEarlyScroll() {\n this.rendererCalled = false;\n }\n // If vertical scroll did not cause a renderer to be called we still want to update since we only draw events in\n // view, \"independent\" from their rows\n updateFromVerticalScroll() {\n this.fromScroll = true;\n if (!this.rendererCalled) {\n this.onRenderDone();\n }\n }\n // Update header range on horizontal scroll. No need to draw any tasks, Gantt only cares about vertical scroll\n updateFromHorizontalScroll(scrollX, force) {\n const\n me = this,\n {\n scheduler,\n scrollBuffer\n } = me,\n renderAll = scrollBuffer === -1,\n {\n timeAxisSubGrid,\n timeAxis,\n rtl\n } = scheduler,\n { width } = timeAxisSubGrid,\n { totalSize } = scheduler.timeAxisViewModel,\n start = scrollX,\n // If there are few pixels left from the right most position then just render all remaining ticks,\n // there wouldn't be many. It makes end date reachable with more page zoom levels while not having any poor\n // implications.\n // 5px to make TimeViewRangePageZoom test stable in puppeteer.\n // > 1, Safari reports a scrollWidth of 1 even when there is no scroll\n returnEnd = Math.abs(timeAxisSubGrid.scrollable.maxX) > 1 && Math.abs(timeAxisSubGrid.scrollable.maxX) <= Math.round(start) + 5,\n startDate = renderAll ? timeAxis.startDate : scheduler.getDateFromCoord({ coord : Math.max(0, start - scrollBuffer), ignoreRTL : true }),\n endDate = returnEnd || renderAll ? timeAxis.endDate : (scheduler.getDateFromCoord({ coord : start + width + scrollBuffer, ignoreRTL : true }) || timeAxis.endDate);\n if (\n startDate && !scheduler._viewPresetChanging &&\n // If rendering all, no action needed if scrolling horizontally unless start/end/tick size etc changes\n (!renderAll || force || (startDate - (me._visibleDateRange?.startDate || 0)) || (endDate - (me._visibleDateRange?.endDate || 0)))\n ) {\n me._visibleDateRange = { startDate, endDate, startMS : startDate.getTime(), endMS : endDate.getTime() };\n me.viewportCoords = renderAll ? { left : 0, right : totalSize } : rtl\n // RTL starts all the way to the right (and goes in opposite direction)\n ? { left : totalSize - scrollX - width + scrollBuffer, right : totalSize - scrollX - scrollBuffer }\n // LTR all the way to the left\n : { left : scrollX - scrollBuffer, right : scrollX + width + scrollBuffer };\n // Update timeaxis header making it display the new dates\n const range = scheduler.timeView.range = { startDate, endDate };\n scheduler.internalOnVisibleDateRangeChange(range);\n // If refresh is suspended, someone else is responsible for updating the UI later\n if (!scheduler.refreshSuspended && scheduler.rowManager.rows.length) {\n // Gets here too early in Safari for ResourceHistogram. ResizeObserver triggers a scroll before rows are\n // rendered first time. Could not track down why, bailing out\n if (scheduler.rowManager.rows[0].id === null) {\n return;\n }\n me.fromScroll = true;\n scheduler.rowManager.rows.forEach(row => me.refreshEventsForResource(row, false, false));\n me.onRenderDone();\n }\n }\n }\n // Called from SchedulerEventRendering\n repaintEventsForResource(resourceRecord) {\n this.refreshResources([resourceRecord.id]);\n }\n onBeforeRowHeightChange() {\n // Row height is cached per resource, all have to be re-laid out\n this.clearAll();\n }\n //endregion\n //region Refresh resources\n refreshResourcesOnDataReady(resourceIds) {\n resourceIds.forEach(id => this.toDrawOnDataReady.add(id));\n }\n /**\n * Clears resources directly and redraws them on next project refresh\n * @param {Number[]|String[]} resourceIds\n * @private\n */\n refreshResourcesWhenReady(resourceIds) {\n this.clearResources(resourceIds);\n resourceIds.forEach(id => this.toDrawOnProjectRefresh.add(id));\n }\n /**\n * Clears and redraws resources directly. Respects schedulers refresh suspension\n * @param {Number[]|String[]} ids Resource ids\n * @param {Boolean} [transition] Use transition or not\n * @private\n */\n refreshResources(ids, transition = true) {\n const\n me = this,\n { scheduler } = me;\n me.clearResources(ids);\n if (!scheduler.refreshSuspended) {\n const\n rows = [],\n noRows = [];\n ids.forEach(id => {\n const row = scheduler.getRowById(id);\n if (row) {\n rows.push(row);\n }\n else {\n noRows.push(row);\n }\n });\n scheduler.runWithTransition(() => {\n // Rendering rows populates row heights, but not all resources might have a row in view\n scheduler.calculateRowHeights(noRows.map(id => this.resourceStore.getById(id)), true);\n // Render those that do\n scheduler.rowManager.renderRows(rows);\n }, transition);\n }\n }\n //endregion\n //region Stack & pack\n layoutEventVerticallyStack(bandIndex, eventRecord, resourceRecord) {\n const\n {\n barMargin,\n resourceMarginObject : { start },\n contentHeight\n } = this.scheduler.getResourceLayoutSettings(resourceRecord, eventRecord.parent);\n return bandIndex === 0\n ? start\n : start + bandIndex * contentHeight + bandIndex * barMargin;\n }\n layoutEventVerticallyPack(topFraction, heightFraction, eventRecord, resourceRecord) {\n const\n {\n barMargin,\n resourceMarginObject : { start },\n contentHeight\n } = this.scheduler.getResourceLayoutSettings(resourceRecord, eventRecord.parent),\n count = 1 / heightFraction,\n bandIndex = topFraction * count, // \"y\" within row\n height = (contentHeight - ((count - 1) * barMargin)) * heightFraction,\n top = start + bandIndex * height + bandIndex * barMargin;\n return {\n top, height\n };\n }\n //endregion\n //region Render\n /**\n * Used by event drag features to bring into existence event elements that are outside of the rendered block.\n * @param {Scheduler.model.TimeSpan} eventRecord The event to render\n * @param {Scheduler.model.ResourceModel} [resourceRecord] The event to render\n * @private\n */\n addTemporaryDragElement(eventRecord, resourceRecord = eventRecord.resource) {\n const\n { scheduler } = this,\n renderData = scheduler.generateRenderData(eventRecord, resourceRecord, {\n timeAxis : true,\n viewport : true\n });\n renderData.absoluteTop = renderData.row\n ? (renderData.top + renderData.row.top)\n : scheduler.getResourceEventBox(eventRecord, resourceRecord, true).top;\n const\n domConfig = this.renderEvent(renderData),\n { dataset } = domConfig;\n delete domConfig.tabIndex;\n delete dataset.eventId;\n delete dataset.resourceId;\n delete dataset.assignmentId;\n delete dataset.syncId;\n dataset.transient = true;\n domConfig.parent = this.scheduler.foregroundCanvas;\n // So that the regular DomSyncing which may happen during scroll does not\n // sweep up and reuse the temporary element.\n domConfig.retainElement = true;\n const result = DomHelper.createElement(domConfig);\n result.innerElement = result.firstChild;\n eventRecord.instanceMeta(scheduler).hasTemporaryDragElement = true;\n return result;\n }\n // Earlier start dates are above later tasks\n // If same start date, longer tasks float to top\n // If same start + duration, sort by name\n // Fn can be called with layout date or event records (from EventNavigation)\n eventSorter(a, b) {\n if (this.overlappingEventSorter) {\n return this.overlappingEventSorter(a.eventRecord || a, b.eventRecord || b);\n }\n const\n startA = a.isModel ? a.startDateMS : a.dataStartMS || a.startMS, // dataXX are used if configured with fillTicks\n endA = a.isModel ? a.endDateMS : a.dataEndMS || a.endMS,\n startB = b.isModel ? b.startDateMS : b.dataStartMS || b.startMS,\n endB = b.isModel ? b.endDateMS : b.dataEndMS || b.endMS,\n nameA = a.isModel ? a.name : a.eventRecord.name,\n nameB = b.isModel ? b.name : b.eventRecord.name;\n return startA - startB || endB - endA || (nameA < nameB ? -1 : nameA == nameB ? 0 : 1);\n }\n /**\n * Converts a start/endDate into a MS value used when rendering the event. If scheduler is configured with\n * `fillTicks: true` the value returned will be snapped to tick start/end.\n * @private\n * @param {Scheduler.model.TimeSpan} eventRecord\n * @param {String} startDateField\n * @param {String} endDateField\n * @param {Boolean} useEventBuffer\n * @param {Scheduler.model.ResourceModel} resourceRecord\n * @returns {Object} Object of format { startMS, endMS, durationMS }\n */\n calculateMS(eventRecord, startDateField, endDateField, useEventBuffer, resourceRecord) {\n const\n me = this,\n { scheduler } = me,\n { timeAxisViewModel } = scheduler;\n let startMS = getStartEnd(scheduler, eventRecord, false, startDateField, useEventBuffer),\n endMS = getStartEnd(scheduler, eventRecord, true, endDateField, useEventBuffer),\n durationMS = endMS - startMS;\n if (scheduler.milestoneLayoutMode !== 'default' && durationMS === 0) {\n const\n pxPerMinute = timeAxisViewModel.getSingleUnitInPixels('minute'),\n lengthInPx = scheduler.getMilestoneLabelWidth(eventRecord, resourceRecord),\n duration = lengthInPx * (1 / pxPerMinute);\n durationMS = duration * 60 * 1000;\n if (scheduler.milestoneTextPosition === 'always-outside') {\n // Milestone is offset half a diamond to the left (compensated in CSS with padding) for the layout pass,\n // to take diamond corner into account\n const\n diamondSize = scheduler.getResourceLayoutSettings(resourceRecord, eventRecord.parent).contentHeight,\n diamondMS = diamondSize * (1 / pxPerMinute) * 60 * 1000;\n startMS -= diamondMS / 2;\n endMS = startMS + durationMS;\n }\n else {\n switch (scheduler.milestoneAlign) {\n case 'start':\n case 'left':\n endMS = startMS + durationMS;\n break;\n case 'end':\n case 'right':\n endMS = startMS;\n startMS = endMS - durationMS;\n break;\n default: // using center as default\n endMS = startMS + durationMS / 2;\n startMS = endMS - durationMS;\n break;\n }\n }\n }\n // Normally the event bar element and the event layout use the same timestamps for sizing,\n // but during resize if we have locked the layout we need them to differ\n const\n elementStartMS = startMS,\n elementEndMS = endMS,\n elementDurationMS = durationMS;\n // Use initial values for the layout during resize\n if (eventRecord.meta?.isResizing && scheduler.features.eventResize?.lockLayout) {\n startMS = eventRecord.startDate.getTime();\n endMS = eventRecord.endDate.getTime();\n durationMS = elementEndMS - elementStartMS;\n }\n return {\n startMS,\n endMS,\n durationMS,\n elementStartMS,\n elementEndMS,\n elementDurationMS\n };\n }\n /**\n * Returns event render data except actual position information.\n * @param timeSpan\n * @param rowRecord\n * @returns {HorizontalRenderData}\n * @private\n */\n setupRenderData(timeSpan, rowRecord) {\n const\n me = this,\n { scheduler } = me,\n {\n timeAxis,\n timeAxisViewModel\n } = scheduler,\n {\n preamble,\n postamble\n } = timeSpan,\n useEventBuffer = me.isProHorizontalRendering && scheduler.features.eventBuffer?.enabled &&\n (preamble || postamble) && !timeSpan.isMilestone,\n pxPerMinute = timeAxisViewModel.getSingleUnitInPixels('minute'),\n { isBatchUpdating } = timeSpan,\n startDateField = useEventBuffer ? 'wrapStartDate' : 'startDate',\n endDateField = useEventBuffer ? 'wrapEndDate' : 'endDate',\n // Must use Model.get in order to get latest values in case we are inside a batch.\n // EventResize changes the endDate using batching to enable a tentative change\n // via the batchedUpdate event which is triggered when changing a field in a batch.\n // Fall back to accessor if propagation has not populated date fields.\n // Use endDate accessor if duration has not been propagated to create endDate\n timespanStart = isBatchUpdating && !useEventBuffer ? timeSpan.get(startDateField) : timeSpan[startDateField],\n // Allow timespans to be rendered even when they are missing an end date\n timespanEnd = isBatchUpdating && !useEventBuffer ? timeSpan.get(endDateField) : timeSpan[endDateField] || timespanStart,\n viewStartMS = timeAxis.startMS,\n viewEndMS = timeAxis.endMS,\n // Convert start/end dates to milliseconds, taking fillTicks, lockLayout etc. into account\n msValues = me.calculateMS(timeSpan, startDateField, endDateField, useEventBuffer, rowRecord),\n {\n startMS,\n endMS,\n durationMS\n } = msValues,\n // These flags have two components because includeOutsideViewport\n // means that we can be calculating data for events either side of\n // the TimeAxis.\n // The start is outside of the view if it's before *or after* the TimeAxis range.\n // 1 set means the start is before the TimeAxis\n // 2 set means the start is after the TimeAxis\n // Either way, a truthy value means that the start is outside of the TimeAxis.\n startsOutsideView = startMS < viewStartMS | ((startMS > viewEndMS) << 1),\n // The end is outside of the view if it's before *or after* the TimeAxis range.\n // 1 set means the end is after the TimeAxis\n // 2 set means the end is before the TimeAxis\n // Either way, a truthy value means that the end is outside the TimeAxis.\n endsOutsideView = endMS > viewEndMS | ((endMS <= viewStartMS) << 1),\n durationMinutes = durationMS / (1000 * 60),\n width = endsOutsideView ? pxPerMinute * durationMinutes : null,\n row = scheduler.getRowById(rowRecord);\n return {\n eventRecord : timeSpan,\n taskRecord : timeSpan, // Helps with using Gantt projects in Scheduler Pro\n start : timespanStart,\n end : timespanEnd,\n rowId : rowRecord.id,\n children : [],\n startsOutsideView,\n endsOutsideView,\n width,\n row,\n useEventBuffer,\n ...msValues\n };\n }\n /**\n * Populates render data with information about width and horizontal position of the wrap.\n * @param {HorizontalRenderData} renderData\n * @returns {Boolean}\n * @private\n */\n fillTimeSpanHorizontalPosition(renderData) {\n const\n { elementStartMS : startMS, elementEndMS : endMS, elementDurationMS : durationMS } = renderData,\n // With delayed calculation there is no guarantee data is normalized, might be missing a crucial component\n result = startMS != null && endMS != null && this.calculateHorizontalPosition(renderData, startMS, endMS, durationMS);\n if (result) {\n Object.assign(renderData, result);\n return true;\n }\n return false;\n }\n /**\n * Fills render data with `left` and `width` properties\n * @param {HorizontalRenderData} renderData\n * @param {Number} startMS\n * @param {Number} endMS\n * @param {Number} durationMS\n * @returns {{left: number, width: number, clippedStart: boolean, clippedEnd: boolean}|null}\n * @private\n */\n calculateHorizontalPosition(renderData, startMS, endMS, durationMS) {\n const\n { scheduler } = this,\n {\n timeAxis,\n timeAxisViewModel\n } = scheduler,\n {\n startsOutsideView,\n endsOutsideView,\n eventRecord\n } = renderData,\n viewStartMS = timeAxis.startMS,\n pxPerMinute = timeAxisViewModel.getSingleUnitInPixels('minute');\n let\n width = null,\n endX = scheduler.getCoordinateFromDate(endMS, {\n local : true,\n respectExclusion : true,\n isEnd : true\n }), startX, clippedStart = false, clippedEnd = false;\n // If event starts outside of view, estimate where.\n if (startsOutsideView) {\n startX = (startMS - viewStartMS) / (1000 * 60) * pxPerMinute;\n // Flip -ve startX to being to the right of the viewport end\n if (scheduler.rtl) {\n startX = timeAxisViewModel.totalSize - startX;\n }\n }\n // Starts in view, calculate exactly\n else {\n // If end date is included in time axis but start date is not (when using time axis exclusions), snap start date to next included data\n startX = scheduler.getCoordinateFromDate(startMS, {\n local : true,\n respectExclusion : true,\n isEnd : false,\n snapToNextIncluded : endX !== -1\n });\n clippedStart = startX === -1;\n }\n if (endsOutsideView) {\n // Estimate where the end is, based on where time axis ends + how much the event overflows\n const\n distanceToTimeAxisEnd = timeAxisViewModel.totalSize - startX,\n overflowDurationMS = endMS - timeAxis.endMS,\n overflowDurationMinutes = overflowDurationMS / (1000 * 60);\n width = scheduler.rtl\n ? pxPerMinute * durationMS / (1000 * 60)\n : distanceToTimeAxisEnd + pxPerMinute * overflowDurationMinutes;\n // Have to clip the events in Safari when using stickyEvents, it does not support `overflow: clip`\n if (BrowserHelper.isSafari && scheduler.features.stickyEvents && timeAxis.endMS) {\n endX = scheduler.getCoordinateFromDate(timeAxis.endMS);\n }\n else {\n // Parentheses needed\n endX = startX + width * (scheduler.rtl ? -1 : 1);\n }\n }\n else {\n clippedEnd = endX === -1;\n }\n if (clippedEnd && !clippedStart) {\n // We know where to start but not where to end, snap it (the opposite is already handled by the\n // snapToNextIncluded flag when calculating startX above)\n endX = scheduler.getCoordinateFromDate(endMS, {\n local : true,\n respectExclusion : true,\n isEnd : true,\n snapToNextIncluded : true\n });\n }\n // If the element is very wide there's no point in displaying it all.\n // Indeed the element may not be displayable at extremely large widths.\n if (width > MAX_WIDTH) {\n // The start is before the TimeAxis start\n if (startsOutsideView === 1) {\n // Both ends outside - spans TimeAxis\n if (endsOutsideView === 1) {\n startX = -100;\n endX = scheduler.timeAxisColumn.width + 100;\n }\n // End is in view\n else {\n startX = endX - MAX_WIDTH;\n }\n }\n // The end is after, but the start is in view\n else if (endsOutsideView === 1) {\n endX = startX + MAX_WIDTH;\n }\n }\n if (clippedStart && clippedEnd) {\n // Both ends excluded, but there might be some part in between that should be displayed...\n startX = scheduler.getCoordinateFromDate(startMS, {\n local : true,\n respectExclusion : true,\n isEnd : false,\n snapToNextIncluded : true,\n max : endMS\n });\n endX = scheduler.getCoordinateFromDate(endMS, {\n local : true,\n respectExclusion : true,\n isEnd : true,\n snapToNextIncluded : true,\n min : startMS\n });\n if (startX === endX) {\n // Raise flag on instance meta to avoid duplicating this logic\n eventRecord.instanceMeta(scheduler).excluded = true;\n // Excluded by time axis exclusion rules, render nothing\n return null;\n }\n }\n return {\n left : Math.min(startX, endX),\n // Use min width 5 for normal events, 0 for milestones (won't have width specified at all in the\n // end). During drag create a normal event can get 0 duration, in this case we still want it to\n // get a min width of 5 (6px for wrapper, -1 px for event element\n width : Math.abs(endX - startX) || (eventRecord.isMilestone && !eventRecord.meta.isDragCreating ? 0 : 6),\n clippedStart,\n clippedEnd\n };\n }\n fillTimeSpanVerticalPosition(renderData, rowRecord) {\n const\n { scheduler } = this,\n { start, end } = renderData,\n {\n resourceMarginObject : { start : resourceMarginStart },\n contentHeight\n } = scheduler.getResourceLayoutSettings(rowRecord);\n // If filling ticks we need to also keep data's MS values, since they are used for sorting timespans\n if (scheduler.fillTicks) {\n renderData.dataStartMS = start.getTime();\n renderData.dataEndMS = end.getTime();\n }\n renderData.top = Math.max(0, resourceMarginStart);\n if (scheduler.managedEventSizing) {\n // Timespan height should be at least 1px\n renderData.height = contentHeight;\n }\n }\n /**\n * Gets timespan coordinates etc. Relative to containing row. If the timespan is outside of the zone in\n * which timespans are rendered, that is outside of the TimeAxis, or outside of the vertical zone in which timespans\n * are rendered, then `undefined` is returned.\n * @private\n * @param {Scheduler.model.TimeSpan} timeSpan TimeSpan record\n * @param {Core.data.Model} rowRecord Row record\n * @param {Boolean|Object} includeOutside Specify true to get boxes for timespans outside of the rendered zone in both\n * dimensions. This option is used when calculating dependency lines, and we need to include routes from timespans\n * which may be outside the rendered zone.\n * @param {Boolean} includeOutside.timeAxis Pass as `true` to include timespans outside of the TimeAxis's bounds\n * @param {Boolean} includeOutside.viewport Pass as `true` to include timespans outside of the vertical timespan viewport's bounds.\n * @returns {{event/task: *, left: number, width: number, start: (Date), end: (Date), startMS: number, endMS: number, startsOutsideView: boolean, endsOutsideView: boolean}}\n */\n getTimeSpanRenderData(timeSpan, rowRecord, includeOutside = false) {\n const data = this.setupRenderData(timeSpan, rowRecord);\n if (!this.fillTimeSpanHorizontalPosition(data)) {\n return null;\n }\n this.fillTimeSpanVerticalPosition(data, rowRecord);\n return data;\n }\n // Layout a set of events, code shared by normal event render path and nested events\n layoutEvents(resourceRecord, allEvents, includeOutside = false, parentEventRecord, eventSorter) {\n const\n me = this,\n { scheduler } = me,\n { timeAxis } = scheduler,\n // Generate layout data\n eventsData = allEvents.reduce((result, eventRecord) => {\n // Only those in time axis (by default)\n if ((includeOutside || timeAxis.isTimeSpanInAxis(eventRecord))) {\n const eventBox = scheduler.generateRenderData(eventRecord, resourceRecord, includeOutside);\n // Collect layouts of visible events\n if (eventBox) {\n result.push(eventBox);\n }\n }\n return result;\n }, []);\n // Ensure the events are rendered in natural order so that navigation works.\n eventsData.sort(eventSorter ?? me.eventSorter);\n let rowHeight = scheduler.getAppliedResourceHeight(resourceRecord, parentEventRecord);\n const\n // Only events and tasks should be considered during layout (not resource time ranges if any, or events\n // being drag created when configured with lockLayout)\n layoutEventData = eventsData.filter(({ eventRecord }) => eventRecord.isEvent && !eventRecord.meta.excludeFromLayout),\n eventLayout = scheduler.getEventLayout(resourceRecord, parentEventRecord),\n layoutHandler = scheduler.getEventLayoutHandler(eventLayout);\n if (layoutHandler) {\n const\n {\n barMargin,\n resourceMarginObject : { total },\n contentHeight\n } = scheduler.getResourceLayoutSettings(resourceRecord, parentEventRecord),\n bandsRequired = layoutHandler.applyLayout(layoutEventData, resourceRecord) || 1;\n if (layoutHandler.type === 'layoutFn') {\n rowHeight = bandsRequired;\n }\n else {\n rowHeight = (bandsRequired * contentHeight) + ((bandsRequired - 1) * barMargin) + total;\n }\n }\n // Apply z-index when event elements might overlap, to keep \"overlap order\" consistent\n else if (layoutEventData.length > 0) {\n for (let i = 0; i < layoutEventData.length; i++) {\n const data = layoutEventData[i];\n // $event-zindex scss var is 5\n data.wrapperStyle += `;z-index:${i + 5}`;\n }\n }\n return { rowHeight, eventsData };\n }\n // Lay out events within a resource, relative to the resource\n layoutResourceEvents(resourceRecord, includeOutside = false) {\n const\n me = this,\n { scheduler } = me,\n {\n eventStore,\n assignmentStore,\n timeAxis\n } = scheduler,\n // Events for this resource\n resourceEvents = eventStore.getEvents({\n includeOccurrences : scheduler.enableRecurringEvents,\n resourceRecord,\n startDate : timeAxis.startDate,\n endDate : timeAxis.endDate,\n filter : (assignmentStore.isFiltered || eventStore.isFiltered) && (eventRecord =>\n eventRecord.assignments.some(a => a.resource === resourceRecord.$original && assignmentStore.includes(a)))\n }),\n // Call a chainable template function on scheduler to allow features to add additional \"events\" to render\n // Currently used by ResourceTimeRanges, CalendarHighlight & NestedEvents\n allEvents = scheduler.getEventsToRender(resourceRecord, resourceEvents) || [];\n return me.layoutEvents(resourceRecord, allEvents, includeOutside);\n }\n // Generates a DOMConfig for an EventRecord\n renderEvent(data, rowHeight) {\n const\n { scheduler } = this,\n { resourceRecord, assignmentRecord, eventRecord } = data,\n // Sync using assignment id for events and event id for ResourceTimeRanges. Add eventId for occurrences to make them unique\n syncId = assignmentRecord\n // Assignment, might be an occurrence\n ? this.assignmentStore.getOccurrence(assignmentRecord, eventRecord).id\n // Something else, probably a ResourceTimeRange\n : data.eventId,\n eventElementConfig = {\n className : data.cls,\n style : data.style || '',\n children : data.children,\n role : 'presentation',\n dataset : {\n // Each feature putting contents in the event wrap should have this to simplify syncing and\n // element retrieval after sync\n taskFeature : 'event'\n },\n syncOptions : {\n syncIdField : 'taskBarFeature'\n }\n },\n // Event element config, applied to existing element or used to create a new one below\n elementConfig = {\n className : data.wrapperCls,\n tabIndex : ('tabIndex' in data) ? data.tabIndex : -1,\n children : [\n eventElementConfig,\n ...data.wrapperChildren\n ],\n style : {\n top : data.absoluteTop,\n left : data.left,\n // ResourceTimeRanges fill row height, cannot be done earlier than this since row height is not\n // known initially\n height : data.fillSize ? rowHeight : data.height,\n // DomHelper appends px to dimensions when using numbers.\n width : data.width,\n style : data.wrapperStyle,\n fontSize : data.height + 'px'\n },\n dataset : {\n // assignmentId is set in this function conditionally\n resourceId : resourceRecord.id,\n eventId : data.eventId, // Not using eventRecord.id to distinguish between Event and ResourceTimeRange\n syncId : resourceRecord.isLinked ? `${syncId}_${resourceRecord.id}` : syncId\n },\n // Will not be part of DOM, but attached to the element\n elementData : data,\n // Dragging etc. flags element as retained, to not reuse/release it during that operation. Events\n // always use assignments, but ResourceTimeRanges does not\n retainElement : assignmentRecord?.instanceMeta(scheduler).retainElement || eventRecord.instanceMeta(scheduler).retainElement,\n // Options for this level of sync, lower levels can have their own\n syncOptions : {\n syncIdField : 'taskFeature',\n // Remove instead of release when a feature is disabled\n releaseThreshold : 0\n }\n };\n // Write back the correct height for elements filling the row, to not derender them later based on wrong height\n if (data.fillSize) {\n data.height = rowHeight;\n }\n // Some browsers throw warnings on zIndex = ''\n if (data.zIndex) {\n elementConfig.zIndex = data.zIndex;\n }\n // Do not want to spam dataset with empty prop when not using assignments (ResourceTimeRanges)\n if (assignmentRecord) {\n elementConfig.dataset.assignmentId = assignmentRecord.id;\n }\n data.elementConfig = elementConfig;\n scheduler.afterRenderEvent({ renderData : data, rowHeight, domConfig : elementConfig });\n return elementConfig;\n }\n /**\n * Refresh events for resource record (or Row), clearing its cache and forcing DOM refresh.\n * @param {Scheduler.model.ResourceModel} recordOrRow Record or row to refresh\n * @param {Boolean} [force] Specify `false` to prevent clearing cache and forcing DOM refresh\n * @internal\n */\n refreshEventsForResource(recordOrRow, force = true, draw = true) {\n const\n me = this,\n record = me.scheduler.store.getById(recordOrRow.isRow ? recordOrRow.id : recordOrRow),\n row = me.scheduler.rowManager.getRowFor(record);\n if (force) {\n me.clearResources([record]);\n }\n if (row && record) {\n me.renderer({ row, record });\n if (force && draw) {\n me.onRenderDone();\n }\n }\n }\n // Returns layout for the current resource. Used by the renderer and exporter\n getResourceLayout(resourceRecord) {\n const me = this;\n // Use cached layout if available\n let resourceLayout = me.resourceMap.get(resourceRecord.id);\n if (!resourceLayout || resourceLayout.invalid) {\n // Previously we would bail out here if engine wasn't ready. Now we instead allow drawing in most cases,\n // since data can be read and written during commit (previously it could not)\n if (me.suspended) {\n return;\n }\n resourceLayout = me.layoutResourceEvents(resourceRecord, false);\n me.resourceMap.set(resourceRecord.id, resourceLayout);\n }\n return resourceLayout;\n }\n getEventDOMConfigForCurrentView(resourceLayout, row, left, right) {\n const\n me = this,\n { bufferSize, scheduler } = me,\n { labels, eventBuffer } = scheduler.features,\n // Left/right labels and event buffer elements require using a buffer to not derender too early\n usesLabels = eventBuffer?.enabled || (labels?.enabled && (labels.left || labels.right || labels.before || labels.after)),\n { eventsData } = resourceLayout,\n // When scrolling, layout will be reused and any events that are still in view can reuse their DOM configs\n reusableDOMConfigs = me.fromScroll ? me.rowMap.get(row) : null,\n eventDOMConfigs = [];\n let useLeft, useRight;\n // Only collect configs for those actually in view\n for (let i = 0; i < eventsData.length; i++) {\n const layout = eventsData[i];\n useLeft = left;\n useRight = right;\n // Labels/milestones requires keeping events rendered longer\n if (usesLabels || layout.width === 0) {\n useLeft -= bufferSize;\n useRight += bufferSize;\n }\n if ((layout.left + layout.width) >= useLeft && layout.left <= useRight) {\n layout.absoluteTop = layout.top + row.top;\n const prevDomConfig = reusableDOMConfigs?.find(config => config.elementData.eventId === layout.eventId &&\n config.elementData.resourceId === layout.resourceId);\n eventDOMConfigs.push(prevDomConfig ?? me.renderEvent(layout, resourceLayout.rowHeight));\n }\n }\n return eventDOMConfigs;\n }\n // Called per row in \"view\", collect configs\n renderer({ row, record : resourceRecord, size = {} }) {\n const me = this;\n // Bail out for group headers/footers\n if (resourceRecord.isSpecialRow) {\n // Clear any cached layout for row retooled to special row, and bail out\n me.rowMap.delete(row);\n return;\n }\n const\n { left, right } = me.viewportCoords,\n resourceLayout = me.getResourceLayout(resourceRecord);\n // Layout is suspended\n if (!resourceLayout) {\n return;\n }\n // Size row to fit events\n size.height = resourceLayout.rowHeight;\n // Avoid storing our calculated height as the rows max height, to not affect next round of calculations\n size.transient = true;\n const eventDOMConfigs = me.getEventDOMConfigForCurrentView(resourceLayout, row, left, right);\n me.rowMap.set(row, eventDOMConfigs);\n // Keep track if we need to draw on vertical scroll or not, to not get multiple onRenderDone() calls\n me.rendererCalled = true;\n }\n // Called when the current row rendering \"pass\" is complete, sync collected configs to DOM\n onRenderDone() {\n const\n { scheduler, rowMap, verticalBufferSize } = this;\n if (scheduler.refreshSuspended) {\n return;\n }\n const\n visibleEventDOMConfigs = [],\n bodyTop = scheduler._scrollTop ?? 0,\n viewTop = bodyTop - verticalBufferSize,\n viewBottom = bodyTop + scheduler._bodyRectangle.height + verticalBufferSize,\n unbuffered = verticalBufferSize < 0,\n unmanagedSize = !scheduler.managedEventSizing;\n // Event configs are collected when rows are rendered, but we do not want to waste resources on rendering\n // events far out of view. Especially with many events per row giving large row heights, rows in the RowManagers\n // buffer might far away -> collect events for rows within viewport + small vertical buffer\n rowMap.forEach((eventDOMConfigs, row) => {\n // Render events \"in view\". Export specifies a negative verticalBufferSize to disable it\n if (unbuffered || (row.bottom > viewTop && row.top < viewBottom)) {\n for (let i = 0; i < eventDOMConfigs.length; i++) {\n const\n config = eventDOMConfigs[i],\n data = config.elementData,\n {\n absoluteTop,\n eventRecord\n } = data;\n // Conditions under which event bars are included in the DOM:\n // If bufferSize is -ve, meaning render all events.\n // scheduler.managedEventSizing is false.\n // The event is being drag-created or drag-resized\n // The event is within the bounds of the rendered region.\n if (unbuffered || unmanagedSize || eventRecord.meta.isDragCreating || eventRecord.meta.isResizing || (absoluteTop + data.height > viewTop && absoluteTop < viewBottom)) {\n visibleEventDOMConfigs.push(config);\n }\n }\n }\n // We are using cached DomConfigs. When DomSync releases an element, it also flags the config as released.\n // Next time we pass it that very same config, it says it is released and nothing shows up.\n //\n // We are breaching the DomSync contract a bit with the cached approach. DomSync expects new configs on each\n // call, so to facilitate that we clone the configs shallowly (nothing deep is affected by sync releasing).\n // That way we can always pass it fresh unreleased configs.\n for (let i = 0; i < eventDOMConfigs.length; i++) {\n eventDOMConfigs[i] = { ...eventDOMConfigs[i] };\n }\n });\n this.fromScroll = false;\n this.visibleEventDOMConfigs = visibleEventDOMConfigs;\n DomSync.sync({\n domConfig : {\n onlyChildren : true,\n children : visibleEventDOMConfigs\n },\n targetElement : scheduler.foregroundCanvas,\n syncIdField : 'syncId',\n // Called by DomSync when it creates, releases or reuses elements\n callback({ action, domConfig, lastDomConfig, targetElement, jsx }) {\n const\n { reactComponent } = scheduler,\n // Some actions are considered first a release and then a render (reusing another element).\n // This gives clients code a chance to clean up before reusing an element\n isRelease = releaseEventActions[action],\n isRender = renderEventActions[action];\n !isRelease && scheduler.processEventContent?.({\n jsx,\n action,\n domConfig,\n targetElement,\n isRelease,\n reactComponent\n });\n if (action === 'none' || !domConfig?.elementData?.isWrap) {\n return;\n }\n // Trigger release for events (it might be a proxy element, skip those)\n if (isRelease && lastDomConfig?.elementData) {\n const\n { eventRecord, resourceRecord, assignmentRecord } = lastDomConfig.elementData,\n event = {\n renderData : lastDomConfig.elementData,\n element : targetElement,\n eventRecord,\n resourceRecord,\n assignmentRecord\n };\n // Process event necessary in the case of release\n scheduler.processEventContent?.({\n isRelease,\n targetElement,\n reactComponent,\n assignmentRecord\n });\n // Some browsers do not blur on set to display:none, so releasing the active element\n // must *explicitly* move focus outwards to the view.\n if (targetElement === DomHelper.getActiveElement(targetElement)) {\n scheduler.focusElement.focus();\n }\n // This event is documented on Scheduler\n scheduler.trigger('releaseEvent', event);\n }\n if (isRender) {\n const\n { eventRecord, resourceRecord, assignmentRecord } = domConfig.elementData,\n event = {\n renderData : domConfig.elementData,\n element : targetElement,\n isReusingElement : action === 'reuseElement',\n isRepaint : action === 'reuseOwnElement',\n eventRecord,\n resourceRecord,\n assignmentRecord\n };\n // Prevent transitions when reusing some other events element\n if (action === 'reuseElement' && scheduler.isAnimating) {\n // No assignments for ResourceTimeRanges\n DomHelper.addTemporaryClass(targetElement, 'b-reusing-own', 50, scheduler, `b-reusing-own-${(assignmentRecord || eventRecord).id}`);\n }\n // This event is documented on Scheduler\n scheduler.trigger('renderEvent', event);\n }\n }\n });\n }\n //endregion\n //region Cache\n // Clears cached resource layout\n clearResources(recordsOrIds) {\n recordsOrIds = ArrayHelper.asArray(recordsOrIds);\n const resourceIds = recordsOrIds.map(Model.asId);\n resourceIds.forEach(resourceId => {\n // Invalidate resourceLayout, keeping it around in case we need it before next refresh\n const cached = this.resourceMap.get(resourceId);\n if (cached) {\n cached.invalid = true;\n }\n const row = this.scheduler.getRowById(resourceId);\n row && this.rowMap.delete(row);\n });\n }\n clearAll({ clearDom = false, clearLayoutCache = false } = {}) {\n const\n me = this,\n { layouts, foregroundCanvas } = me.scheduler;\n if (clearLayoutCache && layouts) {\n for (const layout in layouts) {\n layouts[layout].clearCache();\n }\n }\n // it seems `foregroundCanvas` can be missing at this point\n // for example if scheduler instance is created w/o of `appendTo` config\n if (foregroundCanvas && clearDom) {\n // Start from scratch when replacing the project, to not retain anything in maps or released elements\n foregroundCanvas.syncIdMap = foregroundCanvas.lastDomConfig = foregroundCanvas.releasedIdMap = null;\n for (const child of foregroundCanvas.children) {\n child.lastDomConfig = child.elementData = null;\n }\n }\n me.resourceMap.clear();\n me.rowMap.clear();\n }\n //endregion\n}\nHorizontalRendering._$name = 'HorizontalRendering';", "import PackMixin from './PackMixin.js';\n/**\n * @module Scheduler/eventlayout/VerticalLayout\n */\n/**\n * Assists with event layout in vertical mode, handles `eventLayout: none|pack|mixed`\n * @private\n * @mixes Scheduler/eventlayout/PackMixin\n */\nexport default class VerticalLayout extends PackMixin() {\n static get defaultConfig() {\n return {\n coordProp : 'leftFactor',\n sizeProp : 'widthFactor'\n };\n }\n // Try to pack the events to consume as little space as possible\n applyLayout(events, resourceRecord, parentEventRecord) {\n const\n me = this,\n columnWidth = me.scheduler.getResourceWidth(resourceRecord, parentEventRecord),\n {\n barMargin,\n resourceMarginObject : { start : resourceMarginStart, total : resourceMarginTotal }\n } = me.scheduler.getResourceLayoutSettings(resourceRecord, parentEventRecord),\n eventLayout = me.scheduler.getEventLayout(resourceRecord, parentEventRecord),\n layoutType = eventLayout.type;\n return me.packEventsInBands(events, (tplData, clusterIndex, slot, slotSize) => {\n // Stretch events to fill available width\n if (layoutType === 'none') {\n tplData.width = columnWidth - resourceMarginTotal;\n tplData.left += resourceMarginStart;\n }\n else {\n // Fractions of resource column\n tplData.widthFactor = slotSize;\n const\n leftFactor = tplData.leftFactor = slot.start + (clusterIndex * slotSize),\n // Number of \"columns\" in the current slot\n packColumnCount = Math.round(1 / slotSize),\n // Index among those columns for current event\n packColumnIndex = leftFactor / slotSize,\n // Width with all bar margins subtracted\n availableWidth = columnWidth - resourceMarginTotal - barMargin * (packColumnCount - 1);\n // Allowing two events to overlap? Slightly offset the second\n if (layoutType === 'mixed' && packColumnCount === 2) {\n tplData.left += leftFactor * columnWidth / 5 + barMargin;\n tplData.width = columnWidth - leftFactor * columnWidth / 5 - barMargin * 2;\n tplData.zIndex = 5 + packColumnIndex;\n }\n // Pack by default\n else {\n // Fractional width\n tplData.width = slotSize * availableWidth;\n // Translate to absolute position\n tplData.left += leftFactor * availableWidth + resourceMarginStart + barMargin * packColumnIndex;\n }\n }\n tplData.cls['b-sch-event-narrow'] = tplData.width < me.scheduler.narrowEventWidth;\n });\n }\n}\nVerticalLayout._$name = 'VerticalLayout';", "import Base from '../../../Core/Base.js';\nimport Delayable from '../../../Core/mixin/Delayable.js';\nimport DomHelper from '../../../Core/helper/DomHelper.js';\nimport DomSync from '../../../Core/helper/DomSync.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\nimport VerticalLayout from '../../eventlayout/VerticalLayout.js';\nimport Rectangle from '../../../Core/helper/util/Rectangle.js';\nimport DateHelper from '../../../Core/helper/DateHelper.js';\nimport AttachToProjectMixin from '../../data/mixin/AttachToProjectMixin.js';\n/**\n * @module Scheduler/view/orientation/VerticalRendering\n */\nconst\n releaseEventActions = {\n releaseElement : 1, // Not used at all at the moment\n reuseElement : 1 // Used by some other element\n },\n renderEventActions = {\n newElement : 1,\n reuseOwnElement : 1,\n reuseElement : 1\n },\n chronoFields = {\n startDate : 1,\n endDate : 1,\n duration : 1\n },\n emptyObject = Object.freeze({});\n/**\n * Handles event rendering in Schedulers vertical mode. Reacts to project/store changes to keep the UI up to date.\n *\n * @internal\n */\nexport default class VerticalRendering extends Base.mixin(Delayable, AttachToProjectMixin) {\n //region Config & Init\n static get properties() {\n return {\n eventMap : new Map(),\n resourceMap : new Map(),\n releasedElements : {},\n toDrawOnProjectRefresh : new Set(),\n resourceBufferSize : 1\n };\n }\n construct(scheduler) {\n this.client = this.scheduler = scheduler;\n this.verticalLayout = new VerticalLayout({ scheduler });\n super.construct({});\n }\n init() {\n const\n me = this,\n { scheduler, resourceColumns } = me;\n // Resource header/columns\n resourceColumns.resourceStore = me.resourceStore;\n resourceColumns.ion({\n name : 'resourceColumns',\n columnWidthChange : 'onResourceColumnWidthChange',\n thisObj : me\n });\n me.initialized = true;\n if (scheduler.isPainted) {\n me.renderer();\n }\n resourceColumns.availableWidth = scheduler.timeAxisSubGridElement.offsetWidth;\n }\n //endregion\n //region Elements <-> Records\n resolveRowRecord(elementOrEvent, xy) {\n const\n me = this,\n { scheduler } = me,\n event = elementOrEvent.nodeType ? null : elementOrEvent,\n element = event ? event.target : elementOrEvent,\n coords = event ? [event.borderOffsetX, event.borderOffsetY] : xy,\n // Fix for FF on Linux having text nodes as event.target\n el = element.nodeType === Element.TEXT_NODE ? element.parentElement : element,\n eventElement = el.closest(scheduler.eventSelector);\n if (eventElement) {\n return scheduler.resourceStore.getById(eventElement.dataset.resourceId);\n }\n // Need to be inside schedule at least\n if (!element.closest('.b-sch-timeaxis-cell')) {\n return null;\n }\n if (!coords) {\n throw new Error(`Vertical mode needs coordinates to resolve this element. Can also be called with a browser\n event instead of element to extract element and coordinates from`);\n }\n if (scheduler.variableColumnWidths || scheduler.resourceStore.isGrouped) {\n let totalWidth = 0;\n for (const col of me.resourceStore) {\n if (!col.isSpecialRow) {\n totalWidth += scheduler.getResourceWidth(col);\n }\n if (totalWidth >= coords[0]) {\n return col;\n }\n }\n return null;\n }\n const index = Math.floor(coords[0] / me.resourceColumns.columnWidth);\n return me.allResourceRecords[index];\n }\n toggleCls(assignmentRecord, cls, add = true, useWrapper = false) {\n const eventData = this.eventMap.get(assignmentRecord.eventId)?.[assignmentRecord.resourceId];\n if (eventData) {\n eventData.renderData[useWrapper ? 'wrapperCls' : 'cls'][cls] = add;\n // Element from the map cannot be trusted, might be reused in which case map is not updated to reflect that.\n // To be safe, retrieve using `getElementFromAssignmentRecord`\n const element = this.client.getElementFromAssignmentRecord(assignmentRecord, useWrapper);\n if (element) {\n element.classList[add ? 'add' : 'remove'](cls);\n }\n }\n }\n //endregion\n //region Coordinate <-> Date\n getDateFromXY(xy, roundingMethod, local, allowOutOfRange = false) {\n let coord = xy[1];\n if (!local) {\n coord = this.translateToScheduleCoordinate(coord);\n }\n return this.scheduler.timeAxisViewModel.getDateFromPosition(coord, roundingMethod, allowOutOfRange);\n }\n translateToScheduleCoordinate(y) {\n return y - this.scheduler.timeAxisSubGridElement.getBoundingClientRect().top - globalThis.scrollY;\n }\n translateToPageCoordinate(y) {\n return y + this.scheduler.timeAxisSubGridElement.getBoundingClientRect().top + globalThis.scrollY;\n }\n //endregion\n //region Regions\n getResourceEventBox(event, resource) {\n const\n eventId = event.id,\n resourceId = resource.id;\n let { renderData } = this.eventMap.get(eventId)?.[resourceId] || emptyObject;\n if (!renderData) {\n // Never been in view, lay it out\n this.layoutResourceEvents(this.scheduler.resourceStore.getById(resourceId));\n // Have another go at getting the layout data\n renderData = this.eventMap.get(eventId)?.[resourceId]?.renderData;\n }\n return renderData\n ? new Rectangle(renderData.left, renderData.top, renderData.width, renderData.bottom - renderData.top)\n : null;\n }\n getScheduleRegion(resourceRecord, eventRecord, local) {\n const\n me = this,\n { scheduler } = me,\n // Only interested in width / height (in \"local\" coordinates)\n region = Rectangle.from(scheduler.timeAxisSubGridElement, scheduler.timeAxisSubGridElement);\n if (resourceRecord) {\n region.left = me.allResourceRecords.indexOf(resourceRecord) * scheduler.resourceColumnWidth;\n region.right = region.left + scheduler.resourceColumnWidth;\n }\n const\n start = scheduler.timeAxis.startDate,\n end = scheduler.timeAxis.endDate,\n dateConstraints = scheduler.getDateConstraints?.(resourceRecord, eventRecord) || {\n start,\n end\n },\n startY = scheduler.getCoordinateFromDate(DateHelper.max(start, dateConstraints.start)),\n endY = scheduler.getCoordinateFromDate(DateHelper.min(end, dateConstraints.end));\n if (!local) {\n region.top = me.translateToPageCoordinate(startY);\n region.bottom = me.translateToPageCoordinate(endY);\n }\n else {\n region.top = startY;\n region.bottom = endY;\n }\n return region;\n }\n getRowRegion(resourceRecord, startDate, endDate) {\n const\n me = this,\n { scheduler } = me,\n x = me.allResourceRecords.indexOf(resourceRecord) * scheduler.resourceColumnWidth,\n taStart = scheduler.timeAxis.startDate,\n taEnd = scheduler.timeAxis.endDate,\n start = startDate ? DateHelper.max(taStart, startDate) : taStart,\n end = endDate ? DateHelper.min(taEnd, endDate) : taEnd,\n startY = scheduler.getCoordinateFromDate(start),\n endY = scheduler.getCoordinateFromDate(end, true, true),\n y = Math.min(startY, endY),\n height = Math.abs(startY - endY);\n return new Rectangle(x, y, scheduler.resourceColumnWidth, height);\n }\n get visibleDateRange() {\n const\n scheduler = this.scheduler,\n scrollPos = scheduler.scrollable.y,\n height = scheduler.scrollable.clientHeight,\n startDate = scheduler.getDateFromCoordinate(scrollPos) || scheduler.timeAxis.startDate,\n endDate = scheduler.getDateFromCoordinate(scrollPos + height) || scheduler.timeAxis.endDate;\n return {\n startDate,\n endDate,\n startMS : startDate.getTime(),\n endMS : endDate.getTime()\n };\n }\n //endregion\n //region Events\n // Column width changed, rerender fully\n onResourceColumnWidthChange({ width, oldWidth }) {\n const\n me = this,\n { scheduler } = me;\n // Fix width of column & header\n me.resourceColumns.width = scheduler.timeAxisColumn.width = me.allResourceRecords.length * width;\n me.clearAll();\n // Only transition large changes, otherwise it is janky when dragging slider in demo\n me.refresh(Math.abs(width - oldWidth) > 30);\n // Not detected by resizeobserver? Need to call this for virtual scrolling to react to update\n // scheduler.callEachSubGrid('refreshFakeScroll');\n // scheduler.refreshVirtualScrollbars();\n scheduler.onVisibleResourceColumnChange(width, oldWidth);\n }\n //endregion\n //region Project\n attachToProject(project) {\n super.attachToProject(project);\n if (project) {\n project.ion({\n name : 'project',\n refresh : 'onProjectRefresh',\n thisObj : this\n });\n }\n }\n onProjectRefresh() {\n const\n me = this,\n { scheduler, toDrawOnProjectRefresh } = me;\n // Only update the UI immediately if we are visible\n if (scheduler.isVisible) {\n if (scheduler.rendered && !scheduler.refreshSuspended) {\n // Either refresh all rows (on for example dataset)\n if (me.refreshAllWhenReady) {\n me.clearAll();\n //scheduler.refreshWithTransition();\n me.refresh();\n me.refreshAllWhenReady = false;\n }\n // Or only affected rows (if any)\n else if (toDrawOnProjectRefresh.size) {\n me.refresh();\n }\n toDrawOnProjectRefresh.clear();\n }\n }\n // Otherwise wait till next time we get painted (shown, or a hidden ancestor shown)\n else {\n scheduler.whenVisible('refresh', scheduler, [true]);\n }\n }\n //endregion\n //region EventStore\n attachToEventStore(eventStore) {\n super.attachToEventStore(eventStore);\n this.refreshAllWhenReady = true;\n if (eventStore) {\n eventStore.ion({\n name : 'eventStore',\n addConfirmed : 'onEventStoreAddConfirmed',\n refreshPreCommit : 'onEventStoreRefresh',\n thisObj : this\n });\n }\n }\n onEventStoreAddConfirmed({ record }) {\n for (const element of this.client.getElementsFromEventRecord(record)) {\n element.classList.remove('b-iscreating');\n }\n }\n onEventStoreRefresh({ action }) {\n if (action === 'batch') {\n this.refreshAllWhenReady = true;\n }\n }\n onEventStoreChange({ action, records : eventRecords = [], record, replaced, changes, isAssign }) {\n const\n me = this,\n resourceIds = new Set();\n eventRecords.forEach(eventRecord => {\n // Update all resource rows to which this event is assigned *if* the resourceStore\n // contains that resource (We could have filtered the resourceStore)\n const renderedEventResources = eventRecord.$linkedResources?.filter(r => me.resourceStore.includes(r));\n renderedEventResources?.forEach(resourceRecord => resourceIds.add(resourceRecord.id));\n });\n switch (action) {\n // No-ops\n case 'sort': // Order in EventStore does not matter, so these actions are no-ops\n case 'group':\n case 'move':\n case 'remove': // Remove is a no-op since assignment will also be removed\n case 'batch':\n return;\n case 'dataset':\n me.refreshAllResourcesWhenReady();\n return;\n case 'add':\n case 'updateMultiple':\n // Just refresh below\n break;\n case 'replace':\n // Gather resources from both the old record and the new one\n replaced.forEach(([, newEvent]) => {\n // Old cleared by changed assignment\n newEvent.resources.map(resourceRecord => resourceIds.add(resourceRecord.id));\n });\n // And clear them\n me.clearResources(resourceIds);\n break;\n case 'removeall':\n case 'filter':\n // Clear all when filtering for simplicity. If that turns out to give bad performance, one would need to\n // figure out which events was filtered out and only clear their resources.\n me.clearAll();\n me.refresh();\n return;\n case 'update': {\n // Check if changes are graph related or not\n const allChrono = record.$entity\n ? !Object.keys(changes).some(name => !record.$entity.getField(name))\n : !Object.keys(changes).some(name => !chronoFields[name]);\n // If any one of these in changes, it will affect visuals\n let changeCount = 0;\n if ('startDate' in changes) changeCount++;\n if ('endDate' in changes) changeCount++;\n if ('duration' in changes) changeCount++;\n // Always redraw non chrono changes (name etc)\n if (!allChrono || changeCount || 'percentDone' in changes || 'inactive' in changes || 'segments' in changes) {\n if (me.shouldWaitForInitializeAndEngineReady) {\n me.refreshResourcesWhenReady(resourceIds);\n }\n else {\n me.clearResources(resourceIds);\n me.refresh();\n }\n }\n return;\n }\n }\n me.refreshResourcesWhenReady(resourceIds);\n }\n //endregion\n //region ResourceStore\n attachToResourceStore(resourceStore) {\n const me = this;\n super.attachToResourceStore(resourceStore);\n me.refreshAllWhenReady = true;\n if (me.resourceColumns) {\n me.resourceColumns.resourceStore = resourceStore;\n }\n resourceStore.ion({\n name : 'resourceStore',\n changePreCommit : 'onResourceStoreChange',\n refreshPreCommit : 'onResourceStoreRefresh',\n // In vertical, resource store is not the row store but should toggle the load mask\n load : () => me.scheduler.unmaskBody(),\n thisObj : me,\n prio : 1 // Call before others to clear cache before redraw\n });\n if (me.initialized && me.scheduler.isPainted) {\n // Invalidate resource range and events\n me.firstResource = me.lastResource = null;\n me.clearAll();\n me.renderer();\n }\n }\n onResourceStoreChange({ source : resourceStore, action, records = [], record, replaced, changes }) {\n const\n me = this,\n // records for add, record for update, replaced [[old, new]] for replace\n resourceRecords = replaced ? replaced.map(r => r[1]) : records,\n resourceIds = new Set(resourceRecords.map(resourceRecord => resourceRecord.id));\n // Invalidate resource range\n me.firstResource = me.lastResource = null;\n resourceStore._allResourceRecords = null;\n const { allResourceRecords } = resourceStore;\n // Operation that did not invalidate engine, refresh directly\n if (me.scheduler.isEngineReady) {\n switch (action) {\n case 'update':\n if (changes?.id) {\n me.clearResources([changes.id.oldValue, changes.id.value]);\n }\n else {\n me.clearResources([record.id]);\n }\n // Only the invalidation above needed\n break;\n case 'filter':\n // All filtered out resources needs clearing and so does those not filtered out since they might have\n // moved horizontally when others hide\n me.clearAll();\n break;\n }\n // Changing a column width means columns after that will have to be recalculated\n // so clear all cached layouts.\n if (changes && ('columnWidth' in changes)) {\n record.instanceMeta(me.scheduler).columnWidth = record.columnWidth;\n me.clearAll();\n }\n me.refresh(true);\n }\n // Operation that did invalidate project, update on project refresh\n else {\n switch (action) {\n case 'dataset':\n case 'remove': // Cannot tell from which index it was removed\n case 'removeall':\n me.refreshAllResourcesWhenReady();\n return;\n case 'replace':\n case 'add': {\n if (!resourceStore.isGrouped) {\n // Make sure all existing events following added resources are offset correctly\n const\n firstIndex = resourceRecords.reduce(\n (index, record) => Math.min(index, allResourceRecords.indexOf(record)),\n allResourceRecords.length\n );\n for (let i = firstIndex; i < allResourceRecords.length; i++) {\n resourceIds.add(allResourceRecords[i].id);\n }\n }\n }\n }\n me.refreshResourcesWhenReady(resourceIds);\n }\n }\n onResourceStoreRefresh({ action }) {\n const me = this;\n if (action === 'sort' || action === 'group') {\n // Invalidate resource range & cache\n me.firstResource = me.lastResource = me.resourceStore._allResourceRecords = null;\n me.clearAll();\n me.refresh();\n }\n }\n //endregion\n //region AssignmentStore\n attachToAssignmentStore(assignmentStore) {\n super.attachToAssignmentStore(assignmentStore);\n this.refreshAllWhenReady = true;\n if (assignmentStore) {\n assignmentStore.ion({\n name : 'assignmentStore',\n changePreCommit : 'onAssignmentStoreChange',\n refreshPreCommit : 'onAssignmentStoreRefresh',\n thisObj : this\n });\n }\n }\n onAssignmentStoreChange({ action, records : assignmentRecords = [], replaced, changes }) {\n const\n me = this,\n resourceIds = new Set(assignmentRecords.map(assignmentRecord => assignmentRecord.resourceId));\n // Operation that did not invalidate engine, refresh directly\n if (me.scheduler.isEngineReady) {\n switch (action) {\n case 'remove':\n me.clearResources(resourceIds);\n break;\n case 'filter':\n me.clearAll();\n break;\n case 'update': {\n // When reassigning, clear old resource also\n if ('resourceId' in changes) {\n resourceIds.add(changes.resourceId.oldValue);\n }\n // Ignore engine resolving resourceId -> resource, eventId -> event\n if (!Object.keys(changes).filter(field => field !== 'resource' && field !== 'event').length) {\n return;\n }\n me.clearResources(resourceIds);\n }\n }\n me.refresh(true);\n }\n // Operation that did invalidate project, update on project refresh\n else {\n if (changes && 'resourceId' in changes) {\n resourceIds.add(changes.resourceId.oldValue);\n }\n switch (action) {\n case 'removeall':\n me.refreshAllResourcesWhenReady();\n return;\n case 'replace':\n // Gather resources from both the old record and the new one\n replaced.forEach(([oldAssignment, newAssignment]) => {\n resourceIds.add(oldAssignment.resourceId);\n resourceIds.add(newAssignment.resourceId);\n });\n }\n me.refreshResourcesWhenReady(resourceIds);\n }\n }\n onAssignmentStoreRefresh({ action, records }) {\n if (action === 'batch') {\n this.clearAll();\n this.refreshAllResourcesWhenReady();\n }\n }\n //endregion\n //region View hooks\n refreshRows(reLayoutEvents) {\n if (reLayoutEvents) {\n this.clearAll();\n this.scheduler.refreshFromRerender = false;\n }\n }\n // Called from SchedulerEventRendering\n repaintEventsForResource(resourceRecord) {\n const { resourceColumns } = this.scheduler;\n this.renderResource(resourceRecord);\n // When using custom layout, it needs to refresh resource column header because the width of each resource could be changed after the layout is applied.\n if (this.scheduler.internalEventLayout.type === 'layoutFn') {\n resourceColumns.updateWidthCache();\n resourceColumns.refresh();\n }\n }\n updateFromHorizontalScroll(scrollX) {\n if (scrollX !== this.prevScrollX) {\n this.renderer();\n this.prevScrollX = scrollX;\n }\n }\n updateFromVerticalScroll() {\n this.renderer();\n }\n scrollResourceIntoView(resourceRecord, options) {\n const\n { scheduler } = this,\n x = this.allResourceRecords.indexOf(resourceRecord) * scheduler.resourceColumnWidth;\n return scheduler.scrollHorizontallyTo(x, options);\n }\n get allResourceRecords() {\n return this.scheduler.resourceStore.allResourceRecords;\n }\n // Called when viewport size changes\n onViewportResize(width) {\n if (this.resourceColumns.availableWidth !== width) {\n this.resourceColumns.availableWidth = width;\n // In vertical mode, after changing availableWith, all resources could fit in the availableWidth without the need of the scrollbar.\n // Then it needs to call refreshVirtualScrollbars in order to hide that scrollbar. After hiding the scrollbar,\n // the timeline has more space and its height increases, with the result that more events could be displayed (instead of releasing them).\n this.scheduler.refreshVirtualScrollbars();\n }\n this.renderer();\n }\n get resourceColumns() {\n return this.scheduler.timeAxisColumn?.resourceColumns;\n }\n // Clear events in case they use date as part of displayed info\n onLocaleChange() {\n this.clearAll();\n }\n // No need to do anything special\n onDragAbort() {}\n onBeforeRowHeightChange() {}\n onTimeAxisViewModelUpdate() {}\n updateElementId() {}\n releaseTimeSpanDiv() {}\n //endregion\n //region Dependency connectors\n /**\n * Gets displaying item start side\n *\n * @param {Scheduler.model.EventModel} eventRecord\n * @returns {'top'|'left'|'bottom'|'right'} 'left' / 'right' / 'top' / 'bottom'\n */\n getConnectorStartSide(eventRecord) {\n return 'top';\n }\n /**\n * Gets displaying item end side\n *\n * @param {Scheduler.model.EventModel} eventRecord\n * @returns {'top'|'left'|'bottom'|'right'} 'left' / 'right' / 'top' / 'bottom'\n */\n getConnectorEndSide(eventRecord) {\n return 'bottom';\n }\n //endregion\n //region Refresh resources\n /**\n * Clears resources directly and redraws them on next project refresh\n * @param {Number[]|String[]} resourceIds\n * @private\n */\n refreshResourcesWhenReady(resourceIds) {\n this.clearResources(resourceIds);\n resourceIds.forEach(id => this.toDrawOnProjectRefresh.add(id));\n }\n /**\n * Clears all resources directly and redraws them on next project refresh\n * @private\n */\n refreshAllResourcesWhenReady() {\n this.clearAll();\n this.refreshAllWhenReady = true;\n }\n //region Rendering\n // Resources in view + buffer\n get resourceRange() {\n return this.getResourceRange(true);\n }\n // Resources strictly in view\n get visibleResources() {\n const { first, last } = this.getResourceRange();\n return {\n first : this.allResourceRecords[first],\n last : this.allResourceRecords[last]\n };\n }\n getResourceRange(withBuffer) {\n const\n {\n scheduler,\n resourceStore\n } = this,\n {\n resourceColumnWidth,\n scrollX\n } = scheduler,\n {\n scrollWidth\n } = scheduler.timeAxisSubGrid.scrollable,\n resourceBufferSize = withBuffer ? this.resourceBufferSize : 0,\n viewportStart = scrollX - resourceBufferSize,\n viewportEnd = scrollX + scrollWidth + resourceBufferSize;\n if (!resourceStore?.count) {\n return { first : -1, last : -1 };\n }\n // Some resources define their own width\n if (scheduler.variableColumnWidths) {\n let first, last = 0, start, end = 0;\n this.allResourceRecords.forEach((resource, i) => {\n resource.instanceMeta(scheduler).insetStart = start = end;\n end = start + scheduler.getResourceWidth(resource);\n if (start > viewportEnd) {\n return false;\n }\n if (end > viewportStart && first == null) {\n first = i;\n }\n else if (start < viewportEnd) {\n last = i;\n }\n });\n return { first, last };\n }\n // We are using fixed column widths\n else {\n return {\n first : Math.max(Math.floor(scrollX / resourceColumnWidth) - resourceBufferSize, 0),\n last : Math.min(\n Math.floor((scrollX + scheduler.timeAxisSubGrid.width) / resourceColumnWidth) + resourceBufferSize,\n this.allResourceRecords.length - 1\n )\n };\n }\n }\n // Dates in view + buffer\n get dateRange() {\n const\n { scheduler } = this;\n let bottomDate = scheduler.getDateFromCoordinate(Math.min(\n scheduler.scrollTop + scheduler.bodyHeight + scheduler.tickSize - 1,\n (scheduler.virtualScrollHeight || scheduler.scrollable.scrollHeight) - 1)\n );\n // Might end up below time axis (out of ticks)\n if (!bottomDate) {\n bottomDate = scheduler.timeAxis.last.endDate;\n }\n let topDate = scheduler.getDateFromCoordinate(Math.max(scheduler.scrollTop - scheduler.tickSize, 0));\n // Might end up above time axis when reconfiguring (since this happens as part of rendering)\n if (!topDate) {\n topDate = scheduler.timeAxis.first.startDate;\n bottomDate = scheduler.getDateFromCoordinate(scheduler.bodyHeight + scheduler.tickSize - 1);\n }\n return {\n topDate,\n bottomDate\n };\n }\n getTimeSpanRenderData(eventRecord, resourceRecord, includeOutside = false) {\n const\n me = this,\n {\n scheduler\n } = me,\n {\n preamble,\n postamble\n } = eventRecord,\n {\n variableColumnWidths\n } = scheduler,\n useEventBuffer = scheduler.features.eventBuffer?.enabled && me.isProVerticalRendering &&\n (preamble || postamble) && !eventRecord.isMilestone,\n startDateField = useEventBuffer ? 'wrapStartDate' : 'startDate',\n endDateField = useEventBuffer ? 'wrapEndDate' : 'endDate',\n // Must use Model.get in order to get latest values in case we are inside a batch.\n // EventResize changes the endDate using batching to enable a tentative change\n // via the batchedUpdate event which is triggered when changing a field in a batch.\n // Fall back to accessor if propagation has not populated date fields.\n startDate = eventRecord.isBatchUpdating && eventRecord.hasBatchedChange(startDateField) && !useEventBuffer\n ? eventRecord.get(startDateField) : eventRecord[startDateField],\n endDate = eventRecord.isBatchUpdating && eventRecord.hasBatchedChange(endDateField) && !useEventBuffer\n ? eventRecord.get(endDateField) : eventRecord[endDateField],\n {\n resourceMarginObject : { total }\n } = scheduler.getResourceLayoutSettings(resourceRecord),\n top = scheduler.getCoordinateFromDate(startDate),\n instanceMeta = resourceRecord.instanceMeta(scheduler),\n // Preliminary values for left & width, used for proxy. Will be changed on layout.\n // The property \"left\" is utilized based on Scheduler's rtl setting.\n // If RTL, then it's used as the \"right\" style position.\n left = variableColumnWidths ? instanceMeta.insetStart : me.allResourceRecords.indexOf(resourceRecord) * scheduler.resourceColumnWidth,\n resourceWidth = scheduler.getResourceWidth(resourceRecord),\n width = resourceWidth - total,\n startDateMS = startDate.getTime(),\n endDateMS = endDate.getTime();\n let bottom = scheduler.getCoordinateFromDate(endDate),\n height = bottom - top;\n // Below, estimate height\n if (bottom === -1) {\n height = Math.round((endDateMS - startDateMS) * scheduler.timeAxisViewModel.getSingleUnitInPixels('millisecond'));\n bottom = top + height;\n }\n return {\n eventRecord,\n resourceRecord,\n left,\n top,\n bottom,\n resourceWidth,\n width,\n height,\n startDate,\n endDate,\n startDateMS,\n endDateMS,\n useEventBuffer,\n children : [],\n start : startDate,\n end : endDate,\n startMS : startDateMS,\n endMS : endDateMS\n };\n }\n // Earlier start dates are above later tasks\n // If same start date, longer tasks float to top\n // If same start + duration, sort by name\n eventSorter(a, b) {\n const\n startA = a.dataStartMs || a.startDateMS, // dataXX are used if configured with fillTicks\n endA = a.dataEndMs || a.endDateMS,\n startB = b.dataStartMs || b.startDateMS,\n endB = b.dataEndMs || b.endDateMS,\n nameA = a.isModel ? a.name : a.eventRecord.name,\n nameB = b.isModel ? b.name : b.eventRecord.name;\n return startA - startB || endB - endA || (nameA < nameB ? -1 : nameA == nameB ? 0 : 1);\n }\n layoutEvents(resourceRecord, allEvents, includeOutside = false, parentEventRecord, eventSorter) {\n const\n me = this,\n { scheduler } = me,\n {\n variableColumnWidths\n } = scheduler,\n { id : resourceId } = resourceRecord,\n instanceMeta = resourceRecord.instanceMeta(scheduler),\n cacheKey = parentEventRecord ? `${resourceId}-${parentEventRecord.id}` : resourceId,\n // Cache per resource\n cache = me.resourceMap.set(cacheKey, {}).get(cacheKey),\n // Resource \"column\"\n resourceIndex = me.allResourceRecords.indexOf(resourceRecord);\n const layoutData = allEvents.reduce((toLayout, eventRecord) => {\n if (eventRecord.isScheduled) {\n const\n renderData = scheduler.generateRenderData(eventRecord, resourceRecord, false),\n // Elements will be appended to eventData during syncing\n eventData = { renderData },\n eventResources = ObjectHelper.getMapPath(me.eventMap, renderData.eventId, {});\n // Cache per event, { e1 : { r1 : { xxx }, r2 : ... }, e2 : ... }\n // Uses renderData.eventId in favor of eventRecord.id to work with ResourceTimeRanges\n eventResources[resourceId] = eventData;\n // Cache per resource\n cache[renderData.eventId] = eventData;\n // Position ResourceTimeRanges directly, they do not affect the layout of others\n if (renderData.fillSize) {\n // The property \"left\" is utilized based on Scheduler's rtl setting.\n // If RTL, then it's used as the \"right\" style position.\n renderData.left = variableColumnWidths ? instanceMeta.insetStart : resourceIndex * scheduler.resourceColumnWidth;\n renderData.width = scheduler.getResourceWidth(resourceRecord);\n }\n // Anything not flagged with `fillSize` should take part in layout\n else {\n toLayout.push(renderData);\n }\n }\n return toLayout;\n }, []);\n // Ensure the events are rendered in natural order so that navigation works.\n layoutData.sort(eventSorter ?? me.eventSorter);\n // Apply per resource event layout (pack, overlap, mixed or custom (avaialable only for Pro version))\n me.verticalLayout.applyLayout(\n layoutData,\n resourceRecord,\n parentEventRecord\n );\n return cache;\n }\n // Calculate the layout for all events assigned to a resource. Since we are never stacking, the layout of one\n // resource will never affect the others\n layoutResourceEvents(resourceRecord) {\n const\n me = this,\n { scheduler } = me,\n // Used in loop, reduce access time a wee bit\n {\n assignmentStore,\n eventStore,\n timeAxis\n } = scheduler;\n // Events for the resource, minus those that are filtered out by filtering assignments and events\n let events = eventStore.getEvents({\n includeOccurrences : scheduler.enableRecurringEvents,\n resourceRecord,\n startDate : timeAxis.startDate,\n endDate : timeAxis.endDate,\n filter : (assignmentStore.isFiltered || eventStore.isFiltered) && (eventRecord =>\n eventRecord.assignments.some(a => a.resource === resourceRecord && assignmentStore.includes(a)))\n });\n // Hook for features to inject additional timespans to render\n events = scheduler.getEventsToRender(resourceRecord, events);\n return me.layoutEvents(resourceRecord, events);\n }\n /**\n * Used by event drag features to bring into existence event elements that are outside of the rendered block.\n * @param {Scheduler.model.TimeSpan} eventRecord The event to render\n * @private\n */\n addTemporaryDragElement(eventRecord) {\n const\n { scheduler } = this,\n renderData = scheduler.generateRenderData(\n eventRecord,\n eventRecord.resource,\n { timeAxis : true, viewport : true }\n );\n renderData.top = renderData.row\n ? (renderData.top + renderData.row.top)\n : scheduler.getResourceEventBox(eventRecord, eventRecord.resource, true).top;\n const\n domConfig = this.renderEvent({ renderData }),\n { dataset } = domConfig;\n delete domConfig.tabIndex;\n delete dataset.eventId;\n delete dataset.resourceId;\n delete dataset.assignmentId;\n delete dataset.syncId;\n dataset.transient = true;\n domConfig.parent = this.scheduler.foregroundCanvas;\n // So that the regular DomSyncing which may happen during scroll does not\n // sweep up and reuse the temporary element.\n domConfig.retainElement = true;\n const result = DomHelper.createElement(domConfig);\n result.innerElement = result.firstChild;\n eventRecord.instanceMeta(scheduler).hasTemporaryDragElement = true;\n return result;\n }\n // To update an event, first release its element and then render it again.\n // The element will be reused and updated. Keeps code simpler\n renderEvent(eventData) {\n // No point in rendering event that already has an element\n const\n { scheduler } = this,\n data = eventData.renderData,\n {\n resourceRecord,\n assignmentRecord,\n eventRecord\n } = data,\n // Event element config, applied to existing element or used to create a new one below\n elementConfig = {\n className : data.wrapperCls,\n tabIndex : -1,\n children : [\n {\n role : 'presentation',\n className : data.cls,\n style : (data.internalStyle || '') + (data.style || ''),\n children : data.children,\n dataset : {\n // Each feature putting contents in the event wrap should have this to simplify syncing and\n // element retrieval after sync\n taskFeature : 'event'\n },\n syncOptions : {\n syncIdField : 'taskBarFeature'\n }\n },\n ...data.wrapperChildren\n ],\n style : {\n top : data.top,\n [scheduler.rtl ? 'right' : 'left'] : data.left,\n // DomHelper appends px to dimensions when using numbers\n height : eventRecord.isMilestone ? '1em' : data.height,\n width : data.width,\n style : data.wrapperStyle || '',\n fontSize : eventRecord.isMilestone ? Math.min(data.width, 40) : null\n },\n dataset : {\n // assignmentId is set in this function conditionally\n resourceId : resourceRecord.id,\n eventId : data.eventId, // Not using eventRecord.id to distinguish between Event and ResourceTimeRange\n // Sync using assignment id for events and event id for ResourceTimeRanges\n syncId : assignmentRecord ? this.assignmentStore.getOccurrence(assignmentRecord, eventRecord).id : data.eventId\n },\n // Will not be part of DOM, but attached to the element\n elementData : eventData,\n // Dragging etc. flags element as retained, to not reuse/release it during that operation. Events\n // always use assignments, but ResourceTimeRanges does not\n retainElement : (assignmentRecord || eventRecord).instanceMeta(this.scheduler).retainElement,\n // Options for this level of sync, lower levels can have their own\n syncOptions : {\n syncIdField : 'taskFeature',\n // Remove instead of release when a feature is disabled\n releaseThreshold : 0\n }\n };\n elementConfig.className['b-sch-vertical'] = 1;\n // Some browsers throw warnings on zIndex = ''\n if (data.zIndex) {\n elementConfig.zIndex = data.zIndex;\n }\n // Do not want to spam dataset with empty prop when not using assignments (ResourceTimeRanges)\n if (assignmentRecord) {\n elementConfig.dataset.assignmentId = assignmentRecord.id;\n }\n // Allows access to the used config later, for example to retrieve element\n data.elementConfig = eventData.elementConfig = elementConfig;\n scheduler.afterRenderEvent({ renderData : data, domConfig : elementConfig });\n return elementConfig;\n }\n renderResource(resourceRecord) {\n const\n me = this,\n // Date at top and bottom for determining which events to include\n { topDateMS, bottomDateMS } = me,\n // Will hold element configs\n eventDOMConfigs = [];\n let resourceEntry = me.resourceMap.get(resourceRecord.id);\n // Layout all events for the resource unless already done\n if (!resourceEntry) {\n resourceEntry = me.layoutResourceEvents(resourceRecord);\n }\n // Iterate over all events for the resource\n for (const eventId in resourceEntry) {\n const\n eventData = resourceEntry[eventId],\n { endDateMS, startDateMS, eventRecord } = eventData.renderData;\n if (\n // Only collect configs for those actually in view\n endDateMS >= topDateMS && startDateMS <= bottomDateMS &&\n // And not being dragged, those have a temporary element already\n !eventRecord.instanceMeta(me.scheduler).hasTemporaryDragElement\n ) {\n // Reuse DomConfig if available, otherwise render event to create one\n const domConfig = eventData.elementConfig?.className !== 'b-released' && eventData.elementConfig || me.renderEvent(eventData);\n eventDOMConfigs.push(domConfig);\n }\n }\n return eventDOMConfigs;\n }\n isEventElement(domConfig) {\n const className = domConfig && domConfig.className;\n return className && className[this.scheduler.eventCls + '-wrap'];\n }\n get shouldWaitForInitializeAndEngineReady() {\n return !this.initialized || (!this.scheduler.isEngineReady && !this.scheduler.isCreating);\n }\n // Single cell so only one call to this renderer, determine which events are in view and draw them.\n // Drawing on scroll is triggered by `updateFromVerticalScroll()` and `updateFromHorizontalScroll()`\n renderer() {\n const\n me = this,\n { scheduler } = me,\n // Date at top and bottom for determining which events to include\n { topDate, bottomDate } = me.dateRange,\n syncConfigs = [],\n featureDomConfigs = [],\n { allResourceRecords } = me;\n // Determine resource range to draw events for\n let { first : firstResource, last : lastResource } = me.resourceRange;\n // If scheduler is creating a new event, the render needs to be synchronous, so\n // we cannot wait for the engine to normalize - the new event will have correct data set.\n if (me.shouldWaitForInitializeAndEngineReady) {\n return;\n }\n // Update current time range, reflecting the change on the vertical time axis header\n if (!DateHelper.isEqual(topDate, me.topDate) || !DateHelper.isEqual(bottomDate, me.bottomDate)) {\n // Calculated values used by `renderResource()`\n me.topDate = topDate;\n me.bottomDate = bottomDate;\n me.topDateMS = topDate.getTime();\n me.bottomDateMS = bottomDate.getTime();\n const range = me.timeView.range = { startDate : topDate, endDate : bottomDate };\n scheduler.internalOnVisibleDateRangeChange(range);\n }\n if (firstResource !== -1 && lastResource !== -1) {\n if (scheduler.internalEventLayout.type === 'layoutFn' && firstResource !== undefined) {\n // Custom layout is a Pro feature and it is located in ProVerticalRendering.js\n me.renderResourceCustomLayout(syncConfigs);\n }\n else {\n // Collect all events for resources in view\n for (let i = firstResource; i <= lastResource; i++) {\n syncConfigs.push.apply(syncConfigs, me.renderResource(allResourceRecords[i]));\n }\n }\n const { resourceRange } = me;\n firstResource = resourceRange.first;\n lastResource = resourceRange.last;\n }\n scheduler.getForegroundDomConfigs(featureDomConfigs);\n syncConfigs.push.apply(syncConfigs, featureDomConfigs);\n DomSync.sync({\n domConfig : {\n onlyChildren : true,\n children : syncConfigs\n },\n targetElement : scheduler.foregroundCanvas,\n syncIdField : 'syncId',\n // Called by DomHelper when it creates, releases or reuses elements\n callback({ action, domConfig, lastDomConfig, targetElement, jsx }) {\n const { reactComponent } = scheduler;\n // If element is an event wrap, trigger appropriate events\n if (me.isEventElement(domConfig) || jsx || domConfig?.elementData?.jsx) {\n const\n // Some actions are considered first a release and then a render (reusing another element).\n // This gives clients code a chance to clean up before reusing an element\n isRelease = releaseEventActions[action],\n isRender = renderEventActions[action];\n if (scheduler.processEventContent?.({\n action,\n domConfig,\n isRelease : false,\n targetElement,\n reactComponent,\n jsx\n })) return;\n // If we are reusing an element that was previously released we should not trigger again\n if (isRelease && me.isEventElement(lastDomConfig) && !lastDomConfig.isReleased) {\n const\n data = lastDomConfig.elementData.renderData,\n event = {\n renderData : data,\n assignmentRecord : data.assignmentRecord,\n eventRecord : data.eventRecord,\n resourceRecord : data.resourceRecord,\n element : targetElement\n };\n // Release any portal in React event content\n scheduler.processEventContent?.({\n isRelease,\n targetElement,\n reactComponent,\n assignmentRecord : data.assignmentRecord\n });\n // Some browsers do not blur on set to display:none, so releasing the active element\n // must *explicitly* move focus outwards to the view.\n if (targetElement === DomHelper.getActiveElement(targetElement)) {\n scheduler.focusElement.focus();\n }\n // This event is documented on Scheduler\n scheduler.trigger('releaseEvent', event);\n }\n if (isRender) {\n const\n data = domConfig.elementData.renderData,\n event = {\n renderData : data,\n assignmentRecord : data.assignmentRecord,\n eventRecord : data.eventRecord,\n resourceRecord : data.resourceRecord,\n element : targetElement,\n isReusingElement : action === 'reuseElement',\n isRepaint : action === 'reuseOwnElement'\n };\n event.reusingElement = action === 'reuseElement';\n // This event is documented on Scheduler\n scheduler.trigger('renderEvent', event);\n }\n }\n }\n });\n // Change in displayed resources?\n if (me.firstResource !== firstResource || me.lastResource !== lastResource) {\n // Update header to match\n const range = me.resourceColumns.visibleResources = { firstResource, lastResource };\n // Store which resources are currently in view\n me.firstResource = firstResource;\n me.lastResource = lastResource;\n scheduler.onVisibleResourceRangeChange(range);\n scheduler.trigger('resourceRangeChange', range);\n }\n }\n refresh(transition) {\n this.scheduler.runWithTransition(() => this.renderer(), transition);\n }\n // To match horizontals API, used from EventDrag\n refreshResources(resourceIds) {\n this.clearResources(resourceIds);\n this.refresh();\n }\n // To match horizontals API, used from EventDrag\n refreshEventsForResource(recordOrRow, force = true, draw = true) {\n this.refreshResources([recordOrRow.id]);\n }\n onRenderDone() {\n }\n //endregion\n //region Other\n get timeView() {\n return this.scheduler.timeView;\n }\n //endregion\n //region Cache\n // Clears cached resource layout\n clearResources(resourceIds) {\n const { resourceMap, eventMap } = this;\n resourceIds.forEach(resourceId => {\n if (resourceMap.has(resourceId)) {\n // The *keys* of an Object are strings, so we must iterate the values\n // and use the original eventId to look up in the Map which preserves key type.\n Object.values(resourceMap.get(resourceId)).forEach(({ renderData : { eventId } }) => {\n delete eventMap.get(eventId)[resourceId];\n });\n resourceMap.delete(resourceId);\n }\n });\n }\n clearAll() {\n this.resourceMap.clear();\n this.eventMap.clear();\n }\n //endregion\n}\nVerticalRendering._$name = 'VerticalRendering';", "import Widget from '../../Core/widget/Widget.js';\nimport DomSync from '../../Core/helper/DomSync.js';\n/**\n * @module Scheduler/view/TimeAxisBase\n */\nfunction isLastLevel(level, levels) {\n return level === levels.length - 1;\n}\nfunction isLastCell(level, cell) {\n return cell === level.cells[level.cells.length - 1];\n}\n/**\n * Base class for HorizontalTimeAxis and VerticalTimeAxis. Contains shared functionality to only render ticks in view,\n * should not be used directly.\n *\n * @extends Core/widget/Widget\n * @private\n * @abstract\n */\nexport default class TimeAxisBase extends Widget {\n static $name = 'TimeAxisBase';\n //region Config\n static configurable = {\n /**\n * The minimum width for a bottom row header cell to be considered 'compact', which adds a special CSS class\n * to the row (for special styling). Copied from Scheduler/Gantt.\n * @config {Number}\n * @default\n */\n compactCellWidthThreshold : 15,\n // TimeAxisViewModel\n model : null,\n cls : null,\n /**\n * Style property to use as cell size. Either width or height depending on orientation\n * @config {'width'|'height'}\n * @private\n */\n sizeProperty : null,\n /**\n * Style property to use as cells position. Either left or top depending on orientation\n * @config {'left'|'top'}\n * @private\n */\n positionProperty : null\n };\n startDate = null;\n endDate = null;\n levels = [];\n size = null;\n // Set visible date range\n set range({ startDate, endDate }) {\n const me = this;\n // Only process a change\n if (me.startDate - startDate || me.endDate - endDate) {\n const { client } = me;\n me.startDate = startDate;\n me.endDate = endDate;\n // Avoid refreshing if time axis view is not visible\n if ((me.sizeProperty === 'width' && client?.hideHeaders) ||\n (me.sizeProperty === 'height' && client?.verticalTimeAxisColumn?.hidden)) {\n return;\n }\n me.refresh();\n }\n }\n //endregion\n //region Html & rendering\n // Generates element configs for all levels defined by the current ViewPreset\n buildCells(start = this.startDate, end = this.endDate) {\n const\n me = this,\n { sizeProperty } = me,\n {\n stickyHeaders,\n isVertical\n } = me.client || {},\n featureHeaderConfigs = [],\n { length } = me.levels;\n const cellConfigs = me.levels.map((level, i) => {\n const stickyHeader = stickyHeaders && (isVertical || i < length - 1);\n return {\n className : {\n 'b-sch-header-row' : 1,\n [`b-sch-header-row-${level.position}`] : 1,\n 'b-sch-header-row-main' : i === me.model.viewPreset.mainHeaderLevel,\n 'b-lowest' : isLastLevel(i, me.levels),\n 'b-sticky-header' : stickyHeader\n },\n syncOptions : {\n // Keep a maximum of 5 released cells. Might be fine with fewer since ticks are fixed width.\n // Prevents an unnecessary amount of cells from sticking around when switching from narrow to\n // wide tickSizes\n releaseThreshold : 5,\n syncIdField : 'tickIndex'\n },\n dataset : {\n headerFeature : `headerRow${i}`,\n headerPosition : level.position\n },\n // Only include cells in view\n children : level.cells?.filter(cell => cell.start < end && cell.end > start).map((cell, j) => ({\n role : 'presentation',\n className : {\n 'b-sch-header-timeaxis-cell' : 1,\n [cell.headerCellCls] : cell.headerCellCls,\n [`b-align-${cell.align}`] : cell.align,\n 'b-last' : isLastCell(level, cell)\n },\n dataset : {\n tickIndex : cell.index,\n // Used in export tests to resolve dates from tick elements\n ...globalThis.DEBUG && { date : cell.start.getTime() }\n },\n style : {\n // DomHelper appends px to numeric dimensions\n [me.positionProperty] : cell.coord,\n [sizeProperty] : cell.width,\n [`min-${sizeProperty}`] : cell.width\n },\n children : [\n {\n tag : 'span',\n role : 'presentation',\n className : {\n 'b-sch-header-text' : 1,\n 'b-sticky-header' : stickyHeader\n },\n html : cell.value\n }\n ]\n }))\n };\n });\n // When tested in isolation there is no client\n me.client?.getHeaderDomConfigs(featureHeaderConfigs);\n cellConfigs.push(...featureHeaderConfigs);\n // noinspection JSSuspiciousNameCombination\n return {\n onlyChildren : true,\n syncOptions : {\n // Do not keep entire levels no longer used, for example after switching view preset\n releaseThreshold : 0\n },\n children : cellConfigs\n };\n }\n render(targetElement) {\n super.render(targetElement);\n this.refresh(true);\n }\n /**\n * Refresh the UI\n * @param {Boolean} [rebuild] Specify `true` to force a rebuild of the underlying header level definitions\n */\n refresh(rebuild = !this.levels.length) {\n const\n me = this,\n { columnConfig } = me.model,\n { levels } = me,\n oldLevelsCount = levels.length;\n if (rebuild) {\n levels.length = 0;\n columnConfig.forEach((cells, position) => levels[position] = {\n position,\n cells\n });\n me.size = levels[0].cells.reduce((sum, cell) => sum + cell.width, 0);\n const { parentElement } = me.element;\n // Don't mutate a classList unless necessary. Browsers invalidate the style.\n if (parentElement && (levels.length !== oldLevelsCount || rebuild)) {\n parentElement.classList.remove(`b-sch-timeaxiscolumn-levels-${oldLevelsCount}`);\n parentElement.classList.add(`b-sch-timeaxiscolumn-levels-${levels.length}`);\n }\n }\n if (!me.startDate || !me.endDate) {\n return;\n }\n // Boil down levels to only show what is in view\n DomSync.sync({\n domConfig : me.buildCells(),\n targetElement : me.element,\n syncIdField : 'headerFeature'\n });\n me.trigger('refresh');\n }\n //endregion\n // Our widget class doesn't include \"base\".\n get widgetClass() {\n return 'b-timeaxis';\n }\n}\nTimeAxisBase._$name = 'TimeAxisBase';", "import TimeAxisBase from './TimeAxisBase.js';\n/**\n * @module Scheduler/view/HorizontalTimeAxis\n */\n/**\n * A visual horizontal representation of the time axis described in the\n * {@link Scheduler.preset.ViewPreset#field-headers} field.\n * Normally you should not interact with this class directly.\n *\n * @extends Scheduler/view/TimeAxisBase\n * @private\n */\nexport default class HorizontalTimeAxis extends TimeAxisBase {\n //region Config\n static $name = 'HorizontalTimeAxis';\n static type = 'horizontaltimeaxis';\n static configurable = {\n model : null,\n sizeProperty : 'width'\n };\n //endregion\n get positionProperty() {\n return this.owner?.rtl ? 'right' : 'left';\n }\n get width() {\n return this.size;\n }\n onModelUpdate() {\n // Force rebuild when availableSpace has changed, to recalculate width and maybe apply compact styling\n if (!this.owner?.hideHeaders && this.model.availableSpace > 0 && this.model.availableSpace !== this.width) {\n this.refresh(true);\n }\n }\n updateModel(timeAxisViewModel) {\n this.detachListeners('tavm');\n timeAxisViewModel?.ion({\n name : 'tavm',\n update : 'onModelUpdate',\n thisObj : this\n });\n }\n}\nHorizontalTimeAxis._$name = 'HorizontalTimeAxis';", "import Widget from '../../Core/widget/Widget.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport DomSync from '../../Core/helper/DomSync.js';\nimport EventHelper from '../../Core/helper/EventHelper.js';\nimport DomClassList from '../../Core/helper/util/DomClassList.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\nimport AvatarRendering from '../../Core/widget/util/AvatarRendering.js';\n/**\n * @module Scheduler/view/ResourceHeader\n */\n/**\n * Header widget that renders resource column headers and acts as the interaction point for resource columns in vertical\n * mode. Note that it uses virtual rendering and element reusage to gain performance, only headers in view are available\n * in DOM. Because of this you should avoid direct element manipulation, any such changes can be discarded at any time.\n *\n * By default, it displays resources `name` and also applies its `iconCls` if any, like this:\n *\n * ```html\n * name\n * ```\n *\n * If Scheduler is configured with a {@link Scheduler.view.Scheduler#config-resourceImagePath} the\n * header will render miniatures for the resources, using {@link Scheduler.model.ResourceModel#field-imageUrl}\n * or {@link Scheduler.model.ResourceModel#field-image} with fallback to\n * {@link Scheduler.model.ResourceModel#field-name} + {@link Scheduler.view.Scheduler#config-resourceImageExtension}\n * for unset values.\n *\n * The contents and styling of the resource cells in the header can be customized using {@link #config-headerRenderer}:\n *\n * ```javascript\n * new Scheduler({\n * mode : 'vertical',\n * resourceColumns : {\n * headerRenderer : ({ resourceRecord }) => `Hello ${resourceRecord.name}`\n * }\n * }\n *```\n *\n * The width of the resource columns is determined by the {@link #config-columnWidth} config.\n *\n * @extends Core/widget/Widget\n */\nexport default class ResourceHeader extends Widget {\n //region Config\n static $name = 'ResourceHeader';\n static type = 'resourceheader';\n static configurable = {\n /**\n * Resource store used to render resource headers. Assigned from Scheduler.\n * @config {Scheduler.data.ResourceStore}\n * @private\n */\n resourceStore : null,\n /**\n * Custom header renderer function. Can be used to manipulate the element config used to create the element\n * for the header:\n *\n * ```javascript\n * new Scheduler({\n * resourceColumns : {\n * headerRenderer({ elementConfig, resourceRecord }) {\n * elementConfig.dataset.myExtraData = 'extra';\n * elementConfig.style.fontWeight = 'bold';\n * }\n * }\n * });\n * ```\n *\n * See {@link DomConfig} for more information.\n * Please take care to not break the default configs :)\n *\n * Or as a template by returning HTML from the function:\n *\n * ```javascript\n * new Scheduler({\n * resourceColumns : {\n * headerRenderer : ({ resourceRecord }) => `\n *
\n * ${resourceRecord.firstName} {resourceRecord.surname}\n *
\n * `\n * }\n * });\n * ```\n *\n * NOTE: When using `headerRenderer` no default internal markup is applied to the resource header cell,\n * `iconCls` and {@link Scheduler.model.ResourceModel#field-imageUrl} or {@link Scheduler.model.ResourceModel#field-image}\n * will have no effect unless you supply custom markup for them.\n *\n * @config {Function}\n * @param {Object} params Object containing the params below\n * @param {Scheduler.model.ResourceModel} params.resourceRecord Resource whose header is being rendered\n * @param {DomConfig} params.elementConfig A config object used to create the element for the resource\n * @returns {void}\n */\n headerRenderer : null,\n /**\n * Set to `false` to render just the resource name, `true` to render an avatar (or initials if no image exists)\n * @config {Boolean}\n * @default true\n */\n showAvatars : {\n value : true,\n $config : 'nullify'\n },\n /**\n * Assign to toggle resource columns **fill* mode. `true` means they will stretch (grow) to fill viewport, `false`\n * that they will respect their configured `columnWidth`.\n *\n * This is ignored if *any* resources are loaded with {@link Scheduler.model.ResourceModel#field-columnWidth}.\n * @member {Boolean} fillWidth\n */\n /**\n * Automatically resize resource columns to **fill** available width. Set to `false` to always respect the\n * configured `columnWidth`.\n *\n * This is ignored if *any* resources are loaded with {@link Scheduler.model.ResourceModel#field-columnWidth}.\n * @config {Boolean}\n * @default\n */\n fillWidth : true,\n /**\n * Assign to toggle resource columns **fit* mode. `true` means they will grow or shrink to always fit viewport,\n * `false` that they will respect their configured `columnWidth`.\n *\n * This is ignored if *any* resources are loaded with {@link Scheduler.model.ResourceModel#field-columnWidth}.\n * @member {Boolean} fitWidth\n */\n /**\n * Automatically resize resource columns to always **fit** available width.\n *\n * This is ignored if *any* resources are loaded with {@link Scheduler.model.ResourceModel#field-columnWidth}.\n * @config {Boolean}\n * @default\n */\n fitWidth : false,\n /**\n * Width for each resource column.\n *\n * This is used for resources which are not are loaded with a {@link Scheduler.model.ResourceModel#field-columnWidth}.\n * @config {Number}\n */\n columnWidth : 150,\n // Copied from Scheduler#resourceImagePath on creation in TimeAxisColumn.js\n imagePath : null,\n // Copied from Scheduler#resourceImageExtension on creation in TimeAxisColumn.js\n imageExtension : null,\n // Copied from Scheduler#defaultResourceImageName on creation in TimeAxisColumn.js\n defaultImageName : null,\n availableWidth : null\n };\n /**\n * An index of the first visible resource in vertical mode\n * @property {Number}\n * @readonly\n * @private\n */\n firstResource = -1;\n /**\n * An index of the last visible resource in vertical mode\n * @property {Number}\n * @readonly\n * @private\n */\n lastResource = -1;\n //endregion\n //region Init\n construct(config) {\n const me = this;\n // Inject this into owning Scheduler early because code further down\n // can call code which uses scheduler.resourceColumns.\n config.scheduler._resourceColumns = me;\n super.construct(config);\n if (me.imagePath != null) {\n // Need to increase height a bit when displaying images\n me.element.classList.add('b-has-images');\n }\n EventHelper.on({\n element : me.element,\n delegate : '.b-resourceheader-cell',\n capture : true,\n click : 'onResourceMouseEvent',\n dblclick : 'onResourceMouseEvent',\n contextmenu : 'onResourceMouseEvent',\n thisObj : me\n });\n }\n changeShowAvatars(show) {\n this.avatarRendering?.destroy();\n if (show) {\n this.avatarRendering = new AvatarRendering({\n element : this.element\n });\n }\n return show;\n }\n updateShowAvatars() {\n if (!this.isConfiguring) {\n this.refresh();\n }\n }\n //endregion\n //region ResourceStore\n updateResourceStore(store) {\n const me = this;\n me.detachListeners('resourceStore');\n if (store) {\n store.ion({\n name : 'resourceStore',\n changePreCommit : 'onResourceStoreDataChange',\n thisObj : me\n });\n // Already have data? Update width etc\n if (store.count) {\n me.onResourceStoreDataChange({});\n }\n }\n }\n // Redraw resource headers on any data change\n onResourceStoreDataChange({ action }) {\n const me = this;\n // These must be ingested before we assess the source of column widths\n // so that they can be cleared *after* their values have been cached.\n me.getConfig('fillWidth');\n me.getConfig('fitWidth');\n me.updateWidthCache();\n const\n {\n element\n } = me,\n width = me.totalWidth;\n // If we have some defined columnWidths in the resourceStore\n // we must then bypass configured fitWidth and fillWidth behaviour.\n if (me.scheduler.variableColumnWidths) {\n me._fillWidth = me._fitWidth = false;\n }\n else {\n me._fillWidth = me.configuredFillWidth;\n me._fitWidth = me.configuredFitWidth;\n }\n if (width !== me.width) {\n DomHelper.setLength(element, 'width', width);\n // During setup, silently set the width. It will then render correctly. After setup, let the world know...\n me.column.set('width', width, me.column.grid.isConfiguring);\n }\n if (action === 'removeall') {\n // Keep nothing\n element.innerHTML = '';\n }\n if (action === 'remove' || action === 'add' || action === 'filter' || me.fitWidth || me.fillWidth) {\n me.refreshWidths();\n }\n me.column.grid.toggleEmptyText();\n }\n get totalWidth() {\n return this.updateWidthCache();\n }\n updateWidthCache() {\n let result = 0;\n const { scheduler } = this;\n // Flag so that VerticalRendering#getResourceRange knows\n // whether to use fast or slow mode to ascertain visible columns.\n scheduler.variableColumnWidths = false;\n scheduler.resourceStore.forEach(resource => {\n const instanceMeta = resource.instanceMeta(scheduler);\n if (instanceMeta.columnWidth == null && resource.columnWidth) {\n instanceMeta.columnWidth = resource.columnWidth;\n }\n // Set the start position for each resource with respect to the widths\n instanceMeta.insetStart = result;\n instanceMeta.insetEnd = result + scheduler.getResourceWidth(resource);\n if (instanceMeta.columnWidth == null) {\n result += scheduler.resourceColumnWidth;\n }\n else {\n result += instanceMeta.columnWidth;\n scheduler.variableColumnWidths = true;\n }\n });\n return result;\n }\n //endregion\n //region Properties\n changeColumnWidth(columnWidth) {\n // Cache configured value, because if *all* resources have their own columnWidths\n // the property will be nulled, but if we ever recieve a new resource with no\n // columnWidth, or a columnWidth is nulled, we then have to fall back to using this.\n if (!this.refreshingWidths) {\n this.configuredColumnWidth = columnWidth;\n }\n return columnWidth;\n }\n updateColumnWidth(width, oldWidth) {\n const me = this;\n // Flag set in refreshWidths, do not want to create a loop\n if (!me.refreshingWidths) {\n me.refreshWidths();\n }\n if (!me.isConfiguring) {\n // If resources are grouped, I need to refresh manually the cached width of resource header columns\n if (me.resourceStore.isGrouped) {\n me.updateWidthCache();\n }\n me.refresh();\n // Cannot trigger with requested width, might have changed because of fit/fill\n me.trigger('columnWidthChange', { width, oldWidth });\n }\n }\n changeFillWidth(fillWidth) {\n return this.configuredFillWidth = fillWidth;\n }\n updateFillWidth() {\n if (!this.isConfiguring) {\n this.refreshWidths();\n }\n }\n changeFitWidth(fitWidth) {\n return this.configuredFitWidth = fitWidth;\n }\n updateFitWidth() {\n if (!this.isConfiguring) {\n this.refreshWidths();\n }\n }\n getImageURL(imageName) {\n return StringHelper.joinPaths([this.imagePath || '', imageName || '']);\n }\n updateImagePath() {\n if (!this.isConfiguring) {\n this.refresh();\n }\n }\n //endregion\n //region Fit to width\n updateAvailableWidth(width) {\n this.refreshWidths();\n }\n // Updates the column widths according to fill and fit settings\n refreshWidths() {\n const\n me = this,\n {\n availableWidth,\n configuredColumnWidth\n } = me,\n count = me.resourceStore?.count;\n // Bail out if availableWidth not yet set or resource store not assigned/loaded\n // or column widths are defined in the resources.\n if (!availableWidth || !count || me.scheduler.variableColumnWidths) {\n return;\n }\n me.refreshingWidths = true;\n const\n // Fit width if configured to do so or if configured to fill and used width is less than available width\n fit = me.fitWidth || me.fillWidth && configuredColumnWidth * count < availableWidth,\n useWidth = fit ? Math.floor(availableWidth / count) : configuredColumnWidth,\n shouldAnimate = me.column.grid.enableEventAnimations && Math.abs(me._columnWidth - useWidth) > 30;\n DomHelper.addTemporaryClass(me.element, 'b-animating', shouldAnimate ? 300 : 0, me);\n me.columnWidth = useWidth;\n me.refreshingWidths = false;\n }\n //endregion\n //region Rendering\n // Visual resource range, set by VerticalRendering + its buffer\n set visibleResources({ firstResource, lastResource }) {\n this.firstResource = firstResource;\n this.lastResource = lastResource;\n this.updateWidthCache();\n this.refresh();\n }\n /**\n * Refreshes the visible headers\n */\n refresh() {\n const\n me = this,\n {\n firstResource,\n scheduler,\n resourceStore,\n lastResource\n } = me,\n {\n variableColumnWidths\n } = scheduler,\n groupField = resourceStore.isGrouped && resourceStore.groupers[0].field,\n configs = [];\n me.element.classList.toggle('b-grouped', Boolean(groupField));\n if (!me.column.grid.isConfiguring && firstResource > -1 && lastResource > -1 && lastResource < resourceStore.count) {\n let currentGroup;\n // Gather element configs for resource headers in view\n for (let i = firstResource; i <= lastResource; i++) {\n const\n resourceRecord = resourceStore.allResourceRecords[i],\n groupRecord = resourceRecord.groupParent?.get(resourceStore.id),\n groupChildren = groupRecord?.groupChildren;\n if (groupField && groupRecord.id !== currentGroup?.dataset.resourceId) {\n const\n groupLeft = groupChildren[0].instanceMeta(scheduler).insetStart,\n groupWidth = groupChildren[groupChildren.length - 1].instanceMeta(scheduler).insetEnd - groupLeft;\n currentGroup = {\n className : 'b-resourceheader-group-cell',\n dataset : {\n resourceId : groupRecord.id\n },\n style : {\n left : groupLeft,\n width : groupWidth\n },\n children : [\n {\n tag : 'span',\n html : StringHelper.encodeHtml(groupChildren[0][groupField])\n },\n {\n className : 'b-resourceheader-group-children',\n children : []\n }\n ]\n };\n configs.push(currentGroup);\n }\n const\n instanceMeta = resourceRecord.instanceMeta(scheduler),\n // Possible variable column width taken from the resources, fallback to scheduler's default\n width = instanceMeta.columnWidth || me.columnWidth,\n position = groupField ? instanceMeta.insetStart - currentGroup.style.left //groupChildren[0].instanceMeta(scheduler).insetStart\n : variableColumnWidths ? instanceMeta.insetStart : i * me.columnWidth,\n elementConfig = {\n // Might look like overkill to use DomClassList here, but can be used in headerRenderer\n className : new DomClassList({\n 'b-resourceheader-cell' : 1\n }),\n dataset : {\n resourceId : resourceRecord.id\n },\n style : {\n [scheduler.rtl ? 'right' : 'left'] : position,\n width\n },\n children : []\n };\n // Let a configured headerRenderer have a go at it before applying\n if (me.headerRenderer) {\n const value = me.headerRenderer({ elementConfig, resourceRecord });\n if (value) {\n if (typeof value === 'string') {\n elementConfig.html = value;\n }\n else if (typeof value === 'object') {\n elementConfig.children = [value];\n }\n }\n }\n // No headerRenderer, apply default markup\n else {\n let imageUrl;\n if (resourceRecord.imageUrl) {\n imageUrl = resourceRecord.imageUrl;\n }\n else {\n if (me.imagePath != null) {\n if (resourceRecord.image !== false) {\n const imageName = resourceRecord.image ||\n resourceRecord.name?.toLowerCase() + me.imageExtension;\n imageUrl = me.getImageURL(imageName);\n }\n }\n }\n // By default showing resource name and optionally avatar\n elementConfig.children.push(\n me.showAvatars && me.avatarRendering.getResourceAvatar({\n resourceRecord,\n initials : resourceRecord.initials,\n color : resourceRecord.eventColor,\n iconCls : resourceRecord.iconCls,\n defaultImageUrl : me.defaultImageName && me.getImageURL(me.defaultImageName),\n imageUrl\n }),\n {\n tag : 'span',\n className : 'b-resource-name',\n html : StringHelper.encodeHtml(resourceRecord.name)\n }\n );\n }\n if (groupField) {\n currentGroup.children[1].children.push(elementConfig);\n }\n else {\n configs.push(elementConfig);\n }\n }\n }\n // Sync changes to the header\n DomSync.sync({\n domConfig : {\n onlyChildren : true,\n children : configs\n },\n targetElement : me.element,\n syncIdField : 'resourceId',\n callback : ({ jsx, targetElement, domConfig }) => {\n // Handle the React (JSX) returned from the headerRenderer\n scheduler.processResourceHeader?.({ jsx, targetElement, domConfig });\n }\n });\n }\n //endregion\n onResourceMouseEvent(event) {\n const\n resourceCell = event.target.closest('.b-resourceheader-cell'),\n resourceRecord = this.resourceStore.getById(resourceCell.dataset.resourceId);\n this.trigger('resourceHeader' + StringHelper.capitalize(event.type), {\n resourceRecord,\n event\n });\n }\n // This function is not meant to be called by any code other than Base#getCurrentConfig().\n // It extracts the current configs for the header, removing irrelevant ones\n getCurrentConfig(options) {\n const result = super.getCurrentConfig(options);\n // Assigned from Scheduler\n delete result.resourceStore;\n delete result.column;\n delete result.type;\n return result;\n }\n}\nResourceHeader._$name = 'ResourceHeader';", "import WidgetColumn from '../../Grid/column/WidgetColumn.js';\nimport ColumnStore from '../../Grid/data/ColumnStore.js';\nimport Events from '../../Core/mixin/Events.js';\nimport HorizontalTimeAxis from '../view/HorizontalTimeAxis.js';\nimport ResourceHeader from '../view/ResourceHeader.js';\n/**\n * @module Scheduler/column/TimeAxisColumn\n */\n/**\n * A column containing the timeline \"viewport\", in which events, dependencies etc. are drawn.\n * Normally you do not need to interact with or create this column, it is handled by Scheduler.\n *\n * If you wish to output custom contents inside the time axis row cells, you can provide your custom column configuration\n * using the {@link #config-renderer} like so:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * appendTo : document.body\n * columns : [\n * { text : 'Name', field : 'name', width : 130 },\n * {\n * type : 'timeAxis',\n * renderer({ record, cellElement }) {\n * return '
';\n * }\n * }\n * ]\n * });\n * ```\n *\n * @extends Grid/column/WidgetColumn\n * @column\n */\nexport default class TimeAxisColumn extends Events(WidgetColumn) {\n //region Config\n headerHoverable = false;\n static $name = 'TimeAxisColumn';\n static get fields() {\n return [\n // Exclude some irrelevant fields from getCurrentConfig()\n { name : 'locked', persist : false },\n { name : 'flex', persist : false },\n { name : 'width', persist : false },\n { name : 'cellCls', persist : false },\n { name : 'field', persist : false },\n 'mode'\n ];\n }\n static get defaults() {\n return {\n /**\n * Set to false to prevent this column header from being dragged.\n * @config {Boolean} draggable\n * @category Interaction\n * @default false\n */\n draggable : false,\n /**\n * Set to false to prevent grouping by this column.\n * @config {Boolean} groupable\n * @category Interaction\n * @default false\n */\n groupable : false,\n /**\n * Allow column visibility to be toggled through UI.\n * @config {Boolean} hideable\n * @default false\n * @category Interaction\n */\n hideable : false,\n /**\n * Show column picker for the column.\n * @config {Boolean} showColumnPicker\n * @default false\n * @category Menu\n */\n showColumnPicker : false,\n /**\n * Allow filtering data in the column (if Filter feature is enabled)\n * @config {Boolean} filterable\n * @default false\n * @category Interaction\n */\n filterable : false,\n /**\n * Allow sorting of data in the column\n * @config {Boolean} sortable\n * @category Interaction\n * @default false\n */\n sortable : false,\n /**\n * Set to `false` to prevent the column from being drag-resized when the ColumnResize plugin is enabled.\n * @config {Boolean} resizable\n * @default false\n * @category Interaction\n */\n resizable : false,\n /**\n * Allow searching in the column (respected by QuickFind and Search features)\n * @config {Boolean} searchable\n * @default false\n * @category Interaction\n */\n searchable : false,\n /**\n * @config {String} editor\n * @hide\n */\n editor : false,\n /**\n * Set to `true` to show a context menu on the cell elements in this column\n * @config {Boolean} enableCellContextMenu\n * @default false\n * @category Menu\n */\n enableCellContextMenu : false,\n /**\n * @config {Function|Boolean} tooltipRenderer\n * @hide\n */\n tooltipRenderer : false,\n /**\n * CSS class added to the header of this column\n * @config {String} cls\n * @category Rendering\n * @default 'b-sch-timeaxiscolumn'\n */\n cls : 'b-sch-timeaxiscolumn',\n // needs to have width specified, flex-basis messes measurements up\n needWidth : true,\n mode : null,\n region : 'normal',\n exportable : false,\n htmlEncode : false\n };\n }\n static get type() {\n return 'timeAxis';\n }\n //region Init\n construct(config) {\n const me = this;\n super.construct(...arguments);\n me.thisObj = me;\n // Inject the reference to this column as early as possible\n me.grid._timeAxisColumn = me;\n me.timeAxisViewModel = me.grid.timeAxisViewModel;\n // A bit hacky, because mode is a field and not a config\n // eslint-disable-next-line no-self-assign\n me.mode = me.mode;\n me.grid.ion({\n paint : 'onTimelinePaint',\n thisObj : me,\n once : true\n });\n }\n static get autoExposeFields() {\n return true;\n }\n // endregion\n doDestroy() {\n this.resourceColumns?.destroy();\n this.timeAxisView?.destroy();\n super.doDestroy();\n }\n set mode(mode) {\n const\n me = this,\n { grid } = me;\n me.set('mode', mode);\n // In horizontal mode this column has a time axis header on top, with timeline ticks\n if (mode === 'horizontal') {\n me.timeAxisView = new HorizontalTimeAxis({\n model : me.timeAxisViewModel,\n compactCellWidthThreshold : me.compactCellWidthThreshold,\n owner : grid,\n client : grid\n });\n }\n // In vertical mode, it instead displays resources at top\n else if (mode === 'vertical') {\n me.resourceColumns = ResourceHeader.new({\n column : me,\n scheduler : grid,\n resourceStore : grid.resourceStore,\n imagePath : grid.resourceImagePath,\n imageExtension : grid.resourceImageExtension,\n defaultImageName : grid.defaultResourceImageName\n }, grid.resourceColumns || {});\n me.relayEvents(me.resourceColumns, [\n 'resourceheaderclick',\n 'resourceheaderdblclick',\n 'resourceheadercontextmenu'\n ]);\n }\n }\n get mode() {\n return this.get('mode');\n }\n //region Events\n onViewModelUpdate({ source : viewModel }) {\n const me = this;\n if (me.grid.timeAxisSubGrid.collapsed) {\n return;\n }\n if (me.mode === 'horizontal') {\n // render the time axis view into the column header element\n me.refreshHeader(true);\n me.width = viewModel.totalSize;\n me.grid.refresh();\n // When width is set above, that ends up on a columnsResized listener, but the refreshing of the fake\n // scrollers to accommodate the new width is not done in this timeframe, so the upcoming centering related\n // to preset change cannot work. So we have to refresh the fake scrollers now\n me.subGrid.refreshFakeScroll();\n }\n else if (me.mode === 'vertical') {\n // Refresh to rerender cells, in the process updating the vertical timeaxis to reflect view model changes\n me.grid.refreshRows();\n }\n }\n // Called on paint. SubGrid has its width so this is the earliest time to configure the TimeAxisViewModel with\n // correct width\n onTimelinePaint({ firstPaint }) {\n const me = this;\n if (!me.subGrid.insertRowsBefore) {\n return;\n }\n if (firstPaint) {\n me.subGridElement.classList.add('b-timeline-subgrid');\n if (me.mode === 'vertical') {\n me.refreshHeader();\n // The above operation can cause height change.\n me.grid?.onHeightChange();\n }\n }\n }\n //endregion\n //region Rendering\n /**\n * Refreshes the columns header contents (which is either a HorizontalTimeAxis or a ResourceHeader). Useful if you\n * have rendered some extra meta data that depends on external data such as the EventStore or ResourceStore.\n */\n refreshHeader(internal) {\n const\n me = this,\n { element } = me;\n if (element) {\n if (me.mode === 'horizontal') {\n // Force timeAxisViewModel to regenerate its column config, which calls header renderers etc.\n !internal && me.timeAxisViewModel.update(undefined, undefined, true);\n if (!me.timeAxisView.rendered) {\n // Do not need the normal header markup\n element.innerHTML = '';\n me.timeAxisView.render(element);\n }\n else {\n // Force rebuild of cells in case external data has changed (cheap since it still syncs to DOM)\n me.timeAxisView.refresh(true);\n }\n }\n else if (me.mode === 'vertical') {\n if (!me.resourceColumns.currentElement) {\n // Do not need the normal header markup\n element.innerHTML = '';\n me.resourceColumns.render(element);\n }\n else {\n me.resourceColumns.refresh();\n }\n // Vertical's resourceColumns is redrawn with the events, no need here\n }\n }\n }\n internalRenderer(renderData) {\n const { grid } = this;\n // No drawing of events before engines initial commit\n if (grid.project.isInitialCommitPerformed || grid.project.isDelayingCalculation) {\n grid.currentOrientation.renderer(renderData);\n return super.internalRenderer(renderData);\n }\n return '';\n }\n //endregion\n get timeAxisViewModel() {\n return this._timeAxisViewModel;\n }\n set timeAxisViewModel(timeAxisViewModel) {\n const me = this;\n me.detachListeners('tavm');\n timeAxisViewModel?.ion({\n name : 'tavm',\n update : 'onViewModelUpdate',\n prio : -10000,\n thisObj : me\n });\n me._timeAxisViewModel = timeAxisViewModel;\n if (me.timeAxisView) {\n me.timeAxisView.model = timeAxisViewModel;\n }\n }\n // Width of the time axis column is solely determined by the zoom level. We should not keep it part of the state\n // otherwise restoring the state might break the normal zooming process.\n // Covered by SchedulerState.t\n // https://github.com/bryntum/support/issues/5545\n getState() {\n const state = super.getState();\n delete state.width;\n delete state.flex;\n return state;\n }\n}\nColumnStore.registerColumnType(TimeAxisColumn);\nTimeAxisColumn._$name = 'TimeAxisColumn';", "import TimeAxisBase from './TimeAxisBase.js';\n/**\n * @module Scheduler/view/VerticalTimeAxis\n */\n/**\n * Widget that renders a vertical time axis. Only renders ticks in view. Used in vertical mode.\n * @extends Core/widget/Widget\n * @private\n */\nexport default class VerticalTimeAxis extends TimeAxisBase {\n static get $name() {\n return 'VerticalTimeAxis';\n }\n static get configurable() {\n return {\n cls : 'b-verticaltimeaxis',\n sizeProperty : 'height',\n positionProperty : 'top',\n wrapText : true\n };\n }\n // All cells overlayed in the same space.\n // For future use.\n buildHorizontalCells() {\n const\n me = this,\n { client } = me,\n stickyHeaders = client?.stickyHeaders,\n featureHeaderConfigs = [],\n cellConfigs = me.levels.reduce((result, level, i) => {\n if (level.cells) {\n result.push(...level.cells?.filter(cell => cell.start < me.endDate && cell.end > me.startDate).map((cell, j, cells) => ({\n role : 'presentation',\n className : {\n 'b-sch-header-timeaxis-cell' : 1,\n [cell.headerCellCls] : cell.headerCellCls,\n [`b-align-${cell.align}`] : cell.align,\n 'b-last' : j === cells.length - 1,\n 'b-lowest' : i === me.levels.length - 1\n },\n dataset : {\n tickIndex : cell.index,\n cellId : `${i}-${cell.index}`,\n headerPosition : i,\n // Used in export tests to resolve dates from tick elements\n ...globalThis.DEBUG && { date : cell.start.getTime() }\n },\n style : {\n // DomHelper appends px to numeric dimensions\n top : cell.coord,\n height : cell.width,\n minHeight : cell.width\n },\n children : [\n {\n role : 'presentation',\n className : {\n 'b-sch-header-text' : 1,\n 'b-sticky-header' : stickyHeaders\n },\n html : cell.value\n }\n ]\n })));\n }\n return result;\n }, []);\n // When tested in isolation there is no client\n client?.getHeaderDomConfigs(featureHeaderConfigs);\n cellConfigs.push(...featureHeaderConfigs);\n // noinspection JSSuspiciousNameCombination\n return {\n className : me.widgetClassList,\n dataset : {\n headerFeature : `headerRow0`,\n headerPosition : 0\n },\n syncOptions : {\n // Keep a maximum of 5 released cells. Might be fine with fewer since ticks are fixed width.\n // Prevents an unnecessary amount of cells from sticking around when switching from narrow to\n // wide tickSizes\n releaseThreshold : 5,\n syncIdField : 'cellId'\n },\n children : cellConfigs\n };\n }\n get height() {\n return this.size;\n }\n}\nVerticalTimeAxis._$name = 'VerticalTimeAxis';", "import Column from '../../Grid/column/Column.js';\nimport ColumnStore from '../../Grid/data/ColumnStore.js';\nimport VerticalTimeAxis from '../view/VerticalTimeAxis.js';\n/**\n * @module Scheduler/column/VerticalTimeAxisColumn\n */\n/**\n * A special column containing the time axis labels when the Scheduler is used in vertical mode. You can configure,\n * it using the {@link Scheduler.view.Scheduler#config-verticalTimeAxisColumn} config object.\n *\n * **Note**: this column is sized by flexing to consume full width of its containing {@link Grid.view.SubGrid}. To\n * change width of this column, instead size the subgrid like so:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * mode : 'vertical',\n * subGridConfigs : {\n * locked : {\n * width : 300\n * }\n * }\n * });\n * ```\n *\n * @extends Grid/column/Column\n */\nexport default class VerticalTimeAxisColumn extends Column {\n static $name = 'VerticalTimeAxisColumn';\n static get type() {\n return 'verticalTimeAxis';\n }\n static get defaults() {\n return {\n /**\n * @hideconfigs autoWidth, autoHeight\n */\n /**\n * Set to false to prevent this column header from being dragged.\n * @config {Boolean} draggable\n * @category Interaction\n * @default false\n * @hide\n */\n draggable : false,\n /**\n * Set to false to prevent grouping by this column.\n * @config {Boolean} groupable\n * @category Interaction\n * @default false\n * @hide\n */\n groupable : false,\n /**\n * Allow column visibility to be toggled through UI.\n * @config {Boolean} hideable\n * @default false\n * @category Interaction\n * @hide\n */\n hideable : false,\n /**\n * Show column picker for the column.\n * @config {Boolean} showColumnPicker\n * @default false\n * @category Menu\n * @hide\n */\n showColumnPicker : false,\n /**\n * Allow filtering data in the column (if Filter feature is enabled)\n * @config {Boolean} filterable\n * @default false\n * @category Interaction\n * @hide\n */\n filterable : false,\n /**\n * Allow sorting of data in the column\n * @config {Boolean} sortable\n * @category Interaction\n * @default false\n * @hide\n */\n sortable : false,\n // /**\n // * Set to `false` to prevent the column from being drag-resized when the ColumnResize plugin is enabled.\n // * @config {Boolean} resizable\n // * @default false\n // * @category Interaction\n // * @hide\n // */\n // resizable : false,\n /**\n * Allow searching in the column (respected by QuickFind and Search features)\n * @config {Boolean} searchable\n * @default false\n * @category Interaction\n * @hide\n */\n searchable : false,\n /**\n * Specifies if this column should be editable, and define which editor to use for editing cells in the column (if CellEdit feature is enabled)\n * @config {String} editor\n * @default false\n * @category Interaction\n * @hide\n */\n editor : false,\n /**\n * Set to `true` to show a context menu on the cell elements in this column\n * @config {Boolean} enableCellContextMenu\n * @default false\n * @category Menu\n * @hide\n */\n enableCellContextMenu : false,\n /**\n * @config {Function|Boolean} tooltipRenderer\n * @hide\n */\n tooltipRenderer : false,\n /**\n * Column minimal width. If value is Number then minimal width is in pixels\n * @config {Number|String} minWidth\n * @default 0\n * @category Layout\n */\n minWidth : 0,\n resizable : false,\n cellCls : 'b-verticaltimeaxiscolumn',\n locked : true,\n flex : 1,\n alwaysClearCell : false\n };\n }\n get isFocusable() {\n return false;\n }\n construct(data) {\n super.construct(...arguments);\n this.view = new VerticalTimeAxis({\n model : this.grid.timeAxisViewModel,\n client : this.grid\n });\n }\n renderer({ cellElement, size }) {\n this.view.render(cellElement);\n size.height = this.view.height;\n }\n // This function is not meant to be called by any code other than Base#getCurrentConfig().\n // It extracts the current configs (fields) for the column, removing irrelevant ones\n getCurrentConfig(options) {\n const result = super.getCurrentConfig(options);\n // Remove irrelevant configs\n delete result.id;\n delete result.region;\n delete result.type;\n delete result.field;\n delete result.ariaLabel;\n delete result.cellAriaLabel;\n return result;\n }\n}\nColumnStore.registerColumnType(VerticalTimeAxisColumn);\nVerticalTimeAxisColumn._$name = 'VerticalTimeAxisColumn';", "import TimelineBase from './TimelineBase.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport CrudManager from '../data/CrudManager.js';\nimport DomSync from '../../Core/helper/DomSync.js';\nimport Rectangle from '../../Core/helper/util/Rectangle.js';\nimport '../localization/En.js';\nimport CurrentConfig from './mixin/CurrentConfig.js';\nimport Describable from './mixin/Describable.js';\nimport SchedulerDom from './mixin/SchedulerDom.js';\nimport SchedulerDomEvents from './mixin/SchedulerDomEvents.js';\nimport SchedulerEventRendering from './mixin/SchedulerEventRendering.js';\nimport SchedulerStores from './mixin/SchedulerStores.js';\nimport SchedulerScroll from './mixin/SchedulerScroll.js';\nimport SchedulerRegions from './mixin/SchedulerRegions.js';\nimport SchedulerState from './mixin/SchedulerState.js';\nimport EventSelection from './mixin/EventSelection.js';\nimport EventNavigation from './mixin/EventNavigation.js';\nimport TransactionalFeatureMixin from './mixin/TransactionalFeatureMixin.js';\nimport CrudManagerView from '../crud/mixin/CrudManagerView.js';\nimport HorizontalRendering from './orientation/HorizontalRendering.js';\nimport VerticalRendering from './orientation/VerticalRendering.js';\nimport '../column/TimeAxisColumn.js';\nimport '../column/VerticalTimeAxisColumn.js';\n// Should always be present in Scheduler\nimport VersionHelper from '../../Core/helper/VersionHelper.js';\n/**\n * @module Scheduler/view/SchedulerBase\n */\nconst\n descriptionFormats = {\n month : 'MMMM, YYYY',\n week : ['MMMM YYYY (Wp)', 'S{MMM} - E{MMM YYYY} (S{Wp})'],\n day : 'MMMM D, YYYY'\n };\n/**\n * A thin base class for {@link Scheduler.view.Scheduler}. Does not include any features by default, allowing smaller\n * custom-built bundles if used in place of {@link Scheduler.view.Scheduler}.\n *\n * **NOTE:** In most scenarios you do probably want to use Scheduler instead of SchedulerBase.\n *\n * @mixes Scheduler/view/mixin/Describable\n * @mixes Scheduler/view/mixin/EventNavigation\n * @mixes Scheduler/view/mixin/EventSelection\n * @mixes Scheduler/view/mixin/SchedulerDom\n * @mixes Scheduler/view/mixin/SchedulerDomEvents\n * @mixes Scheduler/view/mixin/SchedulerEventRendering\n * @mixes Scheduler/view/mixin/SchedulerRegions\n * @mixes Scheduler/view/mixin/SchedulerScroll\n * @mixes Scheduler/view/mixin/SchedulerState\n * @mixes Scheduler/view/mixin/SchedulerStores\n * @mixes Scheduler/view/mixin/TimelineDateMapper\n * @mixes Scheduler/view/mixin/TimelineDomEvents\n * @mixes Scheduler/view/mixin/TimelineEventRendering\n * @mixes Scheduler/view/mixin/TimelineScroll\n * @mixes Scheduler/view/mixin/TimelineViewPresets\n * @mixes Scheduler/view/mixin/TimelineZoomable\n * @mixes Scheduler/view/mixin/TransactionalFeatureMixin\n * @mixes Scheduler/crud/mixin/CrudManagerView\n * @mixes Scheduler/data/mixin/ProjectConsumer\n *\n * @features Scheduler/feature/ColumnLines\n * @features Scheduler/feature/Dependencies\n * @features Scheduler/feature/DependencyEdit\n * @features Scheduler/feature/EventCopyPaste\n * @features Scheduler/feature/EventDrag\n * @features Scheduler/feature/EventDragCreate\n * @features Scheduler/feature/EventDragSelect\n * @features Scheduler/feature/EventEdit\n * @features Scheduler/feature/EventFilter\n * @features Scheduler/feature/EventMenu\n * @features Scheduler/feature/EventNonWorkingTime\n * @features Scheduler/feature/EventResize\n * @features Scheduler/feature/EventTooltip\n * @features Scheduler/feature/GroupSummary\n * @features Scheduler/feature/HeaderZoom\n * @features Scheduler/feature/Labels\n * @features Scheduler/feature/NonWorkingTime\n * @features Scheduler/feature/Pan\n * @features Scheduler/feature/ResourceMenu\n * @features Scheduler/feature/ResourceTimeRanges\n * @features Scheduler/feature/RowReorder\n * @features Scheduler/feature/RowResize\n * @features Scheduler/feature/ScheduleContext\n * @features Scheduler/feature/ScheduleMenu\n * @features Scheduler/feature/ScheduleTooltip\n * @features Scheduler/feature/SimpleEventEdit\n * @features Scheduler/feature/Split\n * @features Scheduler/feature/StickyEvents\n * @features Scheduler/feature/Summary\n * @features Scheduler/feature/TimeAxisHeaderMenu\n * @features Scheduler/feature/TimeRanges\n * @features Scheduler/feature/TimeSelection\n *\n * @features Scheduler/feature/experimental/ExcelExporter\n *\n * @features Scheduler/feature/export/PdfExport\n * @features Scheduler/feature/export/Print\n *\n * @extends Scheduler/view/TimelineBase\n * @widget\n */\nexport default class SchedulerBase extends TimelineBase.mixin(\n CrudManagerView,\n Describable,\n SchedulerDom,\n SchedulerDomEvents,\n SchedulerStores,\n SchedulerScroll,\n SchedulerState,\n SchedulerEventRendering,\n SchedulerRegions,\n EventSelection,\n EventNavigation,\n CurrentConfig,\n TransactionalFeatureMixin\n) {\n //region Config\n static $name = 'SchedulerBase';\n // Factoryable type name\n static type = 'schedulerbase';\n static configurable = {\n /**\n * Get/set the scheduler's read-only state. When set to `true`, any UIs for modifying data are disabled.\n * @member {Boolean} readOnly\n * @category Misc\n */\n /**\n * Configure as `true` to make the scheduler read-only, by disabling any UIs for modifying data.\n *\n * __Note that checks MUST always also be applied at the server side.__\n * @config {Boolean} readOnly\n * @default false\n * @category Misc\n */\n /**\n * The date to display when used as a component of a Calendar.\n *\n * This is required by the Calendar Mode Interface.\n *\n * @config {Date}\n * @category Calendar integration\n */\n date : {\n value : null,\n $config : {\n equal : 'date'\n }\n },\n /**\n * Unit used to control how large steps to take when clicking the previous and next buttons in the Calendar\n * UI. Only applies when used as a component of a Calendar.\n *\n * Suitable units depend on configured {@link #config-range}, a smaller or equal unit is recommended.\n *\n * @config {DurationUnit}\n * @default\n * @category Calendar integration\n */\n stepUnit : 'week',\n /**\n * Unit used to set the length of the time axis when used as a component of a Calendar. Suitable units are\n * `'month'`, `'week'` and `'day'`.\n *\n * @config {'day'|'week'|'month'}\n * @category Calendar integration\n * @default\n */\n range : 'week',\n /**\n * When the scheduler is used in a Calendar, this function provides the textual description for the\n * Calendar's toolbar.\n *\n * ```javascript\n * descriptionRenderer : scheduler => {\n * const\n * count = scheduler.eventStore.records.filter(\n * eventRec => DateHelper.intersectSpans(\n * scheduler.startDate, scheduler.endDate,\n * eventRec.startDate, eventRec.endDate)).length,\n * startDate = DateHelper.format(scheduler.startDate, 'DD/MM/YYY'),\n * endData = DateHelper.format(scheduler.endDate, 'DD/MM/YYY');\n *\n * return `${startDate} - ${endData}, ${count} event${count === 1 ? '' : 's'}`;\n * }\n * ```\n * @config {Function}\n * @param {Scheduler.view.SchedulerBase} view The active view.\n * @returns {String}\n * @category Calendar integration\n */\n /**\n * A method allowing you to define date boundaries that will constrain resize, create and drag drop\n * operations. The method will be called with the Resource record, and the Event record.\n *\n * ```javascript\n * new Scheduler({\n * getDateConstraints(resourceRecord, eventRecord) {\n * // Assuming you have added these extra fields to your own EventModel subclass\n * const { minStartDate, maxEndDate } = eventRecord;\n *\n * return {\n * start : minStartDate,\n * end : maxEndDate\n * };\n * }\n * });\n * ```\n * @param {Scheduler.model.ResourceModel} [resourceRecord] The resource record\n * @param {Scheduler.model.EventModel} [eventRecord] The event record\n * @returns {Object} Constraining object containing `start` and `end` constraints. Omitting either\n * will mean that end is not constrained. So you can prevent a resize or move from moving *before*\n * a certain time while not constraining the end date.\n * @returns {Date} [return.start] Start date\n * @returns {Date} [return.end] End date\n * @config {Function}\n * @category Scheduled events\n */\n getDateConstraints : null,\n /**\n * The time axis column config for vertical {@link Scheduler.view.SchedulerBase#config-mode}.\n *\n * Object with {@link Scheduler.column.VerticalTimeAxisColumn} configuration.\n *\n * This object will be used to configure the vertical time axis column instance.\n *\n * The config allows configuring the `VerticalTimeAxisColumn` instance used in vertical mode with any Column options that apply to it.\n *\n * Example:\n *\n * ```javascript\n * new Scheduler({\n * mode : 'vertical',\n * features : {\n * filterBar : true\n * },\n * verticalTimeAxisColumn : {\n * text : 'Filter by event name',\n * width : 180,\n * filterable : {\n * // add a filter field to the vertical column access header\n * filterField : {\n * type : 'text',\n * placeholder : 'Type to search',\n * onChange : ({ value }) => {\n * // filter event by name converting to lowerCase to be equal comparison\n * scheduler.eventStore.filter({\n * filters : event => event.name.toLowerCase().includes(value.toLowerCase()),\n * replace : true\n * });\n * }\n * }\n * }\n * },\n * ...\n * });\n * ```\n *\n * @config {VerticalTimeAxisColumnConfig}\n * @category Time axis\n */\n verticalTimeAxisColumn : {},\n /**\n * See {@link Scheduler.view.Scheduler#keyboard-shortcuts Keyboard shortcuts} for details\n * @config {Object} keyMap\n * @category Common\n */\n /**\n * If true, a new event will be created when user double-clicks on a time axis cell (if scheduler is not in\n * read only mode).\n *\n * The duration / durationUnit of the new event will be 1 time axis tick (default), or it can be read from\n * the {@link Scheduler.model.EventModel#field-duration} and\n * {@link Scheduler.model.EventModel#field-durationUnit} fields.\n *\n * Set to `false` to not create events on double click.\n * @config {Boolean|Object} createEventOnDblClick\n * @param {Boolean} [createEventOnDblClick.useEventModelDefaults] set to `true` to set default duration\n * based on the defaults specified by the {@link Scheduler.model.EventModel#field-duration} and\n * {@link Scheduler.model.EventModel#field-durationUnit} fields.\n * @default\n * @category Scheduled events\n */\n createEventOnDblClick : true,\n /**\n * Number of pixels to horizontally extend the visible render zone by, controlling the events that will be\n * rendered. You can use this to increase or reduce the amount of event rendering happening when scrolling\n * along a horizontal time axis. This can be useful if you render huge amount of events.\n *\n * To force the scheduler to render all events within the TimeAxis start & end dates, set this to -1.\n * The initial render will take slightly longer but no extra event rendering will take place when scrolling.\n *\n * NOTE: This is an experimental API which might change in future releases.\n * @config {Number}\n * @default\n * @internal\n * @category Experimental\n */\n scrollBuffer : 0,\n // A CSS class identifying areas where events can be scheduled using drag-create, double click etc.\n schedulableAreaSelector : '.b-sch-timeaxis-cell',\n scheduledEventName : 'event',\n sortFeatureStore : 'resourceStore',\n /**\n * If set to `true` this will show a color field in the {@link Scheduler.feature.EventEdit} editor and also a\n * picker in the {@link Scheduler.feature.EventMenu}. Both enables the user to choose a color which will be\n * applied to the event bar's background. See EventModel's\n * {@link Scheduler.model.mixin.EventModelMixin#field-eventColor} config.\n * config.\n * @config {Boolean}\n * @default false\n * @category Misc\n */\n showEventColorPickers : null,\n /**\n * By default, scrolling the schedule will update the {@link #property-timelineContext} to reflect the new\n * currently hovered context. When displaying a large number of events on screen at the same time, this will\n * have a slight impact on scrolling performance. In such scenarios, opt out of this behavior by setting\n * this config to `false`.\n * @default\n * @prp {Boolean}\n * @category Misc\n */\n updateTimelineContextOnScroll : true\n };\n static get defaultConfig() {\n return {\n /**\n * Scheduler mode. Supported values: horizontal, vertical\n * @config {'horizontal'|'vertical'} mode\n * @default\n * @category Common\n */\n mode : 'horizontal',\n /**\n * CSS class to add to rendered events\n * @config {String}\n * @category CSS\n * @private\n * @default\n */\n eventCls : 'b-sch-event',\n /**\n * CSS class to add to cells in the timeaxis column\n * @config {String}\n * @category CSS\n * @private\n * @default\n */\n timeCellCls : 'b-sch-timeaxis-cell',\n /**\n * A CSS class to apply to each event in the view on mouseover (defaults to 'b-sch-event-hover').\n * @config {String}\n * @default\n * @category CSS\n * @private\n */\n overScheduledEventClass : 'b-sch-event-hover',\n /**\n * Set to `false` if you don't want to allow events overlapping times for any one resource (defaults to `true`).\n *
Note that toggling this at runtime won't affect already overlapping events.
\n *\n * @prp {Boolean}\n * @default\n * @category Scheduled events\n */\n allowOverlap : true,\n /**\n * The height in pixels of Scheduler rows.\n * @config {Number}\n * @default\n * @category Common\n */\n rowHeight : 60,\n /**\n * Scheduler overrides Grids default implementation of {@link Grid.view.GridBase#config-getRowHeight} to\n * pre-calculate row heights based on events in the rows.\n *\n * The amount of rows that are pre-calculated is limited for performance reasons. The limit is configurable\n * by specifying the {@link Scheduler.view.SchedulerBase#config-preCalculateHeightLimit} config.\n *\n * The results of the calculation are cached internally.\n *\n * @config {Function} getRowHeight\n * @param {Scheduler.model.ResourceModel} getRowHeight.record Resource record to determine row height for\n * @returns {Number} Desired row height\n * @category Layout\n */\n /**\n * Maximum number of resources for which height is pre-calculated. If you have many events per\n * resource you might want to lower this number to gain some initial rendering performance.\n *\n * Specify a falsy value to opt out of row height pre-calculation.\n *\n * @config {Number}\n * @default\n * @category Layout\n */\n preCalculateHeightLimit : 10000,\n crudManagerClass : CrudManager,\n // Skip live redraw of events while dragging RegionResize splitter if too many events are rendered in DOM\n liveRedrawWhileMovingSplitterThreshold : 100,\n testConfig : {\n loadMaskError : {\n autoClose : 10,\n showDelay : 0\n }\n }\n };\n }\n timeCellSelector = '.b-sch-timeaxis-cell';\n resourceTimeRangeSelector = '.b-sch-resourcetimerange';\n //endregion\n //region Store & model docs\n // Documented here instead of in SchedulerStores since SchedulerPro uses different types\n // Configs\n /**\n * Inline events, will be loaded into an internally created EventStore.\n * @config {Scheduler.model.EventModel[]|Scheduler.model.EventModelConfig[]} events\n * @category Data\n */\n /**\n * The {@link Scheduler.data.EventStore} holding the events to be rendered into the scheduler (required).\n * @config {Scheduler.data.EventStore|Scheduler.data.EventStoreConfig} eventStore\n * @category Data\n */\n /**\n * Inline resources, will be loaded into an internally created ResourceStore.\n * @config {Scheduler.model.ResourceModel[]|Scheduler.model.ResourceModelConfig[]} resources\n * @category Data\n */\n /**\n * The {@link Scheduler.data.ResourceStore} holding the resources to be rendered into the scheduler (required).\n * @config {Scheduler.data.ResourceStore|Scheduler.data.ResourceStoreConfig} resourceStore\n * @category Data\n */\n /**\n * Inline assignments, will be loaded into an internally created AssignmentStore.\n * @config {Scheduler.model.AssignmentModel[]|Object[]} assignments\n * @category Data\n */\n /**\n * The optional {@link Scheduler.data.AssignmentStore}, holding assignments between resources and events.\n * Required for multi assignments.\n * @config {Scheduler.data.AssignmentStore|Scheduler.data.AssignmentStoreConfig} assignmentStore\n * @category Data\n */\n /**\n * Inline dependencies, will be loaded into an internally created DependencyStore.\n * @config {Scheduler.model.DependencyModel[]|Scheduler.model.DependencyModelConfig[]} dependencies\n * @category Data\n */\n /**\n * The optional {@link Scheduler.data.DependencyStore}.\n * @config {Scheduler.data.DependencyStore|Scheduler.model.DependencyStoreConfig} dependencyStore\n * @category Data\n */\n // Properties\n /**\n * Get/set events, applies to the backing project's EventStore.\n * @member {Scheduler.model.EventModel[]} events\n * @accepts {Scheduler.model.EventModel[]|Scheduler.model.EventModelConfig[]}\n * @category Data\n */\n /**\n * Get/set the event store instance of the backing project.\n * @member {Scheduler.data.EventStore} eventStore\n * @category Data\n */\n /**\n * Get/set resources, applies to the backing project's ResourceStore.\n * @member {Scheduler.model.ResourceModel[]} resources\n * @accepts {Scheduler.model.ResourceModel[]|Scheduler.model.ResourceModelConfig[]}\n * @category Data\n */\n /**\n * Get/set the resource store instance of the backing project\n * @member {Scheduler.data.ResourceStore} resourceStore\n * @category Data\n */\n /**\n * Get/set assignments, applies to the backing project's AssignmentStore.\n * @member {Scheduler.model.AssignmentModel[]} assignments\n * @accepts {Scheduler.model.AssignmentModel[]|Object[]}\n * @category Data\n */\n /**\n * Get/set the event store instance of the backing project.\n * @member {Scheduler.data.AssignmentStore} assignmentStore\n * @category Data\n */\n /**\n * Get/set dependencies, applies to the backing projects DependencyStore.\n * @member {Scheduler.model.DependencyModel[]} dependencies\n * @accepts {Scheduler.model.DependencyModel[]|Scheduler.model.DependencyModelConfig[]}\n * @category Data\n */\n /**\n * Get/set the dependencies store instance of the backing project.\n * @member {Scheduler.data.DependencyStore} dependencyStore\n * @category Data\n */\n //endregion\n //region Events\n /**\n * Fired after rendering an event, when its element is available in DOM.\n * @event renderEvent\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.model.EventModel} eventRecord The event record\n * @param {Scheduler.model.ResourceModel} resourceRecord The resource record\n * @param {Scheduler.model.AssignmentModel} assignmentRecord The assignment record\n * @param {Object} renderData An object containing details about the event rendering, see\n * {@link Scheduler.view.mixin.SchedulerEventRendering#config-eventRenderer} for details\n * @param {Boolean} isRepaint `true` if this render is a repaint of the event, updating its existing element\n * @param {Boolean} isReusingElement `true` if this render lead to the event reusing a released events element\n * @param {HTMLElement} element The event bar element\n */\n /**\n * Fired after releasing an event, useful to cleanup of custom content added on `renderEvent` or in `eventRenderer`.\n * @event releaseEvent\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.model.EventModel} eventRecord The event record\n * @param {Scheduler.model.ResourceModel} resourceRecord The resource record\n * @param {Scheduler.model.AssignmentModel} assignmentRecord The assignment record\n * @param {Object} renderData An object containing details about the event rendering\n * @param {HTMLElement} element The event bar element\n */\n /**\n * Fired when clicking a resource header cell\n * @event resourceHeaderClick\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.model.ResourceModel} resourceRecord The resource record\n * @param {Event} event The event\n */\n /**\n * Fired when double clicking a resource header cell\n * @event resourceHeaderDblclick\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.model.ResourceModel} resourceRecord The resource record\n * @param {Event} event The event\n */\n /**\n * Fired when activating context menu on a resource header cell\n * @event resourceHeaderContextmenu\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.model.ResourceModel} resourceRecord The resource record\n * @param {Event} event The event\n */\n /**\n * Triggered when a keydown event is observed if there are selected events.\n * @event eventKeyDown\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.model.EventModel[]} eventRecords The selected event records\n * @param {Scheduler.model.AssignmentModel[]} assignmentRecords The selected assignment records\n * @param {KeyboardEvent} event Browser event\n */\n /**\n * Triggered when a keyup event is observed if there are selected events.\n * @event eventKeyUp\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.model.EventModel[]} eventRecords The selected event records\n * @param {Scheduler.model.AssignmentModel[]} assignmentRecords The selected assignment records\n * @param {KeyboardEvent} event Browser event\n */\n //endregion\n //region Functions injected by features\n // For documentation & typings purposes\n /**\n * Opens an editor UI to edit the passed event.\n *\n * *NOTE: Only available when the {@link Scheduler/feature/EventEdit EventEdit} feature is enabled.*\n *\n * @function editEvent\n * @param {Scheduler.model.EventModel} eventRecord Event to edit\n * @param {Scheduler.model.ResourceModel} [resourceRecord] The Resource record for the event.\n * This parameter is needed if the event is newly created for a resource and has not been assigned, or when using\n * multi assignment.\n * @param {HTMLElement} [element] Element to anchor editor to (defaults to events element)\n * @category Feature shortcuts\n */\n /**\n * Returns the dependency record for a DOM element\n *\n * *NOTE: Only available when the {@link Scheduler/feature/Dependencies Dependencies} feature is enabled.*\n *\n * @function resolveDependencyRecord\n * @param {HTMLElement} element The dependency line element\n * @returns {Scheduler.model.DependencyModel} The dependency record\n * @category Feature shortcuts\n */\n //endregion\n //region Init\n afterConstruct() {\n const me = this;\n super.afterConstruct();\n me.ion({ scroll : 'onVerticalScroll', thisObj : me });\n if (me.createEventOnDblClick) {\n me.ion({ scheduledblclick : me.onTimeAxisCellDblClick });\n }\n me.ion({ splitterDragStart : 'internalOnSplitterDragStart' });\n }\n //endregion\n //region Overrides\n onPaintOverride() {\n // Internal procedure used for paint method overrides\n // Not used in onInternalPaint() because it may be chained on instance and Override won't be applied\n }\n //endregion\n //region Config getters/setters\n // Placeholder getter/setter for mixins, please make any changes needed to SchedulerStores#store instead\n get store() {\n return super.store;\n }\n set store(store) {\n super.store = store;\n }\n /**\n * Returns an object defining the range of visible resources\n * @property {Object}\n * @property {Scheduler.model.ResourceModel} visibleResources.first First visible resource\n * @property {Scheduler.model.ResourceModel} visibleResources.last Last visible resource\n * @readonly\n * @category Resources\n */\n get visibleResources() {\n const me = this;\n if (me.isVertical) {\n return me.currentOrientation.visibleResources;\n }\n return {\n first : me.store.getById(me.firstVisibleRow?.id),\n last : me.store.getById(me.lastVisibleRow?.id)\n };\n }\n //endregion\n //region Event handlers\n onLocaleChange() {\n this.currentOrientation.onLocaleChange();\n super.onLocaleChange();\n }\n onTimeAxisCellDblClick({ date : startDate, resourceRecord, row }) {\n this.createEvent(startDate, resourceRecord, row);\n }\n onVerticalScroll({ scrollTop }) {\n this.currentOrientation.updateFromVerticalScroll(scrollTop);\n }\n internalOnSplitterDragStart() {\n if (this.isHorizontal) {\n if (Object.keys(this.foregroundCanvas.syncIdMap).length > this.liveRedrawWhileMovingSplitterThreshold) {\n this.suspendRefresh();\n this.ion({ splitterDragEnd : () => this.resumeRefresh(true, false), once : true });\n }\n }\n }\n /**\n * Called when new event is created.\n * \u0421an be overridden to supply default record values etc.\n * @param {Scheduler.model.EventModel} eventRecord Newly created event\n * @category Scheduled events\n */\n onEventCreated(eventRecord) {}\n //endregion\n //region Mode\n /**\n * Checks if scheduler is in horizontal mode\n * @returns {Boolean}\n * @readonly\n * @category Common\n * @private\n */\n get isHorizontal() {\n return this.mode === 'horizontal';\n }\n /**\n * Checks if scheduler is in vertical mode\n * @returns {Boolean}\n * @readonly\n * @category Common\n * @private\n */\n get isVertical() {\n return this.mode === 'vertical';\n }\n /**\n * Get mode (horizontal/vertical)\n * @property {'horizontal'|'vertical'}\n * @readonly\n * @category Common\n */\n get mode() {\n return this._mode;\n }\n set mode(mode) {\n const me = this;\n me._mode = mode;\n if (!me[mode]) {\n me.element.classList.add(`b-sch-${mode}`);\n if (mode === 'horizontal') {\n me.horizontal = new HorizontalRendering(me);\n if (me.isPainted) {\n me.horizontal.init();\n }\n }\n else if (mode === 'vertical') {\n me.vertical = new VerticalRendering(me);\n if (me.rendered) {\n me.vertical.init();\n }\n }\n }\n }\n get currentOrientation() {\n return this[this.mode];\n }\n //endregion\n //region Dom event dummies\n // this is ugly, but needed since super cannot be called from SchedulerDomEvents mixin...\n onElementKeyDown(event) {\n return super.onElementKeyDown(event);\n }\n onElementKeyUp(event) {\n return super.onElementKeyUp(event);\n }\n onElementMouseOver(event) {\n return super.onElementMouseOver(event);\n }\n onElementMouseOut(event) {\n return super.onElementMouseOut(event);\n }\n //endregion\n //region Feature hooks\n // Called for each event during drop\n processEventDrop() {}\n processCrossSchedulerEventDrop() {}\n // Called before event drag starts\n beforeEventDragStart() {}\n // Called after event drag starts\n afterEventDragStart() {}\n // Called after aborting a drag\n afterEventDragAbortFinalized() {}\n // Called during event drag validation\n checkEventDragValidity() {}\n // Called after event resizing starts\n afterEventResizeStart() {}\n // Called after generating a DomConfig for an event\n afterRenderEvent() {}\n //endregion\n //region Scheduler specific date mapping functions\n get hasEventEditor() {\n return Boolean(this.eventEditingFeature);\n }\n get eventEditingFeature() {\n const {\n eventEdit,\n taskEdit,\n simpleEventEdit\n } = this.features;\n return eventEdit?.enabled\n ? eventEdit\n : taskEdit?.enabled\n ? taskEdit\n : simpleEventEdit?.enabled ? simpleEventEdit : null;\n }\n /**\n * Creates an event on the specified date (and scrolls it into view), for the specified resource which conforms to\n * this scheduler's {@link #config-createEventOnDblClick} setting.\n *\n * NOTE: If the scheduler is readonly, or resource type is invalid (group header), or if `allowOverlap` is `false`\n * and slot is already occupied - no event is created.\n *\n * This method may be called programmatically by application code if the `createEventOnDblClick` setting\n * is `false`, in which case the default values for `createEventOnDblClick` will be used.\n *\n * If the {@link Scheduler.feature.EventEdit} feature is active, the new event\n * will be displayed in the event editor.\n * @param {Date} date The date to add the event at.\n * @param {Scheduler.model.ResourceModel} resourceRecord The resource to create the event for.\n * @category Scheduled events\n */\n async createEvent(startDate, resourceRecord) {\n const\n me = this,\n {\n enableEventAnimations,\n eventStore,\n assignmentStore,\n hasEventEditor\n } = me,\n resourceRecords = [resourceRecord],\n useEventModelDefaults = me.createEventOnDblClick.useEventModelDefaults,\n defaultDuration = useEventModelDefaults ? eventStore.modelClass.defaultValues.duration : 1,\n defaultDurationUnit = useEventModelDefaults ? eventStore.modelClass.defaultValues.durationUnit : me.timeAxis.unit,\n eventRecord = eventStore.createRecord({\n startDate,\n endDate : DateHelper.add(startDate, defaultDuration, defaultDurationUnit),\n duration : defaultDuration,\n durationUnit : defaultDurationUnit,\n name : me.L('L{Object.newEvent}')\n });\n if (me.readOnly || resourceRecord.isSpecialRow || resourceRecord.readOnly || (!me.allowOverlap && !me.isDateRangeAvailable(\n eventRecord.startDate,\n eventRecord.endDate,\n null,\n resourceRecord\n ))) {\n return;\n }\n me.eventEditingFeature?.captureStm(true);\n // It's only a provisional event if there is an event edit feature available to\n // cancel the add (by removing it). Otherwise it's a definite event creation.\n eventRecord.isCreating = hasEventEditor;\n me.onEventCreated(eventRecord);\n const assignmentRecords = assignmentStore?.assignEventToResource(eventRecord, resourceRecord);\n /**\n * Fires before an event is added. Can be triggered by schedule double click or drag create action.\n * @event beforeEventAdd\n * @param {Scheduler.view.Scheduler} source The Scheduler instance\n * @param {Scheduler.model.EventModel} eventRecord The record about to be added\n * @param {Scheduler.model.ResourceModel[]} resourceRecords Resources that the record is assigned to\n * @param {Scheduler.model.AssignmentModel[]} assignmentRecords The assignment records\n * @preventable\n */\n if (me.trigger('beforeEventAdd', { eventRecord, resourceRecords, assignmentRecords }) === false) {\n // Remove any assignment created above, to leave store as it was\n assignmentStore?.remove(assignmentRecords);\n me.eventEditingFeature?.freeStm(false);\n return;\n }\n me.enableEventAnimations = false;\n eventStore.add(eventRecord);\n me.project.commitAsync().then(() => me.enableEventAnimations = enableEventAnimations);\n // Element must be created synchronously, not after the project's normalizing delays.\n // Overrides the check for isEngineReady in VerticalRendering so that the newly added record\n // will be rendered when we call refreshRows.\n me.isCreating = true;\n me.refreshRows();\n me.isCreating = false;\n await me.scrollEventIntoView(eventRecord);\n /**\n * Fired when a double click or drag gesture has created a new event and added it to the event store.\n * @event eventAutoCreated\n * @param {Scheduler.view.Scheduler} source This Scheduler.\n * @param {Scheduler.model.EventModel} eventRecord The new event record.\n * @param {Scheduler.model.ResourceModel} resourceRecord The resource assigned to the new event.\n */\n me.trigger('eventAutoCreated', {\n eventRecord,\n resourceRecord\n });\n if (hasEventEditor) {\n me.editEvent(eventRecord, resourceRecord, me.getEventElement(eventRecord));\n }\n }\n /**\n * Checks if a date range is allocated or not for a given resource.\n * @param {Date} start The start date\n * @param {Date} end The end date\n * @param {Scheduler.model.EventModel|null} excludeEvent An event to exclude from the check (or null)\n * @param {Scheduler.model.ResourceModel} resource The resource\n * @returns {Boolean} True if the timespan is available for the resource\n * @category Dates\n */\n isDateRangeAvailable(start, end, excludeEvent, resource) {\n return this.eventStore.isDateRangeAvailable(start, end, excludeEvent, resource);\n }\n //endregion\n /**\n * Suspends UI refresh on store operations.\n *\n * Multiple calls to `suspendRefresh` stack up, and will require an equal number of `resumeRefresh` calls to\n * actually resume UI refresh.\n *\n * @function suspendRefresh\n * @category Rendering\n */\n /**\n * Resumes UI refresh on store operations.\n *\n * Multiple calls to `suspendRefresh` stack up, and will require an equal number of `resumeRefresh` calls to\n * actually resume UI refresh.\n *\n * Specify `true` as the first param to trigger a refresh if this call unblocked the refresh suspension.\n * If the underlying project is calculating changes, the refresh will be postponed until it is done.\n *\n * @param {Boolean} [trigger] `true` to trigger a refresh, if this resume unblocks suspension\n * @privateparam {Boolean} [useTransitions] `false` to block transitions\n * @category Rendering\n */\n async resumeRefresh(trigger = VersionHelper.checkVersion('core', '6.0', '>='), useTransitions = true) {\n super.resumeRefresh(false);\n const me = this;\n if (!me.refreshSuspended && trigger) {\n // Do not refresh until project is in a valid state\n if (!me.isEngineReady) {\n // Refresh will happen because of the commit, bail out of this one after forcing rendering to consider\n // next one a full refresh\n me.currentOrientation.refreshAllWhenReady = true;\n return me.project.commitAsync();\n }\n // View could've been destroyed while we waited for engine\n if (!me.isDestroyed) {\n // If it already is, refresh now\n if (useTransitions) {\n me.refreshWithTransition();\n }\n else {\n me.refresh();\n }\n }\n }\n }\n //region Appearance\n // Overrides grid to take crudManager loading into account\n toggleEmptyText() {\n const\n me = this;\n if (me.bodyContainer) {\n DomHelper.toggleClasses(me.bodyContainer, 'b-grid-empty', !(me.resourceStore.count > 0 || me.crudManager?.isLoading));\n }\n }\n // Overrides Grids base implementation to return a correctly calculated height for the row. Also stores it in\n // RowManagers height map, which is used to calculate total height etc.\n getRowHeight(resourceRecord) {\n if (this.isHorizontal) {\n const height = this.currentOrientation.calculateRowHeight(resourceRecord);\n this.rowManager.storeKnownHeight(resourceRecord.id, height);\n return height;\n }\n }\n // Calculates the height for specified rows. Call when changes potentially makes its height invalid\n calculateRowHeights(resourceRecords, silent = false) {\n const { store } = this;\n for (const resourceRecord of resourceRecords) {\n // Array allowed to have nulls in it for easier code when calling this fn\n // Also ignore records not in the flat part of the store (collapsed away resources)\n if (resourceRecord && store.isAvailable(resourceRecord)) {\n this.getRowHeight(resourceRecord);\n }\n }\n if (!silent) {\n this.rowManager.estimateTotalHeight(true);\n }\n }\n // Calculate heights for all rows (up to the preCalculateHeightLimit)\n calculateAllRowHeights(silent = false) {\n const\n { store, rowManager } = this,\n count = Math.min(store.count, this.preCalculateHeightLimit);\n // Allow opt out by specifying falsy value.\n if (count) {\n rowManager.clearKnownHeights();\n for (let i = 0; i < count; i++) {\n // This will both calculate and store the height\n this.getRowHeight(store.getAt(i));\n }\n // Make sure height is reflected on scroller etc.\n if (!silent) {\n rowManager.estimateTotalHeight(true);\n }\n }\n }\n //endregion\n //region Calendar Mode Interface\n // These are all internal and match up w/CalendarMixin\n /**\n * Returns the date or ranges of included dates as an array. If only the {@link #config-startDate} is significant,\n * the array will have that date as its only element. Otherwise, a range of dates is returned as a two-element\n * array with `[0]` is the {@link #config-startDate} and `[1]` is the {@link #property-lastDate}.\n * @member {Date[]}\n * @internal\n */\n get dateBounds() {\n const\n me = this,\n ret = [me.startDate];\n if (me.range === 'week') {\n ret.push(me.lastDate);\n }\n return ret;\n }\n get defaultDescriptionFormat() {\n return descriptionFormats[this.range];\n }\n /**\n * The last day that is included in the date range. This is different than {@link #config-endDate} since that date\n * is not inclusive. For example, an `endDate` of 2022-07-21 00:00:00 indicates that the time range ends at that\n * time, and so 2022-07-21 is _not_ in the range. In this example, `lastDate` would be 2022-07-20 since that is the\n * last day included in the range.\n * @member {Date}\n * @internal\n */\n get lastDate() {\n const lastDate = this.endDate;\n // endDate is \"exclusive\" because it means 00:00:00 of that day, so subtract 1\n // to keep description consistent with human expectations.\n return lastDate && DateHelper.add(lastDate, -1, 'day');\n }\n getEventRecord(target) {\n target = DomHelper.getEventElement(target);\n return this.resolveEventRecord(target);\n }\n getResourceRecord(domEvent) {\n return this.resolveResourceRecord(domEvent);\n }\n getEventElement(eventRecord) {\n return this.getElementFromEventRecord(eventRecord);\n }\n changeRange(unit) {\n return DateHelper.normalizeUnit(unit);\n }\n updateRange(unit) {\n if (!this.isConfiguring) {\n const\n currentDate = this.date,\n newDate = this.date = DateHelper.startOf(currentDate, unit);\n // Force a span update if changing the range did not change the date\n if (currentDate.getTime() === newDate.getTime()) {\n this.updateDate(newDate);\n }\n }\n }\n changeStepUnit(unit) {\n return DateHelper.normalizeUnit(unit);\n }\n updateDate(newDate) {\n const\n me = this,\n start = DateHelper.startOf(newDate, me.range);\n me.setTimeSpan(start, DateHelper.add(start, 1, me.range));\n // Cant always use newDate here in case timeAxis is filtered\n me.visibleDate = {\n date : DateHelper.max(newDate, me.timeAxis.startDate),\n block : 'start',\n animate : me.isPainted\n };\n me.trigger('descriptionChange');\n }\n updateScrollBuffer(value) {\n if (!this.isConfiguring) {\n this.currentOrientation.scrollBuffer = value;\n }\n }\n previous() {\n this.date = DateHelper.add(this.date, -1, this.stepUnit);\n }\n next() {\n this.date = DateHelper.add(this.date, 1, this.stepUnit);\n }\n //endregion\n /**\n * Assigns and schedules an unassigned event record (+ adds it to this Scheduler's event store unless already in it).\n * @param {Object} config The config containing data about the event record to schedule\n * @param {Date} config.startDate The start date\n * @param {Scheduler.model.EventModel|EventModelConfig} config.eventRecord Event (or data for it) to assign and schedule\n * @param {Scheduler.model.EventModel} [config.parentEventRecord] Parent event to add the event to (to nest it),\n * only applies when using the NestedEvents feature\n * @param {Scheduler.model.ResourceModel} config.resourceRecord Resource to assign the event to\n * @param {HTMLElement} [config.element] The element if you are dragging an element from outside the scheduler\n * @category Scheduled events\n */\n async scheduleEvent({ startDate, eventRecord, resourceRecord, element }) {\n const me = this;\n // NestedEvents has an override for this function to handle parentEventRecord\n if (!me.eventStore.includes(eventRecord)) {\n [eventRecord] = me.eventStore.add(eventRecord);\n }\n eventRecord.startDate = startDate;\n eventRecord.assign(resourceRecord);\n if (element) {\n const eventRect = Rectangle.from(element, me.foregroundCanvas);\n // Clear translate styles used by DragHelper\n DomHelper.setTranslateXY(element, 0, 0);\n DomHelper.setTopLeft(element, eventRect.y, eventRect.x);\n DomSync.addChild(me.foregroundCanvas, element, eventRecord.assignments[0].id);\n }\n await me.project.commitAsync();\n }\n}\n// Register this widget type with its Factory\nSchedulerBase.initClass();\n// Scheduler version is specified in TimelineBase because Gantt extends it\nSchedulerBase._$name = 'SchedulerBase';", "import ColorPicker from '../../Core/widget/ColorPicker.js';\nimport SchedulerBase from '../view/SchedulerBase.js';\n/**\n * @module Scheduler/widget/EventColorPicker\n */\n/**\n * A color picker that displays a list of available event colors which the user can select by using mouse or keyboard.\n * See Schedulers {@link Scheduler.view.mixin.TimelineEventRendering#config-eventColor eventColor config} for default\n * available colors.\n *\n * {@inlineexample Scheduler/widget/EventColorPicker.js}\n *\n * ```javascript\n * new EventColorPicker({\n * appendTo : 'container',\n * width : '10em',\n * onColorSelected() {\n * console.log(...arguments);\n * }\n * });\n * ```\n *\n * @classtype colorpicker\n * @extends Core/widget/ColorPicker\n */\nexport default class EventColorPicker extends ColorPicker {\n static $name = 'EventColorPicker';\n static type = 'eventcolorpicker';\n static configurable = {\n colorClasses : SchedulerBase.eventColors,\n colorClassPrefix : 'b-sch-',\n /**\n * @hideconfigs colors\n */\n colors : null,\n /**\n * Provide a {@link Scheduler.model.EventModel} instance to update it's\n * {@link Scheduler.model.mixin.EventModelMixin#field-eventColor} field\n * @config {Scheduler.model.EventModel}\n */\n record : null\n };\n colorSelected({ color }) {\n if (this.record) {\n this.record.eventColor = color;\n }\n }\n}\nEventColorPicker.initClass();\nEventColorPicker._$name = 'EventColorPicker';", "import ColorColumn from '../../Grid/column/ColorColumn.js';\nimport '../widget/EventColorPicker.js';\nimport ColumnStore from '../../Grid/data/ColumnStore.js';\n/**\n * @module Scheduler/column/EventColorColumn\n */\n/**\n * A column that displays Event's `eventColor` values (built-in color classes or CSS colors) as a colored element\n * similar to the {@link Scheduler.widget.EventColorField}. When the user clicks the element, a\n * {@link Scheduler.widget.EventColorPicker} lets the user select from a\n * {@link Scheduler.view.mixin.TimelineEventRendering#config-eventColor range of colors}.\n *\n * ```javascript\n * new Scheduler({\n * columns : [\n * {\n * type : 'eventcolor',\n * text : 'EventColor'\n * }\n * ]\n * });\n * ```\n *\n * {@inlineexample Scheduler/column/EventColorColumn.js}\n *\n * @extends Grid/column/ColorColumn\n * @classtype eventcolor\n * @column\n */\nexport default class EventColorColumn extends ColorColumn {\n static $name = 'EventColorColumn';\n static type = 'eventcolor';\n static defaults = {\n colorEditorType : 'eventcolorpicker',\n field : 'eventColor'\n };\n}\nColumnStore.registerColumnType(EventColorColumn);\nEventColorColumn._$name = 'EventColorColumn';", "import Column from '../../Grid/column/Column.js';\nimport ColumnStore from '../../Grid/data/ColumnStore.js';\n/**\n * @module Scheduler/column/ResourceCollapseColumn\n */\n/**\n * A column toggling the resource {@link Scheduler.model.ResourceModel#field-eventLayout} between `none` and `stack`.\n *\n * {@inlineexample Scheduler/column/ResourceCollapseColumn.js}\n *\n * @extends Grid/column/Column\n * @classtype resourceCollapse\n * @column\n */\nexport default class ResourceCollapseColumn extends Column {\n static get $name() {\n return 'ResourceCollapseColumn';\n }\n static get type() {\n return 'resourceCollapse';\n }\n static get defaults() {\n return {\n /** @hideconfigs renderer */\n width : '3em',\n align : 'center',\n sortable : false,\n groupable : false,\n editor : false,\n minWidth : 0,\n cellCls : 'b-resourcecollapse-cell',\n renderer : ({ record }) => ({\n tag : 'i',\n class : {\n 'b-icon' : 1,\n 'b-icon-expand-resource' : 1,\n 'b-flip' : record.eventLayout !== 'none'\n }\n })\n };\n }\n onCellClick({ record, event }) {\n if (!record.isSpecialRow) {\n // Prevent native scrolling on space key press\n event.preventDefault();\n record.eventLayout = record.eventLayout !== 'none' ? 'none' : 'stack';\n }\n }\n}\nColumnStore.registerColumnType(ResourceCollapseColumn);\nResourceCollapseColumn._$name = 'ResourceCollapseColumn';", "import Column from '../../Grid/column/Column.js';\nimport ColumnStore from '../../Grid/data/ColumnStore.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\nimport VersionHelper from '../../Core/helper/VersionHelper.js';\nimport AvatarRendering from '../../Core/widget/util/AvatarRendering.js';\n/**\n * @module Scheduler/column/ResourceInfoColumn\n */\n/**\n * Displays basic resource information. Defaults to showing an image + name + event count (all configurable).\n *\n * If a resource has no image, you can either provide an icon using `iconCls` in the data (you then need to specify\n * `image === false` in your data) or the resource initials will be shown.\n *\n * Be sure to specify {@link Scheduler.view.mixin.SchedulerEventRendering#config-resourceImagePath} to instruct the\n * column where to look for the images.\n *\n * If an image fails to load or if a resource lacks an image, the resource name initials will be rendered. If the\n * resource has an {@link Scheduler/model/mixin/ResourceModelMixin#field-eventColor} specified, it will be used as the\n * background color of the initials.\n *\n * {@inlineexample Scheduler/column/ResourceInfoColumn.js}\n *\n * @extends Grid/column/Column\n * @classtype resourceInfo\n * @column\n */\nexport default class ResourceInfoColumn extends Column {\n static get $name() {\n return 'ResourceInfoColumn';\n }\n static get type() {\n return 'resourceInfo';\n }\n static get fields() {\n return ['showEventCount', 'showRole', 'showMeta', 'showImage', 'validNames', 'autoScaleThreshold', 'useNameAsImageName'];\n }\n static get defaults() {\n return {\n /** @hideconfigs renderer */\n /**\n * Show image. Looks for image name in fields on the resource in the following order: 'imageUrl', 'image',\n * 'name'. Set `showImage` to a field name to use a custom field. Set `Scheduler.resourceImagePath` to\n * specify where to load images from. If no extension found, defaults to\n * {@link Scheduler.view.mixin.SchedulerEventRendering#config-resourceImageExtension}.\n * @config {Boolean}\n * @default\n */\n showImage : true,\n /**\n * Show number of events assigned to the resource below the name.\n * @config {Boolean}\n * @default\n */\n showEventCount : true,\n /**\n * A template string to render any extra information about the resource below the name\n * @config {Function}\n * @param {Scheduler.model.ResourceModel} resourceRecord The record representing the current row\n * @returns {String|null}\n */\n showMeta : null,\n /**\n * Show resource role below the name. Specify `true` to display data from the `role` field, or specify a field\n * name to read this value from.\n * @config {Boolean|String}\n * @default\n */\n showRole : false,\n /**\n * Valid image names. Set to `null` to allow all names.\n * @deprecated This will be removed in 6.0\n * @config {String[]}\n */\n validNames : null,\n /**\n * Specify 0 to prevent the column from adapting its content according to the used row height, or specify a\n * threshold (row height) at which scaling should start.\n * @config {Number}\n * @default\n */\n autoScaleThreshold : 40,\n /**\n * Use the resource name as the image name when no `image` is specified on the resource.\n * @config {Boolean}\n * @default\n */\n useNameAsImageName : true,\n field : 'name',\n htmlEncode : false,\n width : 140,\n cellCls : 'b-resourceinfo-cell',\n editor : VersionHelper.isTestEnv ? false : 'text'\n };\n }\n construct(...args) {\n super.construct(...args);\n this.avatarRendering = new AvatarRendering({\n element : this.grid.element\n });\n }\n doDestroy() {\n super.doDestroy();\n this.avatarRendering.destroy();\n }\n getImageURL(imageName) {\n const\n resourceImagePath = this.grid.resourceImagePath || '',\n parts = resourceImagePath.split('//'),\n urlPart = parts.length > 1 ? parts[1] : resourceImagePath,\n joined = StringHelper.joinPaths([urlPart || '', imageName || '']);\n return parts.length > 1 ? parts[0] + '//' + joined : joined;\n }\n template(resourceRecord, value) {\n const me = this,\n {\n showImage,\n showRole,\n showMeta,\n showEventCount,\n grid\n } = me,\n {\n timeAxis,\n resourceImageExtension = '',\n defaultResourceImageName\n } = grid,\n roleField = typeof showRole === 'string' ? showRole : 'role',\n count = showEventCount && resourceRecord.eventStore.getEvents({\n includeOccurrences : grid.enableRecurringEvents,\n resourceRecord,\n startDate : timeAxis.startDate,\n endDate : timeAxis.endDate\n }).length;\n let imageUrl;\n if (showImage && resourceRecord.image !== false) {\n if (resourceRecord.imageUrl) {\n imageUrl = resourceRecord.imageUrl;\n }\n else {\n // record.image is supposed to be a file name, located at resourceImagePath\n const\n imageName = typeof showImage === 'string'\n ? showImage\n : (resourceRecord.image || value && me.useNameAsImageName && (value.toLowerCase() + resourceImageExtension) || defaultResourceImageName) || '';\n imageUrl = imageName && me.getImageURL(imageName);\n // Image name should have an extension\n if (imageUrl && !imageName.includes('.')) {\n // If validNames is specified, check that imageName is valid\n if (!me.validNames || me.validNames.includes(imageName)) {\n imageUrl += resourceImageExtension;\n }\n }\n }\n }\n return {\n class : 'b-resource-info',\n children : [\n showImage && me.avatarRendering.getResourceAvatar({\n resourceRecord,\n initials : resourceRecord.initials,\n color : resourceRecord.eventColor,\n iconCls : resourceRecord.iconCls,\n imageUrl,\n defaultImageUrl : defaultResourceImageName && this.getImageURL(defaultResourceImageName)\n }),\n showRole || showEventCount || showMeta ? {\n tag : 'dl',\n children : [\n {\n tag : 'dt',\n text : value\n },\n showRole ? {\n tag : 'dd',\n class : 'b-resource-role',\n text : resourceRecord.getValue(roleField)\n } : null,\n showEventCount ? {\n tag : 'dd',\n class : 'b-resource-events',\n html : me.L('L{eventCountText}', count)\n } : null,\n showMeta ? {\n tag : 'dd',\n class : 'b-resource-meta',\n html : me.showMeta(resourceRecord)\n } : null\n ]\n } : value // This becomes a text node, no HTML encoding needed\n ]\n };\n }\n defaultRenderer({ grid, record, cellElement, value, isExport }) {\n let result;\n if (record.isSpecialRow) {\n result = '';\n }\n else if (isExport) {\n result = value;\n }\n else {\n if (this.autoScaleThreshold && grid.rowHeight < this.autoScaleThreshold) {\n cellElement.style.fontSize = (grid.rowHeight / 40) + 'em';\n }\n else {\n cellElement.style.fontSize = '';\n }\n result = this.template(record, value);\n }\n return result;\n }\n}\nColumnStore.registerColumnType(ResourceInfoColumn);\nResourceInfoColumn._$name = 'ResourceInfoColumn';", "import Column from '../../Grid/column/Column.js';\nimport ColumnStore from '../../Grid/data/ColumnStore.js';\nimport Scale from '../../Core/widget/graph/Scale.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\n/**\n * @module Scheduler/column/ScaleColumn\n */\n/**\n * An object representing a point on the scale displayed by {@link Scheduler.column.ScaleColumn}.\n *\n * @typedef {Object} ScalePoint\n * @property {Number} value Point value\n * @property {String} unit Point value unit\n * @property {String} text Point text label\n */\n/**\n * A specialized column showing a graduated scale from a defined array of values\n * and labels. This column is used in the {@link Scheduler.view.TimelineHistogram} and is not editable. Normally\n * you should not need to interact with this class directly.\n *\n * @extends Grid/column/Column\n * @classtype scale\n * @column\n */\nexport default class ScaleColumn extends Column {\n //region Config\n static $name = 'ScaleColumn';\n static type = 'scale';\n static isScaleColumn = true;\n static get fields() {\n return [\n 'scalePoints'\n ];\n }\n static get defaults() {\n return {\n text : '\\xa0',\n width : 40,\n minWidth : 40,\n field : 'scalePoints',\n cellCls : 'b-scale-cell',\n editor : false,\n sortable : false,\n groupable : false,\n filterable : false,\n alwaysClearCell : false,\n scalePoints : null\n };\n }\n //endregion\n //region Constructor/Destructor\n onDestroy() {\n this.scaleWidget.destroy();\n }\n //endregion\n //region Internal\n set width(width) {\n super.width = width;\n this.scaleWidget.width = width;\n }\n get width() {\n return super.width;\n }\n applyValue(useProp, key, value) {\n // pass value to scaleWidget\n if (key === 'scalePoints') {\n this.scaleWidget[key] = value;\n }\n return super.applyValue(...arguments);\n }\n buildScaleWidget() {\n const me = this;\n const scaleWidget = new Scale({\n owner : me.grid,\n appendTo : me.grid.floatRoot,\n cls : 'b-hide-offscreen',\n align : 'right',\n scalePoints : me.scalePoints,\n monitorResize : false\n });\n Object.defineProperties(scaleWidget, {\n width : {\n get() {\n return me.width;\n },\n set(width) {\n this.element.style.width = `${width}px`;\n this._width = me.width;\n }\n },\n height : {\n get() {\n return this._height;\n },\n set(height) {\n this.element.style.height = `${height}px`;\n this._height = height;\n }\n }\n });\n scaleWidget.width = me.width;\n return scaleWidget;\n }\n get scaleWidget() {\n const me = this;\n if (!me._scaleWidget) {\n me._scaleWidget = me.buildScaleWidget();\n }\n return me._scaleWidget;\n }\n //endregion\n //region Render\n renderer({ cellElement, value, scaleWidgetConfig, scaleWidget = this.scaleWidget }) {\n ObjectHelper.assign(scaleWidget, {\n scalePoints : value || this.scalePoints,\n height : this.grid.rowHeight\n }, scaleWidgetConfig);\n scaleWidget.refresh();\n // Clone the scale widget element since every row is supposed to have\n // the same scale settings\n const scaleCloneElement = scaleWidget.element.cloneNode(true);\n scaleCloneElement.removeAttribute('id');\n scaleCloneElement.classList.remove('b-hide-offscreen');\n cellElement.innerHTML = '';\n cellElement.appendChild(scaleCloneElement);\n }\n //endregion\n}\nColumnStore.registerColumnType(ScaleColumn);\nScaleColumn._$name = 'ScaleColumn';", "import Localizable from '../../../../Core/localization/Localizable.js';\nimport DayRuleEncoder from './RecurrenceDayRuleEncoder.js';\nimport DateHelper from '../../../../Core/helper/DateHelper.js';\n/**\n * @module Scheduler/data/util/recurrence/RecurrenceLegend\n */\n/**\n * A static class allowing to get a human readable description of the provided recurrence.\n *\n * ```javascript\n * const event = new EventModel({\n * startDate : new Date(2018, 6, 3),\n * endDate : new Date(2018, 6, 4)\n * });\n * const recurrence = new RecurrenceModel({\n * frequency : 'WEEKLY',\n * days : ['MO', 'TU', 'WE']\n * });\n * event.recurrence = recurrence;\n * // \"Weekly on Mon, Tue and Wed\"\n * RecurrenceLegend.getLegend(recurrence);\n * ```\n *\n * @mixes Core/localization/Localizable\n */\nexport default class RecurrenceLegend extends Localizable() {\n static get $name() {\n return 'RecurrenceLegend';\n }\n static get allDaysValueAsArray() {\n return ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\n }\n static get allDaysValue() {\n return this.allDaysValueAsArray.join(',');\n }\n static get workingDaysValue() {\n return this.allDaysValueAsArray.filter((day, index) => !DateHelper.nonWorkingDays[index]).join(',');\n }\n static get nonWorkingDaysValue() {\n return this.allDaysValueAsArray.filter((day, index) => DateHelper.nonWorkingDays[index]).join(',');\n }\n /**\n * Returns the provided recurrence description. The recurrence might be assigned to a timespan model,\n * in this case the timespan start date should be provided in the second argument.\n * @param {Scheduler.model.RecurrenceModel} recurrenceRecurrence model.\n * @param {Date} [timeSpanStartDate] The recurring timespan start date. Can be omitted if the recurrence is assigned\n * to a timespan model (and the timespan has {@link Scheduler.model.TimeSpan#field-startDate} filled). Then start\n * date will be retrieved from the model.\n * @returns {String} The recurrence description.\n */\n static getLegend(recurrence, timeSpanStartDate) {\n const\n me = this,\n { timeSpan, interval, days, monthDays, months, positions } = recurrence,\n startDate = timeSpanStartDate || timeSpan.startDate,\n tplData = { interval };\n let fn;\n switch (recurrence.frequency) {\n case 'DAILY':\n return interval === 1 ? me.L('L{Daily}') : me.L('L{Every {0} days}', tplData);\n case 'WEEKLY':\n if (days && days.length) {\n tplData.days = me.getDaysLegend(days);\n }\n else if (startDate) {\n tplData.days = DateHelper.getDayName(startDate.getDay());\n }\n return me.L(interval === 1 ? 'L{Weekly on {1}}' : 'L{Every {0} weeks on {1}}', tplData);\n case 'MONTHLY':\n if (days && days.length && positions && positions.length) {\n tplData.days = me.getDaysLegend(days, positions);\n }\n else if (monthDays && monthDays.length) {\n // sort dates to output in a proper order\n monthDays.sort((a, b) => a - b);\n tplData.days = me.arrayToText(monthDays);\n }\n else if (startDate) {\n tplData.days = startDate.getDate();\n }\n return me.L(interval === 1 ? 'L{Monthly on {1}}' : 'L{Every {0} months on {1}}', tplData);\n case 'YEARLY':\n if (days && days.length && positions && positions.length) {\n tplData.days = me.getDaysLegend(days, positions);\n }\n else {\n tplData.days = startDate.getDate();\n }\n if (months && months.length) {\n // sort months to output in a proper order\n months.sort((a, b) => a - b);\n if (months.length > 2) {\n fn = month => DateHelper.getMonthShortName(month - 1);\n }\n else {\n fn = month => DateHelper.getMonthName(month - 1);\n }\n tplData.months = me.arrayToText(months, fn);\n }\n else {\n tplData.months = DateHelper.getMonthName(startDate.getMonth());\n }\n return me.L(interval === 1 ? 'L{Yearly on {1} of {2}}' : 'L{Every {0} years on {1} of {2}}', tplData);\n }\n }\n static getDaysLegend(days, positions) {\n const\n me = this,\n tplData = { position : '' };\n let fn;\n if (positions && positions.length) {\n tplData.position = me.arrayToText(positions, position => me.L(`L{position${position}}`));\n }\n if (days.length) {\n days.sort((a, b) => DayRuleEncoder.decodeDay(a)[0] - DayRuleEncoder.decodeDay(b)[0]);\n switch (days.join(',')) {\n case me.allDaysValue :\n tplData.days = me.L('L{day}');\n break;\n case me.workingDaysValue :\n tplData.days = me.L('L{weekday}');\n break;\n case me.nonWorkingDaysValue :\n tplData.days = me.L('L{weekend day}');\n break;\n default :\n if (days.length > 2) {\n fn = day => DateHelper.getDayShortName(DayRuleEncoder.decodeDay(day)[0]);\n }\n else {\n fn = day => DateHelper.getDayName(DayRuleEncoder.decodeDay(day)[0]);\n }\n tplData.days = me.arrayToText(days, fn);\n }\n }\n return me.L('L{daysFormat}', tplData);\n }\n // Converts array of items to a human readable list.\n // For example: [1,2,3,4]\n // to: \"1, 2, 3 and 4\"\n static arrayToText(array, fn) {\n if (fn) {\n array = array.map(fn);\n }\n return array.join(', ').replace(/,(?=[^,]*$)/, this.L('L{ and }'));\n }\n}\nRecurrenceLegend._$name = 'RecurrenceLegend';", "import Base from '../../Core/Base.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\nimport BrowserHelper from '../../Core/helper/BrowserHelper.js';\n/**\n * @module Scheduler/tooltip/ClockTemplate\n */\n/**\n * A template showing a clock, it consumes an object containing a date and a text\n * @private\n */\nexport default class ClockTemplate extends Base {\n static get defaultConfig() {\n return {\n minuteHeight : 8,\n minuteTop : 2,\n hourHeight : 8,\n hourTop : 2,\n handLeft : 10,\n div : document.createElement('div'),\n scheduler : null, // may be passed to the constructor if needed\n // `b-sch-clock-day` for calendar icon\n // `b-sch-clock-hour` for clock icon\n template(data) {\n return `
\n
\n
${data.date ? DateHelper.format(data.date, 'MMM') : ''}
\n
${data.date ? DateHelper.format(data.date, 'D') : ''}
\n
\n
\n ${StringHelper.encodeHtml(data.text || '')}\n
`;\n }\n };\n }\n generateContent(data) {\n return this.div.innerHTML = this.template(data);\n }\n updateDateIndicator(el, date) {\n const\n hourIndicatorEl = el?.querySelector('.b-sch-hour-indicator'),\n minuteIndicatorEl = el?.querySelector('.b-sch-minute-indicator');\n if (date && hourIndicatorEl && minuteIndicatorEl && BrowserHelper.isBrowserEnv) {\n if (this.mode === 'hour') {\n hourIndicatorEl.style.transform = `rotate(${(date.getHours() % 12) * 30}deg)`;\n minuteIndicatorEl.style.transform = `rotate(${date.getMinutes() * 6}deg)`;\n }\n else {\n hourIndicatorEl.style.transform = 'none';\n minuteIndicatorEl.style.transform = 'none';\n }\n }\n }\n set mode(mode) {\n this._mode = mode;\n }\n // `day` mode for calendar icon\n // `hour` mode for clock icon\n get mode() {\n if (this._mode) {\n return this._mode;\n }\n const\n unitLessThanDay = DateHelper.compareUnits(this.scheduler.timeAxisViewModel.timeResolution.unit, 'day') < 0,\n formatContainsHourInfo = DateHelper.formatContainsHourInfo(this.scheduler.displayDateFormat);\n return unitLessThanDay && formatContainsHourInfo ? 'hour' : 'day';\n }\n set template(template) {\n this._template = template;\n }\n /**\n * Get the clock template, which accepts an object of format { date, text }\n * @property {Function}\n * @param {*} Format object\n * @returns {String}\n */\n get template() {\n return this._template;\n }\n}\nClockTemplate._$name = 'ClockTemplate';", "import InstancePlugin from '../../../Core/mixin/InstancePlugin.js';\nimport DateHelper from '../../../Core/helper/DateHelper.js';\nimport DomHelper from '../../../Core/helper/DomHelper.js';\nimport DragHelper from '../../../Core/helper/DragHelper.js';\nimport Rectangle from '../../../Core/helper/util/Rectangle.js';\nimport ClockTemplate from '../../tooltip/ClockTemplate.js';\nimport Tooltip from '../../../Core/widget/Tooltip.js';\nimport Objects from '../../../Core/helper/util/Objects.js';\nimport Widget from '../../../Core/widget/Widget.js';\n/**\n * @module Scheduler/feature/base/DragBase\n */\n/**\n * Base class for EventDrag (Scheduler) and TaskDrag (Gantt) features. Contains shared code. Not to be used directly.\n *\n * @extends Core/mixin/InstancePlugin\n * @abstract\n */\nexport default class DragBase extends InstancePlugin {\n //region Config\n static get defaultConfig() {\n return {\n // documented on Schedulers EventDrag feature and Gantt's TaskDrag\n tooltipTemplate : data => `\n
\n ${data.startClockHtml}\n ${data.endClockHtml}\n
${data.message}
\n
\n `,\n /**\n * Specifies whether or not to show tooltip while dragging event\n * @prp {Boolean}\n * @default\n */\n showTooltip : true,\n /**\n * When enabled, the event being dragged always \"snaps\" to the exact start date that it will have after drop.\n * @config {Boolean}\n * @default\n */\n showExactDropPosition : false,\n /*\n * The store from which the dragged items are mapped to the UI.\n * In Scheduler's implementation of this base class, this will be\n * an EventStore, in Gantt's implementations, this will be a TaskStore.\n * Because both derive from this base, we must refer to it as this.store.\n * @private\n */\n store : null,\n /**\n * An object used to configure the internal {@link Core.helper.DragHelper} class\n * @config {DragHelperConfig}\n */\n dragHelperConfig : null,\n tooltipCls : 'b-eventdrag-tooltip',\n /**\n * Whether to allow the SNET constraint generated by an event drag to be placed in non-\n * working time. When `true` and the event is dragged so that its `startDate` is in non-working\n * time, the SNET constraint date will be kept on the non-working date where the task is dropped.\n * When `false`, snaps the SNET date to working time in the same way as the `startDate`. The\n * `startDate` is not affected by this config.\n *\n * Applies only to Scheduler Pro and Gantt.\n *\n * @config {Boolean}\n * @default false\n */\n allowNonWorkingTimeSNET : null\n };\n }\n static get configurable() {\n return {\n /**\n * Set to `false` to allow dragging tasks outside the client Scheduler.\n * Useful when you want to drag tasks between multiple Scheduler instances\n * @config {Boolean}\n * @default\n */\n constrainDragToTimeline : true,\n // documented on Schedulers EventDrag feature, not used for Gantt\n constrainDragToResource : true,\n constrainDragToTimeSlot : false,\n /**\n * Yields the {@link Core.widget.Tooltip} which tracks the event during a drag operation.\n * @member {Core.widget.Tooltip} tip\n */\n /**\n * A config object to allow customization of the {@link Core.widget.Tooltip} which tracks\n * the event during a drag operation.\n * @config {TooltipConfig}\n */\n tip : {\n $config : ['lazy', 'nullify'],\n value : {\n align : {\n align : 'b-t',\n allowTargetOut : true\n },\n autoShow : true,\n updateContentOnMouseMove : true\n }\n },\n /**\n * The `eventDrag`and `taskDrag` events are normally only triggered when the drag operation will lead to a\n * change in date or assignment. By setting this config to `false`, that logic is bypassed to trigger events\n * for each native mouse move event.\n * @prp {Boolean}\n */\n throttleDragEvent : true\n };\n }\n // Plugin configuration. This plugin chains some of the functions in Grid.\n static get pluginConfig() {\n return {\n chain : ['onInternalPaint']\n };\n }\n //endregion\n //region Init\n internalSnapToPosition(snapTo) {\n const { dragData } = this;\n this.snapToPosition?.({\n assignmentRecord : dragData.assignmentRecord,\n eventRecord : dragData.eventRecord,\n resourceRecord : dragData.newResource || dragData.resourceRecord,\n startDate : dragData.startDate,\n endDate : dragData.endDate,\n snapTo\n });\n }\n buildDragHelperConfig() {\n const\n me = this,\n {\n client,\n constrainDragToTimeline,\n constrainDragToResource,\n constrainDragToTimeSlot,\n dragHelperConfig = {}\n } = me,\n { timeAxisViewModel, isHorizontal } = client,\n lockY = isHorizontal ? constrainDragToResource : constrainDragToTimeSlot,\n lockX = isHorizontal ? constrainDragToTimeSlot : constrainDragToResource;\n // If implementer wants to allow users dragging outside the timeline element, setup the internal dropTargetSelector\n if (me.externalDropTargetSelector) {\n dragHelperConfig.dropTargetSelector = `.b-timeaxissubgrid,${me.externalDropTargetSelector}`;\n }\n return Objects.merge({\n name : me.constructor.name, // useful when debugging with multiple draggers\n positioning : 'absolute',\n lockX,\n lockY,\n minX : true, // Allows dropping with start before time axis\n maxX : true, // Allows dropping with end after time axis\n constrain : false,\n cloneTarget : !constrainDragToTimeline,\n // If we clone event dragged bars, we assume ownership upon drop so we can reuse the element and have animations\n removeProxyAfterDrop : false,\n dragWithin : constrainDragToTimeline ? null : client.floatRoot,\n hideOriginalElement : true,\n dropTargetSelector : '.b-timelinebase',\n allowDropOutside : !constrainDragToTimeline,\n // A CSS class added to drop target while dragging events\n dropTargetCls : me.externalDropTargetSelector ? 'b-drop-target' : '',\n outerElement : client.timeAxisSubGridElement,\n targetSelector : client.eventSelector,\n scrollManager : constrainDragToTimeline ? client.scrollManager : null,\n createProxy : el => me.createProxy(el),\n snapCoordinates : ({ element, newX, newY }) => {\n const\n { dragData } = me,\n timeline = this.currentOverClient;\n // Snapping not supported when dragging outside a scheduler\n if (me.constrainDragToTimeline && !me.constrainDragToTimeSlot && (me.showExactDropPosition || timeAxisViewModel.snap)) {\n const\n draggedEventRecord = dragData.draggedEntities[0].event || dragData.draggedEntities[0],\n coordinate = me.getCoordinate(draggedEventRecord, element, [newX, newY]),\n //fillTicks and span features have different behaviours in rounding the new starDate while dragging, then snap feature needs to be forced to use the same date as fillTicks (if is active).\n snappedDate = timeline.fillTicks && client.timeAxis.isContinuous ? dragData.startDate : timeAxisViewModel.getDateFromPosition(coordinate, 'round'),\n { calendar } = draggedEventRecord;\n if (!calendar || snappedDate && calendar.isWorkingTime(snappedDate, DateHelper.add(snappedDate, draggedEventRecord.fullDuration))) {\n const snappedPosition = snappedDate && timeAxisViewModel.getPositionFromDate(snappedDate);\n if (snappedDate && snappedDate >= client.startDate && snappedPosition != null) {\n if (isHorizontal) {\n newX = snappedPosition;\n }\n else {\n newY = snappedPosition;\n }\n }\n }\n }\n const snapTo = { x : newX, y : newY };\n me.internalSnapToPosition(snapTo);\n return snapTo;\n },\n internalListeners : {\n beforedragstart : 'onBeforeDragStart',\n dragstart : 'onDragStart',\n afterdragstart : 'onAfterDragStart',\n drag : 'onDrag',\n drop : 'onDrop',\n abort : 'onDragAbort',\n abortFinalized : 'onDragAbortFinalized',\n reset : 'onDragReset',\n thisObj : me\n }\n }, dragHelperConfig, {\n isElementDraggable : (el, event) => {\n return (!dragHelperConfig || !dragHelperConfig.isElementDraggable || dragHelperConfig.isElementDraggable(el, event)) &&\n me.isElementDraggable(el, event);\n }\n });\n }\n /**\n * Called when scheduler is rendered. Sets up drag and drop and hover tooltip.\n * @private\n */\n onInternalPaint({ firstPaint }) {\n const\n me = this,\n { client } = me;\n me.drag?.destroy();\n me.drag = DragHelper.new(me.buildDragHelperConfig());\n if (firstPaint) {\n client.rowManager.ion({\n changeTotalHeight : () => me.updateYConstraint(me.dragData?.[`${client.scheduledEventName}Record`]),\n thisObj : me\n });\n }\n if (me.showTooltip) {\n me.clockTemplate = new ClockTemplate({\n scheduler : client\n });\n }\n }\n doDestroy() {\n this.drag?.destroy();\n this.clockTemplate?.destroy();\n this.tip?.destroy();\n super.doDestroy();\n }\n get tipId() {\n return `${this.client.id}-event-drag-tip`;\n }\n changeTip(tip, oldTip) {\n const me = this;\n if (tip) {\n const result = Tooltip.reconfigure(oldTip, Tooltip.mergeConfigs({\n forElement : me.element,\n id : me.tipId,\n getHtml : me.getTipHtml.bind(me),\n cls : me.tooltipCls,\n owner : me.client\n }, tip), {\n owner : me.client,\n defaults : {\n type : 'tooltip'\n }\n });\n result.ion({ innerHtmlUpdate : 'updateDateIndicator', thisObj : me });\n return result;\n }\n else {\n oldTip?.destroy();\n }\n }\n //endregion\n //region Drag events\n createProxy(element) {\n const proxy = element.cloneNode(true);\n delete proxy.id;\n proxy.classList.add(`b-sch-${this.client.mode}`);\n return proxy;\n }\n onBeforeDragStart({ context, event }) {\n const\n me = this,\n { client } = me,\n dragData = me.getMinimalDragData(context, event),\n eventRecord = dragData?.[`${client.scheduledEventName}Record`],\n resourceRecord = dragData.resourceRecord;\n if (client.readOnly || me.disabled || !eventRecord || eventRecord.isDraggable === false || eventRecord.readOnly || resourceRecord?.readOnly) {\n return false;\n }\n // Cache the date corresponding to the drag start point so that on drag, we can always\n // perform the same calculation to then find the time delta without having to calculate\n // the new start and end times from the position that the element is.\n context.pointerStartDate = client.getDateFromXY([context.startClientX, context.startPageY], null, false);\n const result = me.triggerBeforeEventDrag(\n `before${client.capitalizedEventName}Drag`,\n {\n ...dragData,\n event,\n // to be deprecated\n context : {\n ...context,\n ...dragData\n }\n }\n ) !== false;\n if (result) {\n me.updateYConstraint(eventRecord, resourceRecord);\n // Hook for features that need to react to drag starting, used by NestedEvents\n client[`before${client.capitalizedEventName}DragStart`]?.(context, dragData);\n }\n return result;\n }\n onAfterDragStart({ context, event }) {}\n /**\n * Returns true if a drag operation is active\n * @property {Boolean}\n * @readonly\n */\n get isDragging() {\n return this.drag?.isDragging;\n }\n // Checked by dependencies to determine if live redrawing is needed\n get isActivelyDragging() {\n return this.isDragging && !this.finalizing;\n }\n /**\n * Triggered when dragging of an event starts. Initializes drag data associated with the event being dragged.\n * @private\n */\n onDragStart({ context, event }) {\n const\n me = this,\n // When testing with Selenium, it simulates drag and drop with a single mousemove event, we might be over\n // another client already\n client = me.findClientFromTarget(event, context) ?? me.client;\n me.currentOverClient = client;\n me.drag.unifiedProxy = me.unifiedDrag;\n me.onMouseOverNewTimeline(client, true);\n const dragData = me.dragData = me.getDragData(context);\n // Do not let DomSync reuse the element\n me.suspendElementRedrawing(context.element);\n if (me.showTooltip && me.tip) {\n const tipTarget = dragData.context.dragProxy ? dragData.context.dragProxy.firstChild : context.element;\n me.tip.showBy(tipTarget);\n }\n me.triggerDragStart(dragData);\n // Hook for features that need to take action after drag starts\n client[`after${client.capitalizedEventName}DragStart`]?.(context, dragData);\n const\n {\n eventMenu,\n taskMenu\n } = client.features,\n menuFeature = eventMenu || taskMenu;\n // If this is a touch action, hide the context menu which may have shown\n menuFeature?.hideContextMenu?.(false);\n }\n updateDateIndicator() {\n const\n { startDate, endDate } = this.dragData,\n { tip, clockTemplate } = this,\n endDateElement = tip.element.querySelector('.b-sch-tooltip-enddate');\n clockTemplate.updateDateIndicator(tip.element, startDate);\n endDateElement && clockTemplate.updateDateIndicator(endDateElement, endDate);\n }\n findClientFromTarget(event, context) {\n let { target } = event;\n // Can't detect target under a touch event\n if (/^touch/.test(event.type)) {\n const center = Rectangle.from(context.element, null, true).center;\n target = DomHelper.elementFromPoint(center.x, center.y);\n }\n const client = Widget.fromElement(target, 'timelinebase');\n // Do not allow drops on histogram widgets\n return client?.isResourceHistogram ? null : client;\n }\n /**\n * Triggered while dragging an event. Updates drag data, validation etc.\n * @private\n */\n onDrag({ context, event }) {\n const\n me = this,\n dd = me.dragData,\n start = dd.startDate;\n let client;\n if (me.constrainDragToTimeline) {\n client = me.client;\n }\n else {\n client = me.findClientFromTarget(event, dd.context);\n }\n me.updateDragContext(context, event);\n if (!client) {\n return;\n }\n if (client !== me.currentOverClient) {\n me.onMouseOverNewTimeline(client);\n }\n //this.checkShiftChange();\n // Let product specific implementations trigger drag event (eventDrag, taskDrag)\n if (dd.dirty || !me.throttleDragEvent) {\n const valid = dd.valid;\n me.triggerEventDrag(dd, start);\n if (valid !== dd.valid) {\n dd.context.valid = dd.externalDragValidity = dd.valid;\n }\n }\n if (me.showTooltip && me.tip) {\n // If we've an error message to show, force the tip to be visible\n // even if the target is not in view.\n me.tip.lastAlignSpec.allowTargetOut = !dd.valid;\n me.tip.realign();\n }\n }\n onMouseOverNewTimeline(newTimeline, initial) {\n const\n me = this,\n { drag : { lockX, lockY } } = me,\n scrollables = [];\n me.currentOverClient.element.classList.remove('b-dragging-' + me.currentOverClient.scheduledEventName);\n newTimeline.element.classList.add('b-dragging-' + newTimeline.scheduledEventName);\n if (!initial) {\n me.currentOverClient.scrollManager.stopMonitoring();\n }\n if (!lockX) {\n scrollables.push({\n element : newTimeline.timeAxisSubGrid.scrollable.element,\n direction : 'horizontal'\n });\n }\n if (!lockY) {\n scrollables.push({\n element : newTimeline.scrollable.element,\n direction : 'vertical'\n });\n }\n newTimeline.scrollManager.startMonitoring({\n scrollables,\n callback : me.drag.onScrollManagerScrollCallback\n });\n me.currentOverClient = newTimeline;\n }\n triggerBeforeEventDropFinalize(eventType, eventData, client) {\n client.trigger(eventType, eventData);\n }\n /**\n * Triggered when dropping an event. Finalizes the operation.\n * @private\n */\n onDrop({ context, event }) {\n const\n me = this,\n { currentOverClient, dragData } = me;\n let modified = false;\n // Stop monitoring early, to avoid scrolling during finalization\n currentOverClient?.scrollManager.stopMonitoring();\n me.tip?.hide();\n context.valid = context.valid && me.isValidDrop(dragData);\n // If dropping outside scheduler, we opt in on DragHelper removing the proxy element\n me.drag.removeProxyAfterDrop = Boolean(dragData.externalDropTarget);\n if (context.valid && dragData.startDate && dragData.endDate) {\n let beforeDropTriggered = false;\n dragData.finalize = async(valid) => {\n if (beforeDropTriggered || dragData.async) {\n await me.finalize(valid);\n }\n else {\n // If user finalized operation synchronously in the beforeDropFinalize listener, just use\n // the valid param and carry on\n // but ignore it, if the context is already marked as invalid\n context.valid = context.valid && valid;\n }\n };\n me.triggerBeforeEventDropFinalize(`before${currentOverClient.capitalizedEventName}DropFinalize`, {\n context : dragData,\n domEvent : event\n }, currentOverClient);\n beforeDropTriggered = true;\n // Allow implementer to take control of the flow, by returning false from this listener,\n // to show a confirmation popup etc. This event is documented in EventDrag and TaskDrag\n context.async = dragData.async;\n // Internal validation, making sure all dragged records fit inside the view\n if (!context.async && !dragData.externalDropTarget) {\n modified = (dragData.startDate - dragData.origStart) !== 0 || dragData.newResource !== dragData.resourceRecord;\n }\n }\n if (!context.async) {\n me.finalize(dragData.valid && context.valid && modified);\n }\n }\n onDragAbort({ context }) {\n const me = this;\n // Flag checked by dependencies feature, to live redraw during abort\n me.isAborting = true;\n // Stop monitoring early, to avoid scrolling during finalization\n me.currentOverClient?.scrollManager.stopMonitoring();\n me.client.currentOrientation.onDragAbort({ context, dragData : me.dragData });\n // otherwise the event disappears on next refresh (#62)\n me.resetDraggedElements();\n me.tip?.hide();\n // Trigger eventDragAbort / taskDragAbort depending on product\n me.triggerDragAbort(me.dragData);\n }\n // Fired after any abort animation has completed (the point where we want to trigger redraw of progress lines etc)\n onDragAbortFinalized({ context }) {\n const me = this;\n me.triggerDragAbortFinalized(me.dragData);\n // Hook for features that need to react on drag abort, used by NestedEvents\n me.client[`after${me.client.capitalizedEventName}DragAbortFinalized`]?.(context, me.dragData);\n me.isAborting = false;\n }\n // For the drag across multiple schedulers, tell all involved scroll managers to stop monitoring\n onDragReset({ source : dragHelper }) {\n const\n me = this,\n currentTimeline = me.currentOverClient;\n if (dragHelper.context?.started) {\n me.resetDraggedElements();\n currentTimeline.trigger(`${currentTimeline.scheduledEventName}DragReset`);\n }\n currentTimeline?.element.classList.remove(`b-dragging-${currentTimeline.scheduledEventName}`);\n me.dragData = null;\n }\n resetDraggedElements() {\n const\n { dragData } = this,\n { eventBarEls, draggedEntities } = dragData;\n this.resumeRecordElementRedrawing(dragData.record);\n draggedEntities.forEach((record, i) => {\n this.resumeRecordElementRedrawing(record);\n eventBarEls[i].classList.remove(this.drag.draggingCls);\n eventBarEls[i].retainElement = false;\n });\n // Code expects 1:1 ratio between eventBarEls & dragged assignments, but when dragging an event of a linked\n // resource that is not the case, and we need to clean up some more\n dragData.context.element.retainElement = false;\n }\n /**\n * Triggered internally on invalid drop.\n * @private\n */\n onInternalInvalidDrop(abort) {\n const\n me = this,\n { context } = me.drag;\n me.tip?.hide();\n me.triggerAfterDrop(me.dragData, false);\n context.valid = false;\n if (abort) {\n me.drag.abort();\n }\n }\n //endregion\n //region Finalization & validation\n /**\n * Called on drop to update the record of the event being dropped.\n * @private\n * @param {Boolean} updateRecords Specify true to update the record, false to treat as invalid\n */\n async finalize(updateRecords) {\n const\n me = this,\n { dragData, currentOverClient } = me,\n clientEventTipFeature = currentOverClient.features.taskTooltip || currentOverClient.features.eventTooltip;\n // Drag could've been aborted by window blur event. If it is aborted - we have nothing to finalize.\n if (!dragData || me.finalizing) {\n return;\n }\n const { context, draggedEntities, externalDropTarget } = dragData;\n let result;\n me.finalizing = true;\n draggedEntities.forEach((record, i) => {\n me.resumeRecordElementRedrawing(record);\n dragData.eventBarEls[i].classList.remove(me.drag.draggingCls);\n dragData.eventBarEls[i].retainElement = false;\n });\n // Code expects 1:1 ratio between eventBarEls & dragged assignments, but when dragging an event of a linked\n // resource that is not the case, and we need to clean up some more\n context.element.retainElement = false;\n if ((externalDropTarget && dragData.valid) || updateRecords) {\n // updateRecords may or may not be async.\n // We see if it returns a Promise.\n result = me.updateRecords(dragData);\n // If updateRecords is async, the calling DragHelper must know this and\n // go into a awaitingFinalization state.\n if (!externalDropTarget && Objects.isPromise(result)) {\n context.async = true;\n await result;\n }\n // If the finalize handler decided to change the dragData's validity...\n if (!dragData.valid) {\n me.onInternalInvalidDrop(true);\n }\n else {\n if (context.async) {\n context.finalize();\n }\n if (externalDropTarget) {\n // Force a refresh early so that removed events will not temporary be visible while engine is\n // recalculating (the row below clears the 'b-hidden' CSS class of the original drag element)\n me.client.refreshRows(false);\n }\n me.triggerAfterDrop(dragData, true);\n }\n }\n else {\n me.onInternalInvalidDrop(context.async || dragData.async);\n }\n me.finalizing = false;\n // Prevent event tooltip showing after a drag drop\n if (clientEventTipFeature?.enabled) {\n clientEventTipFeature.disabled = true;\n currentOverClient.setTimeout(() => {\n clientEventTipFeature.disabled = false;\n }, 200);\n }\n return result;\n }\n //endregion\n //region Drag data\n getEventNewStartEndDates(eventRecord, timeDiff) {\n // calculate and round new startDate based on actual timeDiff\n let startDate = this.adjustStartDate(eventRecord.startDate, timeDiff);\n let endDate;\n // Use actual outcome for Pro, ignoring non-working time\n if (eventRecord.graph && !this.allowNonWorkingTimeSNET) {\n try {\n startDate = eventRecord.run('skipNonWorkingTime', startDate);\n endDate = eventRecord.run('calculateProjectedXDateWithDuration', startDate, true, eventRecord.duration);\n }\n catch (e) {\n // the `skipNonWorkingTime` and other calendar-related methods can issue `EmptyCalendarEffect` effect\n // in case the calendar does not contain the sufficient work space to schedule the event from the\n // given drop point\n // the `run` method throws in such case - marking the drop as invalid\n return { valid : false };\n }\n }\n else {\n endDate = DateHelper.add(startDate, eventRecord.fullDuration);\n }\n return { startDate, endDate };\n }\n /**\n * Updates drag data's dates and validity (calls #validatorFn if specified)\n * @private\n */\n updateDragContext(info, event) {\n const\n me = this,\n { drag } = me,\n dd = me.dragData,\n client = me.currentOverClient,\n { isHorizontal } = client,\n [record] = dd.draggedEntities,\n eventRecord = record.isAssignment ? record.event : record,\n lastDragStartDate = dd.startDate,\n constrainToTimeSlot = me.constrainDragToTimeSlot || (isHorizontal ? drag.lockX : drag.lockY);\n dd.browserEvent = event;\n // getProductDragContext may switch valid flag, need to keep it here\n Object.assign(dd, me.getProductDragContext(dd));\n if (constrainToTimeSlot) {\n dd.timeDiff = 0;\n }\n else {\n let timeDiff;\n // Time diff is calculated differently for continuous and non-continuous time axis\n // (except if element starts and ends outside of view)\n if (client.timeAxis.isContinuous || (dd.startsOutsideView && dd.endsOutsideView)) {\n const\n timeAxisPosition = client.isHorizontal ? info.pageX ?? info.startPageX : info.pageY ?? info.startPageY,\n // Use the localized coordinates to ask the TimeAxisViewModel what date the mouse is at.\n // Pass allowOutOfRange as true in case we have dragged out of either side of the timeline viewport.\n pointerDate = client.getDateFromCoordinate(timeAxisPosition, null, false, true);\n timeDiff = dd.timeDiff = pointerDate - info.pointerStartDate;\n if (timeDiff !== null) {\n Object.assign(dd, me.getEventNewStartEndDates(eventRecord, timeDiff));\n if (dd.valid) {\n dd.timeDiff = dd.startDate - dd.origStart;\n }\n }\n }\n else {\n const range = me.resolveStartEndDates(info.element);\n // if dragging is out of timeAxis rect bounds, we will not be able to get dates\n dd.valid = Boolean(range.startDate && range.endDate);\n if (dd.valid) {\n timeDiff = range.startDate - dd.origStart;\n }\n if (timeDiff !== undefined) {\n // Use actual outcome for Pro, ignoring non-working time\n if (eventRecord.graph && !this.allowNonWorkingTimeSNET) {\n dd.startDate = eventRecord.run('skipNonWorkingTime', range.startDate);\n dd.endDate = eventRecord.run('calculateProjectedXDateWithDuration', range.startDate, true, eventRecord.duration);\n }\n else {\n dd.startDate = range.startDate;\n dd.endDatee = range.endDate;\n }\n }\n dd.timeDiff = timeDiff;\n }\n }\n const positionDirty = dd.dirty = dd.dirty || lastDragStartDate - dd.startDate !== 0;\n if (dd.valid) {\n // If it's fully outside, we don't allow them to drop it - the event would disappear from their control.\n if (me.constrainDragToTimeline && (dd.endDate <= client.timeAxis.startDate || dd.startDate >= client.timeAxis.endDate)) {\n dd.valid = false;\n dd.context.message = me.L('L{EventDrag.noDropOutsideTimeline}');\n }\n else if (positionDirty || dd.externalDropTarget) {\n // Used to rely on faulty code above that would not be valid initially. With that changed we ignore\n // checking validity here on drag start, which is detected by not having a pageX\n const result = dd.externalDragValidity = !event || (info.pageX && me.checkDragValidity(dd, event));\n if (!result || typeof result === 'boolean') {\n dd.valid = result !== false;\n dd.context.message = '';\n }\n else {\n dd.valid = result.valid !== false;\n dd.context.message = result.message;\n }\n }\n else {\n // Apply cached value from external drag validation\n dd.valid = dd.externalDragValidity !== false && dd.externalDragValidity?.valid !== false;\n }\n }\n else {\n dd.valid = false;\n }\n dd.context.valid = dd.valid;\n }\n suspendRecordElementRedrawing(record, suspend = true) {\n this.suspendElementRedrawing(this.getRecordElement(record), suspend);\n record.instanceMeta(this.client).retainElement = suspend;\n }\n resumeRecordElementRedrawing(record) {\n this.suspendRecordElementRedrawing(record, false);\n }\n suspendElementRedrawing(element, suspend = true) {\n if (element) {\n element.retainElement = suspend;\n }\n }\n resumeElementRedrawing(element) {\n this.suspendElementRedrawing(element, false);\n }\n /**\n * Initializes drag data (dates, constraints, dragged events etc). Called when drag starts.\n * @private\n * @param info\n * @returns {*}\n */\n getDragData(info) {\n const\n me = this,\n { client, drag } = me,\n productDragData = me.setupProductDragData(info),\n {\n record,\n eventBarEls,\n draggedEntities\n } = productDragData,\n { startEvent } = drag,\n timespan = record.isAssignment ? record.event : record,\n origStart = timespan.startDate,\n origEnd = timespan.endDate,\n timeAxis = client.timeAxis,\n startsOutsideView = origStart < timeAxis.startDate,\n endsOutsideView = origEnd > timeAxis.endDate,\n multiSelect = client.isSchedulerBase ? client.multiEventSelect : client.selectionMode.multiSelect,\n coordinate = me.getCoordinate(timespan, info.element, [info.elementStartX, info.elementStartY]),\n clientCoordinate = me.getCoordinate(timespan, info.element, [info.startClientX, info.startClientY]);\n me.suspendRecordElementRedrawing(record);\n // prevent elements from being released when out of view\n draggedEntities.forEach(record => me.suspendRecordElementRedrawing(record));\n // Make sure the dragged event is selected (no-op for already selected)\n // Preserve other selected events if ctrl/meta is pressed\n if (record.isAssignment) {\n client.selectAssignment(record, startEvent.ctrlKey && multiSelect);\n }\n else {\n client.selectEvent(record, startEvent.ctrlKey && multiSelect);\n }\n const dragData = {\n context : info,\n ...productDragData,\n sourceDate : startsOutsideView ? origStart : client.getDateFromCoordinate(coordinate),\n screenSourceDate : client.getDateFromCoordinate(clientCoordinate, null, false),\n startDate : origStart,\n endDate : origEnd,\n timeDiff : 0,\n origStart,\n origEnd,\n startsOutsideView,\n endsOutsideView,\n duration : origEnd - origStart,\n browserEvent : startEvent // So we can know if SHIFT/CTRL was pressed\n };\n eventBarEls.forEach(el => el.classList.remove('b-sch-event-hover', 'b-active'));\n if (eventBarEls.length > 1) {\n // RelatedElements are secondary elements moved by the same delta as the grabbed element\n info.relatedElements = eventBarEls.slice(1);\n }\n return dragData;\n }\n //endregion\n //region Constraints\n // private\n setupConstraints(constrainRegion, elRegion, tickSize, constrained) {\n const\n me = this,\n xTickSize = !me.showExactDropPosition && tickSize > 1 ? tickSize : 0,\n yTickSize = 0;\n // If `constrained` is false then we have no date constraints and should constrain mouse position to scheduling area\n // else we have specified date constraints and so we should limit mouse position to smaller region inside of constrained region using offsets and width.\n if (constrained) {\n me.setXConstraint(constrainRegion.left, constrainRegion.right - elRegion.width, xTickSize);\n }\n // And if not constrained, release any constraints from the previous drag.\n else {\n // minX being true means allow the start to be before the time axis.\n // maxX being true means allow the end to be after the time axis.\n me.setXConstraint(true, true, xTickSize);\n }\n me.setYConstraint(constrainRegion.top, constrainRegion.bottom - elRegion.height, yTickSize);\n }\n updateYConstraint(eventRecord, resourceRecord) {\n const\n me = this,\n { client } = me,\n { context } = me.drag,\n tickSize = client.timeAxisViewModel.snapPixelAmount;\n // If we're dragging when the vertical size is recalculated by the host grid,\n // we must update our Y constraint unless we are locked in the Y axis.\n if (context && !me.drag.lockY) {\n let constrainRegion;\n // This calculates a relative region which the DragHelper uses within its outerElement\n if (me.constrainDragToTimeline) {\n constrainRegion = client.getScheduleRegion(resourceRecord, eventRecord);\n }\n // Not constraining to timeline.\n // Unusual configuration, but this must mean no Y constraining.\n else {\n me.setYConstraint(null, null, tickSize);\n return;\n }\n me.setYConstraint(\n constrainRegion.top,\n constrainRegion.bottom - context.element.offsetHeight,\n tickSize\n );\n }\n else {\n me.setYConstraint(null, null, tickSize);\n }\n }\n setXConstraint(iLeft, iRight, iTickSize) {\n const { drag } = this;\n drag.minX = iLeft;\n drag.maxX = iRight;\n }\n setYConstraint(iUp, iDown, iTickSize) {\n const { drag } = this;\n drag.minY = iUp;\n drag.maxY = iDown;\n }\n //endregion\n //region Other stuff\n adjustStartDate(startDate, timeDiff) {\n const rounded = this.client.timeAxis.roundDate(\n new Date(startDate - 0 + timeDiff),\n this.client.snapRelativeToEventStartDate ? startDate : false\n );\n return this.constrainStartDate(rounded);\n }\n resolveStartEndDates(draggedElement) {\n const\n timeline = this.currentOverClient,\n { timeAxis } = timeline,\n proxyRect = Rectangle.from(draggedElement.querySelector(timeline.eventInnerSelector), timeline.timeAxisSubGridElement),\n dd = this.dragData,\n [record] = dd.draggedEntities,\n eventRecord = record.isAssignment ? record.event : record,\n fillSnap = timeline.fillTicks && timeline.snapRelativeToEventStartDate,\n // Cannot calculate using `eventRecord.duration`, since it in Pro does not include non-working time\n totalDurationMS = eventRecord.endDate - eventRecord.startDate;\n // Non-continuous time axis will return null instead of date for a rectangle outside of the view unless\n // told to estimate date.\n // When using fillTicks, we need exact dates for calculations below\n let {\n start : startDate, end : endDate\n } = timeline.getStartEndDatesFromRectangle(proxyRect, fillSnap ? null : 'round', totalDurationMS, true);\n // if dragging is out of timeAxis rect bounds, we will not be able to get dates\n if (startDate && endDate) {\n // When filling ticks, proxy start does not represent actual start date.\n // Need to compensate to get expected result\n if (fillSnap) {\n const\n // Events offset into the tick, in MS\n offsetMS = eventRecord.startDate - DateHelper.startOf(eventRecord.startDate, timeAxis.unit),\n // Proxy length in MS\n proxyMS = endDate - startDate,\n // Part of proxy that is \"filled\" and needs to be removed\n offsetPx = (offsetMS / proxyMS) * proxyRect.width;\n // Deflate top for vertical mode, left for horizontal mode\n proxyRect.deflate(offsetPx, 0, 0, offsetPx);\n const proxyStart = proxyRect.getStart(timeline.rtl, !timeline.isVertical);\n // Get date from offset proxy start\n startDate = timeline.getDateFromCoordinate(proxyStart, null, true);\n // Snap relative to event start date\n startDate = timeAxis.roundDate(startDate, eventRecord.startDate);\n }\n startDate = this.adjustStartDate(startDate, 0);\n if (!dd.startsOutsideView) {\n // Make sure we didn't target a start date that is filtered out, if we target last hour cell (e.g. 21:00) of\n // the time axis, and the next tick is 08:00 following day. Trying to drop at end of 21:00 cell should target start of next cell\n if (!timeAxis.dateInAxis(startDate, false)) {\n const tick = timeAxis.getTickFromDate(startDate);\n if (tick >= 0) {\n startDate = timeAxis.getDateFromTick(tick);\n }\n }\n endDate = startDate && DateHelper.add(startDate, totalDurationMS);\n }\n else if (!dd.endsOutsideView) {\n startDate = endDate && DateHelper.add(endDate, -totalDurationMS);\n }\n }\n return {\n startDate,\n endDate\n };\n }\n //endregion\n //region Dragtip\n /**\n * Gets html to display in tooltip while dragging event. Uses clockTemplate to display start & end dates.\n */\n getTipHtml() {\n const\n me = this,\n { dragData, client, tooltipTemplate } = me,\n { startDate, endDate, draggedEntities } = dragData,\n startText = client.getFormattedDate(startDate),\n endText = (endDate && client.getFormattedEndDate(endDate, startDate)) || '',\n { valid, message, element, dragProxy } = dragData.context,\n tipTarget = dragProxy ? dragProxy.firstChild : element,\n dragged = draggedEntities[0],\n // Scheduler always drags assignments\n timeSpanRecord = dragged.isTask ? dragged : dragged.event;\n // Keep align target up to date in case of derendering the target when\n // dragged outside render window, and re-entry into the render window.\n me.tip.lastAlignSpec.target = tipTarget;\n return tooltipTemplate({\n valid,\n startDate,\n endDate,\n startText,\n endText,\n dragData,\n message : message || '',\n [client.scheduledEventName + 'Record'] : timeSpanRecord,\n startClockHtml : me.clockTemplate.template({\n date : startDate,\n text : startText,\n cls : 'b-sch-tooltip-startdate'\n }),\n endClockHtml : timeSpanRecord.isMilestone\n ? ''\n : me.clockTemplate.template({\n date : endDate,\n text : endText,\n cls : 'b-sch-tooltip-enddate'\n })\n });\n }\n //endregion\n //region Configurable\n // Constrain to time slot means lockX if we're horizontal, otherwise lockY\n updateConstrainDragToTimeSlot(value) {\n const axis = this.client.isHorizontal ? 'lockX' : 'lockY';\n if (this.drag) {\n this.drag[axis] = value;\n }\n }\n // Constrain to resource means lockY if we're horizontal, otherwise lockX\n updateConstrainDragToResource(constrainDragToResource) {\n const me = this;\n if (me.drag) {\n const\n { constrainDragToTimeSlot } = me,\n { isHorizontal } = me.client;\n if (constrainDragToResource) {\n me.constrainDragToTimeline = true;\n }\n me.drag.lockY = isHorizontal ? constrainDragToResource : constrainDragToTimeSlot;\n me.drag.lockX = isHorizontal ? constrainDragToTimeSlot : constrainDragToResource;\n }\n }\n updateConstrainDragToTimeline(constrainDragToTimeline) {\n if (!this.isConfiguring) {\n Object.assign(this.drag, {\n cloneTarget : !constrainDragToTimeline,\n allowDropOutside : !constrainDragToTimeline,\n dragWithin : constrainDragToTimeline ? null : this.client.floatRoot,\n scrollManager : constrainDragToTimeline ? this.client.scrollManager : null\n });\n }\n }\n constrainStartDate(startDate) {\n const\n { dragData } = this,\n { dateConstraints } = dragData,\n scheduleableRecord = dragData.eventRecord || dragData.taskRecord || dragData.draggedEntities[0];\n if (dateConstraints?.start) {\n startDate = DateHelper.max(dateConstraints.start, startDate);\n }\n if (dateConstraints?.end) {\n startDate = DateHelper.min(new Date(dateConstraints.end - scheduleableRecord.durationMS), startDate);\n }\n return startDate;\n }\n //endregion\n //region Product specific, implemented in subclasses\n getElementFromContext(context) {\n return context.grabbed || context.dragProxy || context.element;\n }\n // Provide your custom implementation of this to allow additional selected records to be dragged together with the original one.\n getRelatedRecords(record) {\n return [];\n }\n getMinimalDragData(info, event) {\n // Can be overridden in subclass\n return {};\n }\n // Check if element can be dropped at desired location\n isValidDrop(dragData) {\n throw new Error('Implement in subclass');\n }\n // Similar to the fn above but also calls validatorFn\n checkDragValidity(dragData) {\n throw new Error('Implement in subclass');\n }\n // Update records being dragged\n updateRecords(context) {\n throw new Error('Implement in subclass');\n }\n // Determine if an element can be dragged\n isElementDraggable(el, event) {\n throw new Error('Implement in subclass');\n }\n // Get coordinate for correct axis\n getCoordinate(record, element, coord) {\n throw new Error('Implement in subclass');\n }\n // Product specific drag data\n setupProductDragData(info) {\n throw new Error('Implement in subclass');\n }\n // Product specific data in drag context\n getProductDragContext(dd) {\n throw new Error('Implement in subclass');\n }\n getRecordElement(record) {\n throw new Error('Implement in subclass');\n }\n //endregion\n}\nDragBase._$name = 'DragBase';", "import InstancePlugin from '../../Core/mixin/InstancePlugin.js';\nimport Draggable from '../../Core/mixin/Draggable.js';\nimport Droppable from '../../Core/mixin/Droppable.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\nimport Rectangle from '../../Core/helper/util/Rectangle.js';\nimport Tooltip from '../../Core/widget/Tooltip.js';\nimport ClockTemplate from '../tooltip/ClockTemplate.js';\nimport EventHelper from '../../Core/helper/EventHelper.js';\nimport BrowserHelper from '../../Core/helper/BrowserHelper.js';\nimport TimeSpan from '../../Scheduler/model/TimeSpan.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport VersionHelper from '../../Core/helper/VersionHelper.js';\n/**\n * @module Scheduler/feature/EventResize\n */\nconst tipAlign = {\n top : 'b-t',\n right : 'b100-t100',\n bottom : 't-b',\n left : 'b0-t0'\n};\n/**\n * Feature that allows resizing an event by dragging its end.\n *\n * By default it displays a tooltip with the new start and end dates, formatted using\n * {@link Scheduler/view/mixin/TimelineViewPresets#config-displayDateFormat}.\n *\n * ## Customizing the resize tooltip\n *\n * To show custom HTML in the tooltip, please see the {@link #config-tooltipTemplate} config. Example:\n *\n * ```javascript\n * eventResize : {\n * // A minimal end date tooltip\n * tooltipTemplate : ({ record, endDate }) => {\n * return DateHelper.format(endDate, 'MMM D');\n * }\n * }\n * ```\n *\n * This feature is **enabled** by default\n *\n * This feature is extended with a few overrides by the Gantt's `TaskResize` feature.\n *\n * This feature updates the event's `startDate` or `endDate` live in order to leverage the\n * rendering pathway to always yield a correct appearance. The changes are done in\n * {@link Core.data.Model#function-beginBatch batched} mode so that changes do not become\n * eligible for data synchronization or propagation until the operation is completed.\n *\n * {@inlineexample Scheduler/feature/EventResize.js}\n *\n * @demo Scheduler/basic\n *\n * @extends Core/mixin/InstancePlugin\n * @classtype eventResize\n * @feature\n */\nexport default class EventResize extends InstancePlugin.mixin(Draggable, Droppable) {\n //region Events\n /**\n * Fired on the owning Scheduler before resizing starts. Return `false` to prevent the action.\n * @event beforeEventResize\n * @on-owner\n * @preventable\n * @param {Scheduler.view.Scheduler} source Scheduler instance\n * @param {Scheduler.model.EventModel} eventRecord Event record being resized\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record the resize starts within\n * @param {MouseEvent} event Browser event\n */\n /**\n * Fires on the owning Scheduler when event resizing starts\n * @event eventResizeStart\n * @on-owner\n * @param {Scheduler.view.Scheduler} source Scheduler instance\n * @param {Scheduler.model.EventModel} eventRecord Event record being resized\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record the resize starts within\n * @param {MouseEvent} event Browser event\n */\n /**\n * Fires on the owning Scheduler on each resize move event\n * @event eventPartialResize\n * @on-owner\n * @param {Scheduler.view.Scheduler} source Scheduler instance\n * @param {Scheduler.model.EventModel} eventRecord Event record being resized\n * @param {Date} startDate\n * @param {Date} endDate\n * @param {HTMLElement} element\n */\n /**\n * Fired on the owning Scheduler to allow implementer to prevent immediate finalization by setting\n * `data.context.async = true` in the listener, to show a confirmation popup etc\n *\n * ```javascript\n * scheduler.on('beforeeventresizefinalize', ({context}) => {\n * context.async = true;\n * setTimeout(() => {\n * // async code don't forget to call finalize\n * context.finalize();\n * }, 1000);\n * })\n * ```\n *\n * @event beforeEventResizeFinalize\n * @on-owner\n * @param {Scheduler.view.Scheduler} source Scheduler instance\n * @param {Object} context\n * @param {Scheduler.model.EventModel} context.eventRecord Event record being resized\n * @param {Date} context.startDate New startDate (changed if resizing start side)\n * @param {Date} context.endDate New endDate (changed if resizing end side)\n * @param {Date} context.originalStartDate Start date before resize\n * @param {Date} context.originalEndDate End date before resize\n * @param {Boolean} context.async Set true to handle resize asynchronously (e.g. to wait for user confirmation)\n * @param {Function} context.finalize Call this method to finalize resize. This method accepts one argument:\n * pass `true` to update records, or `false`, to ignore changes\n * @param {Event} event Browser event\n */\n /**\n * Fires on the owning Scheduler after the resizing gesture has finished.\n * @event eventResizeEnd\n * @on-owner\n * @param {Scheduler.view.Scheduler} source Scheduler instance\n * @param {Boolean} changed Shows if the record has been changed by the resize action\n * @param {Scheduler.model.EventModel} eventRecord Event record being resized\n */\n //endregion\n //region Config\n static get $name() {\n return 'EventResize';\n }\n static get configurable() {\n return {\n draggingItemCls : 'b-sch-event-wrap-resizing',\n resizingItemInnerCls : 'b-sch-event-resizing',\n /**\n * Use left handle when resizing. Only applies when owning client's `direction` is 'horizontal'\n * @config {Boolean}\n * @default\n */\n leftHandle : true,\n /**\n * Use right handle when resizing. Only applies when owning client's `direction` is 'horizontal'\n * @config {Boolean}\n * @default\n */\n rightHandle : true,\n /**\n * Use top handle when resizing. Only applies when owning client's direction` is 'vertical'\n * @config {Boolean}\n * @default\n */\n topHandle : true,\n /**\n * Use bottom handle when resizing. Only applies when owning client's `direction` is 'vertical'\n * @config {Boolean}\n * @default\n */\n bottomHandle : true,\n /**\n * Resizing handle size to use instead of that determined by CSS\n * @config {Number}\n * @deprecated Since 5.2.7. The handle size is determined from responsive CSS. Will be removed in 6.0\n */\n handleSize : null,\n /**\n * Automatically shrink virtual handles when available space < handleSize. The virtual handles will\n * decrease towards width/height 1, reserving space between opposite handles to for example leave room for\n * dragging. To configure reserved space, see {@link #config-reservedSpace}.\n * @config {Boolean}\n * @default false\n */\n dynamicHandleSize : true,\n /**\n * Set to true to allow resizing to a zero-duration span\n * @config {Boolean}\n * @default false\n */\n allowResizeToZero : null,\n /**\n * Room in px to leave unoccupied by handles when shrinking them dynamically (see\n * {@link #config-dynamicHandleSize}).\n * @config {Number}\n * @default\n */\n reservedSpace : 5,\n /**\n * Resizing handle size to use instead of that determined by CSS on touch devices\n * @config {Number}\n * @deprecated Since 5.2.7. The handle size is determined from responsive CSS. Will be removed in 6.0\n */\n touchHandleSize : null,\n /**\n * The amount of pixels to move pointer/mouse before it counts as a drag operation.\n * @config {Number}\n * @default\n */\n dragThreshold : 0,\n dragTouchStartDelay : 0,\n draggingClsSelector : '.b-timeline-base',\n /**\n * `false` to not show a tooltip while resizing\n * @config {Boolean}\n * @default\n */\n showTooltip : true,\n /**\n * true to see exact event length during resizing\n * @config {Boolean}\n * @default\n */\n showExactResizePosition : false,\n /**\n * An empty function by default, but provided so that you can perform custom validation on\n * the item being resized. Return true if the new duration is valid, false to signal that it is not.\n * @param {Object} context The resize context, contains the record & dates.\n * @param {Scheduler.model.TimeSpan} context.record The record being resized.\n * @param {Date} context.startDate The new start date.\n * @param {Date} context.endDate The new start date.\n * @param {Date} context.originalStartDate Start date before resize\n * @param {Date} context.originalEndDate End date before resize\n * @param {Event} event The browser Event object\n * @returns {Boolean}\n * @config {Function}\n */\n validatorFn : () => true,\n /**\n * `this` reference for the validatorFn\n * @config {Object}\n */\n validatorFnThisObj : null,\n /**\n * Setting this property may change the configuration of the {@link #config-tip}, or\n * cause it to be destroyed if `null` is passed.\n *\n * Reading this property returns the Tooltip instance.\n * @member {Core.widget.Tooltip|TooltipConfig} tip\n */\n /**\n * If a tooltip is required to illustrate the resize, specify this as `true`, or a config\n * object for the {@link Core.widget.Tooltip}.\n * @config {Core.widget.Tooltip|TooltipConfig}\n */\n tip : {\n $config : ['lazy', 'nullify'],\n value : {\n autoShow : false,\n axisLock : true,\n trackMouse : false,\n updateContentOnMouseMove : true,\n hideDelay : 0\n }\n },\n /**\n * A template function returning the content to show during a resize operation.\n *\n * @config {Function} tooltipTemplate\n * @param {Object} context A context object\n * @param {Date} context.startDate New start date\n * @param {Date} context.endDate New end date\n * @param {Scheduler.model.TimeSpan} context.record The record being resized\n * @param {String} context.startClockHtml Predefined HTML to show the start time\n * @param {String} context.endClockHtml Predefined HTML to show the end time\n * @returns {String} String representing the HTML markup\n */\n tooltipTemplate : context => `\n
\n ${context.startClockHtml}\n ${context.endClockHtml}\n
${context.message}
\n
\n `,\n ignoreSelector : '.b-sch-terminal',\n dragActiveCls : 'b-resizing-event',\n /**\n * Locks the layout during drag resize, overriding the default behaviour that uses the same rendering\n * pathway for drag resize as for already existing events.\n *\n * This more closely resembles the behaviour of versions prior to 4.2.0.\n *\n * Enabling this config also leads to cheaper resizing, only the resized event's resources are refreshed\n * during the operation.\n *\n * {@note}Note that this will be the default behaviour starting with version 6.0.0{/@note}\n *\n * @config {Boolean}\n */\n lockLayout : VersionHelper.checkVersion('core', '6.0', '>=')\n };\n }\n static get pluginConfig() {\n return {\n chain : ['render', 'onEventDataGenerated', 'isEventElementDraggable']\n };\n }\n //endregion\n //region Init & destroy\n doDestroy() {\n super.doDestroy();\n this.dragging?.destroy();\n }\n render() {\n const\n me = this,\n { client } = me;\n // Only active when in these items\n me.dragSelector = me.dragItemSelector = client.eventSelector;\n // Set up elements and listeners\n me.dragRootElement = me.dropRootElement = client.timeAxisSubGridElement;\n // Drag only in time dimension\n me.dragLock = client.isVertical ? 'y' : 'x';\n }\n // Prevent event dragging when it happens over a resize handle\n isEventElementDraggable(eventElement, eventRecord, el, event) {\n const\n me = this,\n eventResizable = eventRecord?.resizable;\n // ALLOW event drag:\n // - if resizing is disabled or event is not resizable\n // - if it's a milestone Milestones cannot be resized\n if (me.disabled || !eventResizable || eventRecord.isMilestone) {\n return true;\n }\n // not over the event handles\n return ((eventResizable !== true && eventResizable !== 'start') || !me.isOverStartHandle(event, eventElement)) &&\n ((eventResizable !== true && eventResizable !== 'end') || !me.isOverEndHandle(event, eventElement));\n }\n // Called for each event during render, allows manipulation of render data.\n onEventDataGenerated({ eventRecord, wrapperCls, cls }) {\n if (eventRecord === this.dragging?.context?.eventRecord) {\n wrapperCls['b-active'] =\n wrapperCls[this.draggingItemCls] =\n wrapperCls['b-over-resize-handle'] =\n cls['b-resize-handle'] =\n cls[this.resizingItemInnerCls] = 1;\n }\n }\n // Sneak a first peek at the drag event to put necessary date values into the context\n onDragPointerMove(event) {\n const\n {\n client,\n dragging\n } = this,\n {\n visibleDateRange,\n isHorizontal\n } = client,\n rtl = isHorizontal && client.rtl,\n dimension = isHorizontal ? 'X' : 'Y',\n pageScroll = globalThis[`page${dimension}Offset`],\n coord = event[`page${dimension}`] + (dragging.context?.offset || 0),\n clientRect = Rectangle.from(client.timeAxisSubGridElement, null, true),\n startCoord = clientRect.getStart(rtl, isHorizontal),\n endCoord = clientRect.getEnd(rtl, isHorizontal);\n let date = client.getDateFromCoord({ coord, local : false });\n if (rtl) {\n // If we're dragging off the start side, fix at the visible startDate\n if (coord - pageScroll > startCoord) {\n date = visibleDateRange.startDate;\n }\n // If we're dragging off the end side, fix at the visible endDate\n else if (coord < endCoord) {\n date = visibleDateRange.endDate;\n }\n }\n // If we're dragging off the start side, fix at the visible startDate\n else if (coord - pageScroll < startCoord) {\n date = visibleDateRange.startDate;\n }\n // If we're dragging off the end side, fix at the visible endDate\n else if (coord - pageScroll > endCoord) {\n date = visibleDateRange.endDate;\n }\n dragging.clientStartCoord = startCoord;\n dragging.clientEndCoord = endCoord;\n dragging.date = date;\n super.onDragPointerMove(event);\n }\n /**\n * Returns true if a resize operation is active\n * @property {Boolean}\n * @readonly\n */\n get isResizing() {\n return Boolean(this.dragging);\n }\n beforeDrag(drag) {\n const\n { client } = this,\n eventRecord = client.resolveTimeSpanRecord(drag.itemElement),\n resourceRecord = !client.isGanttBase && client.resolveResourceRecord(client.isVertical ? drag.startEvent : drag.itemElement);\n // Events not part of project are transient records in a Gantt display store and not meant to be modified\n if (this.disabled || client.readOnly || resourceRecord?.readOnly ||\n (eventRecord && (eventRecord.readOnly || !(eventRecord.project || eventRecord.isOccurrence))) ||\n super.beforeDrag(drag) === false) {\n return false;\n }\n drag.mousedownDate = drag.date = client.getDateFromCoordinate(drag.event[`page${client.isHorizontal ? 'X' : 'Y'}`], null, false);\n // trigger beforeEventResize or beforeTaskResize depending on product\n return this.triggerBeforeResize(drag);\n }\n dragStart(drag) {\n const\n me = this,\n {\n client,\n tip\n } = me,\n {\n startEvent,\n itemElement\n } = drag,\n name = client.scheduledEventName,\n eventRecord = client.resolveEventRecord(itemElement),\n {\n isBatchUpdating,\n wrapStartDate,\n wrapEndDate\n } = eventRecord,\n useEventBuffer = client.features.eventBuffer?.enabled,\n eventStartDate = isBatchUpdating ? eventRecord.get('startDate') : eventRecord.startDate,\n eventEndDate = isBatchUpdating ? eventRecord.get('endDate') : eventRecord.endDate,\n horizontal = me.dragLock === 'x',\n rtl = horizontal && client.rtl,\n draggingEnd = me.isOverEndHandle(startEvent, itemElement),\n toSet = draggingEnd ? 'endDate' : 'startDate',\n wrapToSet = !useEventBuffer ? null : draggingEnd ? 'wrapEndDate' : 'wrapStartDate',\n otherEnd = draggingEnd ? 'startDate' : 'endDate',\n setMethod = draggingEnd ? 'setEndDate' : 'setStartDate',\n setOtherMethod = draggingEnd ? 'setStartDate' : 'setEndDate',\n elRect = Rectangle.from(itemElement),\n startCoord = horizontal ? startEvent.clientX : startEvent.clientY,\n endCoord = draggingEnd ? elRect.getEnd(rtl, horizontal) : elRect.getStart(rtl, horizontal),\n context = drag.context = {\n eventRecord,\n element : itemElement,\n timespanRecord : eventRecord,\n taskRecord : eventRecord,\n owner : me,\n valid : true,\n oldValue : draggingEnd ? eventEndDate : eventStartDate,\n startDate : eventStartDate,\n endDate : eventEndDate,\n offset : useEventBuffer ? 0 : endCoord - startCoord,\n edge : horizontal ? (draggingEnd ? 'right' : 'left') : (draggingEnd ? 'bottom' : 'top'),\n finalize : me.finalize,\n event : drag.event,\n // these two are public\n originalStartDate : eventStartDate,\n originalEndDate : eventEndDate,\n wrapStartDate,\n wrapEndDate,\n draggingEnd,\n toSet,\n wrapToSet,\n otherEnd,\n setMethod,\n setOtherMethod\n };\n // The record must know that it is being resized.\n eventRecord.meta.isResizing = true;\n client.element.classList.add(...me.dragActiveCls.split(' '));\n // During this batch we want the client's UI to update itself using the proposed changes\n // Only if startDrag has not already done it\n if (!client.listenToBatchedUpdates) {\n client.beginListeningForBatchedUpdates();\n }\n // No changes must get through to data.\n // Only if startDrag has not already started the batch\n if (!isBatchUpdating) {\n me.beginEventRecordBatch(eventRecord);\n }\n // Let products do their specific stuff\n me.setupProductResizeContext(context, startEvent);\n // Trigger eventResizeStart or taskResizeStart depending on product\n // Subclasses (like EventDragCreate) won't actually fire this event.\n me.triggerEventResizeStart(`${name}ResizeStart`, {\n [`${name}Record`] : eventRecord,\n event : startEvent,\n ...me.getResizeStartParams(context)\n }, context);\n // Scheduler renders assignments, Gantt renders Tasks\n context.resizedRecord = client.resolveAssignmentRecord?.(context.element) || eventRecord;\n if (tip) {\n // Tip needs to be shown first for getTooltipTarget to be able to measure anchor size\n tip.show();\n tip.align = tipAlign[context.edge];\n tip.showBy(me.getTooltipTarget(drag));\n }\n }\n // Subclasses may override this\n triggerBeforeResize(drag) {\n const\n { client } = this,\n eventRecord = client.resolveTimeSpanRecord(drag.itemElement);\n return client.trigger(\n `before${client.capitalizedEventName}Resize`,\n {\n [`${client.scheduledEventName}Record`] : eventRecord,\n event : drag.event,\n ...this.getBeforeResizeParams({ event : drag.startEvent, element : drag.itemElement })\n }\n );\n }\n // Subclasses may override this\n triggerEventResizeStart(eventType, event, context) {\n this.client.trigger(eventType, event);\n // Hook for features that needs to react on resize start\n this.client[`after${StringHelper.capitalize(eventType)}`]?.(context, event);\n }\n triggerEventResizeEnd(eventType, event) {\n this.client.trigger(eventType, event);\n }\n triggerEventPartialResize(eventType, event) {\n // Trigger eventPartialResize or taskPartialResize depending on product\n this.client.trigger(eventType, event);\n }\n triggerBeforeEventResizeFinalize(eventType, event) {\n this.client.trigger(eventType, event);\n }\n dragEnter(drag) {\n // We only respond to our own DragContexts\n return drag.context?.owner === this;\n }\n resizeEventPartiallyInternal(eventRecord, context) {\n const\n { client } = this,\n { toSet } = context;\n if (client.features.eventBuffer?.enabled) {\n if (toSet === 'startDate') {\n const diff = context.startDate.getTime() - context.originalStartDate.getTime();\n eventRecord.wrapStartDate = new Date(context.wrapStartDate.getTime() + diff);\n }\n else if (toSet === 'endDate') {\n const diff = context.endDate.getTime() - context.originalEndDate.getTime();\n eventRecord.wrapEndDate = new Date(context.wrapEndDate.getTime() + diff);\n }\n }\n eventRecord.set(toSet, context[toSet]);\n }\n applyDateConstraints(date, eventRecord, context) {\n const\n minDate = context.dateConstraints?.start,\n maxDate = context.dateConstraints?.end;\n // Keep desired date within constraints\n if (minDate || maxDate) {\n date = DateHelper.constrain(date, minDate, maxDate);\n context.snappedDate = DateHelper.constrain(context.snappedDate, minDate, maxDate);\n }\n return date;\n }\n // Override the draggable interface so that we can update the bar while dragging outside\n // the Draggable's rootElement (by default it stops notifications when outside rootElement)\n moveDrag(drag) {\n const\n me = this,\n {\n client,\n tip\n } = me,\n horizontal = me.dragLock === 'x',\n dimension = horizontal ? 'X' : 'Y',\n name = client.scheduledEventName,\n {\n visibleDateRange,\n enableEventAnimations,\n timeAxis,\n weekStartDay\n } = client,\n rtl = horizontal && client.rtl,\n {\n resolutionUnit,\n resolutionIncrement\n } = timeAxis,\n {\n event,\n context\n } = drag,\n {\n eventRecord,\n oldValue\n } = context,\n offset = context.offset * (rtl ? -1 : 1),\n {\n isOccurrence\n } = eventRecord,\n eventStart = eventRecord.get('startDate'),\n eventEnd = eventRecord.get('endDate'),\n coord = event[`client${dimension}`] + offset,\n clientRect = Rectangle.from(client.timeAxisSubGridElement, null, true),\n startCoord = clientRect.getStart(rtl, horizontal),\n endCoord = clientRect.getEnd(rtl, horizontal);\n context.event = event;\n // If this is the last move event recycled because of a scroll, refresh the date\n if (event.isScroll) {\n drag.date = client.getDateFromCoordinate(event[`page${dimension}`] + offset, null, false);\n }\n let crossedOver, avoidedZeroSize,\n // Use the value set up in onDragPointerMove by default\n { date } = drag,\n {\n toSet,\n otherEnd,\n draggingEnd\n } = context;\n if (rtl) {\n // If we're dragging off the start side, fix at the visible startDate\n if (coord > startCoord) {\n date = drag.date = visibleDateRange.startDate;\n }\n // If we're dragging off the end side, fix at the visible endDate\n else if (coord < endCoord) {\n date = drag.date = visibleDateRange.endDate;\n }\n }\n // If we're dragging off the start side, fix at the visible startDate\n else if (coord < startCoord) {\n date = drag.date = visibleDateRange.startDate;\n }\n // If we're dragging off the end side, fix at the visible endDate\n else if (coord > endCoord) {\n date = drag.date = visibleDateRange.endDate;\n }\n // Detect crossover which some subclasses might need to process\n if (toSet === 'endDate') {\n if (date < eventStart) {\n crossedOver = -1;\n }\n }\n else {\n if (date > eventEnd) {\n crossedOver = 1;\n }\n }\n // If we dragged the dragged end over to the opposite side of the start end.\n // Some subclasses allow this and need to respond. EventDragCreate does this.\n if (crossedOver && me.onDragEndSwitch) {\n me.onDragEndSwitch(context, date, crossedOver);\n otherEnd = context.otherEnd;\n toSet = context.toSet;\n }\n if (client.snapRelativeToEventStartDate) {\n date = timeAxis.roundDate(date, oldValue);\n }\n // The displayed and eventual data value\n context.snappedDate = DateHelper.round(date, timeAxis.resolution, null, weekStartDay);\n const duration = DateHelper.diff(date, context[otherEnd], resolutionUnit) * (draggingEnd ? -1 : 1);\n // Narrower than half resolutionIncrement will abort drag creation, set flag to have UI reflect this\n if (me.isEventDragCreate) {\n context.tooNarrow = duration < resolutionIncrement / 2;\n }\n // The mousepoint date means that the duration is less than resolutionIncrement resolutionUnits.\n // Ensure that the dragged end is at least resolutionIncrement resolutionUnits from the other end.\n else if (duration < resolutionIncrement) {\n // Snap to zero if allowed\n if (me.allowResizeToZero) {\n context.snappedDate = date = context[otherEnd];\n }\n else {\n const\n sign = otherEnd === 'startDate' ? 1 : -1,\n snappedDate = timeAxis.roundDate(DateHelper.add(eventRecord.get(otherEnd), resolutionIncrement * sign, resolutionUnit));\n // Only snap if dragging bigger; multiplying by sign handles reverse drag direction (leftward)\n if ((snappedDate - oldValue) * sign < 0 || (date - oldValue) * sign > 0) {\n date = sign > 0 ? DateHelper.max(date, snappedDate) : DateHelper.min(date, snappedDate);\n context.snappedDate = snappedDate;\n }\n else {\n // Fix snappedDate to stay on original date and prevent `date` making event smaller than starting value\n date = sign > 0 ? DateHelper.max(date, oldValue) : DateHelper.min(date, oldValue);\n context.snappedDate = oldValue;\n }\n avoidedZeroSize = true;\n }\n }\n // take dateConstraints into account\n date = me.applyDateConstraints(date, eventRecord, context);\n // If the mouse move has changed the detected date\n if (!context.date || date - context.date || avoidedZeroSize) {\n context.date = date;\n // The validityFn needs to see the proposed value.\n // Consult our snap config to see if we should be dragging in snapped mode\n context[toSet] = me.showExactResizePosition || client.timeAxisViewModel.snap ? context.snappedDate : date;\n // Snapping would take it to zero size - this is not allowed in drag resizing.\n context.valid = me.allowResizeToZero || context[toSet] - context[toSet === 'startDate' ? 'endDate' : 'startDate'] !== 0;\n // If the date to push into the record is new...\n if (eventRecord.get(toSet) - context[toSet]) {\n context.valid = me.checkValidity(context, event);\n context.message = '';\n if (context.valid && typeof context.valid !== 'boolean') {\n context.message = context.valid.message;\n context.valid = context.valid.valid;\n }\n // If users returns nothing, that's interpreted as valid\n context.valid = (context.valid !== false);\n if (context.valid) {\n const partialResizeEvent = {\n [`${name}Record`] : eventRecord,\n startDate : eventStart,\n endDate : eventEnd,\n element : drag.itemElement,\n context\n };\n // Update the event we are about to fire and the context *before* we update the record\n partialResizeEvent[toSet] = context[toSet];\n // Trigger eventPartialResize or taskPartialResize depending on product\n me.triggerEventPartialResize(`${name}PartialResize`, partialResizeEvent);\n // An occurrence must have a store to announce its batched changes through.\n // They must usually never have a store - they are transient, but we\n // need to update the UI.\n if (isOccurrence) {\n eventRecord.stores = [client.eventStore];\n }\n // Update the eventRecord.\n // Use setter rather than accessor so that in a Project, the entity's\n // accessor doesn't propagate the change to the whole project.\n // Scheduler must not animate this.\n client.enableEventAnimations = false;\n this.resizeEventPartiallyInternal(eventRecord, context);\n client.enableEventAnimations = enableEventAnimations;\n if (isOccurrence) {\n eventRecord.stores = null;\n }\n }\n // Flag drag created too narrow events as invalid late, want all code above to execute for them\n // to get the proper size rendered\n if (context.tooNarrow) {\n context.valid = false;\n }\n }\n }\n if (tip) {\n // In case of edge flip (EventDragCreate), the align point may change\n tip.align = tipAlign[context.edge];\n tip.alignTo(me.getTooltipTarget(drag));\n }\n super.moveDrag(drag);\n }\n dragEnd(drag) {\n const { context } = drag;\n if (context) {\n context.event = drag.event;\n }\n if (drag.aborted) {\n context?.finalize(false);\n }\n // 062_resize.t.js specifies that if drag was not started but the mouse has moved,\n // the eventresizestart and eventresizeend must fire\n else if (!this.isEventDragCreate && !drag.started && !EventHelper.getPagePoint(drag.event).equals(EventHelper.getPagePoint(drag.startEvent))) {\n this.dragStart(drag);\n this.cleanup(drag.context, false);\n }\n }\n async dragDrop({ context, event }) {\n // Set the start/end date, whichever we were dragging\n // to the correctly rounded value before updating.\n context[context.toSet] = context.snappedDate;\n const\n {\n client\n } = this,\n {\n startDate,\n endDate\n } = context;\n let modified;\n this.tip?.hide();\n context.valid = startDate && endDate && (this.allowResizeToZero || (endDate - startDate > 0)) && // Input sanity check\n (context[context.toSet] - context.oldValue) && // Make sure dragged end changed\n context.valid !== false;\n if (context.valid) {\n // Seems to be a valid resize operation, ask outside world if anyone wants to take control over the finalizing,\n // to show a confirm dialog prior to applying the new values. Triggers beforeEventResizeFinalize or\n // beforeTaskResizeFinalize depending on product\n this.triggerBeforeEventResizeFinalize(`before${client.capitalizedEventName}ResizeFinalize`, { context, event, [`${client.scheduledEventName}Record`] : context.eventRecord });\n modified = true;\n }\n // If a handler has set the async flag, it means that they are going to finalize\n // the operation at some time in the future, so we should not call it.\n if (!context.async) {\n await context.finalize(modified);\n }\n }\n // This is called with a thisObj of the context object\n // We set \"me\" to the owner, and \"context\" to the thisObj so that it\n // reads as if it were a method of this class.\n async finalize(updateRecord) {\n const\n me = this.owner,\n context = this,\n {\n eventRecord,\n oldValue,\n toSet\n } = context,\n {\n snapRelativeToEventStartDate,\n timeAxis\n } = me.client;\n if (context.finalizing) {\n return;\n }\n context.finalizing = true;\n let wasChanged = false;\n if (updateRecord) {\n if (snapRelativeToEventStartDate) {\n context[toSet] = context.snappedDate = timeAxis.roundDate(context.date, oldValue);\n }\n // Each product updates the record differently\n wasChanged = await me.internalUpdateRecord(context, eventRecord);\n }\n else {\n // Reverts the changes, a batchedUpdate event will fire which will reset the UI\n me.cancelEventRecordBatch(eventRecord);\n // Manually trigger redraw of occurrences since they are not part of any stores\n if (eventRecord.isOccurrence) {\n eventRecord.resources.forEach(resource => me.client.repaintEventsForResource(resource));\n }\n }\n if (!me.isDestroyed) {\n me.cleanup(context, wasChanged);\n }\n }\n // This is always called on drop or abort.\n cleanup(context, changed) {\n const\n me = this,\n { client } = me,\n {\n element,\n eventRecord\n } = context,\n name = client.scheduledEventName;\n // The record must know that it is being resized.\n eventRecord.meta.isResizing = false;\n client.endListeningForBatchedUpdates();\n me.tip?.hide();\n me.unHighlightHandle(element);\n client.element.classList.remove(...me.dragActiveCls.split(' '));\n // if (dependencies) {\n // // When resizing is done and mouse is over element, we show terminals\n // if (element.matches(':hover')) {\n // dependencies.showTerminals(eventRecord, element);\n // }\n // }\n // Triggers eventResizeEnd or taskResizeEnd depending on product\n me.triggerEventResizeEnd(`${name}ResizeEnd`, {\n changed,\n [`${name}Record`] : eventRecord,\n ...me.getResizeEndParams(context)\n });\n }\n async internalUpdateRecord(context, timespanRecord) {\n const\n { client } = this,\n { generation } = timespanRecord,\n {\n toSet,\n startDate,\n endDate,\n draggingEnd\n } = context;\n // Special handling of occurrences, they need normalization since that is not handled by engine at the moment\n if (timespanRecord.isOccurrence) {\n client.endListeningForBatchedUpdates();\n // If >1 level deep, just unwind one level.\n timespanRecord[timespanRecord.batching > 1 ? 'endBatch' : 'cancelBatch']();\n timespanRecord.set(TimeSpan.prototype.inSetNormalize.call(timespanRecord, { startDate, endDate }));\n }\n else {\n // Collect any changes (except the start/end date and duration) that happened during the resize operation\n const batchChanges = Object.assign({}, timespanRecord.meta.batchChanges);\n delete batchChanges[toSet];\n delete batchChanges.duration;\n // If we have the Engine available, consult it to calculate a corrected duration.\n // Adjust the dragged date point to conform with the calculated duration.\n if (timespanRecord.isEntity) {\n // get the duration according to the Entity's rules.\n const duration = timespanRecord.run('calculateProjectedDuration', startDate, endDate);\n // Update the record to its final correct state using *batched changes*\n // These will *not* be propagated, it's just to force the dragged event bar\n // into its corrected shape before the real changes which will propagate are applied below.\n // We MUST do it like this because the final state may not be a net change if the changes\n // got rejected, and in that case, the engine will not end up firing any change events.\n timespanRecord.set({\n // Fix the dragged date point according to the Entity's rules.\n [toSet] : timespanRecord.run('calculateProjectedXDateWithDuration',\n draggingEnd ? startDate : endDate, draggingEnd, duration),\n [context.otherEnd] : context[context.otherEnd]\n });\n }\n // Quit listening for batchedUpdate *before* we cancel the batch so that the\n // change events from the revert do not update the UI.\n client.endListeningForBatchedUpdates();\n this.cancelEventRecordBatch(timespanRecord);\n // Clear estimated wrap date, exact wrap date will be calculated when referred to from renderer\n if (client.features.eventBuffer?.enabled) {\n timespanRecord[context.wrapToSet] = null;\n }\n // Really update the data after cancelling the batch\n timespanRecord[context.setMethod](context[toSet], false);\n if (Object.keys(batchChanges).length) {\n timespanRecord.set(batchChanges);\n }\n }\n // wait for project data update\n await client.project.commitAsync();\n // If the record has been changed\n return timespanRecord.generation !== generation;\n }\n onDragItemMouseMove(event) {\n if (event.pointerType !== 'touch' && !this.handleSelector) {\n this.checkResizeHandles(event);\n }\n }\n /**\n * Check if mouse is over a resize handle (virtual). If so, highlight.\n * @private\n * @param {MouseEvent} event\n */\n checkResizeHandles(event) {\n const\n me = this,\n { overItem } = me;\n // mouse over a target element and allowed to resize?\n if (overItem && !me.client.readOnly && (!me.allowResize || me.allowResize(overItem, event))) {\n const eventRecord = me.client.resolveTimeSpanRecord(overItem);\n if (eventRecord?.readOnly) {\n return;\n }\n if (me.isOverAnyHandle(event, overItem)) {\n me.highlightHandle(); // over handle\n }\n else {\n me.unHighlightHandle(); // not over handle\n }\n }\n }\n onDragItemMouseLeave(event, oldOverItem) {\n this.unHighlightHandle(oldOverItem);\n }\n /**\n * Highlights handles (applies css that changes cursor).\n * @private\n */\n highlightHandle() {\n const\n {\n overItem : item,\n client\n } = this,\n handleTargetElement = item.syncIdMap?.[client.scheduledEventName] ?? item.querySelector(client.eventInnerSelector);\n // over a handle, add cls to change cursor\n handleTargetElement.classList.add('b-resize-handle');\n item.classList.add('b-over-resize-handle');\n }\n /**\n * Unhighlight handles (removes css).\n * @private\n */\n unHighlightHandle(item = this.overItem) {\n if (item) {\n const\n me = this,\n inner = item.syncIdMap?.[me.client.scheduledEventName] ?? item.querySelector(me.client.eventInnerSelector);\n if (inner) {\n inner.classList.remove('b-resize-handle', me.resizingItemInnerCls);\n }\n item.classList.remove('b-over-resize-handle', me.draggingItemCls);\n }\n }\n isOverAnyHandle(event, target) {\n return Boolean(this.isOverStartHandle(event, target) || this.isOverEndHandle(event, target));\n }\n isOverStartHandle(event, target) {\n return Boolean(this.getHandleRect('start', event, target)?.contains(EventHelper.getPagePoint(event)));\n }\n isOverEndHandle(event, target) {\n return Boolean(this.getHandleRect('end', event, target)?.contains(EventHelper.getPagePoint(event)));\n }\n getHandleRect(side, event, eventEl) {\n if (this.overItem) {\n eventEl = event.target.closest(`.${this.client.eventCls}`) || eventEl.querySelector(`.${this.client.eventCls}`);\n if (!eventEl) {\n return;\n }\n const\n me = this,\n start = side === 'start',\n { client } = me,\n rtl = Boolean(client.rtl),\n axis = me.dragLock,\n horizontal = axis === 'x',\n dim = horizontal ? 'width' : 'height',\n handleSpec = `${horizontal ? (start && !rtl) ? 'left' : 'right' : start ? 'top' : 'bottom'}Handle`,\n { offsetWidth } = eventEl,\n timespanRecord = client.resolveTimeSpanRecord(eventEl),\n resizable = timespanRecord?.isResizable,\n eventRect = Rectangle.from(eventEl),\n result = eventRect.clone(),\n handleStyle = globalThis.getComputedStyle(eventEl, ':before'),\n // Larger draggable zones on pure touch devices with no mouse\n touchHandleSize = (!me.handleSelector && !BrowserHelper.isHoverableDevice) ? me.touchHandleSize : undefined,\n handleSize = touchHandleSize || me.handleSize || parseFloat(handleStyle[dim]),\n handleVisThresh = me.handleVisibilityThreshold || 2 * me.handleSize,\n centerGap = me.dynamicHandleSize ? me.reservedSpace / 2 : 0,\n deflateArgs = [0, 0, 0, 0];\n // To decide if we are over a valid handle, we first check disabled state\n // Then this.leftHandle/this.rightHandle/this.topHandle/this.bottomHandle\n // Then whether there's enough event bar width to accommodate separate handles\n // Then whether the event itself allows resizing at the specified side.\n if (!me.disabled && me[handleSpec] && (offsetWidth >= handleVisThresh || me.dynamicHandleSize) && (resizable === true || resizable === side)) {\n const oppositeEnd = (!horizontal && !start) || (horizontal && (rtl === start));\n if (oppositeEnd) {\n // Push handle start point to other end and clip result to other end\n result[axis] += (eventRect[dim] - handleSize);\n deflateArgs[horizontal ? 3 : 0] = eventRect[dim] / 2 + centerGap;\n }\n else {\n deflateArgs[horizontal ? 1 : 2] = eventRect[dim] / 2 + centerGap;\n }\n // Deflate the event bar rectangle to encapsulate 2px less than the side's own half\n // so that we can constrain the handle zone to be inside its own half when bar is small.\n eventRect.deflate(...deflateArgs);\n result[dim] = handleSize;\n // Constrain handle rectangles to each side so that they can never collide.\n // Each handle is constrained into its own half.\n result.constrainTo(eventRect);\n // Zero sized handles cannot be hovered\n if (result[dim]) {\n return result;\n }\n }\n }\n }\n setupDragContext(event) {\n const me = this;\n // Only start a drag if we are over a handle zone.\n if (me.overItem && me.isOverAnyHandle(event, me.overItem) && me.isElementResizable(me.overItem, event)) {\n const result = super.setupDragContext(event);\n result.scrollManager = me.client.scrollManager;\n return result;\n }\n }\n changeHandleSize() {\n VersionHelper.deprecate('Scheduler', '6.0.0', 'Handle size is from CSS');\n }\n changeTouchHandleSize() {\n VersionHelper.deprecate('Scheduler', '6.0.0', 'Handle size is from CSS');\n }\n changeTip(tip, oldTip) {\n const me = this;\n if (!me.showTooltip) {\n return null;\n }\n if (tip) {\n if (tip.isTooltip) {\n tip.owner = me;\n }\n else {\n tip = Tooltip.reconfigure(oldTip, Tooltip.mergeConfigs({\n id : me.tipId\n }, tip, {\n getHtml : me.getTipHtml.bind(me),\n owner : me.client\n }, me.tip), {\n owner : me,\n defaults : {\n type : 'tooltip'\n }\n });\n }\n tip.ion({\n innerhtmlupdate : 'updateDateIndicator',\n thisObj : me\n });\n me.clockTemplate = new ClockTemplate({\n scheduler : me.client\n });\n }\n else if (oldTip) {\n oldTip.destroy();\n me.clockTemplate?.destroy();\n }\n return tip;\n }\n //endregion\n //region Events\n isElementResizable(element, event) {\n const\n me = this,\n { client } = me,\n timespanRecord = client.resolveTimeSpanRecord(element);\n if (client.readOnly) {\n return false;\n }\n let resizable = timespanRecord?.isResizable;\n // Not resizable if the mousedown is on a resizing handle of\n // a percent bar.\n const\n handleHoldingElement = element?.syncIdMap[client.scheduledEventName] ?? element,\n handleEl = event.target.closest('[class$=\"-handle\"]');\n if (!resizable || (handleEl && handleEl !== handleHoldingElement)) {\n return false;\n }\n element = event.target.closest(me.dragSelector);\n if (!element) {\n return false;\n }\n const\n startsOutside = element.classList.contains('b-sch-event-startsoutside'),\n endsOutside = element.classList.contains('b-sch-event-endsoutside');\n if (resizable === true) {\n if (startsOutside && endsOutside) {\n return false;\n }\n else if (startsOutside) {\n resizable = 'end';\n }\n else if (endsOutside) {\n resizable = 'start';\n }\n else {\n return me.isOverStartHandle(event, element) || me.isOverEndHandle(event, element);\n }\n }\n if (\n (startsOutside && resizable === 'start') ||\n (endsOutside && resizable === 'end')\n ) {\n return false;\n }\n if (\n (me.isOverStartHandle(event, element) && resizable === 'start') ||\n (me.isOverEndHandle(event, element) && resizable === 'end')\n ) {\n return true;\n }\n return false;\n }\n updateDateIndicator() {\n const\n { clockTemplate } = this,\n {\n eventRecord,\n draggingEnd,\n snappedDate\n } = this.dragging.context,\n startDate = draggingEnd ? eventRecord.get('startDate') : snappedDate,\n endDate = draggingEnd ? snappedDate : eventRecord.get('endDate'),\n { element } = this.tip;\n clockTemplate.updateDateIndicator(element.querySelector('.b-sch-tooltip-startdate'), startDate);\n clockTemplate.updateDateIndicator(element.querySelector('.b-sch-tooltip-enddate'), endDate);\n }\n getTooltipTarget({ itemElement, context }) {\n const\n me = this,\n { rtl } = me.client,\n target = Rectangle.from(itemElement, null, true);\n if (me.dragLock === 'x') {\n // Align to the dragged edge of the proxy, and then bump right so that the anchor aligns perfectly.\n if ((!rtl && context.edge === 'right') || (rtl && context.edge === 'left')) {\n target.x = target.right - 1;\n }\n else {\n target.x -= me.tip.anchorSize[0] / 2;\n }\n target.width = me.tip.anchorSize[0] / 2;\n }\n else {\n // Align to the dragged edge of the proxy, and then bump bottom so that the anchor aligns perfectly.\n if (context.edge === 'bottom') {\n target.y = target.bottom - 1;\n }\n target.height = me.tip.anchorSize[1] / 2;\n }\n return { target };\n }\n basicValidityCheck(context, event) {\n return context.startDate &&\n (context.endDate > context.startDate || this.allowResizeToZero) &&\n this.validatorFn.call(this.validatorFnThisObj || this, context, event);\n }\n //endregion\n //region Tooltip\n getTipHtml({ tip }) {\n const\n me = this,\n {\n startDate,\n endDate,\n toSet,\n snappedDate,\n valid,\n message = '',\n timespanRecord\n } = me.dragging.context;\n // Empty string hides the tip - we get called before the Resizer, so first call will be empty\n if (!startDate || !endDate) {\n return tip.html;\n }\n // Set whichever one we are moving\n const tipData = {\n record : timespanRecord,\n valid,\n message,\n startDate,\n endDate,\n [toSet] : snappedDate\n };\n // Format the two ends. This has to be done outside of the object initializer\n // because they use properties that are only in the tipData object.\n tipData.startText = me.client.getFormattedDate(tipData.startDate);\n tipData.endText = me.client.getFormattedDate(tipData.endDate);\n tipData.startClockHtml = me.clockTemplate.template({\n date : tipData.startDate,\n text : tipData.startText,\n cls : 'b-sch-tooltip-startdate'\n });\n tipData.endClockHtml = me.clockTemplate.template({\n date : tipData.endDate,\n text : tipData.endText,\n cls : 'b-sch-tooltip-enddate'\n });\n return me.tooltipTemplate(tipData);\n }\n //endregion\n //region Product specific, may be overridden in subclasses\n beginEventRecordBatch(eventRecord) {\n eventRecord.beginBatch();\n }\n cancelEventRecordBatch(eventRecord) {\n // Reverts the changes, a batchedUpdate event will fire which will reset the UI\n eventRecord.cancelBatch();\n }\n getBeforeResizeParams(context) {\n const { client } = this;\n return {\n resourceRecord : client.resolveResourceRecord(client.isVertical ? context.event : context.element)\n };\n }\n getResizeStartParams(context) {\n return {\n resourceRecord : context.resourceRecord\n };\n }\n getResizeEndParams(context) {\n return {\n resourceRecord : context.resourceRecord,\n event : context.event\n };\n }\n setupProductResizeContext(context, event) {\n const\n { client } = this,\n { element } = context,\n eventRecord = client.resolveEventRecord(element),\n resourceRecord = client.resolveResourceRecord?.(element),\n assignmentRecord = client.resolveAssignmentRecord?.(element);\n Object.assign(context, {\n eventRecord,\n taskRecord : eventRecord,\n resourceRecord,\n assignmentRecord,\n dateConstraints : client.getDateConstraints?.(resourceRecord, eventRecord)\n });\n }\n checkValidity({ startDate, endDate, eventRecord, resourceRecord }) {\n const { client } = this;\n if (!client.allowOverlap) {\n if (eventRecord.resources.some(resource => !client.isDateRangeAvailable(startDate, endDate, eventRecord, resource))) {\n return {\n valid : false,\n message : this.L('L{EventDrag.eventOverlapsExisting}')\n };\n }\n }\n return this.basicValidityCheck(...arguments);\n }\n get tipId() {\n return `${this.client.id}-event-resize-tip`;\n }\n //endregion\n}\nEventResize._$name = 'EventResize'; GridFeatureManager.registerFeature(EventResize, true, 'Scheduler');\nGridFeatureManager.registerFeature(EventResize, false, 'ResourceHistogram');\n", "import Base from '../../../Core/Base.js';\n/**\n * @module Scheduler/feature/mixin/TaskEditStm\n */\n/**\n * Mixin adding STM transactable behavior to TaskEdit feature.\n *\n * @mixin\n */\nexport default Target => class TaskEditStm extends (Target || Base) {\n static get $name() {\n return 'TaskEditStm';\n }\n getStmCapture() {\n return {\n stmInitiallyAutoRecord : this.stmInitiallyAutoRecord,\n stmInitiallyDisabled : this.stmInitiallyDisabled,\n // this flag indicates whether the STM capture has been transferred to\n // another feature, which will be responsible for finalizing the STM transaction\n // (otherwise we'll do it ourselves)\n transferred : false\n };\n }\n applyStmCapture(stmCapture) {\n this.stmInitiallyAutoRecord = stmCapture.stmInitiallyAutoRecord;\n this.stmInitiallyDisabled = stmCapture.stmInitiallyDisabled;\n }\n captureStm(startTransaction = false) {\n const\n me = this,\n project = me.project,\n stm = project.getStm();\n if (me.hasStmCapture) {\n return;\n }\n me.hasStmCapture = true;\n me.stmInitiallyDisabled = stm.disabled;\n me.stmInitiallyAutoRecord = stm.autoRecord;\n if (me.stmInitiallyDisabled) {\n stm.enable();\n // it seems this branch has never been exercised by tests\n // but the intention is to stop the auto-recording while\n // task editor is active (all editing is one manual transaction)\n stm.autoRecord = false;\n }\n else {\n if (me.stmInitiallyAutoRecord) {\n stm.autoRecord = false;\n }\n if (stm.isRecording) {\n stm.stopTransaction();\n }\n }\n if (startTransaction) {\n this.startStmTransaction();\n }\n }\n startStmTransaction() {\n this.project.getStm().startTransaction();\n }\n commitStmTransaction() {\n const\n me = this,\n stm = me.project.getStm();\n if (!me.hasStmCapture) {\n throw new Error('Does not have STM capture, no transaction to commit');\n }\n if (stm.enabled) {\n stm.stopTransaction();\n if (me.stmInitiallyDisabled) {\n stm.resetQueue();\n }\n }\n }\n async rejectStmTransaction() {\n const\n stm = this.project.getStm(),\n { client } = this;\n if (!this.hasStmCapture) {\n throw new Error('Does not have STM capture, no transaction to reject');\n }\n if (stm.enabled) {\n if (stm.transaction?.length) {\n client.suspendRefresh();\n stm.rejectTransaction();\n await client.resumeRefresh(true);\n }\n else {\n stm.stopTransaction();\n }\n }\n }\n enableStm() {\n this.project.getStm().enable();\n }\n disableStm() {\n this.project.getStm().disable();\n }\n async freeStm(commitOrReject = null) {\n const\n me = this,\n stm = me.project.getStm(),\n {\n stmInitiallyDisabled,\n stmInitiallyAutoRecord\n } = me;\n if (!me.hasStmCapture) {\n return;\n }\n let promise;\n me.rejectingStmTransaction = true;\n if (commitOrReject === true) {\n promise = me.commitStmTransaction();\n }\n else if (commitOrReject === false) {\n // Note - we don't wait for async to complete here\n promise = me.rejectStmTransaction();\n }\n await promise;\n if (!stm.isDestroying) {\n stm.disabled = stmInitiallyDisabled;\n stm.autoRecord = stmInitiallyAutoRecord;\n }\n if (!me.isDestroying) {\n me.rejectingStmTransaction = true;\n me.hasStmCapture = false;\n }\n };\n};\n", "import Base from '../../../Core/Base.js';\n/**\n * @module Scheduler/feature/mixin/TaskEditTransactional\n */\n/**\n * Mixin adding live updates support\n *\n * @mixin\n */\nexport default Target => class TaskEditTransactional extends (Target || Base) {\n static get $name() {\n return 'TaskEditTransactional';\n }\n captureStm(force) {\n if (this.client.transactionalFeaturesEnabled) {\n super.captureStm();\n return this.startStmTransaction(force);\n }\n else {\n super.captureStm(force);\n }\n }\n freeStm(commitOrReject) {\n if (this.hasStmCapture || !this.client.transactionalFeaturesEnabled) {\n return super.freeStm(commitOrReject);\n }\n }\n async startStmTransaction(startRecordingEarly) {\n if (this.client.transactionalFeaturesEnabled) {\n await this.startFeatureTransaction(startRecordingEarly);\n }\n else {\n super.startStmTransaction();\n }\n }\n commitStmTransaction() {\n if (this.client.transactionalFeaturesEnabled) {\n return this.finishFeatureTransaction();\n }\n else {\n super.commitStmTransaction();\n }\n }\n async rejectStmTransaction() {\n if (this.client.transactionalFeaturesEnabled) {\n this.rejectFeatureTransaction();\n }\n else {\n await super.rejectStmTransaction();\n }\n }\n};\n", "import Base from '../../../Core/Base.js';\nimport AttachToProjectMixin from '../../data/mixin/AttachToProjectMixin.js';\nimport IdHelper from '../../../Core/helper/IdHelper.js';\n/**\n * @module Scheduler/feature/mixin/TransactionalFeature\n */\n/**\n * Feature defining methods to lock the view for a time of a user action\n * @internal\n * @mixin\n */\nexport default Target => class TransactionalFeature extends AttachToProjectMixin(Target || Base) {\n static $name = 'TransactionalFeature';\n //#region AttachToProjectMixin implementation\n detachFromProject(project) {\n this.rejectFeatureTransaction();\n super.detachFromProject(project);\n }\n //#endregion\n getStmCapture() {\n const result = super.getStmCapture();\n result._editorPromiseResolve = this._editorPromiseResolve;\n return result;\n }\n applyStmCapture(stmCapture) {\n super.applyStmCapture(stmCapture);\n this._editorPromiseResolve = stmCapture._editorPromiseResolve;\n }\n async startFeatureTransaction() {\n if (!this.client.transactionalFeaturesEnabled) {\n return;\n }\n const\n me = this,\n { project } = me.client,\n { stm } = project,\n // This id is used to help debugging concurrent promises\n id = me._featureTransactionId = IdHelper.generateId('featureTransaction');\n me.client.trigger?.('beforeFeatureTransactionStart', { id });\n // Await previous promise chain to resolve\n let chainResolved;\n if (me.hasStmCapture) {\n stm.startTransaction();\n }\n else {\n chainResolved = project.queue(async() => {\n // commitAsync call will lead to `refresh` event on the project\n // and consequent view refresh, which we do not need\n if (!project.isEngineReady()) {\n await project.commitAsync();\n }\n });\n }\n project.queue(() => {\n if (!me.hasStmCapture) {\n me._stmInitiallyDisabled = stm.disabled;\n me._stmInitiallyAutoRecord = stm.autoRecord;\n if (stm.isRecording) {\n stm.stopTransaction();\n }\n else if (me._stmInitiallyDisabled) {\n stm.enable();\n }\n // Disable autoRecord to avoid finishing transaction after a timeout\n stm.autoRecord = false;\n }\n if (!stm.isRecording) {\n // We need to wrap cell editing into own transaction to be able to apply user changes last\n stm.startTransaction();\n }\n me.client.trigger?.('featureTransactionStart', { id });\n // Put an empty promise to the queue to pause it\n return new Promise(resolve => me._editorPromiseResolve = resolve);\n });\n await chainResolved;\n }\n rejectFeatureTransaction() {\n const\n me = this,\n { stm } = me.client.project,\n id = me._featureTransactionId;\n if (!id || me.finishingFeatureTransaction) {\n return;\n }\n me._editorPromiseResolve?.();\n me._editorPromiseResolve = null;\n delete me._featureTransactionId;\n stm.isRecording && stm.rejectTransaction();\n if (!me.hasStmCapture && me._stmInitiallyDisabled != null) {\n stm.disabled = me._stmInitiallyDisabled;\n stm.autoRecord = me._stmInitiallyAutoRecord;\n }\n me.client.trigger('featureTransactionReject', { id });\n me.client.trigger('featureTransactionComplete', { id });\n }\n async finishFeatureTransaction(afterApplyStashCallback) {\n const\n me = this,\n { project } = me.client,\n { stm } = project,\n id = me._featureTransactionId;\n if (!id) {\n return;\n }\n me.client.trigger('featureTransactionFinalizeStart', { id });\n me.finishingFeatureTransaction = true;\n // In case there is a commit pending, we need to wait to not suspend more events than we should\n if (!project.isEngineReady()) {\n await project.commitAsync();\n }\n const\n transactionId = stm.stash(),\n {\n _stmInitiallyDisabled,\n _stmInitiallyAutoRecord\n } = me;\n me._editorPromiseResolve?.();\n me._editorPromiseResolve = null;\n return project.queue(async() => {\n stm?.applyStash(transactionId);\n await afterApplyStashCallback?.();\n await project.commitAsync?.();\n if (stm.isRecording) {\n stm.stopTransaction();\n }\n if (!me.hasStmCapture && stm && !stm.isDestroying && _stmInitiallyDisabled != null) {\n stm.disabled = _stmInitiallyDisabled;\n stm.autoRecord = _stmInitiallyAutoRecord;\n }\n if (!me.isDestroying) {\n delete me._featureTransactionId;\n me.finishingFeatureTransaction = false;\n me.client.trigger('featureTransactionFinalized', { id });\n me.client.trigger('featureTransactionComplete', { id });\n }\n });\n }\n};\n", "import EventResize from '../EventResize.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\nimport EventHelper from '../../../Core/helper/EventHelper.js';\nimport Draggable from '../../../Core/mixin/Draggable.js';\nimport TaskEditStm from '../mixin/TaskEditStm.js';\nimport TaskEditTransactional from '../mixin/TaskEditTransactional.js';\nimport TransactionalFeature from '../mixin/TransactionalFeature.js';\n/**\n * @module Scheduler/feature/base/DragCreateBase\n */\nconst getDragCreateDragDistance = function(event) {\n // Do not allow the drag to begin if the taskEdit feature (if present) is in the process\n // of canceling. We must wait for it to have cleaned up its data manipulations before\n // we can add the new, drag-created record\n if (this.source?.client.features.taskEdit?._canceling) {\n return false;\n }\n return EventHelper.getDistanceBetween(this.startEvent, event);\n};\n/**\n * Base class for EventDragCreate (Scheduler) and TaskDragCreate (Gantt) features. Contains shared code. Not to be used directly.\n *\n * @extends Scheduler/feature/EventResize\n */\nexport default class DragCreateBase extends EventResize.mixin(\n TaskEditStm,\n TransactionalFeature,\n TaskEditTransactional\n) {\n //region Config\n static configurable = {\n /**\n * true to show a time tooltip when dragging to create a new event\n * @config {Boolean}\n * @default\n */\n showTooltip : true,\n /**\n * Number of pixels the drag target must be moved before dragging is considered to have started. Defaults to 2.\n * @config {Number}\n * @default\n */\n dragTolerance : 2,\n // used by gantt to only allow one task per row\n preventMultiple : false,\n dragTouchStartDelay : 300,\n /**\n * `this` reference for the validatorFn\n * @config {Object}\n */\n validatorFnThisObj : null,\n tipTemplate : data => `\n
\n ${data.startClockHtml}\n ${data.endClockHtml}\n
${data.message}
\n
\n `,\n dragActiveCls : 'b-dragcreating'\n };\n static pluginConfig = {\n chain : ['render', 'onEventDataGenerated'],\n before : ['onElementContextMenu']\n };\n construct(scheduler, config) {\n if (config?.showTooltip === false) {\n config.tip = null;\n }\n super.construct(...arguments);\n }\n //endregion\n changeValidatorFn(validatorFn) {\n // validatorFn property is used by the EventResize base to validate each mousemove\n // We change the property name to createValidatorFn\n this.createValidatorFn = validatorFn;\n }\n render() {\n const\n me = this,\n { client } = me;\n // Set up elements and listeners\n me.dragRootElement = me.dropRootElement = client.timeAxisSubGridElement;\n // Drag only in time dimension\n me.dragLock = client.isVertical ? 'y' : 'x';\n }\n onDragEndSwitch(context) {\n const\n { client } = this,\n { enableEventAnimations } = client,\n {\n eventRecord,\n draggingEnd\n } = context,\n horizontal = this.dragLock === 'x',\n { initialDate } = this.dragging;\n // Setting the new opposite end should not animate\n client.enableEventAnimations = false;\n // Zero duration at the moment of the flip\n eventRecord.set({\n startDate : initialDate,\n endDate : initialDate\n });\n // We're switching to dragging the start\n if (draggingEnd) {\n Object.assign(context, {\n endDate : initialDate,\n toSet : 'startDate',\n otherEnd : 'endDate',\n setMethod : 'setStartDate',\n setOtherMethod : 'setEndDate',\n edge : horizontal ? 'left' : 'top'\n });\n }\n else {\n Object.assign(context, {\n startDate : initialDate,\n toSet : 'endDate',\n otherEnd : 'startDate',\n setMethod : 'setEndDate',\n setOtherMethod : 'setStartDate',\n edge : horizontal ? 'right' : 'bottom'\n });\n }\n context.draggingEnd = this.draggingEnd = !draggingEnd;\n client.enableEventAnimations = enableEventAnimations;\n }\n beforeDrag(drag) {\n const\n me = this,\n result = super.beforeDrag(drag),\n { pan, eventDragSelect } = me.client.features;\n // Superclass's handler may also veto\n if (result !== false && (\n // used by gantt to only allow one task per row\n (me.preventMultiple && !me.isRowEmpty(drag.rowRecord)) ||\n me.disabled ||\n // If Pan is enabled, it has right of way\n (pan && !pan.disabled) ||\n // If EventDragSelect is enabled, it has right of way\n (eventDragSelect && !eventDragSelect.disabled)\n )) {\n return false;\n }\n // Prevent drag select if drag-creating, could collide otherwise\n // (reset by GridSelection)\n me.client.preventDragSelect = true;\n return result;\n }\n startDrag(drag) {\n const result = super.startDrag(drag);\n // Returning false means operation is aborted.\n if (result !== false) {\n const { context } = drag;\n // Date to flip around when changing direction\n drag.initialDate = context.eventRecord.get(this.draggingEnd ? 'startDate' : 'endDate');\n this.client.trigger('dragCreateStart', {\n proxyElement : drag.element,\n eventElement : drag.element,\n eventRecord : context.eventRecord,\n resourceRecord : context.resourceRecord\n });\n // We are always dragging the exact edge of the event element.\n drag.context.offset = 0;\n drag.context.oldValue = drag.mousedownDate;\n }\n return result;\n }\n // Used by our EventResize superclass to know whether the drag point is the end or the beginning.\n isOverEndHandle() {\n return this.draggingEnd;\n }\n setupDragContext(event) {\n const { client } = this;\n // Only mousedown on an empty cell can initiate drag-create\n if (client.matchScheduleCell(event.target)) {\n const resourceRecord = client.resolveResourceRecord(event)?.$original;\n // And there must be a resource backing the cell.\n if (resourceRecord && !resourceRecord.isSpecialRow) {\n // Skip the EventResize's setupDragContext. We want the base one.\n const\n result = Draggable().prototype.setupDragContext.call(this, event),\n scrollables = [];\n if (client.isVertical) {\n scrollables.push({\n element : client.scrollable.element,\n direction : 'vertical'\n });\n }\n else {\n scrollables.push({\n element : client.timeAxisSubGrid.scrollable.element,\n direction : 'horizontal'\n });\n }\n result.scrollManager = client.scrollManager;\n result.monitoringConfig = { scrollables };\n result.resourceRecord = result.rowRecord = resourceRecord;\n // We use a special method to get the distance moved.\n // If the TaskEdit feature is still in its canceling phase, then\n // it returns false which inhibits the start of the drag-create\n // until the cancelation is complete.\n result.getDistance = getDragCreateDragDistance;\n return result;\n }\n }\n }\n async dragDrop({ context, event }) {\n // Set the start/end date, whichever we were dragging\n // to the correctly rounded value before updating.\n context[context.toSet] = context.snappedDate;\n const\n {\n client\n } = this,\n {\n startDate,\n endDate,\n eventRecord\n } = context,\n { generation } = eventRecord;\n let modified;\n this.tip?.hide();\n // Handle https://github.com/bryntum/support/issues/3210.\n // The issue arises when the mouseup arrives very quickly and the commit kicked off\n // at event add has not yet completed. If it now completes *after* we finalize\n // the drag, it will reset the event to its initial state.\n // If that commit has in fact finished, this will be a no-op\n await client.project.commitAsync();\n // If the above commit in fact reset the event back to the initial state, we have to\n // force the event rendering to bring it back to the currently known context state.\n if (eventRecord.generation !== generation) {\n context.eventRecord[context.toSet] = context.oldValue;\n context.eventRecord[context.toSet] = context[context.toSet];\n }\n context.valid = startDate && endDate && (endDate - startDate > 0) && // Input sanity check\n (context[context.toSet] - context.oldValue) && // Make sure dragged end changed\n context.valid !== false;\n if (context.valid) {\n // Seems to be a valid drag-create operation, ask outside world if anyone wants to take control over the finalizing,\n // to show a confirm dialog prior to finalizing the create.\n client.trigger('beforeDragCreateFinalize', {\n context,\n event,\n proxyElement : context.element,\n eventElement : context.element,\n eventRecord : context.eventRecord,\n resourceRecord : context.resourceRecord\n });\n modified = true;\n }\n // If a handler has set the async flag, it means that they are going to finalize\n // the operation at some time in the future, so we should not call it.\n if (!context.async) {\n await context.finalize(modified);\n }\n }\n updateDragTolerance(dragTolerance) {\n this.dragThreshold = dragTolerance;\n }\n //region Tooltip\n changeTip(tip, oldTip) {\n return super.changeTip(!tip || tip.isTooltip ? tip : ObjectHelper.assign({\n id : `${this.client.id}-drag-create-tip`\n }, tip), oldTip);\n }\n //endregion\n //region Finalize (create EventModel)\n // this method is actually called on the `context` object,\n // so `this` object inside might not be what you think (see `me = this.owner` below)\n // not clear what was the motivation for such design\n async finalize(doCreate) {\n // only call this method once, do not re-enter\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n const\n me = this.owner,\n context = this,\n completeFinalization = () => {\n if (!me.isDestroyed) {\n me.client.trigger('afterDragCreate', {\n proxyElement : context.element,\n eventElement : context.element,\n eventRecord : context.eventRecord,\n resourceRecord : context.resourceRecord\n });\n me.cleanup(context);\n }\n };\n if (doCreate) {\n // Call product specific implementation\n await me.finalizeDragCreate(context);\n completeFinalization();\n }\n // Aborting without going ahead with create - we must deassign and remove the event\n else {\n await me.cancelDragCreate(context);\n me.onAborted?.(context);\n completeFinalization();\n }\n }\n async cancelDragCreate(context) {\n }\n async finalizeDragCreate(context) {\n // EventResize base class applies final changes to the event record\n await this.internalUpdateRecord(context, context.eventRecord);\n const stmCapture = this.getStmCapture();\n this.client?.trigger('dragCreateEnd', {\n eventRecord : context.eventRecord,\n resourceRecord : context.resourceRecord,\n event : context.event,\n eventElement : context.element,\n stmCapture\n });\n // Part of the Scheduler API. Triggered by its createEvent method.\n // Auto-editing features can use this to edit new events.\n // Note that this may be destroyed by a listener of the previous event.\n this.client?.trigger('eventAutoCreated', {\n eventRecord : context.eventRecord,\n resourceRecord : context.resourceRecord\n });\n return stmCapture.transferred;\n }\n cleanup(context) {\n const\n { client } = this,\n { eventRecord } = context;\n // Base class's cleanup is not called, we have to clear this flag.\n // The isCreating flag is only set if the event is to be handed off to the\n // eventEdit feature and that feature then has responsibility for clearing it.\n eventRecord.meta.isResizing = false;\n client.endListeningForBatchedUpdates();\n this.tip?.hide();\n client.element.classList.remove(...this.dragActiveCls.split(' '));\n context.element.parentElement.classList.remove('b-sch-dragcreating');\n }\n //endregion\n //region Events\n /**\n * Prevent right click when drag creating\n * @returns {Boolean}\n * @private\n */\n onElementContextMenu() {\n if (this.proxy) {\n return false;\n }\n }\n prepareCreateContextForFinalization(createContext, event, finalize, async = false) {\n return {\n ...createContext,\n async,\n event,\n finalize\n };\n }\n // Apply drag create \"proxy\" styling\n onEventDataGenerated(renderData) {\n if (this.dragging?.context?.eventRecord === renderData.eventRecord) {\n // Allow custom styling for drag creation element\n renderData.wrapperCls['b-sch-dragcreating'] = true;\n // Styling when drag create will be aborted on drop (because it would yield zero duration)\n renderData.wrapperCls['b-too-narrow'] = this.dragging.context.tooNarrow;\n }\n }\n //endregion\n //region Product specific, implemented in subclasses\n // Empty implementation here. Only base EventResize class triggers this\n triggerBeforeResize() {}\n // Empty implementation here. Only base EventResize class triggers this\n triggerEventResizeStart() {}\n checkValidity(context, event) {\n throw new Error('Implement in subclass');\n }\n handleBeforeDragCreate(dateTime, event) {\n throw new Error('Implement in subclass');\n }\n isRowEmpty(rowRecord) {\n throw new Error('Implement in subclass');\n }\n //endregion\n}\nDragCreateBase._$name = 'DragCreateBase';", "import InstancePlugin from '../../../Core/mixin/InstancePlugin.js';\nimport DateField from '../../../Core/widget/DateField.js';\nimport DateHelper from '../../../Core/helper/DateHelper.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\nimport Config from '../../../Core/Config.js';\nimport Objects from '../../../Core/helper/util/Objects.js';\n/**\n * @module Scheduler/feature/base/EditBase\n */\nconst\n DH = DateHelper,\n scheduleFields = ['startDate', 'endDate', 'resource', 'recurrenceRule'],\n makeDate = (fields) => {\n // single field, update record directly\n if (fields.length === 1) return fields[0].value;\n // two fields, date + time\n else if (fields.length === 2) {\n const\n [date, time] = fields[0] instanceof DateField ? fields : fields.reverse(),\n dateValue = DH.parse(date.value);\n if (dateValue && time.value) {\n dateValue.setHours(\n time.value.getHours(),\n time.value.getMinutes(),\n time.value.getSeconds(),\n time.value.getMilliseconds()\n );\n }\n // Clone to not end up sharing dates\n return dateValue ? DateHelper.clone(dateValue) : null;\n }\n // shouldn't happen...\n return null;\n },\n copyTime = (dateTo, dateFrom) => {\n const d = new Date(dateTo.getTime());\n d.setHours(dateFrom.getHours(), dateFrom.getMinutes());\n return d;\n },\n adjustEndDate = (startDate, startTime, me) => {\n // The end datetime just moves in response to the changed start datetime, keeping the same duration.\n if (!me.editor.assigningValues && startDate && startTime && me.endDateField && me.endTimeField) {\n const newEndDate = DH.add(copyTime(me.startDateField.value, me.startTimeField.value), me._durationMS, 'milliseconds');\n me.endDateField.value = newEndDate;\n me.endTimeField.value = DH.clone(newEndDate);\n }\n };\n/**\n * Base class for EventEdit. Not to be used directly.\n *\n * @extends Core/mixin/InstancePlugin\n */\nexport default class EditBase extends InstancePlugin {\n //region Config\n static get configurable() {\n return {\n /**\n * True to save and close this panel if ENTER is pressed in one of the input fields inside the panel.\n * @config {Boolean}\n * @default\n * @category Editor\n */\n saveAndCloseOnEnter : true,\n triggerEvent : null,\n /**\n * This config parameter is passed to the `startDateField` and `endDateField` constructor.\n * @config {String}\n * @default\n * @category Editor widgets\n */\n dateFormat : 'L', // date format that uses browser locale\n /**\n * This config parameter is passed to the `startTimeField` and `endTimeField` constructor.\n * @config {String}\n * @default\n * @category Editor widgets\n */\n timeFormat : 'LT', // date format that uses browser locale\n /**\n * Default editor configuration, which widgets it shows etc.\n *\n * This is the entry point into configuring any aspect of the editor.\n *\n * The {@link Core.widget.Container#config-items} configuration of a Container\n * is *deeply merged* with its default `items` value. This means that you can specify\n * an `editorConfig` object which configures the editor, or widgets inside the editor:\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * eventEdit : {\n * editorConfig : {\n * autoClose : false,\n * modal : true,\n * cls : 'editor-widget-cls',\n * items : {\n * resourceField : {\n * hidden : true\n * },\n * // Add our own event owner field at the top of the form.\n * // Weight -100 will make it sort top the top.\n * ownerField : {\n * weight : -100,\n * type : 'usercombo',\n * name : 'owner',\n * label : 'Owner'\n * }\n * },\n * bbar : {\n * items : {\n * deleteButton : false\n * }\n * }\n * }\n * }\n * }\n * });\n * ```\n * @config {PopupConfig}\n * @category Editor\n */\n editorConfig : null,\n /**\n * An object to merge with the provided items config of the editor to override the\n * configuration of provided fields, or add new fields.\n *\n * To remove existing items, set corresponding keys to `null`:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * eventEdit : {\n * items : {\n * // Merged with provided config of the resource field\n * resourceField : {\n * label : 'Calendar'\n * },\n * recurrenceCombo : null,\n * owner : {\n * weight : -100, // Will sort above system-supplied fields which are weight 0\n * type : 'usercombo',\n * name : 'owner',\n * label : 'Owner'\n * }\n * }\n * }\n * }\n * });\n *```\n *\n * The provided fields are called\n * - `nameField`\n * - `resourceField`\n * - `startDateField`\n * - `startTimeField`\n * - `endDateField`\n * - `endTimeField`\n * - `recurrenceCombo`\n * - `editRecurrenceButton`\n * @config {Object}\n * @category Editor widgets\n */\n items : null,\n /**\n * The week start day used in all date fields of the feature editor form by default.\n * 0 means Sunday, 6 means Saturday.\n * Defaults to the locale's week start day.\n * @config {Number}\n */\n weekStartDay : null\n };\n }\n //endregion\n //region Init & destroy\n construct(client, config) {\n const me = this;\n client.eventEdit = me;\n super.construct(client, ObjectHelper.assign({\n weekStartDay : client.weekStartDay\n }, config));\n me.clientListenersDetacher = client.ion({\n [me.triggerEvent] : 'onActivateEditor',\n dragCreateEnd : 'onDragCreateEnd',\n // Not fired at the Scheduler level.\n // Calendar, which inherits this, implements this event.\n eventAutoCreated : 'onEventAutoCreated',\n thisObj : me\n });\n }\n doDestroy() {\n this.clientListenersDetacher();\n this._editor?.destroy();\n super.doDestroy();\n }\n //endregion\n //region Editing\n // Not implemented at this level.\n // Scheduler Editing relies on being called at point of event creation.\n onEventAutoCreated() {}\n changeEditorConfig(editorConfig) {\n const { items } = this;\n // Merge items which is an Object with the default editorConfig's items\n if (items) {\n editorConfig = Objects.clone(editorConfig);\n editorConfig.items = Config.merge(items, editorConfig.items);\n }\n return editorConfig;\n }\n changeItems(items) {\n this.cleanItemsConfig(items);\n return items;\n }\n // Remove any items configured as === true which just means default config options\n cleanItemsConfig(items) {\n for (const ref in items) {\n const itemCfg = items[ref];\n if (itemCfg === true) {\n delete items[ref];\n }\n else if (itemCfg?.items) {\n this.cleanItemsConfig(itemCfg.items);\n }\n }\n }\n onDatesChange({ value, source }) {\n const\n me = this;\n if ((source === me.endDateField || source === me.endTimeField) && me.startDateField) {\n const\n newEndDate = me.endTimeField?.value && me.endDateField?.value ? copyTime(me.endDateField.value, me.endTimeField.value) : me.endDateField?.value,\n newStartDate = me.startTimeField?.value && me.startDateField?.value ? copyTime(me.startDateField.value, me.startTimeField.value) : me.startDateField?.value;\n if (newEndDate && newStartDate) {\n me._durationMS = newEndDate - newStartDate;\n }\n }\n // End date can never be less than start date\n if (me.startDateField && me.endDateField) {\n me.endDateField.min = me.startDateField.value;\n }\n if (me.endTimeField) {\n // If the event starts and ends on the same day, the time fields need\n // to have their min and max set against each other.\n if (DH.isEqual(DH.clearTime(me.startDateField?.value), DH.clearTime(me.endDateField?.value))) {\n me.endTimeField.min = me.startTimeField.value;\n }\n else {\n me.endTimeField.min = null;\n }\n }\n switch (source.ref) {\n case 'startDateField':\n me.startTimeField?.value && adjustEndDate(value, me.startTimeField.value, me);\n break;\n case 'startTimeField':\n me.startDateField?.value && adjustEndDate(me.startDateField.value, value, me);\n break;\n }\n }\n //endregion\n //region Save\n async save() {\n throw new Error('Implement in subclass');\n }\n get values() {\n const\n me = this,\n { editor } = me,\n startFields = [],\n endFields = [],\n { values } = editor;\n // The standard values getter will produce (almost) what we want, however, there are some special fields that\n // we need to take over. Remove those fields:\n scheduleFields.forEach(f => delete values[f]);\n editor.eachWidget(widget => {\n const { name } = widget;\n // If the widget is part of the recurrence editor, we don't gather it.\n if (!name || widget.hidden || widget.up(w => w === me.recurrenceEditor)) {\n delete values[name];\n return;\n }\n switch (name) {\n case 'startDate':\n startFields.push(widget);\n break;\n case 'endDate':\n endFields.push(widget);\n break;\n case 'resource':\n values[name] = widget.record;\n break;\n case 'recurrenceRule':\n // If recurrence set to null, completely clear the recurrenceRule.\n // Otherwise it will still be perceived as recurring with the rule 'FREQ=none'\n values[name] = editor.widgetMap.recurrenceCombo?.value === 'none' ? '' : widget.value;\n break;\n // Ignore other widgets and allow the standard values getter to provide them:\n // default:\n // values[name] = widget.value;\n }\n }, true);\n // if is changing from not allDay to allDay should consider time fields to not change them on makeDate\n if (values.allDay && !me.eventRecord.allDay) {\n startFields.push(me.startTimeField);\n endFields.push(me.endTimeField);\n }\n // Handle fields being configured away\n if (startFields.length) {\n values.startDate = makeDate(startFields);\n }\n if (endFields.length) {\n values.endDate = makeDate(endFields);\n }\n // Since there is no duration field in the editor,\n // we don't need to recalculate duration value on each date change.\n // It's enough to return correct duration value in `values`,\n // so the record will get updated with the correct data.\n if (('startDate' in values) && ('endDate' in values)) {\n values.duration = DH.diff(values.startDate, values.endDate, me.editor.record.durationUnit, true);\n }\n return values;\n }\n /**\n * Template method, intended to be overridden. Called before the event record has been updated.\n * @param {Scheduler.model.EventModel} eventRecord The event record\n *\n **/\n onBeforeSave(eventRecord) {}\n /**\n * Template method, intended to be overridden. Called after the event record has been updated.\n * @param {Scheduler.model.EventModel} eventRecord The event record\n *\n **/\n onAfterSave(eventRecord) {}\n /**\n * Updates record being edited with values from the editor\n * @private\n */\n updateRecord(record) {\n const { values } = this;\n // Clean resourceId / resources out of values when using assignment store, it will handle the assignment\n if (this.assignmentStore) {\n delete values.resource;\n }\n this._durationMS = DateHelper.asMilliseconds(values.duration ?? record.duration, record.durationUnit);\n return record.set(values);\n }\n //endregion\n //region Events\n onBeforeEditorShow() {\n const\n { eventRecord, editor } = this.editingContext,\n { nameField } = editor.widgetMap;\n // Editing new event. Make sure user doesn't have to clear the input field.\n // Record field value still should be there because a rendered event block\n // looks bad with no text in it.\n // nameField may have been configured away.\n if (nameField && eventRecord.isCreating) {\n // Avoid initial invalid because required state.\n editor.assigningValues = true;\n nameField.value = '';\n editor.assigningValues = false;\n // Show new event text as a placeholder\n nameField._configuredPlaceholder = nameField.placeholder;\n nameField.placeholder = eventRecord.name;\n }\n }\n resetEditingContext() {\n const me = this;\n if (!me.editingContext) {\n return;\n }\n const\n { client } = me,\n { editor, eventRecord } = me.editingContext,\n { eventStore } = client,\n { nameField } = editor.widgetMap;\n // This will remove the record from the store, *and* from the added bag, so no sync will take place.\n if (eventRecord.isCreating) {\n // Ensure that during the engine's async processing of the remove, the element is non-interactive.\n // Mousedown on the just-created element itself passes through here, and the immediate mouseup\n // after that instigates a click which will find no corresponding event.\n if (client.isTimelineBase) {\n me.editingContext.eventElement?.closest('[data-event-id]').classList.add('b-released');\n }\n eventStore.remove(eventRecord);\n // Clear isCreating *after* removal.\n // Store doesn't register as a removed record if isCreating is set\n eventRecord.isCreating = false;\n }\n // Revert any placeholder that we may have set\n // nameField may have been configured away.\n if (nameField) {\n nameField.placeholder = nameField._configuredPlaceholder;\n }\n client.element.classList.remove('b-eventeditor-editing');\n // Reset context\n me.targetEventElement = me.editingContext = editor._record = null;\n }\n onPopupKeyDown({ event }) {\n const me = this;\n if (!me.readOnly && event.key === 'Enter' && me.saveAndCloseOnEnter && event.target.tagName.toLowerCase() === 'input') {\n // Need to prevent this key events from being fired on whatever receives focus after the editor is hidden\n event.preventDefault();\n // If enter key was hit in an input element of a start field, need to adjust end date fields (the same way as if #onDatesChange handler was called)\n if (event.target.name === 'startDate') {\n me.startTimeField && adjustEndDate(me.startDateField.value, me.startTimeField.value, me);\n }\n me.onSaveClick();\n }\n }\n async finalizeStmCapture(saved) {\n }\n async onSaveClick() {\n this.editor.focus();\n this.isFinalizingEventSave = true;\n const saved = await this.save();\n this.isFinalizingEventSave = false;\n if (saved) {\n await this.finalizeStmCapture(false);\n this.editor.close();\n /**\n * Fires on the owning Scheduler after editor is closed by any action - save, delete or cancel\n * @event afterEventEdit\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The scheduler\n */\n this.client.trigger('afterEventEdit');\n }\n return saved;\n }\n async onDeleteClick() {\n // `deleteEvent` call actually additionally closes the editor for some reason\n // see the comment for `editor.revertFocus();` call in EventEdit.js feature\n // that triggers `resetEditingContext` in which by default we assume canceling flow\n // so we need to detect that context is being reset for delete action somehow\n this.isDeletingEvent = true;\n const removed = await this.deleteEvent();\n this.isDeletingEvent = false;\n if (removed) {\n await this.finalizeStmCapture(false);\n const { editor } = this;\n // We expect deleteEvent will trigger close if autoClose is true and focus has moved out,\n // otherwise need to call it manually\n if (!editor.autoClose || editor.containsFocus) {\n editor.close();\n }\n this.client.trigger('afterEventEdit');\n }\n }\n async onCancelClick() {\n this.isCancelingEdit = true;\n this.editor.close();\n this.isCancelingEdit = false;\n if (this.hasStmCapture) {\n await this.finalizeStmCapture(true);\n }\n this.client.trigger('afterEventEdit');\n }\n //endregion\n}\nEditBase._$name = 'EditBase';", "import InstancePlugin from '../../../Core/mixin/InstancePlugin.js';\nimport AttachToProjectMixin from '../../data/mixin/AttachToProjectMixin.js';\nimport StringHelper from '../../../Core/helper/StringHelper.js';\nimport EventHelper from '../../../Core/helper/EventHelper.js';\n/**\n * @module Scheduler/feature/base/ResourceTimeRangesBase\n */\n/**\n * Abstract base class for ResourceTimeRanges and ResourceNonWorkingTime features.\n * You should not use this class directly.\n *\n * @extends Core/mixin/InstancePlugin\n * @abstract\n */\nexport default class ResourceTimeRangesBase extends InstancePlugin.mixin(AttachToProjectMixin) {\n //region Config\n static configurable = {\n /**\n * Specify value to use for the tabIndex attribute of range elements\n * @config {Number}\n * @category Misc\n */\n tabIndex : null,\n entityName : 'resourceTimeRange'\n };\n static get pluginConfig() {\n return {\n chain : ['getEventsToRender', 'onEventDataGenerated', 'noFeatureElementsInAxis'],\n override : ['matchScheduleCell', 'resolveResourceRecord']\n };\n }\n // Let Scheduler know if we have ResourceTimeRanges in view or not\n noFeatureElementsInAxis() {\n const { timeAxis } = this.client;\n return !this.needsRefresh && this.store && !this.store.storage.values.some(t => timeAxis.isTimeSpanInAxis(t));\n }\n //endregion\n //region Init\n doDisable(disable) {\n if (this.client.isPainted) {\n this.client.refresh();\n }\n super.doDisable(disable);\n }\n updateTabIndex() {\n if (!this.isConfiguring) {\n this.client.refresh();\n }\n }\n //endregion\n getEventsToRender(resource, events) {\n throw new Error('Implement in subclass');\n }\n // Called for each event during render, allows manipulation of render data. Adjust any resource time ranges\n // (chained function from Scheduler)\n onEventDataGenerated(renderData) {\n const\n me = this,\n { client } = me,\n { eventRecord, iconCls } = renderData;\n if (me.shouldInclude(eventRecord)) {\n if (client.isVertical) {\n renderData.width = client.getResourceWidth(renderData.resourceRecord);\n }\n else {\n renderData.top = 0;\n }\n // Flag that we should fill entire row/col\n renderData.fillSize = true;\n // Add our own cls\n renderData.wrapperCls['b-sch-resourcetimerange'] = 1;\n if (me.rangeCls) {\n renderData.wrapperCls[me.rangeCls] = 1;\n }\n renderData.wrapperCls[`b-sch-color-${eventRecord.timeRangeColor}`] = eventRecord.timeRangeColor;\n me.renderContent(eventRecord, renderData);\n renderData.children.push(renderData.eventContent);\n // Allow configuring tabIndex\n renderData.tabIndex = me.tabIndex != null ? String(me.tabIndex) : null;\n // Add icon\n if (iconCls?.length > 0) {\n renderData.children.unshift({\n tag : 'i',\n className : iconCls.toString()\n });\n }\n // Event data for DOMSync comparison\n renderData.eventId = me.generateElementId(eventRecord);\n }\n }\n renderContent(eventRecord, renderData) {\n renderData.eventContent.text = eventRecord.name;\n }\n /**\n * Generates ID from the passed time range record\n * @param {Scheduler.model.TimeSpan} record\n * @returns {String} Generated ID for the DOM element\n * @internal\n */\n generateElementId(record) {\n return record.domId;\n }\n resolveResourceTimeRangeRecord(rangeElement) {\n return rangeElement?.closest(`.${this.rangeCls}`)?.elementData.eventRecord;\n }\n getElementFromResourceTimeRangeRecord(record) {\n // return this.client.foregroundCanvas.querySelector(`[data-event-id=\"${record.domId}\"]`);\n return this.client.foregroundCanvas.syncIdMap[record.domId];\n }\n resolveResourceRecord(event) {\n const record = this.overridden.resolveResourceRecord(...arguments);\n return record || this.resolveResourceTimeRangeRecord(event.target || event)?.resource;\n }\n shouldInclude(eventRecord) {\n throw new Error('Implement in subclass');\n }\n // Called when a ResourceTimeRangeModel is manipulated, relays to Scheduler#onInternalEventStoreChange which updates to UI\n onStoreChange(event) {\n // Edge case for scheduler not using any events, it has to refresh anyway to get rid of ResourceTimeRanges\n if (event.action === 'removeall' || event.action === 'dataset') {\n this.needsRefresh = true;\n }\n this.client.onInternalEventStoreChange(event);\n this.needsRefresh = false;\n }\n // Override to let scheduler find the time cell from a resource time range element\n matchScheduleCell(target) {\n let cell = this.overridden.matchScheduleCell(target);\n if (!cell && this.enableMouseEvents) {\n const\n { client } = this,\n rangeElement = target.closest(`.${this.rangeCls}`);\n cell = rangeElement && client.getCell({\n record : client.isHorizontal ? rangeElement.elementData.resource : client.store.first,\n column : client.timeAxisColumn\n });\n }\n return cell;\n }\n handleRangeMouseEvent(domEvent) {\n const\n me = this,\n rangeElement = domEvent.target.closest(`.${me.rangeCls}`);\n if (rangeElement) {\n const\n eventName = EventHelper.eventNameMap[domEvent.type] ?? StringHelper.capitalize(domEvent.type),\n resourceTimeRangeRecord = me.resolveResourceTimeRangeRecord(rangeElement);\n me.client.trigger(me.entityName + eventName, {\n feature : me,\n [`${me.entityName}Record`] : resourceTimeRangeRecord,\n resourceRecord : me.client.resourceStore.getById(resourceTimeRangeRecord.resourceId),\n domEvent\n });\n }\n }\n updateEnableMouseEvents(enable) {\n const\n me = this,\n { client } = me;\n me.mouseEventsDetacher?.();\n me.mouseEventsDetacher = null;\n if (enable) {\n function attachMouseEvents() {\n me.mouseEventsDetacher = EventHelper.on({\n element : client.foregroundCanvas,\n delegate : `.${me.rangeCls}`,\n mousedown : 'handleRangeMouseEvent',\n mouseup : 'handleRangeMouseEvent',\n click : 'handleRangeMouseEvent',\n dblclick : 'handleRangeMouseEvent',\n contextmenu : 'handleRangeMouseEvent',\n mouseover : 'handleRangeMouseEvent',\n mouseout : 'handleRangeMouseEvent',\n thisObj : me\n });\n }\n client.whenVisible(attachMouseEvents);\n }\n client.element.classList.toggle('b-interactive-resourcetimeranges', Boolean(enable));\n }\n}\n// No feature based styling needed, do not add a cls to Scheduler\nResourceTimeRangesBase.featureClass = '';\nResourceTimeRangesBase._$name = 'ResourceTimeRangesBase';", "import ContextMenuBase from '../../../Core/feature/base/ContextMenuBase.js';\n/**\n * @module Scheduler/feature/base/TimeSpanMenuBase\n */\n/**\n * Abstract base class used by other context menu features which show the context menu for TimeAxis.\n * Using this class you can make sure the menu expects the target to disappear,\n * since it can be scroll out of the scheduling zone.\n *\n * Features that extend this class are:\n * * {@link Scheduler/feature/EventMenu}\n * * {@link Scheduler/feature/ScheduleMenu}\n * * {@link Scheduler/feature/TimeAxisHeaderMenu}\n *\n * @extends Core/feature/base/ContextMenuBase\n * @abstract\n */\nexport default class TimeSpanMenuBase extends ContextMenuBase {\n}\nTimeSpanMenuBase._$name = 'TimeSpanMenuBase';", "import InstancePlugin from '../../../Core/mixin/InstancePlugin.js';\nimport Tooltip from '../../../Core/widget/Tooltip.js';\nimport ClockTemplate from '../../tooltip/ClockTemplate.js';\n/**\n * @module Scheduler/feature/base/TooltipBase\n */\n/**\n * Base class for `EventTooltip` (Scheduler) and `TaskTooltip` (Gantt) features. Contains shared code. Not to be used directly.\n *\n * @extends Core/mixin/InstancePlugin\n * @extendsconfigs Core/widget/Tooltip\n */\nexport default class TooltipBase extends InstancePlugin {\n //region Config\n static get defaultConfig() {\n return {\n /**\n * Specify true to have tooltip updated when mouse moves, if you for example want to display date at mouse\n * position.\n * @config {Boolean}\n * @default\n * @category Misc\n */\n autoUpdate : false,\n /**\n * The amount of time to hover before showing\n * @config {Number}\n * @default\n */\n hoverDelay : 250,\n /**\n * The time (in milliseconds) for which the Tooltip remains visible when the mouse leaves the target.\n *\n * May be configured as `false` to persist visible after the mouse exits the target element. Configure it\n * as 0 to always retrigger `hoverDelay` even when moving mouse inside `fromElement`\n * @config {Number}\n * @default\n */\n hideDelay : 100,\n template : null,\n cls : null,\n align : {\n align : 'b-t'\n },\n clockTemplate : null,\n // Set to true to update tooltip contents if record changes while tip is open\n monitorRecordUpdate : null,\n testConfig : {\n hoverDelay : 0\n }\n };\n }\n // Plugin configuration. This plugin chains some of the functions in Grid.\n static get pluginConfig() {\n return {\n chain : ['onInternalPaint']\n };\n }\n //endregion\n //region Events\n /**\n * Triggered before a tooltip is shown. Return `false` to prevent the action.\n * @preventable\n * @event beforeShow\n * @param {Core.widget.Tooltip} source The tooltip being shown.\n * @param {Scheduler.model.EventModel} source.eventRecord The event record.\n */\n /**\n * Triggered after a tooltip is shown.\n * @event show\n * @param {Core.widget.Tooltip} source The tooltip.\n * @param {Scheduler.model.EventModel} source.eventRecord The event record.\n */\n //endregion\n //region Init\n construct(client, config) {\n const me = this;\n // process initial config into an actual config object\n config = me.processConfig(config);\n super.construct(client, config);\n // Default triggering selector is the client's inner element selector\n if (!me.forSelector) {\n me.forSelector = `${client.eventInnerSelector}:not(.b-dragproxy,.b-iscreating)`;\n }\n me.clockTemplate = new ClockTemplate({\n scheduler : client\n });\n client.ion({\n [`before${client.scheduledEventName}drag`] : () => {\n // Using {} on purpose to not return the promise\n me.tooltip?.hide();\n }\n });\n }\n // TooltipBase feature handles special config cases, where user can supply a function to use as template\n // instead of a normal config object\n processConfig(config) {\n if (typeof config === 'function') {\n return {\n template : config\n };\n }\n return config;\n }\n // override setConfig to process config before applying it (used mainly from ReactScheduler)\n setConfig(config) {\n super.setConfig(this.processConfig(config));\n }\n doDestroy() {\n this.destroyProperties('clockTemplate', 'tooltip');\n super.doDestroy();\n }\n doDisable(disable) {\n if (this.tooltip) {\n this.tooltip.disabled = disable;\n }\n super.doDisable(disable);\n }\n //endregion\n onInternalPaint({ firstPaint }) {\n if (firstPaint) {\n const\n me = this,\n { client } = me,\n ignoreSelector = `:not(${[\n '.b-dragselecting',\n '.b-eventeditor-editing',\n '.b-taskeditor-editing',\n '.b-resizing-event',\n '.b-task-percent-bar-resizing-task',\n '.b-dragcreating',\n `.b-dragging-${client.scheduledEventName}`,\n '.b-creating-dependency',\n '.b-dragproxy'\n ].join()})`;\n me.tooltip?.destroy();\n /**\n * A reference to the tooltip instance, which will have a special `eventRecord` property that\n * you can use to get data from the contextual event record to which this tooltip is related.\n * @member {Core.widget.Tooltip} tooltip\n * @readonly\n * @category Misc\n */\n const tip = me.tooltip = new Tooltip({\n axisLock : 'flexible',\n id : me.tipId || `${me.client.id}-event-tip`,\n cls : me.tipCls,\n forSelector : `.b-timelinebase${ignoreSelector} .b-grid-body-container:not(.b-scrolling) ${me.forSelector}`,\n scrollAction : 'realign',\n forElement : client.timeAxisSubGridElement,\n showOnHover : true,\n anchorToTarget : true,\n getHtml : me.getTipHtml.bind(me),\n disabled : me.disabled,\n // on Core/mixin/Events constructor, me.config.listeners is deleted and attributed its value to me.configuredListeners\n // to then on processConfiguredListeners it set me.listeners to our TooltipBase\n // but since we need our initial config.listeners to set to our internal tooltip, we leave processConfiguredListeners empty\n // to avoid lost our listeners to apply for our internal tooltip here and force our feature has all Tooltip events firing\n ...me.config,\n internalListeners : me.configuredListeners\n });\n tip.ion({\n innerhtmlupdate : 'updateDateIndicator',\n overtarget : 'onOverNewTarget',\n show : 'onTipShow',\n hide : 'onTipHide',\n thisObj : me\n });\n // Once instantiated, any Tooltip configs are relayed through the feature directly to the tip\n Object.keys(tip.$meta.configs).forEach(name => {\n Object.defineProperty(this, name, {\n set : v => tip[name] = v,\n get : () => tip[name]\n });\n });\n }\n }\n //region Listeners\n // leave configuredListeners alone until render time at which they are used on the tooltip\n processConfiguredListeners() {}\n addListener(...args) {\n const\n // Call super method to handle enable/disable feature events\n defaultDetacher = super.addListener(...args),\n // Add listener to the `tooltip` instance\n tooltipDetacher = this.tooltip?.addListener(...args);\n if (defaultDetacher || tooltipDetacher) {\n return () => {\n defaultDetacher?.();\n tooltipDetacher?.();\n };\n }\n }\n removeListener(...args) {\n super.removeListener(...args);\n // Remove listener from the `tooltip` instance\n this.tooltip?.removeListener(...args);\n }\n //endregion\n updateDateIndicator() {\n const\n me = this,\n tip = me.tooltip,\n endDateElement = tip.element.querySelector('.b-sch-tooltip-enddate');\n if (!me.record) {\n return;\n }\n me.clockTemplate.updateDateIndicator(tip.element, me.record.startDate);\n endDateElement && me.clockTemplate.updateDateIndicator(endDateElement, me.record.endDate);\n }\n resolveTimeSpanRecord(forElement) {\n return this.client.resolveTimeSpanRecord(forElement);\n }\n getTipHtml({ tip, activeTarget }) {\n const\n me = this,\n { client } = me,\n recordProp = me.recordType || `${client.scheduledEventName}Record`,\n timeSpanRecord = me.resolveTimeSpanRecord(activeTarget);\n // If user has mouseovered a fading away element of a deleted event,\n // an event record will not be found. In this case the tip must hide.\n // Instance of check is to not display while propagating\n if (timeSpanRecord?.startDate instanceof Date) {\n const\n { startDate, endDate } = timeSpanRecord,\n startText = client.getFormattedDate(startDate),\n endDateValue = client.getDisplayEndDate(endDate, startDate),\n endText = client.getFormattedDate(endDateValue);\n tip.eventRecord = timeSpanRecord;\n return me.template({\n tip,\n // eventRecord for Scheduler, taskRecord for Gantt\n [`${recordProp}`] : timeSpanRecord,\n startDate,\n endDate,\n startText,\n endText,\n startClockHtml : me.clockTemplate.template({\n date : startDate,\n text : startText,\n cls : 'b-sch-tooltip-startdate'\n }),\n endClockHtml : timeSpanRecord.isMilestone ? '' : me.clockTemplate.template({\n date : endDateValue || '',\n text : endText || '',\n cls : 'b-sch-tooltip-enddate'\n })\n });\n }\n else {\n tip.hide();\n return '';\n }\n }\n get record() {\n return this.tooltip.eventRecord;\n }\n onTipShow() {\n const me = this;\n if (me.monitorRecordUpdate && !me.updateListener) {\n me.updateListener = me.client.eventStore.ion({\n change : me.onRecordUpdate,\n buffer : 300,\n thisObj : me\n });\n }\n }\n onTipHide() {\n // To not retain full project when changing project\n this.tooltip.eventRecord = null;\n this.updateListener?.();\n this.updateListener = null;\n }\n onOverNewTarget({ newTarget }) {\n const { tooltip } = this;\n if (tooltip.isVisible) {\n if (this.client.timeAxisSubGrid.scrolling || this.client.scrolling) {\n tooltip.hide(false);\n }\n else {\n tooltip.eventRecord = this.resolveTimeSpanRecord(newTarget);\n }\n }\n }\n onRecordUpdate({ record }) {\n const { tooltip } = this;\n // Make sure the record we are showing the tip for is still relevant\n // If the change moved the element out from under the mouse, we will be hidden.\n if (tooltip?.isVisible && record === this.record) {\n tooltip.updateContent();\n // If we were aligning to the event bar, realign to it.\n if (tooltip.lastAlignSpec.aligningToElement) {\n tooltip.realign();\n }\n // The pointer is still over the target (otherwise tooltip would be hidden)\n // So invoke the tooltip's positioning\n else {\n tooltip.internalOnPointerOver(this.client.lastPointerEvent);\n }\n }\n }\n}\nTooltipBase._$name = 'TooltipBase';", "import DragHelper from '../../Core/helper/DragHelper.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport DomSync from '../../Core/helper/DomSync.js';\nimport EventHelper from '../../Core/helper/EventHelper.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport ResizeHelper from '../../Core/helper/ResizeHelper.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\nimport Delayable from '../../Core/mixin/Delayable.js';\nimport InstancePlugin from '../../Core/mixin/InstancePlugin.js';\nimport Rectangle from '../../Core/helper/util/Rectangle.js';\nimport Tooltip from '../../Core/widget/Tooltip.js';\nimport ClockTemplate from '../tooltip/ClockTemplate.js';\n/**\n * @module Scheduler/feature/AbstractTimeRanges\n */\n/**\n * Abstract base class, you should not use this class directly.\n * @abstract\n * @mixes Core/mixin/Delayable\n * @extends Core/mixin/InstancePlugin\n */\nexport default class AbstractTimeRanges extends InstancePlugin.mixin(Delayable) {\n //region Config\n /**\n * Fired on the owning Scheduler or Gantt widget when a click happens on a time range header element\n * @event timeRangeHeaderClick\n * @on-owner\n * @param {Scheduler.view.Scheduler} source Scheduler instance\n * @param {Scheduler.model.TimeSpan} timeRangeRecord The record\n * @param {MouseEvent} event DEPRECATED 5.3.0 Use `domEvent` instead\n * @param {MouseEvent} domEvent Browser event\n */\n /**\n * Fired on the owning Scheduler or Gantt widget when a double click happens on a time range header element\n * @event timeRangeHeaderDblClick\n * @on-owner\n * @param {Scheduler.view.Scheduler} source Scheduler instance\n * @param {Scheduler.model.TimeSpan} timeRangeRecord The record\n * @param {MouseEvent} event DEPRECATED 5.3.0 Use `domEvent` instead\n * @param {MouseEvent} domEvent Browser event\n */\n /**\n * Fired on the owning Scheduler or Gantt widget when a right click happens on a time range header element\n * @event timeRangeHeaderContextMenu\n * @on-owner\n * @param {Scheduler.view.Scheduler} source Scheduler instance\n * @param {Scheduler.model.TimeSpan} timeRangeRecord The record\n * @param {MouseEvent} event DEPRECATED 5.3.0 Use `domEvent` instead\n * @param {MouseEvent} domEvent Browser event\n */\n static get defaultConfig() {\n return {\n // CSS class to apply to range elements\n rangeCls : 'b-sch-range',\n // CSS class to apply to line elements (0-duration time range)\n lineCls : 'b-sch-line',\n /**\n * Set to `true` to enable dragging and resizing of range elements in the header. Only relevant when\n * {@link #config-showHeaderElements} is `true`.\n * @config {Boolean}\n * @default\n * @category Common\n */\n enableResizing : false,\n /**\n * A Boolean specifying whether to show tooltip while resizing range elements, or a\n * {@link Core.widget.Tooltip} config object which is applied to the tooltip\n * @config {Boolean|TooltipConfig}\n * @default\n * @category Common\n */\n showTooltip : true,\n /**\n * The Tooltip instance shown when hovering a TimeRange header element\n * @member {Core.widget.Tooltip} hoverTooltip\n * @readonly\n */\n /**\n * A {@link Core.widget.Tooltip} config object which is applied to the tooltip shown when hovering a\n * TimeRange header element\n * @config {TooltipConfig}\n * @category Common\n */\n hoverTooltip : null,\n /**\n * Template used to generate the tooltip contents when hovering a time range header element.\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * timeRanges : {\n * tooltipTemplate({ timeRange }) {\n * return `${timeRange.name}`\n * }\n * }\n * }\n * });\n * ```\n *\n * @config {Function} tooltipTemplate\n * @param {Object} data Tooltip data\n * @param {Scheduler.model.TimeSpan} data.timeRange\n * @param {String} data.startClockHtml Predefined HTML to show the start time\n * @param {String} data.endClockHtml Predefined HTML to show the end time\n * @returns {String} String representing the HTML markup\n * @category Common\n */\n tooltipTemplate : null,\n dragTipTemplate : data => `\n
\n
${StringHelper.encodeHtml(data.name) || ''}
\n ${data.startClockHtml}\n ${data.endClockHtml || ''}\n
\n `,\n baseCls : 'b-sch-timerange',\n /**\n * Function used to generate the HTML content for a time range header element.\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * timeRanges : {\n * headerRenderer({ timeRange }) {\n * return `${timeRange.name}`\n * }\n * }\n * }\n * });\n * ```\n *\n * @config {Function} headerRenderer\n * @param {Object} data Render data\n * @param {Scheduler.model.TimeSpan} data.timeRange\n * @returns {String} String representing the HTML markup\n *\n * @category Common\n */\n headerRenderer : null,\n /**\n * Function used to generate the HTML content for a time range body element.\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * timeRanges : {\n * bodyRenderer({ timeRange }) {\n * return `${timeRange.name}`\n * }\n * }\n * }\n * });\n * ```\n *\n * @config {Function} bodyRenderer\n * @param {Object} data Render data\n * @param {Scheduler.model.TimeSpan} data.timeRange\n * @returns {String} String representing the HTML markup\n *\n * @category Common\n */\n bodyRenderer : null,\n // a unique cls used by subclasses to get custom styling of the elements rendered\n cls : null,\n narrowThreshold : 80\n };\n }\n static configurable = {\n /**\n * Set to `false` to not render range elements into the time axis header\n * @prp {Boolean}\n * @default\n * @category Common\n */\n showHeaderElements : true\n };\n // Plugin configuration. This plugin chains some functions in Grid.\n static pluginConfig = {\n chain : [\n 'onInternalPaint',\n 'populateTimeAxisHeaderMenu',\n 'onSchedulerHorizontalScroll',\n 'afterScroll',\n 'onInternalResize'\n ]\n };\n //endregion\n //region Init & destroy\n construct(client, config) {\n const me = this;\n super.construct(client, config);\n if (client.isVertical) {\n client.ion({\n renderRows : me.onUIReady,\n thisObj : me,\n once : true\n });\n }\n // Add a unique cls used by subclasses to get custom styling of the elements rendered\n // This makes sure that each class only removed its own elements from the DOM\n me.cls = me.cls || `b-sch-${me.constructor.$$name.toLowerCase()}`;\n me.baseSelector = `.${me.baseCls}.${me.cls}`;\n // header elements are required for interaction\n if (me.enableResizing) {\n me.showHeaderElements = true;\n }\n }\n doDestroy() {\n const me = this;\n me.detachListeners('timeAxisViewModel');\n me.detachListeners('timeAxis');\n me.clockTemplate?.destroy();\n me.tip?.destroy();\n me.drag?.destroy();\n me.resize?.destroy();\n super.doDestroy();\n }\n doDisable(disable) {\n this.renderRanges();\n super.doDisable(disable);\n }\n setupTimeAxisViewModelListeners() {\n const me = this;\n me.detachListeners('timeAxisViewModel');\n me.detachListeners('timeAxis');\n me.client.timeAxisViewModel.ion({\n name : 'timeAxisViewModel',\n update : 'onTimeAxisViewModelUpdate',\n thisObj : me\n });\n me.client.timeAxis.ion({\n name : 'timeAxis',\n includeChange : 'renderRanges',\n thisObj : me\n });\n me.updateLineBuffer();\n }\n onUIReady() {\n const\n me = this,\n { client } = me;\n // If timeAxisViewModel is swapped, re-setup listeners to new instance\n client.ion({\n timeAxisViewModelChange : me.setupTimeAxisViewModelListeners,\n thisObj : me\n });\n me.setupTimeAxisViewModelListeners();\n if (!client.hideHeaders) {\n if (me.headerContainerElement) {\n EventHelper.on({\n click : me.onTimeRangeClick,\n dblclick : me.onTimeRangeClick,\n contextmenu : me.onTimeRangeClick,\n delegate : me.baseSelector,\n element : me.headerContainerElement,\n thisObj : me\n });\n }\n if (me.enableResizing) {\n me.drag = DragHelper.new({\n name : 'rangeDrag',\n lockX : client.isVertical,\n lockY : client.isHorizontal,\n constrain : true,\n outerElement : me.headerContainerElement,\n targetSelector : `${me.baseSelector}`,\n isElementDraggable : (el, event) => !client.readOnly && me.isElementDraggable(el, event),\n rtlSource : client,\n internalListeners : {\n dragstart : 'onDragStart',\n drag : 'onDrag',\n drop : 'onDrop',\n reset : 'onDragReset',\n abort : 'onInvalidDrop',\n thisObj : me\n }\n }, me.dragHelperConfig);\n me.resize = ResizeHelper.new({\n direction : client.mode,\n targetSelector : `${me.baseSelector}.b-sch-range`,\n outerElement : me.headerContainerElement,\n isElementResizable : (el, event) => !el.matches('.b-dragging,.b-readonly') && !event.target.matches('.b-fa'),\n internalListeners : {\n resizestart : 'onResizeStart',\n resizing : 'onResizeDrag',\n resize : 'onResize',\n cancel : 'onInvalidResize',\n reset : 'onResizeReset',\n thisObj : me\n }\n }, me.resizeHelperConfig);\n }\n }\n me.renderRanges();\n if (me.tooltipTemplate) {\n me.hoverTooltip = new Tooltip(ObjectHelper.assign({\n forElement : me.headerContainerElement,\n getHtml({ activeTarget }) {\n const timeRange = me.resolveTimeRangeRecord(activeTarget);\n return me.tooltipTemplate({ timeRange });\n },\n forSelector : `.b-timelinebase:not(.b-dragging-timerange, .b-resizing-timerange) .${me.baseCls}${me.cls ? ('.' + me.cls) : ''}`\n }, me.hoverTooltip));\n }\n }\n //endregion\n //region Draw\n refresh() {\n this._timeRanges = null;\n this.renderRanges();\n }\n getDOMConfig(startDate, endDate) {\n const\n me = this,\n bodyConfigs = [],\n headerConfigs = [];\n if (!me.disabled) {\n // clear label rotation map cache here, used to prevent height calculations for every timeRange entry to\n // speed up using recurrences\n me._labelRotationMap = {};\n for (const range of me.timeRanges) {\n const result = me.renderRange(range, startDate, endDate);\n if (result) {\n bodyConfigs.push(result.bodyConfig);\n headerConfigs.push(result.headerConfig);\n }\n }\n }\n return [bodyConfigs, headerConfigs];\n }\n renderRanges() {\n const\n me = this,\n { client } = me;\n // Scheduler/Gantt might not yet be rendered\n if (client.isPainted && !client.timeAxisSubGrid.collapsed) {\n const\n { headerContainerElement } = me,\n updatedBodyElements = [],\n [bodyConfigs, headerConfigs] = me.getDOMConfig();\n if (!me.bodyCanvas) {\n me.bodyCanvas = DomHelper.createElement({\n className : `b-timeranges-canvas b-timeranges-body-canvas ${me.cls}-canvas b-sch-canvas`,\n parent : client.timeAxisSubGridElement,\n retainElement : true\n });\n }\n DomSync.sync({\n targetElement : me.bodyCanvas,\n domConfig : {\n children : bodyConfigs,\n onlyChildren : true,\n syncOptions : {\n releaseThreshold : 0,\n syncIdField : 'id'\n }\n },\n callback : me.showHeaderElements ? null : ({\n targetElement,\n action\n }) => {\n // Might need to rotate label when not showing header elements\n if (action === 'reuseElement' || action === 'newElement' || action === 'reuseOwnElement') {\n // Collect all here, to not force reflows in the middle of syncing\n updatedBodyElements.push(targetElement);\n }\n }\n });\n if (me.showHeaderElements && !me.headerCanvas) {\n me.headerCanvas = DomHelper.createElement({\n className : `b-timeranges-canvas b-timeranges-header-canvas ${me.cls}-canvas`,\n parent : headerContainerElement,\n retainElement : true\n });\n }\n if (me.headerCanvas) {\n DomSync.sync({\n targetElement : me.headerCanvas,\n domConfig : {\n onlyChildren : true,\n children : headerConfigs,\n syncOptions : {\n releaseThreshold : 0,\n syncIdField : 'id'\n }\n }\n });\n }\n // Rotate labels last, to not force reflows. First check if rotation is needed\n for (const bodyElement of updatedBodyElements) {\n me.cacheRotation(bodyElement.elementData.timeRange, bodyElement);\n }\n // Then apply rotation\n for (const bodyElement of updatedBodyElements) {\n me.applyRotation(bodyElement.elementData.timeRange, bodyElement);\n }\n }\n }\n // Implement in subclasses\n get timeRanges() {\n return [];\n }\n /**\n * Based on this method result the feature decides whether the provided range should\n * be rendered or not.\n * The method checks that the range intersects the current viewport.\n *\n * Override the method to implement your custom range rendering vetoing logic.\n * @param {Scheduler.model.TimeSpan} range Range to render.\n * @param {Date} [startDate] Specifies view start date. Defaults to view visible range start\n * @param {Date} [endDate] Specifies view end date. Defaults to view visible range end\n * @returns {Boolean} `true` if the range should be rendered and `false` otherwise.\n */\n shouldRenderRange(\n range,\n startDate = this.client.visibleDateRange.startDate,\n endDate = this.client.visibleDateRange.endDate\n ) {\n const\n { timeAxis } = this.client,\n { startDate : rangeStart, endDate : rangeEnd, duration } = range;\n return Boolean(rangeStart && (timeAxis.isContinuous || timeAxis.isTimeSpanInAxis(range)) && DateHelper.intersectSpans(\n startDate,\n endDate,\n rangeStart,\n // Lines are included longer, to make sure label does not disappear\n duration ? rangeEnd : DateHelper.add(rangeStart, this._lineBufferDurationMS)\n ));\n }\n getRangeDomConfig(timeRange, minDate, maxDate, relativeTo = 0) {\n const\n me = this,\n { client } = me,\n { rtl } = client,\n startPos = client.getCoordinateFromDate(DateHelper.max(timeRange.startDate, minDate), {\n respectExclusion : true\n }) - relativeTo,\n endPos = timeRange.endDate ? client.getCoordinateFromDate(DateHelper.min(timeRange.endDate, maxDate), {\n respectExclusion : true,\n isEnd : true\n }) - relativeTo : startPos,\n size = Math.abs(endPos - startPos),\n isRange = size > 0,\n translateX = rtl ? `calc(${startPos}px - 100%)` : `${startPos}px`;\n return {\n className : {\n [me.baseCls] : 1,\n [me.cls] : me.cls,\n [me.rangeCls] : isRange,\n [me.lineCls] : !isRange,\n [timeRange.cls] : timeRange.cls,\n 'b-narrow-range' : isRange && size < me.narrowThreshold,\n 'b-readonly' : timeRange.readOnly,\n 'b-rtl' : rtl\n },\n dataset : {\n id : timeRange.id\n },\n elementData : {\n timeRange\n },\n style : client.isVertical\n ? `transform: translateY(${translateX}); ${isRange ? `height:${size}px` : ''};`\n : `transform: translateX(${translateX}); ${isRange ? `width:${size}px` : ''};`\n };\n }\n renderRange(timeRange, startDate, endDate) {\n const\n me = this,\n { client } = me,\n { timeAxis } = client;\n if (me.shouldRenderRange(timeRange, startDate, endDate) && timeAxis.startDate) {\n const\n config = me.getRangeDomConfig(timeRange, timeAxis.startDate, timeAxis.endDate),\n icon = timeRange.iconCls && StringHelper.xss``,\n name = timeRange.name && StringHelper.encodeHtml(timeRange.name),\n labelTpl = (name || icon) ? `${icon || ''}` : '',\n bodyConfig = {\n ...config,\n style : config.style + (timeRange.style || ''),\n html : me.bodyRenderer ? me.bodyRenderer({ timeRange }) : (me.showHeaderElements && !me.showLabelInBody ? '' : labelTpl)\n };\n let headerConfig;\n if (me.showHeaderElements) {\n headerConfig = {\n ...config,\n html : (me.headerRenderer ? me.headerRenderer({ timeRange }) : (me.showLabelInBody ? '' : labelTpl))\n };\n }\n return { bodyConfig, headerConfig };\n }\n }\n // Cache label rotation to not have to calculate for each occurrence when using recurring timeranges\n cacheRotation(range, bodyElement) {\n // Lines have no label. Do not check label content to do not force DOM layout!\n if ((!range.iconCls && !range.name) || !range.duration) {\n return;\n }\n const label = bodyElement.firstElementChild;\n if (label && !range.recurringTimeSpan) {\n this._labelRotationMap[range.id] = this.client.isVertical\n ? label.offsetHeight < bodyElement.offsetHeight\n : label.offsetWidth > bodyElement.offsetWidth;\n }\n }\n applyRotation(range, bodyElement) {\n const rotate = this._labelRotationMap[range.recurringTimeSpan?.id ?? range.id];\n bodyElement.firstElementChild?.classList.toggle('b-vertical', Boolean(rotate));\n }\n getBodyElementByRecord(idOrRecord) {\n const id = typeof idOrRecord === 'string' ? idOrRecord : idOrRecord?.id;\n return id != null && DomSync.getChild(this.bodyCanvas, id);\n }\n // Implement in subclasses\n resolveTimeRangeRecord(el) {}\n get headerContainerElement() {\n const\n me = this,\n { isVertical, timeView, timeAxisColumn } = me.client;\n if (!me._headerContainerElement) {\n // Render into the subGrid\u00B4s header element or the vertical timeaxis depending on mode\n if (isVertical && timeView.element) {\n me._headerContainerElement = timeView.element.parentElement;\n }\n else if (!isVertical) {\n me._headerContainerElement = timeAxisColumn.element;\n }\n }\n return me._headerContainerElement;\n }\n //endregion\n //region Settings\n get showHeaderElements() {\n return !this.client.hideHeaders && this._showHeaderElements;\n }\n updateShowHeaderElements(show) {\n const { client } = this;\n if (!this.isConfiguring) {\n client.element.classList.toggle('b-sch-timeranges-with-headerelements', Boolean(show));\n this.renderRanges();\n }\n }\n //endregion\n //region Menu items\n /**\n * Adds menu items for the context menu, and may mutate the menu configuration.\n * @param {Object} options Contains menu items and extra data retrieved from the menu target.\n * @param {Grid.column.Column} options.column Column for which the menu will be shown\n * @param {Object} options.items A named object to describe menu items\n * @internal\n */\n populateTimeAxisHeaderMenu({ column, items }) {}\n //endregion\n //region Events & hooks\n onInternalPaint({ firstPaint }) {\n if (firstPaint && this.client.isHorizontal) {\n this.onUIReady();\n }\n }\n onSchedulerHorizontalScroll() {\n // Don't need a refresh, ranges are already available. Just need to draw those now in view\n this.client.isHorizontal && this.renderRanges();\n }\n afterScroll() {\n this.client.isVertical && this.renderRanges();\n }\n updateLineBuffer() {\n const { timeAxisViewModel } = this.client;\n // Lines have no duration, but we want them to be visible longer for the label to not suddenly disappear.\n // We use a 300px buffer for that, recalculated as an amount of ms\n this._lineBufferDurationMS = timeAxisViewModel.getDateFromPosition(300) - timeAxisViewModel.getDateFromPosition(0);\n }\n onInternalResize(element, newWidth, newHeight, oldWidth, oldHeight) {\n if (this.client.isVertical && oldHeight !== newHeight) {\n this.renderRanges();\n }\n }\n onTimeAxisViewModelUpdate() {\n this.updateLineBuffer();\n this.refresh();\n }\n onTimeRangeClick(event) {\n const timeRangeRecord = this.resolveTimeRangeRecord(event.target);\n this.client.trigger(`timeRangeHeader${StringHelper.capitalize(event.type)}`, { event, domEvent : event, timeRangeRecord });\n }\n //endregion\n //region Drag drop\n showTip(context) {\n const me = this;\n if (me.showTooltip) {\n me.clockTemplate = new ClockTemplate({\n scheduler : me.client\n });\n me.tip = new Tooltip(ObjectHelper.assign({\n id : `${me.client.id}-time-range-tip`,\n cls : 'b-interaction-tooltip',\n align : 'b-t',\n autoShow : true,\n updateContentOnMouseMove : true,\n forElement : context.element,\n getHtml : () => me.getTipHtml(context.record, context.element)\n }, me.showTooltip));\n }\n }\n destroyTip() {\n if (this.tip) {\n this.tip.destroy();\n this.tip = null;\n }\n }\n isElementDraggable(el) {\n el = el.closest(this.baseSelector + ':not(.b-resizing):not(.b-readonly)');\n return el && !el.classList.contains('b-over-resize-handle');\n }\n onDragStart({ context }) {\n const { client, drag } = this;\n if (client.isVertical) {\n drag.minY = 0;\n // Moving the range, you can drag the start marker down until the end of the range hits the time axis end\n drag.maxY = client.timeAxisViewModel.totalSize - context.element.offsetHeight;\n // Setting min/max for X makes drag right of the header valid, but visually still constrained vertically\n drag.minX = 0;\n drag.maxX = Number.MAX_SAFE_INTEGER;\n }\n else {\n drag.minX = 0;\n // Moving the range, you can drag the start marker right until the end of the range hits the time axis end\n drag.maxX = client.timeAxisViewModel.totalSize - context.element.offsetWidth;\n // Setting min/max for Y makes drag below header valid, but visually still constrained horizontally\n drag.minY = 0;\n drag.maxY = Number.MAX_SAFE_INTEGER;\n }\n client.element.classList.add('b-dragging-timerange');\n }\n onDrop({ context }) {\n this.client.element.classList.remove('b-dragging-timerange');\n }\n onInvalidDrop() {\n this.drag.reset();\n this.client.element.classList.remove('b-dragging-timerange');\n this.destroyTip();\n }\n updateDateIndicator({ startDate, endDate }) {\n const\n me = this,\n { tip } = me,\n endDateElement = tip.element.querySelector('.b-sch-tooltip-enddate');\n me.clockTemplate.updateDateIndicator(tip.element, startDate);\n endDateElement && me.clockTemplate.updateDateIndicator(endDateElement, endDate);\n }\n onDrag({ context }) {\n const\n me = this,\n { client } = me,\n box = Rectangle.from(context.element),\n startPos = box.getStart(client.rtl, client.isHorizontal),\n endPos = box.getEnd(client.rtl, client.isHorizontal),\n startDate = client.getDateFromCoordinate(startPos, 'round', false),\n endDate = client.getDateFromCoordinate(endPos, 'round', false);\n me.updateDateIndicator({ startDate, endDate });\n }\n onDragReset() {}\n // endregion\n // region Resize\n onResizeStart() {\n this.client.element.classList.add('b-resizing-timerange');\n this.hoverTooltip?.hide();\n }\n onResizeDrag() {}\n onResize() {}\n onInvalidResize() {}\n onResizeReset() {\n this.client.element.classList.remove('b-resizing-timerange');\n }\n //endregion\n //region Tooltip\n /**\n * Generates the html to display in the tooltip during drag drop.\n *\n */\n getTipHtml(record, element) {\n const\n me = this,\n { client } = me,\n box = Rectangle.from(element),\n startPos = box.getStart(client.rtl, client.isHorizontal),\n endPos = box.getEnd(client.rtl, client.isHorizontal),\n startDate = client.getDateFromCoordinate(startPos, 'round', false),\n endDate = record.endDate && client.getDateFromCoordinate(endPos, 'round', false),\n startText = client.getFormattedDate(startDate),\n endText = endDate && client.getFormattedEndDate(endDate, startDate);\n return me.dragTipTemplate({\n name : record.name || '',\n startDate,\n endDate,\n startText,\n endText,\n startClockHtml : me.clockTemplate.template({\n date : startDate,\n text : startText,\n cls : 'b-sch-tooltip-startdate'\n }),\n endClockHtml : endText && me.clockTemplate.template({\n date : endDate,\n text : endText,\n cls : 'b-sch-tooltip-enddate'\n })\n });\n }\n //endregion\n}\nAbstractTimeRanges._$name = 'AbstractTimeRanges';", "import DomHelper from '../../Core/helper/DomHelper.js';\nimport DomSync from '../../Core/helper/DomSync.js';\nimport InstancePlugin from '../../Core/mixin/InstancePlugin.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport Delayable from '../../Core/mixin/Delayable.js';\nimport AttachToProjectMixin from '../../Scheduler/data/mixin/AttachToProjectMixin.js';\n/**\n * @module Scheduler/feature/ColumnLines\n */\nconst emptyObject = Object.freeze({});\n/**\n * Displays column lines for ticks, with a different styling for major ticks (by default they are darker). If this\n * feature is disabled, no lines are shown. If it's enabled, line are shown for the tick level which is set in current\n * ViewPreset. Please see {@link Scheduler.preset.ViewPreset#field-columnLinesFor} config for details.\n *\n * The lines are drawn as divs, with only visible lines available in DOM. The color and style of the lines are\n * determined by the css rules for `.b-column-line` and `.b-column-line-major`.\n *\n * For vertical mode, this features also draws vertical resource column lines if scheduler is configured with\n * `columnLines : true` (which is the default, see {@link Grid.view.GridBase#config-columnLines}).\n *\n * This feature is **enabled** by default\n *\n * {@inlineexample Scheduler/feature/ColumnLines.js}\n *\n * @demo Scheduler/basic\n *\n * @extends Core/mixin/InstancePlugin\n * @mixes Core/mixin/Delayable\n * @classtype columnLines\n * @feature\n */\nexport default class ColumnLines extends InstancePlugin.mixin(AttachToProjectMixin, Delayable) {\n //region Config\n static get $name() {\n return 'ColumnLines';\n }\n static get delayable() {\n return {\n refresh : {\n type : 'raf',\n cancelOutstanding : true\n }\n };\n }\n // Plugin configuration. This plugin chains some of the functions in Grid.\n static get pluginConfig() {\n return {\n after : ['render', 'updateCanvasSize', 'internalOnVisibleDateRangeChange', 'onVisibleResourceRangeChange', 'onVisibleResourceColumnChange']\n };\n }\n //endregion\n //region Init & destroy\n attachToResourceStore(resourceStore) {\n const { client } = this;\n super.attachToResourceStore(resourceStore);\n if (client.isVertical) {\n client.resourceStore.ion({\n name : 'resourceStore',\n group({ groupers }) {\n if (groupers.length === 0) {\n this.refresh();\n }\n },\n thisObj : this\n });\n }\n }\n doDisable(disable) {\n super.doDisable(disable);\n if (!this.isConfiguring) {\n this.refresh();\n }\n }\n //endregion\n //region Draw\n /**\n * Draw lines when scheduler/gantt is rendered.\n * @private\n */\n render() {\n this.refresh();\n }\n getColumnLinesDOMConfig(startDate, endDate) {\n const\n me = this,\n { client } = me,\n { rtl } = client,\n m = rtl ? -1 : 1,\n {\n timeAxisViewModel,\n isHorizontal,\n resourceStore,\n variableColumnWidths\n } = client,\n { columnConfig } = timeAxisViewModel;\n const\n linesForLevel = timeAxisViewModel.columnLinesFor,\n majorLinesForLevel = Math.max(linesForLevel - 1, 0),\n start = startDate.getTime(),\n end = endDate.getTime(),\n domConfigs = [],\n dates = new Set(),\n dimension = isHorizontal ? 'X' : 'Y';\n if (!me.disabled) {\n const addLineConfig = (tick, isMajor) => {\n const tickStart = tick.start.getTime();\n // Only start of tick matters.\n // Each tick has an exact calculated start position along the time axis\n // and carries a border on its left, so column lines follow from\n // tick 1 (zero-based) onwards.\n if (tickStart > start && tickStart < end && !dates.has(tickStart)) {\n dates.add(tickStart);\n domConfigs.push({\n role : 'presentation',\n className : isMajor ? 'b-column-line-major' : 'b-column-line',\n style : {\n transform : `translate${dimension}(${tick.coord * m}px)`\n },\n dataset : {\n line : isMajor ? `major-${tick.index}` : `line-${tick.index}`\n }\n });\n }\n };\n // Collect configs for major lines\n if (linesForLevel !== majorLinesForLevel) {\n for (let i = 1; i <= columnConfig[majorLinesForLevel].length - 1; i++) {\n addLineConfig(columnConfig[majorLinesForLevel][i], true);\n }\n }\n // And normal lines, skipping dates already occupied by major lines\n for (let i = 1; i <= columnConfig[linesForLevel].length - 1; i++) {\n addLineConfig(columnConfig[linesForLevel][i], false);\n }\n // Add vertical resource column lines, if grid is configured to show column lines\n if (!isHorizontal && client.columnLines) {\n const\n { columnWidth } = client.resourceColumns;\n let {\n first : firstResource,\n last : lastResource\n } = client.currentOrientation.getResourceRange(true);\n let nbrGroupHeaders = 0;\n if (firstResource > -1) {\n for (let i = firstResource; i < lastResource + 1; i++) {\n const\n resourceRecord = resourceStore.getAt(i);\n // Only add lines for group children\n if (resourceRecord.isGroupHeader) {\n lastResource++;\n nbrGroupHeaders++;\n continue;\n }\n const\n instanceMeta = resourceRecord.instanceMeta(client),\n left = variableColumnWidths ? instanceMeta.insetStart + client.getResourceWidth(resourceRecord) - 1 : (i - nbrGroupHeaders + 1) * columnWidth - 1,\n groupParent = resourceRecord.groupParent?.get(client.resourceStore.id);\n domConfigs.push({\n className : {\n 'b-column-line' : 1,\n 'b-resource-column-line' : 1,\n 'b-resource-group-divider' : resourceStore.isGrouped && groupParent?.groupChildren[groupParent?.groupChildren.length - 1] === resourceRecord\n },\n style : {\n transform : `translateX(${left * m}px)`\n },\n dataset : {\n line : `resource-${i}`\n }\n });\n }\n }\n }\n }\n return domConfigs;\n }\n /**\n * Draw column lines that are in view\n * @private\n */\n refresh() {\n const\n me = this,\n { client } = me,\n { timeAxis } = client,\n { startDate, endDate } = client.visibleDateRange || emptyObject,\n axisStart = timeAxis.startDate;\n // Early bailout for timeaxis without start date or when starting with schedule collapsed\n if (!axisStart || !startDate || me.client.timeAxisSubGrid.collapsed) {\n return;\n }\n if (!me.element) {\n me.element = DomHelper.createElement({\n parent : client.timeAxisSubGridElement,\n className : 'b-column-lines-canvas b-sch-canvas'\n });\n }\n const domConfigs = me.getColumnLinesDOMConfig(startDate, endDate);\n DomSync.sync({\n targetElement : me.element,\n domConfig : {\n onlyChildren : true,\n children : domConfigs,\n syncOptions : {\n // When zooming in and out we risk getting a lot of released lines if we do not limit it\n releaseThreshold : 4\n }\n },\n syncIdField : 'line'\n });\n }\n //endregion\n //region Events\n // Called when visible date range changes, for example from zooming, scrolling, resizing\n internalOnVisibleDateRangeChange() {\n this.refresh();\n }\n // Called when visible resource range changes, for example on scroll and resize\n onVisibleResourceRangeChange({ firstResource, lastResource }) {\n this.refresh();\n }\n onVisibleResourceColumnChange(width, oldWidth) {\n this.refresh();\n }\n updateCanvasSize() {\n this.refresh();\n }\n //endregion\n}\nColumnLines._$name = 'ColumnLines'; GridFeatureManager.registerFeature(ColumnLines, true, ['Scheduler', 'Gantt', 'TimelineHistogram']);\n", "import Base from '../../../Core/Base.js';\nimport DomHelper from '../../../Core/helper/DomHelper.js';\nimport Objects from '../../../Core/helper/util/Objects.js';\nimport Rectangle from '../../../Core/helper/util/Rectangle.js';\nimport Tooltip from '../../../Core/widget/Tooltip.js';\nimport EventHelper from '../../../Core/helper/EventHelper.js';\nimport StringHelper from '../../../Core/helper/StringHelper.js';\nimport VersionHelper from '../../../Core/helper/VersionHelper.js';\nimport DependencyBaseModel from '../../model/DependencyBaseModel.js';\n/**\n * @module Scheduler/feature/mixin/DependencyCreation\n */\n/**\n * Mixin for Dependencies feature that handles dependency creation (drag & drop from terminals which are shown on hover).\n * Requires {@link Core.mixin.Delayable} to be mixed in alongside.\n *\n * @mixin\n */\nexport default Target => class DependencyCreation extends (Target || Base) {\n static get $name() {\n return 'DependencyCreation';\n }\n //region Config\n static configurable = {\n /**\n * `false` to require a drop on a target event bar side circle to define the dependency type.\n * If dropped on the event bar, the `defaultValue` of the DependencyModel `type` field will be used to\n * determine the target task side.\n *\n * @prp {Boolean}\n * @default\n * @category Dependency creation\n */\n allowDropOnEventBar : true,\n /**\n * Terminal diameter in px, overrides the default CSS value for it (which might depend on theme).\n *\n * {@note}\n * Use an even number to avoid cropped terminals.\n * {/@note}\n *\n * Also accepts a string value representing a CSS size, e.g. '1.5em'.\n *\n * @prp {Number|String}\n * @category Dependency terminals\n */\n terminalSize : null,\n /**\n * Terminal offset from their initial position, in px. Positive values move terminals further away from the\n * event bar, negative values inside the event bar.\n *\n * @prp {Number}\n * @default 0\n * @category Dependency terminals\n */\n terminalOffset : null,\n /**\n * Delay in ms before showing the terminals when hovering over an event bar.\n *\n * Can be used for a more \"stable\" UI, where the terminals are not shown immediately when hovering over an event\n * bar and thus have fewer things moving when mouse is moved quickly over multiple event bars.\n *\n * @prp {Number}\n * @default 0\n * @category Dependency terminals\n */\n terminalShowDelay : 0,\n /**\n * Delay in ms before hiding the terminals when the mouse leaves an event bar or terminal.\n *\n * Can be used to make the UI more forgiving, accidentally leaving the event bar or terminal will not\n * immediately hide the terminals.\n *\n * Can also be used to play a hide animation, set a `terminalHideDelay` that is longer than your animation's\n * duration. The `b-hiding-terminals` CSS class is added to the event wrapper while the terminals are being\n * hidden.\n *\n * @prp {Number}\n * @default 0\n * @category Dependency terminals\n */\n terminalHideDelay : 0\n };\n static get defaultConfig() {\n return {\n /**\n * `false` to not show a tooltip while creating a dependency\n * @config {Boolean}\n * @default\n * @category Dependency creation\n */\n showCreationTooltip : true,\n /**\n * A tooltip config object that will be applied to the dependency creation {@link Core.widget.Tooltip}\n * @config {TooltipConfig}\n * @category Dependency creation\n */\n creationTooltip : null,\n /**\n * A template function that will be called to generate the HTML contents of the dependency creation tooltip.\n * You can return either an HTML string or a {@link DomConfig} object.\n * @prp {Function} creationTooltipTemplate\n * @param {Object} data Data about the dependency being created\n * @param {Scheduler.model.TimeSpan} data.source The from event\n * @param {Scheduler.model.TimeSpan} data.target The target event\n * @param {String} data.fromSide The from side (start, end, top, bottom)\n * @param {String} data.toSide The target side (start, end, top, bottom)\n * @param {Boolean} data.valid The validity of the dependency\n * @returns {String|DomConfig}\n * @category Dependency creation\n */\n /**\n * CSS class used for terminals\n * @config {String}\n * @default\n * @category Dependency terminals\n */\n terminalCls : 'b-sch-terminal',\n /**\n * Where (on event bar edges) to display terminals. The sides are `'start'`, `'top'`,\n * `'end'` and `'bottom'`\n * @config {String[]}\n * @category Dependency terminals\n */\n terminalSides : ['start', 'top', 'end', 'bottom'],\n /**\n * Set to `false` to not allow creating dependencies\n * @config {Boolean}\n * @default\n * @category Dependency creation\n */\n allowCreate : true\n };\n }\n //endregion\n //region Init & destroy\n construct(client, config) {\n super.construct(client, config);\n const me = this;\n me.eventName = client.scheduledEventName;\n client.ion({ readOnly : () => me.updateCreateListeners() });\n me.updateCreateListeners();\n me.chain(client, 'onElementTouchMove', 'onElementTouchMove');\n }\n doDestroy() {\n const me = this;\n me.detachListeners('view');\n me.creationData = null;\n me.pointerUpMoveDetacher?.();\n me.creationTooltip?.destroy();\n super.doDestroy();\n }\n updateCreateListeners() {\n const me = this;\n if (!me.client) {\n return;\n }\n me.detachListeners('view');\n if (me.isCreateAllowed) {\n me.client.ion({\n name : 'view',\n [`${me.eventName}MouseEnter`] : 'onTimeSpanMouseEnter',\n [`${me.eventName}MouseLeave`] : 'onTimeSpanMouseLeave',\n thisObj : me\n });\n }\n }\n set allowCreate(value) {\n this._allowCreate = value;\n this.updateCreateListeners();\n }\n get allowCreate() {\n return this._allowCreate;\n }\n get isCreateAllowed() {\n return this.allowCreate && !this.client.readOnly && !this.disabled;\n }\n //endregion\n //region Terminal settings\n updateTerminalOffset(offset) {\n this.client.whenVisible(() => {\n this.client.foregroundCanvas.style.setProperty('--scheduler-dependency-terminal-offset', `${-offset}px`);\n });\n }\n updateTerminalSize(size) {\n if (typeof size === 'number') {\n size = `${size}px`;\n }\n this.client.whenVisible(() => {\n this.client.foregroundCanvas.style.setProperty('--scheduler-dependency-terminal-size', size ? `${size}` : null);\n });\n }\n //endregion\n //region Events\n /**\n * Show terminals when mouse enters event/task element\n * @private\n */\n onTimeSpanMouseEnter({\n event, source, [`${this.eventName}Record`]: record, [`${this.eventName}Element`]: element, resourceRecord\n }) {\n if (!record.isCreating && !record.readOnly) {\n const\n me = this,\n { creationData, client } = me,\n eventBarElement = DomHelper.down(element, source.eventInnerSelector);\n // When we enter a different event than the one we started on\n if (record !== creationData?.source) {\n const { parent } = record;\n // Entered a nested event, hide terminals for its parent (in the drag-batches demo, events have a parent\n // that is not added to the event store, ignore that)\n if (record.isEventModel && parent && !parent.isRoot && client.eventStore.includes(parent)) {\n const parentElement = client.getElementFromEventRecord(parent, resourceRecord, true);\n // When Pro consumes a Gantt project, parents are not rendered\n parentElement && me.delayHideTerminals(parentElement);\n }\n me.delayShowTerminals(record, element);\n if (creationData && event.target.closest(client.eventSelector)) {\n creationData.timeSpanElement = eventBarElement;\n me.onOverTargetEventBar(event);\n }\n }\n }\n }\n /**\n * Hide terminals when mouse leaves event/task element\n * @private\n */\n onTimeSpanMouseLeave(event) {\n const { eventRecord, event : domEvent } = event;\n // Can happen when unhovering an occurrence during update\n if (!domEvent) {\n return;\n }\n const\n me = this,\n { creationData, client } = me,\n // For nested events, when pointer is leaving, it could point to event parent.\n // Instead, for no nested events, when pointer is leaving, it could point to the terminal / terminal hover area, than we need to skip this case,\n // otherwise `toEventRecord` will still be the event where we are leaving from.\n toEvent = domEvent.relatedTarget?.matches('.b-sch-terminal-hover-area, .b-sch-terminal') ? null : domEvent.relatedTarget?.closest(client.eventSelector),\n toEventRecord = toEvent?.elementData?.eventRecord ?? toEvent?.elementData?.taskRecord,\n { parent } = eventRecord ?? {}, // No eventRecord in Gantt\n element = event[`${me.eventName}Element`];\n // We cannot hide the terminals for non-trusted events because non-trusted means it's synthesized from a\n // touchmove event and if the source element of a touchmove leaves the DOM, the touch gesture is ended.\n if (domEvent.isTrusted || VersionHelper.isTestEnv || creationData) {\n me.delayHideTerminals(element);\n }\n // Left a nested event, show terminals for its parent if we are over it now\n if (parent && !parent.isRoot && client.eventStore.includes(parent)) {\n const parentElement = client.getElementFromEventRecord(parent);\n // When Pro consumes a Gantt project, parents are not rendered\n parentElement && me.delayShowTerminals(parent, parentElement);\n }\n if (creationData) {\n me.onOverNewTargetWhileCreating(domEvent.relatedTarget, !toEventRecord?.readOnly && !toEventRecord?.isOccurence ? toEventRecord : null, domEvent);\n }\n }\n onTerminalMouseOver(event) {\n this.clearTimeout(`hide-${event.target.closest(this.client.eventSelector).dataset.syncId}`);\n if (this.creationData) {\n this.onOverTargetEventBar(event);\n }\n }\n /**\n * Remove hover styling when mouse leaves terminal. Also hides terminals when mouse leaves one it and not creating a\n * dependency.\n * @private\n */\n onTerminalMouseOut(event) {\n const\n me = this,\n { creationData, client } = me,\n fromEvent = event.target.closest(client.eventSelector),\n toEvent = event.relatedTarget?.closest(client.eventSelector),\n toEventRecord = toEvent?.elementData?.eventRecord ?? toEvent?.elementData?.taskRecord;\n if (toEvent !== fromEvent && fromEvent && !me.hasTimeout(`show-${fromEvent.dataset.syncId}`) && (!creationData || fromEvent !== creationData.timeSpanElement)) {\n me.delayHideTerminals(fromEvent);\n client.unhover(fromEvent, event);\n }\n if (creationData) {\n me.onOverNewTargetWhileCreating(event.relatedTarget, !toEventRecord?.readOnly && !toEventRecord?.isOccurence ? toEventRecord : null, event);\n }\n }\n /**\n * Start creating a dependency when mouse is pressed over terminal\n * @private\n */\n onTerminalPointerDown(event) {\n const me = this;\n // ignore non-left button clicks\n if (event.button === 0 && !me.creationData) {\n const\n { client } = me,\n timeAxisSubGridElement = client.timeAxisSubGridElement,\n terminalNode = event.target,\n timeSpanElement = terminalNode.closest(client.eventInnerSelector),\n viewBounds = Rectangle.from(client.element, document.body);\n event.stopPropagation();\n me.creationData = {\n sourceElement : timeSpanElement,\n source : client.resolveTimeSpanRecord(timeSpanElement).$original,\n fromSide : terminalNode.dataset.side,\n startPoint : Rectangle.from(terminalNode, timeAxisSubGridElement).center,\n startX : event.pageX - viewBounds.x + client.scrollLeft,\n startY : event.pageY - viewBounds.y + client.scrollTop,\n valid : false,\n sourceResource : client.resolveResourceRecord?.(event),\n tooltip : me.creationTooltip\n };\n me.pointerUpMoveDetacher = EventHelper.on({\n pointerup : {\n element : client.element.getRootNode(),\n handler : 'onMouseUp',\n passive : false\n },\n pointermove : {\n element : timeAxisSubGridElement,\n handler : 'onMouseMove',\n passive : false\n },\n thisObj : me\n });\n // If root element is anything but Document (it could be Document Fragment or regular Node in case of LWC)\n // then we should also add listener to document to cancel dependency creation\n me.documentPointerUpDetacher = EventHelper.on({\n pointerup : {\n element : document,\n handler : 'onDocumentMouseUp'\n },\n keydown : {\n element : document,\n handler : ({ key }) => {\n if (key === 'Escape') {\n me.abort();\n }\n }\n },\n thisObj : me\n });\n }\n }\n onElementTouchMove(event) {\n super.onElementTouchMove?.(event);\n if (this.connector) {\n // Prevent touch scrolling while dragging a connector\n event.preventDefault();\n }\n }\n /**\n * Update connector line showing dependency between source and target when mouse moves. Also check if mouse is over\n * a valid target terminal\n * @private\n */\n onMouseMove(event) {\n const\n me = this,\n { client, creationData : data } = me,\n viewBounds = Rectangle.from(client.element, document.body),\n deltaX = (event.pageX - viewBounds.x + client.scrollLeft) - data.startX,\n deltaY = (event.pageY - viewBounds.y + client.scrollTop) - data.startY,\n length = Math.round(Math.sqrt(deltaX * deltaX + deltaY * deltaY)) - 3,\n angle = Math.atan2(deltaY, deltaX);\n let { connector } = me;\n if (!connector) {\n if (me.onRequestDragCreate(event) === false) {\n return;\n }\n connector = me.connector;\n }\n connector.style.width = `${length}px`;\n connector.style.transform = `rotate(${angle}rad)`;\n me.lastMouseMoveEvent = event;\n }\n onRequestDragCreate(event) {\n const\n me = this,\n { client, creationData : data } = me;\n /**\n * Fired on the owning Scheduler/Gantt before a dependency creation drag operation starts. Return `false` to\n * prevent it\n * @event beforeDependencyCreateDrag\n * @on-owner\n * @param {Scheduler.model.TimeSpan} source The source task\n * @preventable\n */\n if (client.trigger('beforeDependencyCreateDrag', { data, source : data.source }) === false) {\n me.abort();\n return false;\n }\n client.element.classList.add('b-creating-dependency');\n me.createConnector(data.startPoint.x, data.startPoint.y);\n /**\n * Fired on the owning Scheduler/Gantt when a dependency creation drag operation starts\n * @event dependencyCreateDragStart\n * @on-owner\n * @param {Scheduler.model.TimeSpan} source The source task\n */\n client.trigger('dependencyCreateDragStart', { data, source : data.source });\n if (me.showCreationTooltip) {\n const tip = me.creationTooltip || (me.creationTooltip = me.createDragTooltip());\n me.creationData.tooltip = tip;\n tip.disabled = false;\n tip.show();\n tip.onMouseMove(event);\n }\n client.scrollManager.startMonitoring({\n scrollables : [\n {\n element : client.timeAxisSubGrid.scrollable.element,\n direction : 'horizontal'\n },\n {\n element : client.scrollable.element,\n direction : 'vertical'\n }\n ],\n callback : () => me.lastMouseMoveEvent && me.onMouseMove(me.lastMouseMoveEvent)\n });\n }\n onOverTargetEventBar(event) {\n const\n me = this,\n { client, creationData: data, allowDropOnEventBar } = me,\n { target } = event;\n let overEventRecord = client.resolveTimeSpanRecord(target).$original;\n // use main event if a segment resolved\n if (overEventRecord?.isEventSegment) {\n overEventRecord = overEventRecord.event;\n }\n if (Objects.isPromise(data.valid) || (!allowDropOnEventBar && !target.classList.contains(me.terminalCls))) {\n return;\n }\n if (overEventRecord !== data.source) {\n me.onOverNewTargetWhileCreating(target, overEventRecord, event);\n }\n }\n async onOverNewTargetWhileCreating(targetElement, overEventRecord, event) {\n const\n me = this,\n { client, creationData : data, allowDropOnEventBar, connector } = me;\n if (Objects.isPromise(data.valid)) {\n return;\n }\n // stop target updating if dependency finalizing in progress\n if (data.finalizing) {\n return;\n }\n // Connector might not exist at this point because `pointerout` on the terminal might fire before `pointermove`\n // on the time axis subgrid. This is difficult to reproduce, so shouldn't be triggered often.\n // https://github.com/bryntum/support/issues/3116#issuecomment-894256799\n if (!connector) {\n return;\n }\n connector.classList.remove('b-valid', 'b-invalid');\n data.timeSpanElement && DomHelper.removeClsGlobally(data.timeSpanElement, 'b-sch-terminal-active');\n if (!overEventRecord || overEventRecord === data.source || (!allowDropOnEventBar && !targetElement.classList.contains(me.terminalCls))) {\n data.target = data.toSide = null;\n data.valid = false;\n connector.classList.add('b-invalid');\n }\n else {\n const\n target = data.target = overEventRecord,\n { source } = data;\n let toSide = targetElement.dataset.side;\n // If we allow dropping anywhere on a task, resolve target side based on the default type of the\n // dependency model used\n if (allowDropOnEventBar && !targetElement.classList.contains(me.terminalCls)) {\n toSide = me.getTargetSideFromType(me.dependencyStore.modelClass.fieldMap.type.defaultValue || DependencyBaseModel.Type.EndToStart);\n }\n if (client.resolveResourceRecord) {\n data.targetResource = client.resolveResourceRecord(event);\n }\n let dependencyType;\n data.toSide = toSide;\n const\n fromSide = data.fromSide,\n updateValidity = valid => {\n if (!me.isDestroyed) {\n data.valid = valid;\n targetElement.classList.add(valid ? 'b-valid' : 'b-invalid');\n connector.classList.add(valid ? 'b-valid' : 'b-invalid');\n /**\n * Fired on the owning Scheduler/Gantt when asynchronous dependency validation completes\n * @event dependencyValidationComplete\n * @on-owner\n * @param {Scheduler.model.TimeSpan} source The source task\n * @param {Scheduler.model.TimeSpan} target The target task\n * @param {Number} dependencyType The dependency type, see {@link Scheduler.model.DependencyBaseModel#property-Type-static}\n */\n client.trigger('dependencyValidationComplete', {\n data,\n source,\n target,\n dependencyType\n });\n }\n };\n // NOTE: Top/Bottom sides are not taken into account due to\n // scheduler doesn't check for type value anyway, whereas\n // gantt will reject any other dependency types undefined in\n // DependencyBaseModel.Type enumeration.\n switch (true) {\n case fromSide === 'start' && toSide === 'start':\n dependencyType = DependencyBaseModel.Type.StartToStart;\n break;\n case fromSide === 'start' && toSide === 'end':\n dependencyType = DependencyBaseModel.Type.StartToEnd;\n break;\n case fromSide === 'end' && toSide === 'start':\n dependencyType = DependencyBaseModel.Type.EndToStart;\n break;\n case fromSide === 'end' && toSide === 'end':\n dependencyType = DependencyBaseModel.Type.EndToEnd;\n break;\n }\n /**\n * Fired on the owning Scheduler/Gantt when asynchronous dependency validation starts\n * @event dependencyValidationStart\n * @on-owner\n * @param {Scheduler.model.TimeSpan} source The source task\n * @param {Scheduler.model.TimeSpan} target The target task\n * @param {Number} dependencyType The dependency type, see {@link Scheduler.model.DependencyBaseModel#property-Type-static}\n */\n client.trigger('dependencyValidationStart', {\n data,\n source,\n target,\n dependencyType\n });\n let valid = data.valid = me.dependencyStore.isValidDependency(source, target, dependencyType);\n // Promise is returned when using the engine\n if (Objects.isPromise(valid)) {\n valid = await valid;\n updateValidity(valid);\n }\n else {\n updateValidity(valid);\n }\n const validityCls = valid ? 'b-valid' : 'b-invalid';\n connector.classList.add(validityCls);\n data.timeSpanElement?.querySelector(`.${me.terminalCls}[data-side=${toSide}]`)?.classList.add('b-sch-terminal-active', validityCls);\n }\n me.updateCreationTooltip();\n }\n /**\n * Create a new dependency if mouse release over valid terminal. Hides connector\n * @private\n */\n async onMouseUp() {\n const\n me = this,\n data = me.creationData;\n data.finalizing = true;\n me.pointerUpMoveDetacher?.();\n if (data.valid) {\n /**\n * Fired on the owning Scheduler/Gantt when a dependency drag creation operation is about to finalize\n *\n * @event beforeDependencyCreateFinalize\n * @on-owner\n * @preventable\n * @async\n * @param {Scheduler.model.TimeSpan} source The source task\n * @param {Scheduler.model.TimeSpan} target The target task\n * @param {'start'|'end'|'top'|'bottom'} fromSide The from side (start / end / top / bottom)\n * @param {'start'|'end'|'top'|'bottom'} toSide The to side (start / end / top / bottom)\n */\n const result = await me.client.trigger('beforeDependencyCreateFinalize', data);\n if (result === false) {\n data.valid = false;\n }\n // Await any async validation logic before continuing\n else if (Objects.isPromise(data.valid)) {\n data.valid = await data.valid;\n }\n if (data.valid) {\n let dependency = await me.createDependency(data);\n if (dependency !== null) {\n if (Objects.isPromise(dependency)) {\n dependency = await dependency;\n }\n data.dependency = dependency;\n /**\n * Fired on the owning Scheduler/Gantt when a dependency drag creation operation succeeds\n * @event dependencyCreateDrop\n * @on-owner\n * @param {Scheduler.model.TimeSpan} source The source task\n * @param {Scheduler.model.TimeSpan} target The target task\n * @param {Scheduler.model.DependencyBaseModel} dependency The created dependency\n */\n me.client.trigger('dependencyCreateDrop', { data, source : data.source, target : data.target, dependency });\n await me.doAfterDependencyDrop(data);\n }\n }\n else {\n await me.doAfterDependencyDrop(data);\n }\n }\n else {\n data.valid = false;\n await me.doAfterDependencyDrop(data);\n }\n me.abort();\n }\n doAfterDependencyDrop(data) {\n /**\n * Fired on the owning Scheduler/Gantt after a dependency drag creation operation finished, no matter to outcome\n * @event afterDependencyCreateDrop\n * @on-owner\n * @param {Scheduler.model.TimeSpan} source The source task\n * @param {Scheduler.model.TimeSpan} target The target task\n * @param {Scheduler.model.DependencyBaseModel} dependency The created dependency\n */\n this.client.trigger('afterDependencyCreateDrop', {\n data,\n ...data\n });\n }\n onDocumentMouseUp({ target }) {\n if (!this.client.timeAxisSubGridElement.contains(target)) {\n this.abort();\n }\n }\n /**\n * Aborts dependency creation, removes proxy and cleans up listeners\n * @category Dependency creation\n */\n abort() {\n const\n me = this,\n { client, creationData } = me;\n // Remove terminals from source and target events.\n if (creationData) {\n const { source, sourceResource, target, targetResource } = creationData;\n if (source) {\n const el = client.getElementFromEventRecord(source, sourceResource);\n if (el) {\n me.hideTerminals(el);\n }\n }\n if (target) {\n const el = client.getElementFromEventRecord(target, targetResource);\n if (el) {\n me.hideTerminals(el);\n }\n }\n }\n if (me.creationTooltip) {\n me.creationTooltip.disabled = true;\n }\n me.creationData = me.lastMouseMoveEvent = null;\n me.pointerUpMoveDetacher?.();\n me.documentPointerUpDetacher?.();\n me.removeConnector();\n }\n //endregion\n //region Connector\n /**\n * Creates a connector line that visualizes dependency source & target\n * @private\n */\n createConnector(x, y) {\n const\n me = this,\n { client } = me;\n me.clearTimeout(me.removeConnectorTimeout);\n me.connector = DomHelper.createElement({\n parent : client.timeAxisSubGridElement,\n className : `${me.baseCls}-connector`,\n style : `left:${x}px;top:${y}px`\n });\n client.element.classList.add('b-creating-dependency');\n }\n createDragTooltip() {\n const\n me = this,\n { client } = me;\n return me.creationTooltip = Tooltip.new({\n id : `${client.id}-dependency-drag-tip`,\n cls : 'b-sch-dependency-creation-tooltip',\n loadingMsg : '',\n anchorToTarget : false,\n // Keep tip visible until drag drop operation is finalized\n forElement : client.timeAxisSubGridElement,\n trackMouse : true,\n // Do not constrain at all, want it to be able to go outside of the viewport to not get in the way\n constrainTo : null,\n header : {\n dock : 'right'\n },\n internalListeners : {\n // Show initial content immediately\n beforeShow : 'updateCreationTooltip',\n thisObj : me\n }\n }, me.creationTooltip);\n }\n /**\n * Remove connector\n * @private\n */\n removeConnector() {\n const\n me = this,\n { connector, client } = me;\n if (connector) {\n connector.classList.add('b-removing');\n connector.style.width = '0';\n me.removeConnectorTimeout = me.setTimeout(() => {\n connector.remove();\n me.connector = null;\n }, 200);\n }\n client.element.classList.remove('b-creating-dependency');\n me.creationTooltip && me.creationTooltip.hide();\n client.scrollManager.stopMonitoring();\n }\n //endregion\n //region Terminals\n delayShowTerminals(timeSpanRecord, element) {\n const\n me = this,\n { syncId } = element.dataset;\n me.clearTimeout(`hide-${syncId}`);\n me.clearTimeout(`show-${syncId}`);\n element.classList.remove('b-hiding-terminals');\n if (!me.terminalShowDelay) {\n me.showTerminals(timeSpanRecord, element);\n }\n else {\n me.setTimeout({\n fn : () => me.showTerminals(timeSpanRecord, element),\n name : `show-${syncId}`,\n args : [timeSpanRecord, element],\n delay : me.terminalShowDelay\n });\n }\n }\n delayHideTerminals(element) {\n const\n me = this,\n { syncId } = element.dataset;\n me.clearTimeout(`hide-${syncId}`);\n me.clearTimeout(`show-${syncId}`);\n element.classList.add('b-hiding-terminals');\n if (!me.terminalHideDelay) {\n me.hideTerminals(element);\n }\n else {\n me.setTimeout({\n fn : () => me.hideTerminals(element),\n name : `hide-${syncId}`,\n args : [element],\n delay : me.terminalHideDelay\n });\n }\n }\n /**\n * Show terminals for specified event at sides defined in #terminalSides.\n * @param {Scheduler.model.TimeSpan} timeSpanRecord Event/task to show terminals for\n * @param {HTMLElement} [element] Event/task element, defaults to using the first element found for the task\n * @category Dependency creation\n */\n showTerminals(timeSpanRecord, element = this.client.getElementFromEventRecord(timeSpanRecord)) {\n const me = this;\n // Record not part of project is a transient record in a display store, not meant to be manipulated\n if (!me.isCreateAllowed || !timeSpanRecord.project || !element) {\n return;\n }\n const\n { client } = me,\n cls = me.terminalCls,\n terminalsVisibleCls = `${cls}s-visible`;\n if (me.showingTerminalsFor) {\n me.hideTerminals(me.showingTerminalsFor);\n }\n // We operate on the event bar, not the wrap\n element = DomHelper.down(element, me.client.eventInnerSelector);\n // bail out if terminals already shown or if view is readonly\n // do not draw new terminals if we are resizing event\n if (!element.classList.contains(terminalsVisibleCls) && !client.element.classList.contains('b-resizing-event') && !client.readOnly) {\n /**\n * Fired on the owning Scheduler/Gantt before showing dependency terminals on a task or event. Return `false` to\n * prevent it\n * @event beforeShowTerminals\n * @on-owner\n * @param {Scheduler.model.TimeSpan} source The hovered task\n * @preventable\n */\n if (client.trigger('beforeShowTerminals', { source : timeSpanRecord }) === false) {\n return;\n }\n // create hover area expansion element\n DomHelper.createElement({\n parent : element.closest(client.eventSelector),\n className : 'b-sch-terminal-hover-area'\n });\n // create terminals for desired sides\n me.terminalSides.forEach(side => {\n // Allow code to use left for the start side and right for the end side\n side = me.fixSide(side);\n const terminal = DomHelper.createElement({\n parent : element,\n className : `${cls} ${cls}-${side}`,\n dataset : {\n side,\n feature : true\n }\n });\n terminal.detacher = EventHelper.on({\n element : terminal,\n mouseover : 'onTerminalMouseOver',\n mouseout : 'onTerminalMouseOut',\n // Needs to be pointerdown to match DragHelper, otherwise will be preventing wrong event\n pointerdown : {\n handler : 'onTerminalPointerDown',\n capture : true\n },\n thisObj : me\n });\n });\n element.classList.add(terminalsVisibleCls);\n timeSpanRecord.internalCls.add(terminalsVisibleCls);\n }\n }\n fixSide(side) {\n if (side === 'left') {\n return 'start';\n }\n if (side === 'right') {\n return 'end';\n }\n return side;\n }\n /**\n * Hide terminals for specified event\n * @param {HTMLElement} eventElement Event element\n * @category Dependency creation\n */\n hideTerminals(eventElement) {\n // remove all terminals\n const\n me = this,\n { client } = me,\n eventParams = client.getTimeSpanMouseEventParams(eventElement),\n timeSpanRecord = eventParams?.[`${me.eventName}Record`],\n terminalsVisibleCls = `${me.terminalCls}s-visible`;\n eventElement.querySelector('.b-sch-terminal-hover-area')?.remove();\n DomHelper.forEachSelector(eventElement, `> ${client.eventInnerSelector} > .${me.terminalCls}`, terminal => {\n terminal.detacher?.();\n terminal.remove();\n });\n DomHelper.down(eventElement, client.eventInnerSelector).classList.remove(terminalsVisibleCls);\n timeSpanRecord?.internalCls.remove(terminalsVisibleCls);\n eventElement.classList.remove('b-hiding-terminals');\n }\n //endregion\n //region Dependency creation\n /**\n * Create a new dependency from source terminal to target terminal\n * @internal\n */\n createDependency(data) {\n const\n { source, target, fromSide, toSide } = data,\n type = (fromSide === 'start' ? 0 : 2) + (toSide === 'end' ? 1 : 0);\n const newDependency = this.dependencyStore.add({\n from : source.id,\n to : target.id,\n type,\n fromSide,\n toSide\n });\n return newDependency !== null ? newDependency[0] : null;\n }\n getTargetSideFromType(type) {\n if (type === DependencyBaseModel.Type.StartToStart || type === DependencyBaseModel.Type.EndToStart) {\n return 'start';\n }\n return 'end';\n }\n //endregion\n //region Tooltip\n /**\n * Update dependency creation tooltip\n * @private\n */\n updateCreationTooltip() {\n const me = this;\n if (!me.showCreationTooltip) {\n return;\n }\n const\n data = me.creationData,\n { valid } = data,\n tip = me.creationTooltip,\n { classList } = tip.element;\n // Promise, when using engine\n if (Objects.isPromise(valid)) {\n classList.remove('b-invalid');\n classList.add('b-checking');\n return new Promise(resolve => valid.then(valid => {\n data.valid = valid;\n if (!tip.isDestroyed) {\n resolve(me.updateCreationTooltip());\n }\n }));\n }\n tip.html = me.creationTooltipTemplate(data);\n }\n creationTooltipTemplate(data) {\n const\n me = this,\n { tooltip, valid } = data,\n { classList } = tooltip.element;\n Object.assign(data, {\n fromText : StringHelper.encodeHtml(data.source.name),\n toText : StringHelper.encodeHtml(data.target?.name ?? ''),\n fromSide : data.fromSide,\n toSide : data.toSide || ''\n });\n let tipTitleIconClsSuffix,\n tipTitleText;\n classList.toggle('b-invalid', !valid);\n classList.remove('b-checking');\n // Valid\n if (valid === true) {\n tipTitleIconClsSuffix = 'valid';\n tipTitleText = me.L('L{Dependencies.valid}');\n }\n // Invalid\n else {\n tipTitleIconClsSuffix = 'invalid';\n tipTitleText = me.L('L{Dependencies.invalid}');\n }\n tooltip.title = `${tipTitleText}`;\n return {\n children : [{\n className : 'b-sch-dependency-tooltip',\n children : [\n { dataset : { ref : 'fromLabel' }, tag : 'label', text : me.L('L{Dependencies.from}') },\n { dataset : { ref : 'fromText' }, text : data.fromText },\n { dataset : { ref : 'fromBox' }, className : `b-sch-box b-${data.fromSide}` },\n { dataset : { ref : 'toLabel' }, tag : 'label', text : me.L('L{Dependencies.to}') },\n { dataset : { ref : 'toText' }, text : data.toText },\n { dataset : { ref : 'toBox' }, className : `b-sch-box b-${data.toSide}` }\n ]\n }]\n };\n }\n //endregion\n doDisable(disable) {\n if (!this.isConfiguring) {\n this.updateCreateListeners();\n }\n super.doDisable(disable);\n }\n};\n", "const ROWS_PER_CELL = 25;\n// Mixin that handles the dependency grid cache\n//\n// Grid cache explainer\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// The purpose of the grid cache is to reduce the amount of dependencies we have to iterate over when drawing by\n// partitioning them into a virtual grid. With for example 10k deps we would have to iterate over all 10k on\n// each draw since any of them might be intersecting the view.\n//\n// The cells are horizontally based on ticks (50 per cell) and vertically on rows (also 50 per cell. Each cell\n// lists which dependencies intersect it. When drawing we only have to iterate over the dependencies for the\n// cells that intersect the viewport.\n//\n// The grid cache is populated when dependencies are drawn. Any change to deps, resources, events or assignments\n// clears the cache.\n//\n// The dependency drawn below will be included in the set that is considered for drawing if tickCell 0 or\n// tickCell 1 and rowCell 0 intersects the current view (it is thus represented twice in the grid cache)\n//\n// tickCell 0 tickCell 1\n// tick 0-49 tick 50-99\n// \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n// r r\u25020,0 \u25021,0 \u2502\n// o o\u2502 \u2502 \u2502 \u2502\n// w w\u2502 \u2502 !!!!!!!!!\u2502!!!!!!!!!!! \u2502\n// C \u2502 \u2502 ! View \u2502 ! \u2502\n// e 0\u2502 \u2502 ! port \u2502 ! \u2502\n// l -\u2502 \u2502 ! \u2502 ! \u2502\n// l 4\u2502 \u2514\u2500\u2500\u2500\u2500\u2500!\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500!\u2500\u2500\u2500\u2500\u25BA \u2502\n// 0 9\u2502 ! \u2502 ! \u2502\n// \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n// r r\u25020,1 ! \u25021,1 ! \u2502\n// o o\u2502 ! \u2502 ! \u2502\n// w w\u2502 !!!!!!!!!\u2502!!!!!!!!!!! \u2502\n// C \u2502 \u2502 \u2502\n// e 5\u2502 \u2502 \u2502\n// l 0\u2502 \u2502 \u2502\n// l -\u2502 \u2502 \u2502\n// 1 9\u2502 \u2502 \u2502\n// 9\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n// uo\u1D09\u0287\u0250\u0279\u0287sn\uA781\uA781\u1D09 \u0259\u0265\u0254\u0250\u0254 p\u1D09\u0279\u2141\nexport default Target => class DependencyGridCache extends Target {\n static $name = 'DependencyGridCache';\n gridCache = null;\n // Dependencies that might intersect the current viewport and thus should be considered for drawing\n getDependenciesToConsider(startMS, endMS, startIndex, endIndex) {\n const\n me = this,\n { gridCache } = me,\n { timeAxis } = me.client;\n if (gridCache) {\n const\n dependencies = new Set(),\n fromMSCell = Math.floor((startMS - timeAxis.startMS) / me.MS_PER_CELL),\n toMSCell = Math.floor((endMS - timeAxis.startMS) / me.MS_PER_CELL),\n fromRowCell = Math.floor(startIndex / ROWS_PER_CELL),\n toRowCell = Math.floor(endIndex / ROWS_PER_CELL);\n for (let i = fromMSCell; i <= toMSCell; i++) {\n const msCell = gridCache[i];\n if (msCell) {\n for (let j = fromRowCell; j <= toRowCell; j++) {\n const intersectingDependencies = msCell[j];\n if (intersectingDependencies) {\n for (let i = 0; i < intersectingDependencies.length; i++) {\n dependencies.add(intersectingDependencies[i]);\n }\n }\n }\n }\n }\n return dependencies;\n }\n }\n // A (single) dependency was drawn, we might want to store info about it in the grid cache\n afterDrawDependency(dependency, fromIndex, toIndex, fromDateMS, toDateMS) {\n const me = this;\n if (me.constructGridCache) {\n const\n { MS_PER_CELL } = me,\n {\n startMS : timeAxisStartMS,\n endMS : timeAxisEndMS\n } = me.client.timeAxis,\n timeAxisCells = Math.ceil((timeAxisEndMS - timeAxisStartMS) / MS_PER_CELL),\n fromMSCell = Math.floor((fromDateMS - timeAxisStartMS) / MS_PER_CELL),\n toMSCell = Math.floor((toDateMS - timeAxisStartMS) / MS_PER_CELL),\n fromRowCell = Math.floor(fromIndex / ROWS_PER_CELL),\n toRowCell = Math.floor(toIndex / ROWS_PER_CELL),\n firstMSCell = Math.min(fromMSCell, toMSCell),\n lastMSCell = Math.max(fromMSCell, toMSCell),\n firstRowCell = Math.min(fromRowCell, toRowCell),\n lastRowCell = Math.max(fromRowCell, toRowCell);\n // Ignore dependencies fully outside of the time axis\n if ((firstMSCell < 0 && lastMSCell < 0) || (firstMSCell > timeAxisCells && lastMSCell > timeAxisCells)) {\n return;\n }\n // Cache from time axis start, to time axis end (\"cropping\" deps starting or ending outside)\n const\n startMSCell = Math.max(firstMSCell, 0),\n endMSCell = Math.min(lastMSCell, timeAxisCells);\n for (let i = startMSCell; i <= endMSCell; i++) {\n const msCell = me.gridCache[i] ?? (me.gridCache[i] = {});\n for (let j = firstRowCell; j <= lastRowCell; j++) {\n const rowCell = msCell[j] ?? (msCell[j] = []);\n rowCell.push(dependency);\n }\n }\n }\n }\n // All dependencies are about to be drawn, check if we need to build the grid cache\n beforeDraw() {\n const me = this;\n if (!me.gridCache) {\n const { visibleDateRange } = me.client;\n me.constructGridCache = true;\n // Adjust number of ms used in grid cache to match viewport\n me.MS_PER_CELL = Math.max(visibleDateRange.endMS - visibleDateRange.startMS, 1000);\n // Start with empty cache, will be populated as deps are drawn\n me.gridCache = {};\n }\n }\n // All dependencies are drawn, we no longer need to rebuild the cache\n afterDraw() {\n this.constructGridCache = false;\n }\n reset() {\n this.gridCache = null;\n }\n};\n", "import Base from '../../Core/Base.js';\nimport ArrayHelper from '../../Core/helper/ArrayHelper.js';\nimport WalkHelper from '../../Core/helper/WalkHelper.js';\n// Start adjusting if there is system scaling > 130%\nconst\n THRESHOLD = Math.min(1 / globalThis.devicePixelRatio, 0.75),\n BOX_PROPERTIES = ['start', 'end', 'top', 'bottom'],\n equalEnough = (a, b) => Math.abs(a - b) < 0.1,\n sideToSide = {\n l : 'left',\n r : 'right',\n t : 'top',\n b : 'bottom'\n };\n/**\n * @module Scheduler/util/RectangularPathFinder\n */\n/**\n * Class which finds rectangular path, i.e. path with 90 degrees turns, between two boxes.\n * @private\n */\nexport default class RectangularPathFinder extends Base {\n static get configurable() {\n return {\n /**\n * Default start connection side: 'left', 'right', 'top', 'bottom'\n * @config {'top'|'bottom'|'left'|'right'}\n * @default\n */\n startSide : 'right',\n // /**\n // * Default start arrow size in pixels\n // * @config {Number}\n // * @default\n // */\n // startArrowSize : 0,\n /**\n * Default start arrow staff size in pixels\n * @config {Number}\n * @default\n */\n startArrowMargin : 12,\n /**\n * Default starting connection point shift from box's arrow pointing side middle point\n * @config {Number}\n * @default\n */\n startShift : 0,\n /**\n * Default end arrow pointing direction, possible values are: 'left', 'right', 'top', 'bottom'\n * @config {'top'|'bottom'|'left'|'right'}\n * @default\n */\n endSide : 'left',\n // /**\n // * Default end arrow size in pixels\n // * @config {Number}\n // * @default\n // */\n // endArrowSize : 0,\n /**\n * Default end arrow staff size in pixels\n * @config {Number}\n * @default\n */\n endArrowMargin : 12,\n /**\n * Default ending connection point shift from box's arrow pointing side middle point\n * @config {Number}\n * @default\n */\n endShift : 0,\n /**\n * Start / End box vertical margin, the amount of pixels from top and bottom line of a box where drawing\n * is prohibited\n * @config {Number}\n * @default\n */\n verticalMargin : 2,\n /**\n * Start / End box horizontal margin, the amount of pixels from left and right line of a box where drawing\n * @config {Number}\n * @default\n */\n horizontalMargin : 5,\n /**\n * Other rectangular areas (obstacles) to search path through\n * @config {Object[]}\n * @default\n */\n otherBoxes : null,\n /**\n * The owning Scheduler. Mandatory so that it can determin RTL state.\n * @config {Scheduler.view.Scheduler}\n * @private\n */\n client : {}\n };\n }\n /**\n * Returns list of horizontal and vertical segments connecting two boxes\n *
\n     *    |    | |  |    |       |\n     *  --+----+----+----*-------*---\n     *  --+=>Start  +----*-------*--\n     *  --+----+----+----*-------*--\n     *    |    | |  |    |       |\n     *    |    | |  |    |       |\n     *  --*----*-+-------+-------+--\n     *  --*----*-+         End <=+--\n     *  --*----*-+-------+-------+--\n     *    |    | |  |    |       |\n     * 
\n * Path goes by lines (-=) and turns at intersections (+), boxes depicted are adjusted by horizontal/vertical\n * margin and arrow margin, original boxes are smaller (path can't go at original box borders). Algorithm finds\n * the shortest path with minimum amount of turns. In short it's mix of \"Lee\" and \"Dijkstra pathfinding\"\n * with turns amount taken into account for distance calculation.\n *\n * The algorithm is not very performant though, it's O(N^2), where N is amount of\n * points in the grid, but since the maximum amount of points in the grid might be up to 34 (not 36 since\n * two box middle points are not permitted) that might be ok for now.\n *\n * @param {Object} lineDef An object containing any of the class configuration option overrides as well\n * as `startBox`, `endBox`, `startHorizontalMargin`, `startVerticalMargin`,\n * `endHorizontalMargin`, `endVerticalMargin` properties\n * @param {Object} lineDef.startBox An object containing `start`, `end`, `top`, `bottom` properties\n * @param {Object} lineDef.endBox An object containing `start`, `end`, `top`, `bottom` properties\n * @param {Number} lineDef.startHorizontalMargin Horizontal margin override for start box\n * @param {Number} lineDef.startVerticalMargin Vertical margin override for start box\n * @param {Number} lineDef.endHorizontalMargin Horizontal margin override for end box\n * @param {Number} lineDef.endVerticalMargin Vertical margin override for end box\n *\n *\n * @returns {Object[]|Boolean} Array of line segments or false if path cannot be found\n * @returns {Number} return.x1\n * @returns {Number} return.y1\n * @returns {Number} return.x2\n * @returns {Number} return.y2\n */\n //\n //@ignore\n //@privateparam {Function[]|Function} noPathFallbackFn\n // A function or array of functions which will be tried in case a path can't be found\n // Each function will be given a line definition it might try to adjust somehow and return.\n // The new line definition returned will be tried to find a path.\n // If a function returns false, then next function will be called if any.\n //\n findPath(lineDef, noPathFallbackFn) {\n const\n me = this,\n originalLineDef = lineDef;\n let lineDefFull,\n startBox,\n endBox,\n startShift,\n endShift,\n startSide,\n endSide,\n // startArrowSize,\n // endArrowSize,\n startArrowMargin,\n endArrowMargin,\n horizontalMargin,\n verticalMargin,\n startHorizontalMargin,\n startVerticalMargin,\n endHorizontalMargin,\n endVerticalMargin,\n otherHorizontalMargin,\n otherVerticalMargin,\n otherBoxes,\n connStartPoint, connEndPoint,\n pathStartPoint, pathEndPoint,\n gridStartPoint, gridEndPoint,\n startGridBox, endGridBox,\n grid, path, tryNum;\n noPathFallbackFn = ArrayHelper.asArray(noPathFallbackFn);\n for (tryNum = 0; lineDef && !path;) {\n lineDefFull = Object.assign(me.config, lineDef);\n startBox = lineDefFull.startBox;\n endBox = lineDefFull.endBox;\n startShift = lineDefFull.startShift;\n endShift = lineDefFull.endShift;\n startSide = lineDefFull.startSide;\n endSide = lineDefFull.endSide;\n // startArrowSize = lineDefFull.startArrowSize;\n // endArrowSize = lineDefFull.endArrowSize;\n startArrowMargin = lineDefFull.startArrowMargin;\n endArrowMargin = lineDefFull.endArrowMargin;\n horizontalMargin = lineDefFull.horizontalMargin;\n verticalMargin = lineDefFull.verticalMargin;\n startHorizontalMargin = lineDefFull.hasOwnProperty('startHorizontalMargin') ? lineDefFull.startHorizontalMargin : horizontalMargin;\n startVerticalMargin = lineDefFull.hasOwnProperty('startVerticalMargin') ? lineDefFull.startVerticalMargin : verticalMargin;\n endHorizontalMargin = lineDefFull.hasOwnProperty('endHorizontalMargin') ? lineDefFull.endHorizontalMargin : horizontalMargin;\n endVerticalMargin = lineDefFull.hasOwnProperty('endVerticalMargin') ? lineDefFull.endVerticalMargin : verticalMargin;\n otherHorizontalMargin = lineDefFull.hasOwnProperty('otherHorizontalMargin') ? lineDefFull.otherHorizontalMargin : horizontalMargin;\n otherVerticalMargin = lineDefFull.hasOwnProperty('otherVerticalMargin') ? lineDefFull.otherVerticalMargin : verticalMargin;\n otherBoxes = lineDefFull.otherBoxes;\n startSide = me.normalizeSide(startSide);\n endSide = me.normalizeSide(endSide);\n connStartPoint = me.getConnectionCoordinatesFromBoxSideShift(startBox, startSide, startShift);\n connEndPoint = me.getConnectionCoordinatesFromBoxSideShift(endBox, endSide, endShift);\n startGridBox = me.calcGridBaseBoxFromBoxAndDrawParams(startBox, startSide/*, startArrowSize*/, startArrowMargin, startHorizontalMargin, startVerticalMargin);\n endGridBox = me.calcGridBaseBoxFromBoxAndDrawParams(endBox, endSide/*, endArrowSize*/, endArrowMargin, endHorizontalMargin, endVerticalMargin);\n // Iterate over points and merge those which are too close to each other (e.g. if difference is less than one\n // over devicePixelRatio we won't even see this effect in GUI)\n // https://github.com/bryntum/support/issues/3923\n BOX_PROPERTIES.forEach(property => {\n // We're talking subpixel precision here, so it doesn't really matter which value we choose\n if (Math.abs(startGridBox[property] - endGridBox[property]) <= THRESHOLD) {\n endGridBox[property] = startGridBox[property];\n }\n });\n if (me.shouldLookForPath(startBox, endBox, startGridBox, endGridBox)) {\n otherBoxes = otherBoxes?.map(box =>\n me.calcGridBaseBoxFromBoxAndDrawParams(box, false/*, 0*/, 0, otherHorizontalMargin, otherVerticalMargin)\n );\n pathStartPoint = me.getConnectionCoordinatesFromBoxSideShift(startGridBox, startSide, startShift);\n pathEndPoint = me.getConnectionCoordinatesFromBoxSideShift(endGridBox, endSide, endShift);\n grid = me.buildPathGrid(startGridBox, endGridBox, pathStartPoint, pathEndPoint, startSide, endSide, otherBoxes);\n gridStartPoint = me.convertDecartPointToGridPoint(grid, pathStartPoint);\n gridEndPoint = me.convertDecartPointToGridPoint(grid, pathEndPoint);\n path = me.findPathOnGrid(grid, gridStartPoint, gridEndPoint, startSide, endSide);\n }\n // Loop if\n // - path is still not found\n // - have no next line definition (which should be obtained from call to one of the functions from noPathFallbackFn array\n // - have noPathFallBackFn array\n // - current try number is less then noPathFallBackFn array length\n for (lineDef = false; !path && !lineDef && noPathFallbackFn && tryNum < noPathFallbackFn.length; tryNum++) {\n lineDef = (noPathFallbackFn[tryNum])(lineDefFull, originalLineDef);\n }\n }\n if (path) {\n path = me.prependPathWithArrowStaffSegment(path, connStartPoint/*, startArrowSize*/, startSide);\n path = me.appendPathWithArrowStaffSegment(path, connEndPoint/*, endArrowSize*/, endSide);\n path = me.optimizePath(path);\n }\n return path;\n }\n // Compares boxes relative position in the given direction.\n // 0 - 1 is to the left/top of 2\n // 1 - 1 overlaps with left/top edge of 2\n // 2 - 1 is inside 2\n // -2 - 2 is inside 1\n // 3 - 1 overlaps with right/bottom edge of 2\n // 4 - 1 is to the right/bottom of 2\n static calculateRelativePosition(box1, box2, vertical = false) {\n const\n startProp = vertical ? 'top' : 'start',\n endProp = vertical ? 'bottom' : 'end';\n let result;\n if (box1[endProp] < box2[startProp]) {\n result = 0;\n }\n else if (box1[endProp] <= box2[endProp] && box1[endProp] >= box2[startProp] && box1[startProp] < box2[startProp]) {\n result = 1;\n }\n else if (box1[startProp] >= box2[startProp] && box1[endProp] <= box2[endProp]) {\n result = 2;\n }\n else if (box1[startProp] < box2[startProp] && box1[endProp] > box2[endProp]) {\n result = -2;\n }\n else if (box1[startProp] <= box2[endProp] && box1[endProp] > box2[endProp]) {\n result = 3;\n }\n else {\n result = 4;\n }\n return result;\n }\n // Checks if relative position of the original and marginized boxes is the same\n static boxOverlapChanged(startBox, endBox, gridStartBox, gridEndBox, vertical = false) {\n const\n calculateOverlap = RectangularPathFinder.calculateRelativePosition,\n originalOverlap = calculateOverlap(startBox, endBox, vertical),\n finalOverlap = calculateOverlap(gridStartBox, gridEndBox, vertical);\n return originalOverlap !== finalOverlap;\n }\n shouldLookForPath(startBox, endBox, gridStartBox, gridEndBox) {\n let result = true;\n // Only calculate overlap if boxes are narrow in horizontal direction\n if (\n // We refer to the original arrow margins because during lookup those might be nullified and we need some\n // criteria to tell if events are too narrow\n (startBox.end - startBox.start <= this.startArrowMargin || endBox.end - endBox.start <= this.endArrowMargin) &&\n Math.abs(RectangularPathFinder.calculateRelativePosition(startBox, endBox, true)) === 2\n ) {\n result = !RectangularPathFinder.boxOverlapChanged(startBox, endBox, gridStartBox, gridEndBox);\n }\n return result;\n }\n getConnectionCoordinatesFromBoxSideShift(box, side, shift) {\n let coords;\n // Note that we deal with screen geometry here, not logical dependency sides\n // Possible 'start' and 'end' have been resolved to box sides.\n switch (side) {\n case 'left':\n coords = {\n x : box.start,\n y : (box.top + box.bottom) / 2 + shift\n };\n break;\n case 'right':\n coords = {\n x : box.end,\n y : (box.top + box.bottom) / 2 + shift\n };\n break;\n case 'top':\n coords = {\n x : (box.start + box.end) / 2 + shift,\n y : box.top\n };\n break;\n case 'bottom':\n coords = {\n x : (box.start + box.end) / 2 + shift,\n y : box.bottom\n };\n break;\n }\n return coords;\n }\n calcGridBaseBoxFromBoxAndDrawParams(box, side/*, arrowSize*/, arrowMargin, horizontalMargin, verticalMargin) {\n let gridBox;\n switch (this.normalizeSide(side)) {\n case 'left':\n gridBox = {\n start : box.start - Math.max(/*arrowSize + */arrowMargin, horizontalMargin),\n end : box.end + horizontalMargin,\n top : box.top - verticalMargin,\n bottom : box.bottom + verticalMargin\n };\n break;\n case 'right':\n gridBox = {\n start : box.start - horizontalMargin,\n end : box.end + Math.max(/*arrowSize + */arrowMargin, horizontalMargin),\n top : box.top - verticalMargin,\n bottom : box.bottom + verticalMargin\n };\n break;\n case 'top':\n gridBox = {\n start : box.start - horizontalMargin,\n end : box.end + horizontalMargin,\n top : box.top - Math.max(/*arrowSize + */arrowMargin, verticalMargin),\n bottom : box.bottom + verticalMargin\n };\n break;\n case 'bottom':\n gridBox = {\n start : box.start - horizontalMargin,\n end : box.end + horizontalMargin,\n top : box.top - verticalMargin,\n bottom : box.bottom + Math.max(/*arrowSize + */arrowMargin, verticalMargin)\n };\n break;\n default:\n gridBox = {\n start : box.start - horizontalMargin,\n end : box.end + horizontalMargin,\n top : box.top - verticalMargin,\n bottom : box.bottom + verticalMargin\n };\n }\n return gridBox;\n }\n normalizeSide(side) {\n const { rtl } = this.client;\n side => sideToSide[side] || side;\n if (side === 'start') {\n return rtl ? 'right' : 'left';\n }\n if (side === 'end') {\n return rtl ? 'left' : 'right';\n }\n return side;\n }\n buildPathGrid(startGridBox, endGridBox, pathStartPoint, pathEndPoint, startSide, endSide, otherGridBoxes) {\n let xs, ys,\n y, x, ix, iy, xslen, yslen, ib, blen, box, permitted, point;\n const\n points = {},\n linearPoints = [];\n xs = [\n startGridBox.start,\n (startSide === 'left' || startSide === 'right') ? (startGridBox.start + startGridBox.end) / 2 : pathStartPoint.x,\n startGridBox.end,\n endGridBox.start,\n (endSide === 'left' || endSide === 'right') ? (endGridBox.start + endGridBox.end) / 2 : pathEndPoint.x,\n endGridBox.end\n ];\n ys = [\n startGridBox.top,\n (startSide === 'top' || startSide === 'bottom') ? (startGridBox.top + startGridBox.bottom) / 2 : pathStartPoint.y,\n startGridBox.bottom,\n endGridBox.top,\n (endSide === 'top' || endSide === 'bottom') ? (endGridBox.top + endGridBox.bottom) / 2 : pathEndPoint.y,\n endGridBox.bottom\n ];\n if (otherGridBoxes) {\n otherGridBoxes.forEach(box => {\n xs.push(box.start, (box.start + box.end) / 2, box.end);\n ys.push(box.top, (box.top + box.bottom) / 2, box.bottom);\n });\n }\n xs = [...new Set(xs.sort((a, b) => a - b))];\n ys = [...new Set(ys.sort((a, b) => a - b))];\n for (iy = 0, yslen = ys.length; iy < yslen; ++iy) {\n points[iy] = points[iy] || {};\n y = ys[iy];\n for (ix = 0, xslen = xs.length; ix < xslen; ++ix) {\n x = xs[ix];\n permitted = (\n (x <= startGridBox.start || x >= startGridBox.end || y <= startGridBox.top || y >= startGridBox.bottom) &&\n (x <= endGridBox.start || x >= endGridBox.end || y <= endGridBox.top || y >= endGridBox.bottom)\n );\n if (otherGridBoxes) {\n for (ib = 0, blen = otherGridBoxes.length; permitted && ib < blen; ++ib) {\n box = otherGridBoxes[ib];\n permitted = (x <= box.start || x >= box.end || y <= box.top || y >= box.bottom) ||\n // Allow point if it is a path start/end even if point is inside any box\n (x === pathStartPoint.x && y === pathStartPoint.y) ||\n (x === pathEndPoint.x && y === pathEndPoint.y);\n }\n }\n point = {\n distance : Number.MAX_SAFE_INTEGER,\n permitted,\n x,\n y,\n ix,\n iy\n };\n points[iy][ix] = point;\n linearPoints.push(point);\n }\n }\n return {\n width : xs.length,\n height : ys.length,\n xs,\n ys,\n points,\n linearPoints\n };\n }\n convertDecartPointToGridPoint(grid, point) {\n const\n x = grid.xs.indexOf(point.x),\n y = grid.ys.indexOf(point.y);\n return grid.points[y][x];\n }\n findPathOnGrid(grid, gridStartPoint, gridEndPoint, startSide, endSide) {\n const me = this;\n let path = false;\n if (gridStartPoint.permitted && gridEndPoint.permitted) {\n grid = me.waveForward(grid, gridStartPoint, 0);\n path = me.collectPath(grid, gridEndPoint, endSide);\n }\n return path;\n }\n // Returns neighbors from Von Neiman ambit (see Lee pathfinding algorithm description)\n getGridPointNeighbors(grid, gridPoint, predicateFn) {\n const\n ix = gridPoint.ix,\n iy = gridPoint.iy,\n result = [];\n let neighbor;\n // NOTE:\n // It's important to push bottom neighbors first since this method is used\n // in collectPath(), which recursively collects path from end to start node\n // and if bottom neighbors are pushed first in result array then collectPath()\n // will produce a line which is more suitable (pleasant looking) for our purposes.\n if (iy < grid.height - 1) {\n neighbor = grid.points[iy + 1][ix];\n (!predicateFn || predicateFn(neighbor)) && result.push(neighbor);\n }\n if (iy > 0) {\n neighbor = grid.points[iy - 1][ix];\n (!predicateFn || predicateFn(neighbor)) && result.push(neighbor);\n }\n if (ix < grid.width - 1) {\n neighbor = grid.points[iy][ix + 1];\n (!predicateFn || predicateFn(neighbor)) && result.push(neighbor);\n }\n if (ix > 0) {\n neighbor = grid.points[iy][ix - 1];\n (!predicateFn || predicateFn(neighbor)) && result.push(neighbor);\n }\n return result;\n }\n waveForward(grid, gridStartPoint, distance) {\n const me = this;\n // I use the WalkHelper here because a point on a grid and it's neighbors might be considered as a hierarchy.\n // The point is the parent node, and it's neighbors are the children nodes. Thus the grid here is hierarchical\n // data structure which can be walked. WalkHelper walks non-recursively which is exactly what I need as well.\n WalkHelper.preWalkUnordered(\n // Walk starting point - a node is a grid point and it's distance from the starting point\n [gridStartPoint, distance],\n // Children query function\n // NOTE: It's important to fix neighbor distance first, before waving to a neighbor, otherwise waving might\n // get through a neighbor point setting it's distance to a value more than (distance + 1) whereas we,\n // at the children querying moment in time, already know that the possibly optimal distance is (distance + 1)\n ([point, distance]) => me.getGridPointNeighbors(\n grid,\n point,\n neighborPoint => neighborPoint.permitted && (neighborPoint.distance > distance + 1)\n ).map(\n neighborPoint => [neighborPoint, distance + 1] // Neighbor distance fixation\n ),\n // Walk step iterator function\n ([point, distance]) => point.distance = distance // Neighbor distance applying\n );\n return grid;\n }\n collectPath(grid, gridEndPoint, endSide) {\n const\n me = this,\n path = [];\n let pathFound = true,\n neighbors,\n lowestDistanceNeighbor,\n xDiff, yDiff;\n while (pathFound && gridEndPoint.distance) {\n neighbors = me.getGridPointNeighbors(grid, gridEndPoint, point =>\n point.permitted && (point.distance === gridEndPoint.distance - 1)\n );\n pathFound = neighbors.length > 0;\n if (pathFound) {\n // Prefer turnless neighbors first\n neighbors = neighbors.sort((a, b) => {\n let xDiff, yDiff;\n xDiff = a.ix - gridEndPoint.ix;\n yDiff = a.iy - gridEndPoint.iy;\n const resultA = (\n ((endSide === 'left' || endSide === 'right') && yDiff === 0) ||\n ((endSide === 'top' || endSide === 'bottom') && xDiff === 0)\n ) ? -1 : 1;\n xDiff = b.ix - gridEndPoint.ix;\n yDiff = b.iy - gridEndPoint.iy;\n const resultB = (\n ((endSide === 'left' || endSide === 'right') && yDiff === 0) ||\n ((endSide === 'top' || endSide === 'bottom') && xDiff === 0)\n ) ? -1 : 1;\n if (resultA > resultB) return 1;\n if (resultA < resultB) return -1;\n // apply additional sorting to be sure to pick bottom path in IE\n if (resultA === resultB) return a.y > b.y ? -1 : a.y < b.y ? 1 : 0;\n });\n lowestDistanceNeighbor = neighbors[0];\n path.push({\n x1 : lowestDistanceNeighbor.x,\n y1 : lowestDistanceNeighbor.y,\n x2 : gridEndPoint.x,\n y2 : gridEndPoint.y\n });\n // Detecting new side, either xDiff or yDiff must be 0 (but not both)\n xDiff = lowestDistanceNeighbor.ix - gridEndPoint.ix;\n yDiff = lowestDistanceNeighbor.iy - gridEndPoint.iy;\n switch (true) {\n case !yDiff && xDiff > 0:\n endSide = 'left';\n break;\n case !yDiff && xDiff < 0:\n endSide = 'right';\n break;\n case !xDiff && yDiff > 0:\n endSide = 'top';\n break;\n case !xDiff && yDiff < 0:\n endSide = 'bottom';\n break;\n }\n gridEndPoint = lowestDistanceNeighbor;\n }\n }\n return pathFound && path.reverse() || false;\n }\n prependPathWithArrowStaffSegment(path, connStartPoint/*, startArrowSize*/, startSide) {\n if (path.length > 0) {\n const\n firstSegment = path[0],\n prependSegment = {\n x2 : firstSegment.x1,\n y2 : firstSegment.y1\n };\n switch (startSide) {\n case 'left':\n prependSegment.x1 = connStartPoint.x/* - startArrowSize*/;\n prependSegment.y1 = firstSegment.y1;\n break;\n case 'right':\n prependSegment.x1 = connStartPoint.x/* + startArrowSize*/;\n prependSegment.y1 = firstSegment.y1;\n break;\n case 'top':\n prependSegment.x1 = firstSegment.x1;\n prependSegment.y1 = connStartPoint.y/* - startArrowSize*/;\n break;\n case 'bottom':\n prependSegment.x1 = firstSegment.x1;\n prependSegment.y1 = connStartPoint.y/* + startArrowSize*/;\n break;\n }\n path.unshift(prependSegment);\n }\n return path;\n }\n appendPathWithArrowStaffSegment(path, connEndPoint/*, endArrowSize*/, endSide) {\n if (path.length > 0) {\n const\n lastSegment = path[path.length - 1],\n appendSegment = {\n x1 : lastSegment.x2,\n y1 : lastSegment.y2\n };\n switch (endSide) {\n case 'left':\n appendSegment.x2 = connEndPoint.x/* - endArrowSize*/;\n appendSegment.y2 = lastSegment.y2;\n break;\n case 'right':\n appendSegment.x2 = connEndPoint.x/* + endArrowSize*/;\n appendSegment.y2 = lastSegment.y2;\n break;\n case 'top':\n appendSegment.x2 = lastSegment.x2;\n appendSegment.y2 = connEndPoint.y/* - endArrowSize*/;\n break;\n case 'bottom':\n appendSegment.x2 = lastSegment.x2;\n appendSegment.y2 = connEndPoint.y/* + endArrowSize*/;\n break;\n }\n path.push(appendSegment);\n }\n return path;\n }\n optimizePath(path) {\n const optPath = [];\n let prevSegment,\n curSegment;\n if (path.length > 0) {\n prevSegment = path.shift();\n optPath.push(prevSegment);\n while (path.length > 0) {\n curSegment = path.shift();\n // both segments are as good as equal\n if (\n equalEnough(prevSegment.x1, curSegment.x1) && equalEnough(prevSegment.y1, curSegment.y1) &&\n equalEnough(prevSegment.x2, curSegment.x2) && equalEnough(prevSegment.y2, curSegment.y2)\n ) {\n prevSegment = curSegment;\n }\n // both segments are horizontal or very nearly so\n else if (equalEnough(prevSegment.y1, prevSegment.y2) && equalEnough(curSegment.y1, curSegment.y2)) {\n prevSegment.x2 = curSegment.x2;\n }\n // both segments are vertical or very nearly so\n else if (equalEnough(prevSegment.x1, prevSegment.x2) && equalEnough(curSegment.x1, curSegment.x2)) {\n prevSegment.y2 = curSegment.y2;\n }\n // segments have different orientation (path turn)\n else {\n optPath.push(curSegment);\n prevSegment = curSegment;\n }\n }\n }\n return optPath;\n }\n}\nRectangularPathFinder._$name = 'RectangularPathFinder';", "import DependencyModel from '../../model/DependencyModel.js';\nimport RectangularPathFinder from '../../util/RectangularPathFinder.js';\nimport DomHelper from '../../../Core/helper/DomHelper.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\nimport Rectangle from '../../../Core/helper/util/Rectangle.js';\n// Determine a line segments drawing direction\nfunction drawingDirection(pointSet) {\n if (pointSet.x1 === pointSet.x2) {\n return pointSet.y2 > pointSet.y1 ? 'd' : 'u';\n }\n return pointSet.x2 > pointSet.x1 ? 'r' : 'l';\n}\n// Determine a line segments length\nfunction segmentLength(pointSet) {\n return pointSet.x1 === pointSet.x2 ? pointSet.y2 - pointSet.y1 : pointSet.x2 - pointSet.x1;\n}\n// Define an arc to tie two line segments together\nfunction arc(pointSet, nextPointSet, radius) {\n const\n corner = drawingDirection(pointSet) + drawingDirection(nextPointSet),\n // Flip x if this or next segment is drawn right to left\n rx = radius * (corner.includes('l') ? -1 : 1),\n // Flip y if this or next segment is drawn bottom to top\n ry = radius * (corner.includes('u') ? -1 : 1),\n // Positive (0) or negative (1) angle\n sweep = corner === 'ur' || corner === 'lu' || corner === 'dl' || corner === 'rd' ? 1 : 0;\n return `a${rx},${ry} 0 0 ${sweep} ${rx},${ry}`;\n}\n// Define a line for a set of points, tying it together with the next set with an arc when applicable\nfunction line(pointSet, nextPointSet, location, radius, prevRadius) {\n // Horizontal or vertical line\n let line = pointSet.x1 === pointSet.x2 ? 'v' : 'h',\n useRadius = radius;\n // Add an arc?\n if (radius) {\n const\n // Length of this line segment\n length = segmentLength(pointSet),\n // Length of the next one. Both are needed to determine max radius (half of the shortest delta)\n nextLength = nextPointSet ? Math.abs(segmentLength(nextPointSet)) : Number.MAX_SAFE_INTEGER,\n // Line direction\n sign = Math.sign(length);\n // If we are not passed a radius from the previous line drawn, we use the configured radius. It is used to shorten\n // this lines length to fit the arc that connects it to the previous line\n if (prevRadius == null) {\n prevRadius = radius;\n }\n // We cannot use a radius larger than half our or our successor's length, doing so would make the segment too long\n // when the arc is created\n if (Math.abs(length) < radius * 2 || nextLength < radius * 2) {\n useRadius = Math.min(Math.abs(length), nextLength) / 2;\n }\n const\n // Radius of neighbouring arcs, subtracted from length below...\n subtract = location === 'single' ? 0 : location === 'first' ? useRadius : location === 'between' ? prevRadius + useRadius : /*last*/ prevRadius,\n // ...to produce the length of the line segment to draw\n useLength = length - subtract * sign;\n // Apply line segment length, unless it passed over 0 in which case we stick to 0\n line += Math.sign(useLength) !== sign ? 0 : useLength;\n // Add an arc if applicable\n if (location !== 'last' && location !== 'single' && useRadius > 0) {\n line += ` ${arc(pointSet, nextPointSet, useRadius)}`;\n }\n }\n // Otherwise take a shorter code path\n else {\n line += segmentLength(pointSet);\n }\n return {\n line,\n currentRadius : radius !== useRadius ? useRadius : null\n };\n}\n// Define an SVG path base on points from the path finder.\n// Each segment in the path can be joined by an arc\nfunction pathMapper(radius, points) {\n const { length } = points;\n if (!length) {\n return '';\n }\n let currentRadius = null;\n return `M${points[0].x1},${points[0].y1} ${points.map((pointSet, i) => {\n // Segment placement among all segments, used to determine if an arc should be added\n const\n location =\n length === 1 ? 'single'\n : i === length - 1 ? 'last'\n : i === 0 ? 'first'\n : 'between',\n lineSpec = line(pointSet, points[i + 1], location, radius, currentRadius);\n ({ currentRadius } = lineSpec);\n return lineSpec.line;\n }).join(' ')}`;\n}\n// Mixin that holds the code needed to generate DomConfigs for dependency lines\nexport default Target => class DependencyLineGenerator extends Target {\n static $name = 'DependencyLineGenerator';\n lineCache = {};\n onSVGReady() {\n const me = this;\n me.pathFinder = new RectangularPathFinder({\n ...me.pathFinderConfig,\n client : me.client\n });\n me.lineDefAdjusters = me.createLineDefAdjusters();\n me.createMarker();\n }\n changeRadius(radius) {\n if (radius !== null) {\n ObjectHelper.assertNumber(radius, 'radius');\n }\n return radius;\n }\n resetAtRuntime() {\n if (!this.isConfiguring) {\n this.reset();\n }\n }\n updateRadius() {\n this.resetAtRuntime();\n }\n updateRenderer() {\n this.resetAtRuntime();\n }\n changeClickWidth(width) {\n if (width !== null) {\n ObjectHelper.assertNumber(width, 'clickWidth');\n }\n return width;\n }\n updateClickWidth() {\n this.resetAtRuntime();\n }\n updateDrawAroundParents() {\n this.resetAtRuntime();\n }\n //region Marker\n createMarker() {\n const\n me = this,\n { markerDef } = me,\n svg = this.client.svgCanvas,\n // SVG markers has to use an id, we want the id to be per scheduler when using multiple\n markerId = markerDef ? `${me.client.id}-arrowEnd` : 'arrowEnd';\n me.marker?.remove();\n svg.style.setProperty('--scheduler-dependency-marker', `url(#${markerId})`);\n me.marker = DomHelper.createElement({\n parent : svg,\n id : markerId, \n tag : 'marker',\n className : 'b-sch-dependency-arrow',\n ns : 'http://www.w3.org/2000/svg',\n markerHeight : 11,\n markerWidth : 11,\n refX : 8.5,\n refY : 3,\n viewBox : '0 0 9 6',\n orient : 'auto-start-reverse',\n markerUnits : 'userSpaceOnUse',\n retainElement : true,\n children : [{\n tag : 'path',\n ns : 'http://www.w3.org/2000/svg',\n d : me.markerDef ?? 'M3,0 L3,6 L9,3 z'\n }]\n });\n }\n updateMarkerDef() {\n if (!this.isConfiguring) {\n this.createMarker();\n }\n }\n //endregion\n //region DomConfig\n getAssignmentElement(assignment) {\n // If we are dragging an event, we need to use the proxy element\n // (which is not the original element if we are not constrained to timeline)\n const proxyElement = this.client.features.eventDrag?.getProxyElement?.(assignment);\n return proxyElement || this.client.getElementFromAssignmentRecord(assignment);\n }\n // Generate a DomConfig for a dependency line between two assignments (tasks in Gantt)\n getDomConfigs(dependency, fromAssignment, toAssignment, forceBoxes) {\n const\n me = this,\n key = me.getDependencyKey(dependency, fromAssignment, toAssignment),\n // Under certain circumstances (scrolling) we might be able to reuse the previous DomConfig.\n cached = me.lineCache[key];\n // Create line def if not cached, or we are live drawing and have event elements (dragging, transitioning etc)\n if (me.constructLineCache || !cached || forceBoxes || (me.drawingLive && (me.getAssignmentElement(fromAssignment) || me.getAssignmentElement(toAssignment)))) {\n const\n lineDef = me.prepareLineDef(dependency, fromAssignment, toAssignment, forceBoxes),\n points = lineDef && me.pathFinder.findPath(lineDef, me.lineDefAdjusters),\n {\n client,\n clickWidth\n } = me,\n { toEvent } = dependency;\n if (points) {\n const\n highlighted = me.highlighted.get(dependency),\n domConfig = {\n tag : 'path',\n ns : 'http://www.w3.org/2000/svg',\n d : pathMapper(me.radius ?? 0, points),\n role : 'presentation',\n dataset : {\n syncId : key,\n depId : dependency.id,\n fromId : fromAssignment.id,\n toId : toAssignment.id\n },\n elementData : {\n dependency,\n points\n },\n class : {\n [me.baseCls] : 1,\n [dependency.cls] : dependency.cls,\n // Data highlight\n [dependency.highlighted] : dependency.highlighted,\n // Feature highlight\n [highlighted && [...highlighted].join(' ')] : highlighted,\n [me.noMarkerCls] : lineDef.hideMarker,\n 'b-inactive' : dependency.active === false,\n 'b-sch-bidirectional-line' : dependency.bidirectional,\n 'b-readonly' : dependency.readOnly,\n // If target event is outside the view add special CSS class to hide marker (arrow)\n 'b-sch-dependency-ends-outside' :\n (!toEvent.milestone && (toEvent.endDate <= client.startDate || client.endDate <= toEvent.startDate)) ||\n (toEvent.milestone && (toEvent.endDate < client.startDate || client.endDate < toEvent.startDate))\n }\n };\n me.renderer?.({\n domConfig,\n points,\n dependencyRecord : dependency,\n fromAssignmentRecord : fromAssignment,\n toAssignmentRecord : toAssignment,\n fromBox : lineDef.startBox,\n toBox : lineDef.endBox,\n fromSide : lineDef.startSide,\n toSide : lineDef.endSide\n });\n const configs = [domConfig];\n if (clickWidth > 1) {\n configs.push({\n ...domConfig, // Shallow on purpose, to not waste perf cloning deeply\n class : {\n ...domConfig.class,\n 'b-click-area' : 1\n },\n dataset : {\n ...domConfig.dataset,\n syncId : `${domConfig.dataset.syncId}-click-area`\n },\n style : {\n strokeWidth : clickWidth\n }\n });\n }\n return me.lineCache[key] = configs;\n }\n // Nothing to draw or cache\n return me.lineCache[key] = null;\n }\n return cached;\n }\n //endregion\n //region Bounds\n // Generates `otherBoxes` config for rectangular path finder, which push dependency line to the row boundary.\n // It should be enough to return single box with top/bottom taken from row top/bottom and left/right taken from source\n // box, extended by start arrow margin to both sides.\n generateBoundaryBoxes(box, side) {\n // For fromSide top, we do not want to push dependency line to the row boundary.\n if (side === 'top') {\n return [];\n }\n // We need two boxes for the bottom edge, because otherwise path cannot be found. Ideally that shouldn't be\n // necessary. Other solution would be to adjust bottom by -1px, but that would make some dependency lines to take\n // 1px different path on a row boundary, which doesn't look nice (but slightly more performant)\n if (side === 'bottom') {\n return [\n {\n start : box.left,\n end : box.left + box.width / 2,\n top : box.rowTop,\n bottom : box.rowBottom\n },\n {\n start : box.left + box.width / 2,\n end : box.right,\n top : box.rowTop,\n bottom : box.rowBottom\n }\n ];\n }\n else {\n return [\n {\n start : box.left - this.pathFinder.startArrowMargin,\n end : box.right + this.pathFinder.startArrowMargin,\n top : box.rowTop,\n bottom : box.rowBottom\n }\n ];\n }\n }\n // Bounding box for an assignment, uses elements bounds if rendered\n getAssignmentBounds(assignment) {\n const\n { client } = this,\n element = this.getAssignmentElement(assignment);\n if (element && !client.isExporting) {\n const rectangle = Rectangle.from(element, this.relativeTo);\n if (client.isHorizontal) {\n let row = client.getRowById(assignment.resource.id);\n if (row) {\n // Outside its row? It is being dragged, resolve new row\n if (rectangle.y < row.top || rectangle.bottom > row.bottom) {\n const overRow = client.rowManager.getRowAt(rectangle.center.y, true);\n if (overRow) {\n row = overRow;\n }\n }\n rectangle.rowTop = row.top;\n rectangle.rowBottom = row.bottom;\n }\n else {\n return client.getAssignmentEventBox(assignment, true);\n }\n }\n return rectangle;\n }\n return client.isEngineReady && client.getAssignmentEventBox(assignment, true);\n }\n //endregion\n //region Sides\n getConnectorStartSide(timeSpanRecord) {\n return this.client.currentOrientation.getConnectorStartSide(timeSpanRecord);\n }\n getConnectorEndSide(timeSpanRecord) {\n return this.client.currentOrientation.getConnectorEndSide(timeSpanRecord);\n }\n getDependencyStartSide(dependency) {\n const { fromEvent, type, fromSide } = dependency;\n if (fromSide) {\n return fromSide;\n }\n switch (true) {\n case type === DependencyModel.Type.StartToEnd:\n case type === DependencyModel.Type.StartToStart:\n return this.getConnectorStartSide(fromEvent);\n case type === DependencyModel.Type.EndToStart:\n case type === DependencyModel.Type.EndToEnd:\n return this.getConnectorEndSide(fromEvent);\n default:\n // Default value might not be applied yet when rendering early in Pro / Gantt\n return this.getConnectorEndSide(fromEvent);\n }\n }\n getDependencyEndSide(dependency) {\n const { toEvent, type, toSide } = dependency;\n if (toSide) {\n return toSide;\n }\n // Fallback to view trait if dependency end side is not given /*or can be obtained from type*/\n switch (true) {\n case type === DependencyModel.Type.EndToEnd:\n case type === DependencyModel.Type.StartToEnd:\n return this.getConnectorEndSide(toEvent);\n case type === DependencyModel.Type.EndToStart:\n case type === DependencyModel.Type.StartToStart:\n return this.getConnectorStartSide(toEvent);\n default:\n // Default value might not be applied yet when rendering early in Pro / Gantt\n return this.getConnectorStartSide(toEvent);\n }\n }\n //endregion\n //region Line def\n // An array of functions used to alter path config when no path found.\n // It first tries to shrink arrow margins and secondly hides arrows entirely\n createLineDefAdjusters() {\n const { client } = this;\n function shrinkArrowMargins(lineDef) {\n const { barMargin } = client;\n if (lineDef.startArrowMargin > barMargin || lineDef.endArrowMargin > barMargin) {\n lineDef.startArrowMargin = lineDef.endArrowMargin = barMargin;\n return lineDef;\n }\n return false;\n }\n function resetArrowMargins(lineDef) {\n if (lineDef.startArrowMargin > 0 || lineDef.endArrowMargin > 0) {\n lineDef.startArrowMargin = lineDef.endArrowMargin = 0;\n return lineDef;\n }\n return false;\n }\n function shrinkHorizontalMargin(lineDef, originalLineDef) {\n if (lineDef.horizontalMargin > 2) {\n lineDef.horizontalMargin = 1;\n originalLineDef.hideMarker = true;\n return lineDef;\n }\n return false;\n }\n const adjusters = [\n shrinkArrowMargins,\n resetArrowMargins,\n shrinkHorizontalMargin\n ];\n // When using nested events, we first try calculating a new path by ignoring nested parent boxes\n if (client.features.nestedEvents?.enabled) {\n adjusters.unshift(lineDef => {\n if (lineDef.otherBoxes.length) {\n lineDef.otherBoxes.length = lineDef.otherBoxes.nestedStart;\n }\n return lineDef;\n });\n }\n return adjusters;\n }\n // Overridden in Gantt\n adjustLineDef(dependency, lineDef) {\n return lineDef;\n }\n // Prepare data to feed to the path finder\n prepareLineDef(dependency, fromAssignment, toAssignment, forceBoxes) {\n const\n me = this,\n startSide = me.getDependencyStartSide(dependency),\n endSide = me.getDependencyEndSide(dependency),\n startRectangle = forceBoxes?.from ?? me.getAssignmentBounds(fromAssignment),\n endRectangle = forceBoxes?.to ?? me.getAssignmentBounds(toAssignment),\n otherBoxes = [];\n if (!startRectangle || !endRectangle) {\n return null;\n }\n let {\n startArrowMargin,\n verticalMargin\n } = me.pathFinder;\n if (me.client.isHorizontal) {\n // Only add otherBoxes if assignments are in different resources\n if (startRectangle.rowTop != null && startRectangle.rowTop !== endRectangle.rowTop) {\n otherBoxes.push(...me.generateBoundaryBoxes(startRectangle, startSide));\n }\n // Generate other boxes for nested event parents if configured to do so\n if (me.client.features.nestedEvents?.enabled && me.drawAroundParents) {\n const\n { resourceStore } = me.client,\n fromResource = fromAssignment.resource,\n toResource = toAssignment.resource,\n fromIndex = resourceStore.indexOf(fromResource),\n toIndex = resourceStore.indexOf(toResource),\n minIndex = Math.min(fromIndex, toIndex),\n maxIndex = Math.max(fromIndex, toIndex);\n otherBoxes.nestedStart = otherBoxes.length;\n for (const assignment of me.client.assignmentStore) {\n // Ignore leaf assignments\n if (assignment !== fromAssignment && assignment !== toAssignment && assignment.event?.isParent && fromAssignment.event.parent !== assignment.event && toAssignment.event.parent !== assignment.event) {\n const currentIndex = resourceStore.indexOf(assignment.resource);\n // Only add otherBoxes for assignments whose row is intersected by the dependency line\n if (currentIndex >= minIndex && currentIndex <= maxIndex) {\n const assignmentBox = me.getAssignmentBounds(assignment).inflate(startArrowMargin);\n // Flag to allow ignoring if no path can be found\n assignmentBox.isNestedParent = true;\n otherBoxes.push(assignmentBox);\n }\n }\n }\n }\n // Do not change start arrow margin in case dependency is bidirectional\n if (!dependency.bidirectional) {\n if (/(top|bottom)/.test(startSide)) {\n startArrowMargin = me.client.barMargin / 2;\n }\n verticalMargin = me.client.barMargin / 2;\n }\n }\n return me.adjustLineDef(dependency, {\n startBox : startRectangle,\n endBox : endRectangle,\n otherBoxes,\n startArrowMargin,\n verticalMargin,\n otherVerticalMargin : 0,\n otherHorizontalMargin : 0,\n startSide,\n endSide\n });\n }\n //endregion\n //region Cache\n // All dependencies are about to be drawn, check if we need to build the line cache\n beforeDraw() {\n super.beforeDraw();\n if (!Object.keys(this.lineCache).length) {\n this.constructLineCache = true;\n }\n }\n // All dependencies are drawn, we no longer need to rebuild the cache\n afterDraw() {\n super.afterDraw();\n this.constructLineCache = false;\n }\n reset() {\n super.reset();\n this.lineCache = {};\n }\n //endregion\n};\n", "import DateHelper from '../../../Core/helper/DateHelper.js';\nimport Tooltip from '../../../Core/widget/Tooltip.js';\n/**\n * @module Scheduler/feature/mixin/DependencyTooltip\n */\nconst\n // Map dependency type to side of a box, for displaying an icon in the tooltip\n fromBoxSide = [\n 'start',\n 'start',\n 'end',\n 'end'\n ],\n toBoxSide = [\n 'start',\n 'end',\n 'start',\n 'end'\n ];\n/**\n * Mixin that adds tooltip support to the {@link Scheduler/feature/Dependencies} feature.\n * @mixin\n */\nexport default Target => class DependencyTooltip extends Target {\n static $name = 'DependencyTooltip';\n static configurable = {\n /**\n * Set to `true` to show a tooltip when hovering a dependency line\n * @config {Boolean}\n * @default\n * @category Dependency tooltip\n */\n showTooltip : true,\n /**\n * Set to `true` to show the lag in the tooltip\n * @config {Boolean}\n * @default\n */\n showLagInTooltip : false,\n /**\n * A template function allowing you to configure the contents of the tooltip shown when hovering a\n * dependency line. You can return either an HTML string or a {@link DomConfig} object.\n * @prp {Function} tooltipTemplate\n * @param {Scheduler.model.DependencyBaseModel} dependency The dependency record\n * @returns {String|DomConfig}\n * @category Dependency tooltip\n */\n tooltipTemplate(dependency) {\n const me = this;\n return {\n children : [{\n className : 'b-sch-dependency-tooltip',\n children : [\n { tag : 'label', text : me.L('L{Dependencies.from}') },\n { text : dependency.fromEvent.name },\n { className : `b-sch-box b-${dependency.fromSide || fromBoxSide[dependency.type]}` },\n { tag : 'label', text : me.L('L{Dependencies.to}') },\n { text : dependency.toEvent.name },\n { className : `b-sch-box b-${dependency.toSide || toBoxSide[dependency.type]}` },\n me.showLagInTooltip && { tag : 'label', text : me.L('L{DependencyEdit.Lag}') },\n me.showLagInTooltip && { text : `${dependency.lag || 0} ${DateHelper.getLocalizedNameOfUnit(dependency.lagUnit, dependency.lag !== 1)}` }\n ]\n }]\n };\n },\n /**\n * A tooltip config object that will be applied to the dependency hover tooltip. Can be used to for example\n * customize delay\n * @config {TooltipConfig}\n * @category Dependency tooltip\n */\n tooltip : {\n $config : 'nullify',\n value : {}\n }\n };\n changeTooltip(tooltip, old) {\n const me = this;\n old?.destroy();\n if (!me.showTooltip || !tooltip) {\n return null;\n }\n return Tooltip.new({\n align : 'b-t',\n id : `${me.client.id}-dependency-tip`,\n forSelector : `.b-timelinebase:not(.b-eventeditor-editing,.b-taskeditor-editing,.b-resizing-event,.b-dragcreating,.b-dragging-event,.b-creating-dependency) .${me.baseCls}`,\n forElement : me.client.timeAxisSubGridElement,\n showOnHover : true,\n hoverDelay : 0,\n hideDelay : 0,\n anchorToTarget : false,\n textContent : false, // Skip max-width setting\n trackMouse : false,\n getHtml : me.getHoverTipHtml.bind(me)\n }, tooltip);\n }\n /**\n * Generates DomConfig content for the tooltip shown when hovering a dependency\n * @param {Object} tooltipConfig\n * @returns {DomConfig} DomConfig used as tooltips content\n * @private\n */\n getHoverTipHtml({ activeTarget }) {\n return this.tooltipTemplate(this.resolveDependencyRecord(activeTarget));\n }\n};\n", "import DomSync from '../../Core/helper/DomSync.js';\nimport VersionHelper from '../../Core/helper/VersionHelper.js';\nimport Rectangle from '../../Core/helper/util/Rectangle.js';\nimport Delayable from '../../Core/mixin/Delayable.js';\nimport InstancePlugin from '../../Core/mixin/InstancePlugin.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport AttachToProjectMixin from '../data/mixin/AttachToProjectMixin.js';\nimport DependencyCreation from './mixin/DependencyCreation.js';\nimport DependencyGridCache from './mixin/DependencyGridCache.js';\nimport DependencyLineGenerator from './mixin/DependencyLineGenerator.js';\nimport DependencyTooltip from './mixin/DependencyTooltip.js';\nconst\n eventNameMap = {\n click : 'Click',\n dblclick : 'DblClick',\n contextmenu : 'ContextMenu'\n },\n emptyObject = Object.freeze({});\n/**\n * @module Scheduler/feature/Dependencies\n */\nconst collectLinkedAssignments = assignment => {\n const result = [assignment];\n if (assignment.resource?.hasLinks) {\n // Fake linked assignments\n result.push(...assignment.resource.$links.map(l => ({\n id : `${l.id}_${assignment.id}`,\n resource : l,\n event : assignment.event,\n drawDependencies : assignment.drawDependencies\n })));\n }\n return result;\n};\n/**\n * Feature that draws dependencies between events. Uses a {@link Scheduler.data.DependencyStore} to determine which\n * dependencies to draw, if none is defined one will be created automatically. Dependencies can also be specified as\n * `scheduler.dependencies`, see example below:\n *\n * {@inlineexample Scheduler/feature/Dependencies.js}\n *\n * Dependencies also work in vertical mode:\n *\n * {@inlineexample Scheduler/feature/DependenciesVertical.js}\n *\n * To customize the dependency tooltip, you can provide the {@link #config-tooltip} config and specify a\n * {@link Core.widget.Tooltip#config-getHtml} function. For example:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * dependencies : {\n * tooltip : {\n * getHtml({ activeTarget }) {\n * const dependencyModel = scheduler.resolveDependencyRecord(activeTarget);\n *\n * if (!dependencyModel) return null;\n *\n * const { fromEvent, toEvent } = dependencyModel;\n *\n * return `${fromEvent.name} (${fromEvent.id}) -> ${toEvent.name} (${toEvent.id})`;\n * }\n * }\n * }\n * }\n * }\n * ```\n *\n * ## Styling dependency lines\n *\n * You can easily customize the arrows drawn between events. To change all arrows, apply the following basic SVG CSS:\n *\n * ```css\n * .b-sch-dependency {\n * stroke-width: 2;\n * stroke : red;\n * }\n *\n * .b-sch-dependency-arrow {\n * fill: red;\n * }\n * ```\n *\n * To style an individual dependency line, you can provide a [cls](#Scheduler/model/DependencyModel#field-cls) in your\n * data:\n *\n * ```json\n * {\n * \"id\" : 9,\n * \"from\" : 7,\n * \"to\" : 8,\n * \"cls\" : \"special-dependency\"\n * }\n * ```\n *\n * ```scss\n * // Make line dashed\n * .b-sch-dependency {\n * stroke-dasharray: 5, 5;\n * }\n * ```\n *\n * To customize the marker used for the lines (the arrow header), you can supply a SVG path definition to the\n * {@link #config-markerDef} config:\n *\n * {@inlineexample Scheduler/feature/DependenciesMarker.js}\n *\n * You can also specify a {@link #config-radius} to get lines with rounded \"corners\", for a less boxy look:\n *\n * {@inlineexample Scheduler/feature/DependenciesRadius.js}\n *\n * For advanced use cases, you can also manipulate the {@link DomConfig} used to create a dependency line in a\n * {@link #config-renderer} function.\n *\n * ## Adjusting terminals\n *\n * When hovering an event bar, terminals (connection points) for creating new dependencies are shown. By default, they\n * have a diameter of 12px and are positioned at the edge of the event bar. You can customize this by setting\n * {@link #config-terminalSize} and {@link #config-terminalOffset}. The example below uses larger terminals offset to\n * outside the event bar:\n *\n * {@inlineexample Scheduler/feature/DependenciesTerminals.js}\n *\n * This feature is **disabled** by default.\n * For info on enabling it, see {@link Grid.view.mixin.GridFeatures}.\n *\n * @demo Scheduler/dependencies\n *\n * @extends Core/mixin/InstancePlugin\n * @mixes Core/mixin/Delayable\n * @mixes Scheduler/feature/mixin/DependencyCreation\n * @mixes Scheduler/feature/mixin/DependencyTooltip\n * @classtype dependencies\n * @feature\n */\nexport default class Dependencies extends InstancePlugin.mixin(\n AttachToProjectMixin,\n Delayable,\n DependencyCreation,\n DependencyGridCache,\n DependencyLineGenerator,\n DependencyTooltip\n) {\n static $name = 'Dependencies';\n /**\n * Fired when dependencies are rendered\n * @on-owner\n * @event dependenciesDrawn\n */\n //region Config\n static configurable = {\n /**\n * The CSS class to add to a dependency line when hovering over it\n * @config {String}\n * @default\n * @private\n */\n overCls : 'b-sch-dependency-over',\n /**\n * The CSS class applied to dependency lines\n * @config {String}\n * @default\n * @private\n */\n baseCls : 'b-sch-dependency',\n /**\n * The CSS class applied to a too narrow dependency line (to hide markers)\n * @config {String}\n * @default\n * @private\n */\n noMarkerCls : 'b-sch-dependency-markerless',\n /**\n * SVG path definition used as marker (arrow head) for the dependency lines.\n * Should fit in a viewBox that is 9 x 6.\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * dependencies : {\n * // Circular marker\n * markerDef : 'M 2,3 a 3,3 0 1,0 6,0 a 3,3 0 1,0 -6,0'\n * }\n * }\n * });\n * ```\n *\n * @config {String}\n * @default 'M3,0 L3,6 L9,3 z'\n */\n markerDef : null,\n /**\n * Radius (in px) used to draw arcs where dependency line segments connect. Specify it to get a rounded look.\n * The radius will during drawing be reduced as needed on a per segment basis to fit lines.\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * dependencies : {\n * // Round the corner where line segments connect, similar to 'border-radius: 5px'\n * radius : 5\n * }\n * }\n * });\n * ```\n *\n *
Using a radius slightly degrades dependency rendering performance. If your app displays\n * a lot of dependencies, it might be worth taking this into account when deciding if you want to use radius\n * or not
\n *\n * @config {Number}\n */\n radius : null,\n /**\n * Renderer function, supply one if you want to manipulate the {@link DomConfig} object used to draw a\n * dependency line between two assignments.\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * dependencies : {\n * renderer({ domConfig, fromAssignmentRecord : from, toAssignmentRecord : to }) {\n * // Add a custom CSS class to dependencies between important assignments\n * domConfig.class.important = from.important || to.important;\n * domConfig.class.veryImportant = from.important && to.important;\n * }\n * }\n * }\n * }\n * ```\n *\n * @prp {Function}\n * @param {Object} renderData\n * @param {DomConfig} renderData.domConfig that will be used to create the dependency line, can be manipulated by the renderer\n * @param {Scheduler.model.DependencyModel} renderData.dependencyRecord The dependency being rendered\n * @param {Scheduler.model.AssignmentModel} renderData.fromAssignmentRecord Drawing line from this assignment\n * @param {Scheduler.model.AssignmentModel} renderData.toAssignmentRecord Drawing line to this assignment\n * @param {Object[]} renderData.points A collection of points making up the line segments for the dependency line.\n * Read-only in the renderer, any manipulation should be done to `domConfig`\n * @param {Core.helper.util.Rectangle} renderData.fromBox Bounds for the fromAssignment's element\n * @param {Core.helper.util.Rectangle} renderData.toBox Bounds for the toAssignment's element\n * @param {'top'|'right'|'bottom'|'left'} renderData.fromSide Drawn from this side of the fromAssignment\n * @param {'top'|'right'|'bottom'|'left'} renderData.toSide Drawn to this side of the fromAssignment\n * @returns {void}\n *\n * @category Rendering\n */\n renderer : null,\n /**\n * Specify `true` to highlight incoming and outgoing dependencies when hovering an event.\n * @prp {Boolean}\n */\n highlightDependenciesOnEventHover : null,\n /**\n * Specify `false` to prevent dependencies from being drawn during scroll, for smoother scrolling in schedules\n * with lots of dependencies. Dependencies will be drawn when scrolling stops instead.\n * @prp {Boolean}\n * @default\n */\n drawOnScroll : true,\n /**\n * The clickable/touchable width of the dependency line in pixels. Setting this to a number greater than 1 will\n * draw an invisible but clickable line along the same path as the dependency line, making it easier to click.\n * The tradeoff is that twice as many lines will be drawn, which can affect performance.\n * @prp {Number}\n */\n clickWidth : null,\n /**\n * By default, the refresh of dependencies is buffered by 10 milliseconds so that multiple changes\n * which may cause the dependency lines to become invalid are coalesced into one refresh. This is more\n * efficient, but may mean the dependency lines may lag behind expectations when moving a pointer.\n *\n * Set this to `true` to update dependency lines immediately upon any change which causes them\n * to require an update.\n * @prp {Boolean}\n * @default false\n * @private\n */\n immediateRefresh : null,\n /**\n * *Experimental* - This setting only applies when using dependencies with the nested events feature. In such\n * scenarios, enabling this config will cause the dependency lines to, when the algorithm determines it is\n * possible, be drawn around parent events, instead of through them.\n *\n * {@note}\n * Note that enabling this feature increases the complexity of dependency drawing, and it does have a negative\n * impact on performance.\n * {/@note}\n *\n * @prp {Boolean}\n */\n drawAroundParents : null\n };\n static delayable = {\n doRefresh : 10,\n rafRefresh : 'raf'\n };\n static get pluginConfig() {\n return {\n chain : ['render', 'onInternalPaint', 'onElementClick', 'onElementDblClick', 'onElementContextMenu', 'onElementMouseOver', 'onElementMouseOut', 'bindStore'],\n assign : ['getElementForDependency', 'getElementsForDependency', 'resolveDependencyRecord']\n };\n };\n domConfigs = new Map();\n drawingLive = false;\n lastScrollX = null;\n highlighted = new Map();\n // Cached lookups\n visibleResources = null;\n usingLinks = null;\n visibleDateRange = null;\n relativeTo = null;\n //endregion\n //region Init & destroy\n construct(client, config) {\n super.construct(client, config);\n const { scheduledEventName } = client;\n client.ion({\n svgCanvasCreated : 'onSVGReady',\n // These events trigger live refresh behaviour\n animationStart : 'refresh',\n // eventDrag in Scheduler, taskDrag in Gantt\n [scheduledEventName + 'DragStart'] : 'refresh',\n [scheduledEventName + 'DragAbort'] : 'refresh',\n [scheduledEventName + 'ResizeStart'] : 'refresh',\n [scheduledEventName + 'SegmentDragStart'] : 'refresh',\n [scheduledEventName + 'SegmentResizeStart'] : 'refresh',\n // These events shift the surroundings to such extent that grid cache needs rebuilding to be sure that\n // all dependencies are considered\n timelineViewportResize : 'reset',\n timeAxisViewModelUpdate : 'reset',\n toggleNode : 'reset',\n thisObj : this\n });\n client.rowManager.ion({\n refresh : 'reset', // For example when changing barMargin or rowHeight\n changeTotalHeight : 'reset', // For example when collapsing groups\n thisObj : this\n });\n this.bindStore(client.store);\n }\n doDisable(disable) {\n if (!this.isConfiguring) {\n // Need a flag to clear dependencies when disabled, since drawing is otherwise disabled too\n this._isDisabling = disable;\n this.draw();\n this._isDisabling = false;\n }\n super.doDisable(disable);\n }\n //endregion\n //region RefreshTriggers\n get rowStore() {\n return this.client.isVertical ? this.client.resourceStore : this.client.store;\n }\n // React to replacing or refreshing a display store\n bindStore(store) {\n const me = this;\n if (!me.client.isVertical) {\n me.detachListeners('store');\n if (me.client.usesDisplayStore) {\n store?.ion({\n name : 'store',\n refresh : 'onStoreRefresh',\n thisObj : me\n });\n me.reset();\n }\n }\n }\n onStoreRefresh() {\n this.reset();\n }\n attachToProject(project) {\n super.attachToProject(project);\n project?.ion({\n name : 'project',\n commitFinalized : 'reset',\n thisObj : this\n });\n }\n attachToResourceStore(resourceStore) {\n super.attachToResourceStore(resourceStore);\n resourceStore?.ion({\n name : 'resourceStore',\n change : 'onResourceStoreChange',\n refresh : 'onResourceStoreChange',\n thisObj : this\n });\n }\n onResourceStoreChange() {\n // Might have added or removed links, need to re-cache the flag\n this.usingLinks = null;\n this.reset();\n }\n attachToEventStore(eventStore) {\n super.attachToEventStore(eventStore);\n eventStore?.ion({\n name : 'eventStore',\n refresh : 'reset',\n thisObj : this\n });\n }\n attachToAssignmentStore(assignmentStore) {\n super.attachToAssignmentStore(assignmentStore);\n assignmentStore?.ion({\n name : 'assignmentStore',\n refresh : 'reset',\n thisObj : this\n });\n }\n attachToDependencyStore(dependencyStore) {\n super.attachToDependencyStore(dependencyStore);\n dependencyStore?.ion({\n name : 'dependencyStore',\n change : 'reset',\n refresh : 'reset',\n thisObj : this\n });\n }\n updateDrawOnScroll(drawOnScroll) {\n const me = this;\n me.detachListeners('scroll');\n if (drawOnScroll) {\n me.client.ion({\n name : 'scroll',\n scroll : 'doRefresh',\n horizontalScroll : 'onHorizontalScroll',\n prio : -100, // After Scheduler draws on scroll, since we target elements\n thisObj : me\n });\n }\n else {\n me.client.scrollable.ion({\n name : 'scroll',\n scrollEnd : 'draw',\n thisObj : me\n });\n me.client.timeAxisSubGrid.scrollable.ion({\n name : 'scroll',\n scrollEnd : 'draw',\n thisObj : me\n });\n }\n }\n onHorizontalScroll({ subGrid, scrollX }) {\n if (scrollX !== this.lastScrollX && subGrid === this.client.timeAxisSubGrid) {\n this.lastScrollX = scrollX;\n this.draw();\n }\n }\n onInternalPaint() {\n this.refresh();\n }\n //endregion\n //region Dependency types\n // Used by DependencyField\n static getLocalizedDependencyType(type) {\n return type ? this.L(`L{DependencyType.${type}}`) : '';\n }\n //endregion\n //region Elements\n getElementForDependency(dependency, fromAssignment, toAssignment) {\n return this.getElementsForDependency(dependency, fromAssignment, toAssignment)[0];\n }\n // NOTE: If we ever make this public we should change it to use the syncIdMap. Currently not needed since only\n // used in tests\n getElementsForDependency(dependency, fromAssignment, toAssignment) {\n // Selector targeting all instances of a dependency\n let selector = `[data-dep-id=\"${dependency.id}\"]`;\n // Optionally narrow it down to a single instance (assignment)\n if (fromAssignment) {\n selector += `[data-from-id=\"${fromAssignment.id}\"]`;\n }\n if (toAssignment) {\n selector += `[data-to-id=\"${toAssignment.id}\"]`;\n }\n return Array.from(this.client.svgCanvas.querySelectorAll(selector));\n }\n /**\n * Returns the dependency record for a DOM element\n * @param {HTMLElement} element The dependency line element\n * @returns {Scheduler.model.DependencyModel} The dependency record\n */\n resolveDependencyRecord(element) {\n return element.elementData?.dependency;\n }\n isDependencyElement(element) {\n return element.matches(`.${this.baseCls}`);\n }\n //endregion\n //region DOM Events\n onElementClick(event) {\n const dependency = this.resolveDependencyRecord(event.target);\n if (dependency) {\n const eventName = eventNameMap[event.type];\n /**\n * Fires on the owning Scheduler/Gantt when a context menu event is registered on a dependency line.\n * @event dependencyContextMenu\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The scheduler\n * @param {Scheduler.model.DependencyModel} dependency\n * @param {MouseEvent} event\n */\n /**\n * Fires on the owning Scheduler/Gantt when a click is registered on a dependency line.\n * @event dependencyClick\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The scheduler\n * @param {Scheduler.model.DependencyModel} dependency\n * @param {MouseEvent} event\n */\n /**\n * Fires on the owning Scheduler/Gantt when a double click is registered on a dependency line.\n * @event dependencyDblClick\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The scheduler\n * @param {Scheduler.model.DependencyModel} dependency\n * @param {MouseEvent} event\n */\n this.client.trigger(`dependency${eventName}`, {\n dependency,\n event\n });\n }\n }\n onElementDblClick(event) {\n return this.onElementClick(event);\n }\n onElementContextMenu(event) {\n return this.onElementClick(event);\n }\n onElementMouseOver(event) {\n const\n me = this,\n dependency = me.resolveDependencyRecord(event.target);\n if (dependency) {\n /**\n * Fires on the owning Scheduler/Gantt when the mouse moves over a dependency line.\n * @event dependencyMouseOver\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The scheduler\n * @param {Scheduler.model.DependencyModel} dependency\n * @param {MouseEvent} event\n */\n me.client.trigger('dependencyMouseOver', {\n dependency,\n event\n });\n if (me.overCls) {\n me.highlight(dependency);\n }\n }\n }\n onElementMouseOut(event) {\n const\n me = this,\n dependency = me.resolveDependencyRecord(event.target);\n if (dependency) {\n /**\n * Fires on the owning Scheduler/Gantt when the mouse moves out of a dependency line.\n * @event dependencyMouseOut\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The scheduler\n * @param {Scheduler.model.DependencyModel} dependency\n * @param {MouseEvent} event\n */\n me.client.trigger('dependencyMouseOut', {\n dependency,\n event\n });\n if (me.overCls) {\n me.unhighlight(dependency);\n }\n }\n }\n //endregion\n //region Export\n // Export calls this fn to determine if a dependency should be included or not\n isDependencyVisible(dependency) {\n const\n me = this,\n { rowStore } = me,\n {\n fromEvent,\n toEvent\n } = dependency;\n // Bail out early in case source or target doesn't exist\n if (!fromEvent || !toEvent) {\n return false;\n }\n const\n fromResource = fromEvent.resource,\n toResource = toEvent.resource;\n // Verify these are real existing Resources and not collapsed away (resource not existing in resource store)\n if (!rowStore.isAvailable(fromResource) || !rowStore.isAvailable(toResource)) {\n return false;\n }\n return fromEvent.isModel &&\n !fromResource.instanceMeta(rowStore).hidden &&\n !toResource.instanceMeta(rowStore).hidden;\n }\n //endregion\n //region Highlight\n updateHighlightDependenciesOnEventHover(enable) {\n const me = this;\n if (enable) {\n const { client } = me;\n client.ion({\n name : 'highlightOnHover',\n [`${client.scheduledEventName}MouseEnter`] : params => me.highlightEventDependencies(params.eventRecord || params.taskRecord),\n [`${client.scheduledEventName}MouseLeave`] : params => me.unhighlightEventDependencies(params.eventRecord || params.taskRecord),\n thisObj : me\n });\n }\n else {\n me.detachListeners('highlightOnHover');\n }\n }\n highlight(dependency, cls = this.overCls) {\n let classes = this.highlighted.get(dependency);\n if (!classes) {\n this.highlighted.set(dependency, classes = new Set());\n }\n classes.add(cls);\n // Update element directly instead of refreshing and letting DomSync handle it,\n // to optimize highlight performance with many dependencies on screen\n for (const element of this.getElementsForDependency(dependency)) {\n element.classList.add(cls);\n }\n }\n unhighlight(dependency, cls = this.overCls) {\n const classes = this.highlighted?.get(dependency);\n if (classes) {\n classes.delete(cls);\n if (!classes.size) {\n this.highlighted.delete(dependency);\n }\n }\n // Update element directly instead of refreshing and letting DomSync handle it,\n // to optimize highlight performance with many dependencies on screen\n for (const element of this.getElementsForDependency(dependency)) {\n element.classList.remove(cls);\n }\n }\n highlightEventDependencies(timespan, cls) {\n timespan.dependencies.forEach(dep => this.highlight(dep, cls));\n }\n unhighlightEventDependencies(timespan, cls) {\n timespan.dependencies.forEach(dep => this.unhighlight(dep, cls));\n }\n //endregion\n //region Drawing\n // Implemented in DependencyGridCache to return dependencies that might intersect the current viewport and thus\n // should be considered for drawing. Fallback value here is used when there is no grid cache (which happens when it\n // is reset. Also useful in case we want to have it configurable or opt out automatically for small datasets)\n getDependenciesToConsider(startMS, endMS, startIndex, endIndex) {\n const { eventStore } = this.project;\n // Get records from grid cache\n return super.getDependenciesToConsider?.(startMS, endMS, startIndex, endIndex) ??\n // Falling back to using all valid deps (fix for not trying to draw conflicted deps)\n this.project.dependencyStore.records.filter(d => d.isValid && !eventStore.isFiltered || (eventStore.isAvailable(d.fromEvent) && eventStore.isAvailable(d.toEvent)));\n }\n // String key used as syncId\n getDependencyKey(dependency, fromAssignment, toAssignment) {\n return `dep:${dependency.id};from:${fromAssignment.id};to:${toAssignment.id}`;\n }\n drawDependency(dependency, batch = false, forceBoxes = null) {\n const\n me = this,\n {\n domConfigs,\n client,\n rowStore,\n topIndex,\n bottomIndex\n } = me,\n {\n useInitialAnimation\n } = client,\n { idMap } = rowStore,\n {\n startMS,\n endMS\n } = me.visibleDateRange,\n {\n fromEvent,\n toEvent\n } = dependency;\n let fromAssigned = fromEvent.assigned,\n toAssigned = toEvent.assigned;\n if (\n // No point in trying to draw dep between unscheduled/non-existing events\n fromEvent.isScheduled && toEvent.isScheduled &&\n // Or unassigned ones\n fromAssigned?.size && toAssigned?.size\n ) {\n // Add links, if used\n if (me.usingLinks) {\n fromAssigned = [...fromAssigned].flatMap(collectLinkedAssignments);\n toAssigned = [...toAssigned].flatMap(collectLinkedAssignments);\n }\n for (const from of fromAssigned) {\n for (const to of toAssigned) {\n const\n // Using direct lookup in idMap instead of indexOf() for performance.\n // Resource might be filtered out or not exist at all\n fromIndex = idMap[from.resource?.id]?.index,\n toIndex = idMap[to.resource?.id]?.index,\n fromDateMS = Math.min(fromEvent.startDateMS, toEvent.startDateMS),\n toDateMS = Math.max(fromEvent.endDateMS, toEvent.endDateMS);\n // Draw only if dependency intersects view, unless it is part of an export\n if (\n client.isExporting || fromIndex != null && toIndex != null &&\n (from.drawDependencies !== false && to.drawDependencies !== false) &&\n (rowStore.isAvailable(from.resource) && (rowStore.isAvailable(to.resource))) && !(\n // Both ends above view\n (fromIndex < topIndex && toIndex < topIndex) ||\n // Both ends below view\n (fromIndex > bottomIndex && toIndex > bottomIndex) ||\n // Both ends before view\n (fromDateMS < startMS && toDateMS < startMS) ||\n // Both ends after view\n (fromDateMS > endMS && toDateMS > endMS)\n )\n ) {\n const\n key = me.getDependencyKey(dependency, from, to),\n lineDomConfigs = me.getDomConfigs(dependency, from, to, forceBoxes);\n if (lineDomConfigs) {\n // Allow deps to match animation delay of their events (the bottommost one) when fading in\n if (useInitialAnimation) {\n lineDomConfigs[0].style = {\n animationDelay : `${Math.max(fromIndex, toIndex) / 20 * 1000}ms`\n };\n }\n domConfigs.set(key, lineDomConfigs);\n }\n // No room to draw a line\n else {\n domConfigs.delete(key);\n }\n }\n // Give mixins a shot at running code after a dependency is drawn. Used by grid cache to cache the\n // dependency (when needed)\n me.afterDrawDependency(dependency, fromIndex, toIndex, fromDateMS, toDateMS);\n }\n }\n }\n if (!batch) {\n me.domSync();\n }\n }\n // Hooks used by grid cache, to keep code in this file readable\n afterDrawDependency(dependency, fromIndex, toIndex, fromDateMS, toDateMS) {\n super.afterDrawDependency?.(dependency, fromIndex, toIndex, fromDateMS, toDateMS);\n }\n beforeDraw() {\n super.beforeDraw?.();\n }\n afterDraw() {\n super.afterDraw?.();\n }\n // Update DOM\n domSync(targetElement = this.client.svgCanvas, batch = false) {\n DomSync.sync({\n targetElement,\n domConfig : {\n onlyChildren : true,\n children : Array.from(this.domConfigs.values()).flat()\n },\n syncIdField : 'syncId',\n releaseThreshold : 0,\n strict : true,\n callback() {\n }\n });\n if (batch) {\n this.clearDomConfigs();\n }\n }\n fillDrawingCache() {\n const\n me = this,\n { client } = me;\n // Cache subgrid bounds for the duration of this draw call to not have to figure it out per dep\n me.relativeTo = Rectangle.from(client.svgCanvas);\n // Cache other lookups too\n me.visibleResources = client.visibleResources;\n me.visibleDateRange = client.visibleDateRange;\n me.topIndex = me.rowStore.indexOf(me.visibleResources.first);\n me.bottomIndex = me.rowStore.indexOf(me.visibleResources.last);\n // Cache link lookup, to avoid semi-expensive flatMap calls in drawDependency\n if (me.usingLinks == null) {\n me.usingLinks = client.resourceStore.some(r => r.hasLinks);\n }\n }\n clearDomConfigs() {\n this.domConfigs.clear();\n }\n // Draw all dependencies intersecting the current viewport immediately\n draw() {\n const\n me = this,\n { client } = me,\n { visibleDateRange } = client;\n if (client.refreshSuspended || !client.foregroundCanvas || !visibleDateRange || !client.isEngineReady || (me.disabled && !me._isDisabling) || client.isExporting) {\n return;\n }\n me.fillDrawingCache();\n me.clearDomConfigs();\n // Nothing to draw if there are no rows or no ticks or we are disabled\n if (client.firstVisibleRow && client.lastVisibleRow && client.timeAxis.count && !me.disabled &&\n (visibleDateRange.endMS - visibleDateRange.startMS > 0)\n ) {\n const\n {\n topIndex,\n bottomIndex\n } = me,\n dependencies = me.getDependenciesToConsider(visibleDateRange.startMS, visibleDateRange.endMS, topIndex, bottomIndex);\n // Give mixins a shot at doing something before deps are drawn. Used by grid cache to determine if\n // the cache should be rebuilt\n me.beforeDraw();\n for (const dependency of dependencies) {\n me.drawDependency(dependency, true);\n }\n // Give mixins a shot at doing something after all deps are drawn\n me.afterDraw();\n }\n me.domSync();\n client.trigger('dependenciesDrawn');\n }\n //endregion\n //region Refreshing\n // Performs a draw on next frame, not intended to be called directly, call refresh() instead\n doRefresh() {\n const\n me = this,\n { client } = me,\n { scheduledEventName, features } = client;\n me.draw();\n // Refresh each frame during animations, during dragging & resizing (if we have dependencies)\n me.drawingLive = client.dependencyStore.count &&\n (\n client.isAnimating || (client.useInitialAnimation && client.eventStore.count) ||\n features[`${scheduledEventName}Drag`]?.isActivelyDragging ||\n features[`${scheduledEventName}Drag`]?.isAborting ||\n features[`${scheduledEventName}Resize`]?.isResizing ||\n features[`${scheduledEventName}SegmentDrag`]?.isActivelyDragging ||\n features[`${scheduledEventName}SegmentResize`]?.isResizing\n );\n me.drawingLive && me.refresh(false, true);\n }\n rafRefresh() {\n this.doRefresh.now();\n }\n /**\n * Redraws dependencies on the next animation frame\n */\n refresh(immediateRefresh = this.immediateRefresh, rafRefresh = false) {\n const\n me = this,\n { client } = me;\n // Queue up a draw unless refresh is suspended.\n // immediateRefresh must be true to function because this method may be used as an event listener\n // so therefore may receive an event object as a sole parameter.\n if (!client.refreshSuspended && !me.disabled && client.isPainted && !client.timeAxisSubGrid.collapsed) {\n if (immediateRefresh) {\n me.doRefresh.now();\n }\n // When live updating, we want to refresh on frame to avoid lagging behind\n else if (rafRefresh) {\n me.rafRefresh();\n }\n else {\n me.doRefresh();\n }\n }\n }\n // Resets grid cache and performs a draw on next frame. Conditions when it should be called:\n // * Zooming\n // * Shifting time axis\n // * Resizing window\n // * CRUD\n // ...\n reset({ source, type } = emptyObject) {\n super.reset?.();\n // Refresh immediately if the timeline viewport is changing size\n this.refresh(source === this.client && type === 'timelineviewportresize');\n }\n /**\n * Draws all dependencies for the specified task.\n * @deprecated 5.1 The Dependencies feature was refactored and this fn is no longer needed\n */\n drawForEvent() {\n VersionHelper.deprecate('Scheduler', '6.0.0', 'Dependencies.drawForEvent() is no longer needed');\n this.refresh();\n }\n //endregion\n //region Scheduler hooks\n render() {\n // Pull in the svg canvas early, to have it available during drawing\n this.client.getConfig('svgCanvas');\n }\n //endregion\n}\nDependencies._$name = 'Dependencies'; GridFeatureManager.registerFeature(Dependencies, false, ['Scheduler', 'ResourceHistogram']);\n", "import Popup from '../../Core/widget/Popup.js';\n/**\n * @module Scheduler/view/DependencyEditor\n */\n/**\n * A dependency editor popup.\n *\n * @extends Core/widget/Popup\n * @private\n */\nexport default class DependencyEditor extends Popup {\n static get $name() {\n return 'DependencyEditor';\n }\n static get defaultConfig() {\n return {\n items : [],\n draggable : {\n handleSelector : ':not(button,.b-field-inner)' // blacklist buttons and field inners\n },\n axisLock : 'flexible'\n };\n }\n processWidgetConfig(widget) {\n const { dependencyEditFeature } = this;\n if (widget.ref === 'lagField' && !dependencyEditFeature.showLagField) {\n return false;\n }\n if (widget.ref === 'deleteButton' && !dependencyEditFeature.showDeleteButton) {\n return false;\n }\n return super.processWidgetConfig(widget);\n }\n afterShow(...args) {\n const { deleteButton } = this.widgetMap;\n // Only show delete button if the dependency record belongs to a store\n if (deleteButton) {\n deleteButton.hidden = !this.record.isPartOfStore();\n }\n super.afterShow(...args);\n }\n onInternalKeyDown(event) {\n this.trigger('keyDown', { event });\n super.onInternalKeyDown(event);\n }\n}\nDependencyEditor._$name = 'DependencyEditor';", "import GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport Rectangle from '../../Core/helper/util/Rectangle.js';\nimport '../../Core/widget/DisplayField.js';\nimport '../../Core/widget/DurationField.js';\nimport DependencyEditor from '../view/DependencyEditor.js';\nimport InstancePlugin from '../../Core/mixin/InstancePlugin.js';\nimport DependencyModel from '../model/DependencyModel.js';\nimport Duration from '../../Core/data/Duration.js';\n/**\n * @module Scheduler/feature/DependencyEdit\n */\n/**\n * Feature that displays a popup containing fields for editing a dependency. Requires the\n * {@link Scheduler.feature.Dependencies} feature to be enabled. Double-click a dependency line in the demo below to\n * show the editor.\n *\n * {@inlineexample Scheduler/feature/Dependencies.js}\n *\n * ## Customizing the built-in widgets\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * columns : [\n * { field : 'name', text : 'Name', width : 100 }\n * ],\n * features : {\n * dependencies : true,\n * dependencyEdit : {\n * editorConfig : {\n * items : {\n * // Custom label for the type field\n * typeField : {\n * label : 'Kind'\n * }\n * },\n *\n * bbar : {\n * items : {\n * // Hiding save button\n * saveButton : {\n * hidden : true\n * }\n * }\n * }\n * }\n * }\n * }\n * });\n * ```\n *\n * ## Built-in widgets\n *\n * | Widget ref | Type | Weight | Description |\n * |------------------------|-----------------------------------|--------|---------------------------|\n * | `fromNameField` | {@link Core.widget.DisplayField} | 100 | From task name (readonly) |\n * | `toNameField` | {@link Core.widget.DisplayField} | 200 | To task name (readonly) |\n * | `typeField` | {@link Core.widget.Combo} | 300 | Edit type |\n * | `lagField` | {@link Core.widget.DurationField} | 400 | Edit lag |\n *\n * The built-in buttons are:\n *\n * | Widget ref | Type | Weight | Description |\n * |------------------------|----------------------------|--------|-----------------------------------|\n * | `saveButton` | {@link Core.widget.Button} | 100 | Save button on the bbar |\n * | `deleteButton` | {@link Core.widget.Button} | 200 | Delete button on the bbar |\n * | `cancelButton` | {@link Core.widget.Button} | 300 | Cancel editing button on the bbar |\n *\n * This feature is **disabled** by default.\n * For info on enabling it, see {@link Grid.view.mixin.GridFeatures}.\n *\n * @extends Core/mixin/InstancePlugin\n * @demo Scheduler/dependencies\n * @classtype dependencyEdit\n * @feature\n */\nexport default class DependencyEdit extends InstancePlugin {\n //region Config\n static get $name() {\n return 'DependencyEdit';\n }\n static get configurable() {\n return {\n /**\n * True to hide this editor if a click is detected outside it (defaults to true)\n * @config {Boolean}\n * @default\n * @category Editor\n */\n autoClose : true,\n /**\n * True to save and close this panel if ENTER is pressed in one of the input fields inside the panel.\n * @config {Boolean}\n * @default\n * @category Editor\n */\n saveAndCloseOnEnter : true,\n /**\n * True to show a delete button in the form.\n * @config {Boolean}\n * @default\n * @category Editor widgets\n */\n showDeleteButton : true,\n /**\n * The event that shall trigger showing the editor. Defaults to `dependencydblclick`, set to empty string or\n * `null` to disable editing of dependencies.\n * @config {String}\n * @default\n * @category Editor\n */\n triggerEvent : 'dependencydblclick',\n /**\n * True to show the lag field for the dependency\n * @config {Boolean}\n * @default\n * @category Editor widgets\n */\n showLagField : false,\n dependencyRecord : null,\n /**\n * Default editor configuration, used to configure the Popup.\n * @config {PopupConfig}\n * @category Editor\n */\n editorConfig : {\n title : 'L{Edit dependency}',\n localeClass : this,\n closable : true,\n defaults : {\n localeClass : this\n },\n items : {\n /**\n * Reference to the source task name field\n * @member {Core.widget.DisplayField} fromNameField\n * @readonly\n */\n fromNameField : {\n type : 'display',\n weight : 100,\n label : 'L{From}'\n },\n /**\n * Reference to the target task name field\n * @member {Core.widget.DisplayField} toNameField\n * @readonly\n */\n toNameField : {\n type : 'display',\n weight : 200,\n label : 'L{To}'\n },\n /**\n * Reference to the dependency type field\n * @member {Core.widget.Combo} typeField\n * @readonly\n */\n typeField : {\n type : 'combo',\n weight : 300,\n label : 'L{Type}',\n name : 'type',\n editable : false,\n valueField : 'id',\n displayField : 'name',\n localizeDisplayFields : true,\n buildItems : function() {\n const dialog = this.parent;\n return Object.keys(DependencyModel.Type).map(type => ({\n id : DependencyModel.Type[type],\n name : dialog.L(type),\n localeKey : type\n }));\n }\n },\n /**\n * Reference to the lag field\n * @member {Core.widget.DurationField} lagField\n * @readonly\n */\n lagField : {\n type : 'duration',\n weight : 400,\n label : 'L{Lag}',\n name : 'lag',\n allowNegative : true,\n highlightExternalChange : false\n }\n },\n bbar : {\n defaults : {\n localeClass : this\n },\n items : {\n foo : {\n type : 'widget',\n cls : 'b-label-filler'\n },\n /**\n * Reference to the save button, if used\n * @member {Core.widget.Button} saveButton\n * @readonly\n */\n saveButton : {\n color : 'b-green',\n text : 'L{Save}'\n },\n /**\n * Reference to the delete button, if used\n * @member {Core.widget.Button} deleteButton\n * @readonly\n */\n deleteButton : {\n color : 'b-gray',\n text : 'L{Delete}'\n },\n /**\n * Reference to the cancel button, if used\n * @member {Core.widget.Button} cancelButton\n * @readonly\n */\n cancelButton : {\n color : 'b-gray',\n text : 'L{Object.Cancel}'\n }\n }\n }\n }\n };\n }\n //endregion\n //region Init & destroy\n construct(client, config) {\n const me = this;\n client.dependencyEdit = me;\n super.construct(client, config);\n if (!client.features.dependencies) {\n throw new Error('Dependencies feature required when using DependencyEdit');\n }\n me.clientListenersDetacher = client.ion({\n [me.triggerEvent] : me.onActivateEditor,\n thisObj : me\n });\n }\n doDestroy() {\n this.clientListenersDetacher();\n this.editor?.destroy();\n super.doDestroy();\n }\n //endregion\n //region Editing\n changeEditorConfig(config) {\n const\n me = this,\n { autoClose, cls, client } = me;\n return ObjectHelper.assign({\n owner : client,\n align : 'b-t',\n id : `${client.id}-dependency-editor`, \n autoShow : false,\n anchor : true,\n scrollAction : 'realign',\n constrainTo : globalThis,\n autoClose,\n cls\n }, config);\n }\n //endregion\n //region Save\n get isValid() {\n return Object.values(this.editor.widgetMap).every(field => {\n if (!field.name || field.hidden) {\n return true;\n }\n return field.isValid !== false;\n });\n }\n get values() {\n const values = {};\n this.editor.eachWidget(widget => {\n if (!widget.name || widget.hidden) return;\n values[widget.name] = widget.value;\n }, true);\n return values;\n }\n /**\n * Template method, intended to be overridden. Called before the dependency record has been updated.\n * @param {Scheduler.model.DependencyModel} dependencyRecord The dependency record\n *\n **/\n onBeforeSave(dependencyRecord) {}\n /**\n * Template method, intended to be overridden. Called after the dependency record has been updated.\n * @param {Scheduler.model.DependencyModel} dependencyRecord The dependency record\n *\n **/\n onAfterSave(dependencyRecord) {}\n /**\n * Updates record being edited with values from the editor\n * @private\n */\n updateRecord(dependencyRecord) {\n const { values } = this;\n // Engine does not understand { magnitude, unit } syntax\n if (values.lag) {\n values.lagUnit = values.lag.unit;\n values.lag = values.lag.magnitude;\n }\n // Type replaces fromSide/toSide, if they are used\n if ('type' in values) {\n dependencyRecord.fromSide != null && (values.fromSide = null);\n dependencyRecord.toSide != null && (values.toSide = null);\n }\n // Chronograph doesn't filter out undefined fields, it nullifies them instead\n // https://github.com/bryntum/chronograph/issues/11\n ObjectHelper.cleanupProperties(values, true);\n dependencyRecord.set(values);\n }\n //endregion\n //region Events\n onPopupKeyDown({ event }) {\n if (event.key === 'Enter' && this.saveAndCloseOnEnter && event.target.tagName.toLowerCase() === 'input') {\n // Need to prevent this key events from being fired on whatever receives focus after the editor is hidden\n event.preventDefault();\n this.onSaveClick();\n }\n }\n onHide() {\n if (!this.isApplyingChanges) {\n this.afterCancel();\n }\n }\n async onSaveClick() {\n const me = this;\n // hide event is triggered asynchronously, we should keep the flag raised until the end\n me.isApplyingChanges = true;\n if (await me.save()) {\n me.afterSave();\n await me.editor.hide();\n me.isApplyingChanges = false;\n }\n else {\n me.isApplyingChanges = false;\n }\n }\n async onDeleteClick() {\n const me = this;\n me.isApplyingChanges = true;\n if (await me.deleteDependency()) {\n me.afterDelete();\n }\n await me.editor.hide();\n me.isApplyingChanges = false;\n }\n onCancelClick() {\n this.editor.hide();\n }\n afterSave() {}\n afterDelete() {}\n afterCancel() {}\n //region Editing\n // Called from editDependency() to actually show the editor\n internalShowEditor(dependencyRecord) {\n const\n me = this,\n {\n client,\n lastPointerDown\n } = me,\n { dependencies } = client.features,\n editor = me.getEditor(dependencyRecord),\n targetElement = dependencies?.getElementForDependency(dependencyRecord) || lastPointerDown?.target || client.timeAxisSubGridElement,\n targetRect = Rectangle.from(targetElement);\n me.loadRecord(dependencyRecord);\n /**\n * Fires on the owning Scheduler or Gantt widget when the editor for a dependency is available, but before it is shown. Allows\n * manipulating fields before the widget is shown.\n * @event beforeDependencyEditShow\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The scheduler or Gantt instance\n * @param {Scheduler.feature.DependencyEdit} dependencyEdit The dependencyEdit feature\n * @param {Scheduler.model.DependencyModel} dependencyRecord The record about to be shown in the editor.\n * @param {Core.widget.Popup} editor The editor popup\n */\n client.trigger('beforeDependencyEditShow', {\n dependencyEdit : me,\n dependencyRecord,\n editor\n });\n let alignSpec;\n if (lastPointerDown) {\n // offset props seem to be incorrect in SVG elements\n Object.defineProperties(lastPointerDown, {\n offsetX : { configurable : true, value : lastPointerDown.clientX - targetRect.x },\n offsetY : { configurable : true, value : lastPointerDown.clientY - targetRect.y }\n });\n alignSpec = {\n target : lastPointerDown,\n align : 't50-b0'\n };\n }\n else {\n alignSpec = {\n target : targetElement,\n align : 'c-c'\n };\n }\n const\n result = editor.showBy(alignSpec),\n labelled = [];\n // All of this measuring code can be removed when we transition to grid layout\n let labelWidth = 0;\n // Measure labels\n editor.eachWidget(widget => {\n const { labelElement, element } = widget;\n if (labelElement) {\n // Has top labels? Don't measure them (material)\n if (labelElement.getBoundingClientRect().top < element.getBoundingClientRect().top) {\n return false;\n }\n widget.labelWidth = null;\n labelWidth = Math.max(labelWidth, labelElement.offsetWidth);\n labelled.push(widget);\n }\n });\n // Match longest\n labelled.forEach(widget => widget.labelWidth = labelWidth);\n return result;\n }\n /**\n * Opens a popup to edit the passed dependency.\n * @param {Scheduler.model.DependencyModel} dependencyRecord The dependency to edit\n * @return {Promise} A Promise that yields `true` after the editor is shown\n * or `false` if some application logic vetoed the editing (see `beforeDependencyEdit` in the docs).\n */\n async editDependency(dependencyRecord) {\n const\n me = this,\n { client } = me;\n if (client.readOnly || dependencyRecord.readOnly ||\n /**\n * Fires on the owning Scheduler or Gantt widget before an dependency is displayed in the editor.\n * This may be listened for to allow an application to take over dependency editing duties. Return `false` to\n * stop the default editing UI from being shown or a `Promise` yielding `true` or `false` for async vetoing.\n * @event beforeDependencyEdit\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The scheduler or Gantt instance\n * @param {Scheduler.feature.DependencyEdit} dependencyEdit The dependencyEdit feature\n * @param {Scheduler.model.DependencyModel} dependencyRecord The record about to be shown in the editor.\n * @preventable\n * @async\n */\n await client.trigger('beforeDependencyEdit', { dependencyEdit : me, dependencyRecord }) === false\n ) {\n return false;\n }\n // wait till the editor is shown\n await this.internalShowEditor(dependencyRecord);\n return true;\n }\n //endregion\n //region Save\n /**\n * Gets an editor instance. Creates on first call, reuses on consecutive\n * @internal\n * @returns {Scheduler.view.DependencyEditor} Editor popup\n */\n getEditor() {\n const me = this;\n let { editor } = me;\n if (editor) {\n return editor;\n }\n editor = me.editor = DependencyEditor.new({\n dependencyEditFeature : me,\n autoShow : false,\n anchor : true,\n scrollAction : 'realign',\n constrainTo : globalThis,\n autoClose : me.autoClose,\n cls : me.cls,\n rootElement : me.client.rootElement,\n internalListeners : {\n keydown : me.onPopupKeyDown,\n hide : me.onHide,\n thisObj : me\n }\n }, me.editorConfig);\n if (editor.items.length === 0) {\n console.warn('Editor configured without any `items`');\n }\n // assign widget refs\n editor.eachWidget(widget => {\n const ref = widget.ref || widget.id;\n // don't overwrite if already defined\n if (ref && !me[ref]) {\n me[ref] = widget;\n }\n });\n me.saveButton?.ion({ click : 'onSaveClick', thisObj : me });\n me.deleteButton?.ion({ click : 'onDeleteClick', thisObj : me });\n me.cancelButton?.ion({ click : 'onCancelClick', thisObj : me });\n return me.editor;\n }\n //endregion\n //region Delete\n /**\n * Sets fields values from record being edited\n * @private\n */\n loadRecord(dependency) {\n const me = this;\n me.fromNameField.value = dependency.fromEvent.name;\n me.toNameField.value = dependency.toEvent.name;\n if (me.lagField) {\n me.lagField.value = new Duration(dependency.lag, dependency.lagUnit);\n }\n me.editor.record = me.dependencyRecord = dependency;\n }\n //endregion\n //region Stores\n /**\n * Saves the changes (applies them to record if valid, if invalid editor stays open)\n * @private\n * @fires beforeDependencySave\n * @fires beforeDependencyAdd\n * @fires afterDependencySave\n * @returns {*}\n */\n async save() {\n const\n me = this,\n { client, dependencyRecord } = me;\n if (!dependencyRecord || !me.isValid) {\n return;\n }\n const { dependencyStore, values } = me;\n /**\n * Fires on the owning Scheduler or Gantt widget before a dependency is saved using the dependency edit popup\n * @event beforeDependencySave\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The scheduler or Gantt instance\n * @param {Scheduler.model.DependencyModel} dependencyRecord The dependency about to be saved\n * @param {Object} values The new values\n * @preventable\n */\n if (client.trigger('beforeDependencySave', {\n dependencyRecord,\n values\n }) !== false) {\n me.onBeforeSave(dependencyRecord);\n me.updateRecord(dependencyRecord);\n // Check if this is a new record\n if (dependencyStore && !dependencyRecord.stores.length) {\n /**\n * Fires on the owning Scheduler or Gantt widget before a dependency is added from the dependency\n * edit popup\n * @event beforeDependencyAdd\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The scheduler or Gantt instance\n * @param {Scheduler.feature.DependencyEdit} dependencyEdit The dependency edit feature\n * @param {Scheduler.model.DependencyModel} dependencyRecord The dependency about to be added\n * @preventable\n */\n if (client.trigger('beforeDependencyAdd', { dependencyRecord, dependencyEdit : me }) === false) {\n return;\n }\n dependencyStore.add(dependencyRecord);\n }\n await client.project?.commitAsync();\n /**\n * Fires on the owning Scheduler or Gantt widget after a dependency is successfully saved using the\n * dependency edit popup\n * @event afterDependencySave\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The scheduler instance or Gantt instance\n * @param {Scheduler.model.DependencyModel} dependencyRecord The dependency about to be saved\n */\n client.trigger('afterDependencySave', { dependencyRecord });\n me.onAfterSave(dependencyRecord);\n }\n return dependencyRecord;\n }\n /**\n * Delete dependency being edited\n * @private\n * @fires beforeDependencyDelete\n */\n async deleteDependency() {\n const { client, editor, dependencyRecord } = this;\n /**\n * Fires on the owning Scheduler or Gantt widget before a dependency is deleted from the dependency\n * edit popup\n * @event beforeDependencyDelete\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The scheduler instance\n * @param {Scheduler.model.DependencyModel} dependencyRecord The dependency record about to be deleted\n * @preventable\n */\n if (client.trigger('beforeDependencyDelete', { dependencyRecord }) !== false) {\n if (editor.containsFocus) {\n editor.revertFocus();\n }\n client.dependencyStore.remove(dependencyRecord);\n await client.project?.commitAsync();\n return true;\n }\n return false;\n }\n get dependencyStore() {\n return this.client.dependencyStore;\n }\n //endregion\n //region Events\n onActivateEditor({ dependency, event }) {\n if (!this.disabled) {\n this.lastPointerDown = event;\n this.editDependency(dependency);\n }\n }\n //endregion\n}\nDependencyEdit._$name = 'DependencyEdit'; GridFeatureManager.registerFeature(DependencyEdit, false);\n", "import DomHelper from '../../Core/helper/DomHelper.js';\nimport InstancePlugin from '../../Core/mixin/InstancePlugin.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport Delayable from '../../Core/mixin/Delayable.js';\n/**\n * @module Scheduler/feature/ScheduleContext\n */\n/**\n * Allow visually selecting a schedule \"cell\" by clicking, or {@link #config-triggerEvent any other pointer gesture}.\n *\n * This feature is **disabled** by default\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * // Configure as a truthy value to enable the feature\n * scheduleContext : {\n * triggerEvent : 'hover',\n * renderer : (context, element) => {\n * element.innerText = '\uD83D\uDE0E';\n * }\n * }\n * }\n * });\n * ```\n *\n * The contextual details are available in the {@link #property-context} property.\n *\n * **Note that the context is cleared upon change of {@link Scheduler.view.Scheduler#property-viewPreset}\n * such as when zooming in or out.**\n *\n * {@inlineexample Scheduler/feature/ScheduleContext.js}\n *\n * @extends Core/mixin/InstancePlugin\n * @classtype scheduleContext\n * @feature\n */\nexport default class ScheduleContext extends InstancePlugin.mixin(Delayable) {\n static get $name() {\n return 'ScheduleContext';\n }\n static delayable = {\n syncContextElement : 'raf'\n };\n static configurable = {\n /**\n * The pointer event type to use to update the context. May be `'hover'` to highlight the\n * tick context when moving the mouse across the timeline.\n * @config {'click'|'hover'|'contextmenu'|'mousedown'}\n * @default\n */\n triggerEvent : 'click',\n /**\n * A function (or the name of a function) which may mutate the contents of the context overlay\n * element which tracks the active resource/tick context.\n *\n * @config {String|Function}\n * @param {TimelineContext} context The context being highlighted.\n * @param {HTMLElement} element The context highlight element. This will be empty each time.\n * @returns {void}\n */\n renderer : null,\n /**\n * The active context.\n * @member {TimelineContext} timelineContext\n * @readonly\n */\n context : {\n $config : {\n // Reject non-changes so that when using mousemove, we only update the context\n // when it changes.\n equal(c1, c2) {\n return c1?.index === c2?.index &&\n c1?.tickParentIndex === c2?.tickParentIndex &&\n !((c1?.tickStartDate || 0) - (c2?.tickStartDate || 0));\n }\n }\n }\n };\n /**\n * The contextual information about which cell was clicked on and highlighted.\n *\n * When the {@link Scheduler.view.Scheduler#property-viewPreset} is changed (such as when zooming)\n * the context is cleared and the highlight is removed.\n *\n * @member {Object} context\n * @property {Scheduler.view.TimelineBase} context.source The owning Scheduler\n * @property {Date} context.date Date at mouse position\n * @property {Scheduler.model.TimeSpan} context.tick A record which encapsulates the time axis tick clicked on.\n * @property {Number} context.tickIndex The index of the time axis tick clicked on.\n * @property {Date} context.tickStartDate The start date of the current time axis tick\n * @property {Date} context.tickEndDate The end date of the current time axis tick\n * @property {Grid.row.Row} context.row Clicked row (in horizontal mode only)\n * @property {Number} context.index Index of clicked resource\n * @property {Scheduler.model.ResourceModel} context.resourceRecord Resource record\n * @property {MouseEvent} context.event Browser event\n */\n construct(client, config) {\n super.construct(client, config);\n const\n { triggerEvent } = this,\n listeners = {\n datachange : 'syncContextElement',\n timeaxisviewmodelupdate : 'onTimeAxisViewModelUpdate',\n presetchange : 'clearContext',\n thisObj : this\n };\n // If mousemove is our trigger, we cab use the client's timelineContextChange event\n if (triggerEvent === 'mouseover') {\n listeners.timelineContextChange = 'onTimelineContextChange';\n }\n // Otherwise, we have to listen for the required events on Schedule and events\n else {\n // Context menu will be expected to update the context if click or mousedown\n // is the triggerEvent. Context menu is a mousedown gesture.\n if (triggerEvent === 'click' || triggerEvent === 'mousedown') {\n listeners.schedulecontextmenu = 'onScheduleContextGesture';\n }\n Object.assign(listeners, {\n [`schedule${triggerEvent}`] : 'onScheduleContextGesture',\n [`event${triggerEvent}`] : 'onScheduleContextGesture',\n ...listeners\n });\n }\n client.ion(listeners);\n client.rowManager.ion({\n rowheight : 'syncContextElement',\n thisObj : this\n });\n }\n changeTriggerEvent(triggerEvent) {\n // Both these things should route through to using the client's timelineContextChange event\n if (triggerEvent === 'hover' || triggerEvent === 'mousemove') {\n triggerEvent = 'mouseover';\n }\n return triggerEvent;\n }\n get element() {\n return this._element || (this._element = DomHelper.createElement({\n parent : this.client.timeAxisSubGridElement,\n className : 'b-schedule-selected-tick'\n }));\n }\n // Handle the Client's own timelineContextChange event which it maintains on mousemove\n onTimelineContextChange({ context }) {\n this.context = context;\n }\n // Handle the scheduleclick or eventclick Scheduler events if we re not using mouseover\n onScheduleContextGesture(context) {\n this.context = context;\n }\n onTimeAxisViewModelUpdate({ source : timeAxisViewModel }) {\n // Just a mutation of existing tick details, sync the element\n if (timeAxisViewModel.timeAxis.includes(this.context?.tick)) {\n this.syncContextElement();\n }\n // The tick has gone, we have moved to a new ViewPreset, so clear the context.\n else {\n this.clearContext();\n }\n }\n clearContext() {\n this.context = null;\n }\n updateContext(context, oldContext) {\n this.syncContextElement();\n }\n syncContextElement() {\n if (this.context && this.enabled) {\n const\n me = this,\n {\n client,\n element,\n context,\n renderer\n } = me,\n {\n isVertical\n } = client,\n {\n style\n } = element,\n row = isVertical ? client.rowManager.rows[0] : client.getRowFor(context.resourceRecord);\n if (row) {\n const\n {\n tickStartDate,\n tickEndDate,\n resourceRecord\n } = context,\n // get the position clicked based on dates\n renderData = client.currentOrientation.getTimeSpanRenderData({\n startDate : tickStartDate,\n endDate : tickEndDate,\n startDateMS : tickStartDate.getTime(),\n endDateMS : tickEndDate.getTime()\n }, resourceRecord);\n let top, width, height;\n if (isVertical) {\n top = renderData.top;\n width = renderData.resourceWidth;\n height = renderData.height;\n }\n else {\n top = row.top;\n width = renderData.width;\n height = row.height;\n }\n // Move to current cell\n style.display = '';\n style.width = `${width}px`;\n style.height = `${height}px`;\n DomHelper.setTranslateXY(element, renderData.left, top);\n // In case we updated on a datachange action : 'remove' or 'add' event.\n context.index = row.index;\n // Undo any contents added by the renderer last time round.\n element.innerHTML = '';\n // Show the context and the element to the renderer\n renderer && me.callback(renderer, me, [context, element]);\n }\n // No row for resource might mean it's scrolled out of view or filtered out\n // so just hide so that the next valid sync can restore it to visibility\n else {\n style.display = 'none';\n }\n }\n else {\n this.element.style.display = 'none';\n }\n }\n}\nScheduleContext.featureClass = 'b-scheduler-context';\nScheduleContext._$name = 'ScheduleContext'; GridFeatureManager.registerFeature(ScheduleContext, false, ['Scheduler']);\n", "import AttachToProjectMixin from '../../Scheduler/data/mixin/AttachToProjectMixin.js';\nimport CopyPasteBase from '../../Grid/feature/base/CopyPasteBase.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport './ScheduleContext.js';\nconst actions = {\n cut : 1,\n copy : 1,\n paste : 1\n};\n/**\n * @module Scheduler/feature/EventCopyPaste\n */\n/**\n * Allow using [Ctrl/CMD + C/X] and [Ctrl/CMD + V] to copy/cut and paste events.\n *\n * This feature also adds entries to the {@link Scheduler/feature/EventMenu} for copying & cutting (see example below\n * for how to configure) and to the {@link Scheduler/feature/ScheduleMenu} for pasting.\n *\n * You can configure how a newly pasted record is named using {@link #function-generateNewName}.\n *\n * {@inlineexample Scheduler/feature/EventCopyPaste.js}\n *\n * If you want to highlight the paste location when clicking in the schedule, consider enabling the\n * {@link Scheduler/feature/ScheduleContext} feature.\n *\n *
When used with Scheduler Pro, pasting will bypass any constraint set on the event to allow the\n * copy to be assigned the targeted date.
\n *\n * This feature is **enabled** by default.\n *\n * ## Customize menu items\n *\n * See {@link Scheduler/feature/EventMenu} and {@link Scheduler/feature/ScheduleMenu} for more info on customizing the\n * menu items supplied by the feature. This snippet illustrates the concept:\n *\n * ```javascript\n * // Custom copy text + remove cut option from event menu:\n * const scheduler = new Scheduler({\n * features : {\n * eventMenu : {\n * items : {\n * copyEvent : {\n * text : 'Copy booking'\n * },\n * cutEvent : false\n * }\n * }\n * }\n * });\n * ```\n *\n * ## Keyboard shortcuts\n *\n * The feature has the following default keyboard shortcuts:\n *\n * | Keys | Action | Action description |\n * |------------|----------|---------------------------------------------------|\n * | `Ctrl`+`C` | *copy* | Copies selected event(s) into the clipboard. |\n * | `Ctrl`+`X` | *cut* | Cuts out selected event(s) into the clipboard. |\n * | `Ctrl`+`V` | *paste* | Insert copied or cut event(s) from the clipboard. |\n *\n *
Please note that Ctrl is the equivalent to Command and Alt\n * is the equivalent to Option for Mac users
\n *\n * For more information on how to customize keyboard shortcuts, please see\n * [our guide](#Scheduler/guides/customization/keymap.md).\n *\n * ## Multi assigned events\n *\n * In a Scheduler that uses single assignment, copying and then pasting creates a clone of the event and assigns it\n * to the target resource. Cutting and pasting moves the original event to the target resource.\n *\n * In a Scheduler using multi assignment, the behaviour is slightly more complex. Cutting and pasting reassigns the\n * event to the target, keeping other assignments of the same event intact. The behaviour for copying and pasting is\n * configurable using the {@link #config-copyPasteAction} config. It accepts two values:\n *\n * * `'clone'` - The default, the event is cloned and the clone is assigned to the target resource. Very similar to the\n * behaviour with single assignment (event count goes up by 1).\n * * `'assign'` - The original event is assigned to the target resource (event count is unaffected).\n *\n * This snippet shows how to reconfigure it:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * eventCopyPaste : {\n * copyPasteAction : 'assign'\n * }\n * }\n * });\n * ```\n *\n *
Copying multiple assignments of the same event will always result in all but the first assignment\n * being removed on paste, since paste targets a single resource and an event can only be assigned to a resource once.\n *
\n *\n * ## Native/shared clipboard\n *\n * If you have multiple Schedulers (or other Bryntum products) on the same page, they will share clipboard. This makes\n * it possible to copy and paste between different Scheduler instances. It is also possible to use the native Clipboard\n * API if it is available and if you set {@link #config-useNativeClipboard} to `true`.\n *\n * Regardless of native clipboard availability, copy-pasting \"outside\" of the current Scheduler instance will convert\n * the copied events to a string. When pasting, the string will then be parsed back into events. In case of usage of the\n * native Clipboard API, this means it is possible to copy and paste events between completely different applications.\n *\n * To configure the fields that is converted and parsed from the copied string value, please see the\n * {@link #config-eventToStringFields} config.\n *\n * @extends Grid/feature/base/CopyPasteBase\n * @classtype eventCopyPaste\n * @feature\n */\nexport default class EventCopyPaste extends CopyPasteBase.mixin(AttachToProjectMixin) {\n static $name = 'EventCopyPaste';\n static pluginConfig = {\n assign : [\n 'copyEvents',\n 'pasteEvents'\n ],\n chain : [\n 'populateEventMenu',\n 'populateScheduleMenu',\n 'onEventDataGenerated'\n ]\n };\n static configurable = {\n /**\n * The field to use as the name field when updating the name of copied records\n * @config {String}\n * @default\n */\n nameField : 'name',\n /**\n * How to handle a copy paste operation when the host uses multi assignment. Either:\n *\n * - `'clone'` - The default, clone the copied event, assigning the clone to the target resource.\n * - `'assign'` - Add an assignment for the existing event to the target resource.\n *\n * For single assignment mode, it always uses the `'clone'` behaviour.\n *\n * @config {'clone'|'assign'}\n * @default\n */\n copyPasteAction : 'clone',\n /**\n * When copying events (or assignments), data will be sent to the clipboard as a tab (`\\t`) and new-line (`\\n`)\n * separated string with field values for fields present in this config (in specified order). The default\n * included fields are (in this order):\n * * name\n * * startDate\n * * endDate\n * * duration\n * * durationUnit\n * * allDay\n * To override, provide your own array of fields:\n * ```javascript\n * new Scheduler({\n * features : {\n * eventCopyPaste : {\n * eventToStringFields : [\n * 'name',\n * 'startDate',\n * 'endDate',\n * 'percentDone'\n * ]\n * }\n * }\n * });\n * ```\n *
Please note that this config is both used for **converting** events to a string value and\n * is also used to **parse** a string value to events.
\n * @config {Array}\n */\n eventToStringFields : ['name', 'startDate', 'endDate', 'duration', 'durationUnit', 'allDay']\n };\n construct(scheduler, config) {\n super.construct(scheduler, config);\n scheduler.ion({\n eventClick : 'onEventClick',\n scheduleClick : 'onScheduleClick',\n projectChange : () => {\n this.clearClipboard();\n this._cellClickedContext = null;\n },\n thisObj : this\n });\n }\n // Used in events to separate events from different features from each other\n entityName = 'event';\n get scheduler() {\n return this.client;\n }\n attachToEventStore(eventStore) {\n super.attachToEventStore(eventStore);\n delete this._eventClickedContext;\n }\n onEventDataGenerated(eventData) {\n const { assignmentRecord } = eventData;\n // No assignmentRecord for resource time ranges, which we want to ignore anyway\n if (assignmentRecord) {\n eventData.cls['b-cut-item'] = assignmentRecord.meta.isCut;\n }\n }\n onEventClick(context) {\n this._cellClickedContext = null;\n this._eventClickedContext = context;\n }\n onScheduleClick(context) {\n this._cellClickedContext = context;\n this._eventClickedContext = null;\n }\n isActionAvailable({ event, actionName }) {\n if (actions[actionName]) {\n // No action if\n // 1. there is selected text on the page\n // 2. cell editing is active\n // 3. cursor is not in the grid (filter bar etc)\n // 4. focus is on specialrow\n return !this.disabled &&\n globalThis.getSelection().toString().length === 0 &&\n !this.client.features.cellEdit?.isEditing &&\n Boolean(event.target.closest('.b-timeaxissubgrid')) &&\n !this.client.focusedCell?.isSpecialRow;\n }\n }\n async copy() {\n await this.copyEvents();\n }\n async cut() {\n await this.copyEvents(undefined, true);\n }\n async paste() {\n await this.pasteEvents();\n }\n /**\n * Copy events (when using single assignment mode) or assignments (when using multi assignment mode) to clipboard to\n * paste later\n * @fires beforeCopy\n * @fires copy\n * @param {Scheduler.model.EventModel[]|Scheduler.model.AssignmentModel[]} [records] Pass records to copy them,\n * leave out to copying current selection\n * @param {Boolean} [isCut] Copies by default, pass `true` to cut instead\n * @category Edit\n * @on-owner\n */\n async copyEvents(records = this.scheduler.selectedAssignments, isCut = false) {\n const\n me = this,\n { scheduler } = me;\n // Relay to original if split\n if (scheduler.splitFrom) {\n return scheduler.splitFrom.features.eventCopyPaste.copyEvents(records, isCut);\n }\n if (!records?.length) {\n return;\n }\n let assignmentRecords = records.slice(); // Slice to not lose records if selection changes\n if (records[0].isEventModel) {\n assignmentRecords = records.map(r => r.assignments).flat();\n }\n // Prevent cutting readOnly events\n if (isCut) {\n assignmentRecords = assignmentRecords.filter(a => !a.event.readOnly);\n }\n const eventRecords = assignmentRecords.map(a => a.event);\n if (!assignmentRecords.length || scheduler.readOnly) {\n return;\n }\n await me.writeToClipboard({ assignmentRecords, eventRecords }, isCut);\n /**\n * Fires on the owning Scheduler after a copy action is performed.\n * @event copy\n * @on-owner\n * @param {Scheduler.view.Scheduler} source Owner scheduler\n * @param {Scheduler.model.EventModel[]} eventRecords The event records that were copied\n * @param {Scheduler.model.AssignmentModel[]} assignmentRecords The assignment records that were copied\n * @param {Boolean} isCut `true` if this is a cut action\n * @param {String} entityName 'event' to distinguish this event from other copy events\n */\n scheduler.trigger('copy', { assignmentRecords, eventRecords, isCut, entityName : me.entityName });\n // refresh to call onEventDataGenerated and reapply the cls for records where the cut was canceled\n scheduler.refreshWithTransition();\n me._focusedEventOnCopy = me._eventClickedContext;\n }\n async beforeCopy({ data : { assignmentRecords, eventRecords }, isCut }) {\n /**\n * Fires on the owning Scheduler before a copy action is performed, return `false` to prevent the action\n * @event beforeCopy\n * @preventable\n * @on-owner\n * @async\n * @param {Scheduler.view.Scheduler} source Owner scheduler\n * @param {Scheduler.model.EventModel[]} eventRecords The event records about to be copied\n * @param {Scheduler.model.AssignmentModel[]} assignmentRecords The assignment records about to be copied\n * @param {Boolean} isCut `true` if this is a cut action\n * @param {String} entityName 'event' to distinguish this event from other beforeCopy events\n */\n return await this.scheduler.trigger('beforeCopy',\n { assignmentRecords, eventRecords, isCut, entityName : this.entityName });\n }\n // Called from Clipboardable when cutData changes\n handleCutData({ source }) {\n const me = this;\n if (source !== me && me.cutData?.length) {\n const { assignmentRecords, eventRecords } = me.cutData[0];\n if (assignmentRecords?.length) {\n me.scheduler.assignmentStore.remove(assignmentRecords);\n }\n if (eventRecords?.length) {\n me.scheduler.eventStore.remove(eventRecords);\n }\n }\n }\n /**\n * Called from Clipboardable after writing a non-string value to the clipboard\n * @param eventRecords\n * @returns {string}\n * @private\n */\n stringConverter({ eventRecords }) {\n const rows = [];\n for (const event of eventRecords) {\n rows.push(this.eventToStringFields.map(field => {\n const value = event[field];\n if (value instanceof Date) {\n return DateHelper.format(value, this.dateFormat);\n }\n return value;\n }).join('\\t'));\n }\n return rows.join('\\n');\n }\n // Called from Clipboardable for each cut out record\n setIsCut({ assignmentRecords }, isCut) {\n assignmentRecords.forEach(assignment => {\n assignment.meta.isCut = isCut;\n });\n // refresh to call onEventDataGenerated and reapply the cls for records where the cut was canceled\n this.scheduler.refreshWithTransition();\n }\n /**\n * Paste events or assignments to specified date and resource\n * @fires beforePaste\n * @fires paste\n * @param {Date} [date] Date where the events or assignments will be pasted\n * @param {Scheduler.model.ResourceModel} [resourceRecord] Resource to assign the pasted events or assignments to\n * @category Edit\n * @on-owner\n */\n async pasteEvents(date, resourceRecord) {\n const\n me = this,\n { scheduler } = me;\n // Relay to original if split\n if (scheduler.splitFrom) {\n return scheduler.splitFrom.features.eventCopyPaste.pasteEvents(date, resourceRecord);\n }\n const\n {\n entityName,\n isCut,\n _cellClickedContext,\n _eventClickedContext\n } = me,\n {\n eventStore,\n assignmentStore\n } = scheduler;\n if (arguments.length === 0) {\n if (_cellClickedContext) {\n date = _cellClickedContext.date;\n resourceRecord = _cellClickedContext.resourceRecord;\n }\n else if (me._focusedEventOnCopy !== _eventClickedContext) {\n date = _eventClickedContext.eventRecord.startDate;\n resourceRecord = _eventClickedContext.resourceRecord;\n }\n }\n if (resourceRecord) {\n resourceRecord = resourceRecord.$original;\n }\n const clipboardData = await me.readFromClipboard({ resourceRecord, date });\n if (!clipboardData?.assignmentRecords?.length) {\n return;\n }\n const\n {\n assignmentRecords,\n eventRecords\n } = clipboardData;\n let toFocus = null;\n const\n pastedEvents = new Set(),\n pastedEventRecords = [];\n for (const assignmentRecord of assignmentRecords) {\n let { event } = assignmentRecord;\n const\n targetResourceRecord = resourceRecord || assignmentRecord.resource,\n targetDate = date || assignmentRecord.event.startDate;\n // Pasting targets a specific resource, we cannot have multiple assignments to the same so remove all but\n // the first (happens when pasting multiple assignments of the same event)\n if (pastedEvents.has(event)) {\n if (isCut) {\n assignmentRecord.remove();\n }\n continue;\n }\n pastedEvents.add(event);\n // Cut always means reassign\n if (isCut) {\n assignmentRecord.meta.isCut = false;\n assignmentRecord.resource = targetResourceRecord;\n toFocus = assignmentRecord;\n }\n // Copy creates a new event in single assignment, or when configured to copy\n else if (!eventStore.usesResourceIds && (eventStore.usesSingleAssignment || me.copyPasteAction === 'clone')) {\n event = event.copy();\n event.name = me.generateNewName(event);\n eventStore.add(event);\n event.assign(targetResourceRecord);\n toFocus = assignmentStore.last;\n }\n // Safeguard against pasting on a resource where the event is already assigned,\n // a new assignment in multiassign mode will only change the date in such case\n else if (!event.resources.includes(targetResourceRecord)) {\n const newAssignmentRecord = assignmentRecord.copy();\n newAssignmentRecord.resource = targetResourceRecord;\n [toFocus] = assignmentStore.add(newAssignmentRecord);\n }\n event.startDate = targetDate;\n // Pro specific, to allow event to appear where pasted\n if (event.constraintDate) {\n event.constraintDate = null;\n }\n pastedEventRecords.push(event);\n }\n /**\n * Fires on the owning Scheduler after a paste action is performed.\n * @event paste\n * @on-owner\n * @param {Scheduler.view.Scheduler} source Owner scheduler\n * @param {Scheduler.model.EventModel[]} eventRecords Original events\n * @param {Scheduler.model.EventModel[]} pastedEventRecords Pasted events\n * @param {Scheduler.model.AssignmentModel[]} assignmentRecords Pasted assignments\n * @param {Date} date date Pasted to this date\n * @param {Scheduler.model.ResourceModel} resourceRecord The target resource record\n * @param {Boolean} isCut `true` if this is a cut action\n * @param {String} entityName 'event' to distinguish this event from other paste events\n */\n scheduler.trigger('paste', { assignmentRecords, pastedEventRecords, eventRecords, resourceRecord, date, isCut, entityName });\n // Focus the last pasted assignment\n const detacher = scheduler.ion({\n renderEvent({ assignmentRecord }) {\n if (assignmentRecord === toFocus) {\n scheduler.navigateTo(assignmentRecord, { scrollIntoView : false });\n detacher();\n }\n }\n });\n if (isCut) {\n await me.clearClipboard();\n }\n }\n // Called from Clipboardable before finishing the internal clipboard read\n async beforePaste({ data : { assignmentRecords, eventRecords }, resourceRecord, isCut, date }) {\n const\n { scheduler } = this,\n eventData = {\n assignmentRecords,\n eventRecords,\n resourceRecord : resourceRecord || assignmentRecords[0].resource,\n date,\n isCut,\n entityName : this.entityName\n };\n let reason;\n // No pasting to readOnly resources\n if (resourceRecord?.readOnly) {\n reason = 'resourceReadOnly';\n }\n if (!scheduler.allowOverlap) {\n const pasteWouldResultInOverlap = assignmentRecords.some(assignmentRecord => !scheduler.isDateRangeAvailable(\n assignmentRecord.event.startDate,\n assignmentRecord.event.endDate,\n isCut ? assignmentRecord.event : null,\n assignmentRecord.resource)\n );\n if (pasteWouldResultInOverlap) {\n reason = 'overlappingEvents';\n }\n }\n /**\n * Fires on the owning Scheduler if a paste action is not allowed\n * @event pasteNotAllowed\n * @on-owner\n * @param {Scheduler.view.Scheduler} source Owner scheduler\n * @param {Scheduler.model.EventModel[]} eventRecords\n * @param {Scheduler.model.AssignmentModel[]} assignmentRecords\n * @param {Date} date The paste date\n * @param {Scheduler.model.ResourceModel} resourceRecord The target resource record\n * @param {Boolean} isCut `true` if this is a cut action\n * @param {String} entityName 'event' to distinguish this event from other `pasteNotAllowed` events\n * @param {'overlappingEvents'|'resourceReadOnly'} reason A string id to use for displaying an error message to the user.\n */\n if (reason) {\n scheduler.trigger('pasteNotAllowed', {\n ...eventData,\n reason\n });\n return false;\n }\n /**\n * Fires on the owning Scheduler before a paste action is performed, return `false` to prevent the action\n * @event beforePaste\n * @preventable\n * @on-owner\n * @async\n * @param {Scheduler.view.Scheduler} source Owner scheduler\n * @param {Scheduler.model.EventModel[]} eventRecords The events about to be pasted\n * @param {Scheduler.model.AssignmentModel[]} assignmentRecords The assignments about to be pasted\n * @param {Date} date The date when the pasted events will be scheduled\n * @param {Scheduler.model.ResourceModel} resourceRecord The target resource record, the clipboard\n * event records will be assigned to this resource.\n * @param {Boolean} isCut `true` if this is a cut action\n * @param {String} entityName 'event' to distinguish this event from other beforePaste events\n */\n return await this.scheduler.trigger('beforePaste', eventData);\n }\n /**\n * Called from Clipboardable after reading from clipboard, and it is determined that the clipboard data is\n * \"external\"\n * @param json\n * @returns {Object}\n * @private\n */\n stringParser(clipboardData) {\n const\n { eventStore, assignmentStore } = this.scheduler,\n { modifiedRecords : eventRecords } = this.setFromStringData(clipboardData, true, eventStore, this.eventToStringFields),\n assignmentRecords = [];\n for (const event of eventRecords) {\n const assignment = new assignmentStore.modelClass({ eventId : event.id });\n assignment.event = event;\n assignmentRecords.push(assignment);\n }\n return { eventRecords, assignmentRecords };\n }\n populateEventMenu({ assignmentRecord, items }) {\n const\n me = this,\n { scheduler } = me;\n if (!scheduler.readOnly) {\n items.copyEvent = {\n text : 'L{copyEvent}',\n localeClass : me,\n icon : 'b-icon b-icon-copy',\n weight : 110,\n onItem : () => {\n const assignments = scheduler.isAssignmentSelected(assignmentRecord) ? scheduler.selectedAssignments : [assignmentRecord];\n me.copyEvents(assignments);\n }\n };\n items.cutEvent = {\n text : 'L{cutEvent}',\n localeClass : me,\n icon : 'b-icon b-icon-cut',\n weight : 120,\n disabled : assignmentRecord.event.readOnly,\n onItem : () => {\n const assignments = scheduler.isAssignmentSelected(assignmentRecord) ? scheduler.selectedAssignments : [assignmentRecord];\n me.copyEvents(assignments, true);\n }\n };\n }\n }\n populateScheduleMenu({ items, resourceRecord }) {\n const\n me = this,\n { scheduler } = me;\n if (!scheduler.readOnly && me.hasClipboardData() !== false) {\n items.pasteEvent = {\n text : 'L{pasteEvent}',\n localeClass : me,\n icon : 'b-icon b-icon-paste',\n disabled : scheduler.resourceStore.count === 0 || resourceRecord.readOnly,\n weight : 110,\n onItem : ({\n date, resourceRecord\n }) => {\n me.pasteEvents(date, resourceRecord, scheduler.getRowFor(resourceRecord));\n }\n };\n }\n }\n /**\n * A method used to generate the name for a copy pasted record. By defaults appends \"- 2\", \"- 3\" as a suffix.\n *\n * @param {Scheduler.model.EventModel} eventRecord The new eventRecord being pasted\n * @returns {String}\n */\n generateNewName(eventRecord) {\n const originalName = eventRecord.getValue(this.nameField);\n let counter = 2;\n while (this.client.eventStore.findRecord(this.nameField, `${originalName} - ${counter}`)) {\n counter++;\n }\n return `${originalName} - ${counter}`;\n }\n}\nEventCopyPaste.featureClass = 'b-event-copypaste';\nEventCopyPaste._$name = 'EventCopyPaste'; GridFeatureManager.registerFeature(EventCopyPaste, true, 'Scheduler');\n", "import DragBase from './base/DragBase.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport DomSync from '../../Core/helper/DomSync.js';\nimport Rectangle, { Point } from '../../Core/helper/util/Rectangle.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport EventHelper from '../../Core/helper/EventHelper.js';\n/**\n * @module Scheduler/feature/EventDrag\n */\n/**\n * Object with information about the drop point for a single dragged event.\n *\n * @typedef {Object} EventDropData\n * @property {Scheduler.model.EventModel} eventRecord The event about to be dropped. Note, that when\n * \"copying\" mode is enabled, this will still be the originally dragged event, not the copy\n * (which will be created only during drag'n'drop finalization).\n * @property {Date} startDate The estimated start date of the event after drop. Note, that actual start date\n * might be different because of the other features, affecting the scheduling, like dependencies and constraints.\n * @property {Date} endDate The estimated end date of the event after drop. Note, that actual end date\n * might be different because of the other features, affecting the scheduling, like dependencies and constraints.\n */\n/**\n * Object with information about the drop point for a dragged assignment.\n *\n * @typedef {Object} AssignmentDropData\n * @property {Scheduler.model.AssignmentModel} assignmentRecord The assignment about to be dropped. Note, that in case\n * if \"copying\" mode is enabled, this will still be the originally dragged assignment, not the copy\n * (which will be created only during drag'n'drop finalization).\n * @property {Scheduler.model.ResourceModel} resourceRecord The new resource for the assignment. Note, that resource\n * might belong to another project (in case of drag and drop between different scheduler instances).\n */\n/**\n * Object with information about the drop points for the dragged events.\n * It is used in the Scheduler's {@link Scheduler.view.Scheduler#event-beforeEventDropFinalize} event.\n *\n * @typedef {Object} DropData\n * @property {Array} events The array of drop points for every dragged event.\n * @property {Array} assignments The array of drop points for every dragged assignment.\n */\n/**\n * Allows user to drag and drop events within the scheduler, to change `startDate` or resource assignment.\n *\n * This feature is **enabled** by default\n *\n * ## Customizing the drag drop tooltip\n *\n * To show custom HTML in the tooltip, please see the {@link #config-tooltipTemplate} config. Example:\n *\n * ```javascript\n * features: {\n * eventDrag : {\n * // A minimal start date tooltip\n * tooltipTemplate : ({ eventRecord, startDate }) => {\n * return DateHelper.format(startDate, 'HH:mm');\n * }\n * }\n * }\n * ```\n *\n * ## Constraining the drag drop area\n *\n * You can constrain how the dragged event is allowed to move by using the following configs\n * * {@link #config-constrainDragToResource} Resource fixed, only allowed to change start date\n * * {@link #config-constrainDragToTimeSlot} Start date is fixed, only move between resources\n * * {@link Scheduler.view.Scheduler#config-getDateConstraints} A method on the Scheduler instance\n * which lets you define the date range for the dragged event programmatically\n *\n * ```js\n * // Enable dragging + constrain drag to current resource\n * const scheduler = new Scheduler({\n * features : {\n * eventDrag : {\n * constrainDragToResource : true\n * }\n * }\n * });\n * ```\n *\n * ## Drag drop events from outside\n *\n * Dragging unplanned events from an external grid is a very popular use case. There are\n * several demos showing you how to do this. Please see the [Drag from grid demo](../examples/dragfromgrid)\n * and study the **Drag from grid guide** to learn more.\n *\n * ## Drag drop events to outside target\n *\n * You can also drag events outside the schedule area by setting {@link #config-constrainDragToTimeline} to `false`. You\n * should also either:\n * * provide a {@link #config-validatorFn} to programmatically define if a drop location is valid or not\n * * configure a {@link #config-externalDropTargetSelector} CSS selector to define where drops are allowed\n *\n * See [this demo](../examples/drag-outside) to see this in action.\n *\n * ## Validating drag drop\n *\n * It is easy to programmatically decide what is a valid drag drop operation. Use the {@link #config-validatorFn}\n * and return either `true` / `false` (optionally a message to show to the user).\n *\n * ```javascript\n * features : {\n * eventDrag : {\n * validatorFn({ eventRecords, newResource }) {\n * const task = eventRecords[0],\n * valid = newResource.role === task.resource.role;\n *\n * return {\n * valid : newResource.role === task.resource.role,\n * message : valid ? '' : 'Resource role does not match required role for this task'\n * };\n * }\n * }\n * }\n * ```\n *\n * See [this demo](../examples/validation) to see validation in action.\n *\n * If you instead want to do a single validation upon drop, you can listen to {@link #event-beforeEventDropFinalize}\n * and set the `valid` flag on the context object provided.\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * listeners : {\n * beforeEventDropFinalize({ context }) {\n * const { eventRecords } = context;\n * // Don't allow dropping events in the past\n * context.valid = Date.now() <= eventRecords[0].startDate;\n * }\n * }\n * });\n * ```\n *\n * ## Preventing drag of certain events\n *\n * To prevent certain events from being dragged, you have two options. You can set {@link Scheduler.model.EventModel#field-draggable}\n * to `false` in your data, or you can listen for the {@link Scheduler.view.Scheduler#event-beforeEventDrag} event and\n * return `false` to block the drag.\n *\n * ```javascript\n * new Scheduler({\n * listeners : {\n * beforeEventDrag({ eventRecord }) {\n * // Don't allow dragging events that have already started\n * return Date.now() <= eventRecord.startDate;\n * }\n * }\n * })\n * ```\n *\n * {@inlineexample Scheduler/feature/EventDrag.js}\n *\n * {@note}\n * Events that are selected, but not visually accessible, are not included in drag operations. This means that events\n * in collapsed groups or filtered out resources are not dragged, even if they were selected prior to being collapsed\n * or filtered out of visibility.\n * {/@note}\n *\n * @demo Scheduler/basic\n *\n * @extends Scheduler/feature/base/DragBase\n * @classtype eventDrag\n * @feature\n */\nexport default class EventDrag extends DragBase {\n //region Config\n static get $name() {\n return 'EventDrag';\n }\n static get configurable() {\n return {\n /**\n * Template used to generate drag tooltip contents.\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * eventDrag : {\n * dragTipTemplate({eventRecord, startText}) {\n * return `${eventRecord.name}: ${startText}`\n * }\n * }\n * }\n * });\n * ```\n * @config {Function} tooltipTemplate\n * @param {Object} data Tooltip data\n * @param {Scheduler.model.EventModel} data.eventRecord\n * @param {Boolean} data.valid Currently over a valid drop target or not\n * @param {Date} data.startDate New start date\n * @param {Date} data.endDate New end date\n * @returns {String}\n */\n /**\n * Set to true to only allow dragging events within the same resource.\n * @member {Boolean} constrainDragToResource\n */\n /**\n * Set to true to only allow dragging events within the same resource.\n * @config {Boolean}\n * @default\n */\n constrainDragToResource : false,\n /**\n * Set to true to only allow dragging events to different resources, and disallow rescheduling by dragging.\n * @member {Boolean} constrainDragToTimeSlot\n */\n /**\n * Set to true to only allow dragging events to different resources, and disallow rescheduling by dragging.\n * @config {Boolean}\n * @default\n */\n constrainDragToTimeSlot : false,\n /**\n * A CSS selector specifying elements outside the scheduler element which are valid drop targets.\n * @config {String}\n */\n externalDropTargetSelector : null,\n /**\n * An empty function by default, but provided so that you can perform custom validation on the item being\n * dragged. This function is called during the drag and drop process and also after the drop is made.\n * Return `true` if the new position is valid, `false` to prevent the drag.\n *\n * ```javascript\n * features : {\n * eventDrag : {\n * validatorFn({ eventRecords, newResource }) {\n * const\n * task = eventRecords[0],\n * valid = newResource.role === task.resource.role;\n *\n * return {\n * valid : newResource.role === task.resource.role,\n * message : valid ? '' : 'Resource role does not match required role for this task'\n * };\n * }\n * }\n * }\n * ```\n * @param {Object} context A drag drop context object\n * @param {Date} context.startDate New start date\n * @param {Date} context.endDate New end date\n * @param {Scheduler.model.AssignmentModel[]} context.assignmentRecords Assignment records which were dragged\n * @param {Scheduler.model.EventModel[]} context.eventRecords Event records which were dragged\n * @param {Scheduler.model.ResourceModel} context.newResource New resource record\n * @param {Scheduler.model.EventModel} context.targetEventRecord Currently hovering this event record\n * @param {Event} event The event object\n * @returns {Boolean|Object} `true` if this validation passes, `false` if it does not.\n *\n * Or an object with 2 properties: `valid` - Boolean `true`/`false` depending on validity,\n * and `message` - String with a custom error message to display when invalid.\n * @config {Function}\n */\n validatorFn : (context, event) => {},\n /**\n * The `this` reference for the validatorFn\n * @config {Object}\n */\n validatorFnThisObj : null,\n /**\n * When the host Scheduler is `{@link Scheduler.view.mixin.EventSelection#config-multiEventSelect}: true`\n * then, there are two modes of dragging *within the same Scheduler*.\n *\n * Non unified means that all selected events are dragged by the same number of resource rows.\n *\n * Unified means that all selected events are collected together and dragged as one, and are all dropped\n * on the same targeted resource row at the same targeted time.\n * @member {Boolean} unifiedDrag\n */\n /**\n * When the host Scheduler is `{@link Scheduler.view.mixin.EventSelection#config-multiEventSelect}: true`\n * then, there are two modes of dragging *within the same Scheduler*.\n *\n * Non unified means that all selected events are dragged by the same number of resource rows.\n *\n * Unified means that all selected events are collected together and dragged as one, and are all dropped\n * on the same targeted resource row at the same targeted time.\n * @config {Boolean}\n * @default false\n */\n unifiedDrag : null,\n /**\n * A hook that allows manipulating the position the drag proxy snaps to. Manipulate the `snapTo` property\n * to alter snap position.\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * eventDrag : {\n * snapToPosition({ eventRecord, snapTo }) {\n * if (eventRecord.late) {\n * snapTo.x = 400;\n * }\n * }\n * }\n * }\n * });\n * ```\n *\n * @config {Function}\n * @param {Object} context\n * @param {Scheduler.model.AssignmentModel} context.assignmentRecord Dragged assignment\n * @param {Scheduler.model.EventModel} context.eventRecord Dragged event\n * @param {Scheduler.model.ResourceModel} context.resourceRecord Currently over this resource\n * @param {Date} context.startDate Start date for current position\n * @param {Date} context.endDate End date for current position\n * @param {Object} context.snapTo\n * @param {Number} context.snapTo.x X to snap to\n * @param {Number} context.snapTo.y Y to snap to\n * @returns {void}\n */\n snapToPosition : null,\n /**\n * A modifier key (CTRL, SHIFT, ALT, META) that when pressed will copy an event instead of moving it. Set to\n * empty string to disable copying\n * @prp {'CTRL'|'ALT'|'SHIFT'|'META'|''}\n * @default\n */\n copyKey : 'SHIFT',\n /**\n * Event can be copied two ways: either by adding new assignment to an existing event ('assignment'), or\n * by copying the event itself ('event'). 'auto' mode will pick 'event' for a single-assignment mode (when\n * event has `resourceId` field) and 'assignment' mode otherwise.\n * @prp {'auto'|'assignment'|'event'}\n * @default\n */\n copyMode : 'auto',\n /**\n * Mode of the current drag drop operation.\n * @member {'move'|'copy'}\n * @readonly\n */\n mode : 'move',\n capitalizedEventName : null\n };\n }\n afterConstruct() {\n this.capitalizedEventName = this.capitalizedEventName || this.client.capitalizedEventName;\n super.afterConstruct(...arguments);\n }\n //endregion\n changeMode(value) {\n const { dragData, copyMode } = this;\n // Do not create assignments in case scheduler doesn't use multiple assignments\n // Do not allow to copy recurring events\n if (\n (copyMode === 'event' || copyMode === 'auto' ||\n copyMode === 'assignment' && !this.scheduler.eventStore.usesSingleAssignment) &&\n (!dragData || dragData.eventRecords.every(r => !r.isRecurring))\n ) {\n return value;\n }\n }\n updateMode(mode) {\n if (this.dragData) {\n if (mode === 'copy') {\n this.setCopying();\n }\n else {\n this.setMoving();\n }\n /**\n * Triggered when drag mode is changed, for example when copy key is\n * pressed or released while dragging.\n * @event eventDragModeChange\n * @param {String} mode Drag mode, could be either 'move', 'copy', or 'auto'\n * @on-owner\n */\n this.client.trigger('eventDragModeChange', { mode });\n }\n }\n setCopying() {\n const { dragData } = this;\n if (!dragData) {\n return;\n }\n // Check if proxies are added to the DOM by checking if any of them is\n if (!dragData.eventBarCopies.some(el => el.isConnected)) {\n dragData.eventBarCopies.forEach(el => {\n el.classList.add('b-drag-proxy-copy');\n // hidden class can be added by the drag feature if we're dragging event outside\n el.classList.remove('b-hidden');\n dragData.context.grabbedParent.appendChild(el);\n // Mark this node as ignored for the DomSync\n el.retainElement = true;\n });\n }\n else {\n dragData.eventBarCopies.forEach(el => {\n el.classList.remove('b-hidden');\n });\n }\n }\n setMoving() {\n const { dragData } = this;\n if (!dragData) {\n return;\n }\n dragData.eventBarCopies.forEach(el => {\n el.classList.add('b-hidden');\n });\n }\n //region Events\n /**\n * This event is fired on the owning Scheduler after the event drag operation completes, but before changing any data.\n * It allows implementer to use asynchronous validation/finalization by setting `context.async = true`\n * in the listener, for example, to show a confirmation popup, make async data request etc.\n * In such case, implementer need to call the `context.finalize()` method manually:\n *\n * ```javascript\n * scheduler.on('beforeeventdropfinalize', ({ context }) => {\n * context.async = true;\n * setTimeout(() => {\n * // `true` to perform the drop, `false` to ignore it\n * context.finalize(true);\n * }, 1000);\n * })\n * ```\n *\n * For synchronous one-time validation, simply set `context.valid` to true or false.\n * ```javascript\n * scheduler.on('beforeeventdropfinalize', ({ context }) => {\n * context.valid = false;\n * })\n * ```\n * @event beforeEventDropFinalize\n * @on-owner\n * @param {Scheduler.view.Scheduler} source Scheduler instance\n * @param {Object} context\n * @param {DropData} context.dropData Information about the drop points for dragged events/assignments.\n * @param {Boolean} context.async Set to `true` to not finalize the drag-drop operation immediately (e.g. to wait for user confirmation)\n * @param {Scheduler.model.EventModel[]} context.eventRecords Event records being dragged\n * @param {Scheduler.model.AssignmentModel[]} context.assignmentRecords Assignment records being dragged\n * @param {Scheduler.model.EventModel} context.targetEventRecord Event record for drop target\n * @param {Scheduler.model.ResourceModel} context.newResource Resource record for drop target\n * @param {Boolean} context.valid Set this to `false` to abort the drop immediately.\n * @param {Function} context.finalize Call this method after an **async** finalization flow, to finalize the drag-drop operation. This method accepts one\n * argument: pass `true` to update records, or `false` to ignore changes\n * @param {MouseEvent} domEvent Browser event\n */\n /**\n * Fired on the owning Scheduler after event drop\n * @event afterEventDrop\n * @on-owner\n * @param {Scheduler.view.Scheduler} source\n * @param {Scheduler.model.AssignmentModel[]} assignmentRecords\n * @param {Scheduler.model.EventModel[]} eventRecords\n * @param {Boolean} valid\n * @param {Object} context\n * @param {MouseEvent} domEvent Browser event\n */\n /**\n * Fired on the owning Scheduler when an event is dropped\n * @event eventDrop\n * @on-owner\n * @param {Scheduler.view.Scheduler} source\n * @param {Scheduler.model.EventModel[]} eventRecords\n * @param {Scheduler.model.AssignmentModel[]} assignmentRecords\n * @param {HTMLElement} externalDropTarget The HTML element dropped upon, if drop happened on a valid external drop target\n * @param {Boolean} isCopy\n * @param {Object} context\n * @param {Scheduler.model.EventModel} context.targetEventRecord Event record for drop target\n * @param {Scheduler.model.ResourceModel} context.newResource Resource record for drop target\n * @param {MouseEvent} domEvent Browser event\n */\n /**\n * Fired on the owning Scheduler before event dragging starts. Return `false` to prevent the action.\n * @event beforeEventDrag\n * @on-owner\n * @preventable\n * @param {Scheduler.view.Scheduler} source Scheduler instance\n * @param {Scheduler.model.EventModel} eventRecord Event record the drag starts from\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record the drag starts from\n * @param {Scheduler.model.EventModel[]} eventRecords Event records being dragged\n * @param {Scheduler.model.AssignmentModel[]} assignmentRecords Assignment records being dragged\n * @param {MouseEvent} event Browser event DEPRECATED (replaced by domEvent)\n * @param {MouseEvent} domEvent Browser event\n */\n /**\n * Fired on the owning Scheduler when event dragging starts\n * @event eventDragStart\n * @on-owner\n * @param {Scheduler.view.Scheduler} source Scheduler instance\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record the drag starts from\n * @param {Scheduler.model.EventModel[]} eventRecords Event records being dragged\n * @param {Scheduler.model.AssignmentModel[]} assignmentRecords Assignment records being dragged\n * @param {MouseEvent} event Browser event DEPRECATED (replaced by domEvent)\n * @param {MouseEvent} domEvent Browser event\n */\n /**\n * Fired on the owning Scheduler when event is dragged\n * @event eventDrag\n * @on-owner\n * @param {Scheduler.view.Scheduler} source Scheduler instance\n * @param {Scheduler.model.EventModel[]} eventRecords Event records being dragged\n * @param {Scheduler.model.AssignmentModel[]} assignmentRecords Assignment records being dragged\n * @param {Date} startDate Start date for the current location\n * @param {Date} endDate End date for the current location\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record the drag started from\n * @param {Scheduler.model.ResourceModel} newResource Resource at the current location\n * @param {Object} context\n * @param {Boolean} context.valid Set this to `false` to signal that the current drop position is invalid.\n * @param {MouseEvent} domEvent Browser event\n */\n /**\n * Fired on the owning Scheduler after an event drag operation has been aborted\n * @event eventDragAbort\n * @on-owner\n * @param {Scheduler.view.Scheduler} source Scheduler instance\n * @param {Scheduler.model.EventModel[]} eventRecords Event records being dragged\n * @param {Scheduler.model.AssignmentModel[]} assignmentRecords Assignment records being dragged\n * @param {MouseEvent} domEvent Browser event\n */\n /**\n * Fired on the owning Scheduler after an event drag operation regardless of the operation being cancelled or not\n * @event eventDragReset\n * @on-owner\n * @param {Scheduler.view.Scheduler} source Scheduler instance\n */\n //endregion\n //region Data layer\n // Deprecated. Use this.client instead\n get scheduler() {\n return this.client;\n }\n //endregion\n //#region Drag lifecycle\n onAfterDragStart(event) {\n const\n me = this,\n { context : { element } } = event;\n super.onAfterDragStart(event);\n me.handleKeyDownOrMove(event.event);\n me.keyEventDetacher = EventHelper.on({\n // In case we drag event between scheduler focused event gets moved and focus\n // moves to the body. We only need to read the key from this event\n element : DomHelper.getRootElement(element),\n keydown : me.handleKeyDownOrMove,\n keyup : me.handleKeyUp,\n thisObj : me\n });\n }\n onDragReset(event) {\n super.onDragReset(event);\n this.keyEventDetacher?.();\n this.mode = 'move';\n }\n onDrop(event) {\n // Always remove proxy on drop\n this.dragData.eventBarCopies?.forEach(el => el.remove());\n return super.onDrop(event);\n }\n //#endregion\n //region Drag events\n getDraggableElement(el) {\n return el?.closest(this.drag.targetSelector);\n }\n resolveEventRecord(eventElement, client = this.client) {\n return client.resolveEventRecord(eventElement);\n }\n isElementDraggable(el, event) {\n const\n me = this,\n { client } = me,\n eventElement = me.getDraggableElement(el);\n if (!eventElement || me.disabled || client.readOnly) {\n return false;\n }\n // displaying something resizable within the event?\n if (el.matches('[class$=\"-handle\"]')) {\n return false;\n }\n const eventRecord = me.resolveEventRecord(eventElement, client);\n if (!eventRecord || !eventRecord.isDraggable || eventRecord.readOnly) {\n return false;\n }\n // Hook for features that need to prevent drag\n const prevented = client[`is${me.capitalizedEventName}ElementDraggable`]?.(\n eventElement, eventRecord, el, event\n ) === false;\n return !prevented;\n }\n getTriggerParams(dragData) {\n const { assignmentRecords, eventRecords, resourceRecord, browserEvent : domEvent } = dragData;\n return {\n // `context` is now private, but used in WebSocketHelper\n context : dragData,\n eventRecords,\n resourceRecord,\n assignmentRecords,\n event : domEvent, // Deprecated, remove on 6.0?\n domEvent\n };\n }\n getGroupedToStoreResources(dragData) {\n if (dragData.resourcesInStore) {\n return dragData.resourcesInStore;\n }\n const\n fromScheduler = this.client,\n fromResourceStore = fromScheduler.isVertical ? fromScheduler.resourceStore : fromScheduler.store;\n return dragData.resourcesInStore = [...new Set(fromResourceStore.getAllDataRecords().map(r => r.$original))].filter(r => r.isLeaf);\n }\n getIndexDiff(dragData) {\n const\n me = this,\n fromScheduler = me.client,\n toScheduler = me.currentOverClient,\n isCrossScheduler = fromScheduler !== toScheduler,\n { isVertical } = toScheduler,\n // When using TreeGroup in horizontal mode, store != resourceStore. Does not apply for vertical mode.\n fromResourceStore = fromScheduler.isVertical ? fromScheduler.resourceStore : fromScheduler.store,\n toResourceStore = isVertical ? toScheduler.resourceStore : toScheduler.store,\n {\n resourceRecord : fromResource,\n newResource : toResource\n } = dragData;\n let indexDiff;\n if (isCrossScheduler) {\n // The difference in indices via first dragged event will help us find resources for all the rest of the\n // events accordingly\n indexDiff = toResourceStore.indexOf(toResource) - fromResourceStore.indexOf(fromResource.$original);\n }\n else if (me.constainDragToResource) {\n indexDiff = 0;\n }\n else if (isVertical && toResourceStore.isGrouped) {\n const resourcesInStore = me.getGroupedToStoreResources(dragData);\n indexDiff = resourcesInStore.indexOf(fromResource.$original) - resourcesInStore.indexOf(toResource);\n }\n else {\n indexDiff = fromResourceStore.indexOf(fromResource.$original) - fromResourceStore.indexOf(toResource);\n }\n return indexDiff;\n }\n getNewResource(dragData, originalResourceRecord, indexDiff) {\n const\n me = this,\n fromScheduler = me.client,\n toScheduler = me.currentOverClient,\n isCrossScheduler = fromScheduler !== toScheduler,\n { isVertical } = toScheduler,\n // When using TreeGroup in horizontal mode, store != resourceStore. Does not apply for vertical mode.\n fromResourceStore = fromScheduler.isVertical ? fromScheduler.resourceStore : fromScheduler.store,\n toResourceStore = isVertical ? toScheduler.resourceStore : toScheduler.store;\n let { newResource } = dragData;\n if (!isCrossScheduler) {\n // If not dragging events as a unified block, distribute each to a new resource\n // using the same offset as the dragged event.\n if (indexDiff !== 0) {\n let newIndex;\n if (isVertical && toResourceStore.isGrouped) {\n const resourcesInStore = me.getGroupedToStoreResources(dragData);\n newIndex = Math.max(\n Math.min(\n resourcesInStore.indexOf(originalResourceRecord) - indexDiff,\n resourcesInStore.length - 1\n ),\n 0\n );\n newResource = resourcesInStore[newIndex];\n }\n else {\n newIndex = Math.max(\n Math.min(\n fromResourceStore.indexOf(originalResourceRecord) - indexDiff,\n fromResourceStore.count - 1\n ),\n 0\n );\n newResource = fromResourceStore.getAt(newIndex);\n // Exclude group headers, footers, summary row etc\n if (newResource.isSpecialRow) {\n newResource = fromResourceStore.getNext(newResource, false, true) || fromResourceStore.getPrevious(newResource, false, true);\n }\n }\n newResource = newResource?.$original;\n }\n else {\n newResource = originalResourceRecord;\n }\n }\n // we have a resource for first dragged event in toResource\n else {\n const draggedEventResourceIndex = fromResourceStore.indexOf(originalResourceRecord);\n newResource = toResourceStore.getAt(draggedEventResourceIndex + indexDiff) || newResource;\n }\n return newResource;\n }\n getDropData(dragData) {\n const indexDiff = this.getIndexDiff(dragData);\n return {\n events : dragData.eventRecords.map(eventRecord => {\n return {\n eventRecord,\n ...this.getEventNewStartEndDates(eventRecord, dragData.timeDiff)\n };\n }),\n assignments : dragData.assignmentRecords.map(assignmentRecord => {\n return {\n assignmentRecord,\n resourceRecord : this.getNewResource(dragData, assignmentRecord.resource, indexDiff)\n };\n })\n };\n }\n triggerBeforeEventDropFinalize(eventType, eventData, client) {\n eventData.context.dropData = this.getDropData(eventData.context);\n super.triggerBeforeEventDropFinalize(eventType, eventData, client);\n }\n triggerBeforeEventDrag(eventType, event) {\n return this.client.trigger(eventType, event);\n }\n triggerEventDrag(dragData, start) {\n this.client.trigger('eventDrag', Object.assign(this.getTriggerParams(dragData), {\n startDate : dragData.startDate,\n endDate : dragData.endDate,\n newResource : dragData.newResource\n }));\n }\n triggerDragStart(dragData) {\n this.client.navigator.skipNextClick = true;\n this.client.trigger('eventDragStart', this.getTriggerParams(dragData));\n }\n triggerDragAbort(dragData) {\n this.client.trigger('eventDragAbort', this.getTriggerParams(dragData));\n }\n triggerDragAbortFinalized(dragData) {\n this.client.trigger('eventDragAbortFinalized', this.getTriggerParams(dragData));\n }\n triggerAfterDrop(dragData, valid) {\n const me = this;\n me.currentOverClient.trigger('afterEventDrop', Object.assign(me.getTriggerParams(dragData), {\n valid\n }));\n if (!valid) {\n // Edge cases:\n // 1. If this drag was a no-op, and underlying data was changed while drag was ongoing (e.g. web socket\n // push), we need to manually force a view refresh to ensure a correct render state\n //\n // or\n // 2. Events were removed before we dropped at an invalid point\n const\n { assignmentStore, eventStore } = me.client,\n needRefresh = me.dragData.initialAssignmentsState.find(({\n resource, assignment\n }, i) => {\n return !assignmentStore.includes(assignment) ||\n !eventStore.includes(assignment.event) ||\n resource.id !== me.dragData.assignmentRecords[i]?.resourceId;\n });\n if (needRefresh) {\n me.client.refresh();\n }\n }\n // Reset the skipNextClick after a potential click event fires. https://github.com/bryntum/support/issues/5135\n me.client.setTimeout(() => me.client.navigator.skipNextClick = false, 10);\n }\n handleKeyDownOrMove(event) {\n if (this.mode !== 'copy') {\n if (event.key && EventHelper.specialKeyFromEventKey(event.key) === this.copyKey?.toLowerCase() || event[`${this.copyKey?.toLowerCase()}Key`]) {\n this.mode = 'copy';\n }\n }\n }\n handleKeyUp(event) {\n if (EventHelper.specialKeyFromEventKey(event.key) === this.copyKey.toLowerCase()) {\n this.mode = 'move';\n }\n }\n //endregion\n //region Finalization & validation\n /**\n * Checks if an event can be dropped on the specified position.\n * @private\n * @returns {Boolean} Valid (true) or invalid (false)\n */\n isValidDrop(dragData) {\n const\n {\n newResource,\n resourceRecord,\n browserEvent\n } = dragData,\n sourceRecord = dragData.draggedEntities[0],\n { target } = browserEvent;\n // Only allowed to drop outside scheduler element if we hit an element matching the externalDropTargetSelector\n if (!newResource) {\n return (!this.constrainDragToTimeline && this.externalDropTargetSelector) ? Boolean(target.closest(this.externalDropTargetSelector)) : false;\n }\n // Not allowed to drop an event on a group header or a readOnly resource\n if (newResource.isSpecialRow || newResource.readOnly) {\n return false;\n }\n // Not allowed to assign an event twice to the same resource\n if (resourceRecord.$original !== newResource) {\n return !sourceRecord.event.resources.includes(newResource);\n }\n return true;\n }\n checkDragValidity(dragData, event) {\n const\n me = this,\n scheduler = me.currentOverClient;\n let result;\n // Cannot assign anything to readOnly resources\n if (dragData.newResource?.readOnly) {\n return false;\n }\n // First make sure there's no overlap, if not run the external validatorFn\n if (!scheduler.allowOverlap && !scheduler.isDateRangeAvailable(\n dragData.startDate,\n dragData.endDate,\n dragData.draggedEntities[0],\n dragData.newResource\n )) {\n result = {\n valid : false,\n message : me.L('L{eventOverlapsExisting}')\n };\n }\n else {\n result = me.validatorFn.call(\n me.validatorFnThisObj || me,\n dragData,\n event\n );\n }\n if (!result || result.valid) {\n // Hook for features to have a say on validity\n result = scheduler['checkEventDragValidity']?.(dragData, event) ?? result;\n }\n return result;\n }\n //endregion\n //region Update records\n /**\n * Update events being dragged.\n * @private\n * @param context Drag data.\n */\n async updateRecords(context) {\n const\n me = this,\n fromScheduler = me.client,\n toScheduler = me.currentOverClient,\n copyKeyPressed = me.mode === 'copy',\n { draggedEntities, timeDiff, initialAssignmentsState } = context,\n originalStartDate = initialAssignmentsState[0].startDate,\n droppedStartDate = me.adjustStartDate(originalStartDate, timeDiff);\n let result;\n if (!context.externalDropTarget) {\n // Dropping dragged event completely outside the time axis is not allowed\n if (!toScheduler.timeAxis.timeSpanInAxis(droppedStartDate, DateHelper.add(droppedStartDate, draggedEntities[0].event.durationMS, 'ms'))) {\n context.valid = false;\n }\n if (context.valid) {\n fromScheduler.eventStore.suspendAutoCommit();\n toScheduler.eventStore.suspendAutoCommit();\n result = await me.updateAssignments(fromScheduler, toScheduler, context, copyKeyPressed);\n fromScheduler.eventStore.resumeAutoCommit();\n toScheduler.eventStore.resumeAutoCommit();\n }\n }\n // Might be flagged invalid in updateAssignments() above, if drop did not lead to any change\n // (for example if dropped on non-working-time in Pro)\n if (context.valid) {\n // Tell the world there was a successful drop\n toScheduler.trigger('eventDrop', Object.assign(me.getTriggerParams(context), {\n isCopy : copyKeyPressed,\n copyMode : me.copyMode,\n domEvent : context.browserEvent,\n targetEventRecord : context.targetEventRecord,\n targetResourceRecord : context.newResource,\n externalDropTarget : context.externalDropTarget\n }));\n }\n return result;\n }\n /**\n * Update assignments being dragged\n * @private\n */\n async updateAssignments(fromScheduler, toScheduler, context, copy) {\n // The code is written to emit as few store events as possible\n const\n me = this,\n { copyMode } = me,\n isCrossScheduler = (fromScheduler !== toScheduler),\n { isVertical } = toScheduler,\n {\n assignmentStore : fromAssignmentStore,\n eventStore : fromEventStore\n } = fromScheduler,\n {\n assignmentStore : toAssignmentStore,\n eventStore : toEventStore\n } = toScheduler,\n // When using TreeGroup in horizontal mode, store != resourceStore. Does not apply for vertical mode.\n fromResourceStore = fromScheduler.isVertical ? fromScheduler.resourceStore : fromScheduler.store,\n {\n eventRecords,\n assignmentRecords,\n timeDiff,\n initialAssignmentsState,\n newResource : toResource\n } = context,\n { unifiedDrag } = me,\n // For an empty target event store, check if it has usesSingleAssignment explicitly set, otherwise use\n // the value from the source event store\n useSingleAssignment = (toEventStore.usesSingleAssignment ||\n (toEventStore.usesSingleAssignment !== false && fromEventStore.usesSingleAssignment)),\n // this value has clear semantic only for same scheduler case\n effectiveCopyMode = copyMode === 'event'\n ? 'event'\n : copyMode === 'assignment'\n ? 'assignment'\n : useSingleAssignment ? 'event' : 'assignment',\n event1Date = me.adjustStartDate(assignmentRecords[0].event.startDate, timeDiff),\n eventsToAdd = [],\n eventsToRemove = [],\n assignmentsToAdd = [],\n assignmentsToRemove = [],\n eventsToCheck = [],\n eventsToBatch = new Set();\n fromScheduler.suspendRefresh();\n toScheduler.suspendRefresh();\n let updated = false,\n updatedEvent = false,\n indexDiff = me.getIndexDiff(context); // By how many resource rows has the drag moved.\n if (isVertical) {\n eventRecords.forEach((draggedEvent, i) => {\n const eventBar = context.eventBarEls[i];\n delete draggedEvent.instanceMeta(fromScheduler).hasTemporaryDragElement;\n // If it was created by a call to scheduler.currentOrientation.addTemporaryDragElement\n // then release it back to be available to DomSync next time the rendered event block\n // is synced.\n if (eventBar.dataset.transient) {\n eventBar.remove();\n }\n });\n }\n const\n eventBarEls = context.eventBarEls.slice(),\n addedEvents = [],\n // this map holds references between original assignment and its copy\n copiedAssignmentsMap = {};\n // Using for to support await inside\n for (let i = 0; i < assignmentRecords.length; i++) {\n const originalAssignment = assignmentRecords[i];\n // Reassigned when dropped on other scheduler, thus not const\n let draggedEvent = originalAssignment.event,\n draggedAssignment;\n if (copy) {\n draggedAssignment = originalAssignment.copy();\n copiedAssignmentsMap[originalAssignment.id] = draggedAssignment;\n }\n else {\n draggedAssignment = originalAssignment;\n }\n if (!draggedAssignment.isOccurrenceAssignment && (!fromAssignmentStore.includes(originalAssignment) || !fromEventStore.includes(draggedEvent))) {\n // Event was removed externally during the drag, just remove element from DOM (DomSync already has\n // tried to clean it up at this point, but could not due to retainElement being set)\n eventBarEls[i].remove();\n eventBarEls.splice(i, 1);\n assignmentRecords.splice(i, 1);\n i--;\n continue;\n }\n const\n initialState = initialAssignmentsState[i],\n originalEventRecord = draggedEvent,\n originalStartDate = initialState.startDate,\n // grabbing resource early, since after \".copy()\" the record won't belong to any store\n // and \".getResources()\" won't work. If it's a move to another scheduler, ensure the\n // array still has a length. The process function will do an assign as opposed\n // to a reassignment\n originalResourceRecord = initialState.resource,\n // Calculate new startDate (and round it) based on timeDiff up here, might be added to another\n // event store below in which case it is invalidated. But this is anyway the target date\n newStartDate = this.constrainDragToTimeSlot\n ? originalStartDate\n : (unifiedDrag\n ? event1Date\n : me.adjustStartDate(originalStartDate, timeDiff));\n if (fromAssignmentStore !== toAssignmentStore) {\n // Single assignment from a multi assigned event dragged over, event needs to be copied over\n // Same if we hold the copy key\n const keepEvent = originalEventRecord.assignments.length > 1 || copy;\n let newAssignment;\n if (copy) {\n // In a copy mode dragged assignment is already a copy\n newAssignment = draggedAssignment;\n }\n else {\n newAssignment = draggedAssignment.copy();\n copiedAssignmentsMap[draggedAssignment.id] = newAssignment;\n }\n // Pro Engine does not seem to handle having the event already in place on the copied assignment,\n // replacing it with id to have events bucket properly set up on commit\n if (newAssignment.event && !useSingleAssignment) {\n newAssignment.event = newAssignment.event.id;\n newAssignment.resource = newAssignment.resource.id;\n }\n if (!copy) {\n // If we're not copying, remove assignment from source scheduler\n assignmentsToRemove.push(draggedAssignment);\n }\n // If it was the last assignment, the event should also be removed\n if (!keepEvent) {\n eventsToRemove.push(originalEventRecord);\n }\n // If event does not already exist in target scheduler a copy is added\n // if we're copying the event, we always need to create new record\n if (\n copy && (copyMode === 'event' || (copyMode === 'auto' && toEventStore.usesSingleAssignment)) ||\n !toEventStore.getById(originalEventRecord.id)\n ) {\n draggedEvent = toEventStore.createRecord({\n ...originalEventRecord.data,\n children : originalEventRecord.children?.map(child => child.copy()),\n // If we're copying the event (not making new assignment to existing), we need to generate\n // phantom id to link event to the assignment record\n id : copy && (copyMode === 'event' || copyMode === 'auto') ? undefined : originalEventRecord.id,\n // Engine gets mad if not nulled\n calendar : null\n });\n newAssignment.set({\n eventId : draggedEvent.id,\n event : draggedEvent\n });\n eventsToAdd.push(draggedEvent);\n }\n // And add it to the target scheduler\n if (!useSingleAssignment) {\n assignmentsToAdd.push(newAssignment);\n }\n draggedAssignment = newAssignment;\n }\n let newResource = toResource,\n reassignedFrom = null;\n if (!unifiedDrag) {\n newResource = me.getNewResource(context, originalResourceRecord, indexDiff) || toResource;\n }\n const isCrossResource = draggedAssignment.resourceId !== newResource.$original.id;\n // Cannot rely on assignment generation to detect update, since it might be a new assignment\n if (isCrossResource) {\n reassignedFrom = fromResourceStore.getById(draggedAssignment.resourceId);\n if (copy && fromAssignmentStore === toAssignmentStore) {\n // Scheduler Core patch\n // need to completely clear the resource/resourceId on the copied assignment, before setting the new\n // otherwise, what happens is that in the `$beforeChange.resource/Id` are still\n // stored the resource/Id of the original assignment\n // then, when finalizing commit, Core engine performs this:\n // // First silently revert any data change (used by buckets), otherwise it won't be detected by `set()`\n // me.setData(me.$beforeChange)\n // and then updates the data to new, which is recorded as UpdateAction in the STM with old/new data\n // then, when that update action in STM is undo-ed, the old data is written back to the record\n // and newly added assignment is pointing to the old resource\n // then, when STM action is redo-ed, a \"duplicate assignment\" exception is thrown\n // this is covered with the test:\n // Scheduler/tests/features/EventDragCopy.t.js -> Should not remove the original when undo-ing the copy-drag action (\"multi-assignment\")\n draggedAssignment.setData({\n resource : null,\n resourceId : null\n });\n // eof Scheduler Core patch\n draggedAssignment.resource = newResource;\n draggedAssignment.event = toEventStore.getById(draggedAssignment.eventId);\n const shouldCopyEvent = copyMode === 'event' || (fromEventStore.usesSingleAssignment && copyMode === 'auto');\n if (shouldCopyEvent) {\n draggedEvent = draggedEvent.copy();\n // need to clear the `endDate` of the copy\n // this is because when we drag the copy to a different position on the timeline\n // it will set the new start date and re-calculate end date\n // as a result, in STM transaction for this drag-copy there will be \"add\" action\n // and \"update\" action and NO COMMIT in the middle\n // so when re-doing this transaction the duration change is lost\n // this is covered with the test:\n // \"Scheduler/tests/features/EventDragCopy.t.js -> Should not remove the original when undo-ing the copy-drag action (usesSingleAssignment)\",\n // Before doing it, save a copy of endDate in meta object, considering timeDiff: that's because below it will check if event is in timeAxis.\n draggedEvent.meta.endDateCached = me.adjustStartDate(draggedEvent.endDate, timeDiff);\n draggedEvent.endDate = null;\n draggedAssignment.event = draggedEvent;\n if (toEventStore.usesSingleAssignment) {\n draggedEvent.resource = newResource;\n draggedEvent.resourceId = newResource.id;\n }\n }\n if (\n !toAssignmentStore.find(a => a.eventId === draggedAssignment.eventId && a.resourceId === draggedAssignment.resourceId) &&\n !assignmentsToAdd.find(r => r.eventId === draggedAssignment.eventId && r.resourceId === draggedAssignment.resourceId)\n ) {\n shouldCopyEvent && eventsToAdd.push(draggedEvent);\n assignmentsToAdd.push(draggedAssignment);\n }\n }\n else {\n draggedAssignment.resource = newResource;\n }\n // Actual events should be batched, not data for new events when dragging between\n draggedEvent.isEvent && eventsToBatch.add(draggedEvent);\n updated = true;\n // When dragging an occurrence, the assignment is only temporary. We have to tag the newResource along\n // to be picked up by the occurrence -> event conversion\n if (draggedEvent.isOccurrence) {\n draggedEvent.set('newResource', newResource);\n }\n if (isCrossScheduler && useSingleAssignment) {\n // In single assignment mode, when dragged to another scheduler it will not copy the assignment\n // over but instead set the resourceId of the event. To better match expected behaviour\n draggedEvent.resourceId = newResource.id;\n }\n }\n else {\n if (\n copy &&\n (copyMode === 'event' || (copyMode === 'auto' && fromEventStore.usesSingleAssignment)) &&\n !eventsToAdd.includes(draggedEvent)\n ) {\n draggedEvent = draggedEvent.copy();\n // see the comment above\n draggedEvent.meta.endDateCached = me.adjustStartDate(draggedEvent.endDate, timeDiff);\n draggedEvent.endDate = null;\n eventsToAdd.push(draggedEvent);\n draggedAssignment.event = draggedEvent;\n if (toEventStore.usesSingleAssignment) {\n draggedEvent.set({\n resource : newResource,\n resourceId : newResource.id\n });\n }\n // Always add assignment to the store to allow proper element reuse\n assignmentsToAdd.push(draggedAssignment);\n }\n }\n // Same for event\n if (!eventsToCheck.find(ev => ev.draggedEvent === draggedEvent) && !DateHelper.isEqual(draggedEvent.startDate, newStartDate)) {\n // only do for non occurence records\n while (!draggedEvent.isOccurrence && draggedEvent.isBatchUpdating) {\n draggedEvent.endBatch(true);\n }\n // for same scheduler with multi-assignments, and copyMode === assignment, need to keep the start date\n // because user intention is to create a new assignment, not re-schedule the event\n // but only for cross-resource dragging, same resource dragging has semantic of regular drag\n const shouldKeepStartDate = copy && !isCrossScheduler && !useSingleAssignment && effectiveCopyMode === 'assignment' && isCrossResource;\n if (!shouldKeepStartDate) {\n draggedEvent.startDate = newStartDate;\n eventsToCheck.push({ draggedEvent, originalStartDate });\n }\n draggedEvent.isEvent && eventsToBatch.add(draggedEvent);\n updatedEvent = true;\n }\n // Hook for features that need to do additional processing on drop (used by NestedEvents)\n toScheduler.processEventDrop({\n eventRecord : draggedEvent,\n resourceRecord : newResource,\n element : i === 0 ? context.context.element : context.context.relatedElements[i - 1],\n context,\n toScheduler,\n reassignedFrom,\n eventsToAdd,\n addedEvents,\n draggedAssignment\n });\n // There are two cases to consider when triggering this event - `copy` and `move` mode. In case we are\n // copying the assignment (we can also copy the event) draggedAssignment will point to the copy of the\n // original assignment record. Same for draggedEvent. These records are new records which are not yet added\n // to the store and they contain correct state of the drop - which event is going to be assigned to which\n // resource on what time.\n // These records possess no knowledge about original records which they were cloned from. And that might be\n // useful. Let's say you want to copy assignment (or event) to every row in the way. You need to know start\n // row and the end row. That information is kept in the `originalAssignment` record. Which might be identical\n // to the `draggedAssignment` record in `move` mode.\n toScheduler.trigger('processEventDrop', {\n originalAssignment,\n draggedAssignment,\n context,\n copyMode,\n isCopy : copy\n });\n }\n fromAssignmentStore.remove(assignmentsToRemove);\n fromEventStore.remove(eventsToRemove);\n toAssignmentStore.add(assignmentsToAdd);\n // Modify syncIdMap on the FGCanvas to make sure elements get animated nicely to new position\n if (copy && fromAssignmentStore === toAssignmentStore) {\n const { syncIdMap } = fromScheduler.foregroundCanvas;\n Object.entries(copiedAssignmentsMap).forEach(([originalId, cloneRecord]) => {\n const element = syncIdMap[originalId];\n delete syncIdMap[originalId];\n syncIdMap[cloneRecord.id] = element;\n });\n }\n eventsToAdd.length && addedEvents.push(...toEventStore.add(eventsToAdd));\n addedEvents?.forEach(added => eventsToBatch.add(added));\n // addedEvents order is the same with [context.element, ..context.relatedElements]\n // Any added or removed events or assignments => something changed\n if (assignmentsToRemove.length || eventsToRemove.length || assignmentsToAdd.length || eventsToAdd.length) {\n updated = true;\n }\n // Commit changes to affected projects\n if (updated || updatedEvent) {\n // When not constrained to timeline we are dragging a clone and need to manually do some cleanup if\n // dropped in view, but only for valid drops\n if (!me.constrainDragToTimeline) {\n // go through assignmentRecords again after events has been added to toEventStore (if any)\n // now we have updated assignment ids and can properly reuse event HTML elements\n for (let i = 0; i < assignmentRecords.length; i++) {\n const\n assignmentRecord = copiedAssignmentsMap[assignmentRecords[i].id] || assignmentRecords[i],\n originalDraggedEvent = assignmentRecord.event,\n // try to get dragged event from addedEvents array, it will be there with updated ids\n // if toScheduler is different\n draggedEvent = addedEvents?.find(r => r.id === originalDraggedEvent.id) || originalDraggedEvent,\n eventBar = context.eventBarEls[i],\n element = i === 0 ? context.context.element : context.context.relatedElements[i - 1],\n // Determine if in time axis here also, since the records date might be invalidated further below\n inTimeAxis = toScheduler.isInTimeAxis(draggedEvent);\n // after checking if is in time axis, meta.endDateCached can be deleted\n delete draggedEvent.meta.endDateCached;\n if (!copy) {\n // Remove original element properly\n DomSync.removeChild(eventBar.parentElement, eventBar);\n }\n if (draggedEvent.resource && (isVertical || toScheduler.rowManager.getRowFor(draggedEvent.resource)) && inTimeAxis) {\n // Nested events are added to correct parent by the feature\n if (!draggedEvent.parent || draggedEvent.parent.isRoot) {\n const elRect = Rectangle.from(element, toScheduler.foregroundCanvas, true);\n // Ensure that after inserting the dragged element clone into the toScheduler's foregroundCanvas\n // it's at the same visual position that it was dragged to.\n DomHelper.setTopLeft(element, elRect.y, elRect.x);\n // Add element properly, so that DomSync will reuse it on next update\n DomSync.addChild(toScheduler.foregroundCanvas, element, draggedEvent.assignments[0].id);\n isCrossScheduler && toScheduler.processCrossSchedulerEventDrop({\n eventRecord : draggedEvent,\n toScheduler\n });\n }\n element.classList.remove('b-sch-event-hover', 'b-active', 'b-drag-proxy', 'b-dragging');\n element.retainElement = false;\n }\n }\n }\n // By batching event changes when using single assignment we avoid two updates, without it there will be one\n // for date change and one when changed assignment updates resourceId on the event\n useSingleAssignment && eventsToBatch.forEach(eventRecord => eventRecord.beginBatch());\n const\n // When chaining stores, need to wait for correct project to commit\n toProject = toEventStore.$master.project ?? toScheduler.project,\n fromProject = fromEventStore.$master.project ?? fromScheduler.project;\n await Promise.all([\n toProject !== fromProject ? toProject.commitAsync() : null,\n fromProject.commitAsync()\n ]);\n // End batch in engine friendly way, avoiding to have `set()` trigger another round of calculations\n useSingleAssignment && eventsToBatch.forEach(eventRecord => eventRecord.endBatch(false, true));\n }\n if (!updated) {\n // Engine might have reverted the date change, in which case this should be considered an invalid op\n updated = eventsToCheck.some(({ draggedEvent, originalStartDate }) =>\n !DateHelper.isEqual(draggedEvent.startDate, originalStartDate)\n );\n }\n // Resumes self twice if not cross scheduler, but was suspended twice above also so all good\n toScheduler.resumeRefresh(false);\n fromScheduler.resumeRefresh(false);\n if (assignmentRecords.length > 0) {\n if (!updated) {\n context.valid = false;\n }\n else {\n // Always force re-render of the bars, to return them to their original position when:\n // * Fill ticks leading to small date adjustment not actually changing the DOM\n // (https://github.com/bryntum/support/issues/630)\n // * Dragging straight down with multiselection, events in the last resource will still be assigned to\n // that resource = no change in the DOM (https://github.com/bryntum/support/issues/6293)\n eventBarEls.forEach(el => delete el.lastDomConfig);\n // Not doing full refresh above, to allow for animations\n toScheduler.refreshWithTransition();\n if (isCrossScheduler) {\n fromScheduler.refreshWithTransition();\n toScheduler.selectedEvents = addedEvents;\n }\n }\n }\n }\n //endregion\n //region Drag data\n getProductDragContext(dragData) {\n const\n me = this,\n { currentOverClient : scheduler } = me,\n target = dragData.browserEvent.target,\n previousResolvedResource = dragData.newResource || dragData.resourceRecord,\n previousTargetEventRecord = dragData.targetEventRecord;\n let\n targetEventRecord = scheduler ? me.resolveEventRecord(target, scheduler) : null,\n newResource, externalDropTarget;\n // Ignore if over dragged event\n if (dragData.eventRecords.includes(targetEventRecord)) {\n targetEventRecord = null;\n }\n if (me.constrainDragToResource) {\n newResource = dragData.resourceRecord;\n }\n else if (!me.constrainDragToTimeline) {\n newResource = me.resolveResource();\n }\n else if (scheduler) {\n newResource = me.resolveResource() || dragData.newResource || dragData.resourceRecord;\n }\n const\n { assignmentRecords, eventRecords } = dragData,\n isOverNewResource = previousResolvedResource !== newResource;\n let valid = Boolean(newResource && !newResource.isSpecialRow);\n if (!newResource && me.externalDropTargetSelector) {\n externalDropTarget = target.closest(me.externalDropTargetSelector);\n valid = Boolean(externalDropTarget);\n }\n return {\n valid,\n externalDropTarget,\n eventRecords,\n assignmentRecords,\n newResource,\n targetEventRecord,\n dirty : isOverNewResource || targetEventRecord !== previousTargetEventRecord,\n proxyElements : [dragData.context.element, ...dragData.context.relatedElements || []]\n };\n }\n getMinimalDragData(info) {\n const\n me = this,\n { scheduler } = me,\n element = me.getElementFromContext(info),\n eventRecord = me.resolveEventRecord(element, scheduler),\n resourceRecord = scheduler.resolveResourceRecord(element),\n assignmentRecord = scheduler.resolveAssignmentRecord(element);\n let assignmentRecords = assignmentRecord ? [assignmentRecord] : [];\n // We multi drag other selected events if the dragged event is already selected, or the ctrl key is pressed\n if (assignmentRecord && (scheduler.isAssignmentSelected(assignmentRecords[0]) || (me.drag.startEvent.ctrlKey && scheduler.multiEventSelect))) {\n assignmentRecords.push.apply(assignmentRecords, me.getRelatedRecords(assignmentRecord));\n }\n // Evict assignments for resources that are collapsed or filtered away\n assignmentRecords = assignmentRecords.filter(assignment => scheduler.resourceStore.isAvailable(assignment.resource));\n const eventRecords = [...new Set(assignmentRecords.map(assignment => assignment.event))];\n return {\n eventRecord,\n resourceRecord,\n assignmentRecord,\n eventRecords,\n assignmentRecords\n };\n }\n setupProductDragData(info) {\n const\n me = this,\n { scheduler } = me,\n element = me.getElementFromContext(info),\n {\n eventRecord,\n resourceRecord,\n assignmentRecord,\n assignmentRecords\n } = me.getMinimalDragData(info),\n eventBarEls = [];\n if (me.constrainDragToResource && !resourceRecord) {\n throw new Error('Resource could not be resolved for event: ' + eventRecord.id);\n }\n let dateConstraints;\n if (me.constrainDragToTimeline) {\n dateConstraints = me.getDateConstraints?.(resourceRecord, eventRecord);\n const\n constrainRectangle = me.constrainRectangle = me.getConstrainingRectangle(dateConstraints, resourceRecord, eventRecord),\n eventRegion = Rectangle.from(element, scheduler.timeAxisSubGridElement);\n super.setupConstraints(\n constrainRectangle,\n eventRegion,\n scheduler.timeAxisViewModel.snapPixelAmount,\n Boolean(dateConstraints.start)\n );\n }\n // Collecting all elements to drag\n assignmentRecords.forEach(assignment => {\n let eventBarEl = scheduler.getElementFromAssignmentRecord(assignment, true);\n if (!eventBarEl) {\n eventBarEl = scheduler.currentOrientation.addTemporaryDragElement(assignment.event, assignment.resource);\n }\n eventBarEls.push(eventBarEl);\n });\n return {\n record : assignmentRecord,\n draggedEntities : assignmentRecords,\n dateConstraints : dateConstraints?.start ? dateConstraints : null,\n // Create copies of the elements\n eventBarCopies : eventBarEls.map(el => me.createProxy(el)),\n eventBarEls\n };\n }\n getDateConstraints(resourceRecord, eventRecord) {\n const\n { scheduler } = this,\n externalDateConstraints = scheduler.getDateConstraints?.(resourceRecord, eventRecord);\n let minDate, maxDate;\n if (this.constrainDragToTimeSlot) {\n minDate = eventRecord.startDate;\n maxDate = eventRecord.endDate;\n }\n else if (externalDateConstraints) {\n minDate = externalDateConstraints.start;\n maxDate = externalDateConstraints.end;\n }\n return {\n start : minDate,\n end : maxDate\n };\n }\n getConstrainingRectangle(dateRange, resourceRecord, eventRecord) {\n return this.scheduler.getScheduleRegion(this.constrainDragToResource && resourceRecord, eventRecord, true, dateRange && {\n start : dateRange.start, end : dateRange.end\n });\n }\n /**\n * Initializes drag data (dates, constraints, dragged events etc). Called when drag starts.\n * @private\n * @param info\n * @returns {*}\n */\n getDragData(info) {\n const dragData = this.getMinimalDragData(info) || {};\n return {\n ...super.getDragData(info),\n ...dragData,\n initialAssignmentsState : dragData.assignmentRecords.map(assignment => ({\n startDate : assignment.event.startDate,\n resource : assignment.resource,\n assignment\n }))\n };\n }\n /**\n * Provide your custom implementation of this to allow additional selected records to be dragged together with the original one.\n * @param {Scheduler.model.AssignmentModel} assignmentRecord The assignment about to be dragged\n * @returns {Scheduler.model.AssignmentModel[]} An array of assignment records to drag together with the original\n */\n getRelatedRecords(assignmentRecord) {\n return this.scheduler.selectedAssignments.filter(selectedRecord => selectedRecord !== assignmentRecord && !selectedRecord.resource.readOnly && selectedRecord.event.isDraggable);\n }\n /**\n * Get correct axis coordinate depending on schedulers mode (horizontal -> x, vertical -> y). Also takes milestone\n * layout into account.\n * @private\n * @param {Scheduler.model.EventModel} eventRecord Record being dragged\n * @param {HTMLElement} element Element being dragged\n * @param {Number[]} coord XY coordinates\n * @returns {Number|Number[]} X,Y or XY\n */\n getCoordinate(eventRecord, element, coord) {\n const scheduler = this.currentOverClient;\n if (scheduler.isHorizontal) {\n let x = coord[0];\n // Adjust coordinate for milestones if using a layout mode, since they are aligned differently than events\n if (scheduler.milestoneLayoutMode !== 'default' && eventRecord.isMilestone) {\n switch (scheduler.milestoneAlign) {\n case 'center':\n x += element.offsetWidth / 2;\n break;\n case 'end':\n x += element.offsetWidth;\n break;\n }\n }\n return x;\n }\n else {\n let y = coord[1];\n // Adjust coordinate for milestones if using a layout mode, since they are aligned differently than events\n if (scheduler.milestoneLayoutMode !== 'default' && eventRecord.isMilestone) {\n switch (scheduler.milestoneAlign) {\n case 'center':\n y += element.offsetHeight / 2;\n break;\n case 'end':\n y += element.offsetHeight;\n break;\n }\n }\n return y;\n }\n }\n /**\n * Get resource record occluded by the drag proxy.\n * @private\n * @returns {Scheduler.model.ResourceModel}\n */\n resolveResource() {\n const\n me = this,\n client = me.currentOverClient,\n { isHorizontal } = client,\n {\n context,\n browserEvent,\n dragProxy\n } = me.dragData,\n element = dragProxy || context.element,\n // Page coords for elementFromPoint\n pageRect = Rectangle.from(element, null, true),\n y = (client.isVertical || me.unifiedDrag) ? context.clientY : pageRect.center.y,\n // Local coords to resolve resource in vertical\n localRect = Rectangle.from(element, client.timeAxisSubGridElement, true),\n { x : lx, y : ly } = localRect.center;\n let resource = null,\n isInsideClientEl;\n if (browserEvent.touches) {\n isInsideClientEl = Rectangle.from(client.element).contains(Point.from(browserEvent, true));\n }\n else {\n isInsideClientEl = client.element.contains(me.getMouseMoveEventTarget(browserEvent));\n }\n if (isInsideClientEl) {\n // This is benchmarked as the fastest way to find a Grid Row from a viewport Y coordinate\n // so use it in preference to elementFromPoint (which causes a forced synchronous layout) in horizontal mode.\n if (isHorizontal) {\n const row = client.rowManager.getRowAt(y);\n resource = row && client.store.getAt(row.dataIndex);\n }\n else {\n // In vertical mode, just use the X coordinate to find out which resource we are under.\n // The method requires that a .b-sch-timeaxis-cell element be passed.\n // There is only one in vertical mode, so use that.\n resource = client.resolveResourceRecord(client.timeAxisSubGridElement.querySelector('.b-sch-timeaxis-cell'), [lx, ly]);\n }\n }\n return resource?.$original;\n }\n //endregion\n //region Other stuff\n adjustStartDate(startDate, timeDiff) {\n const\n scheduler = this.currentOverClient;\n startDate = scheduler.timeAxis.roundDate(new Date(startDate - 0 + timeDiff), scheduler.snapRelativeToEventStartDate ? startDate : false);\n return this.constrainStartDate(startDate);\n }\n getRecordElement(assignmentRecord) {\n return this.client.getElementFromAssignmentRecord(assignmentRecord, true);\n }\n // Used by the Dependencies feature to draw lines to the drag proxy instead of the original event element\n getProxyElement(assignmentRecord) {\n const { dragData } = this;\n if (this.isDragging && dragData?.proxyElements?.length) {\n const index = dragData.assignmentRecords.indexOf(assignmentRecord);\n if (index >= 0) {\n return dragData.proxyElements[index];\n }\n }\n return null;\n }\n //endregion\n //#region Salesforce hooks\n getMouseMoveEventTarget(event) {\n return event.target;\n }\n //#endregion\n}\nEventDrag._$name = 'EventDrag'; GridFeatureManager.registerFeature(EventDrag, true, 'Scheduler');\nGridFeatureManager.registerFeature(EventDrag, false, 'ResourceHistogram');\n", "import DragCreateBase from './base/DragCreateBase.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\n/**\n * @module Scheduler/feature/EventDragCreate\n */\n/**\n * Feature that allows the user to create new events by dragging in empty parts of the scheduler rows.\n *\n * {@inlineexample Scheduler/feature/EventDragCreate.js}\n *\n * This feature is **enabled** by default.\n *\n *
Incompatible with the {@link Scheduler.feature.EventDragSelect EventDragSelect} and\n * {@link Scheduler.feature.Pan Pan} features. If either of those features are enabled, this feature has no effect.\n *
\n *\n * ## Conditionally preventing drag creation\n *\n * To conditionally prevent drag creation for a certain resource or a certain timespan, you listen for the\n * {@link #event-beforeDragCreate} event, add your custom logic to it and return `false` to prevent the operation\n * from starting. For example to not allow drag creation on the topmost resource:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * listeners : {\n * beforeDragCreate({ resource }) {\n * // Prevent drag creating on the topmost resource\n * if (resource === scheduler.resourceStore.first) {\n * return false;\n * }\n * }\n * }\n * });\n * ```\n *\n * @extends Scheduler/feature/base/DragCreateBase\n * @demo Scheduler/basic\n * @classtype eventDragCreate\n * @feature\n */\nexport default class EventDragCreate extends DragCreateBase {\n //region Config\n static $name = 'EventDragCreate';\n static configurable = {\n /**\n * Locks the layout during drag create, overriding the default behaviour that uses the same rendering\n * pathway for drag creation as for already existing events.\n *\n * This more closely resembles the behaviour of versions prior to 4.2.0.\n *\n * @config {Boolean} lockLayout\n * @default false\n */\n /**\n * An empty function by default, but provided so that you can perform custom validation on the event being\n * created. Return `true` if the new event is valid, `false` to prevent an event being created.\n * @param {Object} context A drag create context\n * @param {Date} context.startDate Event start date\n * @param {Date} context.endDate Event end date\n * @param {Scheduler.model.EventModel} context.record Event record\n * @param {Scheduler.model.ResourceModel} context.resourceRecord Resource record\n * @param {Event} event The event object\n * @returns {Boolean} `true` if this validation passes\n * @config {Function}\n */\n validatorFn : () => true\n };\n //endregion\n //region Events\n /**\n * Fires on the owning Scheduler after the new event has been created.\n * @event dragCreateEnd\n * @on-owner\n * @param {Scheduler.view.Scheduler} source\n * @param {Scheduler.model.EventModel} eventRecord The new `EventModel` record.\n * @param {Scheduler.model.ResourceModel} resourceRecord The resource for the row in which the event is being\n * created.\n * @param {MouseEvent} event The ending mouseup event.\n * @param {HTMLElement} eventElement The DOM element representing the newly created event un the UI.\n */\n /**\n * Fires on the owning Scheduler at the beginning of the drag gesture. Returning `false` from a listener prevents\n * the drag create operation from starting.\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * listeners : {\n * beforeDragCreate({ date }) {\n * // Prevent drag creating events in the past\n * return date >= Date.now();\n * }\n * }\n * });\n * ```\n *\n * @event beforeDragCreate\n * @on-owner\n * @preventable\n * @param {Scheduler.view.Scheduler} source\n * @param {Scheduler.model.ResourceModel} resourceRecord\n * @param {Date} date The datetime associated with the drag start point.\n */\n /**\n * Fires on the owning Scheduler after the drag start has created a new Event record.\n * @event dragCreateStart\n * @on-owner\n * @param {Scheduler.view.Scheduler} source\n * @param {Scheduler.model.EventModel} eventRecord The event record being created\n * @param {Scheduler.model.ResourceModel} resourceRecord The resource record\n * @param {HTMLElement} eventElement The element representing the new event.\n */\n /**\n * Fires on the owning Scheduler to allow implementer to prevent immediate finalization by setting\n * `data.context.async = true` in the listener, to show a confirmation popup etc\n * ```javascript\n * scheduler.on('beforedragcreatefinalize', ({context}) => {\n * context.async = true;\n * setTimeout(() => {\n * // async code don't forget to call finalize\n * context.finalize();\n * }, 1000);\n * })\n * ```\n * @event beforeDragCreateFinalize\n * @on-owner\n * @param {Scheduler.view.Scheduler} source Scheduler instance\n * @param {Scheduler.model.EventModel} eventRecord The event record being created\n * @param {Scheduler.model.ResourceModel} resourceRecord The resource record\n * @param {HTMLElement} eventElement The element representing the new Event record\n * @param {Object} context\n * @param {Boolean} context.async Set true to handle drag create asynchronously (e.g. to wait for user\n * confirmation)\n * @param {Function} context.finalize Call this method to finalize drag create. This method accepts one\n * argument: pass true to update records, or false, to ignore changes\n */\n /**\n * Fires on the owning Scheduler at the end of the drag create gesture whether or not\n * a new event was created by the gesture.\n * @event afterDragCreate\n * @on-owner\n * @param {Scheduler.view.Scheduler} source\n * @param {Scheduler.model.EventModel} eventRecord The event record being created\n * @param {Scheduler.model.ResourceModel} resourceRecord The resource record\n * @param {HTMLElement} eventElement The element representing the created event record\n */\n //endregion\n //region Init\n get scheduler() {\n return this.client;\n }\n get store() {\n return this.client.eventStore;\n }\n get project() {\n return this.client.project;\n }\n updateLockLayout(lock) {\n this.dragActiveCls = `b-dragcreating${lock ? ' b-dragcreate-lock' : ''}`;\n }\n //endregion\n //region Scheduler specific implementation\n handleBeforeDragCreate(drag, eventRecord, event) {\n const\n me = this,\n { scheduler, store } = me,\n { resourceRecord } = drag;\n if (me.disabled || resourceRecord.readOnly || !me.scheduler.resourceStore.isAvailable(resourceRecord)) {\n return false;\n }\n if (scheduler.allowOverlap === false) {\n const isEventOverlapped = !store.isDateRangeAvailable(drag.mousedownDate, drag.mousedownDate, null, resourceRecord);\n if (isEventOverlapped) {\n return false;\n }\n }\n const\n // For resources with a calendar, ensure the date is inside a working time range\n isWorkingTime = !scheduler.isSchedulerPro || eventRecord.ignoreResourceCalendar || resourceRecord.isWorkingTime(drag.mousedownDate),\n result = isWorkingTime && scheduler.trigger('beforeDragCreate', {\n resourceRecord,\n date : drag.mousedownDate,\n event\n });\n // Save date constraints\n me.dateConstraints = scheduler.getDateConstraints?.(resourceRecord, eventRecord);\n return result;\n }\n dragStart(drag) {\n const\n me = this,\n { client } = me,\n {\n eventStore,\n assignmentStore,\n enableEventAnimations,\n enableTransactionalFeatures\n } = client,\n { resourceRecord } = drag,\n eventRecord = me.createEventRecord(drag),\n resourceRecords = [resourceRecord];\n eventRecord.set('duration', DateHelper.diff(eventRecord.startDate, eventRecord.endDate, eventRecord.durationUnit, true));\n // It's only a provisional event until gesture is completed (possibly longer if an editor dialog is shown after)\n eventRecord.isCreating = true;\n // Flag used by rendering to not draw a zero length event being drag created as a milestone\n eventRecord.meta.isDragCreating = true;\n // force the transaction canceling in the taskeditor early\n // this is because we are going to add a new event record to the store, and it has to be out of the\n // task editor's stm transaction\n // now there's a re-entrant protection in that method, so hopefully when it will be called by the\n // editor itself that's ok\n // `taskEdit === false` in some cases, so can't just use `?.` here\n client.features.taskEdit && client.features.taskEdit.doCancel();\n // This presents the event to be scheduled for validation at the proposed mouse/date point\n // If rejected, we cancel operation\n if (me.handleBeforeDragCreate(drag, eventRecord, drag.event) === false) {\n return false;\n }\n // This is an async function which will start transaction asynchronously. This workflow expect transaction to\n // be started ASAP\n me.captureStm(true);\n let assignmentRecords = [];\n if (resourceRecord) {\n if (eventStore.usesSingleAssignment || !enableTransactionalFeatures) {\n assignmentRecords = assignmentStore.assignEventToResource(eventRecord, resourceRecord);\n }\n else {\n // Do not add record to the store just yet, otherwise records would get to the STM queue assignment first,\n // then event, which will break `store.added` bag after undo/redo.\n assignmentRecords = [assignmentStore.createRecord({\n event : eventRecord,\n resource : resourceRecord\n })];\n }\n }\n // Vetoable beforeEventAdd allows cancel of this operation\n if (client.trigger('beforeEventAdd', { eventRecord, resourceRecords, assignmentRecords }) === false) {\n if (eventStore.usesSingleAssignment || !enableTransactionalFeatures) {\n assignmentStore.remove(assignmentRecords);\n }\n return false;\n }\n // When configured to lock layout during drag create, set a flag that HorizontalRendering will pick up to\n // exclude the new event from the layout calculations. It will then be at the topmost position in the \"cell\"\n if (me.lockLayout) {\n eventRecord.meta.excludeFromLayout = true;\n }\n client.onEventCreated?.(eventRecord);\n client.enableEventAnimations = false;\n eventStore.addAsync(eventRecord).then(() => client.enableEventAnimations = enableEventAnimations);\n if (!eventStore.usesSingleAssignment && enableTransactionalFeatures) {\n // Add assignment after event only to keep STM transaction sane\n assignmentStore.add(assignmentRecords[0]);\n }\n // Element must be created synchronously, not after the project's normalizing delays.\n // Overrides the check for isEngineReady in VerticalRendering so that the newly added record\n // will be rendered when we call refreshRows.\n client.isCreating = true;\n client.refreshRows();\n client.isCreating = false;\n // Set the element we are dragging\n drag.itemElement = drag.element = client.getElementFromEventRecord(eventRecord);\n // If the resource row is very tall, the event may have been rendered outside of the\n // visible viewport. If so, scroll it into view.\n if (!DomHelper.isInView(drag.itemElement)) {\n client.scrollable.scrollIntoView(drag.itemElement, {\n animate : true,\n edgeOffset : client.barMargin\n });\n }\n return super.dragStart(drag);\n }\n checkValidity(context, event) {\n const\n me = this,\n { client } = me;\n // Nicer for users of validatorFn\n context.resourceRecord = me.dragging.resourceRecord;\n return (\n client.allowOverlap ||\n client.isDateRangeAvailable(context.startDate, context.endDate, context.eventRecord, context.resourceRecord)\n ) && me.createValidatorFn.call(me.validatorFnThisObj || me, context, event);\n }\n // Determine if resource already has events or not\n isRowEmpty(resourceRecord) {\n const events = this.store.getEventsForResource(resourceRecord);\n return !events || !events.length;\n }\n //endregion\n triggerBeforeFinalize(event) {\n this.client.trigger(`beforeDragCreateFinalize`, event);\n }\n /**\n * Creates an event by the event object coordinates\n * @param {Object} drag The Bryntum event object\n * @private\n */\n createEventRecord(drag) {\n const\n me = this,\n { client } = me,\n dimension = client.isHorizontal ? 'X' : 'Y',\n {\n timeAxis,\n eventStore,\n weekStartDay\n } = client,\n {\n event,\n mousedownDate\n } = drag,\n draggingEnd = me.draggingEnd = event[`page${dimension}`] > drag.startEvent[`page${dimension}`],\n eventConfig = {\n name : eventStore.modelClass.fieldMap.name.defaultValue || me.L('L{Object.newEvent}'),\n startDate : draggingEnd ? DateHelper.floor(mousedownDate, timeAxis.resolution, null, weekStartDay) : mousedownDate,\n endDate : draggingEnd ? mousedownDate : DateHelper.ceil(mousedownDate, timeAxis.resolution, null, weekStartDay)\n };\n // if project model has been imported from Gantt, we have to define constraint data directly to correct\n // auto-scheduling while dragCreate\n if (client.project.isGanttProjectMixin) {\n ObjectHelper.assign(eventConfig, {\n constraintDate : eventConfig.startDate,\n constraintType : 'startnoearlierthan'\n });\n }\n return eventStore.createRecord(eventConfig);\n }\n async internalUpdateRecord(context, eventRecord) {\n await super.internalUpdateRecord(context, eventRecord);\n // Toggle isCreating after ending batch, to make sure assignments can become persistable\n if (!this.client.hasEventEditor) {\n context.eventRecord.isCreating = false;\n }\n }\n async finalizeDragCreate(context) {\n const { meta } = context.eventRecord;\n // Remove the layout lock flag, event will jump into place as part of the finalization\n meta.excludeFromLayout = false;\n // Also allow new event to become a milestone now\n meta.isDragCreating = false;\n const transferred = await super.finalizeDragCreate(context);\n // if STM capture has NOT been transferred to the\n // event editor, we need to finalize the STM transaction / release the capture\n if (!transferred) {\n await this.freeStm(true);\n }\n else {\n // otherwise just freeing our capture\n this.hasStmCapture = false;\n }\n return transferred;\n }\n async cancelDragCreate(context) {\n await super.cancelDragCreate(context);\n await this.freeStm(false);\n }\n getTipHtml(...args) {\n const\n html = super.getTipHtml(...args),\n { element } = this.tip;\n element.classList.add('b-sch-dragcreate-tooltip');\n element.classList.toggle('b-too-narrow', this.dragging.context.tooNarrow);\n return html;\n }\n onAborted(context) {\n const { eventRecord, resourceRecord } = context;\n // The product this is being used in may not have resources.\n this.store.unassignEventFromResource?.(eventRecord, resourceRecord);\n this.store.remove(eventRecord);\n }\n}\nEventDragCreate._$name = 'EventDragCreate'; GridFeatureManager.registerFeature(EventDragCreate, true, 'Scheduler');\nGridFeatureManager.registerFeature(EventDragCreate, false, 'ResourceHistogram');\n", "import InstancePlugin from '../../Core/mixin/InstancePlugin.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport EventHelper from '../../Core/helper/EventHelper.js';\nimport Rectangle, { Point } from '../../Core/helper/util/Rectangle.js';\nimport Delayable from '../../Core/mixin/Delayable.js';\n/**\n * @module Scheduler/feature/EventDragSelect\n */\n/**\n * Enables users to click and drag to select events (or assignments in multi assignment mode) inside the Scheduler's\n * timeline. Press CTRL/CMD-key to extend an existing selection.\n *\n * The selection rectangle element is styled using the CSS class name `b-dragselect-rect`. You may use application CSS\n * to change its appearance from the default.\n *\n * {@inlineexample Scheduler/feature/EventDragSelect.js}\n *\n * This feature is **disabled** by default.\n * For info on enabling it, see {@link Grid.view.mixin.GridFeatures}.\n *\n * **NOTE:** Incompatible with the {@link Scheduler.feature.EventDragCreate} and the {@link Scheduler.feature.Pan} features.\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * eventDragSelect : true,\n * eventDragCreate : false\n * }\n * });\n * ```\n *\n * @demo Scheduler/dragselection\n * @extends Core/mixin/InstancePlugin\n * @mixes Core/mixin/Delayable\n * @classtype eventDragSelect\n * @feature\n */\nexport default class EventDragSelect extends Delayable(InstancePlugin) {\n // region Events\n /**\n * Fires on the owning Scheduler before drag selection starts. Return false to prevent the operation.\n * @event beforeEventDragSelect\n * @preventable\n * @on-owner\n * @param {Event} event The native browser DOM event\n */\n //endregion\n // region Init\n static $name = 'EventDragSelect';\n targetSelector = '.b-sch-timeaxis-cell, .b-timeaxissubgrid';\n construct(client, config) {\n client.multiEventSelect = true;\n super.construct(client, config);\n }\n //endregion\n //region Plugin config\n // Plugin configuration. This plugin chains some of the functions in Scheduler.\n static pluginConfig = {\n chain : ['onElementMouseDown', 'onElementMouseMove']\n };\n //endregion\n onElementMouseDown(event) {\n const\n me = this,\n { client } = me,\n { foregroundCanvas } = client,\n { target, button, touches, clientX, clientY } = event,\n canvasRect = Rectangle.from(foregroundCanvas, true);\n // only react to mouse input, and left button\n // only react to mousedown directly on grid cell or subgrid element\n if (touches || button !== 0 || me.disabled || !target.matches(me.targetSelector) || client.trigger('beforeEventDragSelect', { event }) === false) {\n return;\n }\n // Prevent grid dragselection (reset by GridSelection)\n client.preventDragSelect = true;\n me.startX = clientX - canvasRect.x;\n me.startY = clientY - canvasRect.y;\n me.element = DomHelper.createElement({\n tag : 'div',\n className : 'b-dragselect-rect',\n parent : client.foregroundCanvas,\n retainElement : true,\n style : {\n transform : `translate(${me.startX}px, ${me.startY}px)`\n }\n });\n client.navigator.disabled = true;\n me.mouseUpDetacher = EventHelper.on({\n element : document,\n mouseup : 'onDocumentMouseUp',\n thisObj : me\n });\n }\n get eventRectangles() {\n const\n { client } = this,\n // When using nested events, only drag select parents\n eventElements = Array.from(client.foregroundCanvas.children).filter(node => node.matches(`${client.eventSelector}, .b-nested-events-container`));\n return eventElements.map(el => {\n const record = client.resolveAssignmentRecord(el);\n return {\n rectangle : Rectangle.from(el, true),\n record,\n selected : client.selectedAssignments.includes(record)\n };\n });\n }\n onElementMouseMove(event) {\n const\n me = this,\n { client } = me;\n if (typeof me.startX === 'number') {\n const\n canvasRect = me.rectangle = Rectangle.from(me.client.foregroundCanvas, true),\n x = Math.min(Math.max(event.clientX - canvasRect.x, 0), canvasRect.width + 1),\n y = Math.min(Math.max(event.clientY - canvasRect.y, 0), canvasRect.height + 1),\n rect = new Rectangle(me.startX, me.startY, x - me.startX, y - me.startY);\n DomHelper.setTranslateXY(me.element, rect.x, rect.y);\n me.element.style.width = `${rect.width}px`;\n me.element.style.height = `${rect.height}px`;\n if (!me.dragging) {\n client.element.classList.add('b-dragselecting');\n if (!event.ctrlKey && !event.metaKey) {\n client.clearEventSelection();\n }\n me.originalSelection = client.selectedAssignments.slice();\n me.subGridElementRect = Rectangle.from(client.timeAxisSubGridElement, true);\n // No key processing during drag selection\n client.navigator.disabled = true;\n client.enableScrollingCloseToEdges(client.timeAxisSubGrid);\n me.dragging = true;\n }\n me.updateSelection();\n }\n }\n onDocumentMouseUp(event) {\n const\n me = this,\n { client } = me,\n { selectedAssignments, navigator } = client,\n timeAxisRect = Rectangle.from(client.timeAxisSubGridElement);\n client.disableScrollingCloseToEdges(client.timeAxisSubGrid);\n if (!me.dragging && client.deselectAllOnScheduleClick) {\n client.clearEventSelection();\n }\n me.element?.remove();\n client.element.classList.remove('b-dragselecting');\n me.startX = me.startY = null;\n // Navigator will react to the 'click' event which clears selection, bypass this\n // Checking mouse position due to SalesForce limitations\n navigator.skipNextClick = timeAxisRect.contains(Point.from(event, true));\n navigator.disabled = false;\n me.dragging = false;\n // If we selected something, focus last selected event so keyboard navigation works\n if (selectedAssignments.length) {\n navigator.skipScrollIntoView = true;\n client.activeAssignment = selectedAssignments[selectedAssignments.length - 1];\n navigator.activeItem?.focus();\n navigator.skipScrollIntoView = false;\n }\n me.mouseUpDetacher();\n }\n updateSelection() {\n const\n me = this,\n selectionRect = me.rectangle = Rectangle.from(me.element, true),\n {\n eventRectangles,\n client\n } = me,\n // If any currently selected assignments have had their DOM representation\n // released due to being scrolled out of view, they must remain selected.\n // Collect assignments which have no DOM representation as the initial\n // selection.\n selection = client.selectedAssignments.reduce((r, a) => {\n if (!client.getElementFromAssignmentRecord(a)) {\n r.push(a);\n }\n return r;\n }, []);\n for (const assignmentData of eventRectangles) {\n if (selectionRect.intersect(assignmentData.rectangle, true, true)) {\n assignmentData.selected = true;\n selection.push(assignmentData.record);\n }\n }\n selection.push(...me.originalSelection);\n client.selectedAssignments = selection;\n }\n}\nEventDragSelect._$name = 'EventDragSelect'; GridFeatureManager.registerFeature(EventDragSelect, false, 'Scheduler');\n", "import Store from '../../Core/data/Store.js';\nimport Popup from '../../Core/widget/Popup.js';\nimport '../../Core/widget/SlideToggle.js';\nimport '../../Core/widget/panel/PanelCollapserOverlay.js';\n/**\n * @module Scheduler/view/EventEditor\n */\n/**\n * Provided event editor dialog.\n *\n * @extends Core/widget/Popup\n * @private\n */\nexport default class EventEditor extends Popup {\n // Factoryable type name\n static get type() {\n return 'eventeditor';\n }\n static get $name() {\n return 'EventEditor';\n }\n static get configurable() {\n return {\n items : [],\n draggable : {\n handleSelector : ':not(button,.b-field-inner)' // Ignore buttons and field inners\n },\n axisLock : 'flexible',\n scrollable : {\n // In case editor is very tall or window is small, make it scrollable\n overflowY : true\n },\n readOnly : null,\n /**\n * A Function (or *name* of a function) which produces a customized Panel header based upon the event being edited.\n *\n * @config {Function|String}\n * @param {Scheduler.model.EventModel} eventRecord The record being edited\n * @returns {String} The Panel title.\n */\n titleRenderer : null,\n // We want to maximize on phones and tablets\n maximizeOnMobile : true\n };\n }\n updateLocalization() {\n super.updateLocalization(...arguments);\n // Use this if there's no titleRenderer\n this.initialTitle = this.title || '';\n }\n chainResourceStore() {\n return this.eventEditFeature.resourceStore.chain(\n record => !record.isSpecialRow,\n null,\n {\n // It doesn't need to be a Project-based Store\n storeClass : Store,\n // Need to show all records in the combo. Required in case resource store is a tree.\n excludeCollapsedRecords : false\n }\n );\n }\n processWidgetConfig(widget) {\n if (widget.type?.includes('date') && widget.weekStartDay == null) {\n widget.weekStartDay = this.weekStartDay;\n }\n if (widget.type === 'extraItems') {\n return false;\n }\n const\n { eventEditFeature } = this,\n fieldConfig = {};\n if (widget.ref === 'resourceField') {\n const { store } = widget;\n // Can't use store directly since it may be grouped and then contains irrelevant group records\n widget.store = this.chainResourceStore();\n // Allow the incoming widget's config to augment its store\n if (store) {\n widget.store.setConfig(store);\n }\n // When events are loaded with resourceId, we should only support single select.\n // Only override this if the widget has not been explicitly configured\n // with multiSelect.\n if (!('multiSelect' in widget)) {\n widget.multiSelect = !eventEditFeature.eventStore.usesSingleAssignment;\n }\n }\n if ((widget.name === 'startDate' || widget.name === 'endDate') && widget.type === 'date') {\n fieldConfig.format = eventEditFeature.dateFormat;\n }\n if ((widget.name === 'startDate' || widget.name === 'endDate') && widget.type === 'time') {\n fieldConfig.format = eventEditFeature.timeFormat;\n }\n Object.assign(widget, fieldConfig);\n return super.processWidgetConfig(widget);\n }\n setupEditorButtons() {\n const\n { record } = this,\n { deleteButton } = this.widgetMap;\n // Hide delete button if we are readOnly or the event is in a create phase\n // which means we are editing a dblclick-created or drag-created event.\n if (deleteButton) {\n deleteButton.hidden = this.readOnly || record.isCreating;\n }\n }\n // This will be called if the editor is floating\n onBeforeShow(...args) {\n this.setupUIForEditing();\n super.onBeforeShow?.(...args);\n }\n // This will be called if the editor is docked\n onBeforeToggleReveal({ reveal }) {\n // Only when revealing, not when sliding out\n if (reveal) {\n this.setupUIForEditing();\n }\n }\n setupUIForEditing() {\n const\n me = this,\n {\n record,\n titleRenderer\n } = me;\n me.setupEditorButtons();\n if (titleRenderer) {\n me.title = me.callback(titleRenderer, me, [record]);\n }\n else {\n me.title = me.initialTitle;\n }\n }\n onInternalKeyDown(event) {\n this.trigger('keyDown', { event });\n super.onInternalKeyDown(event);\n }\n updateReadOnly(readOnly) {\n const\n {\n deleteButton,\n saveButton,\n cancelButton\n } = this.widgetMap;\n super.updateReadOnly(readOnly);\n if (deleteButton) {\n deleteButton.hidden = readOnly;\n }\n if (saveButton) {\n saveButton.hidden = readOnly;\n }\n if (cancelButton) {\n cancelButton.hidden = readOnly;\n }\n }\n}\n// Register this widget type with its Factory\nEventEditor.initClass();\nEventEditor._$name = 'EventEditor';", "import Combo from '../../../../Core/widget/Combo.js';\n/**\n * @module Scheduler/view/recurrence/field/RecurrenceFrequencyCombo\n */\n/**\n * A combobox field allowing to pick frequency in the {@link Scheduler.view.recurrence.RecurrenceEditor recurrence dialog}.\n *\n * @extends Core/widget/Combo\n * @classtype recurrencefrequencycombo\n */\nexport default class RecurrenceFrequencyCombo extends Combo {\n static $name = 'RecurrenceFrequencyCombo';\n // Factoryable type name\n static type = 'recurrencefrequencycombo';\n static configurable = {\n editable : false,\n displayField : 'text',\n valueField : 'value',\n localizeDisplayFields : true,\n addNone : false\n };\n buildItems() {\n return [\n ...(this.addNone ? [{ text : 'L{None}', value : 'NONE' }] : []),\n { value : 'DAILY', text : 'L{Daily}' },\n { value : 'WEEKLY', text : 'L{Weekly}' },\n { value : 'MONTHLY', text : 'L{Monthly}' },\n { value : 'YEARLY', text : 'L{Yearly}' }\n ];\n }\n};\n// Register this widget type with its Factory\nRecurrenceFrequencyCombo.initClass();\nRecurrenceFrequencyCombo._$name = 'RecurrenceFrequencyCombo';", "import RecurrenceFrequencyCombo from './RecurrenceFrequencyCombo.js';\n/**\n * @module Scheduler/view/recurrence/field/RecurrenceCombo\n */\n/**\n * A combobox field for selecting a recurrence pattern: `Daily`, `Weekly`, `Monthly` or `Yearly` if the recurrence\n * has no other non-default settings, or `Custom...` if the recurrence has custom setting applied.\n *\n * {@inlineexample Scheduler/view/RecurrenceCombo.js}\n *\n * @extends Scheduler/view/recurrence/field/RecurrenceFrequencyCombo\n * @classtype recurrencecombo\n */\nexport default class RecurrenceCombo extends RecurrenceFrequencyCombo {\n static get $name() {\n return 'RecurrenceCombo';\n }\n // Factoryable type name\n static get type() {\n return 'recurrencecombo';\n }\n static get defaultConfig() {\n return {\n customValue : 'custom',\n placeholder : 'None',\n splitCls : 'b-recurrencecombo-split',\n items : true,\n highlightExternalChange : false\n };\n }\n buildItems() {\n const me = this;\n return [\n { value : 'none', text : 'L{None}' },\n ...super.buildItems(),\n { value : me.customValue, text : 'L{Custom}', cls : me.splitCls }\n ];\n }\n set value(value) {\n // Use 'none' instead of falsy value\n value = value || 'none';\n super.value = value;\n }\n get value() {\n return super.value;\n }\n set recurrence(recurrence) {\n const me = this;\n if (recurrence) {\n me.value = me.isCustomRecurrence(recurrence) ? me.customValue : recurrence.frequency;\n }\n else {\n me.value = null;\n }\n }\n isCustomRecurrence(recurrence) {\n const { interval, days, monthDays, months } = recurrence;\n return Boolean(interval > 1 || (days && days.length) || (monthDays && monthDays.length) || (months && months.length));\n }\n};\n// Register this widget type with its Factory\nRecurrenceCombo.initClass();\nRecurrenceCombo._$name = 'RecurrenceCombo';", "import Button from '../../../Core/widget/Button.js';\nimport RecurrenceLegend from '../../data/util/recurrence/RecurrenceLegend.js';\n/**\n * @module Scheduler/view/recurrence/RecurrenceLegendButton\n */\n/**\n * A button which displays the associated {@link #property-recurrence} info in a human readable form.\n * @extends Core/widget/Button\n * @classtype recurrencelegendbutton\n */\nexport default class RecurrenceLegendButton extends Button {\n static get $name() {\n return 'RecurrenceLegendButton';\n }\n // Factoryable type name\n static get type() {\n return 'recurrencelegendbutton';\n }\n static get defaultConfig() {\n return {\n localizableProperties : [],\n recurrence : null\n };\n }\n /**\n * Sets / gets the recurrence to display description for.\n * @property {Scheduler.model.RecurrenceModel}\n */\n set recurrence(recurrence) {\n this._recurrence = recurrence;\n this.updateLegend();\n }\n get recurrence() {\n return this._recurrence;\n }\n set eventStartDate(eventStartDate) {\n this._eventStartDate = eventStartDate;\n this.updateLegend();\n }\n get eventStartDate() {\n return this._eventStartDate;\n }\n updateLegend() {\n const { recurrence } = this;\n this.text = recurrence ? RecurrenceLegend.getLegend(recurrence, this.eventStartDate) : '';\n }\n onLocaleChange() {\n // on locale switch we update the button text to use proper language\n this.updateLegend();\n }\n updateLocalization() {\n this.onLocaleChange();\n super.updateLocalization();\n }\n}\n// Register this widget type with its Factory\nRecurrenceLegendButton.initClass();\nRecurrenceLegendButton._$name = 'RecurrenceLegendButton';", "import DateHelper from '../../../../Core/helper/DateHelper.js';\nimport Combo from '../../../../Core/widget/Combo.js';\nimport RecurrenceDayRuleEncoder from '../../../data/util/recurrence/RecurrenceDayRuleEncoder.js';\n/**\n * @module Scheduler/view/recurrence/field/RecurrenceDaysCombo\n */\n/**\n * A combobox field allowing to pick days for the `Monthly` and `Yearly` mode in the {@link Scheduler.view.recurrence.RecurrenceEditor recurrence dialog}.\n *\n * @extends Core/widget/Combo\n * @classtype recurrencedayscombo\n */\nexport default class RecurrenceDaysCombo extends Combo {\n static get $name() {\n return 'RecurrenceDaysCombo';\n }\n // Factoryable type name\n static get type() {\n return 'recurrencedayscombo';\n }\n static get defaultConfig() {\n const\n allDaysValueAsArray = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'],\n allDaysValue = allDaysValueAsArray.join(',');\n return {\n allDaysValue,\n editable : false,\n defaultValue : allDaysValue,\n workingDaysValue : allDaysValueAsArray.filter((day, index) => !DateHelper.nonWorkingDays[index]).join(','),\n nonWorkingDaysValue : allDaysValueAsArray.filter((day, index) => DateHelper.nonWorkingDays[index]).join(','),\n splitCls : 'b-recurrencedays-split',\n displayField : 'text',\n valueField : 'value'\n };\n }\n buildItems() {\n const me = this;\n me._weekDays = null;\n return me.weekDays.concat([\n { value : me.allDaysValue, text : me.L('L{day}'), cls : me.splitCls },\n { value : me.workingDaysValue, text : me.L('L{weekday}') },\n { value : me.nonWorkingDaysValue, text : me.L('L{weekend day}') }\n ]);\n }\n get weekDays() {\n const me = this;\n if (!me._weekDays) {\n const weekStartDay = DateHelper.weekStartDay;\n const dayNames = DateHelper.getDayNames().map((text, index) => ({ text, value : RecurrenceDayRuleEncoder.encodeDay(index) }));\n // we should start week w/ weekStartDay\n me._weekDays = dayNames.slice(weekStartDay).concat(dayNames.slice(0, weekStartDay));\n }\n return me._weekDays;\n }\n set value(value) {\n const me = this;\n if (value && Array.isArray(value)) {\n value = value.join(',');\n }\n // if the value has no matching option in the store we need to use default value\n if (!value || !me.store.findRecord('value', value)) {\n value = me.defaultValue;\n }\n super.value = value;\n }\n get value() {\n let value = super.value;\n if (value && Array.isArray(value)) {\n value = value.join(',');\n }\n return value;\n }\n}\n// Register this widget type with its Factory\nRecurrenceDaysCombo.initClass();\nRecurrenceDaysCombo._$name = 'RecurrenceDaysCombo';", "import DateHelper from '../../../../Core/helper/DateHelper.js';\nimport ButtonGroup from '../../../../Core/widget/ButtonGroup.js';\nimport RecurrenceDayRuleEncoder from '../../../data/util/recurrence/RecurrenceDayRuleEncoder.js';\n/**\n * @module Scheduler/view/recurrence/field/RecurrenceDaysButtonGroup\n */\n/**\n * A segmented button field allowing to pick days for the \"Weekly\" mode in the {@link Scheduler.view.recurrence.RecurrenceEditor recurrence dialog}.\n *\n * {@inlineexample Scheduler/view/RecurrenceDaysButtonGroup.js}\n *\n * @extends Core/widget/ButtonGroup\n */\nexport default class RecurrenceDaysButtonGroup extends ButtonGroup {\n static get $name() {\n return 'RecurrenceDaysButtonGroup';\n }\n // Factoryable type name\n static get type() {\n return 'recurrencedaysbuttongroup';\n }\n static get defaultConfig() {\n return {\n defaults : {\n cls : 'b-raised',\n toggleable : true\n }\n };\n }\n construct(config = {}) {\n const me = this;\n config.columns = 7;\n config.items = me.buildItems();\n super.construct(config);\n }\n updateItemText(item) {\n const day = RecurrenceDayRuleEncoder.decodeDay(item.value)[0];\n item.text = DateHelper.getDayName(day).substring(0, 3);\n }\n buildItems() {\n const me = this;\n if (!me.__items) {\n const weekStartDay = DateHelper.weekStartDay;\n const dayNames = DateHelper.getDayNames().map((text, index) => ({\n text : text.substring(0, 3),\n value : RecurrenceDayRuleEncoder.encodeDay(index)\n }));\n // we should start week w/ weekStartDay\n me.__items = dayNames.slice(weekStartDay).concat(dayNames.slice(0, weekStartDay));\n }\n return me.__items;\n }\n set value(value) {\n if (value && Array.isArray(value)) {\n value = value.join(',');\n }\n super.value = value;\n }\n get value() {\n let value = super.value;\n if (value && Array.isArray(value)) {\n value = value.join(',');\n }\n return value;\n }\n onLocaleChange() {\n // update button texts on locale switch\n this.items.forEach(this.updateItemText, this);\n }\n updateLocalization() {\n this.onLocaleChange();\n super.updateLocalization();\n }\n get widgetClassList() {\n const classList = super.widgetClassList;\n // to look more like a real field\n classList.push('b-field');\n return classList;\n }\n};\n// Register this widget type with its Factory\nRecurrenceDaysButtonGroup.initClass();\nRecurrenceDaysButtonGroup._$name = 'RecurrenceDaysButtonGroup';", "import ButtonGroup from '../../../../Core/widget/ButtonGroup.js';\n/**\n * A segmented button field allowing to pick month days for the `Monthly` mode in the {@link Scheduler.view.recurrence.RecurrenceEditor recurrence dialog}.\n *\n * @extends Core/widget/ButtonGroup\n */\nexport default class RecurrenceMonthDaysButtonGroup extends ButtonGroup {\n static get $name() {\n return 'RecurrenceMonthDaysButtonGroup';\n }\n // Factoryable type name\n static get type() {\n return 'recurrencemonthdaysbuttongroup';\n }\n static get defaultConfig() {\n return {\n defaults : {\n toggleable : true,\n cls : 'b-raised'\n }\n };\n }\n get minValue() {\n return 1;\n }\n get maxValue() {\n return 31;\n }\n construct(config = {}) {\n const me = this;\n config.columns = 7;\n config.items = me.buildItems();\n super.construct(config);\n }\n buildItems() {\n const\n me = this,\n items = [];\n for (let value = me.minValue; value <= me.maxValue; value++) {\n // button config\n items.push({\n text : value + '',\n value\n });\n }\n return items;\n }\n get widgetClassList() {\n const classList = super.widgetClassList;\n // to look more like a real field\n classList.push('b-field');\n return classList;\n }\n};\n// Register this widget type with its Factory\nRecurrenceMonthDaysButtonGroup.initClass();\nRecurrenceMonthDaysButtonGroup._$name = 'RecurrenceMonthDaysButtonGroup';", "import DateHelper from '../../../../Core/helper/DateHelper.js';\nimport ButtonGroup from '../../../../Core/widget/ButtonGroup.js';\n/**\n * A segmented button field allowing to pick months for the `Yearly` mode in the {@link Scheduler.view.recurrence.RecurrenceEditor recurrence dialog}.\n *\n * @extends Core/widget/ButtonGroup\n */\nexport default class RecurrenceMonthsButtonGroup extends ButtonGroup {\n static get $name() {\n return 'RecurrenceMonthsButtonGroup';\n }\n // Factoryable type name\n static get type() {\n return 'recurrencemonthsbuttongroup';\n }\n static get defaultConfig() {\n return {\n defaults : {\n toggleable : true,\n cls : 'b-raised'\n }\n };\n }\n construct(config = {}) {\n const me = this;\n config.columns = 4;\n config.items = me.buildItems();\n super.construct(config);\n }\n buildItems() {\n return DateHelper.getMonthNames().map((item, index) => ({\n text : item.substring(0, 3),\n value : index + 1 // 1-based\n }));\n }\n updateItemText(item) {\n item.text = DateHelper.getMonthName(item.value - 1).substring(0, 3);\n }\n onLocaleChange() {\n // update button texts on locale switch\n this.items.forEach(this.updateItemText, this);\n }\n updateLocalization() {\n this.onLocaleChange();\n super.updateLocalization();\n }\n get widgetClassList() {\n const classList = super.widgetClassList;\n // to look more like a real field\n classList.push('b-field');\n return classList;\n }\n};\n// Register this widget type with its Factory\nRecurrenceMonthsButtonGroup.initClass();\nRecurrenceMonthsButtonGroup._$name = 'RecurrenceMonthsButtonGroup';", "import Combo from '../../../../Core/widget/Combo.js';\n/**\n * @module Scheduler/view/recurrence/field/RecurrenceStopConditionCombo\n */\n/**\n * A combobox field allowing to choose stop condition for the recurrence in the {@link Scheduler.view.recurrence.RecurrenceEditor recurrence dialog}.\n *\n * @extends Core/widget/Combo\n * @classtype recurrencestopconditioncombo\n */\nexport default class RecurrenceStopConditionCombo extends Combo {\n static get $name() {\n return 'RecurrenceStopConditionCombo';\n }\n // Factoryable type name\n static get type() {\n return 'recurrencestopconditioncombo';\n }\n static get defaultConfig() {\n return {\n editable : false,\n placeholder : 'Never',\n displayField : 'text',\n valueField : 'value'\n };\n }\n buildItems() {\n return [\n { value : 'never', text : this.L('L{Never}') },\n { value : 'count', text : this.L('L{After}') },\n { value : 'date', text : this.L('L{On date}') }\n ];\n }\n set value(value) {\n // Use 'never' instead of falsy value\n value = value || 'never';\n super.value = value;\n }\n get value() {\n return super.value;\n }\n get recurrence() {\n return this._recurrence;\n }\n set recurrence(recurrence) {\n let value = null;\n if (recurrence.endDate) {\n value = 'date';\n }\n else if (recurrence.count) {\n value = 'count';\n }\n this._recurrence = recurrence;\n this.value = value;\n }\n};\n// Register this widget type with its Factory\nRecurrenceStopConditionCombo.initClass();\nRecurrenceStopConditionCombo._$name = 'RecurrenceStopConditionCombo';", "import ArrayHelper from '../../../../Core/helper/ArrayHelper.js';\nimport Combo from '../../../../Core/widget/Combo.js';\n/**\n * @module Scheduler/view/recurrence/field/RecurrencePositionsCombo\n */\n/**\n * A combobox field allowing to specify day positions in the {@link Scheduler.view.recurrence.RecurrenceEditor recurrence editor}.\n *\n * @extends Core/widget/Combo\n * @classtype recurrencepositionscombo\n */\nexport default class RecurrencePositionsCombo extends Combo {\n static get $name() {\n return 'RecurrencePositionsCombo';\n }\n // Factoryable type name\n static get type() {\n return 'recurrencepositionscombo';\n }\n static get defaultConfig() {\n return {\n editable : false,\n splitCls : 'b-sch-recurrencepositions-split',\n displayField : 'text',\n valueField : 'value',\n defaultValue : 1,\n maxPosition : 5\n };\n }\n buildItems() {\n return this.buildDayNumbers().concat([\n { value : '-1', text : this.L('L{position-1}'), cls : this.splitCls }\n ]);\n }\n buildDayNumbers() {\n return ArrayHelper.populate(this.maxPosition, i => (\n { value : i + 1, text : this.L(`position${i + 1}`) }\n ));\n }\n set value(value) {\n const me = this;\n if (value && Array.isArray(value)) {\n value = value.join(',');\n }\n // if the value has no matching option in the store we need to use default value\n if (!value || !me.store.findRecord('value', value)) {\n value = me.defaultValue;\n }\n super.value = value;\n }\n get value() {\n const value = super.value;\n return value ? `${value}`.split(',').map(item => parseInt(item, 10)) : [];\n }\n};\n// Register this widget type with its Factory\nRecurrencePositionsCombo.initClass();\nRecurrencePositionsCombo._$name = 'RecurrencePositionsCombo';", "import RecurrenceDayRuleEncoder from '../../data/util/recurrence/RecurrenceDayRuleEncoder.js';\nimport Panel from '../../../Core/widget/Panel.js';\nimport '../../../Core/widget/Widget.js';\nimport '../../../Core/widget/Button.js';\nimport '../../../Core/widget/Checkbox.js';\nimport '../../../Core/widget/SlideToggle.js';\nimport '../../../Core/widget/DateField.js';\nimport '../../../Core/widget/NumberField.js';\nimport './field/RecurrenceFrequencyCombo.js';\nimport './field/RecurrenceDaysCombo.js';\nimport './field/RecurrenceDaysButtonGroup.js';\nimport './field/RecurrenceMonthDaysButtonGroup.js';\nimport './field/RecurrenceMonthsButtonGroup.js';\nimport './field/RecurrenceStopConditionCombo.js';\nimport './field/RecurrencePositionsCombo.js';\nimport BrowserHelper from '../../../Core/helper/BrowserHelper.js';\n/**\n * @module Scheduler/view/recurrence/RecurrenceEditorPanel\n */\n/**\n * Panel containing fields used to edit a {@link Scheduler.model.RecurrenceModel recurrence model}. Used by\n * {@link Scheduler/view/recurrence/RecurrenceEditor}, and by the recurrence tab in Scheduler Pro's event editor.\n *\n * Not intended to be used separately.\n *\n * @extends Core/widget/Panel\n * @classtype recurrenceeditorpanel\n * @private\n */\nexport default class RecurrenceEditorPanel extends Panel {\n static $name = 'RecurrenceEditorPanel';\n static type = 'recurrenceeditorpanel';\n static configurable = {\n cls : 'b-recurrenceeditor',\n record : false,\n addNone : false,\n items : {\n frequencyField : {\n type : 'recurrencefrequencycombo',\n name : 'frequency',\n label : 'L{RecurrenceEditor.Frequency}',\n weight : 10,\n onChange : 'up.onFrequencyFieldChange',\n addNone : 'up.addNone'\n },\n intervalField : {\n type : 'numberfield',\n weight : 15,\n name : 'interval',\n label : 'L{RecurrenceEditor.Every}',\n min : 1,\n required : true\n },\n daysButtonField : {\n type : 'recurrencedaysbuttongroup',\n weight : 20,\n name : 'days',\n forFrequency : 'WEEKLY'\n },\n // the radio button enabling \"monthDaysButtonField\" in MONTHLY mode\n monthDaysRadioField : {\n type : 'checkbox',\n weight : 30,\n toggleGroup : 'radio',\n forFrequency : 'MONTHLY',\n label : 'L{RecurrenceEditor.Each}',\n checked : true,\n onChange : 'up.onMonthDaysRadioFieldChange'\n },\n monthDaysButtonField : {\n type : 'recurrencemonthdaysbuttongroup',\n weight : 40,\n name : 'monthDays',\n forFrequency : 'MONTHLY'\n },\n monthsButtonField : {\n type : 'recurrencemonthsbuttongroup',\n weight : 50,\n name : 'months',\n forFrequency : 'YEARLY'\n },\n // the radio button enabling positions & days combos in MONTHLY & YEARLY modes\n positionAndDayRadioField : {\n type : 'checkbox',\n weight : 60,\n toggleGroup : 'radio',\n forFrequency : 'MONTHLY|YEARLY',\n label : 'L{RecurrenceEditor.On the}',\n onChange : 'up.onPositionAndDayRadioFieldChange'\n },\n positionsCombo : {\n type : 'recurrencepositionscombo',\n weight : 80,\n name : 'positions',\n forFrequency : 'MONTHLY|YEARLY'\n },\n daysCombo : {\n type : 'recurrencedayscombo',\n weight : 90,\n name : 'days',\n forFrequency : 'MONTHLY|YEARLY',\n flex : 1\n },\n stopRecurrenceField : {\n type : 'recurrencestopconditioncombo',\n weight : 100,\n label : 'L{RecurrenceEditor.End repeat}',\n onChange : 'up.onStopRecurrenceFieldChange'\n },\n countField : {\n type : 'numberfield',\n weight : 110,\n name : 'count',\n min : 2,\n required : true,\n disabled : true,\n label : ' '\n },\n endDateField : {\n type : 'datefield',\n weight : 120,\n name : 'endDate',\n hidden : true,\n disabled : true,\n label : ' ',\n required : true\n }\n }\n };\n setupWidgetConfig(widgetConfig) {\n // All our inputs must be mutated using triggers and touch gestures on mobile\n if (BrowserHelper.isMobile && !('editable' in widgetConfig)) {\n widgetConfig.editable = false;\n }\n return super.setupWidgetConfig(...arguments);\n }\n updateRecord(record) {\n super.updateRecord(record);\n const\n me = this,\n {\n frequencyField,\n daysButtonField,\n monthDaysButtonField,\n monthsButtonField,\n monthDaysRadioField,\n positionAndDayRadioField,\n stopRecurrenceField\n } = me.widgetMap;\n if (record) {\n const\n event = record.timeSpan,\n startDate = event?.startDate;\n // some fields default values are calculated based on event \"startDate\" value\n if (startDate) {\n // if no \"days\" value provided\n if (!record.days || !record.days.length) {\n daysButtonField.value = [RecurrenceDayRuleEncoder.encodeDay(startDate.getDay())];\n }\n // if no \"monthDays\" value provided\n if (!record.monthDays || !record.monthDays.length) {\n monthDaysButtonField.value = startDate.getDate();\n }\n // if no \"months\" value provided\n if (!record.months || !record.months.length) {\n monthsButtonField.value = startDate.getMonth() + 1;\n }\n }\n // if the record has both \"days\" & \"positions\" fields set check \"On the\" checkbox\n if (record.days && record.positions) {\n positionAndDayRadioField.check();\n if (!me.isPainted) {\n monthDaysRadioField.uncheck();\n }\n }\n else {\n monthDaysRadioField.check();\n if (!me.isPainted || !me.element.isConnected) {\n positionAndDayRadioField.uncheck();\n }\n }\n stopRecurrenceField.recurrence = record;\n }\n else {\n frequencyField.value = 'NONE';\n }\n }\n /**\n * Updates the provided recurrence model with the contained form data.\n * If recurrence model is not provided updates the last loaded recurrence model.\n * @internal\n */\n syncEventRecord(recurrence) {\n // get values relevant to the RecurrenceModel (from enabled fields only)\n const values = this.getValues((w) => w.name in recurrence && !w.disabled);\n // Disabled field does not contribute to values, clear manually\n if (!('endDate' in values)) {\n values.endDate = null;\n }\n if (!('count' in values)) {\n values.count = null;\n }\n recurrence.set(values);\n }\n toggleStopFields() {\n const\n me = this,\n { countField, endDateField } = me.widgetMap;\n switch (me.widgetMap.stopRecurrenceField.value) {\n case 'count' :\n countField.show();\n countField.enable();\n endDateField.hide();\n endDateField.disable();\n break;\n case 'date' :\n countField.hide();\n countField.disable();\n endDateField.show();\n endDateField.enable();\n break;\n default :\n countField.hide();\n endDateField.hide();\n countField.disable();\n endDateField.disable();\n }\n }\n onMonthDaysRadioFieldChange({ checked }) {\n const { monthDaysButtonField } = this.widgetMap;\n monthDaysButtonField.disabled = !checked || !this.isWidgetAvailableForFrequency(monthDaysButtonField);\n }\n onPositionAndDayRadioFieldChange({ checked }) {\n const { daysCombo, positionsCombo } = this.widgetMap;\n // toggle day & positions combos\n daysCombo.disabled = positionsCombo.disabled = !checked || !this.isWidgetAvailableForFrequency(daysCombo);\n }\n onStopRecurrenceFieldChange() {\n this.toggleStopFields();\n }\n isWidgetAvailableForFrequency(widget, frequency = this.widgetMap.frequencyField.value) {\n return !widget.forFrequency || widget.forFrequency.includes(frequency);\n }\n onFrequencyFieldChange({ value, oldValue, valid }) {\n const\n me = this,\n items = me.queryAll(w => 'forFrequency' in w),\n {\n intervalField,\n stopRecurrenceField\n } = me.widgetMap;\n if (valid && value) {\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n if (me.isWidgetAvailableForFrequency(item, value)) {\n item.show();\n item.enable();\n }\n else {\n item.hide();\n item.disable();\n }\n }\n // Special handling of NONE\n intervalField.hidden = stopRecurrenceField.hidden = value === 'NONE';\n if (value !== 'NONE') {\n intervalField.hint = me.L(`L{RecurrenceEditor.${value}intervalUnit}`);\n }\n // When a non-recurring record is loaded, intervalField is set to empty. We want it to default to 1 here\n // to not look weird (defaults to 1 on the data layer)\n if (oldValue === 'NONE' && intervalField.value == null) {\n intervalField.value = 1;\n }\n me.toggleFieldsState();\n }\n }\n toggleFieldsState() {\n const\n me = this,\n { widgetMap } = me;\n me.onMonthDaysRadioFieldChange({ checked : widgetMap.monthDaysRadioField.checked });\n me.onPositionAndDayRadioFieldChange({ checked : widgetMap.positionAndDayRadioField.checked });\n me.onStopRecurrenceFieldChange();\n }\n updateLocalization() {\n // do extra labels translation (not auto-translated yet)\n const { countField, intervalField, frequencyField } = this.widgetMap;\n countField.hint = this.L('L{RecurrenceEditor.time(s)}');\n if (frequencyField.value && frequencyField.value !== 'NONE') {\n intervalField.hint = this.L(`L{RecurrenceEditor.${frequencyField.value}intervalUnit}`);\n }\n super.updateLocalization();\n }\n}\n// Register this widget type with its Factory\nRecurrenceEditorPanel.initClass();\nRecurrenceEditorPanel._$name = 'RecurrenceEditorPanel';", "import Popup from '../../../Core/widget/Popup.js';\nimport './RecurrenceEditorPanel.js';\n/**\n * @module Scheduler/view/recurrence/RecurrenceEditor\n */\n/**\n * Class implementing a dialog to edit a {@link Scheduler.model.RecurrenceModel recurrence model}. The class is used by\n * the {@link Scheduler.view.mixin.RecurringEvents recurring events} feature, and you normally don't need to instantiate\n * it.\n *\n * Before showing the dialog need to use {@link Core.widget.Container#property-record} to load a\n * {@link Scheduler.model.RecurrenceModel recurrence model} data into the editor fields. For example:\n *\n * ```javascript\n * // make the editor instance\n * const editor = new RecurrenceEditor();\n * // load recurrence model into it\n * editor.record = new RecurrenceModel({ frequency : \"WEEKLY\" });\n * // display the editor\n * editor.show();\n * ```\n *\n * @extends Core/widget/Popup\n * @classtype recurrenceeditor\n */\nexport default class RecurrenceEditor extends Popup {\n static get $name() {\n return 'RecurrenceEditor';\n }\n // Factoryable type name\n static get type() {\n return 'recurrenceeditor';\n }\n static get configurable() {\n return {\n draggable : true,\n closable : true,\n floating : true,\n cls : 'b-recurrenceeditor',\n title : 'L{Repeat event}',\n autoClose : true,\n width : 470,\n items : {\n recurrenceEditorPanel : {\n type : 'recurrenceeditorpanel',\n title : null\n }\n },\n bbar : {\n defaults : {\n localeClass : this\n },\n items : {\n foo : {\n type : 'widget',\n cls : 'b-label-filler',\n weight : 100\n },\n saveButton : {\n color : 'b-green',\n text : 'L{Save}',\n onClick : 'up.onSaveClick',\n weight : 200\n },\n cancelButton : {\n color : 'b-gray',\n text : 'L{Object.Cancel}',\n onClick : 'up.onCancelClick',\n weight : 300\n }\n }\n },\n scrollable : {\n overflowY : true\n }\n };\n }\n updateReadOnly(readOnly) {\n super.updateReadOnly(readOnly);\n // No save or cancel buttons. It's purely for information display when in readOnly mode\n this.bbar.hidden = readOnly;\n }\n get recurrenceEditorPanel() {\n return this.widgetMap.recurrenceEditorPanel;\n }\n updateRecord(record) {\n this.recurrenceEditorPanel.record = record;\n }\n onSaveClick() {\n const me = this;\n if (me.saveHandler) {\n me.saveHandler.call(me.thisObj || me, me, me.record);\n }\n else {\n me.recurrenceEditorPanel.syncEventRecord();\n me.close();\n }\n }\n onCancelClick() {\n const me = this;\n if (me.cancelHandler) {\n me.cancelHandler.call(me.thisObj || me, me, me.record);\n }\n else {\n me.close();\n }\n }\n}\n// Register this widget type with its Factory\nRecurrenceEditor.initClass();\nRecurrenceEditor._$name = 'RecurrenceEditor';", "import Widget from '../../../Core/widget/Widget.js';\nimport Base from '../../../Core/Base.js';\nimport '../../view/recurrence/RecurrenceConfirmationPopup.js';\nimport '../../view/recurrence/field/RecurrenceCombo.js';\nimport '../../view/recurrence/RecurrenceLegendButton.js';\nimport '../../view/recurrence/RecurrenceEditor.js';\n/**\n * @module Scheduler/feature/mixin/RecurringEventEdit\n */\n/**\n * This mixin class provides recurring events functionality to the {@link Scheduler.feature.EventEdit event editor}.\n * @mixin\n */\nexport default Target => class RecurringEventEdit extends (Target || Base) {\n static get $name() {\n return 'RecurringEventEdit';\n }\n static get configurable() {\n return {\n recurringEventsItems : {\n /**\n * Reference to the `Repeat` event field, if used\n * @member {Scheduler.view.recurrence.field.RecurrenceCombo} recurrenceCombo\n * @readonly\n */\n recurrenceCombo : {\n type : 'recurrencecombo',\n label : 'L{EventEdit.Repeat}',\n ref : 'recurrenceCombo',\n weight : 700\n },\n /**\n * Reference to the button that opens the event repeat settings dialog, if used\n * @member {Scheduler.view.recurrence.RecurrenceLegendButton} editRecurrenceButton\n * @readonly\n */\n editRecurrenceButton : {\n type : 'recurrencelegendbutton',\n ref : 'editRecurrenceButton',\n name : 'recurrenceRule',\n color : 'b-gray',\n menuIcon : null,\n flex : 1,\n weight : 800,\n ignoreParentReadOnly : true\n }\n },\n /**\n * Set to `false` to hide recurring fields in event editor, even if the\n * {@link Scheduler.view.mixin.RecurringEvents#config-enableRecurringEvents Recurring Events} is `true`\n * and a recurring event is being edited.\n * @config {Boolean}\n * @category Recurring\n */\n showRecurringUI : null\n };\n }\n changeEditorConfig(editorConfig) {\n editorConfig.items = { ...editorConfig.items, ...this.recurringEventsItems };\n // EditBase inserts extraItems *after* all default items are in\n editorConfig = super.changeEditorConfig(editorConfig);\n return editorConfig;\n }\n doDestroy() {\n this._recurrenceConfirmation?.destroy();\n this._recurrenceEditor?.destroy();\n super.doDestroy();\n }\n onEditorConstructed(editor) {\n const me = this;\n editor.ion({\n hide : me.onRecurringEventEditorHide,\n thisObj : me\n });\n if (me.editRecurrenceButton) {\n me.editRecurrenceButton.menu = me.recurrenceEditor;\n }\n me.recurrenceCombo?.ion({\n change : me.onRecurrenceComboChange,\n thisObj : me\n });\n }\n updateReadOnly(readOnly) {\n if (this._recurrenceEditor) {\n this._recurrenceEditor.readOnly = readOnly;\n }\n }\n internalShowEditor() {\n this.toggleRecurringFieldsVisibility(this.client.enableRecurringEvents && this.showRecurringUI !== false);\n }\n toggleRecurringFieldsVisibility(show = true) {\n const methodName = show ? 'show' : 'hide';\n this.editRecurrenceButton?.[methodName]?.();\n this.recurrenceCombo?.[methodName]?.();\n }\n onRecurringEventEditorHide() {\n // Use the private property name in order not to call it into existence\n if (this._recurrenceEditor?.isVisible) {\n this.recurrenceEditor.hide();\n }\n // Use the private property name in order not to call it into existence\n if (this._recurrenceConfirmation?.isVisible) {\n this.recurrenceConfirmation.hide();\n }\n }\n // Builds RecurrenceModel to load into the recurrenceEditor\n // It builds the model based on either:\n // - recurrence rule string (if provided)\n // - or the event being edited recurrence (if the event is repeating)\n // - or simply make a recurrence model w/ default state (by default means: Frequency=Daily, Interval=1)\n makeRecurrence(rule) {\n const\n event = this.eventRecord,\n eventCopy = event.copy();\n let recurrence = event.recurrence;\n if (!rule && recurrence) {\n recurrence = recurrence.copy();\n }\n else {\n recurrence = new event.recurrenceModel(rule ? { rule } : {});\n }\n // bind cloned recurrence to the cloned event\n recurrence.timeSpan = eventCopy;\n // update cloned event w/ start date from the UI field\n eventCopy.setStartDate(this.values.startDate);\n recurrence.suspendTimeSpanNotifying();\n return recurrence;\n }\n onRecurrableEventBeforeSave({ eventRecord, context }) {\n const me = this;\n // Other views features may trigger beforeEventSave, so only react when *we* are editing.\n if (me.isEditing && !eventRecord.isCreating && eventRecord.supportsRecurring &&\n (eventRecord.isRecurring || eventRecord.isOccurrence)) {\n me.recurrenceConfirmation.confirm({\n actionType : 'update',\n eventRecord,\n changerFn() {\n context.finalize(true);\n },\n cancelFn() {\n context.finalize(false);\n }\n });\n // signalizes that we plan to decide save or not asynchronously\n context.async = true;\n }\n }\n set recurrenceConfirmation(recurrenceConfirmation) {\n this._recurrenceConfirmation = recurrenceConfirmation;\n }\n get recurrenceConfirmation() {\n const me = this;\n let recurrenceConfirmation = me._recurrenceConfirmation;\n if (!recurrenceConfirmation || !recurrenceConfirmation.$$name) {\n recurrenceConfirmation = Widget.create({\n type : 'recurrenceconfirmation',\n owner : me.editor,\n ...recurrenceConfirmation\n });\n me._recurrenceConfirmation = recurrenceConfirmation;\n }\n return recurrenceConfirmation;\n }\n set recurrenceEditor(recurrenceEditor) {\n this._recurrenceEditor = recurrenceEditor;\n }\n get recurrenceEditor() {\n const me = this;\n let recurrenceEditor = me._recurrenceEditor;\n // Recurrence editor is centered and modal.\n if (!recurrenceEditor || !recurrenceEditor.$$name) {\n me._recurrenceEditor = recurrenceEditor = Widget.create({\n type : 'recurrenceeditor',\n autoShow : false,\n centered : true,\n modal : true,\n // It's used as the Menu of a Button which syncs the width unless it's already set\n minWidth : 'auto',\n constrainTo : globalThis,\n anchor : false,\n rootElement : me.rootElement,\n saveHandler : me.recurrenceEditorSaveHandler,\n onBeforeShow : me.onBeforeShowRecurrenceEditor.bind(me),\n thisObj : me,\n ...recurrenceEditor\n });\n // Must set *after* construction, otherwise it becomes the default state\n // to reset readOnly back to. Must use direct property access because\n // getter consults state of editor.\n recurrenceEditor.readOnly = me._readOnly;\n }\n return recurrenceEditor;\n }\n onBeforeShowRecurrenceEditor() {\n const\n me = this,\n { recurrenceEditor, eventRecord } = me;\n if (recurrenceEditor && eventRecord?.supportsRecurring) {\n // if the event has no recurrence yet ..initialize it before showing recurrence editor\n if (!me.recurrence) {\n me.recurrence = me.makeRecurrence();\n }\n // update the cloned recurrence w/ up to date start date value\n me.recurrence.timeSpan.setStartDate(me.values.startDate);\n // load RecurrenceModel record into the recurrence editor\n recurrenceEditor.record = me.recurrence;\n // In case they drag it. Centered falls off if the widget has position set.\n recurrenceEditor.centered = true;\n }\n }\n loadRecurrenceData(recurrence) {\n this.recurrence = recurrence;\n this.updateRecurrenceFields(recurrence);\n }\n updateRecurrenceFields(recurrence) {\n const\n me = this,\n { editRecurrenceButton } = me;\n if (me.recurrenceCombo) {\n me.recurrenceCombo.recurrence = recurrence;\n }\n // update the recurrence legend\n if (editRecurrenceButton) {\n editRecurrenceButton.recurrence = recurrence;\n editRecurrenceButton.value = recurrence ? recurrence.rule : null;\n if (recurrence && me.client.enableRecurringEvents && me.showRecurringUI !== false) {\n editRecurrenceButton.show();\n }\n else {\n editRecurrenceButton.hide();\n }\n }\n }\n onRecurrenceComboChange({ source, value, userAction }) {\n if (userAction) {\n const\n me = this,\n { recurrenceEditor } = me;\n if (value === source.customValue) {\n // if user picked \"Custom\" - show recurrence editor\n // This will recurse through the change event into the opposite side\n // of the value test which will call updateRecurrenceFields, where the\n // assignment to the value of the recurrenceCombo will be a non-change.\n // That will sync the state of the recurrenceButton.\n me.recurrenceCombo.recurrence = me.makeRecurrence();\n if (recurrenceEditor.centered) {\n recurrenceEditor.show();\n }\n else {\n recurrenceEditor.show((me.editRecurrenceButton || source).element);\n }\n }\n // user has picked some frequency -> make a new recurrence based on it\n else {\n me.loadRecurrenceData(value && value !== 'none' ? me.makeRecurrence(`FREQ=${value}`) : null);\n }\n }\n }\n recurrenceEditorSaveHandler(editor, recurrence) {\n // apply changes to the kept recurrence\n editor.recurrenceEditorPanel.syncEventRecord(recurrence);\n // update the recurrence related UI\n this.updateRecurrenceFields(recurrence);\n editor.close();\n }\n onDatesChange(...args) {\n super.onDatesChange(...args);\n if (!this.loadingRecord && this.editRecurrenceButton) {\n const { startDate } = this.values;\n if (startDate) {\n this.editRecurrenceButton.eventStartDate = startDate;\n }\n }\n }\n internalLoadRecord(eventRecord) {\n if (eventRecord?.supportsRecurring) {\n this.loadRecurrenceData(eventRecord.recurrence ? this.makeRecurrence() : null);\n }\n }\n updateRecord(record) {\n // Special handling for when setting recurrence to \"None\". Since button gets hidden its value is not picked up\n // by the normal flow.\n if (record.recurrenceRule && !this.recurrence) {\n record.recurrenceRule = null;\n }\n return super.updateRecord(record);\n }\n};\n", "import Combo from '../../Core/widget/Combo.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\n/**\n * @module Scheduler/widget/ResourceCombo\n */\n/**\n * A Combo subclass which selects resources, optionally displaying the {@link Scheduler.model.ResourceModel#field-eventColor}\n * of each resource in the picker and in the input area.\n *\n * {@inlineexample Scheduler/widget/ResourceCombo.js}\n *\n * @extends Core/widget/Combo\n * @classtype resourcecombo\n * @inputfield\n */\nexport default class ResourceCombo extends Combo {\n static get $name() {\n return 'ResourceCombo';\n }\n // Factoryable type name\n static get type() {\n return 'resourcecombo';\n }\n static get configurable() {\n return {\n /**\n * Show the {@link Scheduler.model.ResourceModel#field-eventColor event color} for each resource\n * @config {Boolean}\n * @default false\n */\n showEventColor : null,\n displayField : 'name',\n valueField : 'id',\n picker : {\n cls : 'b-resourcecombo-picker',\n itemIconTpl(record) {\n if (this.owner.showEventColor) {\n const\n { eventColor } = record,\n isStyleColor = !DomHelper.isNamedColor(eventColor),\n style = eventColor ? (isStyleColor ? ` style=\"color:${eventColor}\"` : '') : ' style=\"display:none\"',\n colorClass = !eventColor || isStyleColor ? '' : ` b-sch-foreground-${eventColor}`;\n return `
`;\n }\n if (this.multiSelect) {\n return `
`;\n }\n return '';\n }\n }\n };\n }\n changeShowEventColor(showEventColor) {\n return Boolean(showEventColor);\n }\n updateShowEventColor(showEventColor) {\n this.element.classList.toggle('b-show-event-color', Boolean(showEventColor));\n this._picker?.element.classList.toggle('b-show-event-color', Boolean(showEventColor));\n }\n changePicker(picker, oldPicker) {\n picker = super.changePicker(picker, oldPicker);\n picker?.element.classList.toggle('b-show-event-color', Boolean(this.showEventColor));\n return picker;\n }\n // Implementation needed at this level because it has two inner elements in its inputWrap\n get innerElements() {\n return [\n {\n class : 'b-icon b-resource-icon b-icon-square b-hide-display',\n reference : 'resourceIcon'\n },\n this.inputElement\n ];\n }\n syncInputFieldValue() {\n const\n me = this,\n {\n resourceIcon,\n lastResourceIconCls\n } = me,\n { classList } = resourceIcon,\n eventColor = me.selected?.eventColor ?? '';\n super.syncInputFieldValue();\n // Remove last colour whichever way it was done\n resourceIcon.style.color = '';\n lastResourceIconCls && classList.remove(lastResourceIconCls);\n me.lastResourceIconCls = null;\n if (eventColor) {\n if (DomHelper.isNamedColor(eventColor)) {\n me.lastResourceIconCls = `b-sch-foreground-${eventColor}`;\n classList.add(me.lastResourceIconCls);\n }\n else {\n resourceIcon.style.color = eventColor;\n }\n classList.remove('b-hide-display');\n }\n else {\n classList.add('b-hide-display');\n }\n }\n}\n// Register this widget type with its Factory\nResourceCombo.initClass();\nResourceCombo._$name = 'ResourceCombo';", "import ColorField from '../../Core/widget/ColorField.js';\nimport './EventColorPicker.js';\n/**\n * @module Scheduler/widget/EventColorField\n */\n/**\n * Color field widget for editing the EventModel's {@link Scheduler.model.mixin.EventModelMixin#field-eventColor} field.\n * See Schedulers {@link Scheduler.view.mixin.TimelineEventRendering#config-eventColor eventColor config} for default\n * available colors.\n *\n * What differs this widget from {@link Core.widget.ColorField} is that this uses the\n * {@link Scheduler.widget.EventColorPicker} as its picker. And also that the {@link #config-name} config is set to\n * `eventColor` per default.\n *\n * {@inlineexample Scheduler/widget/EventColorField.js}\n *\n * This widget may be operated using the keyboard. `ArrowDown` opens the color picker, which itself is keyboard\n * navigable.\n *\n * ```javascript\n * let eventColorField = new EventColorField();\n * ```\n *\n * @extends Core/widget/ColorField\n * @classtype eventcolorfield\n * @inputfield\n */\nexport default class EventColorField extends ColorField {\n static $name = 'EventColorField';\n static type = 'eventcolorfield';\n static configurable = {\n picker : {\n type : 'eventcolorpicker'\n },\n name : 'eventColor'\n };\n}\nEventColorField.initClass();\nEventColorField._$name = 'EventColorField';", "import EditBase from './base/EditBase.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport '../view/EventEditor.js';\nimport Delayable from '../../Core/mixin/Delayable.js';\nimport RecurringEventEdit from './mixin/RecurringEventEdit.js';\nimport '../../Core/widget/TextField.js';\nimport '../../Scheduler/widget/ResourceCombo.js';\nimport TimeSpan from '../../Scheduler/model/TimeSpan.js';\nimport '../../Core/widget/DateField.js';\nimport '../../Core/widget/TimeField.js';\nimport '../../Core/widget/Button.js';\nimport '../widget/EventColorField.js';\nimport Widget from '../../Core/widget/Widget.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport AsyncHelper from '../../Core/helper/AsyncHelper.js';\nimport TaskEditStm from './mixin/TaskEditStm.js';\n/**\n * @module Scheduler/feature/EventEdit\n */\nconst punctuation = /[^\\w\\d]/g;\n/**\n * Feature that displays a popup containing widgets for editing event data.\n *\n * {@inlineexample Scheduler/feature/EventEdit.js}\n *\n * To customize its contents you can:\n *\n * * Reconfigure built-in widgets by providing override configs in the {@link Scheduler.feature.base.EditBase#config-items} config.\n * * Change the date format of the date & time fields: {@link Scheduler.feature.base.EditBase#config-dateFormat} and {@link Scheduler.feature.base.EditBase#config-timeFormat }\n * * Configure provided widgets in the editor and add your own in the {@link Scheduler.feature.base.EditBase#config-items} config.\n * * Remove fields related to recurring events configuration (such as `recurrenceCombo`) by setting {@link Scheduler.feature.mixin.RecurringEventEdit#config-showRecurringUI} config to `false`.\n * * Advanced: Reconfigure the whole editor widget using {@link #config-editorConfig}\n *\n * ## Built-in widgets\n *\n * The built-in widgets are:\n *\n * | Widget ref | Type | Weight | Description |\n * |------------------------|----------------------------------------------------------|--------|----------------------------------------------------------------|\n * | `nameField` | {@link Core.widget.TextField} | 100 | Edit name |\n * | `resourceField` | {@link Scheduler.widget.ResourceCombo} | 200 | Pick resource(s) |\n * | `startDateField` | {@link Core.widget.DateField} | 300 | Edit startDate (date part) |\n * | `startTimeField` | {@link Core.widget.TimeField} | 400 | Edit startDate (time part) |\n * | `endDateField` | {@link Core.widget.DateField} | 500 | Edit endDate (date part) |\n * | `endTimeField` | {@link Core.widget.TimeField} | 600 | Edit endDate (time part) |\n * | `recurrenceCombo` | {@link Scheduler.view.recurrence.field.RecurrenceCombo} | 700 | Select recurrence rule (only visible if recurrence is used) |\n * | `editRecurrenceButton` | {@link Scheduler.view.recurrence.RecurrenceLegendButton} | 800 | Edit the recurrence rule (only visible if recurrence is used) |\n * | `colorField` \u00B9 | {@link Scheduler.widget.EventColorField} | 700 | Choose background color for the event bar |\n *\n * **\u00B9** Set the {@link Scheduler.view.SchedulerBase#config-showEventColorPickers} config to `true` to enable this field\n *\n * The built-in buttons are:\n *\n * | Widget ref | Type | Weight | Description |\n * |------------------------|--------------------------------------------------------------------------|--------|----------------------------------------------------------------|\n * | `saveButton` | {@link Core.widget.Button} | 100 | Save event button on the bbar |\n * | `deleteButton` | {@link Core.widget.Button} | 200 | Delete event button on the bbar |\n * | `cancelButton` | {@link Core.widget.Button} | 300 | Cancel event editing button on the bbar |\n *\n * ## Removing a built-in item\n *\n * To remove a built-in widget, specify its `ref` as `null` in the `items` config:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * eventEdit : {\n * items : {\n * // Remove the start time field\n * startTimeField : null\n * }\n * }\n * }\n * })\n * ```\n *\n * Bottom buttons may be hidden using the `bbar` config passed to `editorConfig`:\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * eventEdit : {\n * editorConfig : {\n * bbar : {\n * items : {\n * deleteButton : null\n * }\n * }\n * }\n * }\n * }\n * })\n * ```\n *\n * To remove fields related to recurring events configuration (such as `recurrenceCombo`), set {@link Scheduler.feature.mixin.RecurringEventEdit#config-showRecurringUI} config to `false`.\n *\n * ## Customizing a built-in widget\n *\n * To customize a built-in widget, use its `ref` as the key in the `items` config and specify the configs you want\n * to change (they will merge with the widgets default configs):\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * eventEdit : {\n * items : {\n * // ref for an existing field\n * nameField : {\n * // Change its label\n * label : 'Description'\n * }\n * }\n * }\n * }\n * })\n * ```\n *\n * ## Adding custom widgets\n *\n * To add a custom widget, add an entry to the `items` config. The `name` property links the input field to a field in\n * the loaded event record:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * eventEdit : {\n * items : {\n * // Key to use as fields ref (for easier retrieval later)\n * color : {\n * type : 'combo',\n * label : 'Color',\n * items : ['red', 'green', 'blue'],\n * // name will be used to link to a field in the event record when loading and saving in the editor\n * name : 'eventColor'\n * }\n * }\n * }\n * }\n * })\n * ```\n *\n * ## Video guides\n * {@frameworktabs}\n * {@react}\n * [@youtube](https://www.youtube.com/embed/ghWLmifpO_4)\n * {@endreact}\n * {@vue}\n * [@youtube](https://www.youtube.com/embed/o7xQ6B_Y04w)\n * {@endvue}\n * {@angular}\n * [@youtube](https://www.youtube.com/embed/OuSH7YFndPE)\n * {@endangular}\n * {@endframeworktabs}\n *\n * For more info on customizing the event editor, please see \"Customize event editor\" guide.\n *\n * This feature is **enabled** by default\n *\n * @mixes Scheduler/feature/mixin/RecurringEventEdit\n * @extends Scheduler/feature/base/EditBase\n * @demo Scheduler/eventeditor\n * @classtype eventEdit\n * @feature\n */\nexport default class EventEdit extends EditBase.mixin(TaskEditStm, RecurringEventEdit, Delayable) {\n //region Config\n static $name = 'EventEdit';\n static configurable = {\n /**\n * The event that shall trigger showing the editor. Defaults to `eventdblclick`, set to `''` or null to\n * disable editing of existing events.\n * @config {String}\n * @default\n * @category Editor\n */\n triggerEvent : 'eventdblclick',\n /**\n * The data field in the model that defines the eventType.\n * Applied as class (b-eventtype-xx) to the editors element, to allow showing/hiding fields depending on\n * eventType. Dynamic toggling of fields in the editor is activated by adding an `eventTypeField` field to\n * your widget:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * eventEdit : {\n * items : {\n * eventTypeField : {\n * type : 'combo',\n * name : 'eventType',\n * label : 'Type',\n * items : ['Appointment', 'Internal', 'Meeting']\n * }\n * }\n * }\n * }\n * });\n * ```\n * Note, your event model class also must declare this field:\n * ```javascript\n * class MyEvent extends EventModel {\n * static get fields() {\n * return [\n * { name : 'eventType' }\n * ];\n * }\n * }\n * ```\n * @config {String}\n * @default\n * @category Editor\n */\n typeField : 'eventType',\n /**\n * The current {@link Scheduler.model.EventModel} record, which is being edited by the event editor.\n * @property {Scheduler.model.EventModel}\n * @readonly\n */\n eventRecord : null,\n /**\n * Specify `true` to put the editor in read only mode.\n * @config {Boolean}\n * @default false\n */\n readOnly : null,\n /**\n * The configuration for the internal editor widget. With this config you can control the *type*\n * of editor (defaults to `Popup`) and which widgets to show,\n * change the items in the `bbar`, or change whether the popup should be modal etc.\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * eventEdit : {\n * editorConfig : {\n * modal : true,\n * cls : 'my-editor' // A CSS class,\n * items : {\n * owner : {\n * weight : -100, // Will sort above system-supplied fields which are weight 100 to 800\n * type : 'usercombo',\n * name : 'owner',\n * label : 'Owner'\n * },\n * agreement : {\n * weight : 1000, // Will sort below system-supplied fields which are weight 100 to 800\n * type : 'checkbox',\n * name : 'agreement',\n * label : 'Agree to terms'\n * },\n * resourceField : {\n * // Apply a special filter to limit the Combo's access\n * // to resources.\n * store {\n * filters : [{\n * filterBy(resource) {\n * return shouldShowResource(record);\n * }\n * }]\n * }\n * }\n * },\n * bbar : {\n * items : {\n * deleteButton : {\n * hidden : true\n * }\n * }\n * }\n * }\n * }\n * }\n * });\n * ```\n *\n * Or to use your own custom editor:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * eventEdit : {\n * editorConfig : {\n * type : 'myCustomEditorType'\n * }\n * }\n * }\n * });\n * ```\n * @config {Object}\n * @category Editor\n */\n editorConfig : {\n type : 'eventeditor',\n title : 'L{EventEdit.Edit event}',\n closable : true,\n localeClass : this,\n defaults : {\n localeClass : this\n },\n items : {\n /**\n * Reference to the name field, if used\n * @member {Core.widget.TextField} nameField\n * @readonly\n */\n nameField : {\n type : 'text',\n label : 'L{Name}',\n clearable : true,\n name : 'name',\n weight : 100,\n required : true\n },\n /**\n * Reference to the resource field, if used\n * @member {Core.widget.Combo} resourceField\n * @readonly\n */\n resourceField : {\n type : 'resourcecombo',\n label : 'L{Resource}',\n name : 'resource',\n editable : true,\n valueField : 'id',\n displayField : 'name',\n highlightExternalChange : false,\n destroyStore : true,\n weight : 200\n },\n /**\n * Reference to the start date field, if used\n * @member {Core.widget.DateField} startDateField\n * @readonly\n */\n startDateField : {\n type : 'date',\n clearable : false,\n required : true,\n label : 'L{Start}',\n name : 'startDate',\n validateDateOnly : true,\n weight : 300\n },\n /**\n * Reference to the start time field, if used\n * @member {Core.widget.TimeField} startTimeField\n * @readonly\n */\n startTimeField : {\n type : 'time',\n clearable : false,\n required : true,\n name : 'startDate',\n cls : 'b-match-label',\n weight : 400\n },\n /**\n * Reference to the end date field, if used\n * @member {Core.widget.DateField} endDateField\n * @readonly\n */\n endDateField : {\n type : 'date',\n clearable : false,\n required : true,\n label : 'L{End}',\n name : 'endDate',\n validateDateOnly : true,\n weight : 500\n },\n /**\n * Reference to the end time field, if used\n * @member {Core.widget.TimeField} endTimeField\n * @readonly\n */\n endTimeField : {\n type : 'time',\n clearable : false,\n required : true,\n name : 'endDate',\n cls : 'b-match-label',\n weight : 600\n },\n colorField : {\n label : 'L{SchedulerBase.color}',\n type : 'eventColorField',\n name : 'eventColor',\n weight : 700\n }\n },\n bbar : {\n // When readOnly, child buttons are hidden\n hideWhenEmpty : true,\n defaults : {\n localeClass : this\n },\n items : {\n /**\n * Reference to the save button, if used\n * @member {Core.widget.Button} saveButton\n * @readonly\n */\n saveButton : {\n color : 'b-blue',\n cls : 'b-raised',\n text : 'L{Save}',\n weight : 100\n },\n /**\n * Reference to the delete button, if used\n * @member {Core.widget.Button} deleteButton\n * @readonly\n */\n deleteButton : {\n text : 'L{Delete}',\n weight : 200\n },\n /**\n * Reference to the cancel button, if used\n * @member {Core.widget.Button} cancelButton\n * @readonly\n */\n cancelButton : {\n text : 'L{Object.Cancel}',\n weight : 300\n }\n }\n }\n },\n targetEventElement : null,\n /**\n * How much of a long event bar which is clipped by scrolling must be brought into view\n * to facilitate editing.\n *\n * In a horizontal Scheduler, this will bring 100 pixels of width into view.\n *\n * In a vertical Scheduler, this will bring 100 pixels of height into view.\n * @prp {Number}\n * @defult\n */\n minEditSize : 100\n };\n static get pluginConfig() {\n return {\n chain : [\n 'populateEventMenu',\n 'onEventEnterKey'\n ],\n assign : [\n 'editEvent'\n ]\n };\n }\n //endregion\n //region Init & destroy\n construct(scheduler, config) {\n // Default to the scheduler's state, but configs may override\n this.readOnly = scheduler.readOnly;\n super.construct(scheduler, config);\n scheduler.ion({\n projectChange : 'onChangeProject',\n readOnly : 'onClientReadOnlyToggle',\n thisObj : this\n });\n }\n get scheduler() {\n return this.client;\n }\n get project() {\n return this.client.project;\n }\n //endregion\n //region Editing\n /**\n * Get/set readonly state\n * @property {Boolean}\n */\n get readOnly() {\n return this._editor ? this.editor.readOnly : this._readOnly;\n }\n updateReadOnly(readOnly) {\n super.updateReadOnly(readOnly);\n if (this._editor) {\n this.editor.readOnly = readOnly;\n }\n }\n onClientReadOnlyToggle({ readOnly }) {\n this.readOnly = readOnly;\n }\n /**\n * Returns the editor widget representing this feature\n * @member {Core.widget.Popup}\n */\n get editor() {\n const\n me = this,\n editorListeners = {\n beforehide : 'resetEditingContext',\n beforeshow : 'onBeforeEditorShow',\n keydown : 'onPopupKeyDown',\n thisObj : me\n };\n let { _editor : editor } = me;\n if (editor) {\n return editor;\n }\n editor = me._editor = Widget.create(me.getEditorConfig());\n const {\n startDateField,\n startTimeField,\n endDateField,\n endTimeField\n } = editor.widgetMap;\n // If the date field doesn't exist, the time field must encapsulate the\n // date component of the start/end points and must lay out right.\n if (!startDateField && startTimeField) {\n startTimeField.keepDate = true;\n startTimeField.label = me.L('Start');\n startTimeField.flex = '1 0 100%';\n }\n if (!endDateField && endTimeField) {\n endTimeField.keepDate = true;\n endTimeField.label = me.L('End');\n endTimeField.flex = '1 0 100%';\n }\n // If the default Popup has been reconfigured to be static, add it as a child of our client.\n if (!editor.floating && !editor.positioned) {\n // If not configured with an appendTo, we add it as a child of our client.\n if (!editor.element.parentNode) {\n me.client.add(editor);\n }\n delete editorListeners.beforehide;\n delete editorListeners.beforeshow;\n editorListeners.beforeToggleReveal = 'onBeforeEditorToggleReveal';\n }\n // Must set *after* construction, otherwise it becomes the default state\n // to reset readOnly back to. Must use direct property access because\n // getter consults state of editor.\n editor.readOnly = me._readOnly;\n if (editor.items.length === 0) {\n console.warn('Event Editor configured without any `items`');\n }\n // add listeners programmatically so users cannot override them accidentally\n editor.ion(editorListeners);\n /**\n * Fired before the editor will load the event record data into its input fields. This is useful if you\n * want to modify the fields before data is loaded (e.g. set some input field to be readonly)\n * @on-owner\n * @event eventEditBeforeSetRecord\n * @param {Core.widget.Container} source The editor widget\n * @param {Scheduler.model.EventModel} record The record\n */\n me.scheduler.relayEvents(editor, ['beforeSetRecord'], 'eventEdit');\n // assign widget variables, using widget name: startDate -> me.startDateField\n // widgets with id set use that instead, id -> me.idField\n Object.values(editor.widgetMap).forEach(widget => {\n const ref = widget.ref || widget.id;\n // don't overwrite if already defined\n if (ref && !me[ref]) {\n me[ref] = widget;\n switch (widget.name) {\n case 'startDate':\n case 'endDate':\n widget.ion({ change : 'onDatesChange', thisObj : me });\n break;\n }\n }\n });\n // launch onEditorConstructed hook if provided\n me.onEditorConstructed?.(editor);\n me.eventTypeField?.ion({ change : 'onEventTypeChange', thisObj : me });\n me.saveButton?.ion({ click : 'onSaveClick', thisObj : me });\n me.deleteButton?.ion({ click : 'onDeleteClick', thisObj : me });\n me.cancelButton?.ion({ click : 'onCancelClick', thisObj : me });\n return editor;\n }\n getEditorConfig() {\n const\n me = this,\n { cls, scheduler } = me,\n result = ObjectHelper.assign({\n owner : scheduler,\n eventEditFeature : me,\n weekStartDay : me.weekStartDay,\n align : 'b-t',\n id : `${scheduler.id}-event-editor`,\n autoShow : false,\n anchor : true,\n scrollAction : 'realign',\n constrainTo : globalThis,\n cls\n }, me.editorConfig);\n // User configuration may have included a render target which means the editor\n // will not be floating.\n if (Widget.prototype.getRenderContext(result)[0]) {\n result.floating = false;\n }\n // If the default Popup has been reconfigured to be static, ensure it starts\n // life as a visible but collapsed panel.\n if (result.floating === false && !result.positioned) {\n result.collapsible = {\n type : 'overlay',\n direction : 'right',\n autoClose : false,\n tool : null,\n recollapseTool : null\n };\n result.collapsed = true;\n result.hidden = result.anchor = false;\n result.hide = function() {\n this.collapsible.toggleReveal(false);\n };\n }\n if (!scheduler.showEventColorPickers && result.items.colorField) {\n result.items.colorField.hidden = true;\n }\n // Layout-affecting props must be available early so that appendTo ends up with\n // correct layout.\n result.onElementCreated = me.updateCSSVars.bind(this);\n return result;\n }\n updateCSSVars({ element }) {\n // must result in longest format, ie 2 digits for date and all time parts.\n const\n time = new Date(2000, 12, 31, 23, 55, 55),\n dateLength = DateHelper.format(time, this.dateFormat).replace(punctuation, '').length,\n timeLength = DateHelper.format(time, this.timeFormat).replace(punctuation, '').length,\n dateTimeLength = dateLength + timeLength;\n element.style.setProperty('--date-time-length', `${dateTimeLength}em`);\n element.style.setProperty('--date-width-difference', `${(dateLength - timeLength) / 2}em`);\n }\n // Called from editEvent() to actually show the editor\n async internalShowEditor(eventRecord, resourceRecord, align = null) {\n const\n me = this,\n { scheduler } = me,\n { useInitialAnimation } = scheduler,\n // Align to the element (b-sch-event) and not the wrapper\n eventElement = align?.target?.nodeType === Element.ELEMENT_NODE\n ? align.target\n : scheduler.getElementFromEventRecord(eventRecord, resourceRecord),\n isPartOfStore = eventRecord.isPartOfStore(scheduler.eventStore);\n align = align ?? {\n // Align to the element (b-sch-event) and not the wrapper\n target : eventElement,\n anchor : true\n };\n // Event not in current TimeAxis - cannot be edited without extending the TimeAxis.\n // If there's no event element and the eventRecord is not in the store, we still\n // edit centered on the Scheduler - we're adding a new event\n if (align.target || (!isPartOfStore || eventRecord.resources.length === 0) || eventRecord.isCreating) {\n // need to add this css class as early as possible to prevent\n // the event tooltip from appearing\n scheduler.element.classList.add('b-eventeditor-editing');\n me.resourceRecord = resourceRecord;\n const { editor } = me;\n me.editingContext = {\n eventRecord,\n resourceRecord,\n eventElement,\n editor,\n isPartOfStore\n };\n super.internalShowEditor?.(eventRecord, resourceRecord, align);\n if (me.typeField) {\n me.toggleEventType(eventRecord.getValue(me.typeField));\n }\n me.loadRecord(eventRecord, resourceRecord);\n // If it's a static child of the client which is collapsed, expand it.\n // Floating components focusOnShow by default, this will need to be focused.\n if (editor.collapsed) {\n // The *initial* reveal does not animate unless the toggleReveal call is delayed.\n await AsyncHelper.sleep(100);\n await editor.collapsible.toggleReveal(true);\n editor.focus();\n }\n // Honour alignment settings \"anchor\" and \"centered\" which may be injected from editorConfig.\n else if (editor.centered || !editor.anchor || !editor.floating) {\n editor.show();\n }\n // avoid aligning to an event being animated into place, just center in these cases\n else if (eventElement && (!eventRecord.isCreating || !useInitialAnimation || useInitialAnimation === true || useInitialAnimation === 'fade-in')) {\n me.targetEventElement = eventElement;\n editor.showBy(align);\n }\n // We are adding an unrendered event. Display the editor centered\n else {\n editor.show();\n // Must be done after show because show always reverts to its configured centered setting.\n editor.updateCentered(true);\n }\n // Adjust time field step increment based on timeAxis resolution\n const timeResolution = scheduler.timeAxisViewModel.timeResolution;\n if (timeResolution.unit === 'hour' || timeResolution.unit === 'minute') {\n const step = `${timeResolution.increment}${timeResolution.unit}`;\n if (me.startTimeField) {\n me.startTimeField.step = step;\n }\n if (me.endTimeField) {\n me.endTimeField.step = step;\n }\n }\n // Might end up here with the old listener still around in monkey test for stress demo in turbo mode.\n // Some action happening during edit, but cannot track down what is going on\n me.detachListeners('changesWhileEditing');\n scheduler.eventStore.ion({\n change : me.onChangeWhileEditing,\n refresh : me.onChangeWhileEditing,\n thisObj : me,\n name : 'changesWhileEditing'\n });\n }\n }\n onChangeWhileEditing() {\n const me = this;\n // If event was removed, cancel editing\n // - however, there's one valid case when even can be removed during save finalization - that is when\n // all its assignments has been removed - in such case ignore the removal and do not call the `onCancelClick`\n // because that will reject the STM transaction and revert all changes\n // - also, do not trigger it when the editor is configured with the `autoUpdateRecord` - because in such case\n // the data change will be happening right during the editing\n if (!me.editor.autoUpdateRecord && !me.isFinalizingEventSave && me.isEditing && me.editingContext.isPartOfStore && !me.eventRecord.isPartOfStore(me.scheduler.eventStore)) {\n me.onCancelClick();\n }\n }\n // Fired in a listener so that it's after the auto-called onBeforeShow listeners so that\n // subscribers to the beforeEventEditShow are called at exactly the correct lifecycle point.\n onBeforeEditorShow() {\n super.onBeforeEditorShow(...arguments);\n /**\n * Fires on the owning Scheduler when the editor for an event is available but before it is populated with\n * data and shown. Allows manipulating fields etc.\n * @event beforeEventEditShow\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The scheduler\n * @param {Scheduler.feature.EventEdit} eventEdit The eventEdit feature\n * @param {Scheduler.model.EventModel} eventRecord The record about to be shown in the event editor.\n * @param {Scheduler.model.ResourceModel} resourceRecord The Resource record for the event. If the event\n * is being created, it will not contain a resource, so this parameter specifies the resource the\n * event is being created for.\n * @param {HTMLElement} eventElement The element which represents the event in the scheduler display.\n * @param {Core.widget.Popup} editor The editor\n */\n this.scheduler.trigger('beforeEventEditShow', {\n eventEdit : this,\n ...this.editingContext\n });\n }\n updateTargetEventElement(targetEventElement, oldTargetEventElement) {\n targetEventElement?.classList.add('b-editing');\n oldTargetEventElement?.classList.remove('b-editing');\n }\n /**\n * Opens an editor for the passed event. This function is exposed on Scheduler and can be called as\n * `scheduler.editEvent()`.\n * @param {Scheduler.model.EventModel} eventRecord Event to edit\n * @param {Scheduler.model.ResourceModel} [resourceRecord] The Resource record for the event.\n * This parameter is needed if the event is newly created for a resource and has not been assigned, or when using\n * multi assignment.\n * @param {HTMLElement} [element] Element to anchor editor to (defaults to events element)\n * @on-owner\n */\n editEvent(eventRecord, resourceRecord, element = null, stmCapture = null) {\n const\n me = this,\n { client } = me,\n {\n eventStore,\n assignmentStore,\n enableEventAnimations\n } = client,\n { simpleEventEdit } = client.features,\n isNew = eventRecord.eventStore !== eventStore;\n if (isNew) {\n const resourceRecords = [];\n // It's only a provisional event because we are going to edit it which will\n // allow an opportunity to cancel the add (by removing it).\n eventRecord.isCreating = true;\n let assignmentRecords = [];\n if (resourceRecord && !assignmentStore.includesAssignment(eventRecord.id, resourceRecord.id)) {\n resourceRecords.push(resourceRecord);\n assignmentRecords = assignmentStore.assignEventToResource(eventRecord, resourceRecord);\n }\n // Vetoable beforeEventAdd allows cancel of this operation\n if (client.trigger('beforeEventAdd', { eventRecord, resourceRecords, assignmentRecords }) === false) {\n // Remove any assignment created above, to leave store as it was\n assignmentStore?.remove(assignmentRecords);\n eventRecord.isCreating = false;\n return false;\n }\n }\n if (me.isEditing) {\n // old editing flow already running, clean it up\n me.resetEditingContext();\n }\n // If simple edit feature is active, use it when a new event is created\n if (me.disabled || eventRecord.readOnly || (eventRecord.isCreating && simpleEventEdit?.enabled)) {\n return;\n }\n /**\n * Fires on the owning Scheduler before an event is displayed in an editor.\n * This may be listened for to allow an application to take over event editing duties. Returning `false`\n * stops the default editing UI from being shown.\n * @event beforeEventEdit\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The scheduler\n * @param {Scheduler.feature.EventEdit} eventEdit The eventEdit feature\n * @param {Scheduler.model.EventModel} eventRecord The record about to be shown in the event editor.\n * @param {Scheduler.model.ResourceModel} resourceRecord The Resource record for the event. If the event\n * is being created, it will not contain a resource, so this parameter specifies the resource the\n * event is being created for.\n * @param {HTMLElement} eventElement The element which represents the event in the scheduler display.\n * @preventable\n */\n if (client.trigger('beforeEventEdit', {\n eventEdit : me,\n eventRecord,\n resourceRecord,\n eventElement : client.getElementFromEventRecord?.(eventRecord, resourceRecord) || element\n }) === false) {\n client.element.classList.remove('b-eventeditor-editing');\n if (client.isCalendar) {\n eventRecord.isCreating = false;\n }\n return false;\n }\n if (stmCapture) {\n me.applyStmCapture(stmCapture);\n me.hasStmCapture = true;\n // indicate that editor has been opened, and is now managing the \"stm capture\"\n stmCapture.transferred = true;\n }\n // it is set to `false` by calendar, to ignore the STM mechanism\n else if (stmCapture !== false && !client.isCalendar && !me.hasStmCapture) {\n me.captureStm(true);\n }\n if (isNew) {\n me.enableEventAnimations = false;\n eventStore.add(eventRecord);\n client.project.commitAsync().then(() => client.enableEventAnimations = enableEventAnimations);\n // Element must be created synchronously, not after the project's normalizing delays.\n client.refreshRows?.();\n }\n return me.doEditEvent(...arguments).then(result => {\n if (!me.isDestroying) {\n // The Promise being async allows a mouseover to trigger the event tip\n // unless we add the editing class immediately (But only if we actually began editing).\n if (!me.isEditing && !client.isCalendar && !me.rejectingStmTransaction) {\n // probably a custom event editor was used or editing was vetoed for some other reason\n if (result !== false && me.hasStmCapture) {\n // Skip stm rejection if built-in editor is disabled in beforeEventEdit (using of custom event editor)\n return me.freeStm(false);\n }\n else {\n return me.freeStm();\n }\n }\n }\n });\n }\n /**\n * Returns true if the editor is currently active\n * @readonly\n * @property {Boolean}\n */\n get isEditing() {\n const { _editor } = this;\n return Boolean(\n // Editor is not visible if it is collapsed and not expanded\n _editor?.isVisible && !(_editor.collapsed && !_editor.revealed)\n );\n }\n // editEvent is the single entry point in the base class.\n // Subclass implementations of the action may differ, so are implemented in doEditEvent\n async doEditEvent(eventRecord, resourceRecord, element = null) {\n const\n me = this,\n { scheduler } = me,\n isNewRecord = eventRecord.isCreating;\n if (!resourceRecord) {\n // Need to handle resourceId for edge case when creating an event with resourceId and editing it before\n // adding it to the EventStore\n resourceRecord = eventRecord.resource || me.resourceStore.getById(eventRecord.resourceId);\n }\n if (isNewRecord) {\n // Ensure temporal data fields are ready when the editor is shown\n TimeSpan.prototype.normalize.call(eventRecord);\n }\n // If element is specified (call triggered by EventDragCreate)\n // Then we can align to that, and no scrolling is necessary.\n // If we are simply being asked to edit a new event which is not\n // yet added, the editor is centered, and no scroll is necessary\n if (element || isNewRecord || eventRecord.resources.length === 0) {\n return me.internalShowEditor(eventRecord, resourceRecord, element ? {\n target : element\n } : null);\n }\n else {\n const dimension = scheduler.isVertical ? 'maxHeight' : 'maxWidth';\n // Ensure the main part of the event is in view before showing the editor.\n // Note that we first need to extend the time axis to include\n // currently out of range events.\n await scheduler.scrollResourceEventIntoView(resourceRecord, eventRecord, {\n [dimension] : me.minEditSize,\n animate : true,\n edgeOffset : 0,\n extendTimeAxis : false\n });\n if (!scheduler.isDestroyed) {\n await me.internalShowEditor(eventRecord, resourceRecord);\n if (!scheduler.isDestroyed) {\n scheduler.element.classList.remove('b-eventeditor-editing');\n }\n }\n }\n }\n /**\n * Sets fields values from record being edited\n * @private\n */\n loadRecord(eventRecord, resourceRecord) {\n this.loadingRecord = true;\n this.internalLoadRecord(eventRecord, resourceRecord);\n this.loadingRecord = false;\n }\n get eventRecord() {\n return this._editor?.record;\n }\n internalLoadRecord(eventRecord, resourceRecord) {\n const\n me = this,\n { eventStore } = me.client,\n { editor, resourceField } = me;\n me.resourceRecord = resourceRecord;\n // Update chained store early, to have records in place when setting value below (avoids adding the resource to\n // empty combo store, https://github.com/bryntum/support/issues/5378). It is not done automatically for\n // grouping/trees or when project is replaced\n if (resourceField && resourceField.store?.masterStore !== me.resourceStore) {\n resourceField.store = editor.chainResourceStore();\n }\n editor.record = eventRecord;\n if (resourceField) {\n const resources = eventStore.assignmentStore.getResourcesForEvent(eventRecord);\n // Flag on parent Container to indicate that initially blank fields are valid\n editor.assigningValues = true;\n // If this is an unassigned event, select the resource we've been provided\n if (!eventRecord.isOccurrence && !eventStore.storage.includes(eventRecord, true) && resourceRecord) {\n me.resourceField.value = resourceRecord.getValue(me.resourceField.valueField);\n }\n else if (me.assignmentStore) {\n me.resourceField.value = resources.map((resource) => resource.getValue(me.resourceField.valueField));\n }\n editor.assigningValues = false;\n }\n super.internalLoadRecord(eventRecord, resourceRecord);\n }\n toggleEventType(eventType) {\n // expose eventType in dataset, for querying and styling\n this.editor.element.dataset.eventType = eventType || '';\n this.editor.eachWidget(widget => { // need {}'s here so we don't return false and end iteration\n widget.dataset?.eventType && (widget.hidden = widget.dataset.eventType !== eventType);\n });\n }\n //endregion\n //region Save\n async finalizeEventSave(eventRecord, resourceRecords, resolve, reject) {\n const\n me = this,\n {\n scheduler,\n assignmentStore\n } = me;\n const aborted = false;\n // Prevent multiple commits from this flow\n assignmentStore.suspendAutoCommit();\n // Avoid multiple redraws, from event changes + assignment changes\n scheduler.suspendRefresh();\n me.onBeforeSave(eventRecord);\n eventRecord.beginBatch();\n me.updateRecord(eventRecord);\n eventRecord.endBatch();\n if (!eventRecord.isOccurrence) {\n if (me.resourceField) {\n assignmentStore.assignEventToResource(eventRecord, resourceRecords, null, true);\n }\n }\n // An occurrence event record may have changed only resources value. In that case we'll never get into afterChange() method that\n // apply changed data and make an event \"real\", because resources is not a field and a record won't be marked as dirty.\n // We used temporary field to save updated resources list and get into afterChange() method.\n else if (resourceRecords) {\n eventRecord.set('resourceRecords', resourceRecords);\n }\n // If it was a provisional event, passed in here from drag-create or dblclick or contextmenu,\n // it's now it's no longer a provisional event and will not be removed in resetEditingContext\n // Also, when promoted to be permanent, auto syncing will kick in if configured.\n eventRecord.isCreating = false;\n if (!aborted) {\n await scheduler.project.commitAsync();\n }\n assignmentStore.resumeAutoCommit();\n // Redraw once\n scheduler.resumeRefresh(true);\n if (!aborted) {\n /**\n * Fires on the owning Scheduler after an event is successfully saved\n * @event afterEventSave\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The scheduler instance\n * @param {Scheduler.model.EventModel} eventRecord The record about to be saved\n */\n scheduler.trigger('afterEventSave', { eventRecord });\n me.onAfterSave(eventRecord);\n }\n resolve(aborted ? false : eventRecord);\n }\n /**\n * Saves the changes (applies them to record if valid, if invalid editor stays open)\n * @private\n * @fires beforeEventSave\n * @fires beforeEventAdd\n * @fires afterEventSave\n * @async\n */\n save() {\n return new Promise((resolve, reject) => {\n const\n me = this,\n { scheduler, eventRecord } = me;\n if (!eventRecord || !me.editor.isValid) {\n resolve(false);\n return;\n }\n const\n { eventStore, values } = me,\n resourceRecords = me.resourceField?.records || (me.resourceRecord ? [me.resourceRecord] : []);\n // Check for potential overlap scenarios before saving\n if (!me.scheduler.allowOverlap && eventStore) {\n let { startDate, endDate } = values;\n // Should support using a duration field instead of the end date field\n if (!endDate) {\n if ('duration' in values) {\n endDate = DateHelper.add(startDate, values.duration, values.durationUnit || eventRecord.durationUnit);\n }\n else if ('fullDuration' in values) {\n endDate = DateHelper.add(startDate, values.fullDuration);\n }\n else {\n endDate = eventRecord.endDate;\n }\n }\n const abort = resourceRecords.some(resource => {\n return !eventStore.isDateRangeAvailable(startDate, endDate, eventRecord, resource);\n });\n if (abort) {\n resolve(false);\n return;\n }\n }\n const context = {\n finalize(saveEvent) {\n try {\n if (saveEvent !== false) {\n me.finalizeEventSave(eventRecord, resourceRecords, resolve, reject);\n }\n else {\n resolve(false);\n }\n }\n catch (e) {\n reject(e);\n }\n }\n };\n /**\n * Fires on the owning Scheduler before an event is saved.\n * Return `false` to immediately prevent saving\n *\n * ```javascript\n * scheduler.on({\n * beforeEventSave() {\n * // prevent saving if some custom variable hasn't 123 value\n * return myCustomValue === 123;\n * }\n * });\n * ```\n * or a `Promise` yielding `true` or `false` for async vetoing.\n *\n * ```javascript\n * scheduler.on({\n * beforeEventSave() {\n * const\n * // send ajax request\n * response = await fetch('http://my-server/check-parameters.php'),\n * data = await response.json();\n *\n * // decide whether it's ok to save based on response \"okToSave\" property\n * return data.okToSave;\n * }\n * });\n * ```\n *\n * @event beforeEventSave\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The scheduler instance\n * @param {Scheduler.model.EventModel} eventRecord The record about to be saved\n * @param {Scheduler.model.ResourceModel[]} resourceRecords The resources to which the event is assigned\n * @param {Object} values The new values\n * @param {Object} context Extended save context:\n * @param {Boolean} [context.async] Set this to `true` in a listener to indicate that the listener will asynchronously decide to prevent or not the event save.\n * @param {Function} context.finalize Function to call to finalize the save. Used when `async` is `true`. Provide `false` to the function to prevent the save.\n * @preventable\n * @async\n */\n const triggerResult = scheduler.trigger('beforeEventSave', {\n eventRecord,\n resourceRecords,\n values,\n context\n });\n // Helper function to handle beforeEventSave listeners result\n function handleEventResult(result, eventRecord, context) {\n // save prevented by a listener\n if (result === false) {\n resolve(false);\n }\n else {\n me.onRecurrableEventBeforeSave({ eventRecord, context });\n // truthy context.async means than a listener will decide to approve saving asynchronously\n if (!context.async) {\n context.finalize();\n }\n }\n }\n if (ObjectHelper.isPromise(triggerResult)) {\n triggerResult.then(result => handleEventResult(result, eventRecord, context));\n }\n else {\n handleEventResult(triggerResult, eventRecord, context);\n }\n });\n }\n //endregion\n //region Delete\n /**\n * Delete event being edited\n * @fires beforeEventDelete\n * @private\n * @async\n */\n deleteEvent() {\n this.detachListeners('changesWhileEditing');\n return new Promise((resolve, reject) => {\n const\n me = this,\n { eventRecord, editor } = me;\n me.scheduler.removeEvents([eventRecord], removeRecord => {\n // The reason it does it here is to move focus *before* it gets deleted,\n // and then there's code in the delete to see that it's deleting the focused one,\n // and jump forwards or backwards to move to the next or previous event\n // See 'Should allow key activation' test in tests/view/mixins/EventNavigation.t.js\n if (removeRecord && editor.containsFocus) {\n editor.revertFocus();\n }\n resolve(removeRecord);\n }, editor);\n });\n }\n //endregion\n //region Stores\n onChangeProject() {\n // Release resource store on project change, it will be re-chained on next show\n if (this.resourceField) {\n this.resourceField.store = {}; // Cannot use null\n }\n }\n get eventStore() {\n return this.scheduler.project.eventStore;\n }\n get resourceStore() {\n return this.scheduler.project.resourceStore;\n }\n get assignmentStore() {\n return this.scheduler.project.assignmentStore;\n }\n //endregion\n //endregion\n //region Events\n onActivateEditor({ eventRecord, resourceRecord, eventElement }) {\n this.editEvent(eventRecord, resourceRecord, eventElement);\n }\n onDragCreateEnd({ eventRecord, resourceRecord, proxyElement, stmCapture }) {\n this.editEvent(eventRecord, resourceRecord, proxyElement, stmCapture);\n }\n // chained from EventNavigation\n onEventEnterKey({ assignmentRecord, eventRecord, target }) {\n const\n { client } = this,\n // Event can arrive from the wrap element in some products (such as Calendar)\n // so in these cases, we must use querySelector to look *inside* the element.\n element = target[target.matches(client.eventSelector) ? 'querySelector' : 'closest'](client.eventInnerSelector);\n if (assignmentRecord) {\n this.editEvent(eventRecord, assignmentRecord.resource, element);\n }\n else if (eventRecord) {\n this.editEvent(eventRecord, eventRecord.resource, element);\n }\n }\n // Toggle fields visibility when changing eventType\n onEventTypeChange({ value }) {\n this.toggleEventType(value);\n }\n //endregion\n //region Context menu\n populateEventMenu({ eventRecord, resourceRecord, items }) {\n if (!this.scheduler.readOnly && !this.disabled) {\n items.editEvent = {\n text : 'L{EventEdit.Edit event}',\n localeClass : this,\n icon : 'b-icon b-icon-edit',\n weight : 100,\n disabled : eventRecord.readOnly,\n onItem : () => {\n this.editEvent(eventRecord, resourceRecord);\n }\n };\n }\n }\n //endregion\n onBeforeEditorToggleReveal({ reveal }) {\n if (reveal) {\n this.editor.setupEditorButtons();\n }\n // reveal true/false is analogous to show/hide\n this[reveal ? 'onBeforeEditorShow' : 'resetEditingContext']();\n }\n async resetEditingContext() {\n const me = this;\n me.detachListeners('changesWhileEditing');\n // super call has to go before the `me.rejectStmTransaction();` below\n // because it can be removing an event manually, bypassing the stm\n super.resetEditingContext();\n // client does not use STM for task editing (at least yet)\n if (me.hasStmCapture && !me.isDeletingEvent && !me.isCancelingEdit) {\n await me.freeStm(false);\n }\n // Clear to prevent retaining project\n me.resourceRecord = null;\n }\n finalizeStmCapture(shouldReject) {\n return this.freeStm(!shouldReject);\n }\n updateLocalization() {\n if (this._editor) {\n this.updateCSSVars({ element : this._editor.element });\n }\n super.updateLocalization(...arguments);\n }\n}\nEventEdit._$name = 'EventEdit'; GridFeatureManager.registerFeature(EventEdit, true, 'Scheduler');\nGridFeatureManager.registerFeature(EventEdit, false, ['SchedulerPro', 'ResourceHistogram']);\nEventEdit.initClass();\n", "import InstancePlugin from '../../Core/mixin/InstancePlugin.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\n/**\n * @module Scheduler/feature/EventFilter\n */\n/**\n * Adds event filter menu items to the timeline header context menu.\n *\n * {@inlineexample Scheduler/feature/EventFilter.js}\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * eventFilter : true // `true` by default, set to `false` to disable the feature and remove the menu item from the timeline header\n * }\n * });\n * ```\n *\n * This feature is **enabled** by default\n *\n * @extends Core/mixin/InstancePlugin\n * @classtype eventFilter\n * @feature\n */\nexport default class EventFilter extends InstancePlugin {\n static get $name() {\n return 'EventFilter';\n }\n static get pluginConfig() {\n return {\n chain : ['populateTimeAxisHeaderMenu']\n };\n }\n /**\n * Populates the header context menu items.\n * @param {Object} options Contains menu items and extra data retrieved from the menu target.\n * @param {Object} options.items A named object to describe menu items\n * @internal\n */\n populateTimeAxisHeaderMenu({ items }) {\n const me = this;\n items.eventsFilter = {\n text : 'L{filterEvents}',\n icon : 'b-fw-icon b-icon-filter',\n disabled : me.disabled,\n localeClass : me,\n weight : 100,\n menu : {\n type : 'popup',\n localeClass : me,\n items : {\n nameFilter : {\n weight : 110,\n type : 'textfield',\n cls : 'b-eventfilter b-last-row',\n clearable : true,\n keyStrokeChangeDelay : 300,\n label : 'L{byName}',\n localeClass : me,\n width : 200,\n internalListeners : {\n change : me.onEventFilterChange,\n thisObj : me\n }\n }\n },\n onBeforeShow({ source : menu }) {\n const\n [filterByName] = menu.items,\n filter = me.store.filters.getBy('property', 'name');\n filterByName.value = filter?.value || '';\n }\n }\n };\n }\n onEventFilterChange({ value }) {\n if (value !== '') {\n this.store.filter('name', value);\n }\n else {\n this.store.removeFilter('name');\n }\n }\n get store() {\n const { client } = this;\n return client.isGanttBase ? client.store : client.eventStore;\n }\n}\nEventFilter.featureClass = 'b-event-filter';\nEventFilter._$name = 'EventFilter'; GridFeatureManager.registerFeature(EventFilter, true, ['Scheduler', 'Gantt']);\nGridFeatureManager.registerFeature(EventFilter, false, 'ResourceHistogram');\n", "import GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport TimeSpanMenuBase from './base/TimeSpanMenuBase.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport Objects from '../../Core/helper/util/Objects.js';\nimport '../widget/EventColorPicker.js';\n/**\n * @module Scheduler/feature/EventMenu\n */\n/**\n * Displays a context menu for events. Items are populated by other features and/or application code.\n *\n * {@inlineexample Scheduler/feature/EventMenu.js}\n *\n * ### Default event menu items\n *\n * Here is the list of menu items provided by the feature and populated by the other features:\n *\n * | Reference | Text | Weight | Feature | Description |\n * |-----------------|----------------|--------|------------------------------------------|-------------------------------------------------------------------|\n * | `editEvent` | Edit event | 100 | {@link Scheduler/feature/EventEdit} | Edit in the event editor. Hidden when read-only |\n * | `copyEvent` | Copy event | 110 | {@link Scheduler/feature/EventCopyPaste} | Copy event or assignment. Hidden when read-only |\n * | `cutEvent ` | Cut event | 120 | {@link Scheduler/feature/EventCopyPaste} | Cut event or assignment. Hidden when read-only |\n * | `deleteEvent` | Delete event | 200 | *This feature* | Remove event. Hidden when read-only |\n * | `unassignEvent` | Unassign event | 300 | *This feature* | Unassign event. Hidden when read-only, shown for multi-assignment |\n * | `splitEvent` | Split event | 650 | *Scheduler Pro only* | Split an event into two segments at the mouse position |\n * | `renameSegment` | Rename segment | 660 | *Scheduler Pro only* | Show an inline editor to rename the segment |\n * | `eventColor` \u00B9 | Color | 400 | *This feature* | Choose background color for the event bar |\n *\n * **\u00B9** Set {@link Scheduler.view.SchedulerBase#config-showEventColorPickers} to `true` to enable this item\n *\n * ### Customizing the menu items\n *\n * The menu items in the Event menu can be customized, existing items can be changed or removed,\n * and new items can be added. This is handled using the `items` config of the feature.\n *\n * Add extra items for all events:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * eventMenu : {\n * items : {\n * extraItem : {\n * text : 'Extra',\n * icon : 'b-fa b-fa-fw b-fa-flag',\n * onItem({eventRecord}) {\n * eventRecord.flagged = true;\n * }\n * }\n * }\n * }\n * }\n * });\n * ```\n *\n * Remove existing items:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * eventMenu : {\n * items : {\n * deleteEvent : false,\n * unassignEvent : false\n * }\n * }\n * }\n * });\n * ```\n *\n * Customize existing item:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * eventMenu : {\n * items : {\n * deleteEvent : {\n * text : 'Delete booking'\n * }\n * }\n * }\n * }\n * });\n * ```\n *\n * Manipulate existing items for all events or specific events:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * eventMenu : {\n * // Process items before menu is shown\n * processItems({eventRecord, items}) {\n * // Push an extra item for conferences\n * if (eventRecord.type === 'conference') {\n * items.showSessionItem = {\n * text : 'Show sessions',\n * onItem({eventRecord}) {\n * // ...\n * }\n * };\n * }\n *\n * // Do not show menu for secret events\n * if (eventRecord.type === 'secret') {\n * return false;\n * }\n * }\n * }\n * }\n * });\n * ```\n *\n * {@note}The `processItems` implementation may be an `async` function which `awaits` a result to mutate the `items`\n * object.\n *\n * Note that the {@link #property-menuContext} is applied to the Menu's `item` event, so your `onItem`\n * handler's single event parameter also contains the following properties:\n *\n * - **source** The {@link Scheduler.view.Scheduler} who's UI was right clicked.\n * - **targetElement** The element right clicked on.\n * - **eventRecord** The {@link Scheduler.model.EventModel event record} clicked on.\n * - **resourceRecord** The {@link Scheduler.model.ResourceModel resource record} clicked on.\n * - **assignmentRecord** The {@link Scheduler.model.AssignmentModel assignment record} clicked on.\n *\n * ## Video guides\n * {@frameworktabs}\n * {@react}\n * [@youtube](https://www.youtube.com/embed/HAq12QUBMx8)\n * {@endreact}\n * {@vue}\n * [@youtube](https://www.youtube.com/embed/nXMaClkkKdQ)\n * {@endvue}\n * {@angular}\n * [@youtube](https://www.youtube.com/embed/0seuhWrIeXc)\n * {@endangular}\n * {@endframeworktabs}\n *\n * Full information of the menu customization can be found in the \"Customizing the Event menu, the Schedule menu, and the TimeAxisHeader menu\" guide.\n *\n * This feature is **enabled** by default\n *\n * @extends Scheduler/feature/base/TimeSpanMenuBase\n * @demo Scheduler/eventmenu\n * @classtype eventMenu\n * @feature\n */\nexport default class EventMenu extends TimeSpanMenuBase {\n //region Config\n static get $name() {\n return 'EventMenu';\n }\n /**\n * @member {Object} menuContext\n * An informational object containing contextual information about the last activation\n * of the context menu. The base properties are listed below.\n * @property {Event} menuContext.domEvent The initiating event.\n * @property {Event} menuContext.event DEPRECATED: The initiating event.\n * @property {Number[]} menuContext.point The client `X` and `Y` position of the initiating event.\n * @property {HTMLElement} menuContext.targetElement The target to which the menu is being applied.\n * @property {Object} menuContext.items The context menu **configuration** items.\n * @property {Core.data.Model[]} menuContext.selection The record selection in the client (Grid, Scheduler, Gantt or Calendar).\n * @property {Scheduler.model.EventModel} menuContext.eventRecord The event record clicked on.\n * @property {Scheduler.model.ResourceModel} menuContext.resourceRecord The resource record clicked on.\n * @property {Scheduler.model.AssignmentModel} menuContext.assignmentRecord The assignment record clicked on.\n * @readonly\n */\n static get configurable() {\n return {\n /**\n * A function called before displaying the menu that allows manipulations of its items.\n * Returning `false` from this function prevents the menu being shown.\n *\n * ```javascript\n * features : {\n * eventMenu : {\n * processItems({ items, eventRecord, assignmentRecord, resourceRecord }) {\n * // Add or hide existing items here as needed\n * items.myAction = {\n * text : 'Cool action',\n * icon : 'b-fa b-fa-fw b-fa-ban',\n * onItem : () => console.log(`Clicked ${eventRecord.name}`),\n * weight : 1000 // Move to end\n * };\n *\n * if (!eventRecord.allowDelete) {\n * items.deleteEvent.hidden = true;\n * }\n * }\n * }\n * },\n * ```\n *\n * @config {Function}\n * @param {Object} context An object with information about the menu being shown.\n * @param {Scheduler.feature.EventMenu} context.feature A reference to this feature.\n * @param {Event} context.domEvent The initiating event.\n * @param {Event} context.event DEPRECATED: The initiating event.\n * @param {Number[]} context.point The client `X` and `Y` position of the initiating event.\n * @param {HTMLElement} context.targetElement The target to which the menu is being applied.\n * @param {Scheduler.model.EventModel} context.eventRecord The record representing the current event.\n * @param {Scheduler.model.ResourceModel} context.resourceRecord The record representing the current resource.\n * @param {Scheduler.model.AssignmentModel} context.assignmentRecord The assignment record.\n * @param {Object} context.items An object containing the\n * {@link Core.widget.MenuItem menu item} configs keyed by their id.\n * @returns {Boolean|null} Returning `false` from this function prevents the menu being shown.\n * @preventable\n */\n processItems : null,\n type : 'event'\n /**\n * This is a preconfigured set of items used to create the default context menu. The default options are\n * listed at the top of the page.\n *\n * To remove existing items, set corresponding keys `null`:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * eventMenu : {\n * items : {\n * deleteEvent : null,\n * unassignEvent : null\n * }\n * }\n * }\n * });\n * ```\n *\n * See the feature config in the above example for details.\n *\n * @config {Object} items\n */\n };\n }\n static get pluginConfig() {\n const config = super.pluginConfig;\n config.chain.push('populateEventMenu');\n return config;\n }\n //endregion\n //region Events\n /**\n * This event fires on the owning Scheduler before the context menu is shown for an event. Allows manipulation of the items\n * to show in the same way as in `processItems`. Returning `false` from a listener prevents the menu from\n * being shown.\n * @event eventMenuBeforeShow\n * @on-owner\n * @preventable\n * @param {Scheduler.view.Scheduler} source\n * @param {Object} items Menu item configs\n * @param {Scheduler.model.EventModel} eventRecord Event record for which the menu was triggered\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record\n * @param {Scheduler.model.AssignmentModel} assignmentRecord Assignment record, if assignments are used\n * @param {HTMLElement} eventElement\n * @param {MouseEvent} [event] Pointer event which triggered the context menu (if any)\n */\n /**\n * This event fires on the owning Scheduler when an item is selected in the context menu.\n * @event eventMenuItem\n * @on-owner\n * @param {Scheduler.view.Scheduler} source\n * @param {Core.widget.MenuItem} item\n * @param {Scheduler.model.EventModel} eventRecord\n * @param {Scheduler.model.ResourceModel} resourceRecord\n * @param {Scheduler.model.AssignmentModel} assignmentRecord Assignment record, if assignments are used\n * @param {HTMLElement} eventElement\n */\n /**\n * This event fires on the owning Scheduler after showing the context menu for an event\n * @event eventMenuShow\n * @on-owner\n * @param {Scheduler.view.Scheduler} source\n * @param {Core.widget.Menu} menu The menu\n * @param {Scheduler.model.EventModel} eventRecord Event record for which the menu was triggered\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record\n * @param {Scheduler.model.AssignmentModel} assignmentRecord Assignment record, if assignments are used\n * @param {HTMLElement} eventElement\n */\n //endregion\n get resourceStore() {\n // In horizontal mode, we use store (might be a display store), in vertical & calendar we use resourceStore\n return this.client.isHorizontal ? this.client.store : this.client.resourceStore;\n }\n getDataFromEvent(event) {\n const\n data = super.getDataFromEvent(event),\n eventElement = data.targetElement,\n { client } = this,\n eventRecord = client.resolveEventRecord(eventElement),\n // For vertical mode the resource must be resolved from the event\n resourceRecord = eventRecord && (client.resolveResourceRecord(eventElement) || this.resourceStore.last)?.$original,\n assignmentRecord = eventRecord && client.resolveAssignmentRecord(eventElement);\n return Object.assign(data, {\n date : client.getDateFromXY([event.pageX, event.pageY], null, false),\n eventElement,\n eventRecord,\n resourceRecord,\n assignmentRecord\n });\n }\n getTargetElementFromEvent({ target }) {\n return target.closest(this.client.eventSelector) || target;\n }\n shouldShowMenu(eventParams) {\n return eventParams.eventRecord;\n }\n /**\n * Shows context menu for the provided event. If record is not rendered (outside of time span/filtered)\n * menu won't appear.\n * @param {Scheduler.model.EventModel} eventRecord Event record to show menu for.\n * @param {Object} [options]\n * @param {HTMLElement} options.targetElement Element to align context menu to.\n * If provided menu will be aligned according to clientX/clientY coordinates.\n * If omitted, context menu will be centered to event element.\n */\n showContextMenuFor(eventRecord, { targetElement } = {}) {\n if (this.disabled) {\n return;\n }\n if (!targetElement) {\n targetElement = this.getElementFromRecord(eventRecord);\n // If record is not rendered, do nothing\n if (!targetElement) {\n return;\n }\n }\n DomHelper.triggerMouseEvent(targetElement, this.triggerEvent);\n }\n getElementFromRecord(record) {\n return this.client.getElementsFromEventRecord(record)[0];\n }\n populateEventMenu({ items, eventRecord, assignmentRecord }) {\n const { client } = this;\n items.deleteEvent = {\n disabled : eventRecord.readOnly || assignmentRecord?.readOnly,\n hidden : client.readOnly\n };\n items.unassignEvent = {\n disabled : eventRecord.readOnly || assignmentRecord?.readOnly,\n hidden : client.readOnly || client.eventStore.usesSingleAssignment\n };\n if (client.showEventColorPickers || client.showTaskColorPickers) {\n items.eventColor = {\n disabled : eventRecord.readOnly,\n hidden : client.readOnly\n };\n }\n else {\n items.eventColor = {\n hidden : true\n };\n }\n }\n populateItemsWithData({ items, eventRecord }) {\n super.populateItemsWithData(...arguments);\n const { client } = this;\n if ((client.showEventColorPickers || (client.isSchedulerPro && client.showTaskColorPickers)) &&\n items.eventColor?.menu\n ) {\n Objects.merge(items.eventColor.menu.colorMenu, {\n value : eventRecord.eventColor,\n record : eventRecord\n });\n }\n }\n // This generates the fixed, unchanging part of the items and is only called once\n // to generate the baseItems of the feature.\n // The dynamic parts which are set by populateEventMenu have this merged into them.\n changeItems(items) {\n const { client } = this;\n return Objects.merge({\n deleteEvent : {\n text : 'L{SchedulerBase.Delete event}',\n icon : 'b-icon b-icon-trash',\n weight : 200,\n onItem({ menu, eventRecord }) {\n // We must synchronously push focus back into the menu's triggering\n // event so that our beforeRemove handlers can move focus onwards\n // to the closest remaining event.\n // Otherwise, the menu's default hide processing on hide will attempt\n // to move focus back to the menu's triggering event which will\n // by then have been deleted.\n const revertTarget = menu.focusInEvent?.relatedTarget;\n if (revertTarget) {\n revertTarget.focus();\n client.navigator.activeItem = revertTarget;\n }\n client.removeEvents(client.isEventSelected(eventRecord) ? client.selectedEvents : [eventRecord]);\n }\n },\n unassignEvent : {\n text : 'L{SchedulerBase.Unassign event}',\n icon : 'b-icon b-icon-unassign',\n weight : 300,\n onItem({ menu, eventRecord, resourceRecord }) {\n // We must synchronously push focus back into the menu's triggering\n // event so that our beforeRemove handlers can move focus onwards\n // to the closest remaining event.\n // Otherwise, the menu's default hide processing on hide will attempt\n // to move focus back to the menu's triggering event which will\n // by then have been deleted.\n const revertTarget = menu.focusInEvent?.relatedTarget;\n if (revertTarget) {\n revertTarget.focus();\n client.navigator.activeItem = revertTarget;\n }\n if (client.isEventSelected(eventRecord)) {\n client.assignmentStore.remove(client.selectedAssignments);\n }\n else {\n eventRecord.unassign(resourceRecord);\n }\n }\n },\n eventColor : {\n text : 'L{SchedulerBase.color}',\n icon : 'b-icon b-icon-palette',\n separator : true,\n menu : {\n colorMenu : {\n type : 'eventcolorpicker'\n }\n }\n }\n }, items);\n }\n}\nEventMenu.featureClass = '';\nEventMenu._$name = 'EventMenu'; GridFeatureManager.registerFeature(EventMenu, true, 'Scheduler');\nGridFeatureManager.registerFeature(EventMenu, false, 'ResourceHistogram');\n", "import DateHelper from '../../../Core/helper/DateHelper.js';\nimport TimeSpan from '../../model/TimeSpan.js';\n/**\n * @module Scheduler/feature/mixin/NonWorkingTimeMixin\n */\n/**\n * Mixin with functionality shared between {@link Scheduler/feature/NonWorkingTime} and\n * {@link Scheduler/feature/EventNonWorkingTime}.\n * @mixin\n */\nexport default Target => class NonWorkingTimeMixin extends Target {\n static $name = 'NonWorkingTimeMixin';\n static configurable = {\n /**\n * The maximum time axis unit to display non-working ranges for ('hour' or 'day' etc).\n * When zooming to a view with a larger unit, no non-working time elements will be rendered.\n *\n * **Note:** Be careful with setting this config to big units like 'year'. When doing this,\n * make sure the timeline {@link Scheduler/view/TimelineBase#config-startDate start} and\n * {@link Scheduler/view/TimelineBase#config-endDate end} dates are set tightly.\n * When using a long range (for example many years) with non-working time elements rendered per hour,\n * you will end up with millions of elements, impacting performance.\n * When zooming, use the {@link Scheduler/view/mixin/TimelineZoomable#config-zoomKeepsOriginalTimespan} config.\n * @config {DurationUnit}\n * @default\n */\n maxTimeAxisUnit : 'week'\n };\n getNonWorkingTimeRanges(calendar, startDate, endDate) {\n // make sure we will iterate the whole interval even if it is bigger than default (5 years)\n const maxRange = endDate.getTime() - startDate.getTime() + 24 * 60 * 60 * 1000;\n if (!calendar.getNonWorkingTimeRanges) {\n const result = [];\n calendar.forEachAvailabilityInterval(\n { startDate, endDate, isForward : true, maxRange },\n (intervalStartDate, intervalEndDate, calendarCacheInterval) => {\n for (const [entry, cache] of calendarCacheInterval.intervalGroups) {\n if (!cache.getIsWorking()) {\n result.push({\n name : entry.name,\n iconCls : entry.iconCls,\n cls : entry.cls,\n startDate : intervalStartDate,\n endDate : intervalEndDate\n });\n }\n }\n }\n );\n return result;\n }\n return calendar.getNonWorkingTimeRanges(startDate, endDate, maxRange);\n }\n getCalendarTimeRanges(calendar, ignoreName = false) {\n const\n me = this,\n { timeAxis, fillTicks } = me.client,\n { unit, increment } = timeAxis,\n shouldPaint = !me.maxTimeAxisUnit || DateHelper.compareUnits(unit, me.maxTimeAxisUnit) <= 0;\n if (calendar && shouldPaint && timeAxis.count) {\n const\n allRanges = me.getNonWorkingTimeRanges(calendar, timeAxis.startDate, timeAxis.endDate),\n timeSpans = allRanges.map(interval => new TimeSpan({\n name : interval.name,\n cls : `b-nonworkingtime ${interval.cls || ''}`,\n startDate : interval.startDate,\n endDate : interval.endDate\n }));\n let mergedSpans = [];\n let prevRange = null;\n // intervals returned by the calendar are not merged, let's combine them to yield fewer elements\n for (const range of timeSpans) {\n if (prevRange && range.startDate <= prevRange.endDate && (ignoreName || range.name === prevRange.name) && range.duration > 0) {\n prevRange.endDate = range.endDate;\n }\n else {\n mergedSpans.push(range);\n range.setData('id', `nonworking-${mergedSpans.length}`);\n prevRange = range;\n }\n }\n // When filling ticks, non-working-time ranges are snapped to full ticks too\n if (fillTicks) {\n mergedSpans = mergedSpans.filter(span => {\n return !DateHelper.isSameDate(span.startDate, span.endDate) &&\n DateHelper.ceil(span.startDate, { magnitude : increment, unit }) <\n DateHelper.floor(span.endDate, { magnitude : increment, unit });\n });\n mergedSpans.forEach(span => span.setStartEndDate(\n DateHelper.ceil(span.startDate, { magnitude : increment, unit }),\n DateHelper.floor(span.endDate, { magnitude : increment, unit }))\n );\n }\n return mergedSpans;\n }\n else {\n return [];\n }\n }\n //region Basic scheduler calendar\n setupDefaultCalendar() {\n const { client, project } = this;\n if (\n // Might have been set up by NonWorkingTime / EventNonWorkingTime already\n !this.autoGeneratedWeekends &&\n // For basic scheduler...\n !client.isSchedulerPro &&\n !client.isGantt &&\n // ...that uses the default calendar...\n project.effectiveCalendar === project.defaultCalendar &&\n // ...and has no defined intervals\n !project.defaultCalendar.intervalStore.count\n ) {\n this.autoGeneratedWeekends = true;\n this.updateDefaultCalendar();\n }\n }\n updateDefaultCalendar() {\n if (this.autoGeneratedWeekends) {\n const\n calendar = this.client.project.effectiveCalendar,\n intervals = this.defaultNonWorkingIntervals,\n hasIntervals = Boolean(intervals.length);\n // The default \"weekends\" calendar should not be time zone converted\n calendar.ignoreTimeZone = true;\n calendar.clearIntervals(hasIntervals);\n // Update weekends as non-working time\n if (hasIntervals) {\n calendar.addIntervals(intervals);\n }\n }\n }\n updateLocalization() {\n super.updateLocalization?.();\n this.autoGeneratedWeekends && this.updateDefaultCalendar();\n }\n get defaultNonWorkingIntervals() {\n const dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n return DateHelper.nonWorkingDaysAsArray.map(dayIndex => ({\n recurrentStartDate : `on ${dayNames[dayIndex]} at 0:00`,\n recurrentEndDate : `on ${dayNames[(dayIndex + 1) % 7]} at 0:00`,\n isWorking : false\n }));\n }\n //endregion\n};\n", "import GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport AttachToProjectMixin from '../data/mixin/AttachToProjectMixin.js';\nimport NonWorkingTimeMixin from './mixin/NonWorkingTimeMixin.js';\nimport InstancePlugin from '../../Core/mixin/InstancePlugin.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\n/**\n * @module Scheduler/feature/EventNonWorkingTime\n */\n/**\n * Feature that allows rendering non-working time ranges into event bars (weekends for Scheduler, effective calendar for\n * SchedulerPro):\n *\n * {@inlineexample Scheduler/feature/EventNonWorkingTime.js}\n *\n * Please note that to not clutter the view (and have a large negative effect on performance) the feature bails out of\n * rendering ranges for very zoomed out views (see {@link #config-maxTimeAxisUnit} for details).\n *\n * This feature is **disabled** by default.\n * For info on enabling it, see {@link Grid/view/mixin/GridFeatures}.\n *\n * @extends Core/mixin/InstancePlugin\n * @classtype eventNonWorkingTime\n * @mixes Scheduler/feature/mixin/NonWorkingTimeMixin\n * @feature\n */\nexport default class EventNonWorkingTime extends InstancePlugin.mixin(AttachToProjectMixin, NonWorkingTimeMixin) {\n static $name = 'EventNonWorkingTime';\n static pluginConfig = {\n chain : [\n 'onTimeAxisViewModelUpdate',\n 'updateLocalization',\n 'onEventDataGenerated'\n ]\n };\n // Cannot use `static properties = {}`, new Map would pollute the prototype\n static get properties() {\n return {\n calendarRangeCache : new Map()\n };\n }\n doDisable(disable) {\n this.client.refresh();\n super.doDisable(disable);\n }\n attachToCalendarManagerStore(store) {\n super.attachToCalendarManagerStore(store);\n const me = this;\n store.ion({\n name : 'calendarManagerStore',\n change : 'onCalendarChange',\n thisObj : me\n });\n // Schedulers calendar is not part of the calendar manager store\n if (me.client.isScheduler) {\n me.project.effectiveCalendar.intervals.ion({\n name : 'calendarManagerStore',\n change : 'onCalendarChange',\n thisObj : me\n });\n }\n me.setupDefaultCalendar();\n }\n onCalendarChange() {\n this.calendarRangeCache.clear();\n }\n onTimeAxisViewModelUpdate() {\n this.calendarRangeCache.clear();\n }\n //region Draw\n getRangeDomConfig(timeRange, minDate, maxDate, relativeTo) {\n const\n me = this,\n { client } = me,\n { rtl } = client,\n startPos = client.getCoordinateFromDate(DateHelper.max(timeRange.startDate, minDate)) - relativeTo,\n endPos = timeRange.endDate ? client.getCoordinateFromDate(DateHelper.min(timeRange.endDate, maxDate)) - relativeTo : startPos,\n size = Math.abs(endPos - startPos),\n isRange = size > 0,\n translateX = rtl ? `calc(${startPos}px - 100%)` : `${startPos}px`;\n return {\n className : {\n // Borrow styling from time ranges\n 'b-sch-timerange' : 1,\n 'b-sch-range' : 1,\n 'b-sch-nonworkingtime' : 1,\n [timeRange.cls] : timeRange.cls,\n 'b-rtl' : rtl\n },\n dataset : {\n id : timeRange.id\n },\n elementData : {\n timeRange\n },\n style : client.isVertical\n ? `transform: translateY(${translateX}); ${isRange ? `height:${size}px` : ''};`\n : `transform: translateX(${translateX}); ${isRange ? `width:${size}px` : ''};`\n };\n }\n getCalendarTimeRanges(calendar) {\n let cached = this.calendarRangeCache.get(calendar);\n if (!cached) {\n cached = super.getCalendarTimeRanges(calendar, true);\n this.calendarRangeCache.set(calendar, cached);\n }\n return cached;\n }\n // Render ranges into event bars\n onEventDataGenerated({ eventRecord, endMS, startMS, start, end, left, top, children }) {\n if (this.enabled) {\n const\n { isVertical } = this.client,\n // Use combined calendar for Pro & Gantt, project calendar for Scheduler\n calendar = eventRecord.effectiveCalendarsCombination ?? this.client.project.calendar;\n for (const timeRange of this.getCalendarTimeRanges(calendar)) {\n // Only care about ranges inside the event bar\n if (timeRange.startDateMS < endMS && timeRange.endDateMS > startMS) {\n const domConfig = this.getRangeDomConfig(timeRange, start, end, isVertical ? top : left);\n children.push(domConfig);\n }\n }\n }\n }\n //endregion\n}\nEventNonWorkingTime._$name = 'EventNonWorkingTime'; GridFeatureManager.registerFeature(EventNonWorkingTime, false, 'Scheduler');\n", "import TooltipBase from './base/TooltipBase.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\nimport { parseAlign } from '../../Core/helper/util/Rectangle.js';\n/**\n * @module Scheduler/feature/EventTooltip\n */\n// Alignment offsets to clear any dependency terminals depending on whether\n// the tooltip is aligned top/bottom (1) or left/right (2) as parsed from the\n// align string by Rectangle's parseAlign\nconst\n zeroOffset = [0, 0],\n depOffset = [\n null, [0, 10], [10, 0]\n ];\n/**\n * Displays a tooltip when hovering events. The template used to render the tooltip can be customized, see {@link #config-template}.\n * Config options are also applied to the tooltip shown, see {@link Core.widget.Tooltip} for available options.\n *\n * ## Showing local data\n * To show a basic \"local\" tooltip (with data available in the Event record) upon hover:\n * ```javascript\n * new Scheduler({\n * features : {\n * eventTooltip : {\n * // Tooltip configs can be used here\n * align : 'l-r' // Align left to right,\n * // A custom HTML template\n * template : data => `
\n *
Assigned to:
\n *
Time:
\n *
\n * ${DateHelper.format(data.eventRecord.startDate, 'LT')} - ${DateHelper.format(data.eventRecord.endDate, 'LT')}\n *
\n * ${data.eventRecord.get('note') ? `
Note:
${data.eventRecord.note}
` : ''}\n *\n * ${data.eventRecord.get('image') ? `
Image:
` : ''}\n *
`\n * }\n * }\n * });\n * ```\n *\n * ## Showing remotely loaded data\n * Loading remote data into the event tooltip is easy. Simply use the {@link #config-template} and return a Promise which yields the content to show.\n * ```javascript\n * new Scheduler({\n * features : {\n * eventTooltip : {\n * template : ({ eventRecord }) => AjaxHelper.get(`./fakeServer?name=${eventRecord.name}`).then(response => response.text())\n * }\n * }\n * });\n * ```\n *\n * This feature is **enabled** by default\n *\n * By default, the tooltip {@link Core.widget.Widget#config-scrollAction realigns on scroll}\n * meaning that it will stay aligned with its target should a scroll interaction make the target move.\n *\n * If this is causing performance issues in a Scheduler, such as if there are many dozens of events\n * visible, you can configure this feature with `scrollAction: 'hide'`. This feature's configuration is\n * applied to the tooltip, so that will mean that the tooltip will hide if its target is moved by a\n * scroll interaction.\n *\n * ## Keeping tooltip visible after mouse exits target element\n *\n * By default, a Tooltip is transient, and will {@link #function-hide} when the mouse leaves the target element.\n * Configure this feature with {@link #config-autoHide} set to `false` to make the Tooltip stay visible.\n *\n * {@inlineexample Scheduler/feature/EventTooltip.js}\n *\n * @demo Scheduler/basic\n *\n * @extends Scheduler/feature/base/TooltipBase\n * @classtype eventTooltip\n * @feature\n */\nexport default class EventTooltip extends TooltipBase {\n //region Config\n static get $name() {\n return 'EventTooltip';\n }\n static get defaultConfig() {\n return {\n /**\n * Set this value to `false` to keep Tooltip visible after mouse leaves the target element.\n * @config {Boolean} autoHide\n * @default true\n */\n /**\n * A function which receives data about the event and returns a string,\n * or a Promise yielding a string (for async tooltips), to be displayed in the tooltip.\n * This method will be called with an object containing the fields below\n *\n * @config {Function} template\n * @param {Scheduler.model.EventModel} data.eventRecord Hovered event record\n * @param {Date} data.startDate Hovered event start date\n * @param {Date} data.endDate Hovered event end date\n * @param {String} data.startText Start text\n * @param {String} data.endText End text\n * @param {Core.widget.Tooltip} data.tip Current tooltip instance\n * @param {String} data.startClockHtml Predefined HTML to show the start time\n * @param {String} data.endClockHtml Predefined HTML to show the end time\n * @returns {DomConfig|String|null}\n *\n * @category Rendering\n */\n template : data => `\n ${data.eventRecord.name ? StringHelper.xss`
${data.eventRecord.name}
` : ''}\n ${data.startClockHtml}\n ${data.endClockHtml}`,\n cls : 'b-sch-event-tooltip',\n monitorRecordUpdate : true,\n /**\n * Defines what to do if document is scrolled while the tooltip is visible.\n *\n * Valid values: \u00B4null\u00B4: do nothing, \u00B4hide\u00B4: hide the tooltip or \u00B4realign\u00B4: realign to the target if possible.\n *\n * @config {'hide'|'realign'|null}\n * @default\n */\n scrollAction : 'hide'\n };\n }\n /**\n * The event which the tooltip feature has been activated for.\n * @member {Scheduler.model.EventModel} eventRecord\n * @readonly\n */\n //endregion\n construct(client, config) {\n super.construct(client, config);\n if (typeof this.align === 'string') {\n this.align = { align : this.align };\n }\n }\n onInternalPaint({ firstPaint }) {\n super.onInternalPaint(...arguments);\n if (firstPaint) {\n const\n { dependencies } = this.client.features;\n if (dependencies) {\n this.tooltip.ion({\n beforeAlign({ source : tooltip, offset = zeroOffset }) {\n const\n { edgeAligned } = parseAlign(tooltip.align.align),\n depTerminalOffset = (dependencies.disabled || !dependencies.allowCreate) ? zeroOffset : depOffset[edgeAligned];\n // Add the spec's offset to the offset necessitated by dependency terminals\n arguments[0].offset = [\n offset[0] + depTerminalOffset[0],\n offset[1] + depTerminalOffset[1]\n ];\n }\n });\n }\n }\n }\n}\nEventTooltip._$name = 'EventTooltip'; GridFeatureManager.registerFeature(EventTooltip, true, 'Scheduler');\nGridFeatureManager.registerFeature(EventTooltip, false, 'ResourceHistogram');\n", "import GridGroupSummary from '../../Grid/feature/GroupSummary.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport Tooltip from '../../Core/widget/Tooltip.js';\n// Actions that trigger rerendering of group summary rows\nconst\n eventStoreRefreshActions = {\n update : 1,\n filter : 1\n },\n assignmentStoreRefreshActions = {\n add : 1,\n remove : 1,\n update : 1,\n removeAll : 1,\n filter : 1\n };\n/**\n * @module Scheduler/feature/GroupSummary\n */\n// noinspection JSClosureCompilerSyntax\n/**\n * A special version of the Grid GroupSummary feature that enables summaries within scheduler. To use a single summary\n * it is easiest to configure {@link #config-renderer}, for multiple summaries see {@link #config-summaries}.\n *\n * This feature is disabled by default. It is **not** supported in vertical mode.\n *\n * {@inlineexample Scheduler/feature/GroupSummary.js}\n *\n * @demo Scheduler/groupsummary\n *\n * @extends Grid/feature/GroupSummary\n * @classtype groupSummary\n * @feature\n *\n * @typings Grid.feature.GroupSummary -> Grid.feature.GridGroupSummary\n */\nexport default class GroupSummary extends GridGroupSummary {\n //region Config\n static get $name() {\n return 'GroupSummary';\n }\n static get defaultConfig() {\n return {\n /**\n * Show tooltip containing summary values and labels\n * @config {Boolean}\n * @default\n */\n showTooltip : true,\n /**\n * Array of summary configs which consists of a label and a {@link #config-renderer} function\n * ```\n * summaries : [\n * {\n * label : 'Label',\n * renderer : ({ startDate, endDate, eventStore, resourceStore, events, resources, groupRecord, groupField, groupValue }) => {\n * // return display value\n * returns '
Renderer output
';\n * }\n * }\n * ]\n * ```\n * @config {SchedulerSummaryOptions[]}\n */\n summaries : null,\n /**\n * Renderer function for a single time axis tick in a group summary row.\n * Should calculate a sum and return HTML as a result.\n *\n * ```javascript\n * new Scheduler({\n * features : {\n * groupSummary : {\n * renderer : ({ startDate, endDate, eventStore, resourceStore, events, resources, groupRecord, groupField, groupValue }) => {\n * // return display value\n * returns '
Renderer output
';\n * }\n * }\n * }\n * });\n * ```\n *\n * @param {Object} context Rendering context object\n * @param {Date} context.startDate Tick start date\n * @param {Date} context.endDate Tick end date\n * @param {Scheduler.model.EventModel[]} context.events Events which belong to the group\n * @param {Scheduler.model.ResourceModel[]} context.resources Resources which belong to the group\n * @param {Scheduler.data.EventStore} context.eventStore Event store\n * @param {Scheduler.data.ResourceStore} context.resourceStore Resource store\n * @param {Core.data.Model} context.groupRecord Current groups header row record\n * @param {String} context.groupField Current groups field name\n * @param {String} context.groupValue Current groups value\n * @returns {String} Html content\n * @config {Function}\n */\n renderer : null\n };\n }\n static get properties() {\n return {\n footersToUpdate : new Set()\n };\n }\n static get pluginConfig() {\n return {\n chain : ['render']\n };\n }\n //endregion\n //region Init\n construct(scheduler, config) {\n const me = this;\n if (scheduler.isVertical) {\n throw new Error('GroupSummary feature is not supported in vertical mode');\n }\n me.scheduler = scheduler;\n super.construct(scheduler, config);\n if (!me.summaries && me.renderer) {\n me.summaries = [{ renderer : me.renderer }];\n }\n if (scheduler.isSchedulerBase) {\n scheduler.eventStore.ion({\n changePreCommit : me.onEventStoreChange,\n thisObj : me\n });\n scheduler.assignmentStore.ion({\n changePreCommit : me.onAssignmentStoreChange,\n thisObj : me\n });\n scheduler.ion({\n timeAxisViewModelUpdate : me.onTimeAxisChange,\n thisObj : me\n });\n scheduler.project.ion({\n dataReady : me.onProjectDataReady,\n thisObj : me\n });\n }\n }\n doDestroy() {\n this._tip?.destroy();\n super.doDestroy();\n }\n //endregion\n //region Events\n onTimeAxisChange() {\n this.scheduler.rowManager.forEach(row => {\n if (row.isGroupFooter) {\n row.render();\n }\n });\n }\n onEventStoreChange({ action, records, changes }) {\n // Scheduler does minimal update on event changes, it will not rerender the summary rows.\n // Need to handle that here\n if (eventStoreRefreshActions[action]) {\n const resources = new Set();\n records.forEach(eventRecord => eventRecord.resources.forEach(r => resources.add(r)));\n this.afterChange(resources);\n }\n }\n onAssignmentStoreChange({ action, records, changes }) {\n if (assignmentStoreRefreshActions[action]) {\n const resources = new Set();\n records.forEach(assignment => assignment.resource && resources.add(assignment.resource));\n // Include old resource on reassign\n if (changes?.resourceId?.oldValue != null) {\n const oldResource = this.scheduler.resourceStore.getById(changes.resourceId.oldValue);\n oldResource && resources.add(oldResource);\n }\n this.afterChange(resources);\n }\n }\n afterChange(affectedResources) {\n const { resourceStore } = this.scheduler;\n // Collect footers to update\n for (const resourceRecord of affectedResources) {\n let record = resourceRecord;\n // Resource might not match a row (out of view, filtered out etc.)\n // Move up/down until footer is found, or we run out of rows (in case footer is below the buffer)\n if (this.target === 'header') {\n while (record && !record.isGroupHeader) {\n record = resourceStore.getPrev(record);\n }\n }\n else {\n while (record && !record.isGroupFooter) {\n record = resourceStore.getNext(record);\n }\n }\n const row = this.scheduler.rowManager.getRowFor(record);\n if (record && row) {\n this.footersToUpdate.add(row);\n }\n }\n }\n onProjectDataReady() {\n const\n {\n footersToUpdate,\n client\n } = this;\n // Only update the UI immediately if we are visible\n if (client.isVisible) {\n // Re-render only affected footers, once\n if (footersToUpdate.size) {\n for (const footer of footersToUpdate) {\n // Things happen async, footer might have been destroyed\n footer.render?.();\n }\n footersToUpdate.clear();\n }\n }\n else {\n client.whenVisible('refresh', client, [true]);\n }\n }\n //endregion\n //region Render\n /**\n * Called before rendering row contents, used to reset rows no longer used as group summary rows\n * @private\n */\n onBeforeRenderRow({ row, record }) {\n if (row.isGroupFooter && !record.meta.hasOwnProperty('groupFooterFor')) {\n const timeaxisCell = row.elements.normal.querySelector('.b-sch-timeaxis-cell');\n // remove summary cells if exist\n if (timeaxisCell) {\n timeaxisCell.innerHTML = '';\n }\n }\n super.onBeforeRenderRow(...arguments);\n }\n /**\n * Called by parent class to fill timeaxis with summary contents. Generates tick \"cells\" and populates them with\n * summaries.\n * ```\n *
\n *
\n *
x
\n * ...\n *
\n * ...\n *
\n * ```\n * @private\n */\n generateHtml(column, records, cls, groupRecord, groupField, groupValue) {\n if (column.type === 'timeAxis') {\n const\n me = this,\n { scheduler } = me,\n { eventStore } = scheduler,\n colCfg = scheduler.timeAxisViewModel.columnConfig;\n let html = '';\n // group events by ticks info once here to avoid performance lags\n // should be inside `scheduler.isEngineReady` check to make sure all events were calculated\n // https://github.com/bryntum/support/issues/2977\n const eventsByTick = scheduler.getResourcesEventsPerTick(records, ({ event }) => {\n return event.resources.some(resource => records.includes(resource)) && (!eventStore.isFiltered || eventStore.records.includes(event));\n });\n scheduler.timeAxis.forEach((tick, idx) => {\n const\n groupEvents = eventsByTick[idx] || [],\n sumHtml = me.summaries.map(config => {\n // summary renderer used to calculate and format value\n const value = config.renderer?.({\n startDate : tick.startDate,\n endDate : tick.endDate,\n resourceStore : scheduler.resourceStore,\n events : groupEvents,\n resources : records,\n eventStore,\n groupRecord,\n groupField,\n groupValue\n }) ?? '';\n return `
${value}
`;\n }).join('');\n // get width on column index from the last header config\n html += `
${sumHtml}
`;\n });\n return `
${html}
`;\n }\n return super.generateHtml(column, records, cls, groupRecord, groupField, groupValue);\n }\n /**\n * Overrides parents function to return correct summary count, used when sizing row\n * @private\n */\n updateSummaryHtml(cellElement, column, records) {\n const count = super.updateSummaryHtml(cellElement, column, records);\n if (column.type === 'timeAxis') {\n const result = {\n count : 0,\n height : 0\n };\n this.summaries.forEach(config => {\n if (config.height) {\n result.height += config.height;\n }\n else {\n result.count++;\n }\n });\n return result;\n }\n return count;\n }\n /**\n * Generates tooltip contents for hovered summary tick\n * @private\n */\n getTipHtml({ activeTarget }) {\n const\n me = this,\n index = Array.from(activeTarget.parentElement.children).indexOf(activeTarget),\n tick = me.scheduler.timeAxis.getAt(index);\n let tipHtml = `
${me.L('L{Summary.Summary for}', me.scheduler.getFormattedDate(tick.startDate))}
`,\n showTip = false;\n DomHelper.forEachSelector(activeTarget, '.b-timeaxis-summary-value', (element, i) => {\n const\n label = me._labels[i],\n text = element.innerText.trim();\n tipHtml += `
${text}
`;\n if (element.innerHTML) {\n showTip = true;\n }\n });\n return showTip ? tipHtml : null;\n }\n /**\n * Initialize tooltip on render\n * @private\n */\n render() {\n const\n me = this,\n { scheduler } = me;\n if (scheduler.isSchedulerBase) {\n // if any sum config has a label, init tooltip\n if (me.summaries?.some(config => config.label) && me.showTooltip && !me._tip) {\n me._labels = me.summaries.map(config => config.label || '');\n me._tip = new Tooltip({\n id : `${scheduler.id}-groupsummary-tip`,\n cls : 'b-timeaxis-summary-tip',\n hoverDelay : 0,\n hideDelay : 0,\n forElement : scheduler.timeAxisSubGridElement,\n anchorToTarget : true,\n forSelector : '.b-timeaxis-group-summary .b-timeaxis-tick',\n getHtml : me.getTipHtml.bind(me)\n });\n }\n }\n }\n //endregion\n removeSummaryElements(rowEl) {\n const summaryElement = rowEl.querySelector('.b-timeaxis-group-summary');\n summaryElement?.remove();\n super.removeSummaryElements();\n }\n hasSummary(column) {\n return super.hasSummary(column) || column.isTimeAxisColumn;\n }\n}\n// Override Grids GroupSummary with this improved version\nGroupSummary._$name = 'GroupSummary'; GridFeatureManager.registerFeature(GroupSummary, false, 'Scheduler');\n", "import InstancePlugin from '../../Core/mixin/InstancePlugin.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport EventHelper from '../../Core/helper/EventHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport Rectangle from '../../Core/helper/util/Rectangle.js';\n/**\n * @module Scheduler/feature/HeaderZoom\n */\n/**\n * Enables users to click and drag to zoom to a date range in Scheduler's header time axis. Only supported in horizontal\n * mode.\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * headerZoom : true\n * }\n * });\n * ```\n *\n * {@inlineexample Scheduler/feature/HeaderZoom.js}\n *\n *
Not compatible with the {@link Scheduler/feature/TimeSelection} feature.
\n *\n * This feature is **disabled** by default.\n * For info on enabling it, see {@link Grid.view.mixin.GridFeatures}.\n *\n * @extends Core/mixin/InstancePlugin\n * @classtype headerZoom\n * @feature\n */\nexport default class HeaderZoom extends InstancePlugin {\n static $name = 'HeaderZoom';\n static get pluginConfig() {\n return {\n chain : ['onElementMouseDown', 'onElementMouseMove']\n };\n }\n onElementMouseDown(event) {\n const me = this;\n // only react to mouse input, and left button\n if (event.touches || event.button !== 0 || me.disabled) {\n return;\n }\n // only react to mousedown directly on timeaxis cell\n if (event.target.closest('.b-sch-header-timeaxis-cell')) {\n const headerEl = me.client.subGrids.normal.header.headersElement;\n me.startX = event.clientX;\n me.element = DomHelper.createElement({\n parent : headerEl,\n tag : 'div',\n className : 'b-headerzoom-rect'\n });\n me.headerElementRect = Rectangle.from(headerEl);\n EventHelper.on({\n element : document,\n mouseup : 'onMouseUp',\n thisObj : me,\n once : true\n });\n }\n }\n onElementMouseMove(event) {\n const me = this;\n if (typeof me.startX === 'number') {\n const\n x = Math.max(event.clientX, me.headerElementRect.left),\n left = Math.min(me.startX, x),\n width = Math.abs(me.startX - x),\n rect = new Rectangle(left - me.headerElementRect.x + me.client.scrollLeft, 0, width, me.headerElementRect.height);\n DomHelper.setTranslateX(me.element, rect.left);\n me.element.style.width = rect.width + 'px';\n }\n }\n onMouseUp() {\n const me = this;\n if (typeof me.startX === 'number') {\n const\n { client } = me,\n rect = Rectangle.from(me.element),\n startDate = client.getDateFromCoordinate(rect.left, 'round', false),\n endDate = client.getDateFromCoordinate(rect.right, 'round', false);\n me.element.remove();\n me.startX = null;\n client.zoomToSpan({\n startDate,\n endDate\n });\n }\n }\n}\nHeaderZoom._$name = 'HeaderZoom'; GridFeatureManager.registerFeature(HeaderZoom, false, 'Scheduler');\n", "import InstancePlugin from '../../Core/mixin/InstancePlugin.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport DomSync from '../../Core/helper/DomSync.js';\nimport EventHelper from '../../Core/helper/EventHelper.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\nimport Editor from '../../Core/widget/Editor.js';\n/**\n * @module Scheduler/feature/Labels\n */\nconst\n sides = [\n 'top',\n 'before',\n 'after',\n 'bottom'\n ],\n editorAlign = (side, client) => {\n switch (side) {\n case 'top' :\n return 'b-b';\n case 'after' :\n return client.rtl ? 'r-r' : 'l-l';\n case 'right' :\n return 'l-l';\n case 'bottom' :\n return 't-t';\n case 'before' :\n return client.rtl ? 'l-l' : 'r-r';\n case 'left' :\n return 'r-r';\n }\n },\n topBottom = {\n top : 1,\n bottom : 1\n },\n layoutModes = {\n estimate : 1,\n measure : 1\n },\n layoutSides = {\n before : 1,\n after : 1\n };\n/**\n * Configuration object for a label used by the Labels feature.\n * @typedef {Object} SchedulerLabelConfig\n * @property {String} field The name of a field in one of the associated records, {@link Scheduler.model.EventModel} or\n * {@link Scheduler.model.ResourceModel}. The record from which the field value is drawn will be ascertained by checking\n * for field definitions by the specified name.\n * @property {Function} renderer A function, which when passed an object containing `eventRecord`, `resourceRecord`,\n * `assignmentRecord` and `domConfig` properties, returns the HTML to display as the label\n * @property {Scheduler.model.EventModel} renderer.eventRecord\n * @property {Scheduler.model.ResourceModel} renderer.resourceRecord\n * @property {Scheduler.model.AssignmentModel} renderer.assignmentRecord\n * @property {DomConfig} renderer.domConfig\n * @property {Object} thisObj The `this` reference to use in the `renderer`.\n * @property {InputFieldConfig|Core.widget.Field} editor If the label is to be editable, a field configuration object with a\n * `type` property, or an instantiated Field. **The `field` property is mandatory for editing to work**.\n */\n/**\n * Displays labels at positions {@link #config-top}, {@link #config-right}, {@link #config-bottom} and\n * {@link #config-left}.\n *\n * Text in labels can be set from a field on the {@link Scheduler.model.EventModel} or the\n * {@link Scheduler.model.ResourceModel} or using a custom renderer. See {@link #typedef-SchedulerLabelConfig} for\n * configuration specification.\n *\n * ```javascript\n * new Scheduler({\n * features : {\n * labels : {\n * // Label rendered above the event bar with content from the\n * // record's location field\n * top : {\n * field : 'location',\n * editor : {\n * type : 'textfield'\n * }\n * },\n * // Label rendered below the event bar with custom content\n * // from a renderer\n * bottom : {\n * renderer : ({ eventRecord }) => `ID: ${eventRecord.id}`\n * }\n * }\n * }\n * });\n * ```\n *\n * Since `top` and `bottom` labels occupy space that would otherwise be used by the event we recommend using bigger\n * rowHeights (>55px for both labels with default styling) and zero barMargins because `top`/`bottom` labels give space\n * around events anyway.\n *\n * To prevent labels from being overlapped by other events, see {@link #config-labelLayoutMode}.\n *\n * This feature is **disabled** by default.\n * It is **not** supported in vertical mode.\n * For info on enabling it, see {@link Grid.view.mixin.GridFeatures}.\n *\n * {@inlineexample Scheduler/feature/Labels.js}\n *\n * @demo Scheduler/labels\n *\n * @extends Core/mixin/InstancePlugin\n * @classtype labels\n * @feature\n */\nexport default class Labels extends InstancePlugin {\n //region Config\n static get $name() {\n return 'Labels';\n }\n static get configurable() {\n return {\n /**\n * CSS class to apply to label elements\n * @config {String}\n * @default\n */\n labelCls : 'b-sch-label',\n /**\n * Top label configuration object.\n * @config {SchedulerLabelConfig}\n * @default\n */\n top : null,\n /**\n * Configuration object for the label which appears *after* the event bar in the current writing direction.\n * @config {SchedulerLabelConfig}\n * @default\n */\n after : null,\n /**\n * Right label configuration object.\n * @config {SchedulerLabelConfig}\n * @default\n */\n right : null,\n /**\n * Bottom label configuration object.\n * @config {SchedulerLabelConfig}\n * @default\n */\n bottom : null,\n /**\n * Configuration object for the label which appears *before* the event bar in the current writing direction.\n * @config {SchedulerLabelConfig}\n * @default\n */\n before : null,\n /**\n * Left label configuration object.\n * @config {SchedulerLabelConfig}\n * @default\n */\n left : null,\n thisObj : null,\n /**\n * What action should be taken when focus moves leaves the cell editor, for example when clicking outside.\n * May be `'complete'` or `'cancel`'.\n * @config {'complete'|'cancel'}\n * @default\n */\n blurAction : 'cancel',\n /**\n * How to handle labels during event layout. Options are:\n *\n * * default - Labels do not affect event layout, events will overlap labels\n * * estimate - Label width is estimated by multiplying text length with {@link #config-labelCharWidth}\n * * measure - Label width is determined by measuring the label, precise but slow\n *\n * Note that this only applies to the left and right labels, top and bottom labels does not take part in the\n * event layout process.\n *\n * @config {'default'|'estimate'|'measure'}\n * @default\n */\n labelLayoutMode : 'default',\n /**\n * Factor representing the average char width in pixels used to determine label width when configured\n * with `labelLayoutMode: 'estimate'`.\n * @config {Number}\n * @default\n */\n labelCharWidth : 7\n };\n }\n // Plugin configuration. This plugin chains some of the functions in Grid.\n static get pluginConfig() {\n return {\n chain : ['onEventDataGenerated']\n };\n }\n //endregion\n //region Init & destroy\n construct(scheduler, config) {\n const me = this;\n if (scheduler.isVertical) {\n throw new Error('Labels feature is not supported in vertical mode');\n }\n me.scheduler = scheduler;\n super.construct(scheduler, config);\n if (me.top || me.bottom || me.before || me.after) {\n me.updateHostClasslist();\n // rowHeight warning, not in use\n //const labelCount = !!me.topLabel + !!me.bottomLabel;\n //if (scheduler.rowHeight < 60 - labelCount * 12) console.log('')\n }\n }\n updateHostClasslist() {\n const\n { top, bottom } = this,\n { classList } = this.scheduler.element;\n classList.remove('b-labels-topbottom');\n classList.remove('b-labels-top');\n classList.remove('b-labels-bottom');\n // OR is correct. This means that there are labels above OR below.\n if (top || bottom) {\n classList.add('b-labels-topbottom');\n if (top) {\n classList.add('b-labels-top');\n }\n if (bottom) {\n classList.add('b-labels-bottom');\n }\n }\n }\n onLabelDblClick(event) {\n const\n me = this,\n target = event.target;\n if (target && !me.scheduler.readOnly) {\n const\n { side } = target.dataset,\n labelConfig = me[side],\n { editor, field } = labelConfig;\n if (editor) {\n const eventRecord = this.scheduler.resolveEventRecord(event.target);\n if (eventRecord.readOnly) {\n return;\n }\n if (!(editor instanceof Editor)) {\n labelConfig.editor = new Editor({\n blurAction : me.blurAction,\n inputField : editor,\n scrollAction : 'realign'\n });\n }\n // Editor removes itself from the DOM after being hidden\n labelConfig.editor.render(me.scheduler.element);\n labelConfig.editor.startEdit({\n target,\n align : editorAlign(side, me.client),\n matchSize : false,\n record : eventRecord,\n field\n });\n event.stopImmediatePropagation();\n return false;\n }\n }\n }\n changeTop(top) {\n return this.processLabelSpec(top, 'top');\n }\n updateTop() {\n this.updateHostClasslist();\n }\n changeAfter(after) {\n return this.processLabelSpec(after, 'after');\n }\n updateAfter() {\n this.updateHostClasslist();\n }\n changeRight(right) {\n this[this.client.rtl ? 'before' : 'after'] = right;\n }\n changeBottom(bottom) {\n return this.processLabelSpec(bottom, 'bottom');\n }\n updateBottom() {\n this.updateHostClasslist();\n }\n changeBefore(before) {\n return this.processLabelSpec(before, 'before');\n }\n updateBefore() {\n this.updateHostClasslist();\n }\n changeLeft(left) {\n this[this.client.rtl ? 'after' : 'before'] = left;\n }\n processLabelSpec(labelSpec, side) {\n if (typeof labelSpec === 'function') {\n labelSpec = {\n renderer : labelSpec\n };\n }\n else if (typeof labelSpec === 'string') {\n labelSpec = {\n field : labelSpec\n };\n }\n // Allow us to mutate ownProperties in the labelSpec without mutating outside object\n else if (labelSpec) {\n labelSpec = Object.setPrototypeOf({}, labelSpec);\n }\n // Clear label\n else {\n return null;\n }\n const\n { scheduler } = this,\n { eventStore, resourceStore, taskStore, id } = scheduler,\n { field, editor } = labelSpec;\n // If there are milestones, and we are changing the available height\n // either by adding a top/bottom label, or adding a top/bottom label\n // then during the next dependency refresh, milestone width must be recalculated.\n if (topBottom[side]) {\n scheduler.milestoneWidth = null;\n }\n if (eventStore && !taskStore) {\n labelSpec.recordType = 'event';\n }\n else {\n labelSpec.recordType = 'task';\n }\n // Find the field definition or property from whichever store and cache the type.\n if (field) {\n let\n fieldDef,\n fieldFound = false;\n if (eventStore && !taskStore) {\n fieldDef = eventStore.modelClass.fieldMap[field];\n if (fieldDef) {\n labelSpec.fieldDef = fieldDef;\n labelSpec.recordType = 'event';\n fieldFound = true;\n }\n // Check if it references a property\n else if (Reflect.has(eventStore.modelClass.prototype, field)) {\n labelSpec.recordType = 'event';\n fieldFound = true;\n }\n }\n if (!fieldDef && taskStore) {\n fieldDef = taskStore.modelClass.fieldMap[field];\n if (fieldDef) {\n labelSpec.fieldDef = fieldDef;\n labelSpec.recordType = 'task';\n fieldFound = true;\n }\n // Check if it references a property\n else if (Reflect.has(resourceStore.modelClass.prototype, field)) {\n labelSpec.recordType = 'task';\n fieldFound = true;\n }\n }\n if (!fieldDef && resourceStore) {\n fieldDef = resourceStore.modelClass.fieldMap[field];\n if (fieldDef) {\n labelSpec.fieldDef = fieldDef;\n labelSpec.recordType = 'resource';\n fieldFound = true;\n }\n // Check if it references a property\n else if (Reflect.has(resourceStore.modelClass.prototype, field)) {\n labelSpec.recordType = 'resource';\n fieldFound = true;\n }\n }\n if (editor) {\n if (typeof editor === 'boolean') {\n scheduler.editor = {\n type : 'textfield'\n };\n }\n else if (typeof editor === 'string') {\n scheduler.editor = {\n type : editor\n };\n }\n EventHelper.on({\n element : scheduler.timeAxisSubGrid.element,\n delegate : '.b-sch-label',\n dblclick : 'onLabelDblClick',\n thisObj : this\n });\n }\n }\n return labelSpec;\n }\n doDisable(disable) {\n super.doDisable(disable);\n if (this.client.isPainted) {\n this.client.refresh();\n }\n }\n //endregion\n generateLabelConfigs(data) {\n const\n me = this,\n configs = [];\n // Insert all configured labels\n for (const side of sides) {\n if (me[side]) {\n const\n {\n field,\n fieldDef,\n recordType,\n renderer,\n thisObj\n } = me[side],\n domConfig = {\n tag : 'label',\n className : {\n [me.labelCls] : 1,\n [`${me.labelCls}-${side}`] : 1\n },\n dataset : {\n side,\n taskFeature : `label-${side}`\n }\n };\n let value;\n const\n eventRecordProperty = `${recordType}Record`,\n eventRecord = data[eventRecordProperty];\n // If there's a renderer, use that by preference\n if (renderer) {\n value = renderer.call(thisObj || me.thisObj || me, {\n [eventRecordProperty] : eventRecord,\n resourceRecord : data.resourceRecord,\n assignmentRecord : data.assignmentRecord,\n domConfig\n });\n }\n else {\n value = eventRecord.getValue(field);\n // If it's a date, format it according to the Scheduler's defaults\n if (fieldDef?.type === 'date' && !renderer) {\n value = DateHelper.format(value, me.client.displayDateFormat);\n }\n else {\n value = StringHelper.encodeHtml(value);\n }\n }\n // No null/undefined or false\n if (value != null && value !== false) {\n domConfig.html = value;\n }\n // Only show label if we got some content\n if (domConfig.html != null || domConfig.children?.length || domConfig.text != null) {\n configs.push(domConfig);\n }\n }\n }\n return configs;\n }\n measureLabels(configs, data) {\n const\n me = this,\n pxPerMS = me.client.timeAxisViewModel.getSingleUnitInPixels('millisecond');\n for (const config of configs) {\n if (layoutSides[config.dataset.side]) {\n let { html } = config;\n let length = 0;\n // Calculate length based on string length\n if (me.labelLayoutMode === 'estimate') {\n // Strip tags before estimating\n if (html.includes('<')) {\n html = DomHelper.stripTags(html);\n }\n length = (html.length * me.labelCharWidth) + 18; // 18 = 1.5em, margin from event\n }\n // Measure\n else {\n const element = me.labelMeasureElement || (me.labelMeasureElement = DomHelper.createElement({\n className : 'b-sch-event-wrap b-measure-label',\n parent : me.client.foregroundCanvas\n }));\n // Outer DomSync should not remove\n element.retainElement = true;\n DomSync.sync({\n targetElement : element,\n domConfig : {\n onlyChildren : true,\n children : [\n config\n ]\n }\n });\n length = element.firstElementChild.offsetWidth;\n }\n // Convert from px to ms\n const ms = length / pxPerMS;\n // Adjust values used for event layout (not event position)\n switch (config.dataset.side) {\n case 'before':\n data.startMS -= ms;\n break;\n case 'after':\n data.endMS += ms;\n break;\n }\n }\n }\n }\n onEventDataGenerated(data) {\n if (!this.disabled && !data.eventRecord?.isResourceTimeRange) {\n const configs = this.generateLabelConfigs(data);\n if (layoutModes[this.labelLayoutMode]) {\n this.measureLabels(configs, data);\n }\n data.wrapperChildren.push(...configs);\n }\n }\n updateLabelLayoutMode() {\n if (!this.isConfiguring) {\n this.client.refreshWithTransition();\n }\n }\n updateLabelCharWidth() {\n if (!this.isConfiguring) {\n this.client.refreshWithTransition();\n }\n }\n}\nLabels.featureClass = 'b-sch-labels';\nLabels._$name = 'Labels'; GridFeatureManager.registerFeature(Labels, false, 'Scheduler');\n", "import AbstractTimeRanges from './AbstractTimeRanges.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport VersionHelper from '../../Core/helper/VersionHelper.js';\nimport AttachToProjectMixin from '../data/mixin/AttachToProjectMixin.js';\nimport NonWorkingTimeMixin from './mixin/NonWorkingTimeMixin.js';\n/**\n * @module Scheduler/feature/NonWorkingTime\n */\n/**\n * Feature that allows styling of weekends (and other non-working time) by adding timeRanges for those days.\n *\n * {@inlineexample Scheduler/feature/NonWorkingTime.js}\n *\n * By default, the basic Scheduler's calendar is empty. When enabling this feature in the basic Scheduler, it injects\n * Saturday and Sunday weekend intervals if no intervals are encountered. For Scheduler Pro, it visualizes the project\n * calendar and does not automatically inject anything. You have to define a Calendar in the application and assign it\n * to the project, for more information on how to do that, please see Scheduler Pro's Scheduling/Calendars guide.\n *\n * Please note that to not clutter the view (and have a large negative effect on performance) the feature does not\n * render ranges shorter than the base unit used by the time axis. The behavior can be disabled with\n * {@link #config-hideRangesOnZooming} config.\n *\n * The feature also bails out of rendering ranges for very zoomed out views completely for the same reasons (see\n * {@link #config-maxTimeAxisUnit} for details).\n *\n * Also note that the feature uses virtualized rendering, only the currently visible non-working-time ranges are\n * available in the DOM.\n *\n * This feature is **disabled** by default for Scheduler, but **enabled** by default for Scheduler Pro.\n * For info on enabling it, see {@link Grid/view/mixin/GridFeatures}.\n *\n * @extends Scheduler/feature/AbstractTimeRanges\n * @demo Scheduler/nonworkingdays\n * @classtype nonWorkingTime\n * @mixes Scheduler/feature/mixin/NonWorkingTimeMixin\n * @feature\n */\nexport default class NonWorkingTime extends AbstractTimeRanges.mixin(AttachToProjectMixin, NonWorkingTimeMixin) {\n //region Default config\n static $name = 'NonWorkingTime';\n /** @hideconfigs enableResizing, store*/\n static get defaultConfig() {\n return {\n /**\n * Set to `true` to highlight non-working periods of time\n * @config {Boolean}\n * @deprecated Since 5.2.0, will be removed since the feature is pointless if set to false\n */\n highlightWeekends : null,\n /**\n * The feature by default does not render ranges smaller than the base unit used by the time axis.\n * Set this config to `false` to disable this behavior.\n *\n *
The {@link #config-maxTimeAxisUnit} config defines a zoom level at which to bail out of\n * rendering ranges completely.
\n * @config {Boolean}\n * @default\n */\n hideRangesOnZooming : true,\n showHeaderElements : true,\n showLabelInBody : true,\n autoGeneratedWeekends : false\n };\n }\n static pluginConfig = {\n chain : [\n 'onInternalPaint',\n 'attachToProject',\n 'updateLocalization',\n 'onConfigChange',\n 'onSchedulerHorizontalScroll'\n ]\n };\n //endregion\n //region Init & destroy\n doDestroy() {\n this.attachToCalendar(null);\n super.doDestroy();\n }\n set highlightWeekends(highlight) {\n VersionHelper.deprecate('Scheduler', '6.0.0', 'Deprecated in favour of disabling the feature');\n this.disabled = !highlight;\n }\n get highlightWeekends() {\n return !this.disabled;\n }\n onConfigChange({ name }) {\n if (!this.isConfiguring && name === 'fillTicks') {\n this.refresh();\n }\n }\n //endregion\n //region Project\n attachToProject(project) {\n super.attachToProject(project);\n this.attachToCalendar(project.effectiveCalendar);\n // if there's no graph yet - need to delay this call until it appears, but not for scheduler\n if (!project.graph && !this.client.isScheduler) {\n project.ion({\n name : 'project',\n dataReady : { fn : () => this.attachToCalendar(project.effectiveCalendar), once : true },\n thisObj : this\n });\n }\n project.ion({\n name : 'project',\n calendarChange : () => this.attachToCalendar(project.effectiveCalendar),\n thisObj : this\n });\n }\n //endregion\n //region TimeAxisViewModel\n onTimeAxisViewModelUpdate(...args) {\n this._timeAxisUnitDurationMs = null;\n return super.onTimeAxisViewModelUpdate(...args);\n }\n //endregion\n //region Calendar\n attachToCalendar(calendar) {\n const\n me = this,\n { project, client } = me;\n me.detachListeners('calendar');\n me.autoGeneratedWeekends = false;\n if (calendar) {\n // Sets up a default weekend calendar for basic Scheduler, when no calendar is set\n me.setupDefaultCalendar();\n calendar.intervalStore.ion({\n name : 'calendar',\n change : () => me.setTimeout(() => me.refresh(), 1)\n });\n }\n // On changing calendar we react to a data level event which is triggered after project refresh.\n // Redraw right away\n if (client.isEngineReady && !client.project.isDelayingCalculation && !client.isDestroying) {\n me.refresh();\n }\n // Initially there is no guarantee we are ready to draw, wait for refresh\n else if (!project.isDestroyed) {\n me.detachListeners('initialProjectListener');\n project.ion({\n name : 'initialProjectListener',\n refresh({ isCalculated }) {\n // Cant render early, have to wait for calculations\n if (isCalculated !== false) {\n me.refresh();\n me.detachListeners('initialProjectListener');\n }\n },\n thisObj : me\n });\n }\n }\n get calendar() {\n return this.project?.effectiveCalendar;\n }\n //endregion\n //region Draw\n get timeAxisUnitDurationMs() {\n // calculate and cache duration of the timeAxis unit in milliseconds\n if (!this._timeAxisUnitDurationMs) {\n this._timeAxisUnitDurationMs = DateHelper.as('ms', 1, this.client.timeAxis.unit);\n }\n return this._timeAxisUnitDurationMs;\n }\n /**\n * Based on this method result the feature decides whether the provided non-working period should\n * be rendered or not.\n * The method checks that the range has non-zero {@link Scheduler.model.TimeSpan#field-duration},\n * lays in the visible timespan and its duration is longer or equal the base timeaxis unit\n * (if {@link #config-hideRangesOnZooming} is `true`).\n *\n * Override the method to implement your custom range rendering vetoing logic.\n * @param {Scheduler.model.TimeSpan} range Range to render.\n * @returns {Boolean} `true` if the range should be rendered and `false` otherwise.\n */\n shouldRenderRange(range, start, end) {\n // if the range is longer or equal than one timeAxis unit then render it\n return super.shouldRenderRange(range, start, end) && (!this.hideRangesOnZooming || range.durationMS >= this.timeAxisUnitDurationMs);\n }\n // Calendar intervals as TimeSpans, with adjacent intervals merged to create fewer\n get timeRanges() {\n const me = this;\n if (!me._timeRanges) {\n me._timeRanges = me.getCalendarTimeRanges(me.calendar);\n }\n return me._timeRanges;\n }\n //endregion\n}\nNonWorkingTime._$name = 'NonWorkingTime'; GridFeatureManager.registerFeature(NonWorkingTime, false, 'Scheduler');\nGridFeatureManager.registerFeature(NonWorkingTime, true, ['SchedulerPro', 'Gantt', 'ResourceHistogram']);\n", "import InstancePlugin from '../../Core/mixin/InstancePlugin.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport EventHelper from '../../Core/helper/EventHelper.js';\n/**\n * @module Scheduler/feature/Pan\n */\n/**\n * Makes the scheduler's timeline pannable by dragging with the mouse. Try it out in the demo below.\n *\n * {@inlineexample Scheduler/feature/Pan.js}\n *\n * ```javascript\n * // Enable Pan\n * const scheduler = new Scheduler({\n * features : {\n * pan : true,\n * eventDragCreate : false\n * }\n * });\n * ```\n *\n * This feature is **disabled** by default.\n * For info on enabling it, see {@link Grid.view.mixin.GridFeatures}.\n *\n *
Incompatible with the {@link Scheduler.feature.EventDragCreate} and the\n * {@link Scheduler.feature.EventDragSelect} features.
\n *\n * @extends Core/mixin/InstancePlugin\n * @classtype pan\n * @feature\n */\nexport default class Pan extends InstancePlugin {\n // region Init\n static $name = 'Pan';\n static configurable = {\n /**\n * Set to `false` to not pan horizontally\n * @prp {Boolean}\n * @default\n */\n horizontal : true,\n /**\n * Set to `false` to not pan vertically\n * @prp {Boolean}\n * @default\n */\n vertical : true,\n /**\n * Set to `false` to not pan horizontally when dragging in the time axis header\n * @prp {Boolean}\n * @default\n */\n enableInHeader : true\n };\n get targetSelector() {\n return `.b-sch-timeaxis-cell,.b-timeline-subgrid${this.enableInHeader ? ',.b-sch-header-timeaxis-cell,.b-sch-header-text' : ''}`;\n }\n //endregion\n //region Plugin config\n static get pluginConfig() {\n return {\n chain : ['onElementMouseDown']\n };\n }\n //endregion\n // region Events\n /**\n * Fires on the owning Scheduler or Gantt widget before pan starts. Return `false` to prevent the operation.\n * @event beforePan\n * @preventable\n * @on-owner\n * @param {Event} event The native browser DOM event\n */\n //endregion\n onElementMouseDown(event) {\n const\n me = this,\n { client } = me,\n { button, touches, target, clientX, clientY } = event,\n dragFeature = client.features.taskDrag || client.features.eventDrag,\n enablePanOnEvents = client.readOnly || !dragFeature?.enabled;\n // only react to mouse input, and left button\n if (touches || button !== 0 || me.disabled || client.trigger('beforePan', { event }) === false) {\n return;\n }\n // only react to mousedown directly on grid cell, subgrid element or if drag is disabled - the events too\n if (target.matches(me.targetSelector) || (enablePanOnEvents && target.closest(client.eventSelector))) {\n me.mouseX = clientX;\n me.mouseY = clientY;\n me.onHeader = me.enableInHeader && target.closest('.b-sch-header-timeaxis-cell');\n me.mouseDetacher = EventHelper.on({\n element : document,\n mousemove : 'onMouseMove',\n mouseup : 'onMouseUp',\n thisObj : me\n });\n }\n }\n onMouseMove(event) {\n const\n me = this,\n { client } = me,\n xScroller = client.timeAxisSubGrid.scrollable,\n yScroller = client.scrollable,\n x = event.clientX,\n y = event.clientY;\n event.preventDefault();\n if (me.vertical && (client.isVertical || !me.onHeader)) {\n yScroller.scrollBy(0, me.mouseY - y);\n }\n if (me.horizontal && (client.isHorizontal || !me.onHeader)) {\n xScroller.scrollBy(me.mouseX - x);\n }\n me.mouseX = x;\n me.mouseY = y;\n }\n onMouseUp() {\n this.mouseDetacher();\n this.mouseDetacher = null;\n }\n /**\n * Yields `true` if a pan gesture is in process.\n * @property {Boolean}\n * @readonly\n */\n get isActive() {\n return Boolean(this.mouseDetacher);\n }\n //endregion\n}\nPan._$name = 'Pan'; GridFeatureManager.registerFeature(Pan, false, ['Scheduler', 'Gantt']);\n", "import ContextMenuBase from '../../Core/feature/base/ContextMenuBase.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\n/**\n * @module Scheduler/feature/ResourceMenu\n */\n/**\n * Applicable only for Scheduler in `vertical` mode. Right click resource header cells to display a context menu.\n *\n * To invoke the menu in a keyboard-accessible manner, use the `SPACE` key when a resource cell is focused.\n *\n * {@inlineexample Scheduler/feature/ResourceMenu.js}\n *\n * ### Default menu items\n *\n * The ResourceMenu feature provides only one item by default:\n *\n * | Reference | Text | Weight | Description |\n * |------------------------|--------|--------|---------------------|\n * | `remove` | Delete | 100 | Delete the resource |\n *\n * ### Customizing the menu items\n *\n * The menu items in the resource menu can be customized, existing items can be changed or removed,\n * and new items can be added. This is handled using the `items` config of the feature.\n *\n * Add extra items for all columns:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * mode : 'vertical',\n * features : {\n * resourceMenu : {\n * items : {\n * extraItem : {\n * text : 'My cell item',\n * icon : 'fa fa-bus',\n * weight : 200,\n * onItem : () => ...\n * }\n * }\n * }\n * }\n * });\n *\n * Remove an existing item:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * mode : 'vertical',\n * features : {\n * resourceMenu : {\n * items : {\n * remove : null\n * }\n * }\n * }\n * });\n * ```\n *\n * Customize existing item:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * mode : 'vertical',\n * features : {\n * resourceMenu : {\n * items : {\n * remove : {\n * text : 'Remove',\n * icon : 'b-fa b-fa-dumpster'\n * }\n * }\n * }\n * }\n * });\n * ```\n *\n * It is also possible to manipulate the default items and add new items in the processing function:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * mode : 'vertical',\n * features : {\n * resourceMenu : {\n * processItems({items, record}) {\n * if (record.cost > 5000) {\n * items.myItem = { text : 'Split cost' };\n * }\n * }\n * }\n * }\n * });\n * ```\n *\n *
The `processItems` implementation my be an `async` function which `awaits` a result to\n * mutate the `items` object.
\n *\n * This feature is **disabled** by default.\n *\n * @extends Core/feature/base/ContextMenuBase\n * @demo Scheduler/vertical\n * @classtype resourceMenu\n * @feature\n */\nexport default class ResourceMenu extends ContextMenuBase {\n //region Config\n static $name = 'ResourceMenu';\n static configurable = {\n /**\n * A function called before displaying the menu that allows manipulations of its items.\n * Returning `false` from this function prevents the menu being shown.\n *\n * ```javascript\n * features : {\n * resourceMenu : {\n * processItems({ items, record, column }) {\n * // Add or hide existing items here as needed\n * items.myAction = {\n * text : 'Cool action',\n * icon : 'b-fa b-fa-fw b-fa-ban',\n * onItem : () => console.log(`Clicked ${record.name}`),\n * weight : 1000 // Move to end\n * };\n *\n * if (!record.allowDelete) {\n * items.remove.hidden = true;\n * }\n * }\n * }\n * },\n * ```\n *\n * @config {Function}\n * @param {Object} context An object with information about the menu being shown.\n * @param {Scheduler.feature.ResourceMenu} context.feature A reference to this feature.\n * @param {Event} context.domEvent The initiating event.\n * @param {Event} context.event DEPRECATED: The initiating event.\n * @param {Number[]} context.point The client `X` and `Y` position of the initiating event.\n * @param {HTMLElement} context.targetElement The target to which the menu is being applied.\n * @param {Scheduler.model.ResourceModel} context.resourceRecord The record representing the current resource.\n * @param {Object} context.items An object containing the\n * {@link Core.widget.MenuItem menu item} configs keyed by their id.\n * @returns {Boolean|null} Returning `false` from this function prevents the menu being shown\n *\n * @preventable\n */\n processItems : null,\n /**\n * {@link Core.widget.Menu} items object containing named child menu items to apply to the feature's\n * provided context menu.\n *\n * This may add extra items as below, but you can also configure, or remove any of the default items by\n * configuring the name of the item as `null`\n *\n * ```javascript\n * features : {\n * resourceMenu : {\n * // This object is applied to the Feature's predefined default items\n * items : {\n * switchToDog : {\n * text : 'Dog',\n * icon : 'b-fa b-fa-fw b-fa-dog',\n * onItem({record}) {\n * record.dog = true;\n * record.cat = false;\n * },\n * weight : 500 // Make this second from end\n * },\n * switchToCat : {\n * text : 'Cat',\n * icon : 'b-fa b-fa-fw b-fa-cat',\n * onItem({record}) {\n * record.dog = false;\n * record.cat = true;\n * },\n * weight : 510 // Make this sink to end\n * },\n * remove : {\n * // Change icon for the delete item\n * icon : 'b-fa b-fa-times'\n * }\n * }\n * }\n * },\n * ```\n *\n * @config {Object}\n */\n items : null,\n type : 'resource'\n };\n static get pluginConfig() {\n const config = super.pluginConfig;\n config.chain.push('populateResourceMenu');\n return config;\n }\n //endregion\n //region Events\n /**\n * This event fires on the owning scheduler before the context menu is shown for a resource.\n * Allows manipulation of the items to show in the same way as in the {@link #config-processItems}.\n *\n * Returning `false` from a listener prevents the menu from being shown.\n *\n * @event resourceMenuBeforeShow\n * @preventable\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The grid\n * @param {Core.widget.Menu} menu The menu\n * @param {Object} items Menu item configs\n * @param {Grid.column.Column} column Column\n * @param {Scheduler.model.ResourceModel} resourceRecord Record\n */\n /**\n * This event fires on the owning scheduler after the context menu is shown for a resource.\n * @event resourceMenuShow\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The grid\n * @param {Core.widget.Menu} menu The menu\n * @param {Object} items Menu item configs\n * @param {Scheduler.model.ResourceModel} record Record\n */\n /**\n * This event fires on the owning scheduler when an item is selected in the context menu.\n * @event resourceMenuItem\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The grid\n * @param {Core.widget.Menu} menu The menu\n * @param {Core.widget.MenuItem} item Selected menu item\n * @param {Scheduler.model.ResourceModel} record Record\n */\n /**\n * This event fires on the owning grid when a check item is toggled in the context menu.\n * @event resourceMenuToggleItem\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The grid\n * @param {Core.widget.Menu} menu The menu\n * @param {Core.widget.MenuItem} item Selected menu item\n * @param {Scheduler.model.ResourceModel} resourceRecord Record\n * @param {Boolean} checked Checked or not\n */\n //endregion\n //region Menu handlers\n getDataFromEvent(event) {\n const\n result = super.getDataFromEvent(...arguments),\n cellElement = result.cellElement = event.target.closest('.b-resourceheader-cell'),\n resourceId = cellElement?.dataset.resourceId;\n // Only yield data to show a menu if we are on a cell\n if (resourceId) {\n result.resourceRecord = this.client.resourceStore.getById(resourceId);\n return result;\n }\n }\n //endregion\n //region Getters/Setters\n populateResourceMenu({ items, resourceRecord }) {\n const { client } = this;\n if (!client.readOnly) {\n items.remove = {\n text : 'L{CellMenu.removeRow}',\n localeClass : this,\n icon : 'b-fw-icon b-icon-trash',\n cls : 'b-separator',\n weight : 100,\n disabled : resourceRecord.readOnly,\n onItem : () => client.resourceStore.remove(resourceRecord)\n };\n }\n }\n get showMenu() {\n return true;\n }\n //endregion\n}\nResourceMenu.featureClass = '';\nResourceMenu._$name = 'ResourceMenu'; GridFeatureManager.registerFeature(ResourceMenu, false, ['Scheduler']);\n", "import GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport ResourceTimeRangesBase from './base/ResourceTimeRangesBase.js';\nimport ResourceTimeRangeStore from '../data/ResourceTimeRangeStore.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\n/**\n * @module Scheduler/feature/ResourceTimeRanges\n */\n/**\n * Feature that draws resource time ranges, shaded areas displayed behind events. These zones are similar to events in\n * that they have a start and end date but different in that they do not take part in the event layout, and they always\n * occupy full row height.\n *\n * {@inlineexample Scheduler/feature/ResourceTimeRanges.js}\n *\n * Each time range is represented by an instances of {@link Scheduler.model.ResourceTimeRangeModel}, held in a\n * {@link Scheduler.data.ResourceTimeRangeStore}. Currently they are readonly UI-wise, but can be manipulated on\n * the data level. To style the rendered elements, use the {@link Scheduler.model.TimeSpan#field-cls} field or use the\n * {@link Scheduler.model.ResourceTimeRangeModel#field-timeRangeColor} field.\n *\n * Data can be provided either using the {@link Scheduler.view.Scheduler#config-resourceTimeRanges} config on the\n * Scheduler config object:\n *\n * ```javascript\n * new Scheduler({\n * ...\n * features : {\n * resourceTimeRanges : true\n * },\n *\n * // Data specified directly on the Scheduler instance\n * resourceTimeRanges : [\n * // Either specify startDate & endDate or startDate & duration when defining a range\n * { startDate : new Date(2019,0,1), endDate : new Date(2019,0,3), name : 'Occupied', timeRangeColor : 'red' },\n * { startDate : new Date(2019,0,3), duration : 2, durationUnit : 'd', name : 'Available' },\n * ]\n * })\n * ```\n *\n * Or the {@link Scheduler/view/Scheduler#config-resourceTimeRangeStore} config on the Scheduler config object:\n *\n * ```javascript\n * new Scheduler({\n * ...\n * features : {\n * resourceTimeRanges : true\n * },\n * resourceTimeRangeStore : new ResourceTimeRangeStore({\n * readUrl : './resourceTimeRanges/'\n * })\n * })\n * ```\n *\n * Or on the project, using the {@link Scheduler/model/mixin/ProjectModelMixin#config-resourceTimeRangesData} config.\n *\n * This feature is **disabled** by default.\n * For info on enabling it, see {@link Grid/view/mixin/GridFeatures}.\n *\n * ## Recurring ranges support\n *\n * Resource time ranges can also be recurring, as seen in the example below:\n *\n * ```js\n * const resourceTimeRangeStore = new ResourceTimeRangeStore({\n * data : [{\n * id : 1,\n * resourceId : 'r1',\n * startDate : '2019-01-01T11:00',\n * endDate : '2019-01-01T13:00',\n * name : 'Lunch',\n * // this time range will repeat every day\n * recurrenceRule : 'FREQ=DAILY'\n * }]\n * });\n *\n * ```\n *\n * ## Rendering custom HTML markup\n *\n * Sometimes it is handy to be able to output custom HTML into the range elements. This can be done using the\n * {@link Scheduler/view/Scheduler#config-resourceTimeRangeRenderer} config method.\n *\n * ```javascript\n * // You can use a custom renderer method to output the contents of the range elements. The return value should\n * // be a string or a DOMConfig object defining the markup to generate\n * new Scheduler({\n * resourceTimeRangeRenderer{ resourceTimeRangeRecord, resourceRecord, renderData }) {\n * if (resourceTimeRangeRecord.important) {\n * // Add a CSS class to the range element\n * renderData.cls.important = 1;\n *\n * return [\n * {\n * tag : 'i',\n * class : 'b-fa b-fa-warning'\n * },\n * {\n * tag : 'strong',\n * text : resourceTimeRangeRecord.name\n * }\n * ];\n * }\n * return resourceTimeRangeRecord.name;\n * }\n * })\n * ```\n *\n * @extends Scheduler/feature/base/ResourceTimeRangesBase\n * @demo Scheduler/resourcetimeranges\n * @classtype resourceTimeRanges\n * @feature\n */\nexport default class ResourceTimeRanges extends ResourceTimeRangesBase {\n //region Config\n static $name = 'ResourceTimeRanges';\n static configurable = {\n rangeCls : 'b-sch-resourcetimerange',\n /**\n * Set to `true` to allow mouse interactions with the rendered range elements. By default, the range elements\n * are not reachable with the mouse, and only serve as a static background.\n * @prp {Boolean}\n * @default\n */\n enableMouseEvents : false,\n /**\n * Specify value to use for the tabIndex attribute of resource time range elements\n * @config {Number}\n * @default\n */\n tabIndex : 0,\n entityName : 'resourceTimeRange'\n };\n static get pluginConfig() {\n const superConfig = super.pluginConfig;\n return {\n ...superConfig,\n assign : ['resolveResourceTimeRangeRecord', 'getElementFromResourceTimeRangeRecord']\n };\n }\n //endregion\n //region Init\n attachToProject(project) {\n const\n me = this,\n { client : scheduler } = me;\n super.attachToProject(project);\n if (!project.resourceTimeRangeStore) {\n project.resourceTimeRangeStore = scheduler.resourceTimeRangeStore || new ResourceTimeRangeStore({\n owner : me\n });\n const { crudManager } = scheduler;\n if (crudManager && !crudManager.resourceTimeRangeStore) {\n crudManager.resourceTimeRangeStore = project.resourceTimeRangeStore;\n }\n }\n const store = project.resourceTimeRangeStore;\n if (!me.exposedOnScheduler) {\n // ResourceZones can be set on scheduler or feature, for convenience\n if (scheduler.resourceTimeRanges) {\n store.add(scheduler.resourceTimeRanges);\n delete scheduler.resourceTimeRanges;\n }\n // expose getter/setter for resourceTimeRanges on scheduler\n Object.defineProperty(scheduler, 'resourceTimeRanges', {\n get : () => store.records,\n set : resourceTimeRanges => store.data = resourceTimeRanges\n });\n me.exposedOnScheduler = true;\n }\n // Link to projects resourceStore if not already linked to one\n if (!store.resourceStore) {\n store.resourceStore = project.resourceStore;\n }\n me.detachListeners('store');\n store.ion({\n name : 'store',\n change : me.onStoreChange,\n thisObj : me\n });\n }\n // Called by ProjectConsumer after a new store is assigned at runtime\n attachToResourceTimeRangeStore(store) {\n this.attachToProject(this.project);\n this.client.refresh();\n }\n get store() {\n return this.project.resourceTimeRangeStore;\n }\n //endregion\n //region Events\n /**\n * Triggered for mouse down ona resource time range. Only triggered if the ResourceTimeRange feature is configured\n * with `enableMouseEvents: true`.\n * @event resourceTimeRangeMouseDown\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.feature.ResourceTimeRanges} feature The ResourceTimeRange feature\n * @param {Scheduler.model.ResourceTimeRangeModel} resourceTimeRangeRecord Resource time range record\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record\n * @param {MouseEvent} domEvent Browser event\n * @on-owner\n */\n /**\n * Triggered for mouse up ona resource time range. Only triggered if the ResourceTimeRange feature is configured\n * with `enableMouseEvents: true`.\n * @event resourceTimeRangeMouseUp\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.feature.ResourceTimeRanges} feature The ResourceTimeRange feature\n * @param {Scheduler.model.ResourceTimeRangeModel} resourceTimeRangeRecord Resource time range record\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record\n * @param {MouseEvent} domEvent Browser event\n * @on-owner\n */\n /**\n * Triggered for click on a resource time range. Only triggered if the ResourceTimeRange feature is configured with\n * `enableMouseEvents: true`.\n * @event resourceTimeRangeClick\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.feature.ResourceTimeRanges} feature The ResourceTimeRange feature\n * @param {Scheduler.model.ResourceTimeRangeModel} resourceTimeRangeRecord Resource time range record\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record\n * @param {MouseEvent} domEvent Browser event\n * @on-owner\n */\n /**\n * Triggered for double-click on a resource time range. Only triggered if the ResourceTimeRange feature is configured\n * with `enableMouseEvents: true`.\n * @event resourceTimeRangeDblClick\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.feature.ResourceTimeRanges} feature The ResourceTimeRange feature\n * @param {Scheduler.model.ResourceTimeRangeModel} resourceTimeRangeRecord Resource time range record\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record\n * @param {MouseEvent} domEvent Browser event\n * @on-owner\n */\n /**\n * Triggered for right-click on a resource time range. Only triggered if the ResourceTimeRange feature is configured\n * with `enableMouseEvents: true`.\n * @event resourceTimeRangeContextMenu\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.feature.ResourceTimeRanges} feature The ResourceTimeRange feature\n * @param {Scheduler.model.ResourceTimeRangeModel} resourceTimeRangeRecord Resource time range record\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record\n * @param {MouseEvent} domEvent Browser event\n * @on-owner\n */\n /**\n * Triggered for mouse over on a resource time range. Only triggered if the ResourceTimeRange feature is configured\n * with `enableMouseEvents: true`.\n * @event resourceTimeRangeMouseOver\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.feature.ResourceTimeRanges} feature The ResourceTimeRange feature\n * @param {Scheduler.model.ResourceTimeRangeModel} resourceTimeRangeRecord Resource time range record\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record\n * @param {MouseEvent} domEvent Browser event\n * @on-owner\n */\n /**\n * Triggered for mouse out of a resource time range. Only triggered if the ResourceTimeRange feature is configured\n * with `enableMouseEvents: true`.\n * @event resourceTimeRangeMouseOut\n * @param {Scheduler.view.Scheduler} source This Scheduler\n * @param {Scheduler.feature.ResourceTimeRanges} feature The ResourceTimeRange feature\n * @param {Scheduler.model.ResourceTimeRangeModel} resourceTimeRangeRecord Resource time range record\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record\n * @param {MouseEvent} domEvent Browser event\n * @on-owner\n */\n //endregion\n /**\n * Returns a resource time range record from the passed element\n * @param {HTMLElement} rangeElement\n * @returns {Scheduler.model.ResourceTimeRangeModel}\n * @on-owner\n * @function resolveResourceTimeRangeRecord\n * @category DOM\n */\n /**\n * Returns the element for the passed resource time range record, if rendered into DOM.\n * @param {Scheduler.model.ResourceTimeRangeModel} record\n * @returns {HTMLElement}\n * @on-owner\n * @function getElementFromResourceTimeRangeRecord\n * @category DOM\n */\n // Called on render of resources events to get events to render. Add any ranges\n // (chained function from Scheduler)\n getEventsToRender(resource, events) {\n if (!this.disabled) {\n const { timeRanges } = resource.$original;\n // if we have ranges and the feature is enabled\n if (timeRanges?.length) {\n const { startDate, endDate } = this.client;\n timeRanges.forEach(timeRange => {\n // if this a recurring event let's include its visible occurrences\n if (timeRange.isRecurring) {\n events.push(...timeRange.getOccurrencesForDateRange(startDate, endDate));\n }\n else {\n events.push(timeRange);\n }\n });\n }\n }\n return events;\n }\n /**\n * An empty function by default, but provided so that you can override it. This function is called each time\n * a resource time range is rendered into the schedule. It's called with `resourceTimeRangeRecord`, `resourceRecord`,\n * and `renderData` params.\n *\n * **IMPORTANT:** You should never modify any data on the ResourceTimeRangeModel inside this method.\n *\n * By default, the DOM markup of a resource time range bar includes placeholders for 'cls' and 'style'. The cls\n * property is a {@link Core.helper.util.DomClassList} which will be added to the main element. The style property\n * is an inline style declaration for the main element.\n *\n * **IMPORTANT:** When returning content, be sure to consider how that content should be encoded to avoid XSS\n * (Cross-Site Scripting) attacks. This is especially important when including user-controlled data such as\n * the event's `name`. The function {@link Core.helper.StringHelper#function-encodeHtml-static} as well as\n * {@link Core.helper.StringHelper#function-xss-static} can be helpful in these cases.\n *\n * ```javascript\n * resourceTimeRangeRenderer({ resourceTimeRangeRecord, resourceRecord, renderData }) {\n * renderData.style = 'color:white'; // You can use inline styles too.\n *\n * // Property names with truthy values are added to the resulting elements CSS class.\n * renderData.cls.isModified = resourceTimeRangeRecord.isModified;\n *\n * // Or, you can treat it as a string, but this is less efficient, especially\n * // if your renderer wants to *remove* classes that may be there.\n * renderData.cls += ' extra-class';\n *\n * return StringHelper.xss`${DateHelper.format(resourceTimeRangeRecord.startDate, 'YYYY-MM-DD')}:\n * ${resourceTimeRangeRecord.name}`;\n * }\n * ```\n *\n * @config {Function} resourceTimeRangeRenderer\n * @param {Object} detail An object containing the information needed to render a ResourceTimeRangeModel.\n * @param {Scheduler.model.ResourceTimeRangeModel} detail.resourceTimeRangeRecord The resource time range record.\n * @param {Scheduler.model.ResourceModel} detail.resourceRecord The resource record.\n * @param {Object} detail.renderData An object containing details about the event rendering.\n * @returns {String|DomConfig|DomConfig[]} A simple string, or a DomConfig object describing the markup\n * @on-owner\n */\n shouldInclude(eventRecord) {\n return eventRecord.isResourceTimeRange && !eventRecord.isNonWorking && !eventRecord.isCalendarHighlightModel;\n }\n renderContent(eventRecord, renderData) {\n const\n { client } = this,\n { eventContent } = renderData;\n // Add label or call renderer method\n if (client.resourceTimeRangeRenderer) {\n // User has specified a renderer fn, either to return a simple string, or an object intended for the eventBodyTemplate\n const\n value = client.resourceTimeRangeRenderer({\n resourceTimeRangeRecord : eventRecord,\n resourceRecord : renderData.resourceRecord,\n renderData\n });\n // Array, assumed to contain DOM configs for eventContent children (or milestone label)\n if (Array.isArray(value)) {\n eventContent.children = value;\n }\n // Likely HTML content\n else if (StringHelper.isHtml(value)) {\n eventContent.children = null;\n eventContent.html = value;\n }\n // DOM config or plain string can be used as is\n else if (typeof value === 'string' || typeof value === 'object') {\n eventContent.children = [value];\n }\n // Other, use string\n else if (value != null) {\n eventContent.text = value;\n }\n }\n else {\n super.renderContent(...arguments);\n }\n }\n doDestroy() {\n if (this.store?.owner === this) {\n this.store.destroy();\n }\n super.doDestroy();\n }\n}\n// No feature based styling needed, do not add a cls to Scheduler\nResourceTimeRanges.featureClass = '';\nResourceTimeRanges._$name = 'ResourceTimeRanges'; GridFeatureManager.registerFeature(ResourceTimeRanges, false, 'Scheduler');\n", "import GridRowReorder from '../../Grid/feature/RowReorder.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport TransactionalFeature from './mixin/TransactionalFeature.js';\n/**\n * @module Scheduler/feature/RowReorder\n */\n/**\n * This feature implements support for project transactions and used by default in Gantt. For general RowReorder feature\n * documentation see {@link Grid.feature.RowReorder}.\n *\n * This feature is **disabled** by default in Scheduler and **enabled** by default in Gantt.\n * For info on enabling it, see {@link Grid/view/mixin/GridFeatures}.\n *\n * @extends Grid/feature/RowReorder\n * @classtype rowReorder\n * @feature\n *\n * @typings Grid.feature.RowReorder -> Grid.feature.GridRowReorder\n */\nexport default class RowReorder extends TransactionalFeature(GridRowReorder) {\n static $name = 'RowReorder';\n onDragStart(...args) {\n super.onDragStart(...args);\n if (this.client.transactionalFeaturesEnabled) {\n return this.startFeatureTransaction();\n }\n }\n onDrop(...args) {\n // Actual reorder will happen in a wrapper function to `tryPropagateWithChanges`, meaning reorder will be a\n // transaction. This transaction will not even have any changes in it. So we can reject it.\n this.rejectFeatureTransaction();\n return super.onDrop(...args);\n }\n onAbort(...args) {\n this.rejectFeatureTransaction();\n return super.onAbort(...args);\n }\n}\nRowReorder._$name = 'RowReorder'; GridFeatureManager.registerFeature(RowReorder, false, 'Scheduler');\nGridFeatureManager.registerFeature(RowReorder, true, 'Gantt');\n", "import GridRowResize from '../../Grid/feature/RowResize.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\n/**\n * @module Scheduler/feature/RowResize\n */\n/**\n * Enables user to change row height by dragging the bottom row border. After a resize operation, the {@link Grid/data/GridRowModel#field-rowHeight}\n * field of the record is updated (when {@link #config-applyToAllRows} is `false`) and the {@link Scheduler/model/ResourceModel#field-eventLayout} of the dragged resource\n * row will be switched to `pack` as a result (only applies when `stack` is used by default).\n * `barMargin` and `resourceMargin` will also be shrunk as you reduce the height of a row.\n *\n * Try hovering the bottom row border in the scheduler below and use drag-drop to change the row height.\n *\n * {@inlineexample Scheduler/feature/RowResize.js}\n *\n * This feature is **disabled** by default.\n * For info on enabling it, see {@link Grid/view/mixin/GridFeatures}.\n *\n * @extends Grid/feature/RowResize\n * @classtype rowResize\n * @feature\n * @demo Scheduler/rowheight\n * @typings Grid.feature.RowResize -> Grid.feature.GridRowResize\n */\nexport default class RowResize extends GridRowResize {\n static $name = 'RowResize';\n onResizeStart({ context }) {\n super.onResizeStart(...arguments);\n const\n { client } = this,\n { record } = context;\n if (client.isTimelineBase) {\n client.suspendAnimations();\n client.crudManager?.suspendAutoSync?.();\n if (client.features.eventDragCreate) {\n this._oldDragCreateDisabled = client.features.eventDragCreate.disabled;\n client.features.eventDragCreate.disabled = true;\n }\n }\n if (client.isSchedulerBase) {\n if (client.getEventLayout?.(record).type === 'stack') {\n context.oldEventLayout = record.eventLayout;\n record.eventLayout = 'pack';\n record.rowHeight = context.elementHeight;\n }\n context.originalBarMargin = client.getBarMargin(record);\n context.originalResourceMarginObject = client.getResourceMarginObject(record);\n context.originalRecordResourceMargin = record.resourceMargin;\n }\n }\n onResizing({ context }) {\n const { record, newHeight, elementHeight, originalBarMargin, originalResourceMarginObject } = context;\n super.onResizing(...arguments);\n if (!this.applyToAllRows && !this.client.fixedRowHeight && context.valid) {\n record.beginBatch();\n record.rowHeight = newHeight;\n // Reduce barMargin + resourceMargin when shrinking\n if (newHeight < elementHeight) {\n const percentage = newHeight / elementHeight;\n // Shrink barMargin + resourceMargin as well\n record.barMargin = originalBarMargin * percentage;\n if (originalResourceMarginObject.start === originalResourceMarginObject.end) {\n record.resourceMargin = originalResourceMarginObject.start * percentage;\n }\n }\n record.endBatch();\n }\n }\n onCancel({ context }) {\n context.record.eventLayout = context.oldEventLayout;\n context.record.resourceMargin = context.originalRecordResourceMargin;\n context.record.barMargin = context.originalBarMargin;\n super.onCancel(...arguments);\n }\n cleanup() {\n const { client } = this;\n if (client.isTimelineBase) {\n client.resumeAnimations();\n client.crudManager?.resumeAutoSync?.();\n if (client.features.eventDragCreate) {\n client.features.eventDragCreate.disabled = this._oldDragCreateDisabled;\n }\n }\n super.cleanup();\n }\n}\nRowResize._$name = 'RowResize'; GridFeatureManager.registerFeature(RowResize, false);\n", "import TimeSpanMenuBase from '../../Scheduler/feature/base/TimeSpanMenuBase.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\n/**\n * @module Scheduler/feature/ScheduleMenu\n */\n/**\n * Displays a context menu for empty parts of the schedule. Items are populated in the first place\n * by configurations of this Feature, then by other features and/or application code.\n *\n * ### Default scheduler zone menu items\n *\n * The Scheduler menu feature provides only one item:\n *\n * | Reference | Text | Weight | Feature | Description |\n * |------------------------|--------------|--------|------------------------------------------|-----------------------------------------------------------------------|\n * | `addEvent` | Add event | 100 | *This feature* | Add new event at the target time and resource. Hidden when read-only |\n * | `pasteEvent` | Paste event | 110 | {@link Scheduler/feature/EventCopyPaste} | Paste event at the target time and resource. Hidden when is read-only |\n * | `splitSchedule` | Split | 200 | {@link Scheduler/feature/Split} | Shows the \"Split schedule\" sub-menu |\n * | \\> `splitHorizontally` | Horizontally | 100 | {@link Scheduler/feature/Split} | Split horizontally |\n * | \\> `splitVertically ` | Vertically | 200 | {@link Scheduler/feature/Split} | Split vertically |\n * | \\> `splitBoth` | Both | 300 | {@link Scheduler/feature/Split} | Split both ways |\n * | `unsplitSchedule` | Split | 210 | {@link Scheduler/feature/Split} | Unsplit a previously split schedule |\n *\n *
\n *
>
first level of submenu
\n *
\n *\n * ### Customizing the menu items\n *\n * The menu items in the Scheduler menu can be customized, existing items can be changed or removed,\n * and new items can be added. This is handled using the `items` config of the feature.\n *\n * Add extra item:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * scheduleMenu : {\n * items : {\n * extraItem : {\n * text : 'Extra',\n * icon : 'b-fa b-fa-fw b-fa-flag',\n * onItem({date, resourceRecord, items}) {\n * // Custom date based action\n * }\n * }\n * }\n * }\n * }\n * });\n * ```\n *\n * Remove existing item:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * scheduleMenu : {\n * items : {\n * addEvent : false\n * }\n * }\n * }\n * });\n * ```\n *\n * Customize existing item:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * scheduleMenu : {\n * items : {\n * addEvent : {\n * text : 'Create new booking'\n * }\n * }\n * }\n * }\n * });\n * ```\n *\n * Manipulate existing items:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * scheduleMenu : {\n * // Process items before menu is shown\n * processItems({date, resourceRecord, items}) {\n * // Add an extra item for ancient times\n * if (date < new Date(2018, 11, 17)) {\n * items.modernize = {\n * text : 'Modernize',\n * ontItem({date}) {\n * // Custom date based action\n * }\n * };\n * }\n *\n * // Do not show menu for Sundays\n * if (date.getDay() === 0) {\n * return false;\n * }\n * }\n * }\n * }\n * });\n * ```\n *\n *
The `processItems` implementation my be an `async` function which `awaits` a result to\n * mutate the `items` object.
\n *\n * ## Video guides\n * {@frameworktabs}\n * {@react}\n * [@youtube](https://www.youtube.com/embed/HAq12QUBMx8)\n * {@endreact}\n * {@vue}\n * [@youtube](https://www.youtube.com/embed/nXMaClkkKdQ)\n * {@endvue}\n * {@angular}\n * [@youtube](https://www.youtube.com/embed/0seuhWrIeXc)\n * {@endangular}\n * {@endframeworktabs}\n *\n * Full information of the menu customization can be found in the\n * [\"Customizing the Event menu, the Schedule menu, and the TimeAxisHeader menu\"](#Scheduler/guides/customization/contextmenu.md)\n * guide.\n *\n * This feature is **enabled** by default\n *\n * @demo Scheduler/basic\n * @extends Scheduler/feature/base/TimeSpanMenuBase\n * @classtype scheduleMenu\n * @feature\n */\nexport default class ScheduleMenu extends TimeSpanMenuBase {\n //region Config\n static get $name() {\n return 'ScheduleMenu';\n }\n static get defaultConfig() {\n return {\n type : 'schedule',\n /**\n * This is a preconfigured set of items used to create the default context menu.\n *\n * The `items` provided by this feature are listed below. These are the predefined property names which you\n * may configure:\n *\n * - `addEvent` Add an event for at the resource and time indicated by the `contextmenu` event.\n *\n * To remove existing items, set corresponding keys `null`:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * scheduleMenu : {\n * items : {\n * addEvent : null\n * }\n * }\n * }\n * });\n * ```\n *\n * @config {Object} items\n */\n items : null,\n /**\n * A function called before displaying the menu that allows manipulations of its items.\n * Returning `false` from this function prevents the menu being shown.\n *\n * ```javascript\n * features : {\n * scheduleMenu : {\n * processItems({ items, date, resourceRecord }) {\n * // Add or hide existing items here as needed\n * items.myAction = {\n * text : 'Cool action',\n * icon : 'b-fa b-fa-cat',\n * onItem : () => console.log(`Clicked on ${resourceRecord.name} at ${date}`),\n * weight : 1000 // Move to end\n * };\n *\n * if (!resourceRecord.allowAdd) {\n * items.addEvent.hidden = true;\n * }\n * }\n * }\n * },\n * ```\n *\n * @config {Function}\n * @param {Object} context An object with information about the menu being shown\n * @param {Scheduler.feature.ScheduleMenu} context.feature A reference to this feature.\n * @param {Event} context.domEvent The initiating event.\n * @param {Event} context.event DEPRECATED: The initiating event.\n * @param {Number[]} context.point The client `X` and `Y` position of the initiating event.\n * @param {HTMLElement} context.targetElement The target to which the menu is being applied.\n * @param {Scheduler.model.ResourceModel} context.resourceRecord The record representing the current resource\n * @param {Date} context.date The clicked date\n * @param {Object} context.items An object containing the\n * {@link Core.widget.MenuItem menu item} configs keyed by their id.\n * @returns {Boolean|null} Returning `false` from this function prevents the menu being shown\n * @preventable\n */\n processItems : null\n };\n }\n static get pluginConfig() {\n const config = super.pluginConfig;\n config.chain.push('populateScheduleMenu');\n return config;\n }\n //endregion\n //region Events\n /**\n * This event fires on the owning Scheduler or Gantt widget before the context menu is shown for the schedule.\n * Allows manipulation of the items to show in the same way as in `processItems`. Returning `false` from a listener\n * prevents the menu from being shown.\n * @event scheduleMenuBeforeShow\n * @on-owner\n * @preventable\n * @param {Scheduler.view.Scheduler} source\n * @param {Object} items Menu item configs\n * @param {Scheduler.model.EventModel} eventRecord Event record for which the menu was triggered\n * @param {Scheduler.model.ResourceModel} resourceRecord Resource record\n * @param {Date} date Clicked date, rounded according to viewPreset's settings\n * @param {Scheduler.model.AssignmentModel} assignmentRecord Assignment record, if assignments are used\n * @param {HTMLElement} eventElement\n */\n /**\n * This event fires on the owning Scheduler or Gantt widget when an item is selected in the context menu.\n * @event scheduleMenuItem\n * @on-owner\n * @param {Scheduler.view.Scheduler} source\n * @param {Core.widget.MenuItem} item\n * @param {Scheduler.model.ResourceModel} resourceRecord\n * @param {Date} date Clicked date, rounded according to viewPreset's settings\n * @param {HTMLElement} element\n */\n /**\n * This event fires on the owning Scheduler or Gantt widget after showing the context menu for the schedule.\n * @event scheduleMenuShow\n * @on-owner\n * @param {Scheduler.view.Scheduler} source\n * @param {Object} items Menu item configs\n * @param {Core.widget.Menu} menu The menu\n * @param {Scheduler.model.ResourceModel} resourceRecord\n * @param {Date} date Clicked date, rounded according to viewPreset's settings\n * @param {HTMLElement} targetElement\n */\n //endregion\n shouldShowMenu(eventParams) {\n const\n { client } = this,\n {\n targetElement,\n resourceRecord\n } = eventParams,\n isTimeAxisColumn = client.timeAxisSubGridElement.contains(targetElement);\n return !targetElement.closest(client.eventSelector) && isTimeAxisColumn && !(resourceRecord && resourceRecord.isSpecialRow);\n }\n getDataFromEvent(event) {\n // Process event if it wasn't yet processed\n if (DomHelper.isDOMEvent(event)) {\n const\n { client } = this,\n cellData = client.getCellDataFromEvent?.(event),\n date = client.getDateFromDomEvent?.(event, 'floor'),\n // For vertical mode the resource must be resolved from the event\n resourceRecord = client.resolveResourceRecord(event) || client.isVertical && client.resourceStore.last;\n return ObjectHelper.assign(super.getDataFromEvent(event), cellData, { date, resourceRecord });\n }\n return event;\n }\n populateScheduleMenu({ items, resourceRecord, date }) {\n const { client } = this;\n // Menu can work for ResourceHistogram which doesn't have event store\n if (!client.readOnly && client.eventStore) {\n items.addEvent = {\n text : 'L{SchedulerBase.Add event}',\n icon : 'b-icon b-icon-add',\n disabled : this.disableAddEvent,\n weight : 100,\n onItem() {\n client.createEvent(date, resourceRecord, client.getRowFor(resourceRecord));\n }\n };\n }\n }\n get disableAddEvent() {\n const { resourceRecord, date } = this.menuContext;\n return !resourceRecord || resourceRecord.readOnly || !resourceRecord.isWorkingTime(date);\n }\n}\nScheduleMenu.featureClass = '';\nScheduleMenu._$name = 'ScheduleMenu'; GridFeatureManager.registerFeature(ScheduleMenu, true, 'Scheduler');\n", "import InstancePlugin from '../../Core/mixin/InstancePlugin.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport Tooltip from '../../Core/widget/Tooltip.js';\nimport ClockTemplate from '../tooltip/ClockTemplate.js';\nimport EventHelper from '../../Core/helper/EventHelper.js';\n/**\n * @module Scheduler/feature/ScheduleTooltip\n */\n/**\n * Feature that displays a tooltip containing the time at the mouse position when hovering empty parts of the schedule.\n * To hide the schedule tooltip, just disable this feature:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * scheduleTooltip : false\n * }\n * });\n * ```\n *\n * You can also output a message along with the default time indicator (to indicate resource availability etc)\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * scheduleTooltip : {\n * getText(date, event, resource) {\n * return 'Hovering ' + resource.name;\n * }\n * }\n * }\n * });\n * ```\n *\n * To take full control over the markup shown in the tooltip you can override the {@link #function-generateTipContent} method:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * scheduleTooltip : {\n * generateTipContent({ date, event, resourceRecord }) {\n * return `\n *
\n *
Date
${date}
\n *
Resource
${resourceRecord.name}
\n *
\n * `;\n * }\n * }\n * }\n * });\n * ```\n *\n * Configuration properties from the feature are passed down into the resulting {@link Core.widget.Tooltip} instance.\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * scheduleTooltip : {\n * // Don't show the tip until the mouse has been over the schedule for three seconds\n * hoverDelay : 3000\n * }\n * }\n * });\n * ```\n *\n * {@inlineexample Scheduler/feature/ScheduleTooltip.js}\n *\n * This feature is **enabled** by default in `Scheduler` and **disabled** in `ResourceUtilization`.\n * For info on enabling it, see {@link Grid/view/mixin/GridFeatures}.\n *\n * @demo Scheduler/basic\n *\n * @extends Core/mixin/InstancePlugin\n * @classtype scheduleTooltip\n * @feature\n */\nexport default class ScheduleTooltip extends InstancePlugin {\n //region Config\n static get $name() {\n return 'ScheduleTooltip';\n }\n static get configurable() {\n return {\n messageTemplate : data => `
${data.message}
`,\n /**\n * Set to `true` to hide this tooltip when hovering non-working time. Defaults to `false` for Scheduler,\n * `true` for SchedulerPro\n * @config {Boolean}\n */\n hideForNonWorkingTime : null\n };\n }\n // Plugin configuration. This plugin chains some of the functions in Grid.\n static get pluginConfig() {\n return {\n chain : ['onInternalPaint']\n };\n }\n //endregion\n //region Init\n /**\n * Set up drag and drop and hover tooltip.\n * @private\n */\n onInternalPaint({ firstPaint }) {\n if (!firstPaint) {\n return;\n }\n const\n me = this,\n { client } = me;\n if (client.isSchedulerPro && me.hideForNonWorkingTime === undefined) {\n me.hideForNonWorkingTime = true;\n }\n let reshowListener;\n const tip = me.hoverTip = new Tooltip({\n id : `${client.id}-schedule-tip`,\n cls : 'b-sch-scheduletip',\n allowOver : true,\n hoverDelay : 0,\n hideDelay : 100,\n showOnHover : true,\n forElement : client.timeAxisSubGridElement,\n anchorToTarget : false,\n trackMouse : true,\n updateContentOnMouseMove : true,\n // disable text content and monitor resize for tooltip, otherwise it doesn't\n // get sized properly on first appearance\n monitorResize : false,\n textContent : false,\n forSelector : '.b-schedulerbase:not(.b-dragging-event,.b-dragcreating,.b-creating-dependency) .b-grid-body-container:not(.b-scrolling) .b-timeline-subgrid:not(.b-scrolling) > :not(.b-sch-foreground-canvas):not(.b-group-footer):not(.b-group-row) *',\n // Do not constrain at all, want it to be able to go outside of the viewport to not get in the way\n getHtml : me.getHoverTipHtml.bind(me),\n onDocumentMouseDown(event) {\n // Click on the scheduler hides until the very next\n // non-button-pressed mouse move!\n if (tip.forElement.contains(event.event.target)) {\n reshowListener = EventHelper.on({\n thisObj : me,\n element : client.timeAxisSubGridElement,\n mousemove : e => tip.internalOnPointerOver(e),\n capture : true\n });\n }\n const hideAnimation = tip.hideAnimation;\n tip.hideAnimation = false;\n tip.constructor.prototype.onDocumentMouseDown.call(tip, event);\n tip.hideAnimation = hideAnimation;\n },\n // on Core/mixin/Events constructor, me.config.listeners is deleted and attributed its value to me.configuredListeners\n // to then on processConfiguredListeners it set me.listeners to our TooltipBase\n // but since we need our initial config.listeners to set to our internal tooltip, we leave processConfiguredListeners empty\n // to avoid lost our listeners to apply for our internal tooltip here and force our feature has all Tooltip events firing\n ...me.config,\n internalListeners : me.configuredListeners\n });\n // We have to add our own listener after instantiation because it may conflict with a configured listener\n tip.ion({\n pointerover({ event }) {\n const buttonsPressed = 'buttons' in event ? event.buttons > 0\n : event.which > 0; // fallback for Safari which doesn't support 'buttons'\n // This is the non-button-pressed mousemove\n // after the document mousedown\n if (!buttonsPressed && reshowListener) {\n reshowListener();\n }\n // Never any tooltip while interaction is ongoing and a mouse button is pressed\n return !me.disabled && !buttonsPressed;\n },\n innerhtmlupdate({ source }) {\n me.clockTemplate.updateDateIndicator(source.element, me.lastTime);\n }\n });\n // Update tooltip after zooming\n client.ion({\n timeAxisViewModelUpdate : 'updateTip',\n thisObj : me\n });\n me.clockTemplate = new ClockTemplate({\n scheduler : client\n });\n }\n // leave configuredListeners alone until render time at which they are used on the tooltip\n processConfiguredListeners() {}\n updateTip() {\n if (this.hoverTip.isVisible) {\n this.hoverTip.updateContent();\n }\n }\n doDestroy() {\n this.destroyProperties('clockTemplate', 'hoverTip');\n super.doDestroy();\n }\n //endregion\n //region Contents\n /**\n * @deprecated Use {@link #function-generateTipContent} instead.\n * Gets html to display in hover tooltip (tooltip displayed on empty parts of scheduler)\n * @private\n */\n getHoverTipHtml({ tip, event }) {\n const\n me = this,\n scheduler = me.client,\n date = event && scheduler.getDateFromDomEvent(event, 'floor', true);\n let html = me.lastHtml;\n // event.target might be null in the case of being hosted in a web component https://github.com/bryntum/bryntum-suite/pull/4488\n if (date && event.target) {\n const resourceRecord = scheduler.resolveResourceRecord(event);\n // resourceRecord might be null if user hover over the tooltip, but we shouldn't hide the tooltip in this case\n if ((resourceRecord && (date - me.lastTime !== 0 || resourceRecord.id !== me.lastResourceId))) {\n if (me.hideForNonWorkingTime) {\n const isWorkingTime = resourceRecord.isWorkingTime(date);\n tip.element.classList.toggle('b-nonworking-time', !isWorkingTime);\n }\n me.lastResourceId = resourceRecord.id;\n html = me.lastHtml = me.generateTipContent({ date, event, resourceRecord });\n }\n }\n else {\n tip.hide();\n me.lastTime = null;\n me.lastResourceId = null;\n }\n return html;\n }\n /**\n * Called as mouse pointer is moved over a new resource or time block. You can override this to show\n * custom HTML in the tooltip.\n * @param {Object} context\n * @param {Date} context.date The date of the hovered point\n * @param {Event} context.event The DOM event that triggered this tooltip to show\n * @param {Scheduler.model.ResourceModel} context.resourceRecord The resource record\n * @returns {String} The HTML contents to show in the tooltip (an empty return value will hide the tooltip)\n */\n generateTipContent({ date, event, resourceRecord }) {\n const\n me = this,\n clockHtml = me.clockTemplate.generateContent({\n date,\n text : me.client.getFormattedDate(date)\n }),\n messageHtml = me.messageTemplate({\n message : me.getText(date, event, resourceRecord) || ''\n });\n me.lastTime = date;\n return clockHtml + messageHtml;\n }\n /**\n * Override this to render custom text to default hover tip\n * @param {Date} date\n * @param {Event} event Browser event\n * @param {Scheduler.model.ResourceModel} resourceRecord The resource record\n * @returns {String}\n */\n getText(date, event, resourceRecord) {}\n //endregion\n}\nScheduleTooltip.featureClass = 'b-scheduletip';\nScheduleTooltip._$name = 'ScheduleTooltip'; GridFeatureManager.registerFeature(ScheduleTooltip, true, 'Scheduler');\nGridFeatureManager.registerFeature(ScheduleTooltip, false, 'ResourceUtilization');\n", "import GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport InstancePlugin from '../../Core/mixin/InstancePlugin.js';\nimport Editor from '../../Core/widget/Editor.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport TaskEditStm from './mixin/TaskEditStm.js';\n/**\n * @module Scheduler/feature/SimpleEventEdit\n */\n/**\n * Feature that displays a text field to edit the event name. You can control the flow of this by listening to the events relayed by this class from the underlying {@link Core.widget.Editor}.\n * To use this feature, you also need to disable the built-in default editing feature:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * eventEdit : false,\n * simpleEventEdit : true\n * }\n * });\n * ```\n *\n * This feature is **disabled** by default.\n * For info on enabling it, see {@link Grid.view.mixin.GridFeatures}.\n *\n * {@inlineexample Scheduler/feature/SimpleEventEdit.js}\n *\n * @demo Scheduler/simpleeditor\n *\n * @extends Core/mixin/InstancePlugin\n * @classtype simpleEventEdit\n * @feature\n */\nexport default class SimpleEventEdit extends InstancePlugin.mixin(TaskEditStm) {\n // region Events\n /**\n * Fired before the editor is shown to start an edit operation. Returning `false` from a handler vetoes the edit operation.\n * @event beforeStart\n * @param {Object} value The value to be edited.\n * @param {Core.widget.Editor} source The Editor that triggered the event.\n * @preventable\n */\n /**\n * Fired when an edit operation has begun.\n * @event start\n * @param {Object} value The starting value of the field.\n * @param {Core.widget.Editor} source The Editor that triggered the event.\n */\n /**\n * Fired when an edit completion has been requested, either by `ENTER`, or focus loss (if configured to complete on blur).\n * The completion may be vetoed, in which case, focus is moved back into the editor.\n * @event beforeComplete\n * @param {Object} oldValue The original value.\n * @param {Object} value The new value.\n * @param {Core.widget.Editor} source The Editor that triggered the event.\n * @preventable\n */\n /**\n * Edit has been completed, and any associated record or element has been updated.\n * @event complete\n * @param {Object} oldValue The original value.\n * @param {Object} value The new value.\n * @param {Core.widget.Editor} source The Editor that triggered the event.\n */\n /**\n * Fired when cancellation has been requested, either by `ESC`, or focus loss (if configured to cancel on blur).\n * The cancellation may be vetoed, in which case, focus is moved back into the editor.\n * @event beforeCancel\n * @param {Object} oldValue The original value.\n * @param {Object} value The new value.\n * @param {Core.widget.Editor} source The Editor that triggered the event.\n * @preventable\n */\n /**\n * Edit has been canceled without updating the associated record or element.\n * @event cancel\n * @param {Object} oldValue The original value.\n * @param {Object} value The value of the field.\n * @param {Core.widget.Editor} source The Editor that triggered the event.\n */\n // endregion\n //region Config\n static get $name() {\n return 'SimpleEventEdit';\n }\n static get defaultConfig() {\n return {\n /**\n * The event that shall trigger showing the editor. Defaults to `eventdblclick`, set to `''` or null to\n * disable editing of existing events.\n * @config {String}\n * @default\n * @category Editor\n */\n triggerEvent : 'eventdblclick',\n /**\n * The current {@link Scheduler.model.EventModel} record, which is being edited by the event editor.\n * @property {Scheduler.model.EventModel}\n * @readonly\n */\n eventRecord : null,\n /**\n * The {@link Scheduler.model.EventModel} field to edit\n * @config {String}\n * @category Editor\n */\n field : 'name',\n /**\n * The editor configuration, where you can control which widget to show\n * @config {EditorConfig}\n * @category Editor\n */\n editorConfig : null\n };\n }\n static get pluginConfig() {\n return {\n chain : ['onEventEnterKey', 'editEvent']\n };\n }\n //endregion\n //region Editing\n construct(scheduler, config) {\n const me = this;\n me.scheduler = scheduler;\n scheduler.eventEdit = me;\n super.construct(scheduler, config);\n me.clientListenersDetacher = scheduler.ion({\n [me.triggerEvent] : ({ eventRecord, eventElement }) => me.editEvent(eventRecord, eventRecord.resource, eventElement),\n dragcreateend : me.onDragCreateEnd,\n thisObj : me\n });\n }\n doDestroy() {\n this.clientListenersDetacher();\n this.editor?.destroy();\n super.doDestroy();\n }\n get eventStore() {\n return this.scheduler.eventStore;\n }\n get project() {\n return this.client.project;\n }\n // region Editor\n /**\n * Opens an Editor for the passed event. This function is exposed on Scheduler and can be called as\n * `scheduler.editEvent()`.\n * @param {Scheduler.model.EventModel} eventRecord The Event to edit\n * @param {Scheduler.model.ResourceModel} [resourceRecord] The Resource record for the event.\n * @on-owner\n * @async\n */\n async editEvent(eventRecord, resourceRecord, element, stmCapture) {\n const\n me = this,\n { scheduler } = me,\n { eventEdit } = me.client.features;\n // If event edit feature also exists, we use simple edit for new events and eventEdit it for already created events\n if (scheduler.readOnly || me.disabled || eventRecord.readOnly || (eventEdit && !eventEdit.disabled && !eventRecord.isCreating)) {\n return;\n }\n let { editor } = me;\n // Want to put editor in inner element (b-sch-event) to get correct font size, but when drag creating the proxy\n // has no inner element\n element = DomHelper.down(element, scheduler.eventInnerSelector) || element;\n eventRecord = eventRecord.isAssignment ? eventRecord.event : eventRecord;\n me.resource = resourceRecord;\n me.event = eventRecord;\n me.element = element;\n scheduler.element.classList.add('b-eventeditor-editing');\n if (editor) {\n // Positioned editors remove themselves so that their appendTo element\n // may have its content updated unobstructed.\n editor.render(scheduler.timeAxisSubGridElement);\n }\n else {\n // Editor is contained in, and owned by the TimeAxisSubGrid to avoid focus flipping out and in.\n // The editor is an owned descendant of the SubGrid.\n me.editor = editor = Editor.new({\n owner : scheduler.timeAxisSubGrid,\n appendTo : scheduler.timeAxisSubGridElement,\n scrollAction : 'realign',\n maxHeight : 40,\n align : {\n align : scheduler.isHorizontal ? 'c-c' : 't-t'\n },\n cls : 'b-simpleeventeditor',\n internalListeners : {\n complete : 'onEditorComplete',\n cancel : 'onEditorCancel',\n thisObj : me\n },\n // Keys must not propagate into the scheduler\n onInternalKeyDown : keyEvent => keyEvent.stopPropagation()\n }, me.editorConfig);\n me.relayEvents(me.editor, ['beforestart', 'start', 'beforecomplete', 'complete', 'beforecancel', 'cancel']);\n }\n if (stmCapture) {\n me.stmInitiallyAutoRecord = stmCapture.stmInitiallyAutoRecord;\n me.stmInitiallyDisabled = stmCapture.stmInitiallyDisabled;\n me.hasStmCapture = true;\n // indicate that editor has been opened, and is now managing the \"stm capture\"\n stmCapture.transferred = true;\n }\n // it is set to `false` by calendar, to ignore the STM mechanism\n else if (stmCapture !== false && !me.hasStmCapture) {\n me.captureStm(true);\n }\n // Drag-created records get a \"New event\" name for cosmetic purposes.\n // Remove just before editing.\n if (eventRecord.isCreating) {\n eventRecord.name = '';\n }\n await editor.startEdit({\n target : element,\n record : eventRecord,\n field : me.field\n });\n // If text label is not visible, scroll it into view\n if (scheduler.isVertical && eventRecord.startDate < scheduler.visibleDateRange.startDate) {\n editor.element.scrollIntoView();\n }\n // No key navigation during editing\n scheduler.navigator.disabled = true;\n }\n onEditorComplete() {\n // Promote event to being permanent so that it is syncable to the server as a new event\n this.event.isCreating = false;\n this.reset();\n this.freeStm(true);\n }\n onEditorCancel() {\n // Remove the transient event\n if (this.event.isCreating) {\n this.event.remove();\n }\n this.reset();\n this.freeStm(false);\n }\n reset() {\n this.scheduler.element.classList.remove('b-eventeditor-editing');\n // Restore key navigation after editing\n this.scheduler.navigator.disabled = false;\n this.event = null;\n this.resource = null;\n }\n //endregion\n // chained from EventNavigation\n onEventEnterKey({ assignmentRecord, eventRecord }) {\n const\n element = assignmentRecord ? this.scheduler.getElementFromAssignmentRecord(assignmentRecord) : this.scheduler.getElementFromEventRecord(eventRecord),\n resourceRecord = (assignmentRecord || eventRecord).resource;\n this.editEvent(eventRecord, resourceRecord, element);\n }\n //endregion\n onDragCreateEnd({ eventRecord, resourceRecord, eventElement, stmCapture }) {\n this.element = eventElement;\n this.editEvent(eventRecord, resourceRecord, eventElement, stmCapture);\n }\n}\nSimpleEventEdit._$name = 'SimpleEventEdit'; GridFeatureManager.registerFeature(SimpleEventEdit, false, 'Scheduler');\n", "import GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport GridSplit from '../../Grid/feature/Split.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport Rectangle from '../../Core/helper/util/Rectangle.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\n/**\n * @module Scheduler/feature/Split\n */\nconst\n startScrollOptions = Object.freeze({\n animate : false,\n block : 'start'\n }),\n endScrollOptions = Object.freeze({\n animate : false,\n block : 'end'\n });\n/**\n * This feature allows splitting the Scheduler into multiple views, either by using the cell context menu, or\n * programmatically by calling {@link #function-split split()}.\n *\n * {@inlineexample Scheduler/feature/Split.js}\n *\n * See {@link Grid/feature/Split} for more details.\n *\n * ## Scheduler specifics\n *\n * - Scheduler allows splitting by dates, either programmatically or by using the context menu.\n * - Scheduler prevents splitting in the grid part using the context menu.\n * - The `eventDrag` feature will automatically be configured to allow dragging between the clones (by setting\n * `constrainDragToTimeline` to `false`).\n * - Splitting is not supported in vertical mode.\n *\n * {@note}\n * Note that although Gantt is related to Scheduler, splitting is not supported in Gantt.\n * {/@note}\n *\n * This feature is **disabled** by default.\n * For info on enabling it, see {@link Grid/view/mixin/GridFeatures}.\n *\n * @classtype split\n * @feature\n * @extends Grid/feature/Split\n *\n * @typings Grid.feature.Split -> Grid.feature.GridSplit\n */\nexport default class Split extends GridSplit {\n static $name = 'Split';\n static configurable = {\n /**\n * Properties whose changes should be relayed to sub-views at runtime.\n *\n * Supply an object with property names as keys, and a truthy value to relay the change, or a falsy value to not\n * relay it. The object will be merged with the default values.\n *\n * In addition to the properties relayed by Grid, Scheduler also relays these:\n * * {@link Scheduler/view/Scheduler#property-barMargin}\n * * {@link Scheduler/view/Scheduler#property-eventColor}\n * * {@link Scheduler/view/Scheduler#property-eventStyle}\n * * {@link Scheduler/view/Scheduler#property-eventLayout}\n * * {@link Scheduler/view/Scheduler#property-fillTicks}\n * * {@link Scheduler/view/Scheduler#property-resourceMargin}\n * * {@link Scheduler/view/Scheduler#property-snap}\n * * {@link Scheduler/view/Scheduler#property-tickSize}\n *\n * Example of supplying a custom set of properties to relay:\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * split : {\n * relayProperties : {\n * barMargin : false, // Do not relay barMargin changes\n * myConfig : true // Relay changes to the myConfig property\n * }\n * }\n * }\n * }\n * ```\n * @config {Object}\n */\n relayProperties : {\n value : {\n barMargin : 1,\n eventColor : 1,\n eventStyle : 1,\n eventLayout : 1,\n fillTicks : 1,\n resourceMargin : 1,\n snap : 1,\n tickSize : 1\n },\n $config : {\n merge : 'merge'\n }\n }\n };\n static pluginConfig = {\n chain : ['populateCellMenu', 'populateScheduleMenu', 'afterConfigChange', 'afterAddListener', 'afterRemoveListener'],\n assign : ['split', 'unsplit', 'subViews', 'syncSplits']\n };\n getClientConfig(appendTo, order, options, config) {\n const\n { client } = this,\n clientConfig = super.getClientConfig(appendTo, order, options, config);\n // Grid demo in Schedulers docs\n if (!client.isSchedulerBase && !client.isSchedulerProBase && !client.isGanttBase) {\n return clientConfig;\n }\n // Use project instead of store / inline data\n delete clientConfig.store;\n delete clientConfig.events;\n delete clientConfig.resources;\n delete clientConfig.assignments;\n delete clientConfig.dependencies;\n delete clientConfig.resourceTimeRanges;\n delete clientConfig.timeRanges;\n clientConfig.project = client.project;\n clientConfig.assignmentStore = clientConfig.project.assignmentStore;\n clientConfig.crudManager = client.crudManager;\n clientConfig.viewPreset = client.viewPreset;\n clientConfig.startDate = client.startDate;\n clientConfig.endDate = client.endDate;\n clientConfig.selectedCollection = client.selectedCollection;\n clientConfig.useInitialAnimation = false;\n // Allow dragging between the clones, unless drag is explicitly turned off\n if (clientConfig.features?.eventDrag !== false) {\n ObjectHelper.setPath(clientConfig, 'features.eventDrag.constrainDragToTimeline', false);\n client.features.eventDrag.constrainDragToTimeline = false;\n }\n return clientConfig;\n }\n unsplitCleanup(options) {\n // Force time axis to get correct width\n this.client.timeAxisSubGrid.onElementResize();\n }\n /**\n * Fired when splitting the Scheduler.\n * @event split\n * @param {Scheduler.view.SchedulerBase[]} subViews The sub views created by the split\n * @param {Object} options The options passed to the split call\n * @param {'horizontal'|'vertical'|'both'} options.direction The direction of the split\n * @param {Grid.column.Column} options.atColumn The column to split at\n * @param {Core.data.Model} options.atRecord The record to split at\n * @param {Date} options.atDate The date to split at\n * @on-owner\n */\n processOptions(options) {\n const { client } = this;\n let { atDate, atRecord } = options;\n // Check if center is a date if not given a specific split point\n if (options.direction !== 'horizontal' && !options.atColumn && !options.atRecord && !atDate) {\n const\n bounds = Rectangle.from(client.element),\n date = client.getDateFromCoordinate(bounds.center.x, 'round', false);\n // If it is a date, split at it\n if (date) {\n options.atDate = atDate = date;\n options.atColumn = client.timeAxisColumn;\n }\n }\n // Asked to split at a date, determine split sizes\n if (atDate) {\n if (!options.direction) {\n options.direction = atRecord ? 'both' : 'vertical';\n }\n options.splitX = client.getCoordinateFromDate(atDate, { ignoreRTL : true }) - client.timeAxisSubGrid.scrollable.x;\n if (client.rtl) {\n options.splitX += client._bodyRectangle.width - Rectangle.from(client.timeAxisSubGridElement).right + DomHelper.scrollBarWidth;\n }\n else {\n options.splitX += Rectangle.from(client.timeAxisSubGridElement, client.bodyContainer).left;\n }\n options.remainingWidth = Rectangle.from(client.element).width - options.splitX;\n }\n return super.processOptions(options);\n }\n /**\n * Split the scheduler into two or four parts.\n *\n * - Splits into two when passed `direction : 'vertical'`, `direction : 'horizontal'` or `atColumn`, `atRecord` or\n * `atDate`.\n * - Splits into four when passed `direction : 'both'` or `atColumn`/`atDate` and `atRecord`.\n *\n * ```javascript\n * // Split horizontally (at the row in the center of the scheduler)\n * await scheduler.split({ direction : 'horizontal' });\n *\n * // Split both ways by a specific date and resource\n * await schedule.split({\n * atRecord : scheduler.resourceStore.getById(10),\n * atDate : new Date(2023, 5, 8)\n * });\n * ```\n *\n * To return to a single scheduler, call {@link #function-unsplit}.\n *\n * Note that this function is callable directly on the scheduler instance.\n *\n * @param {Object} [options] Split options\n * @param {'vertical'|'horizontal'|'both'} [options.direction] Split direction, 'vertical', 'horizontal' or 'both'.\n * Not needed when passing `atColumn` or `atRecord`.\n * @param {Date} [options.atDate] Date to split at. Has to be within the time axis\n * @param {Grid.column.Column} [options.atColumn] Column to split at\n * @param {Core.data.Model} [options.atRecord] Record to split at\n * @returns {Promise} Resolves when split is complete, and subviews are scrolled to the correct position.\n * @async\n * @on-owner\n */\n async split(options = {}) {\n const { client } = this;\n if (client.isVertical) {\n throw new Error('Splitting is not supported in vertical mode');\n }\n const result = await super.split(options);\n if (result && options.atDate) {\n await Promise.all([\n // Scroll prev tick into view on left side\n result[0].scrollToDate(DateHelper.add(options.atDate, -1, client.timeAxis.unit), endScrollOptions),\n // And current tick into view on right side\n result[1].scrollToDate(options.atDate, startScrollOptions)\n ]);\n }\n // For whatever reason, the above scroll does not always refresh the timeaxis correctly, have not been able\n // to track it down so triggering a refresh manually\n client.timeAxisSubGrid.scrollable.x += 0.5;\n return result;\n }\n //region Context menu\n // Overwritten to prevent splitting in locked region\n populateCellMenu() {}\n populateScheduleMenu({ items, date, record }) {\n const\n me = this,\n { isSplit } = me,\n { splitFrom } = me.client;\n // Splitting not supported in vertical mode\n if (!me.disabled && me.client.isHorizontal) {\n items.splitSchedule = {\n text : 'L{split}',\n localeClass : me,\n icon : 'b-icon b-icon-split-vertical',\n weight : 500,\n separator : true,\n hidden : isSplit || splitFrom,\n menu : {\n splitHorizontally : {\n text : 'L{horizontally}',\n icon : 'b-icon b-icon-split-horizontal',\n localeClass : me,\n weight : 100,\n onItem() {\n me.split({ atRecord : record, direction : 'horizontal' }).then();\n }\n },\n splitVertically : {\n text : 'L{vertically}',\n icon : 'b-icon b-icon-split-vertical',\n localeClass : me,\n weight : 200,\n onItem() {\n me.split({ atDate : date }).then();\n }\n },\n splitBoth : {\n text : 'L{both}',\n icon : 'b-icon b-icon-split-both',\n localeClass : me,\n weight : 300,\n onItem() {\n me.split({ atDate : date, atRecord : record, direction : 'both' }).then();\n }\n }\n }\n };\n items.unsplitSchedule = {\n text : 'L{unsplit}',\n localeClass : me,\n icon : 'b-icon b-icon-clear',\n hidden : !(isSplit || splitFrom),\n weight : 550,\n onItem() {\n (splitFrom || me).unsplit();\n }\n };\n }\n }\n //endregion\n}\nSplit._$name = 'Split'; GridFeatureManager.registerFeature(Split, false, 'Scheduler');\n", "import InstancePlugin from '../../Core/mixin/InstancePlugin.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport DomSync from '../../Core/helper/DomSync.js';\n/**\n * @module Scheduler/feature/StickyEvents\n */\nconst zeroMargins = { width : 0, height : 0 };\n/**\n * This feature applies native `position: sticky` to event contents in horizontal mode, keeping the contents in view as\n * long as possible on scroll. For vertical mode it uses a programmatic solution to achieve the same result.\n *\n * Assign `eventRecord.stickyContents = false` to disable stickiness on a per event level (docs for\n * {@link Scheduler/model/EventModel#field-stickyContents}).\n *\n * This feature is **enabled** by default.\n *\n * ### Note\n * If a complex {@link Scheduler.view.Scheduler#config-eventRenderer} is used to create a DOM structure within the\n * `.b-sch-event-content` element, then application CSS will need to be written to cancel the stickiness on the\n * `.b-sch-event-content` element, and make some inner content element(s) sticky.\n *\n * @extends Core/mixin/InstancePlugin\n * @classtype stickyEvents\n * @feature\n */\nexport default class StickyEvents extends InstancePlugin {\n static $name = 'StickyEvents';\n static type = 'stickyEvents';\n static pluginConfig = {\n chain : ['onEventDataGenerated']\n };\n construct(scheduler, config) {\n super.construct(scheduler, config);\n if (scheduler.isVertical) {\n this.toUpdate = new Set();\n scheduler.ion({\n scroll : 'onSchedulerScroll',\n horizontalScroll : 'onHorizontalScroll',\n thisObj : this,\n prio : 10000\n });\n }\n }\n onEventDataGenerated(renderData) {\n if (this.client.isHorizontal) {\n renderData.wrapperCls['b-disable-sticky'] = renderData.eventRecord.stickyContents === false;\n }\n else {\n this.syncEventContentPosition(renderData, undefined, true);\n this.updateStyles();\n }\n }\n //region Vertical mode\n onSchedulerScroll() {\n if (!this.disabled) {\n this.verticalSyncAllEventsContentPosition(this.client);\n }\n }\n // Have to sync also on horizontal scroll, since we reuse elements and dom configs\n onHorizontalScroll({ subGrid }) {\n if (subGrid === this.client.timeAxisSubGrid) {\n this.verticalSyncAllEventsContentPosition(this.client);\n }\n }\n updateStyles() {\n for (const { contentEl, style } of this.toUpdate) {\n DomHelper.applyStyle(contentEl, style);\n }\n this.toUpdate.clear();\n }\n verticalSyncAllEventsContentPosition(scheduler) {\n const { resourceMap } = scheduler.currentOrientation;\n for (const eventsData of resourceMap.values()) {\n for (const { renderData, elementConfig } of Object.values(eventsData)) {\n const args = [renderData];\n if (elementConfig && renderData.eventRecord.isResourceTimeRange) {\n args.push(elementConfig.children[0]);\n }\n this.syncEventContentPosition.apply(this, args);\n }\n }\n this.toUpdate.size && this.updateStyles();\n }\n syncEventContentPosition(renderData, eventContent = renderData.eventContent, duringGeneration = false) {\n if (\n this.disabled ||\n // Allow client disable stickiness for certain events\n renderData.eventRecord.stickyContents === false\n ) {\n return;\n }\n const\n { client } = this,\n {\n eventRecord,\n resourceRecord,\n useEventBuffer,\n bufferAfterWidth,\n bufferBeforeWidth,\n top,\n height\n } = renderData,\n scrollPosition = client.scrollable.y,\n wrapperEl = duringGeneration ? null : client.getElementFromEventRecord(eventRecord, resourceRecord, true),\n contentEl = wrapperEl && DomSync.getChild(wrapperEl, 'event.content'),\n meta = eventRecord.instanceMeta(client),\n style = typeof eventContent.style === 'string'\n ? (eventContent.style = DomHelper.parseStyle(eventContent.style))\n : eventContent.style || (eventContent.style = {});\n // Do not process events being dragged\n if (wrapperEl?.classList.contains('b-dragging')) {\n return;\n }\n let start = top,\n contentSize = height,\n end = start + contentSize;\n if (useEventBuffer) {\n start += bufferBeforeWidth;\n contentSize = contentSize - bufferBeforeWidth - bufferAfterWidth;\n end = start + contentSize;\n }\n // Only process non-milestones that are partially out of view\n if (start < scrollPosition && end >= scrollPosition && !eventRecord.isMilestone) {\n const\n contentWidth = contentEl?.offsetWidth,\n justify = contentEl?.parentNode && DomHelper.getStyleValue(contentEl.parentNode, 'justifyContent'),\n c = justify === 'center' ? (renderData.width - contentWidth) / 2 : 0,\n eventStart = start,\n eventEnd = eventStart + contentSize - 1;\n // Only process non-milestone events. Milestones have no width.\n // If there's no offsetWidth, it's still b-released, so we cannot measure it.\n // If the event starts off the left edge, but its right edge is still visible,\n // translate the contentEl to compensate. If not, undo any translation.\n if ((!contentEl || contentWidth) && eventStart < scrollPosition && eventEnd >= scrollPosition) {\n const\n edgeSizes = this.getEventContentMargins(contentEl),\n maxOffset = contentEl\n ? (contentSize - contentEl.offsetHeight - edgeSizes.height) - c\n : Number.MAX_SAFE_INTEGER,\n offset = Math.min(scrollPosition - eventStart, maxOffset - 2);\n style.transform = offset > 0 ? `translateY(${offset}px)` : '';\n meta.stuck = true;\n }\n else {\n style.transform = '';\n meta.stuck = false;\n }\n if (contentEl) {\n this.toUpdate.add({\n contentEl,\n style\n });\n }\n }\n else if (contentEl && meta.stuck) {\n style.transform = '';\n meta.stuck = false;\n this.toUpdate.add({\n contentEl,\n style\n });\n }\n }\n // Only measure the margins of an event's contentEl once\n getEventContentMargins(contentEl) {\n if (contentEl?.classList.contains('b-sch-event-content')) {\n return DomHelper.getEdgeSize(contentEl, 'margin');\n }\n return zeroMargins;\n }\n //endregion\n doDisable() {\n super.doDisable(...arguments);\n if (!this.isConfiguring) {\n this.client.refreshWithTransition();\n }\n }\n}\nStickyEvents._$name = 'StickyEvents'; GridFeatureManager.registerFeature(StickyEvents, true, 'Scheduler');\nGridFeatureManager.registerFeature(StickyEvents, false, 'ResourceHistogram');\n", "import GridSummary from '../../Grid/feature/Summary.js';\nimport Tooltip from '../../Core/widget/Tooltip.js';\n/**\n * @module Scheduler/feature/TimelineSummary\n */\n// noinspection JSClosureCompilerSyntax\n/**\n * Base class, not to be used directly.\n * @extends Grid/feature/Summary\n * @abstract\n */\nexport default class TimelineSummary extends GridSummary {\n //region Config\n static get $name() {\n return 'TimelineSummary';\n }\n static get configurable() {\n return {\n /**\n * Show tooltip containing summary values and labels\n * @config {Boolean}\n * @default\n */\n showTooltip : true\n };\n }\n // Plugin configuration. This plugin chains some of the functions in Grid.\n static get pluginConfig() {\n return {\n chain : ['renderRows', 'updateProject']\n };\n }\n //endregion\n //region Init\n construct(client, config) {\n const me = this;\n super.construct(client, config);\n if (!me.summaries) {\n me.summaries = [{ renderer : me.renderer }];\n }\n // Feature might be run from Grid (in docs), should not crash\n if (client.isTimelineBase) {\n me.updateProject(client.project);\n client.ion({\n timeAxisViewModelUpdate : me.renderRows,\n thisObj : me\n });\n }\n }\n //endregion\n //region Render\n updateProject(project) {\n this.detachListeners('summaryProject');\n project.ion({\n name : 'summaryProject',\n dataReady : 'updateTimelineSummaries',\n thisObj : this\n });\n }\n renderRows() {\n if (this.client.isHorizontal) {\n this.client.timeAxisSubGrid.footer.element.querySelector('.b-grid-footer')?.classList.add('b-sch-summarybar');\n }\n super.renderRows();\n if (!this.disabled) {\n this.render();\n }\n }\n get summaryBarElement() {\n return this.client.element.querySelector('.b-sch-summarybar');\n }\n render() {\n const\n me = this,\n { client: timeline } = me,\n sizeProp = timeline.isHorizontal ? 'width' : 'height',\n colCfg = timeline.timeAxisViewModel.columnConfig,\n summaryContainer = me.summaryBarElement;\n if (summaryContainer) {\n // if any sum config has a label, init tooltip\n if (!me._tip && me.showTooltip && me.summaries.some(config => config.label)) {\n me._tip = new Tooltip({\n id : `${timeline.id}-summary-tip`,\n cls : 'b-timeaxis-summary-tip',\n hoverDelay : 0,\n hideDelay : 100,\n forElement : summaryContainer,\n anchorToTarget : true,\n trackMouse : false,\n forSelector : '.b-timeaxis-tick',\n getHtml : ({ activeTarget }) => activeTarget._tipHtml\n });\n }\n summaryContainer.innerHTML = colCfg[colCfg.length - 1].map(col => `
`).join('');\n me.updateTimelineSummaries();\n }\n }\n //endregion\n /**\n * Refreshes the summaries\n */\n refresh() {\n super.refresh();\n this.updateTimelineSummaries();\n }\n doDisable(disable) {\n const { isConfiguring } = this.client;\n super.doDisable(disable);\n this.summaryColumn?.toggle(!disable);\n if (!isConfiguring && !disable) {\n this.render();\n }\n }\n doDestroy() {\n this._tip?.destroy();\n super.doDestroy();\n }\n}\nTimelineSummary._$name = 'TimelineSummary';", "import TimelineSummary from './TimelineSummary.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\n/**\n * @module Scheduler/feature/Summary\n */\n/**\n * Defines a summary, used by the Summary and GroupSummary features.\n * @typedef SchedulerSummaryOptions\n * @property {String} label Label for the summary\n * @property {Function} renderer Function to calculate and render the summary value\n * @property {Date} renderer.startDate\n * @property {Date} renderer.endDate\n * @property {Scheduler.data.EventStore} renderer.eventStore\n * @property {Scheduler.data.ResourceStore} renderer.resourceStore\n * @property {Scheduler.model.EventModel[]} events\n * @property {Scheduler.model.ResourceModel[]} resources\n * @property {Core.data.Model} groupRecord\n * @property {String} groupField\n * @property {Object} groupValue\n */\n// noinspection JSClosureCompilerSyntax\n/**\n * A special version of the Grid Summary feature. This feature displays a summary row in the grid footer.\n * For regular columns in the locked section - specify type of summary on columns, available types are:\n *
\n *
sum
Sum of all values in the column\n *
add
Alias for sum\n *
count
Number of rows\n *
countNotEmpty
Number of rows containing a value\n *
average
Average of all values in the column\n *
function
A custom function, used with store.reduce. Should take arguments (sum, record)\n *
\n * Columns can also specify a summaryRender to format the calculated sum.\n *\n * To summarize events, either provide a {@link #config-renderer} or use {@link #config-summaries}\n *\n * This feature is disabled by default.\n *\n * {@inlineexample Scheduler/feature/Summary.js}\n *\n * @demo Scheduler/summary\n *\n * @extends Scheduler/feature/TimelineSummary\n * @classtype summary\n * @feature\n *\n * @typings Grid.feature.Summary -> Grid.feature.GridSummary\n */\nexport default class Summary extends TimelineSummary {\n //region Config\n static get $name() {\n return 'Summary';\n }\n static get configurable() {\n return {\n /**\n * Array of summary configs which consists of a label and a {@link #config-renderer} function\n *\n * ```javascript\n * new Scheduler({\n * features : {\n * summary : {\n * summaries : [\n * {\n * label : 'Label',\n * renderer : ({ startDate, endDate, eventStore, resourceStore, events, element }) => {\n * // return display value\n * returns '
Renderer output
';\n * }\n * }\n * ]\n * }\n * }\n * });\n * ```\n *\n * @config {SchedulerSummaryOptions[]}\n */\n summaries : null,\n /**\n * Renderer function for a single time axis tick. Should calculate a sum and return HTML as a result.\n *\n * ```javascript\n * new Scheduler({\n * features : {\n * summary : {\n * renderer : ({ startDate, endDate, eventStore, resourceStore, events, element }) => {\n * // return display value\n * returns '
Renderer output
';\n * }\n * }\n * }\n * });\n * ```\n *\n * @param {Object} context Rendering context object\n * @param {Date} context.startDate Tick start date\n * @param {Date} context.endDate Tick end date\n * @param {Scheduler.model.EventModel[]} context.events Events which belong to the group\n * @param {Scheduler.data.EventStore} context.eventStore Event store\n * @param {Scheduler.data.ResourceStore} context.resourceStore Resource store\n * @param {HTMLElement} context.element Summary tick container\n * @returns {String} Html content\n * @config {Function}\n */\n renderer : null,\n /**\n * A config object for the {@link Grid.column.Column} used to contain the summary bar.\n * @config {GridColumnConfig}\n */\n verticalSummaryColumnConfig : null\n };\n }\n // Plugin configuration. This plugin chains some of the functions in Grid.\n static get pluginConfig() {\n const config = super.pluginConfig;\n config.chain.push('bindStore', 'updateEventStore', 'updateResourceStore');\n return config;\n }\n //endregion\n //region Init\n construct(scheduler, config) {\n const me = this;\n me.scheduler = scheduler;\n if (scheduler.isVertical) {\n scheduler.timeAxisSubGrid.resizable = false;\n config.hideFooters = true;\n scheduler.add(scheduler.createSubGrid('right'));\n me.summaryColumn = scheduler.columns.add(ObjectHelper.assign({\n filterable : null,\n region : 'right',\n cellCls : 'b-grid-footer b-sch-summarybar',\n align : 'center',\n sortable : false,\n editor : false,\n groupable : false,\n htmlEncode : false,\n cellMenuItems : false,\n enableHeaderContextMenu : false,\n hidden : me.disabled\n }, me.verticalSummaryColumnConfig))[0];\n }\n super.construct(scheduler, config);\n // Feature might be run from Grid (in docs), should not crash\n if (scheduler.isSchedulerBase) {\n me.updateEventStore(scheduler.eventStore);\n me.updateResourceStore(scheduler.resourceStore);\n }\n }\n //endregion\n //region Render\n updateEventStore(eventStore) {\n this.detachListeners('summaryEventStore');\n eventStore.ion({\n name : 'summaryEventStore',\n filter : 'updateTimelineSummaries',\n thisObj : this\n });\n }\n updateResourceStore(resourceStore) {\n this.detachListeners('summaryResourceStore');\n resourceStore.ion({\n name : 'summaryResourceStore',\n filter : 'updateTimelineSummaries',\n thisObj : this\n });\n }\n /**\n * Updates summaries.\n * @private\n */\n updateTimelineSummaries() {\n const\n me = this,\n { client : timeline } = me,\n { eventStore, timeAxis } = timeline,\n summaryContainer = me.summaryBarElement,\n forResources = (me.selectedOnly && timeline.selectedRecords.length)\n ? timeline.selectedRecords : timeline.resourceStore.records;\n if (summaryContainer && timeline.isEngineReady) {\n // group events by ticks info once here to avoid performance lags\n // should be inside `scheduler.isEngineReady` check to make sure all events were calculated\n // https://github.com/bryntum/support/issues/2977\n const eventsByTick = timeline.getResourcesEventsPerTick(forResources, ({ event }) => {\n return !eventStore.isFiltered || eventStore.records.includes(event);\n });\n Array.from(summaryContainer.children).forEach((element, i) => {\n const\n tick = timeAxis.getAt(i),\n events = eventsByTick[i] || [];\n let html = '',\n tipHtml = `
${me.L('L{Summary for}', timeline.getFormattedDate(tick.startDate))}
`;\n me.summaries.forEach(config => {\n const value = config.renderer({\n startDate : tick.startDate,\n endDate : tick.endDate,\n resourceStore : timeline.resourceStore,\n eventStore,\n events,\n element\n }),\n valueHtml = value ? `
${value}
` : '';\n if (me.summaries.length > 1 || value) {\n html += valueHtml;\n }\n tipHtml += valueHtml ? (`` + valueHtml) : '';\n });\n element.innerHTML = html;\n // Only show tooltips for summary cells with content\n element._tipHtml = html ? tipHtml : '';\n });\n }\n }\n}\n// Override Grids Summary with this improved version\nSummary._$name = 'Summary'; GridFeatureManager.registerFeature(Summary, false, 'Scheduler');\n", "import HeaderMenu from '../../Grid/feature/HeaderMenu.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport '../../Core/widget/Slider.js';\n/**\n * @module Scheduler/feature/TimeAxisHeaderMenu\n */\nconst setTimeSpanOptions = {\n maintainVisibleStart : true\n};\n/**\n * Adds scheduler specific menu items to the timeline header context menu.\n *\n * ## Default timeaxis header menu items\n *\n * Here is the list of menu items provided by this and other features:\n *\n * | Reference | Text | Weight | Feature | Description |\n * |--------------------|-----------------------|--------|---------------------------------------------------|------------------------------|\n * | `eventsFilter` | Filter tasks | 100 | {@link Scheduler.feature.EventFilter EventFilter} | Submenu for event filtering |\n * | \\>`nameFilter` | By name | 110 | {@link Scheduler.feature.EventFilter EventFilter} | Filter by `name` |\n * | `zoomLevel` | Zoom | 200 | *This feature* | Submenu for timeline zooming |\n * | \\>`zoomSlider` | - | 210 | *This feature* | Changes current zoom level |\n * | `dateRange` | Date range | 300 | *This feature* | Submenu for timeline range |\n * | \\>`startDateField` | Start date | 310 | *This feature* | Start date for the timeline |\n * | \\>`endDateField` | End date | 320 | *This feature* | End date for the timeline |\n * | \\>`leftShiftBtn` | < | 330 | *This feature* | Shift backward |\n * | \\>`todayBtn` | Today | 340 | *This feature* | Go to today |\n * | \\>`rightShiftBtn` | \\> | 350 | *This feature* | Shift forward |\n * | `currentTimeLine` | Show current timeline | 400 | {@link Scheduler.feature.TimeRanges TimeRanges} | Show current time line |\n *\n *
\n *
>
first level of submenu
\n *
\n *\n * ## Customizing the menu items\n *\n * The menu items in the TimeAxis Header menu can be customized, existing items can be changed or removed,\n * and new items can be added. This is handled using the `items` config of the feature.\n *\n * ### Add extra items:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * timeAxisHeaderMenu : {\n * items : {\n * extraItem : {\n * text : 'Extra',\n * icon : 'b-fa b-fa-fw b-fa-flag',\n * onItem() {\n * ...\n * }\n * }\n * }\n * }\n * }\n * });\n * ```\n *\n * ### Remove existing items:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * timeAxisHeaderMenu : {\n * items : {\n * zoomLevel : false\n * }\n * }\n * }\n * });\n * ```\n *\n * ### Customize existing item:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * timeAxisHeaderMenu : {\n * items : {\n * zoomLevel : {\n * text : 'Scale'\n * }\n * }\n * }\n * }\n * });\n * ```\n *\n * ### Customizing submenu items:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * timeAxisHeaderMenu : {\n * items : {\n * dateRange : {\n * menu : {\n * items : {\n * todayBtn : {\n * text : 'Now'\n * }\n * }\n * }\n * }\n * }\n * }\n * }\n * });\n * ```\n *\n * ### Manipulate existing items:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * timeAxisHeaderMenu : {\n * // Process items before menu is shown\n * processItems({ items }) {\n * // Add an extra item dynamically\n * items.coolItem = {\n * text : 'Cool action',\n * onItem() {\n * // ...\n * }\n * }\n * }\n * }\n * }\n * });\n * ```\n *\n *
The `processItems` implementation my be an `async` function which `awaits` a result to\n * mutate the `items` object.
\n *\n * Full information of the menu customization can be found in the\n * [\"Customizing the Event menu, the Schedule menu, and the TimeAxisHeader menu\"](#Scheduler/guides/customization/contextmenu.md)\n * guide.\n *\n * ## Video guides\n * {@frameworktabs}\n * {@react}\n * [@youtube](https://www.youtube.com/embed/HAq12QUBMx8)\n * {@endreact}\n * {@vue}\n * [@youtube](https://www.youtube.com/embed/nXMaClkkKdQ)\n * {@endvue}\n * {@angular}\n * [@youtube](https://www.youtube.com/embed/0seuhWrIeXc)\n * {@endangular}\n * {@endframeworktabs}\n *\n * This feature is **enabled** by default\n *\n * {@inlineexample Scheduler/feature/TimeAxisHeaderMenu.js}\n *\n * @demo Scheduler/basic\n *\n * @extends Grid/feature/HeaderMenu\n * @classtype timeAxisHeaderMenu\n * @feature\n */\nexport default class TimeAxisHeaderMenu extends HeaderMenu {\n //region Config\n static get $name() {\n return 'TimeAxisHeaderMenu';\n }\n static get defaultConfig() {\n return {\n /**\n * A function called before displaying the menu that allows manipulations of its items.\n * Returning `false` from this function prevents the menu being shown.\n *\n * ```javascript\n * features : {\n * timeAxisHeaderMenu : {\n * processItems({ items }) {\n * // Add or hide existing items here as needed\n * items.myAction = {\n * text : 'Cool action',\n * icon : 'b-fa b-fa-fw b-fa-ban',\n * onItem : () => console.log('Some coolness'),\n * weight : 300 // Move to end\n * };\n *\n * // Hide zoom slider\n * items.zoomLevel.hidden = true;\n * }\n * }\n * },\n * ```\n *\n * @config {Function}\n * @param {Object} context An object with information about the menu being shown.\n * @param {Scheduler.feature.TimeAxisHeaderMenu} context.feature A reference to this feature.\n * @param {Event} context.domEvent The initiating event.\n * @param {Event} context.event DEPRECATED: The initiating event.\n * @param {Number[]} context.point The client `X` and `Y` position of the initiating event.\n * @param {HTMLElement} context.targetElement The target to which the menu is being applied.\n * @param {Object} context.items An object containing the\n * {@link Core.widget.MenuItem menu item} configs keyed by their id.\n * @returns {Boolean|null} Returning `false` from this function prevents the menu being shown.\n * @preventable\n */\n processItems : null,\n /**\n * This is a preconfigured set of items used to create the default context menu.\n *\n * The `items` provided by this feature are listed in the intro section of this class. You can\n * configure existing items by passing a configuration object to the keyed items.\n *\n * To remove existing items, set corresponding keys `null`:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * timeAxisHeaderMenu : {\n * items : {\n * eventsFilter : null\n * }\n * }\n * }\n * });\n * ```\n *\n * See the feature config in the above example for details.\n *\n * @config {Object} items\n */\n items : null,\n type : 'timeAxisHeader'\n };\n }\n static get pluginConfig() {\n const config = super.pluginConfig;\n config.chain.push('populateTimeAxisHeaderMenu');\n return config;\n }\n //endregion\n //region Events\n /**\n * This event fires on the owning Scheduler or Gantt widget before the context menu is shown for the time axis header.\n * Allows manipulation of the items to show in the same way as in the {@link #config-processItems}.\n *\n * Returning `false` from a listener prevents the menu from being shown.\n *\n * @event timeAxisHeaderMenuBeforeShow\n * @on-owner\n * @preventable\n * @param {Scheduler.view.Scheduler} source The scheduler\n * @param {Core.widget.Menu} menu The menu\n * @param {Object} items Menu item configs\n * @param {Grid.column.Column} column Time axis column\n */\n /**\n * This event fires on the owning Scheduler or Gantt widget after the context menu is shown for a header\n * @event timeAxisHeaderMenuShow\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The scheduler\n * @param {Core.widget.Menu} menu The menu\n * @param {Object} items Menu item configs\n * @param {Grid.column.Column} column Time axis column\n */\n /**\n * This event fires on the owning Scheduler or Gantt widget when an item is selected in the header context menu.\n * @event timeAxisHeaderMenuItem\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The scheduler\n * @param {Core.widget.Menu} menu The menu\n * @param {Core.widget.MenuItem} item Selected menu item\n * @param {Grid.column.Column} column Time axis column\n */\n //endregion\n construct() {\n super.construct(...arguments);\n if (this.triggerEvent.includes('click') && this.client.zoomOnTimeAxisDoubleClick) {\n this.client.zoomOnTimeAxisDoubleClick = false;\n }\n }\n shouldShowMenu(eventParams) {\n const\n { column, targetElement } = eventParams,\n { client } = this;\n if (client.isHorizontal) {\n return column?.enableHeaderContextMenu !== false && column?.isTimeAxisColumn;\n }\n return targetElement.closest('.b-sch-header-timeaxis-cell');\n }\n showContextMenu(eventParams) {\n super.showContextMenu(...arguments);\n if (this.menu) {\n // the TimeAxis's context menu probably will cause scrolls because it manipulates the dates.\n // The menu should not hide on scroll when for a TimeAxisColumn\n this.menu.scrollAction = 'realign';\n }\n }\n populateTimeAxisHeaderMenu({ items }) {\n const\n me = this,\n { client } = me,\n dateStep = {\n magnitude : client.timeAxis.shiftIncrement,\n unit : client.timeAxis.shiftUnit\n };\n Object.assign(items, {\n zoomLevel : {\n text : 'L{pickZoomLevel}',\n localeClass : me,\n icon : 'b-fw-icon b-icon-search-plus',\n disabled : !client.presets.count || me.disabled,\n weight : 200,\n menu : {\n type : 'popup',\n items : {\n zoomSlider : {\n weight : 210,\n type : 'slider',\n minWidth : 130,\n showValue : false,\n // so that we can use the change event which is easier to inject in tests\n triggerChangeOnInput : true\n }\n },\n onBeforeShow({ source : menu }) {\n const [zoom] = menu.items;\n zoom.min = client.minZoomLevel;\n zoom.max = client.maxZoomLevel;\n zoom.value = client.zoomLevel;\n // Default slider value is 50 which causes the above to trigger onZoomSliderChange (when\n // maxZoomLevel < 50) if we add our listener prior to this point.\n me.zoomDetatcher = zoom.ion({ change : 'onZoomSliderChange', thisObj : me });\n },\n onHide() {\n if (me.zoomDetatcher) {\n me.zoomDetatcher();\n me.zoomDetatcher = null;\n }\n }\n }\n },\n dateRange : {\n text : 'L{activeDateRange}',\n localeClass : me,\n icon : 'b-fw-icon b-icon-calendar',\n weight : 300,\n menu : {\n type : 'popup',\n cls : 'b-sch-timeaxis-menu-daterange-popup',\n defaults : {\n localeClass : me\n },\n items : {\n startDateField : {\n type : 'datefield',\n label : 'L{startText}',\n weight : 310,\n labelWidth : '6em',\n required : true,\n step : dateStep,\n internalListeners : {\n change : me.onRangeDateFieldChange,\n thisObj : me\n }\n },\n endDateField : {\n type : 'datefield',\n label : 'L{endText}',\n weight : 320,\n labelWidth : '6em',\n required : true,\n step : dateStep,\n internalListeners : {\n change : me.onRangeDateFieldChange,\n thisObj : me\n }\n },\n leftShiftBtn : {\n type : 'button',\n weight : 330,\n cls : 'b-left-nav-btn',\n icon : 'b-icon b-icon-previous',\n color : 'b-blue b-raised',\n flex : 1,\n margin : 0,\n internalListeners : {\n click : me.onLeftShiftBtnClick,\n thisObj : me\n }\n },\n todayBtn : {\n type : 'button',\n weight : 340,\n cls : 'b-today-nav-btn',\n color : 'b-blue b-raised',\n text : 'L{todayText}',\n flex : 4,\n margin : '0 8',\n internalListeners : {\n click : me.onTodayBtnClick,\n thisObj : me\n }\n },\n rightShiftBtn : {\n type : 'button',\n weight : 350,\n cls : 'b-right-nav-btn',\n icon : 'b-icon b-icon-next',\n color : 'b-blue b-raised',\n flex : 1,\n internalListeners : {\n click : me.onRightShiftBtnClick,\n thisObj : me\n }\n }\n },\n internalListeners : {\n paint : me.initDateRangeFields,\n thisObj : me\n }\n }\n }\n });\n }\n onZoomSliderChange({ value }) {\n const me = this;\n // Zooming maintains timeline center point by scrolling the newly rerendered timeline to the\n // correct point to maintain the visual center. Temporarily inhibit context menu hide on scroll\n // of its context element.\n me.menu.scrollAction = 'realign';\n me.client.zoomLevel = value;\n me.menu.setTimeout({\n fn : () => me.menu.scrollAction = 'hide',\n delay : 100,\n cancelOutstanding : true\n });\n }\n initDateRangeFields({ source : dateRange, firstPaint }) {\n if (firstPaint) {\n const { widgetMap } = dateRange;\n this.startDateField = widgetMap.startDateField;\n this.endDateField = widgetMap.endDateField;\n }\n this.initDates();\n }\n initDates() {\n const me = this;\n me.startDateField.suspendEvents();\n me.endDateField.suspendEvents();\n // The actual scheduler start dates may include time, but our Date field cannot currently handle\n // a time portion and throws it away, so when we need the value from an unchanged field, we need\n // to use the initialValue set from the timeAxis values.\n // Until our DateField can optionally include a time value, this is the solution.\n me.startDateField.value = me.startDateFieldInitialValue = me.client.startDate;\n me.endDateField.value = me.endDateFieldInitialValue = me.client.endDate;\n me.startDateField.resumeEvents();\n me.endDateField.resumeEvents();\n }\n onRangeDateFieldChange({ source }) {\n const\n me = this,\n startDateChanged = (source === me.startDateField),\n { client } = me,\n { timeAxis } = client,\n startDate = me.startDateFieldInitialValue && !startDateChanged ? me.startDateFieldInitialValue : me.startDateField.value;\n let endDate = me.endDateFieldInitialValue && startDateChanged ? me.endDateFieldInitialValue : me.endDateField.value;\n // When either of the fields is changed, we no longer use its initialValue from the timeAxis start or end\n // so that gets nulled to indicate that it's unavailable and the real field value is to be used.\n if (startDateChanged) {\n me.startDateFieldInitialValue = null;\n }\n else {\n me.endDateFieldInitialValue = null;\n }\n // Because the start and end dates are exclusive, avoid a zero\n // length time axis by incrementing the end by one tick unit\n // if they are the same.\n if (!(endDate - startDate)) {\n endDate = DateHelper.add(endDate, timeAxis.shiftIncrement, timeAxis.shiftUnit);\n }\n // if start date got bigger than end date set end date to start date plus one tick\n else if (endDate < startDate) {\n endDate = DateHelper.add(startDate, timeAxis.shiftIncrement, timeAxis.shiftUnit);\n }\n // setTimeSpan will try to keep the scroll position the same.\n client.setTimeSpan(startDate, endDate, setTimeSpanOptions);\n me.initDates();\n }\n onLeftShiftBtnClick() {\n this.client.timeAxis.shiftPrevious();\n this.initDates();\n }\n onTodayBtnClick() {\n const today = DateHelper.clearTime(new Date());\n this.client.setTimeSpan(today, DateHelper.add(today, 1, 'day'));\n this.initDates();\n }\n onRightShiftBtnClick() {\n this.client.timeAxis.shiftNext();\n this.initDates();\n }\n}\nTimeAxisHeaderMenu._$name = 'TimeAxisHeaderMenu'; GridFeatureManager.registerFeature(TimeAxisHeaderMenu, true, ['Scheduler', 'TimelineHistogram', 'Gantt']);\n", "import AbstractTimeRanges from './AbstractTimeRanges.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport Rectangle from '../../Core/helper/util/Rectangle.js';\nimport AttachToProjectMixin from '../data/mixin/AttachToProjectMixin.js';\nimport TimeSpan from '../model/TimeSpan.js';\n/**\n * @module Scheduler/feature/TimeRanges\n */\n/**\n * Feature that renders global ranges of time in the timeline. Use this feature to visualize a `range` like a 1 hr lunch\n * or some important point in time (a `line`, i.e. a range with 0 duration). This feature can also show a current time\n * indicator if you set {@link #config-showCurrentTimeLine} to true. To style the rendered elements, use the\n * {@link Scheduler.model.TimeSpan#field-cls cls} field of the `TimeSpan` class.\n *\n * {@inlineexample Scheduler/feature/TimeRanges.js}\n *\n * Each time range is represented by an instances of {@link Scheduler.model.TimeSpan}, held in a simple\n * {@link Core.data.Store}. The feature uses {@link Scheduler/model/ProjectModel#property-timeRangeStore} defined on the\n * project by default. The store's persisting/loading is handled by Crud Manager (if it's used by the component).\n *\n * Note that the feature uses virtualized rendering, only the currently visible ranges are available in the DOM.\n *\n * This feature is **disabled** by default.\n * For info on enabling it, see {@link Grid.view.mixin.GridFeatures}.\n *\n * ## Showing an icon in the time range header\n *\n * You can use Font Awesome icons easily (or set any other icon using CSS) by using the {@link Scheduler.model.TimeSpan#field-iconCls}\n * field. The JSON data below will show a flag icon:\n *\n * ```json\n * {\n * \"id\" : 5,\n * \"iconCls\" : \"b-fa b-fa-flag\",\n * \"name\" : \"v5.0\",\n * \"startDate\" : \"2019-02-07 15:45\"\n * },\n * ```\n *\n * ## Recurring time ranges\n *\n * The feature supports recurring ranges in case the provided store and models\n * have {@link Scheduler/data/mixin/RecurringTimeSpansMixin} and {@link Scheduler/model/mixin/RecurringTimeSpan}\n * mixins applied:\n *\n * ```javascript\n * // We want to use recurring time ranges so we make a special model extending standard TimeSpan model with\n * // RecurringTimeSpan which adds recurrence support\n * class MyTimeRange extends RecurringTimeSpan(TimeSpan) {}\n *\n * // Define a new store extending standard Store with RecurringTimeSpansMixin mixin to add recurrence support to the\n * // store. This store will contain time ranges.\n * class MyTimeRangeStore extends RecurringTimeSpansMixin(Store) {\n * static get defaultConfig() {\n * return {\n * // use our new MyResourceTimeRange model\n * modelClass : MyTimeRange\n * };\n * }\n * };\n *\n * // Instantiate store for timeRanges using our new classes\n * const timeRangeStore = new MyTimeRangeStore({\n * data : [{\n * id : 1,\n * resourceId : 'r1',\n * startDate : '2019-01-01T11:00',\n * endDate : '2019-01-01T13:00',\n * name : 'Lunch',\n * // this time range should repeat every day\n * recurrenceRule : 'FREQ=DAILY'\n * }]\n * });\n *\n * const scheduler = new Scheduler({\n * ...\n * features : {\n * timeRanges : true\n * },\n *\n * crudManager : {\n * // store for \"timeRanges\" feature\n * timeRangeStore\n * }\n * });\n * ```\n *\n * @extends Scheduler/feature/AbstractTimeRanges\n * @classtype timeRanges\n * @feature\n * @demo Scheduler/timeranges\n */\nexport default class TimeRanges extends AbstractTimeRanges.mixin(AttachToProjectMixin) {\n //region Config\n static get $name() {\n return 'TimeRanges';\n }\n static configurable = {\n /**\n * The interval (as amount of ms) defining how frequently the current timeline will be updated\n * @config {Number}\n * @default\n * @category Misc\n */\n currentTimeLineUpdateInterval : 10000,\n /**\n * The date format to show in the header for the current time line (when {@link #config-showCurrentTimeLine} is configured).\n * See {@link Core.helper.DateHelper} for the possible formats to use.\n * @config {String}\n * @default\n * @category Common\n */\n currentDateFormat : 'HH:mm',\n /**\n * Show a line indicating current time. Either `true` or `false` or a {@link Scheduler.model.TimeSpan}\n * configuration object to apply to this special time range (allowing you to provide a custom text):\n *\n * ```javascript\n * showCurrentTimeLine : {\n * name : 'Now'\n * }\n * ```\n *\n * The line carries the CSS class name `b-sch-current-time`, and this may be used to add custom styling to it.\n *\n * @prp {Boolean|TimeSpanConfig}\n * @default false\n * @category Common\n */\n showCurrentTimeLine : {\n $config : 'lazy',\n value : null\n }\n };\n //endregion\n /**\n * Returns the TimeRanges which occur within the client Scheduler's time axis.\n * @property {Scheduler.model.TimeSpan[]}\n */\n get timeRanges() {\n const\n me = this,\n { store } = me;\n if (!me._timeRanges) {\n let result = [];\n if (store) {\n result = store.records;\n if (store.recurringEvents?.size) {\n const {\n startDate,\n endDate\n } = me.client.timeAxis;\n result = result.flatMap(timeSpan => {\n // Collect occurrences for the recurring events in the record set\n if (timeSpan.isRecurring) {\n return timeSpan.getOccurrencesForDateRange(startDate, endDate);\n }\n return timeSpan;\n });\n }\n }\n // showCurrentTimeline is lazy, so must access that *before* checking currentTimeline\n if (me.showCurrentTimeLine && me.currentTimeLine) {\n result = [me.currentTimeLine, ...result];\n }\n me._timeRanges = result;\n }\n return me._timeRanges;\n }\n //endregion\n //region Current time line\n attachToProject(project) {\n const me = this;\n me.attachToTimeRangeStore(project.timeRangeStore);\n super.attachToProject(project);\n me.projectTimeZoneChangeDetacher?.();\n if (me.showCurrentTimeLine) {\n // Update currentTimeLine immediately after a time zone change\n me.projectTimeZoneChangeDetacher = me.client.project?.ion({\n timeZoneChange : 'updateCurrentTimeLine',\n thisObj : me\n });\n // Update currentTimeLine if its already created\n if (me.currentTimeLine) {\n me.updateCurrentTimeLine();\n }\n }\n }\n initCurrentTimeLine() {\n const me = this;\n if (me.currentTimeLine || !me.showCurrentTimeLine) {\n return;\n }\n const data = typeof me.showCurrentTimeLine === 'object' ? me.showCurrentTimeLine : {};\n me.currentTimeLine = (me.store?.modelClass || TimeSpan).new({\n id : 'currentTime', \n cls : 'b-sch-current-time'\n }, data);\n me.currentTimeInterval = me.setInterval(() => me.updateCurrentTimeLine(), me.currentTimeLineUpdateInterval);\n me._timeRanges = null;\n me.updateCurrentTimeLine();\n }\n updateCurrentTimeLine() {\n const\n me = this,\n { currentTimeLine } = me;\n currentTimeLine.timeZone = me.project?.timeZone;\n currentTimeLine.setLocalDate('startDate', new Date());\n currentTimeLine.endDate = currentTimeLine.startDate;\n if (!currentTimeLine.originalData.name) {\n currentTimeLine.name = DateHelper.format(currentTimeLine.startDate, me.currentDateFormat);\n }\n me.renderRanges();\n }\n hideCurrentTimeLine() {\n const me = this;\n if (!me.currentTimeLine) {\n return;\n }\n me.clearInterval(me.currentTimeInterval);\n me.currentTimeLine = null;\n me.refresh();\n }\n updateShowCurrentTimeLine(show) {\n if (show) {\n this.initCurrentTimeLine();\n }\n else {\n this.hideCurrentTimeLine();\n }\n }\n //endregion\n //region Menu items\n /**\n * Adds a menu item to show/hide current time line.\n * @param {Object} options Contains menu items and extra data retrieved from the menu target.\n * @param {Grid.column.Column} options.column Column for which the menu will be shown\n * @param {Object} options.items A named object to describe menu items\n * @internal\n */\n populateTimeAxisHeaderMenu({ items }) {\n items.currentTimeLine = {\n weight : 400,\n text : this.L('L{showCurrentTimeLine}'),\n checked : this.currentTimeLine,\n onToggle : ({ checked }) => {\n if (!this.showCurrentTimeLine) {\n this.showCurrentTimeLine = checked;\n }\n else {\n this.updateShowCurrentTimeLine(checked);\n }\n }\n };\n }\n //endregion\n //region Store\n attachToStore(store) {\n const me = this;\n // if we had some store assigned before we need to detach it\n if (me.storeDetacher) {\n me.storeDetacher();\n }\n me.storeDetacher = store.ion({\n change : 'onStoreChange',\n refresh : 'onStoreChange',\n thisObj : me\n });\n me._timeRanges = null;\n // render ranges from the new store\n me.renderRanges();\n }\n /**\n * Returns the {@link Core.data.Store} used by this feature.\n * This is always the owning Scheduler/Gantt's Project TimeRangeStore.\n * @member {Core.data.Store} store\n * @readonly\n * @category Misc\n */\n get store() {\n // We do not independently own a Store.\n // We attach to our client's project timeRangeStore\n return this.client.project?.timeRangeStore;\n }\n // Called by ProjectConsumer after a new store is assigned at runtime\n attachToTimeRangeStore(store) {\n const { client } = this;\n this.attachToStore(store);\n // timeRanges can be set on scheduler/gantt, for convenience. Should only be processed by the TimeRanges and not\n // any subclasses\n if (client.timeRanges && !client._timeRangesExposed) {\n store.add(client.timeRanges);\n delete client.timeRanges;\n }\n }\n resolveTimeRangeRecord(el) {\n const id = el.closest(this.baseSelector).dataset.id;\n if (id === 'currentTime') {\n return this.currentTimeLine;\n }\n return this.store.getById(id);\n }\n onStoreChange({ type, action }) {\n const me = this;\n // Force re-evaluating of which ranges to consider for render\n me._timeRanges = null;\n // https://github.com/bryntum/support/issues/1398 - checking also if scheduler is visible to change elements\n if (me.disabled || !me.client.isVisible || me.isConfiguring || (type === 'refresh' && action !== 'batch')) {\n return;\n }\n me.client.runWithTransition(() => me.renderRanges(), !me.client.refreshSuspended);\n }\n //endregion\n //region Drag\n onDragStart(event) {\n const\n me = this,\n { context } = event,\n record = me.resolveTimeRangeRecord(context.element.closest(me.baseSelector)),\n rangeBodyEl = me.getBodyElementByRecord(record);\n context.relatedElements = [rangeBodyEl];\n Object.assign(context, {\n record,\n rangeBodyEl,\n originRangeX : DomHelper.getTranslateX(rangeBodyEl),\n originRangeY : DomHelper.getTranslateY(rangeBodyEl)\n });\n super.onDragStart(event);\n me.showTip(context);\n }\n onDrop(event) {\n const { context } = event;\n if (!context.valid) {\n return this.onInvalidDrop({ context });\n }\n const\n me = this,\n { client } = me,\n { record } = context,\n box = Rectangle.from(context.rangeBodyEl),\n newStart = client.getDateFromCoordinate(box.getStart(client.rtl, client.isHorizontal), 'round', false),\n wasModified = (record.startDate - newStart !== 0);\n if (wasModified) {\n record.setStartDate(newStart);\n }\n else {\n me.drag.abort();\n }\n me.destroyTip();\n super.onDrop(event);\n }\n //endregion\n //region Resize\n onResizeStart({ context }) {\n const\n me = this,\n record = me.resolveTimeRangeRecord(context.element.closest(me.baseSelector)),\n rangeBodyEl = me.getBodyElementByRecord(record);\n Object.assign(context, {\n record,\n rangeBodyEl\n });\n me.showTip(context);\n super.onResizeStart(...arguments);\n }\n onResizeDrag({ context }) {\n const\n me = this,\n { rangeBodyEl } = context,\n { client } = me,\n box = Rectangle.from(context.element),\n startPos = box.getStart(client.rtl, client.isHorizontal),\n endPos = box.getEnd(client.rtl, client.isHorizontal),\n startDate = client.getDateFromCoordinate(startPos, 'round', false),\n endDate = client.getDateFromCoordinate(endPos, 'round', false);\n if (me.client.isVertical) {\n if (context.edge === 'top') {\n DomHelper.setTranslateY(rangeBodyEl, context.newY);\n }\n rangeBodyEl.style.height = context.newHeight + 'px';\n }\n else {\n if (context.edge === 'left') {\n DomHelper.setTranslateX(rangeBodyEl, context.newX);\n }\n rangeBodyEl.style.width = context.newWidth + 'px';\n }\n me.updateDateIndicator({ startDate, endDate });\n }\n onResize({ context }) {\n if (!context.valid) {\n return this.onInvalidDrop({ context });\n }\n const\n me = this,\n { client } = me,\n { rtl } = client,\n record = context.record,\n box = Rectangle.from(context.element),\n startPos = box.getStart(rtl, client.isHorizontal),\n endPos = box.getEnd(rtl, client.isHorizontal),\n newStart = client.getDateFromCoordinate(startPos, 'round', false),\n isStart = (rtl && context.edge === 'right') || (!rtl && context.edge === 'left') || context.edge === 'top',\n newEnd = client.getDateFromCoordinate(endPos, 'round', false),\n wasModified = (isStart && record.startDate - newStart !== 0) ||\n (newEnd && record.endDate - newEnd !== 0);\n if (wasModified && newEnd > newStart) {\n if (isStart) {\n // could be that the drag operation placed the range with start/end outside the axis\n record.setStartDate(newStart, false);\n }\n else {\n record.setEndDate(newEnd, false);\n }\n }\n else {\n me.onInvalidResize({ context });\n }\n me.destroyTip();\n }\n onInvalidResize({ context }) {\n const me = this;\n me.resize.reset();\n // Allow DomSync to reapply original state\n context.rangeBodyEl.parentElement.lastDomConfig = context.rangeBodyEl.lastDomConfig = context.element.lastDomConfig = null;\n me.renderRanges();\n me.destroyTip();\n }\n //endregion\n}\nTimeRanges._$name = 'TimeRanges'; GridFeatureManager.registerFeature(TimeRanges, false, ['TimelineBase']);\n", "import AbstractTimeRanges from './AbstractTimeRanges.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\n/**\n * @module Scheduler/feature/TimeSelection\n */\n/**\n * Feature that allows selection of a time span in the time axis header. When a time span is selected in the header,\n * a {@link #event-timeSelectionChange} event is fired.\n *\n * {@inlineexample Scheduler/feature/TimeSelection.js}\n *\n * ## Configuration\n *\n * You can configure the content of the header element using the {@link #config-headerRenderer} function.\n *\n *
Not compatible with the {@link Scheduler/feature/HeaderZoom} feature.
\n *\n * This feature is **disabled** by default.\n * For info on enabling it, see {@link Grid/view/mixin/GridFeatures}.\n *\n * @extends Scheduler/feature/AbstractTimeRanges\n * @demo Scheduler/time-selection\n * @classtype timeSelection\n * @feature\n */\nexport default class TimeSelection extends AbstractTimeRanges {\n //region Default config\n static $name = 'TimeSelection';\n /** @hideconfigs enableResizing, showTooltip, dragTipTemplate, cls, showHeaderElements */\n /** @hideproperties showHeaderElements, timeRanges */\n /** @hidefunctions getTipHtml, shouldRenderRange */\n static get configurable() {\n return {\n enableResizing : true,\n showTooltip : false,\n dragTipTemplate : null,\n cls : 'b-selected-time-span',\n dragHelperConfig : {\n // Data will be updated on drag, no need for DragHelper to touch the element\n skipUpdatingElement : true\n },\n resizeHelperConfig : {\n // Data will be updated on resize, no need for ResizeHelper to touch the element\n skipUpdatingElement : true\n },\n /**\n * Template used to generate the tooltip contents when hovering the time selection header element.\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * timeSelection : {\n * tooltipTemplate({ startDate, endDate }) {\n * const count = this.client.getAvailableResources(startDate, endDate).length;\n * return `${count || 'No'} available resource(s)`;\n * }\n * }\n * }\n * });\n * ```\n *\n * @config {Function} tooltipTemplate\n * @param {Object} data Tooltip data\n * @param {Date} data.startDate\n * @param {Date} data.endDate\n * @returns {String} String representing the HTML markup\n * @category Common\n */\n /**\n * Function used to generate the HTML content for the selected time span's header element.\n *\n * If you want to include an icon or similar to clear the selection on click, make sure to set\n * `date-ref=\"closeButton\"` on it.\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * timeSelection : {\n * headerRenderer({ timeRange }) {\n * return `\n * ${DateHelper.format(timeRange.startDate, 'LL')}\n *
\n * `;\n * }\n * }\n * }\n * });\n * ```\n * @config {Function} headerRenderer\n * @param {Object} data Render data\n * @param {Object} data.timeRange\n * @param {Date} data.timeRange.startDate\n * @param {Date} data.timeRange.endDate\n * @returns {String}\n * @category Common\n */\n headerRenderer({ timeRange }) {\n const { dateFormat } = this.client.timeAxisViewModel.bottomHeader;\n return `${DateHelper.format(timeRange.startDate, dateFormat)}\n ${DateHelper.format(timeRange.endDate, dateFormat)}\n `;\n },\n /**\n * The selected time span, which can be set using simple `startDate` and `endDate` properties\n * @prp {Object} selectedTimeSpan\n * @param {Date} selectedTimeSpan.startDate The start date of the selected time span\n * @param {Date} selectedTimeSpan.endDate The end date of the selected time span\n */\n selectedTimeSpan : null\n };\n }\n //endregion\n //region Init & destroy\n onUIReady() {\n const me = this;\n super.onUIReady();\n if (me.hoverTooltip) {\n me.hoverTooltip.getHtml = () => {\n return me.tooltipTemplate({ ...me.selectedTimeSpan });\n };\n }\n me.client.ion({\n timeAxisHeaderMouseDown : 'onTimeAxisHeaderMouseDown',\n thisObj : me\n });\n }\n onTimeAxisHeaderMouseDown({ startDate, endDate }) {\n if (!this.disabled) {\n this.selectedTimeSpan = {\n startDate,\n endDate\n };\n }\n }\n onTimeRangeClick(event) {\n super.onTimeRangeClick(event);\n const me = this;\n if (!me.disabled && event.target.closest('.b-selected-time-span')) {\n if (event.target.matches('[data-ref=\"closeButton\"]')) {\n me.selectedTimeSpan = null;\n }\n else {\n /**\n * Triggered when clicking the time selection header element\n * @event timeSelectionElementClick\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The scheduler\n * @param {Date} startDate The selected range start date\n * @param {Date} endDate The selected range end date\n * @param {Event} domEvent The raw DOM event\n */\n me.client.trigger('timeSelectionElementClick', {\n ...me.selectedTimeSpan,\n domEvent : event\n });\n }\n }\n }\n updateFromCoords(x, y, width, height) {\n const\n { client } = this,\n size = client.isHorizontal ? width : height;\n let start = client.isHorizontal ? x : y;\n if (client.rtl && client.isHorizontal) {\n start = Math.max(client.timeAxisViewModel.totalSize - start - size, 0);\n }\n const\n startDate = client.getDateFromCoord({ coord : start, roundingMethod : 'round', ignoreRTL : true }),\n endDate = client.getDateFromCoord({ coord : start + size, roundingMethod : 'round', ignoreRTL : true });\n this.selectedTimeSpan = {\n startDate : DateHelper.max(startDate, client.startDate),\n endDate : DateHelper.min(endDate, client.endDate)\n };\n }\n onResizeStart({ source }) {\n const\n {\n timeAxisViewModel,\n timeResolution\n } = this.client,\n resolutionDurationMS = DateHelper.asMilliseconds(timeResolution.increment, timeResolution.unit);\n // Prevent resizing smaller than one resolution increment\n this.resize.minWidth = timeAxisViewModel.getDistanceForDuration(resolutionDurationMS);\n }\n onResizeDrag({ context }) {\n this.updateFromCoords(\n context.newX,\n context.newY,\n context.newWidth ?? context.elementWidth,\n context.newHeight ?? context.elementHeight\n );\n }\n onDragStart(event) {\n super.onDragStart(event);\n const { context } = event;\n context.elementWidth = context.element.offsetWidth;\n context.elementHeight = context.element.offsetHeight;\n }\n onDrag({ context }) {\n this.updateFromCoords(\n context.newX,\n context.newY,\n context.elementWidth,\n context.elementHeight\n );\n }\n onDrop() {\n this.client.element.classList.remove('b-dragging-timerange');\n }\n onDragReset() {\n this.refresh();\n }\n get timeRanges() {\n return this.selectedTimeSpan ? [this.selectedTimeSpan] : [];\n }\n // Always render the selection\n shouldRenderRange() {\n return true;\n }\n changeSelectedTimeSpan(timeSpan) {\n if (timeSpan) {\n timeSpan.id = 'time-selection';\n }\n return timeSpan;\n }\n updateSelectedTimeSpan(timeSpan) {\n if (!this.isConfiguring) {\n this.refresh();\n }\n /**\n * Triggered when time selection changes\n * @event timeSelectionChange\n * @on-owner\n * @param {Scheduler.view.Scheduler} source The scheduler\n * @param {Date} startDate The selected range start date, or `undefined`\n * @param {Date} endDate The selected range end date, or `undefined`\n */\n this.client.trigger('timeSelectionChange', {\n ...timeSpan ?? {}\n });\n }\n}\nTimeSelection._$name = 'TimeSelection'; GridFeatureManager.registerFeature(TimeSelection, false, 'Scheduler');\n", "export const ScheduleRange = {\n completeview : 'completeview',\n // completedata : 'completedata',\n currentview : 'currentview',\n daterange : 'daterange'\n};\n", "import DateHelper from '../../../../Core/helper/DateHelper.js';\nimport Rectangle from '../../../../Core/helper/util/Rectangle.js';\nimport DomHelper from '../../../../Core/helper/DomHelper.js';\nimport DomSync from '../../../../Core/helper/DomSync.js';\nimport { ScheduleRange } from '../Utils.js';\nimport AbstractTimeRanges from '../../AbstractTimeRanges.js';\nconst immediatePromise = Promise.resolve();\nexport default base => class SchedulerExporterMixin extends base {\n async scrollRowIntoView(client, index) {\n const\n {\n rowManager,\n scrollable\n } = client,\n oldY = scrollable.y;\n // If it's a valid index to scroll to, then try it.\n if (index < client.store.count) {\n // Scroll the requested row to the viewport top\n scrollable.scrollTo(null, rowManager.calculateTop(index));\n // If that initiated a scroll, we need to wait for the row to be rendered, so return\n // a Promise which resolves when that happens.\n if (scrollable.y !== oldY) {\n // GridBase adds listener to vertical scroll to update rows. Rows might be or might not be updated,\n // but at the end of each scroll grid will trigger `scroll` event. So far this is the only scroll event\n // triggered by the grid itself and it is different from `scroll` event on scrollable.\n return new Promise(resolve => {\n const detacher = client.ion({\n scroll({ scrollTop }) {\n // future-proof: only react to scroll event with certain argument\n if (scrollTop != null && rowManager.getRow(index)) {\n detacher();\n resolve();\n }\n }\n });\n });\n }\n }\n // No scroll occurred. Promise must be resolved immediately\n return immediatePromise;\n }\n async scrollToDate(client, date) {\n let scrollFired = false;\n const promises = [];\n // Time axis is updated on element scroll, which is async event. We need to synchronize this logic.\n // If element horizontal scroll is changed then sync event is fired. We add listener to that one specific event\n // and remove it right after scrollToDate sync code, keeping listeners clean. If scrolling occurred, we need\n // to wait until time header is updated.\n const detacher = client.timeAxisSubGrid.scrollable.ion({\n scrollStart({ x }) {\n if (x != null) {\n scrollFired = true;\n }\n }\n });\n // added `block: start` to do scrolling faster\n // it moves data to begin of visible area that is longer section for re-render\n promises.push(client.scrollToDate(date, { block : 'start' }));\n detacher();\n if (scrollFired) {\n // We have to wait for scrollEnd event before moving forward. When exporting large view we might have to scroll\n // extensively and it might occur that requested scroll position would not be reached because concurrent\n // scrollEnd events would move scroll back.\n // scrollEnd is on a 100ms timer *after* the last scroll event fired, so all necessary\n // updated will have occurred.\n // Covered by Gantt/tests/feature/export/MultiPageVertical.t.js\n promises.push(client.timeAxisSubGrid.header.scrollable.await('scrollEnd', { checkLog : false }));\n }\n await Promise.all(promises);\n }\n cloneElement(element, target, clear) {\n super.cloneElement(element, target, clear);\n const clonedEl = this.element.querySelector('.b-schedulerbase');\n // Remove default animation classes\n clonedEl?.classList.remove(...['fade-in', 'slide-from-left', 'slide-from-top', 'zoom-in'].map(name => `b-initial-${name}`));\n }\n async prepareComponent(config) {\n const\n me = this,\n { client } = config,\n { currentOrientation } = client,\n includeTimeline = client.timeAxisSubGrid.width > 0;\n switch (config.scheduleRange) {\n case ScheduleRange.completeview:\n config.rangeStart = client.startDate;\n config.rangeEnd = client.endDate;\n break;\n case ScheduleRange.currentview: {\n const { startDate, endDate } = client.visibleDateRange;\n config.rangeStart = startDate;\n config.rangeEnd = endDate;\n break;\n }\n }\n await client.waitForAnimations();\n // Disable infinite scroll before export, so it doesn't change time span\n config.infiniteScroll = client.infiniteScroll;\n client.infiniteScroll = false;\n // Don't change timespan if time axis subgrid is not visible\n if (includeTimeline) {\n // https://github.com/bryntum/support/issues/8220\n // setTimeSpan should not be called on infinite scroll and visible schedule export\n if (config.scheduleRange !== ScheduleRange.currentview) {\n // set new timespan before calling parent to get proper scheduler header/content size\n client.setTimeSpan(config.rangeStart, config.rangeEnd);\n }\n if (config.scheduleRange === ScheduleRange.daterange) {\n // In case time axis is filtered or generated by custom fn we need to adjust passed ranges to actual dates\n config.rangeStart = client.startDate;\n config.rangeEnd = client.endDate;\n }\n // Access svgCanvas el to create dependency canvas early\n client.svgCanvas;\n }\n // Disable event animations during export\n me._oldEnableEventAnimations = client.enableEventAnimations;\n client.enableEventAnimations = false;\n // Add scroll buffer for the horizontal rendering\n if (currentOrientation.isHorizontalRendering) {\n me._oldScrollBuffer = currentOrientation.scrollBuffer;\n me._oldVerticalBuffer = currentOrientation.verticalBufferSize;\n currentOrientation.scrollBuffer = 100;\n currentOrientation.verticalBufferSize = -1;\n }\n // Raise flag on the client to render all suggested dependencies\n client.ignoreViewBox = true;\n await super.prepareComponent(config);\n const\n { exportMeta, element } = me,\n fgCanvasEl = element.querySelector('.b-sch-foreground-canvas'),\n timeAxisEl = element.querySelector('.b-horizontaltimeaxis');\n exportMeta.includeTimeline = includeTimeline;\n if (includeTimeline && config.scheduleRange !== ScheduleRange.completeview) {\n // If we are exporting subrange of dates we need to change subgrid size accordingly\n exportMeta.totalWidth -= exportMeta.subGrids.normal.width;\n exportMeta.totalWidth += exportMeta.subGrids.normal.width = client.timeAxisViewModel.getDistanceBetweenDates(config.rangeStart, config.rangeEnd);\n const\n horizontalPages = Math.ceil(exportMeta.totalWidth / exportMeta.pageWidth),\n totalPages = horizontalPages * exportMeta.verticalPages;\n exportMeta.horizontalPages = horizontalPages;\n exportMeta.totalPages = totalPages;\n // store left scroll to imitate normal grid/header scroll using margin\n exportMeta.subGrids.normal.scrollLeft = client.getCoordinateFromDate(config.rangeStart);\n }\n exportMeta.timeAxisHeaders = [];\n exportMeta.timeAxisPlaceholders = [];\n exportMeta.headersCollected = false;\n exportMeta.eventsBoxes = new Map();\n exportMeta.client = client;\n if (!includeTimeline) {\n return;\n }\n DomHelper.forEachSelector(timeAxisEl, '.b-sch-header-row', headerRow => {\n exportMeta.timeAxisPlaceholders.push(me.createPlaceholder(headerRow));\n exportMeta.timeAxisHeaders.push(new Map());\n });\n // Add placeholder for events, clear all event elements, but not the entire elements as it contains svg canvas\n exportMeta.subGrids.normal.eventsPlaceholder = me.createPlaceholder(fgCanvasEl, false);\n DomHelper.removeEachSelector(fgCanvasEl, '.b-sch-event-wrap,.b-sch-resourcetimerange');\n DomHelper.removeEachSelector(me.element, '.b-released');\n const\n columnLinesCanvas = element.querySelector('.b-column-lines-canvas'),\n timeRangesHeaderCanvas = element.querySelector('.b-sch-timeaxiscolumn .b-timeranges-canvas'),\n timeRangesBodyCanvas = element.querySelector('.b-timeaxissubgrid .b-timeranges-canvas');\n if (client.hasActiveFeature('columnLines') && columnLinesCanvas) {\n exportMeta.columnLinesPlaceholder = me.createPlaceholder(columnLinesCanvas);\n exportMeta.columnLines = { lines : new Map(), majorLines : new Map() };\n }\n // There are several features that use timeranges canvas, we need to check them all\n if (timeRangesBodyCanvas && Object.values(client.features).some(f => f instanceof AbstractTimeRanges)) {\n exportMeta.timeRanges = {};\n // header is optional\n if (timeRangesHeaderCanvas) {\n exportMeta.timeRanges.header = config.enableDirectRendering ? '' : {};\n exportMeta.timeRangesHeaderPlaceholder = me.createPlaceholder(timeRangesHeaderCanvas);\n }\n exportMeta.timeRanges.body = config.enableDirectRendering ? '' : {};\n exportMeta.timeRangesBodyPlaceholder = me.createPlaceholder(timeRangesBodyCanvas);\n }\n if (client.hasActiveFeature('dependencies')) {\n client.features.dependencies.fillDrawingCache();\n const svgCanvasEl = element.querySelector(`[id=\"${client.svgCanvas.getAttribute('id')}\"]`);\n // Same as above, clear only dependency lines, because there might be markers added by user\n if (svgCanvasEl) {\n exportMeta.dependencyCanvasEl = svgCanvasEl;\n exportMeta.dependenciesPlaceholder = me.createPlaceholder(svgCanvasEl, false, {\n ns : 'http://www.w3.org/2000/svg',\n tag : 'path'\n });\n DomHelper.removeEachSelector(svgCanvasEl, '.b-sch-dependency');\n }\n }\n // We need to scroll component to date to calculate correct start margin\n if (includeTimeline && !DateHelper.betweenLesser(config.rangeStart, client.startDate, client.endDate)) {\n await me.scrollToDate(client, config.rangeStart);\n }\n }\n async restoreState(config) {\n let waitForHorizontalScroll = false;\n const\n { client } = config,\n promises = [];\n // If scroll will be changed during restoring state (and it will likely be), raise a flag that exporter should\n // wait for scrollEnd event before releasing control\n const detacher = client.timeAxisSubGrid.scrollable.ion({\n scrollStart({ x }) {\n // HACK: scrollStart might actually fire when scroll is set to existing value\n if (this.element.scrollLeft !== x) {\n waitForHorizontalScroll = true;\n }\n }\n });\n promises.push(super.restoreState(config));\n // Scroll start will be fired synchronously\n detacher();\n if (waitForHorizontalScroll) {\n promises.push(client.timeAxisSubGrid.header.scrollable.await('scrollEnd', { checkLog : false }));\n }\n await Promise.all(promises);\n }\n async restoreComponent(config) {\n const\n { client } = config,\n { currentOrientation } = client;\n client.ignoreViewBox = false;\n client.infiniteScroll = config.infiniteScroll;\n client.enableEventAnimations = this._oldEnableEventAnimations;\n if (currentOrientation.isHorizontalRendering) {\n currentOrientation.scrollBuffer = this._oldScrollBuffer;\n currentOrientation.verticalBufferSize = this._oldVerticalBuffer;\n }\n await super.restoreComponent(config);\n }\n async onRowsCollected(rows, config) {\n const me = this;\n await super.onRowsCollected(rows, config);\n // Only collect this data if timeline is visible\n if (me.exportMeta.includeTimeline) {\n const\n { client, enableDirectRendering } = config,\n { timeView } = client,\n { pageRangeStart, pageRangeEnd } = me.getCurrentPageDateRange(config);\n if (enableDirectRendering) {\n // If first page does not include timeline we don't need to render anything for it\n if (pageRangeStart && pageRangeEnd) {\n me.renderHeaders(config, pageRangeStart, pageRangeEnd);\n me.renderLines(config, pageRangeStart, pageRangeEnd);\n me.renderRanges(config, pageRangeStart, pageRangeEnd);\n me.renderEvents(config, rows, pageRangeStart, pageRangeEnd);\n }\n }\n else {\n // Exported page may not contain timeline view, in which case we need to fall through\n if (pageRangeStart) {\n let rangeProcessed = false;\n await me.scrollToDate(client, pageRangeStart);\n // Time axis and events are only rendered for the visible time span\n // we need to scroll the view and gather events/timeline elements\n // while (timeView.endDate <= config.rangeEnd) {\n while (!rangeProcessed) {\n me.collectLines(config);\n me.collectHeaders(config);\n me.collectRanges(config);\n me.collectEvents(rows, config);\n if (DateHelper.timeSpanContains(timeView.startDate, timeView.endDate, pageRangeStart, pageRangeEnd)) {\n rangeProcessed = true;\n }\n else if (timeView.endDate.getTime() >= pageRangeEnd.getTime()) {\n rangeProcessed = true;\n }\n else {\n const endDate = timeView.endDate;\n await me.scrollToDate(client, timeView.endDate);\n // If timeview end date is same as before scroll it means client is not able to scroll to date\n // and will go into infinite loop unless we stop it\n if (endDate.getTime() === timeView.endDate.getTime()) {\n throw new Error('Could not scroll to date');\n }\n }\n }\n }\n await me.scrollToDate(client, config.rangeStart);\n }\n }\n }\n getCurrentPageDateRange({ rangeStart, rangeEnd, enableDirectRendering, client }) {\n const\n me = this,\n { exportMeta } = me,\n { horizontalPages, horizontalPosition, pageWidth, subGrids } = exportMeta;\n let pageRangeStart, pageRangeEnd;\n // when exporting to multiple pages we only need to scroll sub-range within visible time span\n if (horizontalPages > 1) {\n const\n pageStartX = horizontalPosition * pageWidth,\n pageEndX = (horizontalPosition + 1) * pageWidth,\n // Assuming normal grid is right next to right side of the locked grid\n // There is also a default splitter\n normalGridX = subGrids.locked.width + subGrids.locked.splitterWidth;\n if (pageEndX <= normalGridX) {\n pageRangeEnd = pageRangeStart = null;\n }\n else {\n const { scrollLeft = 0 } = subGrids.normal;\n pageRangeStart = client.getDateFromCoordinate(Math.max(pageStartX - normalGridX + scrollLeft, 0));\n // Extend visible schedule by 20% to cover up possible splitter\n const multiplier = enableDirectRendering ? 1 : 1.2;\n pageRangeEnd = client.getDateFromCoordinate((pageEndX - normalGridX + scrollLeft) * multiplier) || rangeEnd;\n }\n }\n else {\n pageRangeStart = rangeStart;\n pageRangeEnd = rangeEnd;\n }\n return {\n pageRangeStart,\n pageRangeEnd\n };\n }\n prepareExportElement() {\n const\n { element, exportMeta } = this,\n { id, headerId, footerId, scrollLeft } = exportMeta.subGrids.normal,\n el = element.querySelector(`[id=\"${id}\"]`);\n el.querySelectorAll('.b-sch-canvas').forEach(canvasEl => {\n // Align canvases to last exported row bottom. If no such property exists - remove inline height\n if (exportMeta.lastExportedRowBottom) {\n canvasEl.style.height = `${exportMeta.lastExportedRowBottom}px`;\n }\n else {\n canvasEl.style.height = '';\n }\n // Simulate horizontal scroll\n if (scrollLeft) {\n canvasEl.style.marginLeft = `-${scrollLeft}px`;\n }\n });\n if (scrollLeft) {\n [headerId, footerId].forEach(id => {\n const el = element.querySelector(`[id=\"${id}\"] .b-widget-scroller`);\n if (el) {\n el.style.marginLeft = `-${scrollLeft}px`;\n }\n });\n }\n return super.prepareExportElement();\n }\n collectHeaders(config) {\n const\n me = this,\n { client } = config,\n { exportMeta } = me;\n // We only need to collect headers once, this flag is raised once they are collected along all exported range\n if (!exportMeta.headersCollected) {\n const\n timeAxisEl = client.timeView.element,\n timeAxisHeaders = exportMeta.timeAxisHeaders;\n DomHelper.forEachSelector(timeAxisEl, '.b-sch-header-row', (headerRow, index, headerRows) => {\n const headersMap = timeAxisHeaders[index];\n DomHelper.forEachSelector(headerRow, '.b-sch-header-timeaxis-cell', el => {\n if (!headersMap.has(el.dataset.tickIndex)) {\n headersMap.set(el.dataset.tickIndex, el.outerHTML);\n }\n });\n if (index === headerRows.length - 1 && headersMap.has(String(client.timeAxis.count - 1))) {\n exportMeta.headersCollected = true;\n }\n });\n }\n }\n collectRanges(config) {\n const\n me = this,\n { client } = config,\n { exportMeta } = me,\n { timeRanges } = exportMeta;\n // Header elements and time range elements are rendered for different ranges. E.g. it is possible for headers\n // to be rendered till the end but time ranges to be rendered for shorter range.\n if (timeRanges) {\n const\n headerCanvas = client.element.querySelector('.b-timeranges-header-canvas'),\n bodyCanvas = client.element.querySelector('.b-timeranges-body-canvas');\n if (headerCanvas) {\n DomHelper.forEachSelector(headerCanvas, '.b-sch-timerange', el => {\n timeRanges.header[el.dataset.id] = el.outerHTML;\n });\n }\n DomHelper.forEachSelector(bodyCanvas, '.b-sch-timerange', el => {\n timeRanges.body[el.dataset.id] = el.outerHTML;\n });\n }\n }\n collectLines(config) {\n const\n me = this,\n { client } = config,\n { exportMeta } = me,\n { columnLines } = exportMeta;\n if (!exportMeta.headersCollected && columnLines) {\n client.timeAxisSubGridElement.querySelectorAll('.b-column-line, .b-column-line-major').forEach(lineEl => {\n if (lineEl.classList.contains('b-column-line')) {\n const lineIndex = Number(lineEl.dataset.line.replace(/line-/, ''));\n columnLines.lines.set(lineIndex, lineEl.outerHTML);\n }\n else {\n const lineIndex = Number(lineEl.dataset.line.replace(/major-/, ''));\n columnLines.majorLines.set(lineIndex, lineEl.outerHTML);\n }\n });\n }\n }\n collectEvents(rows, config) {\n const\n me = this,\n addedRows = rows.length,\n { client } = config,\n normalRows = me.exportMeta.subGrids.normal.rows;\n rows.forEach((row, index) => {\n const\n rowConfig = normalRows[normalRows.length - addedRows + index],\n resource = client.store.getAt(row.dataIndex),\n eventsMap = rowConfig[3];\n resource.events?.forEach(event => {\n if (event.isScheduled) {\n let el = client.getElementFromEventRecord(event, resource);\n if (el && (el = el.parentElement) && !eventsMap.has(event.id)) {\n eventsMap.set(event.id, [el.outerHTML, Rectangle.from(el, el.offsetParent)]);\n }\n }\n });\n resource.timeRanges?.forEach(timeRange => {\n const\n elId = client.features.resourceTimeRanges?.generateElementId(timeRange) || '',\n el = client.foregroundCanvas.syncIdMap[elId];\n if (el && !eventsMap.has(elId)) {\n eventsMap.set(elId, [el.outerHTML, Rectangle.from(el, el.offsetParent)]);\n }\n });\n });\n }\n //#region Direct rendering\n renderHeaders(config, start, end) {\n const\n me = this,\n { exportMeta } = me,\n { client } = config,\n timeAxisHeaders = exportMeta.timeAxisHeaders,\n // Get the time axis view reference that we will use to build cells for specific time ranges\n { timeAxisView } = client.timeAxisColumn,\n domConfig = timeAxisView.buildCells(start, end),\n targetElement = document.createElement('div');\n DomSync.sync({\n targetElement,\n domConfig\n });\n DomHelper.forEachSelector(targetElement, '.b-sch-header-row', (headerRow, index) => {\n const headersMap = timeAxisHeaders[index];\n DomHelper.forEachSelector(headerRow, '.b-sch-header-timeaxis-cell', el => {\n if (!headersMap.has(el.dataset.tickIndex)) {\n headersMap.set(el.dataset.tickIndex, el.outerHTML);\n }\n });\n });\n }\n renderEvents(config, rows, start, end) {\n const\n me = this,\n { client } = config,\n normalRows = me.exportMeta.subGrids.normal.rows;\n rows.forEach((row, index) => {\n const\n rowConfig = normalRows[index],\n eventsMap = rowConfig[3],\n resource = client.store.getAt(row.dataIndex),\n resourceLayout = client.currentOrientation.getResourceLayout(resource),\n left = client.getCoordinateFromDate(start),\n right = client.getCoordinateFromDate(end),\n eventDOMConfigs = client.currentOrientation.getEventDOMConfigForCurrentView(resourceLayout, row, left, right),\n targetElement = document.createElement('div');\n eventDOMConfigs.forEach(domConfig => {\n const\n { eventId } = domConfig.dataset,\n { left, top, width, height } = domConfig.style;\n DomSync.sync({\n targetElement,\n domConfig\n });\n eventsMap.set(eventId, [targetElement.outerHTML, new Rectangle(left, top, width, height)]);\n });\n });\n }\n renderLines(config, start, end) {\n const\n me = this,\n { client } = config,\n { exportMeta } = me,\n { columnLines } = exportMeta;\n if (columnLines) {\n const\n domConfigs = client.features.columnLines.getColumnLinesDOMConfig(start, end),\n targetElement = document.createElement('div');\n DomSync.sync({\n targetElement,\n domConfig : {\n onlyChildren : true,\n children : domConfigs\n }\n });\n // Put all lines HTML to a single key in the set. That allows us to share code path with legacy export mode\n columnLines.lines.set(0, targetElement.innerHTML);\n }\n }\n renderRanges(config, start, end) {\n const\n me = this,\n { client } = config,\n { exportMeta } = me,\n { timeRanges } = exportMeta;\n if (timeRanges) {\n // Clean-up time ranges before rendering new batch\n timeRanges.body = timeRanges.header = '';\n for (const feature of Object.values(client.features).filter(f => f instanceof AbstractTimeRanges)) {\n const\n domConfigs = feature.getDOMConfig(start, end),\n targetElement = document.createElement('div');\n // domConfigs is an array of two elements - first includes time range configs for body, second - for head\n domConfigs.forEach((children, i) => {\n DomSync.sync({\n targetElement,\n domConfig : {\n children,\n onlyChildren : true\n }\n });\n // body configs\n if (i === 0) {\n timeRanges.body += targetElement.innerHTML;\n }\n // header configs\n else {\n timeRanges.header += targetElement.innerHTML;\n }\n });\n }\n }\n }\n //#endregion\n buildPageHtml(config) {\n const\n me = this,\n {\n subGrids,\n timeAxisHeaders,\n timeAxisPlaceholders,\n columnLines,\n columnLinesPlaceholder,\n timeRanges,\n timeRangesHeaderPlaceholder,\n timeRangesBodyPlaceholder\n } = me.exportMeta,\n { enableDirectRendering } = config;\n // Now when rows are collected, we need to add them to exported grid\n let html = me.prepareExportElement();\n Object.values(subGrids).forEach(({ placeHolder, eventsPlaceholder, rows, mergedCellsHtml }) => {\n const\n placeHolderText = placeHolder.outerHTML,\n // Rows can be repositioned, in which case event related to that row should also be translated\n { resources, events } = me.positionRows(rows, config);\n let contentHtml = resources.join('');\n if (mergedCellsHtml?.length) {\n contentHtml += `
${mergedCellsHtml.join('')}
`;\n }\n html = html.replace(placeHolderText, contentHtml);\n if (eventsPlaceholder) {\n html = html.replace(eventsPlaceholder.outerHTML, events.join(''));\n }\n });\n timeAxisHeaders.forEach((headers, index) => {\n html = html.replace(timeAxisPlaceholders[index].outerHTML, Array.from(headers.values()).join(''));\n });\n if (columnLines) {\n const lineElements = Array.from(columnLines.lines.values()).concat(Array.from(columnLines.majorLines.values()));\n html = html.replace(columnLinesPlaceholder.outerHTML, lineElements.join(''));\n // Lines are collected once for old mode, don't clear them\n if (enableDirectRendering) {\n me.exportMeta.columnLines.lines.clear();\n me.exportMeta.columnLines.majorLines.clear();\n }\n }\n if (timeRanges) {\n if (enableDirectRendering) {\n html = html.replace(timeRangesBodyPlaceholder.outerHTML, timeRanges.body);\n // time ranges header element is optional\n if (timeRangesHeaderPlaceholder) {\n html = html.replace(timeRangesHeaderPlaceholder.outerHTML, timeRanges.header);\n }\n me.exportMeta.timeRanges = {};\n }\n else {\n html = html.replace(timeRangesBodyPlaceholder.outerHTML, Object.values(timeRanges.body).join(''));\n // time ranges header element is optional\n if (timeRangesHeaderPlaceholder) {\n html = html.replace(timeRangesHeaderPlaceholder.outerHTML, Object.values(timeRanges.body).join(''));\n }\n }\n }\n html = me.buildDependenciesHtml(html);\n return html;\n }\n getEventBox(event) {\n const\n me = this,\n {\n eventsBoxes,\n enableDirectRendering\n } = me.exportMeta;\n const box = event && eventsBoxes.get(String(event.id));\n // In scheduler milestone box left edge is aligned with milestone start date. Later element is rotated and\n // shifted by CSS by 50% of its width. Dependency feature relies on actual element sizes, but pdf export\n // does not render actual elements. Therefore, we need to adjust the box.\n if (enableDirectRendering && box && event.isMilestone) {\n box.translate(-box.width / 2, 0);\n }\n return box;\n }\n renderDependencies() {\n const\n me = this,\n {\n client,\n eventsBoxes\n } = me.exportMeta,\n { dependencies } = client,\n dependencyFeature = client.features.dependencies,\n targetElement = DomHelper.createElement();\n let draw = false;\n dependencies.forEach(dependency => {\n if ((!eventsBoxes.has(String(dependency.from)) &&\n !eventsBoxes.has(String(dependency.to))) ||\n !dependencyFeature.isDependencyVisible(dependency)) {\n return;\n }\n const\n fromBox = me.getEventBox(dependency.fromEvent),\n toBox = me.getEventBox(dependency.toEvent);\n dependencyFeature.drawDependency(dependency, true, { from : fromBox?.clone(), to : toBox?.clone() });\n draw = true;\n });\n // Force dom sync\n if (draw) {\n dependencyFeature.domSync(targetElement, true);\n }\n return targetElement.innerHTML;\n }\n buildDependenciesHtml(html) {\n const { dependenciesPlaceholder, includeTimeline } = this.exportMeta;\n if (dependenciesPlaceholder && includeTimeline) {\n const placeholder = dependenciesPlaceholder.outerHTML;\n html = html.replace(placeholder, this.renderDependencies());\n }\n return html;\n }\n};\n", "import GridMultiPageExporter from '../../../../Grid/feature/export/exporter/MultiPageExporter.js';\nimport SchedulerExporterMixin from './SchedulerExporterMixin.js';\n/**\n * @module Scheduler/feature/export/exporter/MultiPageExporter\n */\n/**\n * A multiple page exporter. Used by the {@link Scheduler.feature.export.PdfExport} feature to export to multiple pages.\n * You do not need to use this class directly.\n *\n * ### Extending exporter\n *\n * ```javascript\n * class MyMultiPageExporter extends MultiPageExporter {\n * // type is required for exporter\n * static get type() {\n * return 'mymultipageexporter';\n * }\n *\n * get stylesheets() {\n * const stylesheets = super.stylesheets;\n *\n * stylesheets.forEach(styleNodeOrLinkTag => doSmth(styleNodeOrLinkTag))\n *\n * return stylesheets;\n * }\n * }\n *\n * const scheduler = new Scheduler({\n * features : {\n * pdfExport : {\n * // this export feature is configured with only one exporter\n * exporters : [MyMultiPageExporter]\n * }\n * }\n * });\n *\n * // run export with the new exporter\n * scheduler.features.pdfExport.export({ exporter : 'mymultipageexporter' });\n * ```\n *\n * @classtype multipage\n * @extends Grid/feature/export/exporter/MultiPageExporter\n *\n * @typings Grid.feature.export.exporter.MultiPageExporter -> Grid.feature.export.exporter.GridMultiPageExporter\n */\nexport default class MultiPageExporter extends SchedulerExporterMixin(GridMultiPageExporter) {\n static get $name() {\n return 'MultiPageExporter';\n }\n static get type() {\n return 'multipage';\n }\n async stateNextPage(config) {\n await super.stateNextPage(config);\n this.exportMeta.eventsBoxes.clear();\n }\n positionRows(rows) {\n const\n resources = [],\n events = [];\n // In case of variable row height row vertical position is not guaranteed to increase\n // monotonously. Position row manually instead\n rows.forEach(([html, top, height, eventsHtml]) => {\n resources.push(html);\n eventsHtml && Array.from(eventsHtml.entries()).forEach(([key, [html, box, extras = []]]) => {\n events.push(html + extras.join(''));\n // Store event box to render dependencies later\n this.exportMeta.eventsBoxes.set(String(key), box);\n });\n });\n return { resources, events };\n }\n}\nMultiPageExporter._$name = 'MultiPageExporter';", "import GridMultiPageVerticalExporter from '../../../../Grid/feature/export/exporter/MultiPageVerticalExporter.js';\nimport SchedulerExporterMixin from './SchedulerExporterMixin.js';\nimport { ScheduleRange } from '../Utils.js';\n/**\n * @module Scheduler/feature/export/exporter/MultiPageVerticalExporter\n */\n/**\n * A vertical multiple page exporter. Used by the {@link Scheduler.feature.export.PdfExport} feature to export to\n * multiple pages. Content will be scaled in a horizontal direction to fit the page.\n *\n * You do not need to use this class directly.\n *\n * ### Extending exporter\n *\n * ```javascript\n * class MyMultiPageVerticalExporter extends MultiPageVerticalExporter {\n * // type is required for exporter\n * static get type() {\n * return 'mymultipageverticalexporter';\n * }\n *\n * get stylesheets() {\n * const stylesheets = super.stylesheets;\n *\n * stylesheets.forEach(styleNodeOrLinkTag => doSmth(styleNodeOrLinkTag))\n *\n * return stylesheets;\n * }\n * }\n *\n * const scheduler = new Scheduler({\n * features : {\n * pdfExport : {\n * // this export feature is configured with only one exporter\n * exporters : [MyMultiPageVerticalExporter]\n * }\n * }\n * });\n *\n * // run export with the new exporter\n * scheduler.features.pdfExport.export({ exporter : 'mymultipageverticalexporter' });\n * ```\n *\n * @classtype multipagevertical\n * @extends Grid/feature/export/exporter/MultiPageVerticalExporter\n *\n * @typings Grid.feature.export.exporter.MultiPageVerticalExporter -> Grid.feature.export.exporter.GridMultiPageVerticalExporter\n */\nexport default class MultiPageVerticalExporter extends SchedulerExporterMixin(GridMultiPageVerticalExporter) {\n static get $name() {\n return 'MultiPageVerticalExporter';\n }\n static get type() {\n return 'multipagevertical';\n }\n async stateNextPage(config) {\n await super.stateNextPage(config);\n this.exportMeta.eventsBoxes.clear();\n }\n async prepareComponent(config) {\n await super.prepareComponent(config);\n // Scheduler exporter mixin can update totalWidth, so we need to adjust pages and scale here again\n if (config.scheduleRange !== ScheduleRange.completeview) {\n this.estimateTotalPages(config);\n }\n }\n positionRows(rows) {\n const\n resources = [],\n events = [];\n // In case of variable row height row vertical position is not guaranteed to increase\n // monotonously. Position row manually instead\n rows.forEach(([html, , , eventsHtml]) => {\n resources.push(html);\n eventsHtml && Array.from(eventsHtml.entries()).forEach(([key, [html, box, extras = []]]) => {\n events.push(html + extras.join(''));\n // Store event box to render dependencies later\n this.exportMeta.eventsBoxes.set(String(key), box);\n });\n });\n return { resources, events };\n }\n}\nMultiPageVerticalExporter._$name = 'MultiPageVerticalExporter';", "import { ScheduleRange } from '../../../feature/export/Utils.js';\nimport Combo from '../../../../Core/widget/Combo.js';\nexport default class ScheduleRangeCombo extends Combo {\n static get $name() {\n return 'ScheduleRangeCombo';\n }\n // Factoryable type name\n static get type() {\n return 'schedulerangecombo';\n }\n static get defaultConfig() {\n return {\n editable : false,\n localizeDisplayFields : true,\n displayField : 'text',\n buildItems() {\n return Object.entries(ScheduleRange).map(([id, text]) => ({ value : id, text : 'L{' + text + '}' }));\n }\n };\n }\n}\n// Register this widget type with its Factory\nScheduleRangeCombo.initClass();\nScheduleRangeCombo._$name = 'ScheduleRangeCombo';", "import DateHelper from '../../../Core/helper/DateHelper.js';\nimport GridExportDialog from '../../../Grid/view/export/ExportDialog.js';\nimport { ScheduleRange } from '../../feature/export/Utils.js';\nimport '../../view/export/field/ScheduleRangeCombo.js';\nimport Field from '../../../Core/widget/Field.js';\n/**\n * @module Scheduler/view/export/SchedulerExportDialog\n */\n/**\n * Extends the Grid's {@link Grid.view.export.ExportDialog} and adds a few extra fields specific to the scheduler.\n *\n * ## Default widgets\n *\n * The default widgets of this dialog are:\n *\n * | Widget ref | Type | Weight | Description |\n * |------------------------|------------------------------------------|--------|----------------------------------------------------- |\n * | `columnsField` | {@link Core.widget.Combo Combo} | 100 | Choose columns to export |\n * | `scheduleRangeField` | {@link Core.widget.Combo Combo} | 150 | Choose date range to export |\n * | `rangesContainer` | {@link Core.widget.Container Container} | 151 | Container for range fields |\n * | \\>`rangeStartField` | {@link Core.widget.DateField DateField} | 10 | Choose date range start |\n * | \\>`rangeEndField` | {@link Core.widget.DateField DateField} | 30 | Choose date range end |\n * | `rowsRangeField` | {@link Core.widget.Combo Combo} | 200 | Choose which rows to export |\n * | `exporterTypeField` | {@link Core.widget.Combo Combo} | 300 | Type of the exporter to use |\n * | `alignRowsField` | {@link Core.widget.Checkbox Checkbox} | 400 | Align row top to the page top on every exported page |\n * | `repeatHeaderField` | {@link Core.widget.Checkbox Checkbox} | 500 | Toggle repeating headers on / off |\n * | `fileFormatField` | {@link Core.widget.Combo Combo} | 600 | Choose file format |\n * | `paperFormatField` | {@link Core.widget.Combo Combo} | 700 | Choose paper format |\n * | `orientationField` | {@link Core.widget.Combo Combo} | 800 | Choose orientation |\n *\n *
\n *
>
first level of submenu
\n *
\n *\n * The default buttons are:\n *\n * | Widget ref | Type | Weight | Description |\n * |------------------------|------------------------------------------|--------|------------------------------------------------------|\n * | `exportButton` | {@link Core.widget.Button Button} | 100 | Triggers export |\n * | `cancelButton` | {@link Core.widget.Button Button} | 200 | Cancel export |\n *\n * ## Configuring default widgets\n *\n * Widgets can be customized with {@link Scheduler.feature.export.PdfExport#config-exportDialog} config:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * pdfExport : {\n * exportDialog : {\n * items : {\n * // hide the field\n * orientationField : { hidden : true },\n *\n * // reorder fields\n * exporterTypeField : { weight : 150 },\n *\n * // change default format in exporter\n * fileFormatField : { value : 'png' },\n *\n * // Configure nested fields\n * rangesContainer : {\n * items : {\n * rangeStartField : { value : new Date() },\n * rangeEndField : { value : new Date() }\n * }\n * }\n * }\n * }\n * }\n * }\n * });\n *\n * scheduler.features.pdfExport.showExportDialog();\n * ```\n *\n * ## Using DateTime fields for range start/end\n *\n * This config system is also capable (but not limited to) of changing layout of the container and replacing widget type:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * pdfExport : {\n * exportDialog : {\n * items : {\n * rangesContainer : {\n * // DateTime fields are longer, so we better lay them out\n * // vertically\n * layoutStyle : {\n * flexDirection : 'column'\n * },\n * items : {\n * rangeStartField : {\n * // Use DateTime widget for ranges\n * type : 'datetime',\n *\n * // Sync label width with other fields\n * labelWidth : '12em'\n * },\n * rangeEndField : {\n * type : 'datetime',\n * labelWidth : '12em'\n * },\n * // Add a filler widget that would add a margin at the bottom\n * filler : {\n * height : '0.6em',\n * weight : 900\n * }\n * }\n * }\n * }\n * }\n * }\n * }\n * });\n *\n * ```\n *\n * ## Configuring default columns\n *\n * By default all visible columns are selected in the export dialog. This is managed by\n * {@link #config-autoSelectVisibleColumns} config. To change default selected columns you should disable this config\n * and set field value. Value should be an array of valid column ids (or column instances). This way you can\n * preselect hidden columns:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * columns : [\n * { id : 'name', text : 'Name', field : 'name' },\n * { id : 'age', text : 'Age', field : 'age' },\n * { id : 'city', text : 'City', field : 'city', hidden : true }\n * ],\n * features : {\n * pdfExport : {\n * exportDialog : {\n * autoSelectVisibleColumns : false,\n * items : {\n * columnsField : { value : ['name', 'city'] }\n * }\n * }\n * }\n * }\n * })\n *\n * // This will show export dialog with Name and City columns selected\n * // even though City column is hidden in the UI\n * scheduler.features.pdfExport.showExportDialog();\n * ```\n *\n * ## Adding fields\n *\n * You can add your own fields to the export dialog. To make such field value acessible to the feature it should follow\n * naming pattern - it should have `ref` config ending with `Field`, see other fields for reference - `orientationField`,\n * `columnsField`, etc. Fields not matching this pattern are ignored. When values are collected from the dialog, `Field`\n * part of the widget reference is removed, so `orientationField` becomes `orientation`, `fooField` becomes `foo`, etc.\n *\n * ```javascript\n * const grid = new Grid({\n * features : {\n * pdfExport : {\n * exportDialog : {\n * items : {\n * // This field gets into export config\n * fooField : {\n * type : 'text',\n * label : 'Foo',\n * value : 'FOO'\n * },\n *\n * // This one does not, because name doesn't end with `Field`\n * bar : {\n * type : 'text',\n * label : 'Bar',\n * value : 'BAR'\n * },\n *\n * // Add a container widget to wrap some fields together\n * myContainer : {\n * type : 'container',\n * items : {\n * // This one gets into config too despite the nesting level\n * bazField : {\n * type : 'text',\n * label : 'Baz',\n * value : 'BAZ'\n * }\n * }\n * }\n * }\n * }\n * }\n * }\n * });\n *\n * // Assuming export dialog is opened and export triggered with default values\n * // you can receive custom field values here\n * grid.on({\n * beforePdfExport({ config }) {\n * console.log(config.foo) // 'FOO'\n * console.log(config.bar) // undefined\n * console.log(config.baz) // 'BAZ'\n * }\n * });\n * ```\n *\n * ## Configuring widgets at runtime\n *\n * If you don't know column ids before grid instantiation or you want a flexible config, you can change widget values\n * before dialog pops up:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * columns : [\n * { id : 'name', text : 'Name', field : 'name' },\n * { id : 'age', text : 'Age', field : 'age' },\n * { id : 'city', text : 'City', field : 'city', hidden : true }\n * ],\n * features : {\n * pdfExport : true\n * }\n * });\n *\n * // Such listener would ignore autoSelectVisibleColumns config. Similar to the snippet\n * // above this will show Name and City columns\n * scheduler.features.pdfExport.exportDialog.on({\n * beforeShow() {\n * this.widgetMap.columnsField.value = ['age', 'city']\n * }\n * });\n * ```\n *\n * @extends Grid/view/export/ExportDialog\n */\nexport default class SchedulerExportDialog extends GridExportDialog {\n //region Config\n static get $name() {\n return 'SchedulerExportDialog';\n }\n static get type() {\n return 'schedulerexportdialog';\n }\n static get configurable() {\n return {\n defaults : {\n localeClass : this\n },\n items : {\n scheduleRangeField : {\n type : 'schedulerangecombo',\n label : 'L{Schedule range}',\n name : 'scheduleRange',\n value : 'completeview',\n weight : 150,\n onChange({ value }) {\n this.parent.widgetMap.rangesContainer.hidden = value !== ScheduleRange.daterange;\n }\n },\n rangesContainer : {\n type : 'container',\n flex : '1 0 100%',\n weight : 151,\n hidden : true,\n defaults : {\n localeClass : this\n },\n items : {\n filler : {\n // Filler widget to align date fields\n weight : 0,\n type : 'widget',\n style : 'margin-inline-end: -1em;'\n },\n rangeStartField : {\n type : 'datefield',\n label : 'L{Export from}',\n name : 'rangeStart',\n labelWidth : '3em',\n flex : '1 0 25%',\n weight : 10,\n onChange({ value }) {\n this.parent.widgetMap.rangeEndField.min = DateHelper.add(value, 1, 'd');\n }\n },\n rangeEndField : {\n type : 'datefield',\n label : 'L{Export to}',\n name : 'rangeEnd',\n labelWidth : '1em',\n flex : '1 0 25%',\n weight : 30,\n onChange({ value }) {\n this.parent.widgetMap.rangeStartField.max = DateHelper.add(value, -1, 'd');\n }\n }\n }\n }\n }\n };\n }\n //endregion\n onLocaleChange() {\n const\n labelWidth = this.L('labelWidth');\n this.width = this.L('L{width}');\n this.items.forEach(widget => {\n if (widget instanceof Field) {\n widget.labelWidth = labelWidth;\n }\n else if (widget.ref === 'rangesContainer') {\n widget.items[0].width = labelWidth;\n }\n });\n }\n applyInitialValues(config) {\n super.applyInitialValues(config);\n const\n me = this,\n {\n client,\n scheduleRange\n } = config,\n items = config.items = config.items || {},\n scheduleRangeField = items.scheduleRangeField = items.scheduleRangeField || {},\n rangesContainer = items.rangesContainer = items.rangesContainer || {},\n rangesContainerItems = rangesContainer.items = rangesContainer.items || {},\n filler = rangesContainerItems.filler = rangesContainerItems.filler || {},\n rangeStartField = rangesContainerItems.rangeStartField = rangesContainerItems.rangeStartField || {},\n rangeEndField = rangesContainerItems.rangeEndField = rangesContainerItems.rangeEndField || {};\n filler.width = me.L('labelWidth');\n scheduleRangeField.value = scheduleRangeField.value || scheduleRange;\n if (scheduleRangeField.value === ScheduleRange.daterange) {\n rangesContainer.hidden = false;\n }\n const rangeStart = rangeStartField.value = rangeStartField.value || client.startDate;\n rangeStartField.max = DateHelper.max(client.startDate, DateHelper.add(client.endDate, -1, 'd'));\n let rangeEnd = rangeEndField.value || client.endDate;\n // This is the only place where we can validate date range before it gets to export feature\n if (rangeEnd <= rangeStart) {\n rangeEnd = DateHelper.add(rangeStart, 1, 'd');\n }\n rangeEndField.value = rangeEnd;\n rangeEndField.min = DateHelper.min(client.endDate, DateHelper.add(client.startDate, 1, 'd'));\n }\n}\nSchedulerExportDialog._$name = 'SchedulerExportDialog';", "import GridSinglePageExporter from '../../../../Grid/feature/export/exporter/SinglePageExporter.js';\nimport SchedulerExporterMixin from './SchedulerExporterMixin.js';\n/**\n * @module Scheduler/feature/export/exporter/SinglePageExporter\n */\n/**\n * A single page exporter. Used by the {@link Scheduler.feature.export.PdfExport} feature to export to single page.\n * Content will be scaled in both directions to fit the page.\n *\n * You do not need to use this class directly.\n *\n * ### Extending exporter\n *\n * ```javascript\n * class MySinglePageExporter extends SinglePageExporter {\n * // type is required for exporter\n * static get type() {\n * return 'mysinglepageexporter';\n * }\n *\n * get stylesheets() {\n * const stylesheets = super.stylesheets;\n *\n * stylesheets.forEach(styleNodeOrLinkTag => doSmth(styleNodeOrLinkTag))\n *\n * return stylesheets;\n * }\n * }\n *\n * const scheduler = new Scheduler({\n * features : {\n * pdfExport : {\n * // this export feature is configured with only one exporter\n * exporters : [MySinglePageExporter]\n * }\n * }\n * });\n *\n * // run export with the new exporter\n * scheduler.features.pdfExport.export({ exporter : 'mysinglepageexporter' });\n * ```\n *\n * @classtype singlepage\n * @extends Grid/feature/export/exporter/SinglePageExporter\n *\n * @typings Grid.feature.export.exporter.SinglePageExporter -> Grid.feature.export.exporter.GridSinglePageExporter\n */\nexport default class SinglePageExporter extends SchedulerExporterMixin(GridSinglePageExporter) {\n static get $name() {\n return 'SinglePageExporter';\n }\n static get type() {\n return 'singlepage';\n }\n // We should not collect dependencies per each page, instead we'd render them once\n collectDependencies() {}\n positionRows(rows, config) {\n const\n resources = [],\n events = [],\n translateRe = /translate\\((\\d+.?\\d*)px, (\\d+.?\\d*)px\\)/,\n topRe = /top:.+?px/;\n if (config.enableDirectRendering) {\n rows.forEach(([html, , , eventsHtml]) => {\n resources.push(html);\n eventsHtml && Array.from(eventsHtml.entries()).forEach(([key, [html, box, extras = []]]) => {\n // Store event box to render dependencies later\n this.exportMeta.eventsBoxes.set(String(key), box);\n events.push(html + extras.join(''));\n });\n });\n }\n else {\n let currentTop = 0;\n // In case of variable row height row vertical position is not guaranteed to increase\n // monotonously. Position row manually instead\n rows.forEach(([html, top, height, eventsHtml]) => {\n // Adjust row vertical position by changing `translate` style\n resources.push(html.replace(translateRe, `translate($1px, ${currentTop}px)`));\n const rowTopDelta = currentTop - top;\n eventsHtml && Array.from(eventsHtml.entries()).forEach(([key, [html, box]]) => {\n // Fix event vertical position according to the row top\n box.translate(0, rowTopDelta);\n // Store event box to render dependencies later\n this.exportMeta.eventsBoxes.set(String(key), box);\n // Adjust event vertical position by replacing `top` style\n events.push(html.replace(topRe, `top: ${box.y}px`));\n });\n currentTop += height;\n });\n }\n return { resources, events };\n }\n}\nSinglePageExporter._$name = 'SinglePageExporter';", "import GridPdfExport from '../../../Grid/feature/export/PdfExport.js';\nimport GridFeatureManager from '../../../Grid/feature/GridFeatureManager.js';\nimport SchedulerExportDialog from '../../view/export/SchedulerExportDialog.js';\nimport SinglePageExporter from './exporter/SinglePageExporter.js';\nimport MultiPageExporter from './exporter/MultiPageExporter.js';\nimport MultiPageVerticalExporter from './exporter/MultiPageVerticalExporter.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\n/**\n * @module Scheduler/feature/export/PdfExport\n */\n/**\n * Generates PDF/PNG files from the Scheduler component.\n *\n * \"Scheduler\n *\n * **NOTE:** Server side is required to make export work!\n *\n * Check out PDF Export Server documentation and installation steps [here](https://github.com/bryntum/pdf-export-server#pdf-export-server)\n *\n * When your server is up and running, it listens to requests. The Export feature sends a request to the specified URL\n * with the HTML fragments. The server generates a PDF (or PNG) file and returns a download link (or binary, depending\n * on {@link #config-sendAsBinary} config). Then the Export feature opens the link in a new tab and the file is\n * automatically downloaded by your browser. This is configurable, see {@link #config-openAfterExport} config.\n *\n * The {@link #config-exportServer} URL must be configured. The URL can be localhost if you start the server locally,\n * or your remote server address.\n *\n * ## Usage\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * pdfExport : {\n * exportServer : 'http://localhost:8080' // Required\n * }\n * }\n * })\n *\n * // Opens popup allowing to customize export settings\n * scheduler.features.pdfExport.showExportDialog();\n *\n * // Simple export\n * scheduler.features.pdfExport.export({\n * // Required, set list of column ids to export\n * columns : scheduler.columns.map(c => c.id)\n * }).then(result => {\n * // Response instance and response content in JSON\n * let { response, responseJSON } = result;\n * });\n * ```\n *\n * Appends configs related to exporting time axis: {@link #config-scheduleRange}, {@link #config-rangeStart},\n * {@link #config-rangeEnd}\n *\n * ## Loading resources\n *\n * If you face a problem with loading resources when exporting, the cause might be that the application and the export server are hosted on different servers.\n * This is due to [Cross-Origin Resource Sharing](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) (CORS). There are 2 options how to handle this:\n * - Allow cross-origin requests from the server where your export is hosted to the server where your application is hosted;\n * - Copy all resources keeping the folder hierarchy from the server where your application is hosted to the server where your export is hosted\n * and setup paths using {@link Grid.feature.export.PdfExport#config-translateURLsToAbsolute} config and configure the export server to give access to the path:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * pdfExport : {\n * exportServer : 'http://localhost:8080',\n * // '/resources' is hardcoded in WebServer implementation\n * translateURLsToAbsolute : 'http://localhost:8080/resources'\n * }\n * }\n * })\n * ```\n *\n * ```javascript\n * // Following path would be served by this address: http://localhost:8080/resources/\n * node ./src/server.js -h 8080 -r web/application/styles\n * ```\n *\n * where `web/application/styles` is a physical root location of the copied resources, for example:\n *\n * \"Export\n *\n * This feature is **disabled** by default.\n * For info on enabling it, see {@link Grid/view/mixin/GridFeatures}.\n *\n * @extends Grid/feature/export/PdfExport\n * @classtype pdfExport\n * @feature\n *\n * @typings Grid.feature.export.PdfExport -> Grid.feature.export.GridPdfExport\n */\nexport default class PdfExport extends GridPdfExport {\n static get $name() {\n return 'PdfExport';\n }\n static get defaultConfig() {\n return {\n exporters : [SinglePageExporter, MultiPageExporter, MultiPageVerticalExporter],\n dialogClass : SchedulerExportDialog,\n /**\n * Specifies how to export time span.\n * * completeview - Complete configured time span, from scheduler start date to end date\n * * currentview - Currently visible time span\n * * daterange - Use specific date range, provided additionally in config. See {@link #config-rangeStart}/\n * {@link #config-rangeEnd}\n * @config {'completeview'|'currentview'|'daterange'}\n * @default\n * @category Export file config\n */\n scheduleRange : 'completeview',\n /**\n * Exported time span range start. Used with `daterange` config of the {@link #config-scheduleRange}\n * @config {Date}\n * @category Export file config\n */\n rangeStart : null,\n /**\n * Returns the instantiated export dialog widget as configured by {@link #config-exportDialog}\n * @member {Scheduler.view.export.SchedulerExportDialog} exportDialog\n */\n /**\n * A config object to apply to the {@link Scheduler.view.export.SchedulerExportDialog} widget.\n * @config {SchedulerExportDialogConfig} exportDialog\n */\n /**\n * Exported time span range end. Used with `daterange` config of the {@link #config-scheduleRange}\n * @config {Date}\n * @category Export file config\n */\n rangeEnd : null\n };\n }\n get defaultExportDialogConfig() {\n return ObjectHelper.copyProperties(super.defaultExportDialogConfig, this, ['scheduleRange']);\n }\n buildExportConfig(config) {\n config = super.buildExportConfig(config);\n const {\n scheduleRange,\n rangeStart,\n rangeEnd\n } = this;\n // Time axis is filtered from UI, need to append it\n if (config.columns && !config.columns.find(col => col.type === 'timeAxis')) {\n config.columns.push(config.client.timeAxisColumn.id);\n }\n return ObjectHelper.assign({\n scheduleRange,\n rangeStart,\n rangeEnd\n }, config);\n }\n}\nPdfExport._$name = 'PdfExport'; GridFeatureManager.registerFeature(PdfExport, false, 'Scheduler');\n", "import GridFeatureManager from '../../../Grid/feature/GridFeatureManager.js';\nimport PrintMixin from '../../../Grid/feature/export/mixin/PrintMixin.js';\nimport PdfExport from './PdfExport.js';\n/**\n * @module Scheduler/feature/export/Print\n */\n/**\n * Allows printing Scheduler contents using browser print dialog.\n *\n * This feature is based on {@link Scheduler.feature.export.PdfExport} with only difference that instead of sending\n * request to a backend it renders content to an IFrame element and requests print dialog for it. For more details about\n * preparing HTML for printing, please refer to the {@link Scheduler.feature.export.PdfExport} docs.\n *\n * ## Usage\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * print : true\n * }\n * })\n *\n * // Opens popup allowing to customize print settings\n * scheduler.features.print.showPrintDialog();\n *\n * // Simple print\n * scheduler.features.print.print({\n * columns : scheduler.columns.map(c => c.id)\n * });\n * ```\n *\n * This feature is **disabled** by default.\n * For info on enabling it, see {@link Grid/view/mixin/GridFeatures}.\n *\n * @extends Scheduler/feature/export/PdfExport\n * @mixes Grid/feature/export/mixin/PrintMixin\n *\n * @demo Scheduler/print\n * @classtype print\n * @feature\n *\n * @typings Grid.feature.export.Print -> Grid.feature.export.GridPrint\n */\nexport default class Print extends PrintMixin(PdfExport) {\n /**\n * @hideConfigs clientURL, exportServer, fetchOptions, fileFormat, fileName, openAfterExport, openInNewTab, sendAsBinary\n */\n /**\n * @hideFunctions processExportContent, receiveExportContent, showExportDialog\n */\n static $name = 'Print';\n};\nPrint._$name = 'Print'; GridFeatureManager.registerFeature(Print, false, 'Scheduler');\n", "import Localizable from '../../Core/localization/Localizable.js';\nimport GridTableExporter from '../../Grid/util/TableExporter.js';\nimport SchedulerBase from '../view/SchedulerBase.js';\n/**\n * @module Scheduler/util/ScheduleTableExporter\n */\n/**\n * This class transforms scheduler component into two arrays: rows and columns. Columns array contains objects with\n * meta information about column: field name, column name, width and type of the rendered value, rows array contains\n * arrays of cell values.\n *\n * ```javascript\n * const exporter = new ScheduleTableExporter({ target : scheduler });\n * exporter.export()\n *\n * // Output\n * {\n * columns : [\n * { field : 'name', value : 'First name', type : 'string', width : 100 },\n * { field : 'name', value : 'Task', type : 'string', width : 100, eventColumn : true },\n * { field : 'startDate', value : 'Starts', type : 'date', width : 100, eventColumn : true },\n * { field : 'endDate', value : 'Ends', type : 'date', width : 100, eventColumn : true }\n * ],\n * rows : [\n * ['Michael', 'Hand out dundies', Date, Date],\n * ['Michael', 'Buy condo', Date, Date],\n * ['Jim', 'Close sale to library', Date, Date]\n * ]\n * }\n * ```\n *\n * ## How data is exported\n *\n * Data is exported as in the base class with minor addition: every event is exported on a separate row, like\n * demonstrated above.\n *\n * In case there are unassigned events, by default they will be exported as well\n *\n * ```javascript\n * // output\n * {\n * rows : [\n * ['Michael', 'Hand out dundies', Date, Date],\n * ['Michael', 'Buy condo', Date, Date],\n * ['Jim', 'Close sale to library', Date, Date],\n * ['', 'No resource assigned'],\n * ['', 'Halloween prep', Date, Date],\n * ['', 'New year prep', Date, Date]\n * ]\n * }\n * ```\n *\n * @extends Grid/util/TableExporter\n * @mixes Core/localization/Localizable\n */\nexport default class ScheduleTableExporter extends Localizable(GridTableExporter) {\n static get defaultConfig() {\n return {\n /**\n * Set to `false` to not include unassigned events in the export. `true` by default.\n * @config {Boolean} includeUnassigned\n * @default\n */\n includeUnassigned : true,\n /**\n * An array of Event columns configuration used to specify columns width, headers name, and column fields to\n * get the data from.\n * 'field' config is required. If 'text' is missing, the 'field' config will be used instead.\n *\n * For example:\n * ```javascript\n * eventColumns : [\n * { text : 'Task', field : 'name' },\n * { text : 'Starts', field : 'startDate', width : 140 },\n * { text : 'Ends', field : 'endDate', width : 140 }\n * ]\n * ```\n *\n * @config {String[]|Object[]} eventColumns\n * @default\n */\n eventColumns : [\n { text : 'Task', field : 'name' },\n { text : 'Starts', field : 'startDate', width : 140 },\n { text : 'Ends', field : 'endDate', width : 140 }\n ],\n /**\n * Function to sort events for each resource. By default events are sorted in the order of appending to the\n * store.\n * For example:\n * ```javascript\n * // Sorting by start date\n * eventSortFn : (a, b) => a.startDate - b.startDate\n * ```\n * @config {Function}\n * @internal\n */\n eventSortFn : null\n };\n }\n construct(config = {}, ...args) {\n super.construct(config, ...args);\n if (!this.eventSortFn) {\n this.eventSortFn = (a, b) => a.internalId - b.internalId;\n }\n }\n normalizeColumns(config) {\n super.normalizeColumns(config);\n config.eventColumns = config.eventColumns.map(col => {\n if (typeof col === 'string') {\n return { field : col };\n }\n else {\n return col;\n }\n });\n }\n generateExportData(config) {\n const\n me = this,\n isScheduler = this.target instanceof SchedulerBase,\n resourceColumns = me.generateColumns(config),\n eventColumns = isScheduler ? me.generateEventColumns(config) : [],\n columns = resourceColumns.concat(eventColumns),\n rows = me.generateRows(config);\n return { columns, rows };\n }\n generateEventColumns(config) {\n return config.eventColumns.map(column => this.processEventColumn(column, config));\n }\n processEventColumn(column, config) {\n const\n { width, minWidth } = column,\n { defaultColumnWidth } = config;\n return {\n field : column.field,\n value : column.text,\n width : Math.max(width || defaultColumnWidth, minWidth || defaultColumnWidth),\n eventColumn : true,\n type : this.getColumnType(column, this.target.eventStore)\n };\n }\n generateRows(config) {\n const\n me = this,\n { target } = me;\n let result;\n if (!(target instanceof SchedulerBase)) {\n result = super.generateRows(config);\n }\n else {\n result = [];\n // forEach skips group records, summary records etc\n target.resourceStore.map(resourceRecord => {\n // Get all events for resource (including assignment store)\n const events = resourceRecord.events || [];\n // Events order is not guaranteed, sort by internalId, that is guaranteed to grow with every new record\n events.sort(me.eventSortFn);\n // Set dummy event to have resource info printed without events\n if (!events.length) {\n events.push('');\n }\n events.forEach(eventRecord => {\n if (eventRecord === '' || target.eventStore.isAvailable(eventRecord)) {\n result.push(me.getRowData(config, resourceRecord, eventRecord));\n }\n });\n });\n if (config.includeUnassigned && config.eventColumns.length) {\n const notAssignedEvents = target.eventStore.query(eventRecord => !eventRecord.resources.length);\n if (notAssignedEvents.length) {\n // Use offset to match first event column\n const cells = new Array(config.columns.length).fill('');\n cells.push(me.L('L{ExcelExporter.No resource assigned}'));\n result.push(cells);\n // Set dummy resource to have event info printed without resource\n notAssignedEvents.forEach(eventRecord => result.push(me.getRowData(config, null, eventRecord)));\n }\n }\n // filter out empty rows\n result = result.filter(cells => cells.length);\n }\n return result;\n }\n getRowData(config, resource, event) {\n const\n {\n columns,\n eventColumns\n } = config,\n cells = [],\n resourceCells = this.processRecord(resource, columns, config);\n // No cells from group footers (or from group headers if configured to not show them)\n resourceCells && cells.push(...resourceCells);\n if (!resource || !resource.isSpecialRow) {\n const eventCells = this.processRecord(event, eventColumns, config);\n // No cells from group footers (or from group headers if configured to not show them)\n eventCells && cells.push(...eventCells);\n }\n return cells;\n }\n}\nScheduleTableExporter._$name = 'ScheduleTableExporter';", "/*eslint no-undef: \"error\"*/\nimport GridFeatureManager from '../../../Grid/feature/GridFeatureManager.js';\nimport GridExcelExporter from '../../../Grid/feature/experimental/ExcelExporter.js';\nimport ScheduleTableExporter from '../../util/ScheduleTableExporter.js';\n/**\n * @module Scheduler/feature/experimental/ExcelExporter\n */\n/**\n * **NOTE**: This class requires a 3rd party library to operate.\n *\n * A plugin that allows exporting Scheduler data to Excel without involving the server. It uses {@link Scheduler.util.ScheduleTableExporter}\n * class as data provider, [zipcelx library](https://www.npmjs.com/package/zipcelx)\n * forked and adjusted to support [column width config](https://github.com/bryntum/zipcelx/tree/column-width-build)\n * and [Microsoft XML specification](https://msdn.microsoft.com/en-us/library/office/documentformat.openxml.spreadsheet.aspx).\n * Zipcelx should be either in global scope (window) or can be provided with {@link #config-zipcelx} config.\n *\n * ```html\n * // Global scope\n * \n * ```\n *\n * ```javascript\n * // importing from package\n * import zipcelx from 'zipcelx';\n *\n * const grid = new Grid({\n * features : {\n * excelExporter : {\n * zipcelx\n * }\n * }\n * })\n * ```\n *\n * Here is an example of how to add the feature:\n *\n * ```javascript\n * const scheduler = new Scheduler({\n * features : {\n * excelExporter : {\n * // Choose the date format for date fields\n * dateFormat : 'YYYY-MM-DD HH:mm',\n * exporterConfig : {\n * // Choose the Resource fields to include in the exported file\n * columns : [{ text : 'Staff', field : 'name' }],\n *\n * // Choose the Event fields to include in the exported file\n * eventColumns : [\n * { text : 'Task', field : 'name' },\n * { text : 'Starts', field : 'startDate', width : 140 },\n * { text : 'Ends', field : 'endDate', width : 140 }\n * ]\n * }\n * }\n * }\n * });\n * ```\n *\n * And how to call it:\n *\n * ```javascript\n * scheduler.features.excelExporter.export({\n * filename : 'Export',\n * exporterConfig : {\n * columns : [{ text : 'Staff', field : 'name' }]\n * }\n * })\n * ```\n *\n * This feature is **disabled** by default.\n * For info on enabling it, see {@link Grid/view/mixin/GridFeatures}.\n *\n * @extends Grid/feature/experimental/ExcelExporter\n * @classtype excelExporter\n * @feature\n * @demo Scheduler/exporttoexcel\n *\n * @typings Grid.feature.experimental.ExcelExporter -> Grid.feature.experimental.GridExcelExporter\n */\nexport default class ExcelExporter extends GridExcelExporter {\n static get $name() {\n return 'ExcelExporter';\n }\n static get defaultConfig() {\n return {\n /**\n * Exporter class. Must subclass {@link Scheduler.util.ScheduleTableExporter}\n * @config {Scheduler.util.ScheduleTableExporter}\n * @typings {typeof ScheduleTableExporter}\n * @default\n */\n exporterClass : ScheduleTableExporter,\n /**\n * Configuration object for {@link #config-exporterClass exporter class}.\n * @config {Object}\n */\n exporterConfig : null\n };\n }\n}\nExcelExporter._$name = 'ExcelExporter'; GridFeatureManager.registerFeature(ExcelExporter, false, 'Scheduler');\n", "import SchedulerBase from './SchedulerBase.js';\nimport '../localization/En.js';\n// default features\nimport '../feature/ColumnLines.js';\nimport '../feature/EventCopyPaste.js';\nimport '../feature/EventDrag.js';\nimport '../feature/EventDragCreate.js';\nimport '../feature/EventEdit.js';\nimport '../feature/EventFilter.js';\nimport '../feature/EventMenu.js';\nimport '../feature/EventResize.js';\nimport '../feature/EventTooltip.js';\nimport '../feature/ScheduleContext.js';\nimport '../feature/ScheduleMenu.js';\nimport '../feature/ScheduleTooltip.js';\nimport '../feature/StickyEvents.js';\nimport '../feature/TimeAxisHeaderMenu.js';\n// Since Scheduler is based on SchedulerBase + GridBase, Grids default features needs to be pulled in here also\nimport '../../Grid/feature/CellEdit.js';\nimport '../../Grid/feature/CellMenu.js';\nimport '../../Grid/feature/ColumnDragToolbar.js';\nimport '../../Grid/feature/ColumnPicker.js';\nimport '../../Grid/feature/ColumnReorder.js';\nimport '../../Grid/feature/ColumnResize.js';\nimport '../../Grid/feature/Filter.js';\nimport '../../Grid/feature/FilterBar.js';\nimport '../../Grid/feature/Group.js';\nimport '../../Grid/feature/HeaderMenu.js';\nimport '../../Grid/feature/Sort.js';\nimport '../../Grid/feature/Stripe.js';\nimport '../../Grid/column/CheckColumn.js'; // For checkbox selection mode\n/**\n * @module Scheduler/view/Scheduler\n */\n/**\n * The Scheduler widget is a very powerful and performant UI component that displays an arbitrary number of \"locked\"\n * columns with a schedule occupying the remaining space. The schedule has a time axis at the top, one row per resource\n * and any number of events per resource.\n *\n * ## Intro\n * The Scheduler widget has a wide range of features and a large API to allow users to work with it efficiently in the\n * browser.\n *\n * The timeaxis displayed at the top of the Scheduler is configured using a {@link #config-startDate},\n * {@link #config-endDate} and a {@link #config-viewPreset}. The dates determine the outer limits of the range shown in\n * the timeaxis while the {@link Scheduler.preset.ViewPreset} decides the appearance and which dates are actually shown.\n * The Scheduler ships with a selection of predefined view presets, which can be found in\n * {@link Scheduler.preset.PresetManager}. If you want to specify view presets for a specific scheduler only, please see\n * {@link #config-presets} config.\n *\n *
Note that if you want to use infinite scroll along the time axis, configure\n * {@link #config-infiniteScroll} and {@link #config-visibleDate} instead of startDate and\n * endDate
\n *\n * The Scheduler uses a {@link Scheduler.data.ResourceStore} to hold resources and an {@link Scheduler.data.EventStore}\n * to hold events. You can use inline data or load data using ajax, see the \"Working with data\" guides for more\n * information.\n *\n * The simplest schedule configured with inline data would look like this:\n * ```javascript\n * const scheduler = new Scheduler({\n * appendTo : document.body,\n *\n * startDate : new Date(2018,4,6),\n * endDate : new Date(2018,4,12),\n * viewPreset : 'dayAndWeek',\n *\n * columns : [\n * { field : 'name', text : 'Name', width: 100 }\n * ],\n *\n * resources : [\n * { id : 1, name : 'Bernard' },\n * { id : 2, name : 'Bianca' }\n * ],\n *\n * events : [\n * { id : 1, resourceId : 1, name : 'Interview', startDate : '2018-05-06', endDate : '2018-05-07' },\n * { id : 2, resourceId : 1, name : 'Press conference', startDate : '2018-05-08', endDate : '2018-05-09' },\n * { id : 3, resourceId : 2, name : 'Audition', startDate : '2018-05-06', endDate : '2018-05-08' },\n * { id : 4, resourceId : 2, name : 'Script deadline', startDate : '2018-05-11', endDate : '2018-05-11' }\n * ]\n * });\n * ```\n *\n * {@inlineexample Scheduler/view/Simplest.js}\n *\n * ## Inheriting from Bryntum Grid\n * Bryntum Scheduler inherits from Bryntum Grid, meaning that most features available in the grid are also available\n * for the scheduler. Common features include columns, cell editing, context menus, row grouping, sorting and more.\n * Note: If you want to use the Grid component standalone, e.g. to use drag-from-grid functionality, you need a separate\n * license for the Grid component.\n *\n * For more information on configuring columns, filtering, search etc. please see the {@link Grid.view.Grid Grid API docs}.\n * {@region Loading data}\n * As mentioned above Bryntum Scheduler uses an {@link Scheduler.data.EventStore} and a {@link Scheduler.data.ResourceStore}\n * to hold its data. Data is expected to be in JSON format and can be assigned inline (from memory) using the\n * {@link #config-events} and {@link #config-resources} shortcuts:\n *\n * ```javascript\n * let scheduler = new Scheduler({\n * events : myArrayOfEventData,\n * resources : myArrayOfResourceData\n * });\n * ```\n *\n * If you need to give additional store configuration, you can also specify store configs or instances:\n *\n * ```javascript\n * let resourceStore = new ResourceStore({\n * // ResourceStore config object\n * })\n *\n * let scheduler = new Scheduler({\n * // EventStore config object\n * eventStore : {\n * ...\n * },\n *\n * // Already existing ResourceStore instance\n * resourceStore\n * });\n * ```\n *\n * To use Ajax to fetch data from a server, specify {@link Core.data.AjaxStore#config-readUrl}:\n *\n * ```javascript\n * let scheduler = new Scheduler({\n * eventStore : {\n * readUrl : 'backend/read_events.php',\n * autoLoad : true\n * }\n * });\n * // If you do not specify autoLoad, trigger loading manually:\n * scheduler.eventStore.load();\n * ```\n *\n * For more information, see the \"Working with data\" guides.\n * {@endregion}\n * {@region Event styling}\n * Bryntum Schedulers appearance can be affected in a few different ways:\n *\n * * Switching themes\n * * Choosing event styles and colors\n * * Using renderer functions\n *\n * ### Switching themes\n *\n * Scheduler ships with five different themes, simply include the css file for the theme you would like to use on your\n * page. The themes are located in the `/build` folder. For example to include the material theme:\n *\n * ```html\n * \n * ```\n *\n * Included themes are (from left to right) classic-light, classic, classic-dark, stockholm and material:\n *\n * \"Classic-Light\n * \"Classic\n * \"Classic-Dark\n * \"Stockholm\n * \"Material\n *\n * ### Choosing event styles and colors\n * The style and color of each event can be changed by assigning to the `eventStyle` and `eventColor` configs. These\n * configs are available at 3 different levels:\n *\n * * Scheduler level, affects all events (see {@link Scheduler.view.mixin.TimelineEventRendering#config-eventStyle} and\n * {@link Scheduler.view.mixin.TimelineEventRendering#config-eventColor}).\n * * Resource level, affects all events assigned to that resource (see {@link Scheduler.model.mixin.ResourceModelMixin#field-eventStyle}\n * and {@link Scheduler.model.mixin.ResourceModelMixin#field-eventColor}).\n * * Event level, affects that event (see {@link Scheduler/model/mixin/EventModelMixin#field-eventStyle} and\n * {@link Scheduler/model/mixin/EventModelMixin#field-eventColor}).\n *\n * {@inlineexample Scheduler/view/Styles.js}\n *\n * For available styles, see {@link Scheduler.view.mixin/TimelineEventRendering#config-eventStyle}. For colors,\n * {@link Scheduler.view.mixin/TimelineEventRendering#config-eventColor}. Also take a look at the\n * eventstyles demo.\n *\n * ### Sorting overlapping events\n *\n * The order of overlapping events rendered in a horizontal scheduler can be customized by overriding\n * {@link Scheduler.view.mixin.SchedulerEventRendering#config-horizontalEventSorterFn} function on the scheduler.\n * For example:\n *\n * ```javascript\n * let scheduler = new Scheduler({\n * horizontalEventSorterFn(a, b) {\n * return b.startDate.getTime() - a.startDate.getTime();\n * },\n * ...\n * });\n * ```\n *\n * {@inlineexample Scheduler/view/SortingOverlappingEvents.js}\n *\n * ### Using render functions\n * Render function can be used to manipulate the rendering of rows (resources) and events. For information on row\n * renderers, see {@link Grid.column.Column#config-renderer}.\n *\n * Event rendering can be manipulated by specifying an {@link Scheduler.view.mixin/SchedulerEventRendering#config-eventRenderer} function. The function is called\n * for each event before it is rendered to DOM. By using its arguments you can add CSS classes, modify styling and\n * determine the contents of the event:\n *\n * ```javascript\n * let scheduler = new Scheduler({\n *\n * events : [...],\n * resources : [...],\n *\n * ...,\n *\n * eventRenderer({resourceRecord, eventRecord, renderData}) {\n * // add css class to the event\n * renderData.cls.add('my-css-class');\n *\n * // use an icon\n * renderData.iconCls = 'b-fa b-fa-some-nice-icon';\n *\n * // return value is used as events text\n * return `${resourceRecord.name}: ${eventRecord.name}`;\n * }\n * });\n * ```\n *\n * {@endregion}\n * {@region Event manipulation}\n * You can programmatically manipulate the events using data operations, see the \"Working with data\" guides for more\n * information. Events are reactive, changes reflect on the UI automatically. A small example on manipulating events:\n *\n * ```javascript\n * // change startDate of first event\n * scheduler.eventStore.first.startDate = new Date(2018,5,10);\n *\n * // remove last event\n * scheduler.eventStore.last.remove();\n *\n * // reassign an event\n * scheduler.eventStore.getById(10).resourceId = 2;\n * ```\n *\n * You can also allow your users to manipulate the events using the following features:\n *\n * * {@link Scheduler.feature.EventDrag}, drag and drop events within the schedule\n * * {@link Scheduler.feature.EventDragCreate}, create new events by click-dragging an empty area\n * * {@link Scheduler.feature.EventEdit}, show an event editing form\n * * {@link Scheduler.feature.SimpleEventEdit}, edit the event name easily\n * * {@link Scheduler.feature.EventResize}, resize events by dragging resize handles\n *\n * All of the features mentioned above are enabled by default.\n * {@endregion}\n * {@region Default configs}\n * There is a myriad of configs and features available for Scheduler (browse the API docs to find them), some of them on\n * by default and some of them requiring extra configuration. The code below tries to illustrate the major things that\n * are used by default:\n *\n * ```javascript\n * let scheduler = new Scheduler({\n * // The following features are enabled by default:\n * features : {\n * cellEdit : true, // Cell editing in the columns part\n * columnLines : true, // Column lines in the schedule part\n * columnPicker : true, // Header context menu item to toggle visible columns\n * columnReorder : true, // Reorder columns in grid part using drag and drop\n * columnResize : true, // Resize columns in grid part using the mouse\n * cellMenu : true, // Context menu for cells in the grid part\n * eventMenu : true, // Context menu for events\n * eventDrag : true, // Dragging events\n * eventDragCreate : true, // Drag creating events\n * eventEdit : true, // Event editor dialog\n * eventFilter : true, // Filtering events using header context menu\n * eventCopyPaste : true, // Allow using [Ctrl/CMD + C/X] and [Ctrl/CMD + V] to copy/cut and paste events\n * eventResize : true, // Resizing events using the mouse\n * eventTooltip : true, // Tooltips for events\n * group : true, // Row grouping\n * headerMenu : true, // Context menu for headers in the grid part\n * timeAxisHeaderMenu : true, // Header context menu for schedule part\n * scheduleMenu : true, // Context menu for empty parts of the schedule\n * scheduleTooltip : true, // Tooltip for empty parts of the schedule\n * sort : true // Row sorting\n * },\n *\n * // From Grid\n * animateRemovingRows : false, // Rows will not slide out on removal\n * autoHeight : false, // Grid needs to have a height supplied through CSS (strongly recommended) or by specifying `height\n * columnLines : true, // Grid part, themes might override it to hide lines anyway\n * emptyText : 'No rows to display',\n * enableTextSelection : false, // Not allowed to select text in cells by default,\n * fillLastColumn : true, // By default the last column is stretched to fill the grid\n * fullRowRefresh : true, // Refreshes entire row when a cell value changes\n * loadMask : 'Loading...',\n * resizeToFitIncludesHeader : true, // Also measure header when auto resizing columns\n * responsiveLevels : {\n * small : 400,\n * medium : 600,\n * large : '*'\n * },\n * rowHeight : 60, // Scheduler specifies a default rowHeight in pixels\n * showDirty : false, // No indicator for changed cells\n *\n * // Scheduler specific\n * autoAdjustTimeAxis : true, // startDate & endDate will be adjusted to display a suitable range\n * allowOverlap : true, // Events are allowed to overlap (overlays, stacks or packs depending on eventLayout)\n * barMargin : 10, // Space above + below each event\n * createEventOnDblClick : true, // Allow creating new events by double clicking empty space\n * enableDeleteKey : true, // Allow deleting events with delete / backspace keys\n * enableEventAnimations : true, // Animate event changes\n * eventBarTextField : 'name', // Field on EventModel to display in events\n * eventColor : 'green', // Use green as default color for events\n * eventLayout : 'stack', // Stack overlapping events by default\n * eventStyle : 'plain', // Use plain as default style for events\n * managedEventSizing : true, // Calculate event sizes based on rowHeight & barMargin\n * milestoneCharWidth : 10,\n * milestoneLayoutMode : 'default',\n * useInitialAnimation : true, // Fade in events initially\n * viewPreset : 'weekAndDayLetter',\n * zoomOnMouseWheel : true,\n * zoomOnTimeAxisDoubleClick : true\n * });\n * ```\n *\n * {@endregion}\n * {@region Keyboard shortcuts}\n * Scheduler does not currently provide any keyboard shortcuts on its own. However, the following Scheduler features has\n * their own keyboard shortcuts. Follow the links for details.\n * * {@link Scheduler.feature.EventCopyPaste#keyboard-shortcuts EventCopyPaste}\n *\n * As Scheduler is a subclass of Grid, many of Grid's {@link Grid.view.Grid#keyboard-shortcuts keyboard-shortcuts}\n * works for Scheduler as well.\n *\n * For more information on how to customize keyboard shortcuts, please see\n * [our guide](#Scheduler/guides/customization/keymap.md)\n * {@endregion}\n * {@region Performance}\n * To make scheduler performance as good as possible it only renders the events and resources that are within view (plus\n * an additional buffer). Since adding to and removing from DOM comes with a performance penalty the elements are\n * instead repositioned and reused as you scroll. A side effect of this is that you cannot do direct DOM element\n * manipulation in a reliable way, instead you should use row and event renderer functions to achieve what you want (see\n * the section on event styling above).\n *\n * To put the scheduler to the test, try our bigdataset demo.\n * {@endregion}\n * {@region Recurring Events}\n * From 4.0.0, there is no `RecurringEvents` Feature. There is an\n * {@link Scheduler/view/mixin/RecurringEvents#config-enableRecurringEvents} boolean config on the Scheduler.\n * Occurrences of recurring events are provided on a \"just in time\" basis by a new EventStore API which must now be used\n * when interrogating an EventStore.\n *\n * {@link Scheduler/data/mixin/GetEventsMixin#function-getEvents} is a multipurpose event gathering method which can be\n * asked to return events which match a set of criteria including a date range and a resource. By default, if the\n * requested date range contains occurrences of a recurring event, those occurrences are returned in the result array.\n *\n * ```javascript\n * myEventStore.getEvents({\n * resourceRecord : myResourceRecord,\n * startDate : myScheduler.startDate,\n * endDate : myScheduler.endDate\n * });\n * ```\n *\n * Occurrences are *not* present in the store's data collection.\n *\n * To directly access occurrences of a recurring event which *intersect* a date range, use:\n *\n * ```js\n * recurringEvent.getOccurrencesForDateRange(startDate, endDate);\n * ```\n *\n * The `endDate` argument is optional if the occurrence for one date is required. This method always\n * returns an array. Note that it may be empty if no occurrences intersect the date range.\n *\n * ### Convert an occurrence to an exception\n * To programmatically convert an occurrence to be a single exception to its owner's sequence use:\n *\n * ```javascript\n * myOccurrence.beginBatch();\n * myOccurrence.startDate = DateHelper.add(myOccurrence.startDate, 1, 'day');\n * myOccurrence.name = 'Postponed to next day';\n * myOccurrence.recurrence = null; // This means it does NOT become a new recurring base event.\n * myOccurrence.endBatch();\n * ```\n *\n * That will cause that event to be inserted into the store as a concrete event definition, firing\n * an `add` event as would be expected, and will add an `exceptionDates` to its owning recurring event.\n *\n * When syncing this change back to the server, the `exceptionDates` array for the modified\n * recurring event now contains the exception dates correctly serialized into string form using\n * the `dateFormat` of the field. The system-supplied default value for this is\n * `'YYYY-MM-DDTHH:mm:ssZ'`\n *\n * ### Convert an occurrence to a new recurring event sequence.\n * To programmatically convert an occurrence to be the start of a new recurring sequence, use:\n *\n * ```javascript\n * myOccurrence.beginBatch();\n * myOccurrence.startDate = DateHelper.set(myOccurrence.startDate, 'hour', 14);\n * myOccurrence.name = 'Moved to 2pm from here on';\n * myOccurrence.endBatch();\n * ```\n *\n * That will cause that event to be inserted into the store as a concrete *recurring* event\n * definition, firing an `add` event as would be expected, and will terminate the previous\n * recurring owner of that occurrence on the day before the new event.\n * {@endregion}\n *\n * @extends Scheduler/view/SchedulerBase\n * @classtype scheduler\n * @widget\n */\nexport default class Scheduler extends SchedulerBase {\n static get $name() {\n return 'Scheduler';\n }\n // Factoryable type name\n static get type() {\n return 'scheduler';\n }\n}\n// Register this widget type with its Factory\nScheduler.initClass();\nScheduler._$name = 'Scheduler';", "import Base from '../../../Core/Base.js';\nimport ArrayHelper from '../../../Core/helper/ArrayHelper.js';\n/**\n * @module Scheduler/view/mixin/DelayedRecordsRendering\n */\n/**\n * Mixin that implements scheduling/unscheduling a delayed row refresh.\n * @mixin\n * @internal\n */\nexport default Target => class DelayedRecordsRendering extends (Target || Base) {\n static $name = 'DelayedRecordsRendering';\n static configurable = {\n scheduledRecordsRefreshTimeout : 10\n };\n static get properties() {\n return {\n recordsToRefresh : new Set()\n };\n }\n beforeRenderRow({ record }) {\n // unscheduler records refresh when corresponding rows are rendered\n if (this.recordIsReadyForRendering?.(record)) {\n this.unscheduleRecordRefresh(record);\n }\n return super.beforeRenderRow(...arguments);\n }\n cleanupScheduledRecord() {\n const { rowManager, store } = this;\n for (const record of [...this.recordsToRefresh]) {\n // Remove the record from to-refresh list if:\n // - it's not in the view store\n // - or it's not visible\n if (!record.stores.includes(store) || !rowManager.getRowById(record)) {\n this.recordsToRefresh.delete(record);\n }\n }\n }\n renderScheduledRecords() {\n const me = this;\n if (!me.refreshSuspended) {\n // remove invisible records from the set of scheduled\n me.cleanupScheduledRecord();\n const\n { rowManager } = me,\n records = [...me.recordsToRefresh],\n rows = records.map(record => rowManager.getRowById(record));\n if (rows.length) {\n rowManager.renderRows(rows);\n /**\n * This event fires when records which rendering\n * was previously scheduled is finally done.\n * @event scheduledRecordsRender\n * @param {Grid.view.Grid} source The component.\n * @param {Core.data.Model[]} records Rendered records.\n * @param {Grid.row.Row[]} rows Rendered rows.\n */\n me.trigger('scheduledRecordsRender', { records, rows });\n }\n if (me.recordsToRefresh.size) {\n me.scheduleRecordRefresh();\n }\n }\n // reschedule this call if view refresh is suspended\n else {\n me.scheduleRecordRefresh();\n }\n }\n /**\n * Cancels scheduled rows refresh.\n * @param {Core.data.Model|Core.data.Model[]|Boolean} [clearRecords=true] `true` to also clear the list of records\n * scheduled for refreshing. `false` will result only canceling the scheduled call and keeping intact\n * the list of records planned for refreshing.\n */\n unscheduleRecordRefresh(clearRecords = true) {\n const me = this;\n if (clearRecords === true) {\n me.recordsToRefresh.clear();\n }\n else if (clearRecords) {\n ArrayHelper.asArray(clearRecords).forEach(record => me.recordsToRefresh.delete(record));\n }\n if (me.scheduledRecordsRefreshTimer && !me.recordsToRefresh.size) {\n me.clearTimeout(me.scheduledRecordsRefreshTimer);\n }\n }\n /**\n * Schedules the provided record row refresh.\n * @param {Core.data.Model} records Record to refresh the row of.\n */\n scheduleRecordRefresh(records) {\n const me = this;\n if (records) {\n ArrayHelper.asArray(records).forEach(record => me.recordsToRefresh.add(record));\n }\n me.scheduledRecordsRefreshTimer = me.setTimeout({\n fn : 'renderScheduledRecords',\n delay : me.scheduledRecordsRefreshTimeout,\n cancelOutstanding : true\n });\n }\n get widgetClass() {}\n};\n", "import Base from '../../Core/Base.js';\nexport default class TimelineHistogramRendering extends Base {\n static configurable = {\n scrollBuffer : 0\n };\n construct(client) {\n super.construct();\n this.client = client;\n }\n init() {}\n onTimeAxisViewModelUpdate() {\n const { scrollable } = this.client.timeAxisSubGrid;\n // scrollLeft is the DOM's concept which is -ve in RTL mode.\n // scrollX i always the +ve scroll offset from the origin.\n // Both may be needed for different calculations.\n this.updateFromHorizontalScroll(scrollable.x);\n }\n // Update header range on horizontal scroll\n updateFromHorizontalScroll(scrollX) {\n const\n me = this,\n {\n client,\n // scrollBuffer is an export only thing\n scrollBuffer\n } = me,\n {\n timeAxisSubGrid,\n timeAxis,\n rtl\n } = client,\n { width } = timeAxisSubGrid,\n { totalSize } = client.timeAxisViewModel,\n start = scrollX,\n // If there are few pixels left from the right most position then just render all remaining ticks,\n // there wouldn't be many. It makes end date reachable with more page zoom levels while not having any poor\n // implications.\n // 5px to make TimeViewRangePageZoom test stable in puppeteer.\n returnEnd = timeAxisSubGrid.scrollable.maxX !== 0 && Math.abs(timeAxisSubGrid.scrollable.maxX) <= Math.round(start) + 5,\n startDate = client.getDateFromCoord({ coord : Math.max(0, start - scrollBuffer), ignoreRTL : true }),\n endDate = returnEnd ? timeAxis.endDate : (client.getDateFromCoord({ coord : start + width + scrollBuffer, ignoreRTL : true }) || timeAxis.endDate);\n if (startDate && !client._viewPresetChanging) {\n me._visibleDateRange = { startDate, endDate, startMS : startDate.getTime(), endMS : endDate.getTime() };\n me.viewportCoords = rtl\n // RTL starts all the way to the right (and goes in opposite direction)\n ? { left : totalSize - scrollX - width + scrollBuffer, right : totalSize - scrollX - scrollBuffer }\n // LTR all the way to the left\n : { left : scrollX - scrollBuffer, right : scrollX + width + scrollBuffer };\n // Update timeaxis header making it display the new dates\n const range = client.timeView.range = { startDate, endDate };\n client.internalOnVisibleDateRangeChange(range);\n // If refresh is suspended, someone else is responsible for updating the UI later\n if (!client.refreshSuspended && client.rowManager.rows.length) {\n // Gets here too early in Safari for ResourceHistogram. ResizeObserver triggers a scroll before rows are\n // rendered first time. Could not track down why, bailing out\n if (client.rowManager.rows[0].id === null) {\n return;\n }\n // re-render all rows is timeAxis range has been updated\n if (me._timeAxisStartDate - timeAxis.startDate || me._timeAxisEndDate - timeAxis.endDate) {\n me._timeAxisStartDate = timeAxis.startDate;\n me._timeAxisEndDate = timeAxis.endDate;\n client.rowManager.renderRows(client.rowManager.rows);\n }\n }\n }\n }\n onViewportResize() {}\n refreshRows() {}\n get visibleDateRange() {\n return this._visibleDateRange;\n }\n translateToPageCoordinate(x) {\n const\n { client } = this,\n { scrollable } = client.timeAxisSubGrid;\n let result = x + client.timeAxisSubGridElement.getBoundingClientRect().left;\n if (client.rtl) {\n result -= scrollable.maxX - Math.abs(client.scrollLeft);\n }\n else {\n result -= client.scrollLeft;\n }\n return result;\n }\n translateToScheduleCoordinate(x) {\n const\n { client } = this,\n { scrollable } = client.timeAxisSubGrid;\n let result = x - client.timeAxisSubGridElement.getBoundingClientRect().left - globalThis.scrollX;\n // Because we use getBoundingClientRect's left, we have to adjust for page scroll.\n if (client.rtl) {\n result += scrollable.maxX - Math.abs(client.scrollLeft);\n }\n else {\n result += client.scrollLeft;\n }\n return result;\n }\n getDateFromXY(xy, roundingMethod, local, allowOutOfRange = false) {\n const { client } = this;\n let coord = xy[0];\n if (!local) {\n coord = this.translateToScheduleCoordinate(coord);\n }\n coord = client.getRtlX(coord);\n return client.timeAxisViewModel.getDateFromPosition(coord, roundingMethod, allowOutOfRange);\n }\n}\nTimelineHistogramRendering._$name = 'TimelineHistogramRendering';", "import Objects from '../../Core/helper/util/Objects.js';\nimport Histogram from '../../Core/widget/graph/Histogram.js';\nimport Tooltip from '../../Core/widget/Tooltip.js';\nimport '../../Grid/column/TreeColumn.js';\nimport '../../Grid/feature/Tree.js';\nimport '../column/TimeAxisColumn.js';\nimport '../feature/ColumnLines.js';\nimport DelayedRecordsRendering from './mixin/DelayedRecordsRendering.js';\nimport TimelineBase from './TimelineBase.js';\nimport TimelineHistogramRendering from './TimelineHistogramRendering.js';\n/**\n * @module Scheduler/view/TimelineHistogramBase\n */\nconst\n histogramWidgetCleanState = {\n series : null,\n topValue : null\n },\n emptyFn = () => {};\n/**\n * Histogram renderer parameters.\n *\n * @typedef {Object} HistogramRenderData\n * @property {Object} histogramData Histogram data\n * @property {HistogramConfig} histogramConfig Configuration object for the histogram widget\n * @property {HTMLElement|null} cellElement Cell element, for adding CSS classes, styling etc.\n * Can be `null` in case of export\n * @property {Core.data.Model} record Record for the row\n * @property {Grid.column.Column} column This column\n * @property {Grid.view.Grid} grid This grid\n * @property {Grid.row.Row} row Row object. Can be null in case of export. Use the\n * {@link Grid.row.Row#function-assignCls row's API} to manipulate CSS class names.\n */\n/**\n * Base class for {@link Scheduler/view/TimelineHistogram} class.\n *\n * @extends Scheduler/view/TimelineBase\n * @abstract\n */\nexport default class TimelineHistogramBase extends TimelineBase.mixin(DelayedRecordsRendering) {\n //region Config\n static $name = 'TimelineHistogramBase';\n static type = 'timelinehistogrambase';\n static configurable = {\n timeAxisColumnCellCls : 'b-sch-timeaxis-cell b-timelinehistogram-cell',\n mode : 'horizontal',\n rowHeight : 50,\n /**\n * Set to `true` if you want to display a tooltip when hovering an allocation bar. You can also pass a\n * {@link Core/widget/Tooltip#configs} config object.\n * Please use {@link #config-barTooltipTemplate} function to customize the tooltip contents.\n * @prp {Boolean|TooltipConfig}\n */\n showBarTip : false,\n barTooltip : null,\n barTooltipClass : Tooltip,\n /**\n * Object enumerating data series for the histogram.\n * The object keys are treated as the series identifiers and values are objects that\n * must contain two properties:\n * - `type` A String, either `'bar'` or `'outline'`\n * - `field` A String, the name of the property to use from the data objects in the {@link #config-data} option.\n *\n * ```javascript\n * histogram = new TimelineHistogram({\n * ...\n * series : {\n * s1 : {\n * type : 'bar',\n * field : 's1'\n * },\n * s2 : {\n * type : 'outline',\n * field : 's2'\n * }\n * },\n * store : new Store({\n * data : [\n * {\n * id : 'r1',\n * name : 'Record 1',\n * histogramData : [\n * { s1 : 200, s2 : 100 },\n * { s1 : 150, s2 : 50 },\n * { s1 : 175, s2 : 50 },\n * { s1 : 175, s2 : 75 }\n * ]\n * },\n * {\n * id : 'r2',\n * name : 'Record 2',\n * histogramData : [\n * { s1 : 100, s2 : 100 },\n * { s1 : 150, s2 : 125 },\n * { s1 : 175, s2 : 150 },\n * { s1 : 175, s2 : 75 }\n * ]\n * }\n * ]\n * })\n * });\n * ```\n *\n * @config {Object}\n */\n series : null,\n /**\n * Record field from which the histogram data will be collected.\n *\n * ```javascript\n * histogram = new TimelineHistogram({\n * ...\n * series : {\n * s1 : {\n * type : 'bar'\n * }\n * },\n * dataModelField : 'foo',\n * store : new Store({\n * data : [\n * {\n * id : 'r1',\n * name : 'Record 1',\n * foo : [\n * { s1 : 200 },\n * { s1 : 150 },\n * { s1 : 175 },\n * { s1 : 175 }\n * ]\n * },\n * {\n * id : 'r2',\n * name : 'Record 2',\n * foo : [\n * { s1 : 100 },\n * { s1 : 150 },\n * { s1 : 175 },\n * { s1 : 175 }\n * ]\n * }\n * ]\n * })\n * });\n * ```\n *\n * Alternatively {@link #config-getRecordData} function can be used to build a\n * record's histogram data dynamically.\n * @config {String}\n * @default\n */\n dataModelField : 'histogramData',\n /**\n * A function, or name of a function which builds histogram data for the provided record.\n *\n * See also {@link #config-dataModelField} allowing to load histogram data from a record field.\n *\n * @config {Function|String} getRecordData\n * @param {Core.data.Model} getRecordData.record Record to get histogram data for.\n * @param {Object} [aggregationContext] Context object passed in case the data is being retrieved\n * as a part of some parent record data collecting.\n * @returns {Object} Histogram data.\n */\n getRecordData : null,\n /**\n * When set to `true` (default) the component reacts on time axis changes\n * (zooming or changing the displayed time span), clears the histogram data cache of the records\n * and then refreshes the view.\n * @config {Boolean}\n * @default\n */\n hardRefreshOnTimeAxisReconfigure : true,\n /**\n * A Function which returns a CSS class name to add to a rectangle element.\n * The following parameters are passed:\n * @param {HistogramSeries} series The series being rendered\n * @param {DomConfig} rectConfig The rectangle configuration object\n * @param {Object} datum The datum being rendered\n * @param {Number} index The index of the datum being rendered\n * @param {HistogramRenderData} renderData Current render data giving access to the record, row and cell\n * being rendered.\n * @returns {String} CSS classes of the rectangle element\n * @config {Function}\n */\n getRectClass : null,\n /**\n * A Function which returns a CSS class name to add to a path element\n * built for an `outline` type series.\n * The following parameters are passed:\n * @param {HistogramSeries} series The series being rendered\n * @param {Object[]} data The series data\n * @param {HistogramRenderData} renderData Current render data giving access to the record, row and cell\n * being rendered.\n * @returns {String} CSS class name of the path element\n * @config {Function}\n */\n getOutlineClass(series) {\n return '';\n },\n readOnly : true,\n /**\n * A Function which returns the tooltip text to display when hovering a bar.\n * The following parameters are passed:\n * @param {HistogramSeries} series The series being rendered\n * @param {DomConfig} rectConfig The rectangle configuration object\n * @param {Object} datum The datum being rendered\n * @param {Number} index The index of the datum being rendered\n * @deprecated Since 5.0.0. Please use {@link #config-barTooltipTemplate}\n * @config {Function}\n */\n getBarTip : null,\n /**\n * A Function which returns the tooltip text to display when hovering a bar.\n * The following parameters are passed:\n * @param {Object} context The tooltip context info\n * @param {Object} context.datum The histogram bar being hovered info\n * @param {Core.widget.Tooltip} context.tip The tooltip instance\n * @param {HTMLElement} context.element The Element for which the Tooltip is monitoring mouse movement\n * @param {HTMLElement} context.activeTarget The target element that triggered the show\n * @param {Event} context.event The raw DOM event\n * @param {Core.data.Model} data.record The record which value\n * the hovered bar displays.\n * @returns {String} Tooltip HTML content\n * @config {Function}\n */\n barTooltipTemplate : null,\n /**\n * A Function which returns the text to render inside a bar.\n *\n * ```javascript\n * new TimelineHistogram({\n * series : {\n * foo : {\n * type : 'bar',\n * field : 'foo'\n * }\n * },\n * getBarText(datum) {\n * // display the value in the bar\n * return datum.foo;\n * },\n * ...\n * })\n * ```\n *\n * **Please note** that the function will be injected into the underlying\n * {@link Core/widget/graph/Histogram} component that is used under the hood\n * to render actual charts.\n * So `this` will refer to the {@link Core/widget/graph/Histogram} instance, not\n * this class instance.\n * To access the view please use `this.owner` in the function:\n *\n * ```javascript\n * new TimelineHistogram({\n * getBarText(datum) {\n * // \"this\" in the method refers core Histogram instance\n * // get the view instance\n * const timelineHistogram = this.owner;\n *\n * .....\n * },\n * ...\n * })\n * ```\n * The following parameters are passed:\n * @param {Object} datum The datum being rendered\n * @param {Number} index The index of the datum being rendered\n * @param {HistogramSeries} series The series (provided if histogram widget\n * {@link Core/widget/graph/Histogram#config-singleTextForAllBars} is `false`)\n * @param {HistogramRenderData} renderData Current render data giving access to the record, row and cell\n * being rendered.\n * @returns {String} Text to render inside the bar\n * @config {Function}\n */\n getBarText : null,\n getRectConfig : null,\n getBarTextRenderData : undefined,\n /**\n * The class used for building the {@link #property-histogramWidget histogram widget}\n * @config {Core.widget.graph.Histogram}\n * @default\n */\n histogramWidgetClass : Histogram,\n /**\n * The underlying {@link Core/widget/graph/Histogram} component that is used under the hood\n * to render actual charts.\n * @member {Core.widget.graph.Histogram} histogramWidget\n */\n /**\n * An instance or a configuration object of the underlying {@link Core/widget/graph/Histogram}\n * component that is used under the hood to render actual charts.\n * In case a configuration object is provided the built class is defined with\n * {@link #config-histogramWidgetClass} config.\n * @config {Core.widget.graph.Histogram|HistogramConfig}\n */\n histogramWidget : {\n cls : 'b-hide-offscreen b-timelinehistogram-histogram',\n omitZeroHeightBars : true,\n data : []\n },\n fixedRowHeight : true\n };\n static get properties() {\n return {\n histogramDataByRecord : new Map(),\n collectingDataFor : new Map()\n };\n }\n updateGetRecordData(fn) {\n this._getRecordData = fn ? this.resolveCallback(fn) : null;\n }\n updateHardRefreshOnTimeAxisReconfigure(value) {\n const name = 'hardRefreshOnTimeAxisReconfigure';\n if (value) {\n this.timeAxis.ion({\n name,\n endReconfigure : 'onTimeAxisEndReconfigure',\n thisObj : this\n });\n }\n else {\n this.detachListeners(name);\n }\n }\n //endregion\n //region Constructor/Destructor\n construct(config) {\n super.construct(config);\n const me = this;\n // debounce refreshRows calls\n me.scheduleRefreshRows = me.createOnFrame(me.refreshRows, [], me, true);\n me.rowManager.ion({\n beforeRowHeight : 'onBeforeRowHeight',\n thisObj : me\n });\n }\n onDestroy() {\n this.clearHistogramDataCache();\n this._histogramWidget?.destroy();\n this.barTooltip = null;\n }\n //endregion\n //region Internal\n // Used by shared features to resolve an event or task\n resolveTimeSpanRecord(element) {}\n getScheduleMouseEventParams(cellData, event) {\n const record = this.store.getById(cellData.id);\n return { record };\n }\n get currentOrientation() {\n if (!this._currentOrientation) {\n this._currentOrientation = new TimelineHistogramRendering(this);\n }\n return this._currentOrientation;\n }\n updateSeries(value) {\n const me = this;\n me.histogramWidget.series = value;\n me._series = me.histogramWidget.series;\n if (me.isPainted && !me.isConfiguring) {\n me.scheduleRefreshRows();\n }\n }\n getAsyncEventSuffixForStore(store) {\n // Use xxPreCommit version of events if the store is a part of a project\n return store.isAbstractPartOfProjectStoreMixin ? 'PreCommit' : '';\n }\n /**\n * Schedules the component rows refresh on the next animation frame. However many time it is\n * called in one event run, it will only be scheduled to run once.\n */\n scheduleRefreshRows() {}\n getRowHeight() {\n return this.rowHeight;\n }\n onInternalPaint({ firstPaint }) {\n super.onInternalPaint({ firstPaint });\n if (firstPaint && this.showBarTip) {\n this.barTooltip = {};\n }\n }\n updateGetBarTip(value) {\n // reset barTooltipTemplate if custom getBarTip function is provided\n if (value) {\n this.barTooltipTemplate = null;\n }\n return value;\n }\n changeBarTooltip(tooltip, oldTooltip) {\n oldTooltip?.destroy();\n if (tooltip) {\n return tooltip.isTooltip ? tooltip : this.barTooltipClass.new({\n forElement : this.timeAxisSubGridElement,\n forSelector : '.b-histogram rect',\n hoverDelay : 0,\n trackMouse : false,\n cls : 'b-celltooltip-tip',\n getHtml : this.getTipHtml.bind(this)\n }, this.showBarTip, tooltip);\n }\n return null;\n }\n async getTipHtml(args) {\n if (this.showBarTip && this.barTooltipTemplate) {\n const\n { activeTarget } = args,\n index = parseInt(activeTarget.dataset.index, 10),\n record = this.getRecordFromElement(activeTarget),\n histogramData = await this.getRecordHistogramData(record);\n return this.barTooltipTemplate({\n ...args,\n datum : this.extractHistogramDataArray(histogramData, record)[index],\n record,\n index\n });\n }\n }\n collectTicksWidth() {\n const\n { ticks } = this.timeAxis,\n prevDuration = ticks[0].endDate - ticks[0].startDate,\n tickDurations = { 0 : prevDuration };\n let\n totalDuration = prevDuration,\n isMonotonous = true;\n for (let i = 1, { length } = ticks; i < length; i++) {\n const\n tick = ticks[i],\n duration = tick.endDate - tick.startDate;\n // the ticks width is different -> reset isMonotonous flag\n if (prevDuration !== duration) {\n isMonotonous = false;\n }\n totalDuration += duration;\n tickDurations[i] = duration;\n }\n // if the ticks widths are not monotonous we need to calculate\n // each bar width to provide it to the histogram widget later\n if (!isMonotonous) {\n const ticksWidth = {};\n for (let i = 0, { length } = ticks; i < length; i++) {\n ticksWidth[i] = tickDurations[i] / totalDuration;\n }\n this.ticksWidth = ticksWidth;\n }\n else {\n this.ticksWidth = null;\n }\n }\n changeHistogramWidget(widget) {\n const me = this;\n if (widget && !widget.isHistogram) {\n if (me.getBarTextRenderData && !widget.getBarTextRenderData) {\n widget.getBarTextRenderData = me.getBarTextRenderData;\n }\n widget = me.histogramWidgetClass.new({\n owner : me,\n appendTo : me.element,\n height : me.rowHeight,\n width : me.timeAxisColumn?.width || 0,\n getBarTip : !me.barTooltipTemplate && me.getBarTip || emptyFn,\n getRectClass : me.getRectClass || me.getRectClassDefault,\n getBarText : me.getBarText || me.getBarTextDefault,\n getOutlineClass : me.getOutlineClass,\n getRectConfig : me.getRectConfig\n }, widget);\n widget.suspendRefresh();\n // bind default getBarText in case it will be called from a custom getBarText()\n me.getBarTextDefault = me.getBarTextDefault.bind(widget);\n }\n return widget;\n }\n // Injectable method.\n getRectClassDefault(series, rectConfig, datum) {}\n getBarTextDefault(datum, index) {}\n updateShowBarTip(value) {\n this.barTooltip = value;\n }\n //endregion\n //region Columns\n get columns() {\n return super.columns;\n }\n set columns(columns) {\n const me = this;\n super.columns = columns;\n if (!me.isDestroying) {\n me.timeAxisColumn.renderer = me.histogramRenderer.bind(me);\n me.timeAxisColumn.cellCls = me.timeAxisColumnCellCls;\n }\n }\n //endregion\n //region Events\n onHistogramDataCacheSet({ record, data }) {\n // schedule record refresh for later\n this.scheduleRecordRefresh(record);\n }\n onTimeAxisEndReconfigure() {\n if (this.hardRefreshOnTimeAxisReconfigure) {\n // reset histogram cache\n this.clearHistogramDataCache();\n // schedule records refresh (that will re-fetch the histogram data from the server since the cache is empty)\n this.scheduleRefreshRows();\n }\n }\n onStoreUpdateRecord({ record, changes }) {\n const me = this;\n // If we read histogram data from a field and that field got changed\n // - clear the corresponding record cache\n if (!me.getRecordData && me.dataModelField && changes[me.dataModelField]) {\n me.clearHistogramDataCache(record);\n }\n return super.onStoreUpdateRecord(...arguments);\n }\n onStoreRemove({ records }) {\n super.onStoreRemove(...arguments);\n for (const record of records) {\n this.clearHistogramDataCache(record);\n }\n }\n onBeforeRowHeight({ height }) {\n if (this._timeAxisColumn) {\n const widget = this._histogramWidget;\n if (widget) {\n widget.height = height;\n widget.onElementResize(widget.element);\n }\n }\n }\n onTimeAxisViewModelUpdate() {\n super.onTimeAxisViewModelUpdate(...arguments);\n const widget = this._histogramWidget;\n if (widget) {\n widget.width = this.timeAxisViewModel.totalSize;\n widget.onElementResize(widget.element);\n }\n this.collectTicksWidth();\n }\n //endregion\n //region Data processing\n extractHistogramDataArray(histogramData, record) {\n return histogramData;\n }\n processRecordRenderData(renderData) {\n return renderData;\n }\n /**\n * Clears the histogram data cache for the provided record (if provided).\n * If the record is not provided clears the cache for all records.\n * @param {Core.data.Model} [record] Record to clear the cache for.\n */\n clearHistogramDataCache(record) {\n if (record) {\n this.histogramDataByRecord.delete(record);\n }\n else {\n this.histogramDataByRecord.clear();\n }\n }\n /**\n * Caches the provided histogram data for the given record.\n * @param {Core.data.Model} record Record to cache data for.\n * @param {Object} data Histogram data to cache.\n */\n setHistogramDataCache(record, data) {\n const eventData = { record, data };\n /**\n * Fires before the component stores a record's histogram data into the cache.\n *\n * A listener can be used to transform the collected data dynamically before\n * it's cached:\n *\n * ```javascript\n * new TimelineHistogram({\n * series : {\n * foo : {\n * type : 'bar',\n * field : 'f1'\n * }\n * },\n * ...\n * listeners : {\n * beforeHistogramDataCacheSet(eventData) {\n * // completely replace the data for a specific record\n * if (eventData.record.id === 123) {\n * eventData.data = [\n * { f1 : 10 },\n * { f1 : 20 },\n * { f1 : 30 },\n * { f1 : 40 },\n * { f1 : 50 },\n * { f1 : 60 }\n * ];\n * }\n * }\n * }\n * })\n * ```\n *\n * @param {Scheduler.view.TimelineHistogram} source The component instance\n * @param {Core.data.Model} record Record the histogram data of which is ready.\n * @param {Object} data The record histogram data.\n * @event beforeHistogramDataCacheSet\n */\n this.trigger('beforeHistogramDataCacheSet', eventData);\n this.histogramDataByRecord.set(eventData.record, eventData.data);\n /**\n * Fires after the component retrieves a record's histogram data and stores\n * it into the cache.\n *\n * Unlike similar {@link #event-beforeHistogramDataCacheSet} event this event is triggered\n * after the data is put into the cache.\n *\n * A listener can be used to transform the collected data dynamically:\n *\n * ```javascript\n * new TimelineHistogram({\n * series : {\n * bar : {\n * type : 'bar',\n * field : 'bar'\n * },\n * halfOfBar : {\n * type : 'outline',\n * field : 'half'\n * }\n * },\n * ...\n * listeners : {\n * histogramDataCacheSet({ data }) {\n * // add extra entries to collected data\n * data.forEach(entry => {\n * entry.half = entry.bar / 2;\n * });\n * }\n * }\n * })\n * ```\n *\n * @param {Scheduler.view.TimelineHistogram} source The component instance\n * @param {Core.data.Model} record Record the histogram data of which is ready.\n * @param {Object} data The record histogram data.\n * @event histogramDataCacheSet\n */\n this.trigger('histogramDataCacheSet', eventData);\n }\n /**\n * Returns entire histogram data cache if no record provided,\n * or cached data for the provided record.\n * @param {Core.data.Model} [record] Record to get the cached data for.\n * @returns {Object} The provided record cached data or all the records data cache\n * as a `Map` keyed by records.\n */\n getHistogramDataCache(record) {\n return record ? this.histogramDataByRecord.get(record) : this.histogramDataByRecord;\n }\n /**\n * Returns `true` if there is cached histogram data for the provided record.\n * @param {Core.data.Model} record Record to check the cache existence for.\n * @returns {Boolean} `True` if there is a cache for provided record.\n */\n hasHistogramDataCache(record) {\n return this.histogramDataByRecord.has(record);\n }\n finalizeDataRetrievingInternal(record, data) {\n // cleanup collectingDataFor map on data collecting completion\n this.collectingDataFor.delete(record);\n // cache record data\n this.setHistogramDataCache(record, data);\n // pass data through\n return data;\n }\n finalizeDataRetrieving(record, data) {\n if (Objects.isPromise(data)) {\n this.collectingDataFor.set(record, data);\n return data.then(data => this.finalizeDataRetrievingInternal(record, data));\n }\n return this.finalizeDataRetrievingInternal(record, data);\n }\n /**\n * Retrieves the histogram data for the provided record.\n *\n * The method first checks if there is cached data for the record and returns it if found.\n * Otherwise it starts collecting data by calling {@link #config-getRecordData} (if provided)\n * or by reading it from {@link #config-dataModelField} record field.\n *\n * The method can be asynchronous depending on the provided {@link #config-getRecordData} function.\n * If the function returns a `Promise` then the method will return a wrapping `Promise` in turn that will\n * resolve with the collected histogram data.\n *\n * The method triggers {@link #event-histogramDataCacheSet} event when a record data is ready.\n *\n * @param {Core.data.Model} record Record to retrieve the histogram data for.\n * @returns {Object|Promise} The histogram data for the provided record or a `Promise` that will provide the data\n * when resolved.\n */\n getRecordHistogramData(record) {\n const\n me = this,\n { getRecordData } = me;\n let result = me.collectingDataFor.get(record) || me.getHistogramDataCache(record);\n if (!result && !me.hasHistogramDataCache(record)) {\n // use \"getRecordData\" function if provided\n if (getRecordData) {\n result = getRecordData.handler.call(getRecordData.thisObj, ...arguments);\n }\n // or read data from the configured model field\n else {\n result = record.get(me.dataModelField);\n }\n result = me.finalizeDataRetrieving(record, result);\n }\n return result;\n }\n recordIsReadyForRendering(record) {\n return !this.collectingDataFor.has(record);\n }\n //endregion\n //region Render\n beforeRenderRow(eventData) {\n const\n me = this,\n histogramData = me.getRecordHistogramData(eventData.record);\n if (!Objects.isPromise(histogramData)) {\n const data = histogramData ? me.extractHistogramDataArray(histogramData, eventData.record) : [];\n // bail out if no data\n if (!data) {\n return;\n }\n // if ticks widths are not monotonous\n // we provide widths for each bar since in that case the histogram widget\n // won't be able to calculate them properly\n if (me.ticksWidth) {\n for (let i = 0, { length } = data; i < length; i++) {\n data[i].width = me.ticksWidth[i];\n }\n }\n const histogramConfig = Objects.merge(\n // reset topValue by default to enable its auto-detection\n { topValue : null },\n me.initialConfig.histogramWidget,\n {\n data,\n series : { ...me.series }\n });\n eventData = {\n ...eventData,\n histogramConfig,\n histogramData,\n histogramWidget : me.histogramWidget\n };\n /**\n * Fires before the component renders a row.\n *\n * This event is recommended to use instead of generic {@link #event-beforeRenderRow} event since\n * the component bails out of rendering rows for which histogram data is not ready yet\n * (happens in case of async data collecting). The generic {@link #event-beforeRenderRow}\n * is triggered in such cases too while this event is triggered only when the data is ready and the\n * row is actually about to be rendered.\n *\n * Use a listener to adjust histograms rendering dynamically for individual rows:\n *\n * ```javascript\n * new TimelineHistogram({\n * ...\n * listeners : {\n * beforeRenderHistogramRow({ record, histogramConfig }) {\n * // display an extra line for some specific record\n * if (record.id == 111) {\n * histogramConfig.series.extraLine = {\n * type : 'outline',\n * field : 'foo'\n * };\n * }\n * }\n * }\n * })\n * ```\n *\n * @param {Scheduler.view.TimelineHistogram} source The component instance\n * @param {Core.data.Model} record Record the histogram data of which is ready.\n * @param {HistogramConfig} histogramConfig Configuration object that will be applied to `histogramWidget`.\n * @param {Core.widget.graph.Histogram} histogramWidget The underlying widget that is used to render a chart.\n * @event beforeRenderHistogramRow\n */\n me.trigger('beforeRenderHistogramRow', eventData);\n // We are going to use eventData as stored renderData\n // so sanitize it from unwanted properties\n delete eventData.eventName;\n delete eventData.source;\n delete eventData.type;\n delete eventData.oldId;\n delete eventData.row;\n delete eventData.recordIndex;\n me._recordRenderData = me.processRecordRenderData(eventData);\n }\n super.beforeRenderRow(...arguments);\n }\n applyHistogramWidgetConfig(histogramWidget = this.histogramWidget, histogramConfig) {\n // reset some parameters (topValue and series) to force recalculations\n // and apply new configuration after\n Object.assign(histogramWidget, histogramWidgetCleanState, histogramConfig);\n }\n /**\n * Renders a histogram for a row.\n * The method applies passed data to the underlying {@link #property-histogramWidget} component.\n * Then the component renders charts and the method injects them into the corresponding column cell.\n * @param {HistogramRenderData} renderData Render data\n * @internal\n */\n renderRecordHistogram(renderData) {\n const\n me = this,\n { histogramData, cellElement } = renderData;\n // reset the cell for rows not having histogram data\n if (!histogramData) {\n cellElement.innerHTML = '';\n return;\n }\n /**\n * Fires before the component renders a histogram in a cell.\n *\n * @param {Scheduler.view.TimelineHistogram} source The component instance\n * @param {Core.data.Model} record Record the histogram data of which is ready.\n * @param {HistogramConfig} histogramConfig Configuration object that will be applied to `histogramWidget`.\n * @param {Core.widget.graph.Histogram} histogramWidget The underlying widget that is used to render a chart.\n * @event beforeRenderRecordHistogram\n */\n me.trigger('beforeRenderRecordHistogram', renderData);\n // sanitize renderData from unwanted properties\n delete renderData.eventName;\n delete renderData.type;\n delete renderData.source;\n const histogramWidget = renderData.histogramWidget || me.histogramWidget;\n me.applyHistogramWidgetConfig(histogramWidget, renderData.histogramConfig);\n histogramWidget.refresh({\n // tell histogram we want it to pass renderData as an extra argument in nested calls of getBarText and\n // other configured hooks\n args : [renderData]\n });\n const histogramCloneElement = histogramWidget.element.cloneNode(true);\n histogramCloneElement.removeAttribute('id');\n histogramCloneElement.classList.remove('b-hide-offscreen');\n cellElement.innerHTML = '';\n cellElement.appendChild(histogramCloneElement);\n }\n /**\n * TimeAxis column renderer used by this view to render row histograms.\n * It first calls {@link #function-getRecordHistogramData} method to retrieve\n * the histogram data for the renderer record.\n * If the record data is ready the method renders the record histogram.\n * And in case the method returns a `Promise` the renderer just\n * schedules the record refresh for later and exits.\n *\n * @param {HistogramRenderData} renderData Object containing renderer parameters.\n * @internal\n */\n histogramRenderer(renderData) {\n const\n me = this,\n histogramData = renderData.histogramData || me.getRecordHistogramData(renderData.record);\n // If the data is ready we just render a histogram\n // Otherwise we render nothing and the rendering will happen once the data is ready\n // (which is signalized by histogramDataCacheSet event)\n if (!Objects.isPromise(histogramData)) {\n Object.assign(renderData, me._recordRenderData);\n return me.renderRecordHistogram(...arguments);\n }\n return '';\n }\n /**\n * Group feature hook triggered by the feature to render group headers\n * @param {*} renderData\n * @internal\n */\n buildGroupHeader(renderData) {\n if (renderData.column === this.timeAxisColumn) {\n return this.histogramRenderer(renderData);\n }\n return this.features.group.buildGroupHeader(renderData);\n }\n //endregion\n get widgetClass() {}\n}\nTimelineHistogramBase.initClass();\nTimelineHistogramBase._$name = 'TimelineHistogramBase';", "import ArrayHelper from '../../../Core/helper/ArrayHelper.js';\nimport Objects from '../../../Core/helper/util/Objects.js';\nimport TimelineHistogramBase from '../TimelineHistogramBase.js';\n/**\n * @module Scheduler/view/mixin/TimelineHistogramGrouping\n */\n/**\n * Mixin for {@link Scheduler/view/TimelineHistogram} that provides record grouping support.\n * The class implements API to work with groups and their members and allows to rollup group members data\n * to their parents.\n *\n * The _groups_ here are either group headers built with the {@link Grid/feature/Group} feature or\n * parent nodes built with the {@link Grid/feature/TreeGroup} feature.\n *\n * ## Parent histogram data aggregating\n *\n * The mixin provides a {@link #config-aggregateHistogramDataForGroups} config which enables automatically rolling up\n * child records histogram data to their parents. By default all registered {@link #config-series}' values are\n * just summed up on parents level, but that can be changed by providing `aggregate`\n * config to {@link #config-series}:\n *\n * ```javascript\n * new TimelineHistogram({\n * series : {\n * salary : {\n * type : 'bar',\n * // show maximum value on the parent level\n * aggregate : 'max'\n * }\n * },\n * ...\n * })\n * ```\n *\n * Here is the list of supported `aggregate` values:\n *\n * - `sum` or `add` - sum of values in the group (default)\n * - `min` - minimum value in the group\n * - `max` - maximum value in the group\n * - `count` - number of child records in the group\n * - `avg` - average of the child values in the group\n *\n * There are a few hooks allowing customization of the rolling up process:\n * {@link #config-aggregateDataEntry}, {@link #config-getDataEntryForAggregating} and\n * {@link #config-initAggregatedDataEntry}.\n *\n * @extends Scheduler/view/TimelineHistogramBase\n * @mixin\n */\nexport default Target => class TimelineHistogramGrouping extends (Target || TimelineHistogramBase) {\n static $name = 'TimelineHistogramGrouping';\n //region Configs\n static configurable = {\n /**\n * When `true` the component will automatically calculate data for group records\n * based on the groups members data by calling {@link #function-getGroupRecordHistogramData} method.\n * @config {Boolean}\n * @category Parent histogram data collecting\n * @default\n */\n aggregateHistogramDataForGroups : true,\n /**\n * A function used for aggregating child records histogram data entries to their parent entry.\n *\n * It's called for each child entry and is meant to apply the child entry values to the\n * target parent entry (provided in `aggregated` parameter).\n * The function must return the resulting aggregated entry that will be passed as `aggregated`\n * parameter to the next __aggregating__ step.\n *\n * Should be provided as a function, or name of a function in the ownership hierarchy which may be called.\n *\n * @config {Function|String} aggregateDataEntry\n * @param {Object} aggregateDataEntry.aggregated Target parent data entry to aggregate the entry into.\n * @param {Object} aggregateDataEntry.entry Current entry to aggregate into `aggregated`.\n * @param {Number} aggregateDataEntry.arrayIndex Index of current array (index of the record among other records being aggregated).\n * @param {Object[]} aggregateDataEntry.entryIndex Index of `entry` in the current array.\n * @returns {Object} Return value becomes the value of the `aggregated` parameter on the next invocation of this function.\n * @category Parent histogram data collecting\n * @default\n */\n aggregateDataEntry : null,\n /**\n * Function that extracts a record histogram data entry for aggregating.\n * By default it returns the entry as is. Override the function if you need a more complex way\n * to retrieve the value for aggregating.\n *\n * Should be provided as a function, or name of a function in the ownership hierarchy which may be called.\n *\n * @config {Function|String} getDataEntryForAggregating\n * @param {Object} getDataEntryForAggregating.entry Current data entry.\n * @returns {Object} Entry to aggregate\n * @category Parent histogram data collecting\n * @default\n */\n getDataEntryForAggregating : null,\n /**\n * A function that initializes a target group record entry.\n *\n * Should be provided as a function, or name of a function in the ownership hierarchy which may be called.\n *\n * @config {Function|String} initAggregatedDataEntry\n * @returns {Object} Target aggregated entry\n * @category Parent histogram data collecting\n * @default\n */\n initAggregatedDataEntry : null,\n aggregateFunctions : {\n sum : {\n aliases : ['add'],\n entry(seriesId, acc, entry) {\n acc[seriesId] = (acc[seriesId] || 0) + entry[seriesId];\n return acc;\n }\n },\n min : {\n entry(seriesId, acc, entry) {\n const entryValue = entry[seriesId];\n if (entryValue < (acc[seriesId] || Number.MAX_VALUE)) acc[seriesId] = entryValue;\n return acc;\n }\n },\n max : {\n entry(seriesId, acc, entry) {\n const entryValue = entry[seriesId];\n if (entryValue > (acc[seriesId] || Number.MIN_VALUE)) acc[seriesId] = entryValue;\n return acc;\n }\n },\n count : {\n init(seriesId, entry, entryIndex, aggregationContext) {\n entry[seriesId] = aggregationContext.arrays.length;\n }\n },\n avg : {\n entry(seriesId, acc, entry) {\n acc[seriesId] = (acc[seriesId] || 0) + entry[seriesId];\n return acc;\n },\n finalize(seriesId, data, recordsData, records, aggregationContext) {\n const cnt = aggregationContext.arrays.length;\n data.forEach(entry => entry[seriesId] /= cnt);\n }\n }\n }\n };\n afterConfigure() {\n const me = this;\n me.internalAggregateDataEntry = me.internalAggregateDataEntry.bind(this);\n me.internalInitAggregatedDataEntry = me.internalInitAggregatedDataEntry.bind(this);\n super.afterConfigure();\n if (me.features.treeGroup) {\n me.features.treeGroup.ion({\n // reset groups cache on store grouping change\n beforeDataLoad : me.onTreeGroupBeforeDataLoad,\n thisObj : me\n });\n }\n }\n updateAggregateFunctions(value) {\n for (const [id, fn] of Object.entries(value)) {\n fn.id = id;\n if (fn.aliases) {\n for (const alias of fn.aliases) {\n value[alias] = fn;\n }\n }\n }\n }\n updateStore(store) {\n super.updateStore(...arguments);\n this.detachListeners('store');\n if (store) {\n store.ion({\n name : 'store',\n // reset groups cache on store grouping change\n // Recalculation of group membership is done through sort\n group : this.onStoreGroup,\n sort : this.onStoreSort,\n thisObj : this\n });\n }\n }\n changeAggregateDataEntry(fn) {\n return this.bindCallback(fn);\n }\n changeGetDataEntryForAggregating(fn) {\n return this.bindCallback(fn);\n }\n changeInitAggregatedDataEntry(fn) {\n return this.bindCallback(fn);\n }\n //endregion\n //region Event listeners\n onHistogramDataCacheSet({ record, data }) {\n // schedule record refresh for later\n super.onHistogramDataCacheSet(...arguments);\n if (this.aggregateHistogramDataForGroups) {\n this.scheduleRecordParentsRefresh(record);\n }\n }\n onTreeGroupBeforeDataLoad() {\n if (this.aggregateHistogramDataForGroups) {\n // reset groups cache on store grouping change\n this.resetGeneratedRecordsHistogramDataCache();\n }\n }\n onStoreGroup() {\n if (this.aggregateHistogramDataForGroups) {\n // reset groups cache on store grouping change\n this.resetGeneratedRecordsHistogramDataCache();\n }\n }\n onStoreSort({ source }) {\n if (this.aggregateHistogramDataForGroups && source.isGrouped) {\n // reset groups cache on store grouping change\n this.resetGeneratedRecordsHistogramDataCache();\n }\n }\n //endregion\n // Override getRecordHistogramData to support data aggregating for parents\n getRecordHistogramData(record, aggregationContext) {\n const me = this;\n let result;\n // If that's a group record and records aggregating is enabled\n // collect the aggregated data based on children\n if (me.aggregateHistogramDataForGroups && me.isGroupRecord(record)) {\n result = me.collectingDataFor.get(record) || me.getHistogramDataCache(record);\n if (!result && !me.hasHistogramDataCache(record)) {\n result = me.getGroupRecordHistogramData(record, aggregationContext);\n result = me.finalizeDataRetrieving(record, result);\n }\n }\n else {\n result = super.getRecordHistogramData(...arguments);\n }\n return result;\n }\n //region ArrayHelper.aggregate default callbacks\n internalAggregateDataEntry(acc, ...args) {\n const { aggregateFunctions } = this;\n // call series aggregate functions\n for (const { id, aggregate = 'sum' } of Object.values(this.series)) {\n let fn;\n if (aggregate !== false && ((fn = aggregateFunctions[aggregate].entry))) {\n acc = fn(id, acc, ...args);\n }\n }\n return this.aggregateDataEntry ? this.aggregateDataEntry(acc, ...args) : acc;\n }\n internalInitAggregatedDataEntry() {\n const\n entry = this.initAggregatedDataEntry ? this.initAggregatedDataEntry(...arguments) : {},\n { aggregateFunctions } = this;\n // call series aggregate functions\n for (const { id, aggregate = 'sum' } of Object.values(this.series)) {\n const fn = aggregateFunctions[aggregate].init;\n if (fn && aggregate !== false) {\n fn(id, entry, ...arguments);\n }\n }\n return entry;\n }\n //endregion\n //region Public methods\n /**\n * Resets generated records (parents and links) data cache\n */\n resetGeneratedRecordsHistogramDataCache() {\n const { store } = this;\n for (const record of this.getHistogramDataCache().keys()) {\n // clear cache for generated parents and links no longer in the store\n if (record.isGroupHeader || record.generatedParent || (record.isLinked && !store.includes(record))) {\n this.clearHistogramDataCache(record);\n }\n }\n }\n setHistogramDataCache(record, data) {\n super.setHistogramDataCache(record, data);\n // If that's a link let's update the original record cache too\n if (record.isLinked) {\n super.setHistogramDataCache(record.$original, data);\n }\n // if that's a record having links - update their caches too\n else if (record.$links) {\n const { store } = this;\n for (const link of record.$links) {\n // make sure the link belongs to this view store\n if (store.includes(link)) {\n super.setHistogramDataCache(link, data);\n }\n }\n }\n }\n // Override method to support links built by TreeGroup feature\n // so for the links the method will retrieve original records cache\n getHistogramDataCache(record) {\n let result = super.getHistogramDataCache(record);\n // if that's a link - try getting the original record cache\n if (!result && record.isLinked) {\n result = super.getHistogramDataCache(record.$original);\n }\n return result;\n }\n /**\n * Aggregates the provided group record children histogram data.\n * If some of the provided records data is not ready yet the method returns a `Promise`\n * that's resolved once the data is ready and aggregated.\n *\n * ```javascript\n * // get parent record aggregated histogram data\n * const aggregatedData = await histogram.getGroupRecordHistogramData(record);\n * ```\n *\n * @param {Core.data.Model} record Group record.\n * @param {Object} [aggregationContext] Optional aggregation context object.\n * When provided will be used as a shared object passed through while collecting the data.\n * So can be used for some custom application purposes.\n * @returns {Object[]|Promise} Either the provided group record histogram data or a `Promise` that\n * returns the data when resolved.\n * @category Parent histogram data collecting\n */\n getGroupRecordHistogramData(record, aggregationContext = {}) {\n aggregationContext.parentRecord = record;\n const result = this.aggregateRecordsHistogramData(this.getGroupChildren(record), aggregationContext);\n return Objects.isPromise(result) ? result.then(res => res) : result;\n }\n /**\n * Aggregates multiple records histogram data.\n * If some of the provided records data is not ready yet the method returns a `Promise`\n * that's resolved once the data is ready and aggregated.\n *\n * @param {Core.data.Model[]} records Records to aggregate data of.\n * @param {Object} [aggregationContext] Optional aggregation context object.\n * Can be used by to share some data between the aggregation steps.\n * @returns {Object[]|Promise} Either the provided group record histogram data or a `Promise` that\n * returns the data when resolved.\n * @category Parent histogram data collecting\n */\n aggregateRecordsHistogramData(records, aggregationContext = {}) {\n const\n me = this,\n recordsData = [],\n { parentRecord } = aggregationContext;\n let hasPromise = false;\n // collect children data\n for (const child of records) {\n const childData = me.getRecordHistogramData(child, aggregationContext);\n hasPromise = hasPromise || Objects.isPromise(childData);\n childData && recordsData.push(childData);\n }\n // If some of children daa is not ready yet\n if (hasPromise) {\n // wait till all children data is ready\n return Promise.all(recordsData).then(values => {\n // re-apply parentRecord since it could get overridden in above getRecordHistogramData() calls\n aggregationContext.parentRecord = parentRecord;\n // filter out empty values\n values = values.filter(x => x);\n return me.aggregateHistogramData(values, records, aggregationContext);\n });\n }\n // aggregate collected data\n return me.aggregateHistogramData(recordsData, records, aggregationContext);\n }\n /**\n * Indicates if the passed record represents a group header built by {@link Grid/feature/Group} feature\n * or a group built by {@link Grid/feature/TreeGroup} feature.\n *\n * @param {Core.data.Model} record The view record\n * @returns {Boolean} `true` if the record represents a group.\n * @internal\n */\n isGroupRecord(record) {\n return record.isGroupHeader || (this.isTreeGrouped && record.generatedParent);\n }\n /**\n * For a record representing a group built by {@link Grid/feature/Group} or {@link Grid/feature/TreeGroup}\n * feature returns the group members.\n *\n * @param {Core.data.Model} record A group record\n * @returns {Core.data.Model[]} Records belonging to the group\n * @internal\n */\n getGroupChildren(record) {\n return record.groupChildren || record.children;\n }\n /**\n * For a record belonging to a group built by {@link Grid/feature/Group} or {@link Grid/feature/TreeGroup}\n * feature returns the group header or parent respectively.\n *\n * @param {Core.data.Model} record A member record\n * @returns {Core.data.Model} The record group header or parent record\n * @internal\n */\n getRecordParent(record) {\n const { groupParent } = record;\n return groupParent?.get(this.store.id) || (this.isTreeGrouped && record.parent);\n }\n /**\n * Schedules refresh of the provided record's parents.\n * The method iterates up from the provided record parent to the root node\n * and schedules the iterated node rows refresh.\n * @param {Core.data.Model} record Record to refresh parent rows of.\n * @param {Boolean} [clearCache=true] `true` to reset the scheduled records histogram data cache.\n * @internal\n */\n scheduleRecordParentsRefresh(record, clearCache = true) {\n const me = this;\n let groupParent;\n while ((groupParent = me.getRecordParent(record))) {\n // reset group cache\n clearCache && me.clearHistogramDataCache(groupParent);\n // and scheduler its later refresh\n me.scheduleRecordRefresh(groupParent);\n // bubble up\n record = groupParent;\n }\n }\n //endregion\n /**\n * Aggregates collected child records data to its parent.\n * The method is synchronous and is called when all the child records data is ready.\n * Override the method if you need to preprocess or postprocess parent records aggregated data:\n *\n * ````javascript\n * class MyHistogramView extends TimelineHistogram({\n *\n * aggregateHistogramData(recordsData, records, aggregationContext) {\n * const result = super.aggregateHistogramData(recordsData, records, aggregationContext);\n *\n * // postprocess averageSalary series values collected for a parent record\n * result.forEach(entry => {\n * entry.averageSalary = entry.averageSalary / records.length;\n * });\n *\n * return result;\n * }\n *\n * });\n * ```\n *\n * @param {Object[]} recordsData Child records histogram data.\n * @param {Core.data.Model[]} records Child records.\n * @param {Object} aggregationContext An object containing current shared info on the current aggregation process\n */\n aggregateHistogramData(recordsData, records, aggregationContext = {}) {\n const\n me = this,\n { aggregateFunctions } = me;\n aggregationContext.recordsData = recordsData;\n aggregationContext.records = records;\n const arrays = recordsData.map((histogramData, index) => {\n return me.extractHistogramDataArray(\n histogramData,\n records[index]\n );\n });\n // summarize children histogram data\n const result = ArrayHelper.aggregate(\n arrays,\n me.getDataEntryForAggregating || (entry => entry),\n me.internalAggregateDataEntry,\n me.internalInitAggregatedDataEntry,\n aggregationContext\n );\n // call series aggregate functions\n for (const { id, aggregate = 'sum' } of Object.values(me.series)) {\n const fn = aggregateFunctions[aggregate].finalize;\n if (fn && aggregate !== false) {\n fn(id, result, ...arguments);\n }\n }\n return result;\n }\n get widgetClass() {}\n};\n", "import '../../column/ScaleColumn.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\n/**\n * @module Scheduler/view/mixin/TimelineHistogramScaleColumn\n */\n/**\n * Mixin of {@link Scheduler/view/TimelineHistogram} class that implements\n * {@link Scheduler/column/ScaleColumn} automatic injection and functioning.\n *\n * @mixin\n */\nexport default Target => class TimelineHistogramScaleColumn extends (Target) {\n static $name = 'TimelineHistogramScaleColumn';\n //region Config\n static configurable = {\n /**\n * The locked grid scale column reference.\n * @member {Scheduler.column.ScaleColumn} scaleColumn\n * @readonly\n * @category Scale column\n */\n /**\n * An object with configuration for the {@link Scheduler/column/ScaleColumn}.\n *\n * Example:\n *\n * ```javascript\n * new TimelineHistogram({\n * scaleColumn : {\n * width : 50\n * },\n * ...\n * });\n * ```\n *\n * Provide `null` to the config to get rid of the column completely:\n *\n * ```javascript\n * new TimelineHistogram({\n * // do not add scale column\n * scaleColumn : null,\n * ...\n * });\n * ```\n *\n * @config {ScaleColumnConfig} scaleColumn\n * @category Scale column\n */\n scaleColumn : {},\n scalePoints : null,\n scalePointsModelField : 'scalePoints',\n calculateTopValueByScalePoints : true\n };\n updateScalePoints(scalePoints) {\n const\n me = this,\n topScalePoint = scalePoints[scalePoints.length - 1];\n if (topScalePoint) {\n me.scaleUnit = topScalePoint.unit;\n // Applying new maximum value to the histogram.\n me.histogramWidget.topValue = me.getTopValueByScalePoints(scalePoints);\n }\n // Applying new points to the scale column\n if (me.scaleColumn) {\n me.scaleColumn.scalePoints = scalePoints;\n }\n }\n //endregion\n //region Columns\n changeColumns(columns, currentStore) {\n const\n me = this,\n scaleColumn = me.getConfig('scaleColumn');\n // No columns means destroy\n if (columns && scaleColumn) {\n const isArray = Array.isArray(columns);\n let cols = columns;\n if (!isArray) {\n cols = columns.data;\n }\n let\n scaleColumnIndex = cols?.length,\n scaleColumnConfig = scaleColumn;\n cols.some((col, index) => {\n if (col.type === 'scale') {\n scaleColumnIndex = index;\n scaleColumnConfig = ObjectHelper.assign(col, scaleColumnConfig);\n return true;\n }\n });\n // We're going to mutate this array which we do not own, so copy it first.\n cols = cols.slice();\n // Fix up the scaleColumn config in place\n cols[scaleColumnIndex] = {\n type : 'scale',\n ...scaleColumnConfig\n };\n if (isArray) {\n columns = cols;\n }\n else {\n columns.data = cols;\n }\n }\n return super.changeColumns(columns, currentStore);\n }\n updateColumns(columns, was) {\n super.updateColumns(columns, was);\n // Extract the known columns by type. Sorting will have placed them into visual order.\n if (columns) {\n this._scaleColumn = this.columns.find(c => c.isScaleColumn);\n }\n }\n onColumnsChanged({ action, changes, record : column, records }) {\n const { scaleColumn, columns } = this;\n // If someone replaces the column set (syncing leads to batch), ensure scale is always added\n if (scaleColumn && (action === 'dataset' || action === 'batch') && !columns.includes(scaleColumn)) {\n columns.add(scaleColumn, true);\n }\n super.onColumnsChanged(...arguments);\n }\n //endregion\n //region Data processing\n /**\n * A hook to convert scale point values to histogram ones.\n * In case they use different units.\n *\n * Override this method in a sub-class to implement your custom\n * application specific conversion.\n * @param {Number} value Scale point value\n * @param {String} unit Scale point unit\n * @internal\n */\n convertUnitsToHistogramValue(value, unit) {\n return value;\n }\n /**\n * A hook to convert histogram values to scale point ones.\n * In case they use different units.\n *\n * Override this method in a sub-class to implement your custom\n * application specific conversion.\n * @param {Number} value Scale point value\n * @param {String} unit Scale point unit\n * @internal\n */\n convertHistogramValueToUnits(value, unit) {\n return value;\n }\n extractHistogramDataArray(histogramData, record) {\n return histogramData;\n }\n getTopValueByScalePoints(scalePoints) {\n const\n me = this,\n { scaleColumn } = me,\n lastPoint = scalePoints[scalePoints.length - 1],\n { value, unit } = lastPoint;\n let rawValue = value;\n if (scaleColumn) {\n // add padding to top value\n rawValue *= 1 + (scaleColumn.scaleWidget.scaleMaxPadding || 0);\n }\n return me.convertUnitsToHistogramValue(rawValue, unit || me.scaleUnit);\n }\n processRecordRenderData(renderData) {\n renderData = super.processRecordRenderData(...arguments);\n if (this.scaleColumn) {\n const\n me = this,\n { record, histogramData, histogramConfig = {} } = renderData;\n let\n topValue = me.initialConfig.histogramWidget?.topValue,\n scalePoints = me.scalePoints || record.get(me.scalePointsModelField);\n if (!topValue) {\n // if no topValue provided but we have scalePoints\n if (scalePoints && me.calculateTopValueByScalePoints) {\n // calculate topValue based on the max scale point\n topValue = me.getTopValueByScalePoints(scalePoints);\n }\n // if still no topValue\n if (!topValue && histogramData) {\n const histogramWidget = renderData.histogramWidget || me.histogramWidget;\n ObjectHelper.assign(histogramWidget, histogramConfig);\n // get top value based on histogramData\n topValue = histogramWidget.getDataTopValue(histogramData);\n scalePoints = [{\n value : me.convertHistogramValueToUnits(topValue, me.scaleUnit),\n text : me.convertHistogramValueToUnits(topValue, me.scaleUnit)\n }];\n topValue += me.scaleColumn.scaleWidget.scaleMaxPadding * topValue;\n }\n renderData.scaleWidgetConfig = { scalePoints };\n renderData.histogramConfig = { ...histogramConfig, topValue };\n }\n }\n return renderData;\n }\n //endregion\n //region Render\n /**\n * Group feature hook triggered by the feature to render group headers\n * @param {Object} renderData\n * @internal\n */\n buildGroupHeader(renderData) {\n if (renderData.column === this.scaleColumn) {\n return this.scaleColumn.renderer(renderData);\n }\n return super.buildGroupHeader(...arguments);\n }\n beforeRenderCell(renderData) {\n if (this.scaleColumn && renderData.column === this.scaleColumn) {\n renderData.histogramData = this.getRecordHistogramData(renderData.record);\n // If data is read apply prepared render data\n if (!ObjectHelper.isPromise(renderData.histogramData)) {\n Object.assign(renderData, this._recordRenderData);\n }\n }\n return super.beforeRenderCell(...arguments);\n }\n /**\n * Renders record scale column content.\n * @param {Core.data.Model} record Record to render scale for\n * @param {Object} [renderData]\n * @category Scale column\n */\n renderRecordScale(record, renderData) {\n if (this.scaleColumn) {\n const\n row = this.getRowFor(record),\n cellElement = row?.getCell(this.scaleColumn.id);\n if (cellElement) {\n row.renderCell(cellElement);\n }\n }\n }\n get widgetClass() {}\n //endregion\n};\n", "import '../../Grid/column/TreeColumn.js';\nimport '../../Grid/feature/Tree.js';\nimport '../column/ScaleColumn.js';\nimport '../column/TimeAxisColumn.js';\nimport TimelineHistogramGrouping from './mixin/TimelineHistogramGrouping.js';\nimport '../feature/ColumnLines.js';\nimport '../feature/ScheduleTooltip.js';\nimport TimelineHistogramBase from './TimelineHistogramBase.js';\nimport TimelineHistogramScaleColumn from './mixin/TimelineHistogramScaleColumn.js';\n/**\n * @module Scheduler/view/TimelineHistogram\n */\n/**\n * This view displays histograms for the provided store records.\n *\n * A {@link Scheduler/column/ScaleColumn} is also added automatically.\n *\n * {@inlineexample Scheduler/view/TimelineHistogram.js}\n *\n * To create a standalone histogram, simply configure it with a {@link Core/data/Store} instance:\n *\n * ```javascript\n * const store = new Store({\n * data : [\n * {\n * id : 'r1',\n * name : 'Record 1',\n * // data used to render a histogram for this record\n * histogramData : [\n * { value1 : 200, value2 : 100 },\n * { value1 : 150, value2 : 50 },\n * { value1 : 175, value2 : 50 },\n * { value1 : 175, value2 : 75 }\n * ]\n * },\n * {\n * id : 'r2',\n * name : 'Record 2',\n * // data used to render a histogram for this record\n * histogramData : [\n * { value1 : 100, value2 : 100 },\n * { value1 : 150, value2 : 125 },\n * { value1 : 175, value2 : 150 },\n * { value1 : 175, value2 : 75 }\n * ]\n * }\n * ]\n * });\n *\n * const histogram = new TimelineHistogram({\n * appendTo : 'targetDiv',\n * startDate : new Date(2022, 11, 26),\n * endDate : new Date(2022, 11, 30),\n * store,\n * // specify series displayed in the histogram\n * series : {\n * value1 : {\n * type : 'bar',\n * field : 'value1'\n * },\n * value2 : {\n * type : 'bar',\n * field : 'value2'\n * }\n * },\n * columns : [\n * {\n * field : 'name',\n * text : 'Name'\n * }\n * ]\n * });\n * ```\n *\n * ## Providing histogram data\n *\n * There are two basic ways to provide histogram data:\n *\n * - the data can be provided statically in a record field configured as {@link #config-dataModelField}:\n *\n * ```javascript\n * const store = new Store({\n * data : [\n * {\n * id : 11,\n * name : 'John Smith',\n * // data used to render a histogram for this record\n * hd : [\n * { weight : 200, price : 100 },\n * { weight : 150, price : 105 },\n * { weight : 175, price : 90 },\n * { weight : 175, price : 95 }\n * ]\n * }\n * ]\n * });\n *\n * const histogram = new TimelineHistogram({\n * dataModelField : 'hd',\n * series : {\n * weight : {\n * type : 'bar'\n * },\n * price : {\n * type : 'outline'\n * }\n * },\n * ...\n * });\n * ```\n * - the data can be collected dynamically with the provided {@link #config-getRecordData} function:\n *\n * ```javascript\n * const histogram = new TimelineHistogram({\n * dataModelField : 'hd',\n * series : {\n * weight : {\n * type : 'bar'\n * },\n * price : {\n * type : 'outline'\n * }\n * },\n * ...\n * async getRecordData(record) {\n * // we get record histogram data from the server\n * const response = await fetch('https://some.url/to/get/data?' + new URLSearchParams({\n * // pass the record identifier and the time span we need data for\n * record : record.id,\n * startDate : DateHelper.format(this.startDate),\n * endDate : DateHelper.format(this.endDate),\n * }));\n * return response.json();\n * }\n * });\n * ```\n *\n * Please check [\"Timeline histogram\" guide](#Scheduler/guides/timelinehistogram.md) for more details.\n *\n * @features Scheduler/feature/ColumnLines\n * @features Scheduler/feature/GroupSummary\n * @features Scheduler/feature/HeaderZoom\n * @features Scheduler/feature/NonWorkingTime\n * @features Scheduler/feature/Pan\n * @features Scheduler/feature/ResourceMenu\n * @features Scheduler/feature/ResourceTimeRanges\n * @features Scheduler/feature/RowReorder\n * @features Scheduler/feature/ScheduleTooltip\n * @features Scheduler/feature/Split\n * @features Scheduler/feature/Summary\n * @features Scheduler/feature/TimeAxisHeaderMenu\n * @features Scheduler/feature/TimeRanges\n *\n * @extends Scheduler/view/TimelineHistogramBase\n * @mixes Scheduler/view/mixin/TimelineHistogramGrouping\n * @mixes Scheduler/view/mixin/TimelineHistogramScaleColumn\n *\n * @classtype timelinehistogram\n * @widget\n */\nexport default class TimelineHistogram extends TimelineHistogramBase.mixin(\n TimelineHistogramGrouping,\n TimelineHistogramScaleColumn\n) {\n //region Config\n static $name = 'TimelineHistogram';\n static type = 'timelinehistogram';\n /**\n * Retrieves the histogram data for the provided record.\n *\n * The method first checks if there is cached data for the record and returns it if found.\n * Otherwise it starts collecting data by calling {@link #config-getRecordData} (if provided)\n * or by reading it from the {@link #config-dataModelField} record field.\n *\n * If the provided record represents a group and {@link #config-aggregateHistogramDataForGroups} is enabled\n * then the group members data is calculated with a {@link #function-getGroupRecordHistogramData} method call.\n *\n * The method can be asynchronous depending on the provided {@link #config-getRecordData} function.\n * If the function returns a `Promise` then the method will return a wrapping `Promise` in turn that will\n * resolve with the collected histogram data.\n *\n * The method triggers the {@link #event-histogramDataCacheSet} event when a record data is ready.\n *\n * @param {Core.data.Model} record Record to retrieve the histogram data for.\n * @param {Object} [aggregationContext] An optional object passed when the method is called when aggregating\n * a group members histogram data.\n *\n * See {@link #function-getGroupRecordHistogramData} and {@link Core/helper/ArrayHelper#function-aggregate-static}\n * for more details.\n * @returns {Object|Promise} The histogram data for the provided record or a `Promise` that will provide the data\n * when resolved.\n * @function getRecordHistogramData\n */\n}\nTimelineHistogram.initClass();\nTimelineHistogram._$name = 'TimelineHistogram';", "import Combo from '../../Core/widget/Combo.js';\n/**\n * @module Scheduler/widget/ProjectCombo\n */\n/**\n * Combo that allows picking a dataset to use for a {@link Scheduler.model.ProjectModel}. Each item holds a title and\n * a load url to reconfigure the project with.\n *\n * @extends Core/widget/Combo\n * @classtype projectcombo\n * @widget\n */\nexport default class ProjectCombo extends Combo {\n static get $name() {\n return 'ProjectCombo';\n }\n static get type() {\n return 'projectcombo';\n }\n static get configurable() {\n return {\n /**\n * Project to reconfigure when picking an item.\n * @config {Scheduler.model.ProjectModel}\n * @category Common\n */\n project : null,\n /**\n * Field used as projects title.\n * @config {String}\n * @default\n * @category Common\n */\n displayField : 'title',\n /**\n * Field used as projects load url.\n * @config {String}\n * @default\n * @category Common\n */\n valueField : 'url',\n highlightExternalChange : false,\n editable : false\n };\n }\n updateProject(project) {\n if (project.transport.load?.url) {\n this.value = project.transport.load.url;\n }\n }\n onChange({ value, userAction }) {\n if (userAction && this.project) {\n this.project.transport.load.url = value;\n this.project.load();\n }\n }\n}\n// Register this widget type with its Factory\nProjectCombo.initClass();\nProjectCombo._$name = 'ProjectCombo';", "import List from '../../Core/widget/List.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\nimport ArrayHelper from '../../Core/helper/ArrayHelper.js';\n/**\n * @module Scheduler/widget/ResourceFilter\n */\n/**\n * A List which allows selection of resources to filter a specified eventStore to only show\n * events for the selected resources.\n *\n * Because this widget maintains a state that can be changed through the UI, it offers some of the\n * API of an input field. It has a read only {@link #property-value} property, and it fires a\n * {@link #event-change} event.\n *\n * @extends Core/widget/List\n * @classtype resourceFilter\n * @widget\n */\nexport default class ResourceFilter extends List {\n static get $name() {\n return 'ResourceFilter';\n }\n // Factoryable type name\n static get type() {\n return 'resourcefilter';\n }\n static get delayable() {\n return {\n applyFilters : 'raf'\n };\n }\n static get configurable() {\n return {\n /**\n * The {@link Scheduler.data.EventStore EventStore} to filter.\n * Events for resources which are deselected in this List will be filtered out.\n * @config {Scheduler.data.EventStore}\n */\n eventStore : null,\n multiSelect : true,\n toggleAllIfCtrlPressed : true,\n collapsibleGroups : true,\n itemTpl : record => StringHelper.encodeHtml(record.name || ''),\n /**\n * An optional filter function to apply when loading resources from the project's\n * resource store. Defaults to loading all resources.\n *\n * **This is called using this `ResourceFilter` as the `this` object.**\n *\n * @config {Function|String}\n * @param {Scheduler.model.ResourceModel} resource Resorce for filtering\n * @returns {Boolean} Returns `true` to include the passed resource\n * @default\n */\n masterFilter : (resource) => true,\n /**\n * By default, deselecting list items filters only the {@link #config-eventStore} so that\n * events for the deselected resources are hidden from view. The `resourceStore` is __not__\n * filtered.\n *\n * Configure this as `true` to also filter the `resourceStore` so that deselected resources\n * are also hidden from view (They will remain in this `List`)\n * @config {Boolean}\n * @default false\n */\n filterResources : null\n };\n }\n itemIconTpl(record, i) {\n const\n { eventColor } = record,\n // Named colors are applied using CSS\n cls = DomHelper.isNamedColor(eventColor) ? ` b-sch-foreground-${eventColor}` : '',\n // CSS style color is used as is\n style = !cls && eventColor ? ` style=\"color:${eventColor}\"` : '';\n return this.multiSelect ? `
` : '';\n }\n changeStore(store) {\n if (this.eventStore) {\n return super.changeStore(...arguments);\n }\n // If we have no eventStore yet, we cannot have a store.\n // So in that case, just cache the configuration object for use when\n // the eventStore arrives.\n else {\n this._storeConfig = store;\n }\n }\n changeEventStore(eventStore) {\n // Force ingestion of store.\n // changeStore above won't upgrade it to be a Store because we have no eventStore yet.\n // It will cache the config object as _storeConfig\n this.getConfig('store');\n return eventStore;\n }\n updateEventStore(eventStore) {\n const\n me = this,\n // This will be the raw store config block cached by changeStore.\n chainedStoreConfig = me._storeConfig || {},\n // Allow configuration of the filter for loading records from the master store.\n { resourceStore } = eventStore,\n store = me.store = resourceStore.chain(me.masterFilter, null, {\n ...chainedStoreConfig,\n syncSort : true\n }),\n changeListeners = {\n change : 'onStoreChange',\n thisObj : me\n };\n // We need to sync selection and rendering on changes fired from master store\n store.un(changeListeners);\n resourceStore.ion(changeListeners);\n if (!resourceStore.count) {\n resourceStore.project.ion({\n name : 'project',\n refresh : 'initFilter',\n thisObj : me\n });\n }\n else {\n me.initFilter();\n }\n }\n changeMasterFilter(masterFilter) {\n // Cannot use bind, otherwise fillFromMaster's check for whether it's a filter function fails.\n const me = this;\n // If we are filtering the resource store, we cannot now fill ourselves from the filtered\n // view of the resource store. Otherwise, the list would hide the list items as they are deselected.\n if (!me.filterResources) {\n return function(r) {\n return me.callback(masterFilter, me, [r]);\n };\n }\n }\n initFilter() {\n const me = this;\n if (me.eventStore.resourceStore.count) {\n // Must only read selected *if* the resourceStore has received data.\n // The lazy selected config must be left uningested until we have data.\n const { selected } = me;\n // We default to all resources selected unless this was configured with\n // an initialSelection.\n if (!selected.count) {\n // If the initially configured selection was expicitly empty, apply the filter now\n if (me.initialConfig.selected?.length === 0) {\n me.onInternalSelectionChange({ source : selected, added : [], removed : [] });\n }\n else {\n // Use allRecords in case it consists of collapsed groups\n selected.add(me.store.allRecords.filter(r => !r.isGroupHeader));\n }\n }\n me.detachListeners('project');\n }\n }\n onStoreRefresh({ source : store, action }) {\n // We need to re-enable the filter if the store becomes filtered.\n // We only disable the filter if we know that we have selected all available\n // resources.\n if (action === 'filter' && this.eventStoreFilter) {\n const\n { eventStoreFilter } = this,\n { disabled } = eventStoreFilter,\n newDisabled = !store.isFiltered && this.allSelected;\n if (newDisabled !== disabled) {\n eventStoreFilter.disabled = newDisabled;\n this.applyFilters();\n }\n }\n super.onStoreRefresh(...arguments);\n }\n onInternalSelectionChange({ source : selected, added = [], removed }) {\n // Filter disabled if all resources selected\n const\n me = this,\n // Only disable the filter if the allSelected method is seeing *all* of the\n // records from its masterStore with no filtering.\n disabled = !me.store.isFiltered && me.allSelected;\n super.onInternalSelectionChange(...arguments);\n let filtersAdded = false;\n // If this is the first selection change triggered from the first project refresh\n // in which all the resources are selected, then we ony need to apply the filters.\n // if *not* all resources are selected, ie if added.length !== entire store length.\n if (!me.eventStoreFilter) {\n // Our client EventStore is filtered to only show events for our selected resources.\n // Events without an associated resource are filtered into visibility.\n // The addFilter function with silent param adds the filter but don't reevaluate filtering.\n me.eventStoreFilter = me.eventStore.addFilter({\n id : `${me.id}-filter-instance`,\n filterBy : e => !e.resource || me.selected.includes(e.resources),\n disabled\n }, added?.length === me.store.count);\n filtersAdded = true;\n }\n if (me.filterResources && !me.resourceStoreFilter) {\n // Our client EventStore is filtered to only show events for our selected resources.\n // Events without an associated resource are filtered into visibility.\n // The addFilter function with silent param adds the filter but don't reevaluate filtering.\n me.resourceStoreFilter = me.eventStore.resourceStore.addFilter({\n id : `${me.id}-filter-instance`,\n filterBy : r => me.selected.includes(r),\n disabled\n }, added?.length === me.store.count);\n filtersAdded = true;\n }\n // The filters have been just added and so will take effect. No need to call applyFilter.\n if (filtersAdded) {\n return;\n }\n // Filter disabled if all resources selected\n me.eventStoreFilter.disabled = disabled;\n me.resourceStoreFilter && (me.resourceStoreFilter.disabled = disabled);\n // Have the client EventStore refresh its filtering but after a small delay so the List UI updates immediately.\n me.applyFilters();\n if (me.eventListeners.change) {\n const\n value = selected.values,\n oldValue = value.concat(removed);\n ArrayHelper.remove(oldValue, ...added);\n /**\n * Fired when this widget's selection changes\n * @event change\n * @param {String} value - This field's value\n * @param {String} oldValue - This field's previous value\n * @param {Core.widget.Field} source - This ResourceFilter\n */\n me.triggerFieldChange({\n value,\n oldValue\n });\n }\n }\n /**\n * An array encapsulating the currently selected resources.\n * @member {Scheduler.model.ResourceModel[]}\n * @readonly\n */\n get value() {\n return this.selected.values;\n }\n applyFilters() {\n this.eventStore.filter();\n this.filterResources && this.eventStore.resourceStore.filter();\n }\n doDestroy() {\n this.store?.destroy();\n super.doDestroy();\n }\n}\n// Register this widget type with its Factory\nResourceFilter.initClass();\nResourceFilter._$name = 'ResourceFilter';", "import DatePicker from '../../Core/widget/DatePicker.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport VersionHelper from '../../Core/helper/VersionHelper.js';\n/**\n * @module Scheduler/widget/SchedulerDatePicker\n */\n/**\n * A subclass of {@link Core.widget.DatePicker} which is able to show the presence of\n * events in its cells if configured with an {@link #config-eventStore}, and\n * {@link #config-showEvents} is set to a truthy value.\n *\n * The `datepicker` Widget type is implemented by this class when this class is imported, or built\n * into a bundle, and so any {@link Core.widget.DateField} may have its\n * {@link Core.widget.PickerField#config-picker} configured to use its capabilities of showing\n * the presence of events in its date cells.\n *\n * {@inlineexample Scheduler/widget/SchedulerDatePicker.js}\n *\n *\n * @extends Core/widget/DatePicker\n * @classtype datepicker\n * @widget\n */\nexport default class SchedulerDatePicker extends DatePicker {\n static get $name() {\n return 'SchedulerDatePicker';\n }\n static get type() {\n return 'datepicker';\n }\n static get configurable() {\n return {\n /**\n * How to show presence of events in the configured {@link #config-eventStore} in the\n * day cells. Values may be:\n *\n * * `false` - Do not show events in cells.\n * * `true` - Show a themeable bullet to indicate the presence of events for a date.\n * * `'count'` - Show a themeable badge containing the event count for a date.\n * @config {Boolean|'count'}\n * @default false\n */\n showEvents : null,\n /**\n * The {@link Scheduler.data.EventStore event store} from which the in-cell event presence\n * indicators are drawn.\n * @config {Scheduler.data.EventStore}\n */\n eventStore : null,\n /**\n * A function, or the name of a function in the ownership hierarchy to filter which events\n * are collected into the day cell data blocks.\n *\n * Return `true` to include the passed event, or a *falsy* value to exclude the event.\n *\n * @config {Function|String}\n * @param {Scheduler.model.EventModel} event Event for filtering\n * @returns {Boolean} Return `true` to include the passed event\n */\n eventFilter : {\n $config : 'lazy',\n value : null\n }\n };\n }\n construct(config) {\n // Handle deprecated events config. It is now showEvents.\n // events conflicts with the events data which may be passed in\n if ('events' in config) {\n config = {\n ...config,\n showEvents : config.events\n };\n delete config.events;\n VersionHelper.deprecate(VersionHelper['calendar'] ? 'Calendar' : 'Scheduler', '6.0.0', 'DatePicker#events should be configured as showEvents');\n }\n super.construct(config);\n }\n changeEventFilter(eventFilter) {\n if (typeof eventFilter === 'string') {\n const { handler, thisObj } = this.resolveCallback(eventFilter);\n eventFilter = handler.bind(thisObj);\n }\n return eventFilter;\n }\n doRefresh() {\n // Hidden widgets must not query the EventStore for loading on demand to be able to use\n // the EventStore's dateRangeRequested event.\n if (this.isVisible || !this.showEvents) {\n this.refreshEventsMap();\n return super.doRefresh(...arguments);\n }\n else {\n this.whenVisible('doRefresh');\n }\n }\n updateShowEvents(showEvents, oldShowEvents) {\n const\n me = this,\n { classList } = me.contentElement;\n let { eventStore } = me;\n // Begin any animations in the next AF\n me.requestAnimationFrame(() => {\n me.element.classList.toggle('b-datepicker-with-events', Boolean(showEvents));\n me.owner?.element.classList.toggle('b-datepicker-with-events', Boolean(showEvents));\n showEvents && classList.add(`b-show-events-${showEvents}`);\n classList.remove(`b-show-events-${oldShowEvents}`);\n });\n if (showEvents) {\n if (!eventStore) {\n const eventStoreOwner = me.up(w => w.eventStore);\n if (eventStoreOwner) {\n eventStore = eventStoreOwner.eventStore;\n }\n else {\n throw new Error('DatePicker configured with events but no eventStore');\n }\n }\n }\n else {\n me.eventsMap = null;\n }\n if (!me.isConfiguring) {\n me.updateEventStore(eventStore);\n me.doRefresh();\n }\n }\n refreshEventsMap() {\n const me = this;\n if (me.showEvents) {\n me.eventsMap = me.eventStore.getEventCounts({\n startDate : me.startDate,\n endDate : me.endDate,\n dateMap : me.eventsMap,\n filter : me.eventFilter\n });\n }\n }\n updateEventStore(eventStore) {\n // Add a listener to refresh on any event change unless the listener is already added.\n if (eventStore.findListener('change', 'refresh', this) === -1) {\n eventStore?.[this.showEvents ? 'on' : 'un']?.({\n change : 'refresh',\n thisObj : this\n });\n }\n }\n cellRenderer({ cell, date }) {\n const\n { showEvents } = this,\n count = this.eventCounts?.get?.(DateHelper.makeKey(date)),\n isCount = showEvents === 'count';\n delete cell.dataset.btip;\n if (count) {\n if (!isCount && this.eventCountTip) {\n cell.dataset.btip = this.L('L{ResourceInfoColumn.eventCountText}', count);\n }\n DomHelper.createElement({\n dataset : {\n count\n },\n class : {\n [isCount ? 'b-cell-events-badge' : 'b-icon b-icon-circle'] : 1,\n [SchedulerDatePicker.getEventCountClass(count)] : 1\n },\n parent : cell,\n [isCount ? 'text' : ''] : count\n });\n }\n }\n static getEventCountClass(count) {\n if (count) {\n if (count < 4) {\n return 'b-datepicker-1-to-3-events';\n }\n if (count < 7) {\n return 'b-datepicker-4-to-6-events';\n }\n return 'b-calendar-7-or-more-events';\n }\n return '';\n }\n static setupClass(meta) {\n // We take over the type name 'datepicker' when we are in the app\n meta.replaceType = true;\n super.setupClass(meta);\n }\n}\n// Register this widget type with its Factory\nSchedulerDatePicker.initClass();\nSchedulerDatePicker._$name = 'SchedulerDatePicker';", "import UndoRedoBase from '../../Core/widget/base/UndoRedoBase.js';\nimport '../../Core/widget/Combo.js';\n/**\n * @module Scheduler/widget/UndoRedo\n */\nconst isProjectConsumer = w => w.isProjectConsumer;\n/**\n * A widget which encapsulates undo/redo functionality for the {@link Scheduler.model.ProjectModel project}\n * of a scheduling widget (`Scheduler`, `Gantt` or `Calendar`).\n *\n * To make use of this, the project must be configured with a\n * {@link Scheduler.model.mixin.ProjectModelMixin#config-stm State Tracking Manager}.\n *\n * If inserted into a scheduling widget (such as into a `tbar`, or `bbar`, or as an item in a context menu),\n * the project of the encapsulating scheduling widget will be used.\n *\n * If this widget is to be used \"standalone\" (rendered into the DOM outside of a scheduling widget),\n * this must be configured with a reference to the project, or the scheduling widget which is\n * using the project.\n *\n * There are three child widgets encapsulated which may be referenced through the {@link Core.widget.Container#property-widgetMap}:\n *\n * - `undoBtn` - The button which operates the undo operation (CTRL+Z, or CMD+Z in Mac OS)\n * - `transactionsCombo` - A combobox into which is pushed the list of transactions,\n * - `redoBtn` - The button which operates the redo operation (CTRL+SHIFT+Z, + CMD+SHIFT+Z in Mac OS)\n *\n * To disable keyboard shortcuts for undo/redo, set {@link Scheduler.view.Scheduler#config-enableUndoRedoKeys} to false.\n *\n * The transactionsCombo may be configured away if only the buttons are required:\n *\n * ```javascript\n * {\n * type : 'undoredo',\n * items : {\n * transactionsCombo : null\n * }\n * }\n * ```\n *\n * The example below illustrated how to embed an `undoredo` widget in the top toolbar of a Scheduler.\n *\n * {@inlineexample Scheduler/widget/UndoRedo.js}\n *\n * @demo Scheduler/undoredo\n *\n * @extends Core/widget/base/UndoRedoBase\n * @classtype undoredo\n * @widget\n */\nexport default class UndoRedo extends UndoRedoBase {\n static get $name() {\n return 'UndoRedo';\n }\n static get type() {\n return 'undoredo';\n }\n static get configurable() {\n return {\n /**\n * The Scheduling Widget (or its `id`) whose transaction to track.\n *\n * This may be a `Scheduler`, a `Gantt` or a `Calendar`.\n *\n * ```javascript\n * {\n * type : 'undoredo',\n * scheduler : myCalendar\n * }\n * ```\n * @config {Core.widget.Widget|String}\n */\n scheduler : null,\n /**\n * Get/set ProjectModel instance, containing the data visualized by the SchedulerPro.\n * @member {Scheduler.model.ProjectModel} project\n * @category Data\n */\n /**\n * The Scheduling {@link Scheduler.model.ProjectModel project}'s whose\n * transaction to track.\n *\n * ```javascript\n * {\n * type : 'undoredo',\n * project : scheduler.project\n * }\n * ```\n * @config {Scheduler.model.ProjectModel|ProjectModelConfig}\n * @category Data\n */\n project : null\n };\n }\n construct() {\n super.construct(...arguments);\n // Look up a Project owner in our ancestors.\n if (!this.stm) {\n this.scheduler = this.up(isProjectConsumer);\n }\n }\n changeScheduler(scheduler) {\n return scheduler.isProjectConsumer ? scheduler : UndoRedo.getById(scheduler);\n }\n updateScheduler(scheduler) {\n const { crudManager } = scheduler;\n scheduler.ion({\n projectChange : 'onProjectChanged',\n thisObj : this\n });\n if (crudManager) {\n this.setupLoadListener(crudManager);\n }\n // No CrudManager, so it must be inline data, so we can start immediately\n else {\n this.onLoad();\n }\n this.stm = scheduler.project.stm;\n }\n setupLoadListener(source) {\n source.detachListeners('load');\n source.ion({\n name : 'load',\n load : 'onLoad',\n thisObj : this\n });\n }\n async onLoad() {\n // Do not want normalization changes to be tracked by STM, wait until they are finished before enabling\n await this.scheduler.project.commitAsync();\n // Widget could be destroyed during async project commit\n if (!this.isDestroyed) {\n this.stm.enable();\n this.fillUndoRedoCombo();\n }\n }\n onProjectChanged({ project }) {\n this.project = project;\n }\n updateProject(project) {\n super.updateProject(...arguments);\n // The original condition `(project && !this.scheduler?.isConfiguring)` is not\n // correctly transpiled by angular webpack leading to https://github.com/bryntum/support/issues/3789\n // The following syntax fixes the above bug\n if (project && this.scheduler && !this.scheduler.isConfiguring) {\n this.setupLoadListener(project);\n }\n }\n}\nUndoRedo.initClass();\nUndoRedo._$name = 'UndoRedo';", "import Combo from '../../Core/widget/Combo.js';\nimport Widget from '../../Core/widget/Widget.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\n/**\n * @module Scheduler/widget/ViewPresetCombo\n */\n/**\n * A combo for selecting {@link Scheduler.preset.ViewPreset} for Scheduler and Gantt. Lets the user select\n * between specified {@link #config-presets} available.\n *\n * {@inlineexample Scheduler/widget/ViewPresetCombo.js}\n *\n * {@note}By default, a preset change by the ViewPresetCombo will result in that the `startDate` will be calculated to\n * the beginning of the {@link Scheduler.preset.ViewPreset#field-mainUnit} of the\n * {@link Scheduler.view.mixin.TimelineDateMapper#property-viewportCenterDate}. If the ViewPreset has a\n * {@link Scheduler.preset.ViewPreset#field-start} configured, this will be added to the calculation. The\n * `endDate` will then be calculated by adding the ViewPreset's\n * {@link Scheduler.preset.ViewPreset#field-defaultSpan} to the `startDate`. Set {@link #config-useFixedDuration} to\n * `false` to prevent this behaviour.{@/note}\n *\n * Add it to the component's toolbar to connect it automatically:\n * ```javascript\n * new Scheduler({\n * tbar : {\n * viewPresetCombo: {\n * type: 'viewpresetcombo',\n * width: '7em'\n * }\n * }\n * });\n * ```\n *\n * Or specify which Scheduler, SchedulerPro or Gantt component instance it should connect to the {@link #config-client}\n * config:\n * ```javascript\n * const scheduler = new Scheduler({ ... });\n * const viewPresetCombo = new ViewPresetCombo({\n * appendTo : 'someElementClassName',\n * client : scheduler\n * });\n * ```\n *\n * By default, the following presets are shown in the combo:\n * * {@link Scheduler.preset.PresetManager hourAndDay}\n * * {@link Scheduler.preset.PresetManager weekAndDay}\n * * {@link Scheduler.preset.PresetManager dayAndMonth}\n *\n * ## Changing selectable presets\n * To change the default selectable presets specify an array of preset ids. The presets specified must be available to\n * the client.\n *\n * ```javascript\n * viewPresetCombo: {\n * presets: ['weekAndDay', 'dayAndMonth', 'myCustomPreset']\n * }\n * ```\n *\n * NOTE: The selectable presets will be arranged in the order provided in the {@link #config-presets} config.\n * @extends Core/widget/Combo\n * @classtype viewpresetcombo\n * @widget\n */\nexport default class ViewPresetCombo extends Combo {\n static $name = 'ViewPresetCombo';\n static type = 'viewpresetcombo';\n static configurable = {\n /**\n * An array containing string {@link Scheduler.preset.ViewPreset} ids available for selection. The specified\n * presets must be {@link Scheduler.view.mixin.TimelineViewPresets#config-presets available} for the\n * {@link #config-client} (Scheduler, SchedulerPro or Gantt) for it to work properly. The selectable presets\n * will be arranged in the order provided here.\n * @config {Array}\n */\n presets : ['hourAndDay', 'weekAndDay', 'dayAndMonth'],\n /**\n * If not added to a toolbar, provide a Scheduler, SchedulerPro or Gantt component instance to which the\n * ViewPresetCombo should be connected.\n * @config {Scheduler.view.TimelineBase}\n * @default\n */\n client : null,\n /**\n * As default, a preset change by the ViewPresetCombo will result in that the `startDate` will be calculated to\n * the beginning of the {@link Scheduler.preset.ViewPreset#field-mainUnit} of the\n * {@link Scheduler.view.mixin.TimelineDateMapper#property-viewportCenterDate}. If the ViewPreset has a\n * {@link Scheduler.preset.ViewPreset#field-start} configured, this will be added to the calculation. The\n * `endDate` will then be calculated by adding the ViewPreset's\n * {@link Scheduler.preset.ViewPreset#field-defaultSpan} to the `startDate`.\n *\n * If this is set to `false`, the preset change will result in a call to\n * {@link Scheduler.view.mixin.TimelineZoomable#function-zoomToLevel} without any options. The default behaviour\n * of zoom functionality is to keep the timespan about the same width. If you want to change ViewPreset/Zoom\n * without any changes to the visible timespan, you can set the\n * {@link Scheduler.view.mixin.TimelineZoomable#config-zoomKeepsOriginalTimespan} config to `true`.\n * @config {Boolean}\n */\n useFixedDuration : true,\n /**\n * @hideconfigs caseSensitive,chipView,clearTextOnPickerHide,createOnUnmatched,displayField,displayValueRenderer,emptyText,encodeFilterParams,filterOnEnter,filterOperator,filterParamName,filterSelected,hideTrigger,inlinePicker,items,keyStrokeFilterDelay,minChars,multiSelect,multiValueSeparator,primaryFilter,store,triggerAction,validateFilter,value,valueField,containValues,container,inline,adopt,dataset,title,autoSelect,clearable,highlightExternalChange,keyStrokeChangeDelay,maxLength,minLength,placeholder,required,revertOnEscape,triggers,autoComplete,inputType,spellCheck,validateOnInput,tooltip,autoClose,autoExpand,picker,pickerAlignElement\n */\n /**\n * @hideproperties filterOperator,isEmpty,queryLast,records,store,valueCollection,content,contentElement,dataset,html,overflowElement,errorTip,isEmptyInput,isValid,triggers,scrollable,cellInfo,tab\n */\n /**\n * @hidefunctions clear,clearError,getErrors,select,setError,contains,exitFullscreen,requestFullscreen,owns,query,queryAll\n */\n /**\n * @hideevents input\n */\n editable : false,\n valueField : 'id',\n displayField : 'name',\n placeholder : 'Select view'\n };\n construct() {\n super.construct(...arguments);\n this.scheduler.ion({\n presetchange : this.onClientPresetChange,\n thisObj : this\n });\n }\n // Returns current client (Scheduler, SchedulerPro or Gantt)\n get scheduler() {\n return this.client || this.up(widget => widget.isTimelineBase) || Widget.query(widget => widget.isTimelineBase);\n }\n changeValue(value, oldValue) {\n // Set up items before applying value, to prevent an empty store from being created and then replaced,\n // which in turn leads to preset changing (caused by https://github.com/bryntum/support/issues/5732)\n this.getConfig('presets');\n return super.changeValue(value, oldValue);\n }\n // Creates a chained store of the clients presets store filtered and sorted by the presets config\n updatePresets(presets) {\n this.store = this.scheduler.presets.chain(r => presets.includes(r.id));\n this.store.sort((a, b) => presets.indexOf(a.id) - presets.indexOf(b.id));\n }\n // When client preset is changed from somewhere else, zooming for example.\n onClientPresetChange({ preset }) {\n const me = this;\n if (!me._isSelecting) {\n me.isSettingValue = true;\n // Select preset in combo if it exists\n if (me.store.includes(preset.id)) {\n me.value = preset;\n }\n // Clear combo otherwise\n else {\n me.clear();\n }\n me.isSettingValue = false;\n }\n }\n onSelect({ record }) {\n if (!this.isSettingValue) {\n const\n { scheduler } = this,\n { mainUnit, start, defaultSpan } = record,\n options = {};\n if (mainUnit && defaultSpan && this.useFixedDuration) {\n let beginningOf = mainUnit;\n if (start && typeof start === 'string') {\n beginningOf = DateHelper.parseTimeUnit(start) ?? start;\n }\n options.startDate = DateHelper.startOf(scheduler.viewportCenterDate, beginningOf);\n if (typeof start === 'number') {\n options.startDate = DateHelper.add(options.startDate, start, mainUnit);\n }\n options.endDate = DateHelper.add(options.startDate, defaultSpan, mainUnit);\n }\n scheduler.zoomToLevel(record, options);\n }\n }\n // If underlying store localizes, we need to sync the input field value\n updateLocalization() {\n super.updateLocalization();\n this.syncInputFieldValue();\n }\n}\n// Register this widget type with its Factory\nViewPresetCombo.initClass();\nViewPresetCombo._$name = 'ViewPresetCombo';", "import { stripDuplicates } from \"../util/StripDuplicates.js\";\nexport class CalendarCacheIntervalMultiple {\n constructor(config) {\n this.intervalGroups = [];\n config && Object.assign(this, config);\n }\n combineWith(interval) {\n const copy = this.intervalGroups.slice();\n copy.push([interval.calendar, interval]);\n return new CalendarCacheIntervalMultiple({ intervalGroups: copy });\n }\n getIsWorkingForEvery() {\n if (this.isWorkingForEvery != null)\n return this.isWorkingForEvery;\n for (let [_calendar, intervals] of this.getGroups()) {\n if (!intervals[0].isWorking)\n return this.isWorkingForEvery = false;\n }\n return this.isWorkingForEvery = true;\n }\n getIsWorkingForSome() {\n if (this.isWorkingForSome != null)\n return this.isWorkingForSome;\n for (let [_calendar, intervals] of this.getGroups()) {\n if (intervals[0].isWorking)\n return this.isWorkingForSome = true;\n }\n return this.isWorkingForSome = false;\n }\n getCalendars() {\n this.getGroups();\n return this.calendars;\n }\n isCalendarWorking(calendar) {\n return this.getCalendarsWorkStatus().get(calendar);\n }\n getCalendarsWorkStatus() {\n if (this.calendarsWorkStatus)\n return this.calendarsWorkStatus;\n const res = new Map();\n for (let [calendar, intervals] of this.getGroups()) {\n res.set(calendar, intervals[0].isWorking);\n }\n return this.calendarsWorkStatus = res;\n }\n getCalendarsWorking() {\n if (this.calendarsWorking)\n return this.calendarsWorking;\n const calendars = [];\n for (let [calendar, intervals] of this.getGroups()) {\n if (intervals[0].isWorking)\n calendars.push(calendar);\n }\n return this.calendarsWorking = calendars;\n }\n getCalendarsNonWorking() {\n if (this.calendarsNonWorking)\n return this.calendarsNonWorking;\n const calendars = [];\n for (let [calendar, intervals] of this.getGroups()) {\n if (!intervals[0].isWorking)\n calendars.push(calendar);\n }\n return this.calendarsNonWorking = calendars;\n }\n getGroups() {\n if (this.intervalsByCalendar)\n return this.intervalsByCalendar;\n const calendars = this.calendars = [];\n const intervalsByCalendar = new Map();\n this.intervalGroups.forEach(([calendar, interval]) => {\n let data = intervalsByCalendar.get(calendar);\n if (!data) {\n calendars.push(calendar);\n data = [];\n intervalsByCalendar.set(calendar, data);\n }\n data.push.apply(data, interval.intervals);\n });\n intervalsByCalendar.forEach((intervals, calendar) => {\n const unique = stripDuplicates(intervals);\n unique.sort(\n // sort in decreasing order\n (interval1, interval2) => interval2.getPriorityField() - interval1.getPriorityField());\n intervalsByCalendar.set(calendar, unique);\n });\n return this.intervalsByCalendar = intervalsByCalendar;\n }\n}\n", "import { stripDuplicates } from \"../util/StripDuplicates.js\";\nimport { CalendarCache } from \"./CalendarCache.js\";\nimport { CalendarCacheIntervalMultiple } from \"./CalendarCacheIntervalMultiple.js\";\nimport { IntervalCache } from \"./IntervalCache.js\";\n/**\n * The calendar cache for combination of multiple calendars\n */\nexport class CalendarCacheMultiple extends CalendarCache {\n constructor(config) {\n super(config);\n this.calendarCaches = stripDuplicates(this.calendarCaches);\n this.intervalCache = new IntervalCache({\n emptyInterval: new CalendarCacheIntervalMultiple(),\n combineIntervalsFn: (interval1, interval2) => {\n return interval1.combineWith(interval2);\n }\n });\n }\n fillCache(startDate, endDate) {\n this.calendarCaches.forEach(calendarCache => {\n calendarCache.fillCache(startDate, endDate);\n this.includeWrappingRangeFrom(calendarCache, startDate, endDate);\n });\n }\n}\nconst COMBINED_CALENDARS_CACHE = new Map();\nexport const combineCalendars = (calendars) => {\n const uniqueOnly = stripDuplicates(calendars);\n if (uniqueOnly.length === 0)\n throw new Error(\"No calendars to combine\");\n uniqueOnly.sort((calendar1, calendar2) => {\n if (calendar1.internalId < calendar2.internalId)\n return -1;\n else\n return 1;\n });\n const hash = uniqueOnly.map(calendar => calendar.internalId + '/').join('');\n const versionsHash = uniqueOnly.map(calendar => calendar.version + '/').join('');\n let cached = COMBINED_CALENDARS_CACHE.get(hash);\n let res;\n if (cached && cached.versionsHash === versionsHash)\n res = cached.cache;\n else {\n res = new CalendarCacheMultiple({ calendarCaches: uniqueOnly.map(calendar => calendar.calendarCache) });\n // COMBINED_CALENDARS_CACHE.set(hash, {\n // versionsHash : versionsHash,\n // cache : res\n // })\n }\n return res;\n};\n", "import Column from '../../Grid/column/Column.js';\nimport ColumnStore from '../../Grid/data/ColumnStore.js';\nimport DomSync from '../../Core/helper/DomSync.js';\nimport DH from '../../Core/helper/DateHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport Rectangle from '../../Core/helper/util/Rectangle.js';\n/**\n * @module Calendar/column/AgendaColumn\n */\n/**\n * A column that displays events for a day.\n *\n * This is not intended to be used directly, it is used by the {@link Calendar.widget.AgendaView} which\n * is a specialized {@link Grid.view.Grid} subclass.\n *\n * @extends Grid/column/Column\n *\n * @classtype agendacolumn\n * @column\n */\nexport default class AgendaColumn extends Column {\n //region Config\n static $name = 'AgendaColumn';\n static get type() {\n return 'agendacolumn';\n }\n static get defaults() {\n return {\n id : 'agenda', \n text : 'Agenda',\n filterable : false,\n sortable : false,\n editor : false,\n searchable : false,\n // With its defaultRenderer, and no eventRenderer, AgendaColumn measures\n // once then is able to calculate row heights from the cell's event count.\n // This field is automatically set to true if a column renderer or eventRenderer\n // is found.\n autoHeight : false,\n alwaysClearCell : false\n };\n }\n //endregion\n construct() {\n super.construct(...arguments);\n this.grid.ion({\n beforeResponsiveStateChange : 'onBeforeGridResponsiveStateChange',\n thisObj : this\n });\n }\n //region Render\n /**\n * Renderer that shows a list of events for a single date.\n *\n * Note that all {@link Calendar.widget.AgendaView} columns are automatically set to\n * {@link Grid.column.Column#config-autoHeight} because an unpredictable number of events may appear in\n * any cell.\n *\n * @param {Object} renderData Object containing renderer parameters\n * @param {HTMLElement} renderData.cellElement Cell element, for adding CSS classes, styling etc. Can be `null` in case of export\n * @param {*} renderData.value Value to be displayed in the cell\n * @param {DayCell} renderData.record A {@link Calendar.widget.mixin.DayCellCollecter#typedef-DayCell} context object\n * which contains contextual information about the date being rendered and an `events` property encapsulating\n * all the events which coincide with the date.\n * @param {Grid.column.Column} renderData.column This column\n * @param {Grid.view.Grid} renderData.grid This grid\n * @param {Grid.row.Row} renderData.row Row object. Can be null in case of export. Use the\n * {@link Grid.row.Row#function-assignCls row's API} to manipulate CSS class names.\n * @param {Boolean} renderData.isExport True if record is being exported to allow special handling during export\n * @param {Boolean} renderData.isMeasuring True if the column is being measured for a `resizeToFitContent` call.\n * In which case an advanced renderer might need to take different actions.\n * @returns {DomConfig|String|null}\n */\n defaultRenderer({ cellElement : targetElement, record, grid, size }) {\n const\n me = this,\n {\n events,\n date\n } = record,\n children = [];\n for (let i = 0; i < events.length; i++) {\n const\n eventRecord = events[i],\n eventEndDate = eventRecord.endDate || DH.add(eventRecord.startDate, eventRecord.duration, eventRecord.durationUnit),\n isOverflow = eventRecord.startDate < date,\n overflows = eventEndDate > record.tomorrow,\n eventDomConfig = grid.createEventDomConfig({\n date : record.date,\n isAllDay : eventRecord.allDay || overflows || isOverflow,\n eventRecord\n });\n // Arrow shows that it continues\n eventDomConfig.className['b-continues-future'] = overflows;\n eventDomConfig.className['b-continues-past'] = isOverflow;\n children.push({\n className : {\n 'b-cal-agenda-event-row' : 1\n },\n dataset : {\n rowId : eventRecord.id\n },\n children : [\n grid.eventListEventTimeRenderer(eventRecord, date),\n eventDomConfig\n ],\n // Match existing data-rowId elements first and ensure DOM order matches\n // children order.\n syncOptions : {\n syncIdField : 'rowId',\n releaseThreshold : 0,\n strict : true\n }\n });\n }\n grid._cellRenderer?.(...arguments);\n // cellRenderer may update the cellData record, so test after.\n targetElement.classList[record.isNonWorking ? 'add' : 'remove'](grid.nonWorkingDayCls);\n DomSync.sync({\n domConfig : {\n onlyChildren : true,\n children : [\n grid.agendaEventDateRenderer(date),\n {\n className : {\n 'b-cal-event-bar-container' : 1\n },\n children\n }\n ],\n // Match existing data-row-id elements first and ensure DOM order matches\n // children order.\n syncOptions : {\n syncIdField : 'date',\n releaseThreshold : 0,\n strict : true\n }\n },\n targetElement\n });\n targetElement.dataset.date = record.id;\n if (!me.autoHeight) {\n const\n dateBlock = targetElement.querySelector('.b-cal-agenda-date'),\n cellTbPadding = me._cellTbPadding != null ? me._cellTbPadding : (\n me._cellTbPadding = DomHelper.getEdgeSize(targetElement, 'padding', 'tb').height\n ),\n containerPadding = me._containerPadding != null ? me._containerPadding : (\n me._containerPadding = DomHelper.getEdgeSize(targetElement.querySelector('.b-cal-event-bar-container'), 'margin', 'tb').height\n ),\n dateBlockHeight = me._dateBlockHeight != null ? me._dateBlockHeight : (\n me._dateBlockHeight = Rectangle.outer(dateBlock).height\n );\n size.height = Math.max(record.events.length * (grid.eventHeightInPixels + grid.eventRowSpacing) - grid.eventRowSpacing + cellTbPadding + containerPadding + (grid.responsiveState === 'small' ? dateBlockHeight : 0), 86);\n }\n }\n onBeforeGridResponsiveStateChange() {\n // Invalidate cached measurements\n this._cellTbPadding = this._containerPadding = this._dateBlockHeight = this._dateBlockHeight = null;\n }\n getCellClass(cellContext) {\n const result = super.getCellClass(cellContext);\n result['b-sticky-cell'] = result[`b-day-of-week-${cellContext.record.day}`] = 1;\n return result;\n }\n //endregion\n //region Other\n headerRenderer({ headerElement : targetElement }) {\n targetElement.innerHTML = '';\n DomSync.sync({\n domConfig : {\n className : {\n 'b-cal-agenda-header' : 1,\n 'b-grid-header' : 1,\n 'b-last-leaf' : 1\n },\n children : [{\n className : {\n 'b-cal-agenda-header-date' : 1\n },\n text : 'Date'\n }, {\n className : {\n 'b-cal-agenda-header-time' : 1\n },\n text : 'Time'\n }, {\n className : {\n 'b-cal-agenda-header-event' : 1\n },\n text : 'Event'\n }]\n },\n targetElement\n });\n }\n //endregion\n}\nColumnStore.registerColumnType(AgendaColumn);\nAgendaColumn._$name = 'AgendaColumn';", "import Column from '../../Grid/column/Column.js';\nimport ColumnStore from '../../Grid/data/ColumnStore.js';\nimport DomSync from '../../Core/helper/DomSync.js';\n/**\n * @module Calendar/column/EventColumn\n */\n/**\n * A column that displays a formatted event with details of name, times, and assigned resources in a\n * grid cell.\n *\n * This is not intended to be used directly, it is used by the {@link Calendar.widget.EventList} which\n * is a specialized {@link Grid.view.Grid} subclass.\n *\n * @extends Grid/column/Column\n *\n * @classtype calendarevents\n * @column\n */\nexport default class EventColumn extends Column {\n //region Config\n static $name = 'EventColumn';\n static type = 'calendarevents';\n static get defaults() {\n return {\n id : 'calendarevents', \n text : 'Event Details',\n filterable : false,\n sortable : false,\n editor : false,\n searchable : false,\n autoHeight : true,\n alwaysClearCell : false\n };\n }\n //endregion\n //region Render\n /**\n * Renderer that shows resource avatars of assigned resources next to event names for a single date.\n *\n * Note that all {@link Calendar.widget.AgendaView} columns are automatically set to\n * {@link Grid.column.Column#config-autoHeight} because an unpredictable number of events may appear in\n * any cell.\n *\n * @config {Function} renderer\n * @param {Object} renderData Object containing renderer parameters\n * @param {HTMLElement} renderData.cellElement Cell element, for adding CSS classes, styling etc. Can be `null` in case of export\n * @param {*} renderData.value Value to be displayed in the cell\n * @param {DayCell} renderData.record A {@link Calendar.widget.mixin.DayCellCollecter#typedef-DayCell} context object\n * which contains contextual information about the date being rendered and an `events` property encapsulating\n * all the events which coincide with the date.\n * @param {Grid.column.Column} renderData.column This column\n * @param {Grid.view.Grid} renderData.grid This grid\n * @param {Grid.row.Row} renderData.row Row object. Can be null in case of export. Use the\n * {@link Grid.row.Row#function-assignCls row's API} to manipulate CSS class names.\n * @param {Boolean} renderData.isExport True if record is being exported to allow special handling during export\n * @param {Boolean} renderData.isMeasuring True if the column is being measured for a `resizeToFitContent` call.\n * In which case an advanced renderer might need to take different actions.\n * @returns {DomConfig|String|null}\n */\n renderer({ cellElement : targetElement, record, grid }) {\n const\n resourceFilter = grid.calendar?.widgetMap.resourceFilter,\n resources = resourceFilter ? record.resources.filter(r => resourceFilter.selected.includes(r)) : record.resources;\n grid._cellRenderer?.(...arguments);\n grid.showResourceAvatars = true;\n DomSync.sync({\n domConfig : {\n onlyChildren : true,\n children : [\n {\n class : 'b-cal-event-resource-avatars',\n children : resources.map(resource => {\n return {\n class : 'b-cal-event-resource-avatar-row',\n children : [\n grid.getResourceAvatar(resource),\n {\n class : 'b-cal-event-resource-avatar-desc',\n children : [{\n class : 'b-event-column-resource-name',\n text : resource.name\n }, {\n class : 'b-event-column-resource-role',\n text : resource.role\n }]\n }\n ]\n };\n })\n },\n {\n class : 'b-cal-event-column-event-desc',\n children : [{\n class : 'b-cal-event-column-event-name',\n text : record.name\n }]\n },\n {\n class : 'b-cal-event-column-times',\n children : [grid.eventListEventTimeRenderer(record)]\n }\n ],\n // Match existing data-row-id elements first and ensure DOM order matches\n // children order.\n syncOptions : {\n syncIdField : 'date',\n releaseThreshold : 0,\n strict : true\n }\n },\n targetElement\n });\n }\n //endregion\n}\nColumnStore.registerColumnType(EventColumn);\nEventColumn.exposeProperties();\nEventColumn._$name = 'EventColumn';", "import SchedulerTimeRangeModel from '../../Scheduler/model/TimeRangeModel.js';\n/**\n * @module Calendar/model/TimeRangeModel\n */\n/**\n * This class represents a named time range with additional, Calendar-specific fields. It is used by the\n * {@link Calendar.feature.TimeRanges} feature.\n *\n * This class inherits most of its fields from {@link Scheduler.model.TimeSpan}. The most important of these fields are\n * the following:\n *\n * - {@link #field-name}\n * - {@link #field-startDate}\n * - {@link #field-endDate}\n * - {@link #field-iconCls}\n *\n * It's an indirect subclass of {@link Core.data.Model}. Please refer to documentation of those classes to become\n * familiar with the base interface of this class.\n *\n * This class defines the following fields:\n *\n * - {@link #field-alignment}\n * - {@link #field-color}\n * - {@link #field-footer}\n * - {@link #field-rotation}\n *\n * The data source of any field can be customized in the subclass. Please refer to {@link Core.data.Model} for details.\n *\n * @extends Scheduler/model/TimeRangeModel\n * @uninherit Core/data/mixin/TreeNode\n * @typings Scheduler.model.TimeRangeModel -> Scheduler.model.SchedulerTimeRangeModel\n */\nexport default class TimeRangeModel extends SchedulerTimeRangeModel {\n /**\n * @hidefields children, parentId, parentIndex\n */\n //region Fields\n static fields = [\n /**\n * The side of the time range on which the header will be displayed The default value is `'start'`.\n *\n * This value determines where to place the time range header relative to events. A value of `'start'` will\n * place the header on the left side, while `'end'` will place the time range on the right side (these will\n * be reversed in RTL mode).\n *\n * @field {'start'|'end'} alignment\n * @category Styling\n * @default 'start'\n */\n {\n name : 'alignment',\n defaultValue : 'start',\n internal : true\n },\n /**\n * The primary color of the header element.\n * @field {'red'|'pink'|'purple'|'violet'|'indigo'|'blue'|'cyan'|'teal'|'magenta'|'green'|'lime'|'yellow'|'orange'|'deep-orange'|'gray'|'gantt-green'|'light-gray'} color\n * @category Styling\n */\n {\n name : 'color',\n internal : true\n },\n /**\n * The text for the footer.\n * @field {String} footer\n * @category Styling\n */\n {\n name : 'footer',\n internal : true\n },\n /**\n * The direction to rotate header/footer text.\n * @field {'neg'|'pos'} rotation\n * @category Styling\n */\n {\n name : 'rotation',\n internal : true\n }\n ];\n //endregion\n}\nTimeRangeModel._$name = 'TimeRangeModel';", "import SchedulerTimeRangeStore from '../../Scheduler/data/TimeRangeStore.js';\nimport TimeRangeModel from '../model/TimeRangeModel.js';\n/**\n * @module Calendar/data/TimeRangeStore\n */\n/**\n * A store representing a collection of time ranges.\n *\n * @extends Scheduler/data/TimeRangeStore\n * @typings Scheduler.data.TimeRangeStore -> Scheduler.data.SchedulerTimeRangeStore\n */\nexport default class TimeRangeStore extends SchedulerTimeRangeStore {\n static defaultConfig = {\n modelClass : TimeRangeModel\n };\n}\nTimeRangeStore.initClass();\nTimeRangeStore._$name = 'TimeRangeStore';", "import SchedulerProjectModel from '../../Scheduler/model/ProjectModel.js';\nimport TimeRangeModel from '../model/TimeRangeModel.js';\nimport TimeRangeStore from '../data/TimeRangeStore.js';\n/**\n * @module Calendar/model/ProjectModel\n */\n// noinspection JSClosureCompilerSyntax\n/**\n * This class represents a global project of your Calendar - a central place for all data.\n *\n * For more information, see {@link Scheduler.model.ProjectModel}.\n *\n * @extends Scheduler/model/ProjectModel\n *\n * @typings Scheduler.model.ProjectModel -> Scheduler.model.SchedulerProjectModel\n */\nexport default class ProjectModel extends SchedulerProjectModel {\n static $name = 'ProjectModel';\n //region Configs\n static configurable = {\n timeRangeStore : {\n modelClass : TimeRangeModel\n }\n };\n static defaultConfig = {\n /**\n * The constructor of the time range model class, to be used in the project. Will be set as the\n * {@link Core.data.Store#config-modelClass modelClass} property of the {@link #property-timeRangeStore}\n *\n * @config {Calendar.model.TimeRangeModel}\n * @typings {typeof TimeRangeModel}\n * @category Models & Stores\n */\n timeRangeModelClass : TimeRangeModel,\n /**\n * The constructor to create an timeRange store instance with. Should be a class, subclassing the\n * {@link Core.data.Store}\n * @config {Core.data.Store|Object}\n * @typings {typeof Store|object}\n * @category Models & Stores\n */\n timeRangeStoreClass : TimeRangeStore\n };\n //endregion\n}\nProjectModel.applyConfigs = true;\nProjectModel.initClass();\nProjectModel._$name = 'ProjectModel';", "import ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport SchedulerCrudManager from '../../Scheduler/data/CrudManager.js';\nimport ProjectModel from '../model/ProjectModel.js';\nimport TimeRangeModel from '../model/TimeRangeModel.js';\n/**\n * @module Calendar/data/CrudManager\n */\n// noinspection JSClosureCompilerSyntax\n/**\n * A Calendar-specific implementation of a `CrudManager`.\n *\n * For more information, see {@link Scheduler.data.CrudManager}.\n *\n * @extends Scheduler/data/CrudManager\n *\n * @typings Scheduler.data.CrudManager -> Scheduler.data.SchedulerCrudManager\n */\nexport default class CrudManager extends SchedulerCrudManager {\n static $name = 'CrudManager';\n //region Config\n static configurable = {\n projectClass : ProjectModel,\n timeRangeClass : TimeRangeModel\n };\n //endregion\n buildProjectConfig() {\n const\n ret = super.buildProjectConfig(),\n { timeRangeStore } = this;\n if (timeRangeStore) {\n ret.timeRangeStore = timeRangeStore;\n }\n return ret;\n }\n //region Stores\n get timeRangeStore() {\n return super.timeRangeStore;\n }\n set timeRangeStore(store) {\n if (store && ObjectHelper.isObject(store)) {\n store = ObjectHelper.assign({\n modelClass : this.timeRangeClass\n }, store);\n }\n this.setFeaturedStore('_timeRangeStore', store, this.project?.timeRangeStoreClass);\n }\n //endregion\n};\nCrudManager.initClass();\nCrudManager._$name = 'CrudManager';", "import InstancePlugin from '../../Core/mixin/InstancePlugin.js';\nimport Factoryable from '../../Core/mixin/Factoryable.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\n/**\n * @module Calendar/feature/CalendarFeature\n */\n/**\n * The base abstract class for Calendar features.\n *\n * @extends Core/mixin/InstancePlugin\n * @abstract\n */\nexport default class CalendarFeature extends InstancePlugin.mixin(Factoryable) {\n static get factoryable() {\n return {\n // establish this class as the Factoryable base\n };\n }\n static get configurable() {\n return {\n clientListeners : {\n paint : 'onCalendarPaint'\n },\n disableOnReadOnly : null,\n zoneTypes : null\n };\n }\n getViewZoneType(view) {\n const { zoneTypes } = this;\n let ret;\n if (zoneTypes && (ret = zoneTypes[view.type]) === undefined) {\n if (view.isWeekView && zoneTypes.week !== undefined) {\n ret = zoneTypes.week;\n }\n else if (view.isDayView) { // also covers WeekView\n ret = zoneTypes.day;\n }\n else if (view.isMonthView) {\n ret = zoneTypes.month;\n }\n else if (view.isYearView) {\n ret = zoneTypes.year;\n }\n else if (view.isResourceView) {\n ret = zoneTypes.resource;\n }\n else if (view.isAgendaView) {\n ret = zoneTypes.agenda;\n }\n }\n return ret;\n }\n updateDisableOnReadOnly(disable) {\n const\n me = this,\n { client } = me,\n name = 'readonlyToggle',\n handler = 'onClientReadOnlyToggle';\n if (disable) {\n me[handler]({ readOnly : client.readOnly });\n client.ion({\n name,\n readOnly : handler,\n thisObj : me\n });\n }\n else {\n me.detachListeners(name);\n }\n }\n doDestroy() {\n this.syncModes();\n super.doDestroy();\n }\n createZone(type, config) {\n return new type({\n owner : this,\n ...config\n });\n }\n onClientReadOnlyToggle({ readOnly }) {\n this.disabled = readOnly;\n }\n updateDisabled(disabled, was) {\n super.updateDisabled(disabled, was);\n if (this.client.isPainted) {\n this.syncModes();\n }\n }\n onCalendarPaint({ firstPaint }) {\n if (firstPaint) {\n this.syncModes();\n }\n }\n syncModes() {\n const\n me = this,\n { client, _modeDetacher, zones } = me;\n let newZones = null,\n modes, name, view, type, zone;\n // Tear down the modes when the feature is disabled... that's not worth optimizing for nor writing special\n // code in the zone helpers and since they need to be destroyable, just destroy them.\n if (me.disabled || me.isDestroying || !me.zoneTypes) {\n _modeDetacher?.();\n }\n else {\n if (client.isCalendar) {\n if (!_modeDetacher) {\n me._modeDetacher = client.ion({\n addMode : () => me.syncModes()\n });\n }\n modes = client.modes;\n }\n else {\n modes = {\n view : client\n };\n }\n for (name in modes) {\n zone = zones?.[name];\n view = modes[name];\n type = me.getViewZoneType(view);\n if (type) {\n if ((ObjectHelper.isObject(zone) ? zone.type : zone?.constructor) === type) {\n delete zones[name]; // keep this zone around...\n }\n else if (view.isPainted) {\n zone = me.createZone(type, {\n view\n });\n }\n else {\n // Unpainted calendar views are not fully initialized, so we wait for them to paint before\n // creating the zone helper instance.\n zone = me.whenPainted(name, view, type);\n }\n (newZones || (newZones = {}))[name] = zone;\n }\n }\n }\n me.zones = newZones;\n if (zones) {\n for (name in zones) {\n zones[name].destroy();\n }\n }\n }\n whenPainted(name, view, type) {\n const\n me = this,\n proxy = {\n type,\n destroy : view.ion({\n once : true,\n // Must create zone first\n prio : 10000,\n paint() {\n if (me.zones[name] === proxy) {\n me.zones[name] = me.createZone(type, {\n view\n });\n }\n }\n })\n };\n return proxy;\n }\n}\nCalendarFeature._$name = 'CalendarFeature';", "import Base from '../../Core/Base.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\n/**\n * @module Calendar/feature/CalendarZone\n */\n/**\n * Base class for calendar feature helper classes that track per-mode state.\n * @internal\n */\nexport default class CalendarZone extends Base {\n static $name = 'CalendarZone';\n static configurable = {\n /**\n * The owning feature of this zone instance.\n * @config {Calendar.feature.CalendarFeature}\n * @readonly\n */\n owner : null,\n /**\n * The associated view of this zone instance.\n * @config {Calendar.widget.mixin.CalendarMixin}\n * @readonly\n */\n view : {\n $config : 'nullify',\n value : null\n },\n /**\n * A listener config object to attach to this object's {@link #config-view}\n * @config {Object}\n */\n viewListeners : null\n };\n updateView(view) {\n const\n me = this,\n listeners = view && me.viewListeners;\n me.detachListeners('viewListeners');\n // Not all views have an overflowPopup, but if they don't then they simply will never fire the event...\n listeners && view?.ion(ObjectHelper.merge({\n thisObj : me,\n name : 'viewListeners'\n }, listeners));\n }\n}\nCalendarZone.initClass();\nCalendarZone._$name = 'CalendarZone';", "import DomHelper from '../../Core/helper/DomHelper.js';\nimport ChipView from '../../Core/widget/ChipView.js';\n/**\n * @module Calendar/widget/ResourceChipView\n */\n/**\n * A ChipView used to display resources as chips in Calendar UIs.\n *\n * This class is not meant to be used directly.\n *\n * @extends Core/widget/ChipView\n * @classtype resourcechipview\n * @internal\n */\nexport default class ResourceChipView extends ChipView {\n static $name = 'ResourceChipView';\n // Factoryable type name\n static type = 'resourcechipview';\n static configurable = {\n navigator : null,\n itemsFocusable : false,\n closable : false,\n scrollable : false,\n itemTpl(resource) {\n return DomHelper.createElement({\n className : 'b-cal-event-resource-avatar-desc',\n children : [{\n class : 'b-event-column-resource-name',\n text : resource.name\n }, resource.role?.length ? {\n class : 'b-event-column-resource-role',\n text : resource.role\n } : null]\n }).outerHTML;\n }\n };\n getItemCls(r) {\n return DomHelper.isNamedColor(r.eventColor) ? ` b-sch-${r.eventColor}` : '';\n }\n getItemStyle(r) {\n return `color:#fff;${r.eventColor && !DomHelper.isNamedColor(r.eventColor) ? `background-color:${r.eventColor}` : ''}`;\n }\n iconTpl(resourceRecord) {\n return DomHelper.createElement(this.owner.ownerFeature.client.activeView.getResourceAvatar(resourceRecord)).outerHTML;\n }\n}\nResourceChipView.initClass();\nResourceChipView._$name = 'ResourceChipView';", "import Tooltip from '../../Core/widget/Tooltip.js';\nimport ClockTemplate from '../../Scheduler/tooltip/ClockTemplate.js';\nimport DH from '../../Core/helper/DateHelper.js';\nimport FunctionHelper from '../../Core/helper/FunctionHelper.js';\nimport RecurrenceLegend from '../../Scheduler/data/util/recurrence/RecurrenceLegend.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\nimport ResourceChipView from '../widget/ResourceChipView.js';\n/**\n * @module Calendar/widget/EventTip\n */\nconst hasEventStore = w => w.eventStore;\n/**\n * Displays a tooltip containing extra info and options on either event click or event hover.\n *\n * See the {@link Calendar.feature.EventTooltip} feature for more information and an example of\n * customizing the displayed event tooltip.\n *\n * The EventTip is provided with two standard {@link #config-tools}:\n *\n * * `edit` - A tool which is linked to the {@link Calendar.feature.EventEdit EventEdit} feature\n * to initiate editing when clicked.\n * * `delete` - A tool which removes the current event record\n * function of the active view to enable event deletion.\n *\n * New tools may be added, or properties of existing tools may be changed by configuring the\n * {@link Calendar.feature.EventTooltip} feature.\n *\n * Content may be customized using the {@link #config-titleRenderer} and {@link #config-renderer}\n * which may create complex content by returning a {@link DomConfig}:\n *\n * ```javascript\n * features : {\n * eventTooltip : {\n * tools : {\n * // Just override handler of existing tool - all else is OK\n * edit : {\n * handler : () => console.log(`Handle editing ${this.eventRecord.name} our way`);\n * },\n * // Add a new tool for our own operation\n * newTool : {\n * cls : 'b-icon-add',\n * tooltip : 'Test',\n * handler() {\n * console.log(`Test ${this.eventRecord.name}`);\n * }\n * }\n * },\n * renderer({ eventRecord }) {\n * return {\n * text : `From ${DateHelper.format(eventRecord.startDate, 'l')} to ${DateHelper.format(eventRecord.endDate, 'l')}`\n * },\n * },\n * titleRenderer( eventRecord ) {\n * return {\n * text : `${eventRecord.name} ${eventRecord.resource.name}`,\n * className : {\n * 'b-urgent' : eventRecord.isUrgent,\n * 'b-completed' : eventRecord.isCompleted\n * }\n * };\n * }\n * }\n * }\n * ```\n *\n * @extends Core/widget/Tooltip\n * @classtype eventTooltip\n */\nexport default class EventTip extends Tooltip {\n //region Config\n static get $name() {\n return 'EventTip';\n }\n static get type() {\n return 'eventtip';\n }\n static get configurable() {\n return {\n localizableProperties : ['timeFormat'],\n align : {\n // Needed because we show on click meaning the tip persists and may need\n // to adjust to UI shape changes.\n monitorResize : true\n },\n /**\n * A {@link Core.helper.DateHelper} format string used to format dates displayed in this tooltip.\n *\n * @config {String}\n * @default\n */\n dateFormat : 'll',\n /**\n * The event which the tooltip feature has been shown for.\n * @member {Scheduler.model.EventModel} eventRecord\n * @readonly\n */\n /**\n * The event record for this tip to display\n * @config {Scheduler.model.EventModel} eventRecord\n */\n eventRecord : {\n $config : 'nullify', // ensure we remove our afterChange hook\n value : null\n },\n recurrenceHint : '',\n /**\n * A {@link Core.helper.DateHelper} format string used to format the time displayed in this tooltip.\n *\n * @config {String}\n * @default 'LST'\n */\n timeFormat : {\n value : 'LST',\n $config : {\n localeKey : 'L{timeFormat}'\n }\n },\n // Allow it to fall back from its initial alignment axis to the cross axis.\n // So if aligned l-r or r-l and shown by a long multiday event, it allows\n // itself to be fall back to being aligned t-b\n axisLock : 'flexible',\n closable : null,\n forSelector : '.b-cal-event-wrap',\n maxWidth : '30em',\n minWidth : '14em',\n scrollAction : 'realign',\n cls : {\n 'b-sch-event-tooltip' : 1\n },\n tools : {\n edit : {\n cls : 'b-icon-edit',\n handler : 'up.onEditClick',\n tooltip : 'L{EventEdit.Edit event}',\n weight : 100\n },\n delete : {\n cls : 'b-icon-trash',\n handler : 'up.onDeleteClick',\n tooltip : 'L{SchedulerBase.Delete event}',\n weight : 0\n },\n maximize : null\n },\n /**\n * A function, or name of a function in the ownership hierarchy which is used to create\n * the content of the tooltip's header.\n *\n * @prp {Function|String}\n * @param {Scheduler.model.EventModel} eventRecord The event record\n * @returns {String|DomConfig} The content of the header element.\n */\n titleRenderer : eventRecord => StringHelper.encodeHtml(eventRecord.name),\n /**\n * A function, or name of a function in the ownership hierarchy which is used to create\n * the content of the tooltip's body.\n *\n * @prp {Function|String}\n * @param {Object} data Contextual data about the current tooltip activation\n * @param {HTMLElement} data.activeTarget The event bar element being aligned to\n * @param {Scheduler.model.EventModel} data.eventRecord The event record\n * @param {Event} data.event The DOM event which initiated the tooltip show\n * @param {Calendar.widget.EventTip} data.tip The tooltip instance being shown\n * @returns {String|DomConfig} The content of the body element.\n */\n renderer : null,\n /**\n * By default, the end date of an all day event is displayed in the tooltip UI as\n * the last calendar date on which the event falls. For most end users, this is the\n * expected value.\n *\n * Technically, the {@link Scheduler.model.EventModel#field-endDate} is a timestamp\n * which represents the exact point in time at which an event ends. To use this instead,\n * configure `extendAllDayEndDay` as `true`.\n *\n * To be clear, this would mean that an {@link Scheduler.model.EventModel#field-allDay}\n * event starting and ending on the 7th of February 2020, would show the end date in the\n * tooltip as 8th of February 2020.\n * @prp {Boolean}\n * @default false\n */\n extendAllDayEndDay : null,\n activeClient : null,\n /**\n * By default, if the tip's target event is in a cluster of overlapping events and therefore\n * narrow, activating the tip will expand it to full width temporarily.\n *\n * Configure this as `false` to disable this.\n * @prp {Boolean}\n * @default true\n */\n revealEventsInCluster : true\n };\n }\n static get delayable() {\n return {\n refreshContent : 20\n };\n }\n clockTemplate = new ClockTemplate({});\n //endregion\n get owner() {\n return Tooltip.fromElement(this.activeTarget) || this.ownerFeature.client;\n }\n onEditClick() {\n this.trigger('edit');\n }\n onDeleteClick() {\n this.trigger('delete');\n }\n getHtml(data) {\n const\n me = this,\n { eventRecord } = me;\n if (eventRecord) {\n data.eventRecord = eventRecord;\n me.title = me.titleRenderer ? me.callback(me.titleRenderer, me, [eventRecord]) : '';\n return me.callback(me.renderer || me.internalRenderer, me, [{\n ...data,\n eventRecord\n }]);\n }\n }\n internalRenderer({ eventRecord }) {\n const\n {\n clockTemplate,\n dateFormat,\n recurrenceHint,\n timeFormat\n } = this,\n {\n allDay,\n endDate,\n startDate,\n recurrence\n } = eventRecord,\n // For allDay events round eg 2020-10-18T12:00 up to 2020-10-19T00:00:00.000\n lastDay = allDay ? (this.extendAllDayEndDay ? DH.ceil(endDate, '1 day') : DH.add(endDate, -1, 'day')) : endDate,\n startMidnight = DH.clearTime(startDate),\n lastMidnight = DH.clearTime(lastDay),\n multiDay = startMidnight < lastMidnight,\n hasTime = !allDay && startMidnight < startDate || lastMidnight < lastDay,\n format = hasTime ? (multiDay ? `${dateFormat} ${timeFormat}` : timeFormat) : dateFormat,\n recurrenceLegend = recurrence ? RecurrenceLegend.getLegend(recurrence) : recurrenceHint,\n duration = DH.formatDelta(DH.diff(startDate, endDate), allDay ? { precision : 'd' } : null),\n onlyStartDate = eventRecord.isMilestone || (allDay && !multiDay);\n clockTemplate.mode = multiDay ? 'day' : 'hour';\n return (\n clockTemplate.template({\n date : startDate,\n text : DH.format(startDate, format),\n cls : 'b-sch-tooltip-startdate'\n }) +\n (onlyStartDate ? '' : clockTemplate.template({\n date : lastDay,\n text : DH.format(lastDay, format),\n cls : 'b-sch-tooltip-enddate'\n })) +\n (eventRecord.isMilestone ? '' : `
${duration}
`) +\n (recurrenceLegend ? `
${recurrenceLegend}
` : '')\n );\n }\n showByEvent(event, element = event.target) {\n const me = this;\n me.activeTarget = element;\n me.pointerEvent = event;\n me.updateContent();\n if (event.type === 'contextmenu') {\n return me.showBy({\n domEvent : event,\n anchor : false\n });\n }\n return me.showBy(element);\n }\n afterShowByTarget() {\n const { delete : deleteTool } = this.tools;\n // Capture the active client only when we are visible.\n this.activeClient = Tooltip.fromElement(this.activeTarget)?.closest(hasEventStore);\n super.afterShowByTarget();\n // The delete tool is disabled if the Calendar is readOnly\n deleteTool && (deleteTool.disabled = this.ownerFeature.client.readOnly);\n }\n afterHide() {\n super.afterHide(...arguments);\n this.activeClient = null;\n }\n updateActiveTarget(element, was) {\n super.updateActiveTarget(...arguments);\n was?.classList.remove('b-cal-event-reveal');\n if (element) {\n // The activating event element is lifted to the top of the z-index stack while\n // it is the target of the tooltip.\n if (element.classList.contains('b-cal-in-cluster') && this.revealEventsInCluster) {\n element.classList.add('b-cal-event-reveal');\n }\n }\n else {\n this.eventRecord = null;\n }\n }\n refreshContent() {\n // This method is just a buffered wrapper of updateContent.\n // We might be hidden by the time it's called.\n this.eventRecord && this.updateContent();\n }\n updateEventRecord(eventRecord) {\n const me = this;\n me._changeHook?.();\n me._changeHook = eventRecord && FunctionHelper.after(eventRecord, 'afterChange', me.refreshContent, me);\n if (eventRecord) {\n if (me.tools.delete) {\n me.tools.delete.hidden = eventRecord.readOnly;\n }\n if (me.tools.edit) {\n me.tools.edit.hidden = eventRecord.readOnly;\n }\n }\n }\n updateContent() {\n const\n { clockTemplate, element, eventRecord } = this,\n result = super.updateContent(),\n startElement = element.querySelector('.b-sch-tooltip-startdate'),\n endElement = element.querySelector('.b-sch-tooltip-enddate'),\n { edit, delete : del } = this.tools,\n { client } = this.ownerFeature,\n { eventEdit } = client.features,\n readOnly = client.readOnly || eventRecord.readOnly;\n startElement && clockTemplate.updateDateIndicator(startElement, eventRecord.startDate);\n endElement && clockTemplate.updateDateIndicator(endElement, eventRecord.endDate);\n // Hide the edit tool if the Calendar or event is readOnly or there is no editFeature or it's disabled\n edit && (edit.hidden = readOnly || !eventEdit?.enabled);\n // Hide delete tool if the Calendar or event is readOnly\n del && (del.hidden = readOnly);\n if (this.resources) {\n const { chipView } = this;\n chipView.items = eventRecord.resources;\n this.contentElement.querySelector('.b-resourcechipview')?.remove();\n this.contentElement.appendChild(chipView.element.cloneNode(true));\n }\n return result;\n }\n realign() {\n const { lastAlignSpec } = this;\n // If the event bar to which we were attached is recycled by another event\n // Our tenure in the current guise is over.\n if (this.isVisible && lastAlignSpec?.aligningToElement && lastAlignSpec.target.dataset.eventId !== String(this.eventRecord?.id)) {\n this.hide();\n }\n super.realign(...arguments);\n }\n updateActiveClient(activeClient) {\n this.detachListeners('clientOverflowChange');\n // We may have to hide when the active client changes its possible overflow threshold\n if (activeClient) {\n activeClient.ion({\n name : 'clientOverflowChange',\n eventsPerCellChange : 'onClientOverflowChange',\n thisObj : this\n });\n }\n }\n onClientOverflowChange() {\n // If that caused the target to no longer be visible, we must hide.\n // For example aligned to an event which is now in overflow.\n // Or aligned to an event in the overflow popup which has now hidden.\n if (!DomHelper.isVisible(this.lastAlignSpec.target)) {\n this.hide();\n }\n }\n onDocumentMouseDown({ event }) {\n // Ignore mousedown on active element if we show on a click.\n if (!event.button && this.ownerFeature.showOn === 'click' && this.activeTarget.contains(event.target)) {\n return;\n }\n return super.onDocumentMouseDown(...arguments);\n }\n get chipView() {\n const me = this;\n if (!me._chipView) {\n me._chipView = new ResourceChipView({\n parent : me\n });\n // The List class only refreshes itself when visible, so\n // since this is an offscreen, rendering element\n // we have to fake visibility.\n Object.defineProperty(me.chipView, 'isVisible', {\n get() {\n return true;\n }\n });\n // Complete the initialization, which is finalized on first paint.\n // In particular the lazy scrollable config is ingested on paint.\n me.chipView.triggerPaint();\n }\n return me._chipView;\n }\n}\n// Register this feature type with its Factory\nEventTip.initClass();\nEventTip._$name = 'EventTip';", "import Base from '../../Core/Base.js';\nimport CalendarFeature from './CalendarFeature.js';\nimport DH from '../../Core/helper/DateHelper.js';\nimport DomSync from '../../Core/helper/DomSync.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport EventHelper from '../../Core/helper/EventHelper.js';\nimport Rectangle from '../../Core/helper/util/Rectangle.js';\nimport DomClassList from '../../Core/helper/util/DomClassList.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\nimport Draggable from '../../Core/mixin/Draggable.js';\nimport Droppable from '../../Core/mixin/Droppable.js';\nimport Hoverable from '../../Core/mixin/Hoverable.js';\nimport Widget from '../../Core/widget/Widget.js';\nimport RecurrenceConfirmationPopup from '../../Scheduler/view/recurrence/RecurrenceConfirmationPopup.js';\nimport CalendarZone from './CalendarZone.js';\nimport '../../Core/util/drag/DragTipProxy.js';\nimport '../widget/EventTip.js';\n/**\n * @module Calendar/feature/CalendarDrag\n */\n/**\n * An immutable object that describes a calendar drag mode. These objects are used to simplify detecting the drag mode\n * to apply appropriate actions.\n *\n * @typedef {Object} CalendarDragMode\n * @property {'create'|'move'|'resize'} type The value `'create'`, `'move'`, or `'resize'`.\n * @property {Boolean} create The value `true` if `type === 'create'`, otherwise `false`.\n * @property {Boolean} move The value `true` if `type === 'move'`, otherwise `false`.\n * @property {Boolean} resize The value `true` if `type === 'resize'`, otherwise `false`.\n */\nconst\n tentativeCls = 'b-cal-tentative-event',\n SECONDS = 1000,\n MINUTES = 60 * SECONDS,\n YYYY_MM_DD = 'YYYY-MM-DD',\n edgeRe = /^b-hover-(top|right|bottom|left)$/,\n eventDragSym = Symbol('eventDragMode'),\n appendEventFooter = (domConfig, footer) => {\n let ret;\n if (domConfig.className === 'b-cal-event-body') {\n domConfig.children.push(ret = footer);\n }\n else if (Array.isArray(domConfig.children)) {\n domConfig.children.forEach(c => {\n if (!ret && c) {\n ret = appendEventFooter(c, footer);\n }\n });\n }\n return ret;\n },\n makeMode = type => Object.freeze({\n type,\n create : false,\n move : false,\n resize : false,\n [type] : true\n }),\n modeDescriptor = {\n create : {\n finisher : 'finishDropCreate',\n mode : makeMode('create'),\n validatorFn : 'validateCreateFn'\n },\n move : {\n finisher : 'finishDropMove',\n mode : makeMode('move'),\n validatorFn : 'validateMoveFn'\n },\n resize : {\n finisher : 'finishDropResize',\n mode : makeMode('resize'),\n validatorFn : 'validateResizeFn'\n }\n },\n isAllDayView = {\n calendarrow : true,\n monthview : true,\n dayresourcecalendarrow : true\n };\n/*\n Base class for all zones, however, not all zones support all capabilities. DayView and WeekView are all of these\n things. Their events can be dragged between days, resized to change times of day, and an event can be dropped on\n to the calendar cells. While the YearView does not have events presented for dragging and so is not actually\n draggable, it is droppable since an event can be dropped on a day cell. MonthView is draggable and droppable,\n however, it is not hoverable since its events cannot be \"resized\". Finally, events in the OverflowPopup can only\n be dragged.\n */\nclass Zone extends CalendarZone.mixin(Draggable, Droppable, Hoverable) {\n static get $name() {\n return 'Zone';\n }\n static get configurable() {\n return {\n // We limit dropping to all *children* of the Droppable, not the Droppable element itself.\n // So that we avoid triggering \"over\" or \"drop\" on borders which would give incorrect\n // positional calculations.\n droppableSelector : '*',\n droppable : true,\n hoverable : null,\n hoverAnimationCls : 'b-hover-anim',\n days : {\n $config : {\n // DayResourceView includes the resource as part of the days config.\n equal : (d1, d2) => ObjectHelper.isEqual(d1, d2) && d1?.resource === d2?.resource\n },\n value : null\n },\n dragProxy : {\n type : 'tip',\n tooltip : null // borrowed from the Feature instance's tooltip config\n },\n eventRecord : null,\n hit : null,\n dragItemSelector : '.b-cal-event-wrap',\n overflow : {\n $config : 'nullify',\n value : null\n },\n rootElement : null\n };\n }\n get dayTime() {\n return this.view?.dayTime;\n }\n clearTime(date) {\n return this.dayTime.startOfDay(date);\n }\n findRootElement(view) {\n return view.contentElement;\n }\n getDateFromPosition(clientX, clientY) {\n return this.view.getDateFromPosition(clientX, clientY, false, this.view.dayTime);\n }\n // Draggable behaviors\n get dragEventer() {\n return this.owner;\n }\n beforeDrag(drag) {\n const\n me = this,\n { owner } = me,\n hit = me.hitTest(drag),\n eventRecord = hit?.eventRecord,\n insetProp = me.view.rtl ? 'right' : 'left';\n if (!hit || eventRecord?.readOnly || eventRecord?.isCreating) {\n return false;\n }\n hit.date && drag.set('date', hit.date);\n hit.resource && drag.set('resource', hit.resource);\n let mode, veto;\n switch (hit.type) {\n case 'event':\n drag.set('eventRecord', eventRecord);\n drag.set('eventSourceHit', hit);\n drag.set('eventInset', hit.eventElement.style[insetProp]);\n drag.set('eventWidth', hit.eventElement.offsetWidth);\n mode = 'move';\n veto = !owner.draggable || !eventRecord.isDraggable || me.draggable === false;\n if (!veto) {\n me.captureDragOffset(eventRecord, hit, drag);\n }\n break;\n case 'resize':\n drag.set('eventRecord', eventRecord);\n drag.set('eventSourceHit', hit);\n drag.set('eventInset', hit.eventWrap.style[insetProp]);\n drag.set('eventWidth', hit.eventWrap.offsetWidth);\n mode = 'resize';\n veto = !owner.resizable || !eventRecord.resizable || me.resizable === false;\n break;\n case 'schedule':\n case 'dayNumber':\n drag.set('eventCreate', hit);\n mode = 'create';\n veto = !owner.creatable || me.creatable === false;\n break;\n default:\n return false;\n }\n if (veto) {\n return false;\n }\n drag.set('eventDragMode', drag[eventDragSym] = modeDescriptor[mode].mode);\n }\n dragStart() {\n const\n me = this,\n { dragging : drag, owner, view } = me,\n { client } = owner,\n callback = () => {\n drag.lastMoveEvent && drag.move(drag.lastMoveEvent);\n },\n config = {\n scrollables : client.scrollManager ? [\n {\n element : client.viewContainer.element,\n callback\n }\n ] : []\n };\n // NOTE: Adding b-resizing kicks in display:none which focuses the , so capture it first:\n if (me.isResizing || me.isMoving) {\n me.refocus = owner.client.captureFocus();\n }\n if (me.isResizing) {\n drag.itemElement?.classList.add('b-resizing');\n }\n if (view.scrollable) {\n config.scrollables.push({\n element : view.scrollable.element,\n callback\n });\n }\n // DayViews may have an extra scroller\n if (view.horizontalScroller) {\n config.scrollables.push({\n element : view.horizontalScroller.element,\n callback\n });\n }\n client.scrollManager?.startMonitoring(config);\n }\n captureDragOffset() {\n // empty by default\n }\n cleanupDrag() {\n const\n me = this,\n { dragProxy, dragging } = me,\n { tooltip } = dragProxy,\n view = me.view.isOverflowPopup ? me.view.owner : me.view,\n { client } = me.owner,\n activeElement = DomHelper.getActiveElement(client);\n dragging?.itemElement?.classList.remove('b-resizing');\n if (dragging?.aborted) {\n me.days = null;\n }\n // Do not refocus immediately. The UI will not be in its new state.\n // Refocus after the impending refresh.\n view.afterRefresh(() => {\n me.eventRecord && (me.days = null); // day view resize uses days/times as drag feedback\n // Try to refocus element without scrolling unless focus has moved since the drop.\n if (DomHelper.getActiveElement(client) === activeElement) {\n me.refocus?.(false, true);\n }\n me.refocus = null;\n });\n if (tooltip) {\n tooltip.hide();\n dragProxy.tooltip = null;\n }\n }\n dragEnd() {\n this.owner.client?._scrollManager?.stopMonitoring();\n this.cleanupDrag();\n }\n makeDays(startDate, endDate) {\n const\n { dayTime, firstVisibleDate, lastVisibleDate } = this.view,\n days = [];\n endDate = DH.add(endDate, -1, 'd'); // endDate is exclusive, but lastVisibleDate is inclusive\n [startDate, endDate] = [startDate, endDate].map(\n d => d < firstVisibleDate ? firstVisibleDate : (lastVisibleDate < d ? lastVisibleDate : d));\n let date = dayTime.startOfDay(startDate);\n // We do ceil(endDate) to handle events that start/end on the same day\n // Note: \"!(end < date)\" ==> \"date <= end\" but works for Date since they are never ==\n for (const end = dayTime.ceil(endDate); !(end < date); date = DH.add(date, 1, 'day')) {\n days.push(dayTime.dateKey(date));\n }\n return days;\n }\n onShowOverflowPopup({ overflowPopup }) {\n if (!this.overflow) {\n this.overflow = new OverflowZone({\n owner : this.owner,\n view : overflowPopup\n });\n }\n }\n // Droppable behaviors\n get calendarCellSelector() {\n return this.view.visibleCellSelector;\n }\n get calendarCells() {\n const container = this.dropRootElement;\n return container && DomHelper.children(container, this.calendarCellSelector);\n }\n get isCreating() {\n return this.dropping?.[eventDragSym]?.create;\n }\n get isMoving() {\n const mode = this.dropping?.[eventDragSym] || this.dragging?.[eventDragSym];\n return mode ? mode.move : Boolean(this.dropping?.peek('eventRecord'));\n }\n /**\n * Returns true if a resize operation is active\n * @property {Boolean}\n * @readonly\n */\n get isResizing() {\n return this.dragging?.[eventDragSym]?.resize;\n }\n get recurrable() {\n return this.isDayZone || this.isMonthZone;\n }\n cleanupDrop() {\n this.eventRecord = this.eventDom = this.days = null;\n this.noTip = false;\n }\n createEvent(data, dropping = this.dropping) {\n // We can get here for an AllDay zone when the day detail zone is creating a multi-day event, but that's the\n // only time we won't be processing our own drop.\n const mode = dropping?.[eventDragSym] || modeDescriptor.create.mode;\n this.setupEvent(data, mode.create);\n }\n async dragDrop(drag) {\n if (this.isResizing || drag.target === this) {\n // finalizer is a Promise that the DragContext (which is a Finalizable) awaits in its finalize() method.\n return drag.finalizer = this.finishDrop(drag);\n }\n }\n dragEnter(drag) {\n const\n me = this,\n mode = drag[eventDragSym],\n hit = (drag.source === me && drag.peek('eventSourceHit')) || me.hitTest(drag);\n if (me.isMoving) {\n // we need to know the hit target at all times during drag, but we're not ready to process updateHit until\n // we get past setupEvent\n me._hit = hit;\n me.startMove(drag.peek('eventRecord'));\n }\n else if (!mode || drag.source !== me) {\n return false;\n }\n else if (mode.resize) {\n me._hit = hit;\n me.startResize(hit);\n }\n else if (mode.create) {\n me._hit = hit;\n me.startCreate(drag.peek('date'), drag.peek('eventCreate'));\n }\n else {\n return false;\n }\n }\n dragLeave() {\n if (!this.isResizing) {\n this.cleanupDrop();\n }\n }\n dragMove(drag) {\n this.hit = this.pickDropTarget(drag); // see updateHit for side effects\n }\n dropHitMove(drag, hit, eventRecord) {\n const\n me = this,\n { endDate, startDate } = eventRecord.isScheduled ? eventRecord : me.eventRecord,\n durationSec = DH.diff(startDate, endDate, 's');\n let { date, resource } = hit;\n date = me.clearTime(date);\n if (!eventRecord.allDay) {\n date = DH.add(date, DH.diff(me.clearTime(startDate), startDate, 's'), 's');\n }\n date = me.applyDragOffset(date, drag);\n const data = {\n startDate : date,\n endDate : DH.add(date, durationSec, 's')\n };\n // If this is a resource-specific view, hit testing will include the resource.\n if (resource?.eventColor) {\n data.eventColor = resource.eventColor;\n }\n me.setEventData(data);\n }\n dropHitNowhere() {\n this.days = null;\n }\n dropHitResize(drag, hit, eventHit) {\n const\n me = this,\n { eventRecord } = me,\n { startDate, endDate } = eventRecord,\n date = me.clearTime(hit.date);\n let changes, end;\n if (eventHit.atEnd) {\n end = DH.add(date, 1, 'd');\n changes = {\n startDate,\n endDate : (startDate < end) ? end : DH.add(startDate, 1, 'd')\n };\n }\n else {\n changes = {\n startDate : (date < endDate) ? date : DH.add(endDate, -1, 'd'),\n endDate\n };\n }\n changes.duration = DH.diff(changes.startDate, changes.endDate, eventRecord.durationUnit);\n me.setEventData(changes);\n }\n async finishDrop(drag) {\n const\n me = this,\n {\n eventRecord,\n resource,\n owner,\n view\n } = me,\n { eventStore } = view,\n mode = drag[eventDragSym],\n descriptor = modeDescriptor[mode?.type || 'move'];\n if (descriptor && me.hit) {\n const validation = descriptor.validatorFn\n ? await owner.callback(owner[descriptor.validatorFn], owner, [{\n drag,\n eventRecord,\n event : drag.event\n }])\n : true;\n if (validation !== false) {\n await me[descriptor.finisher](drag, owner, eventRecord, eventStore, validation,\n async(eventName, callback, callbackFalse) => {\n let info = {\n drag,\n eventRecord : drag.peek('eventRecord') || eventRecord,\n newStartDate : eventRecord.startDate,\n newEndDate : eventRecord.endDate,\n resourceRecord : resource,\n validation,\n event : drag.event,\n feature : owner,\n view : drag[me.isResizing ? 'source' : 'target'].view\n };\n // First trigger a preventable beforeXXX event to allow outside world to veto this operation\n const result = await owner.client.trigger('before' + StringHelper.capitalize(eventName), info);\n if (result === false) {\n info = false;\n await callbackFalse?.();\n }\n else {\n await callback?.();\n delete info.newStartDate;\n delete info.newEndDate;\n owner.client.trigger(eventName, info);\n }\n // return the event info object to allow event handlers to return data by poking on to that\n // object.\n return info;\n });\n }\n }\n me.isFinishing = true;\n me.cleanupDrop();\n }\n async finishDropCreate(drag, owner, eventRecord, eventStore, validation, triggerFn) {\n const add = validation?.add !== false;\n /**\n * This event fires on the owning Calendar before a drag creation gesture is completed. Return `false` to\n * immediately veto the operation or a Promise yielding `true` or `false` for async vetoing.\n * @event beforeDragCreateEnd\n * @preventable\n * @on-owner\n * @async\n * @param {Calendar.view.Calendar} source The Calendar instance that fired the event.\n * @param {Core.util.drag.DragContext} drag The drag create context.\n * @param {Event} event The browser event.\n * @param {Scheduler.model.EventModel} eventRecord The `EventModel` record being created that has not yet been added in the store.\n * @param {Date} newStartDate The new start date.\n * @param {Date} newEndDate The new end date.\n * @param {Scheduler.model.ResourceModel} [resourceRecord] The `ResourceModel` record if the gesture was performed\n * in a resource-type view.\n * @param {Calendar.feature.CalendarDrag} feature The Calendar drag feature instance.\n * @param {Boolean|ValidateCreateResult} validation The result of the {@link #config-validateCreateFn} if one\n * was provided.\n * @param {Core.widget.Widget} view The Calendar widget in which the drag completed.\n */\n /**\n * This event fires on the owning Calendar when a drag creation gesture is completed.\n * @event dragCreateEnd\n * @on-owner\n * @param {Calendar.view.Calendar} source The Calendar instance that fired the event.\n * @param {Core.util.drag.DragContext} drag The drag create context.\n * @param {Event} event The browser event.\n * @param {Scheduler.model.EventModel} eventRecord The new `EventModel` record added in the store.\n * @param {Scheduler.model.ResourceModel} [resourceRecord] The `ResourceModel` record if the gesture was performed\n * in a resource-type view.\n * @param {Calendar.feature.CalendarDrag} feature The Calendar drag feature instance.\n * @param {Boolean|ValidateCreateResult} validation The result of the {@link #config-validateCreateFn} if one\n * was provided.\n * @param {Core.widget.Widget} view The Calendar widget in which the drag completed.\n */\n // If any handler was async, the promise will be returned.\n // If not presented with a Promise, await yields the immediate value.\n const result = await triggerFn('dragCreateEnd');\n if (result === false) {\n if (add) {\n eventStore.remove(eventRecord);\n }\n }\n else if (add && !eventStore.includes(eventRecord)) {\n eventStore.add(eventRecord);\n }\n }\n async finishDropMove(drag, owner, eventRecord, eventStore, validation, triggerFn) {\n let dropRec = await drag.get('eventRecord');\n const\n me = this,\n { view } = me,\n storeRec = dropRec.isOccurrence ? dropRec.recurringTimeSpan : dropRec,\n { source } = drag,\n fromResource = await drag.get('resource'),\n toResource = me.hit.resource,\n interView = source !== me,\n // If the sourceStore is not the same as the destination store, maybe they would like the\n // record to be removed on successful drop depending on how removeFromExternalStore is set.\n sourceStore = interView && source.view?.eventStore && view.eventStore && source.view.eventStore !== view.eventStore ? source.view.eventStore : await drag.get('sourceStore'),\n isReassign = toResource && toResource !== fromResource;\n // Return if we detect that it's a no-op.\n if (!isReassign && drag.source === drag.target &&\n DH.isEqual(eventRecord.startDate, dropRec.startDate) &&\n DH.isEqual(eventRecord.endDate, dropRec.endDate)) {\n if (dropRec.eventStore === eventStore) {\n return;\n }\n }\n /**\n * This event fires on the owning Calendar before a drag move gesture is completed. Return `false` to immediately veto the operation\n * or a Promise yielding `true` or `false` for async vetoing.\n * @event beforeDragMoveEnd\n * @preventable\n * @on-owner\n * @async\n * @param {Calendar.view.Calendar} source The Calendar instance that fired the event.\n * @param {Core.util.drag.DragContext} drag The drag create context.\n * @param {Event} event The browser event.\n * @param {Scheduler.model.EventModel} eventRecord The `EventModel` record that has not yet been updated in the store.\n * @param {Date} newStartDate The new start date.\n * @param {Date} newEndDate The new end date.\n * @param {Scheduler.model.ResourceModel} [resourceRecord] The `ResourceModel` record if the gesture was performed\n * in a resource-type view.\n * @param {Calendar.feature.CalendarDrag} feature The Calendar drag feature instance.\n * @param {Boolean|ValidateCreateResult} validation The result of the {@link #config-validateMoveFn} if one was\n * provided.\n * @param {Core.widget.Widget} view The Calendar widget in which the drag completed.\n */\n /**\n * This event fires on the owning Calendar when a drag move gesture is completed. The `eventRecord` has already been added\n * to the `eventStore` of the owning calendar.\n * @event dragMoveEnd\n * @on-owner\n * @param {Calendar.view.Calendar} source The Calendar instance that fired the event.\n * @param {Core.util.drag.DragContext} drag The drag create context.\n * @param {Event} event The browser event.\n * @param {Scheduler.model.EventModel} eventRecord The updated `EventModel` record.\n * @param {Scheduler.model.ResourceModel} [resourceRecord] The `ResourceModel` record if the gesture was performed\n * in a resource-type view.\n * @param {Calendar.feature.CalendarDrag} feature The Calendar drag feature instance.\n * @param {Boolean|ValidateCreateResult} validation The result of the {@link #config-validateMoveFn} if one was\n * provided.\n * @param {Core.widget.Widget} view The Calendar widget in which the drag completed.\n */\n await triggerFn('dragMoveEnd', async() => {\n // It's a drag from an external EventStore.\n // If a handler sets isCopy in the data, we add the\n // tentative event as a copy of the original.\n if (!eventStore.getByInternalId(storeRec.internalId)) {\n if (sourceStore) {\n // Remove from the source store if Feature is configured to do so.\n if (me.owner.removeFromExternalStore) {\n sourceStore.remove(dropRec);\n }\n // If we are keeping the source record in the external store, then\n // the instance in this store has to be a copy so that dragging it in\n // multiple times will create multiple events in the Calendar.\n else {\n dropRec = dropRec.copy();\n }\n // Move to the dropped at date and time\n await me.moveEventTo(drag, dropRec);\n }\n else {\n // Use the tentative event which is being used as the drop indicator.\n // As long as it has a duration, its start and end will be correct.\n dropRec = eventRecord;\n }\n delete dropRec.resourceId;\n eventStore.add(dropRec);\n // If there's no explicit toResource read from the hit, then assign the Calendar's default\n // calendar (resource) unless the record is already assigned to a valid resource\n // in our Project\n const resource = toResource ?? (!isReassign && !view.project.resourceStore.includes(dropRec.resource) && me.owner.client.defaultCalendarId);\n if (resource != null && view.project.resourceStore.includes(resource)) {\n dropRec.assign(resource);\n }\n // If the destination's resourceStore does not include our assigned resource, deassign\n else if (!view.project.resourceStore.includes(dropRec.resource)) {\n dropRec.resources = [];\n }\n }\n else {\n // Await any decision on converting recurring base/occurrence\n // to an exception of a new recurring base.\n dropRec = await me.finishDropConfirm(dropRec);\n if (dropRec) {\n await me.moveEventTo(drag, dropRec);\n // If dragging between zones, and the zones have been configured with specific, different\n // resources, then this drag is also a reallocation of resource.\n if (isReassign) {\n // Assign to new resource first, so that it never drops to zero assignments\n // because that can cause the eventRecord to exit the Project.\n dropRec.assign(toResource);\n dropRec.unassign(fromResource);\n }\n }\n }\n await view.project.commitAsync();\n });\n }\n async finishDropResize(drag, owner, eventRecord, eventStore, validation, triggerFn) {\n const\n me = this,\n { view } = me;\n /**\n * This event fires on the owning Calendar before a drag resize gesture is completed. Return `false` to immediately veto the operation\n * or a Promise yielding `true` or `false` for async vetoing.\n * @event beforeDragResizeEnd\n * @preventable\n * @on-owner\n * @async\n * @param {Calendar.view.Calendar} source The Calendar instance that fired the event.\n * @param {Core.util.drag.DragContext} drag The drag create context.\n * @param {Event} event The browser event.\n * @param {Scheduler.model.EventModel} eventRecord The `EventModel` record that has not yet been updated in the store.\n * @param {Date} newStartDate The new start date.\n * @param {Date} newEndDate The new end date.\n * @param {Calendar.feature.CalendarDrag} feature The Calendar drag feature instance.\n * @param {Boolean|ValidateCreateResult} validation The result of the {@link #config-validateResizeFn} if one\n * was provided.\n * @param {Core.widget.Widget} view The Calendar widget in which the drag completed.\n */\n /**\n * This event fires on the owning Calendar when a drag resize gesture is completed.\n * @event dragResizeEnd\n * @on-owner\n * @param {Calendar.view.Calendar} source The Calendar instance that fired the event.\n * @param {Core.util.drag.DragContext} drag The drag create context.\n * @param {Event} event The browser event.\n * @param {Scheduler.model.EventModel} eventRecord The updated `EventModel` record.\n * @param {Calendar.feature.CalendarDrag} feature The Calendar drag feature instance.\n * @param {Boolean|ValidateCreateResult} validation The result of the {@link #config-validateResizeFn} if one\n * was provided.\n * @param {Core.widget.Widget} view The Calendar widget in which the drag completed.\n */\n await triggerFn('dragResizeEnd', async() => {\n let { eventRecord : editRec } = await drag.get('eventSourceHit');\n editRec = await this.finishDropConfirm(editRec);\n editRec && editRec.set({\n startDate : eventRecord.startDate,\n endDate : eventRecord.endDate,\n duration : DH.diff(eventRecord.startDate, eventRecord.endDate, editRec.durationUnit)\n });\n await view.project.commitAsync();\n });\n }\n async finishDropConfirm(eventRecord) {\n if (eventRecord.isOccurrence || eventRecord.isRecurring) {\n return new Promise(resolve => {\n const dialog = new RecurrenceConfirmationPopup({\n owner : this.owner\n });\n dialog.confirm({\n actionType : 'update',\n eventRecord,\n cancelFn() {\n resolve(null);\n },\n changerFn(eventRec) {\n resolve(eventRec);\n }\n });\n });\n }\n return eventRecord;\n }\n async moveEventTo(drag, eventRecord) {\n const me = this;\n let date = me.view.getDateFromElement(drag.targetElement);\n // If we were not dragging an unscheduled event (for example from an external source)\n // then copy in its time values.\n if (eventRecord.startDate) {\n date = DH.copyTimeValues(me.clearTime(date), eventRecord.startDate);\n }\n date = me.applyDragOffset(date, drag);\n // If it's being movedTo from another store, and it was unscheduled originally...\n if (!me.view.eventStore.getByInternalId(eventRecord.internalId) && !eventRecord.startDate) {\n const autoCreate = drag.target.view.autoCreate || me.owner.client.autoCreate;\n // Move to the autoCreate time if we can find an autoCreate config to give us a hint.\n date.setHours(autoCreate?.startHour || 8);\n }\n await me.setStartDate(eventRecord, date);\n }\n pickDropTarget(drag) {\n let hit = this.hitTest(drag);\n if (!hit && this.isResizing) {\n hit = this.hit;\n }\n return hit?.date ? hit : null;\n }\n setStartDate(eventRecord, date) {\n return eventRecord.set({\n startDate : date,\n endDate : DH.add(date, eventRecord.fullDuration)\n });\n }\n // Hoverable\n getHoverHandleCls(other) {\n return other ? '' : 'b-gripper-vert';\n }\n hoverEnter() {\n const\n me = this,\n hit = me.hitTest(me.hoverTarget),\n { gripper } = me.owner,\n cls = me.getHoverHandleCls(),\n otherCls = me.getHoverHandleCls(true);\n otherCls && gripper.classList.remove(otherCls);\n if (hit?.eventRecord?.resizable !== false && !hit?.eventRecord?.readOnly) {\n cls && gripper.classList.add(cls);\n me.hoverTarget.appendChild(gripper);\n }\n }\n hoverLeave(leaving) {\n const\n me = this,\n { gripper } = me.owner,\n cls = me.getHoverHandleCls();\n // We may have 2 hoverable zones each grabbing our shared gripper element, so check if we are the current\n // owner and only cleanup if we are:\n if (gripper.parentNode === leaving) {\n cls && gripper.classList.remove(cls);\n leaving.removeChild(gripper);\n }\n }\n // Misc\n applyDragOffset(date, drag) {\n const eventOffset = drag.peek('eventOffset');\n if (date && eventOffset?.[0]) {\n if (drag.source.constructor === drag.target?.constructor) {\n date = DH.add(date, -eventOffset[0], eventOffset[1]);\n }\n }\n return date;\n }\n hitTest(at) {\n const\n me = this,\n isDragContext = at?.isDragContext,\n event = isDragContext ? at.event : at,\n target = (isDragContext && at.targetElement) || DomHelper.getEventElement(event);\n let src = me.view,\n hit = null,\n edge, wrapEl;\n if (target) {\n if (!src.calendarHitTest) {\n src = me.owner.client;\n }\n const horizontalStartEdge = src.rtl ? 'right' : 'left';\n hit = src.calendarHitTest(target);\n if (hit) {\n hit.eventWrap = wrapEl = target.closest('.b-cal-event-wrap');\n if (target.classList.contains('b-gripper')) {\n hit = {\n type : 'resize',\n cell : hit.cell,\n date : hit.date,\n edge : edge = {},\n eventRecord : hit.eventRecord,\n resource : hit.resource,\n eventWrap : wrapEl,\n gripper : target,\n view : hit.view\n };\n DomClassList.normalize(wrapEl.className, 'array').forEach(c => {\n c = edgeRe.exec(c);\n c && (edge[c[1]] = true);\n });\n hit.atEnd = !(edge.top || edge[horizontalStartEdge]);\n }\n else if (!hit.eventRecord) {\n wrapEl = null;\n }\n if (wrapEl) {\n hit.eventTop = wrapEl.style.top;\n }\n if (target !== event) {\n hit.date = me.getDateFromPosition(event.clientX, event.clientY) || hit.date;\n }\n }\n }\n return hit;\n }\n renderEvent(eventRecord, first, last) {\n const { view } = this;\n // Make the DOM reflect the view's defaultCalendar.\n // We cannot assign in the normal way when the event is not part of a project\n // so we need to override the assigned property just while we create the DOM.\n Object.defineProperty(eventRecord, 'assigned', this.assignmentsProperty);\n // If we are moving into a view which only renders inter-day events\n // Set the cell info block's isAllDay flag.\n const dom = view.createEventDomConfig({\n eventRecord,\n isAllDay : isAllDayView[view.type]\n });\n dom.className['b-cal-tentative-event'] = 1;\n dom.className['b-cal-tentative-event-first'] = first;\n dom.className['b-cal-tentative-event-last'] = last;\n // Now we can remove the temp resource property getter\n delete eventRecord.assigned;\n if (last) {\n const { footer } = this.owner;\n if (footer) {\n appendEventFooter(dom, ObjectHelper.assign({\n html : DH.format(eventRecord.endDate, view.timeFormat)\n }, footer));\n }\n }\n return dom;\n }\n setEventData(data, creating) {\n const\n me = this,\n { eventRecord, view } = me,\n { duration, startDate } = data;\n if (startDate && duration != null && !data.endDate) {\n data = {\n ...data,\n endDate : DH.add(startDate, duration, eventRecord.durationUnit)\n };\n }\n eventRecord.set(data);\n // Honour the view's view on what constitutes a short event\n if (me.eventDom) {\n me.eventDom.className[view.shortEventCls] = eventRecord.durationMS <= view.shortEventDuration;\n }\n else {\n if (creating) {\n const\n newName = me.owner.newName || view.autoCreate.newName,\n newNameFn = me.view.resolveCallback(newName, me.view, false);\n eventRecord.set('name', newNameFn?.handler.call(view, eventRecord) || newName);\n }\n me.eventDom = me.renderEvent(eventRecord);\n }\n }\n setupEvent(data, creating) {\n const\n me = this,\n { owner } = me,\n {\n defaultCalendar,\n eventStore\n } = me.view,\n { tooltip } = owner,\n eventRecord = me.eventRecord = owner.eventRecord = eventStore.createRecord({\n // must pass empty object for CalendarStores hook of createRecord() to set resourceId\n // and because the data passed is field *names*, not dataSources\n }),\n assignments = creating ? new Set([new eventStore.assignmentStore.modelClass({\n event : eventRecord,\n resource : defaultCalendar\n })]) : data.assigned;\n // The assignment Set to be used when calling renderEvent so that a fully correct rendition\n // taking into account the resource can be applied.\n me.assignmentsProperty = {\n configurable : true,\n value : assignments\n };\n delete data.assigned;\n me.setEventData(data, creating);\n // Assign the new event to the EventStore's default calendar\n if (me.isCreating && defaultCalendar) {\n eventStore.assignmentStore.assignEventToResource(eventRecord, defaultCalendar);\n }\n const { eventDom } = me;\n eventDom.className[tentativeCls] = 1;\n if (!me.noTip && !tooltip.disabled && me.dragging?.has('eventCreate')) {\n tooltip.eventRecord = eventRecord;\n tooltip.recurrenceHint = (creating && me.recurrable) ? owner.recurrenceTip : '';\n me.dragProxy.tooltip = tooltip;\n }\n return eventDom;\n }\n startCreate(date) {\n this.createEvent({\n allDay : true,\n startDate : date,\n durationUnit : this.durationUnit,\n endDate : DH.add(date, 1, 'd')\n });\n }\n get durationUnit() {\n // Use view's dragUnit unless it's been configure away, then use the CalendarDrag class's default\n return this.view.dragUnit || this.owner.durationUnit;\n }\n startMove(eventRecord) {\n const\n me = this,\n data = ObjectHelper.clone(eventRecord.dataByFieldName),\n drag = me.dropping,\n { hit } = me,\n // prefer the resource color of the drop and fallback to the drag\n color = hit?.resource?.eventColor ?? drag.peek('resource')?.eventColor;\n if (color && !data.eventColor) {\n data.eventColor = color;\n }\n // Include the Set of assignments in the data for the tentative event\n data.assigned = eventRecord.assigned;\n // If an unscheduled event is grabbed (for example from an external source),\n // we have to normalize it according to current pointer context in order\n // for the view's createEventDomConfig to be able to process it to create\n // our drop indicator.\n if (!data.startDate) {\n data.startDate = hit?.date || new Date();\n data.endDate = DH.add(data.startDate, eventRecord.duration || 1, eventRecord.durationUnit || 'h');\n }\n // Dragging must always know its resource\n if (hit?.resource) {\n data.resourceId = hit.resource.id;\n }\n if (!data.resourceId) {\n data.resourceId = drag.peek('resourceId') || me.owner.client?.defaultCalendarId;\n }\n // So as not to have duplicate data-event-id=\"eventId\" nodes in the DOM.\n delete data.id;\n me.setupEvent(data);\n }\n startResize(eventHit) {\n const\n { eventRecord } = eventHit,\n data = eventRecord.data;\n this.createEvent({\n ...data,\n id : `dragResize-event-${data.id}`,\n eventColor : data.eventColor || eventRecord.resource?.eventColor,\n recurrenceRule : null,\n realEventId : data.id\n });\n }\n // Configs\n configureListeners(drag) {\n const listeners = super.configureListeners(drag);\n // Listen to the events on the root element\n listeners.element = this.view.rootElement;\n return listeners;\n }\n updateHit(hit) {\n const\n me = this,\n drag = me.dropping,\n mode = hit && drag[eventDragSym];\n if (hit) {\n if (me.isMoving) {\n me.dropHitMove(drag, hit, drag.peek('eventRecord'));\n }\n else if (mode?.create) {\n me.dropHitCreate(drag, hit, drag.peek('eventCreate'));\n }\n else if (mode?.resize) {\n me.dropHitResize(drag, hit, drag.peek('eventSourceHit'));\n }\n }\n else {\n me.dropHitNowhere(drag);\n }\n }\n updateDays(days) {\n const\n me = this,\n { calendarCells, eventDom, dayValues } = me,\n newDayValues = calendarCells && {};\n let first = true,\n cell, date, dayValue, i, lastCell;\n me.dayValues = newDayValues;\n if (calendarCells && eventDom) {\n for (i = 0; i < calendarCells.length; ++i) {\n cell = calendarCells[i];\n if (days?.includes(cell.dataset.date)) {\n lastCell = cell;\n }\n }\n for (i = 0; i < calendarCells.length; ++i) {\n cell = calendarCells[i];\n date = cell.dataset.date;\n if (days?.includes(date)) {\n if (!(dayValue = dayValues?.[date])) {\n dayValue = me.includeDay(date, cell, first, cell === lastCell) || true;\n first = false;\n }\n else {\n delete dayValues[date];\n }\n newDayValues[date] = dayValue;\n }\n }\n if (dayValues) {\n const cleanDom = () => {\n for (i in dayValues) {\n me.removeDay(i, dayValues[i], me.isCreating);\n }\n };\n // If creating, and we're not aborted, remove the drag coverage after the\n // refresh has happened so there's no apparent blink when the coverage is removed.\n if (!days && me.isCreating && !me.dragging.aborted) {\n // Clean the dom when the refresh is done. Wait for a max of 100ms for an upcoming\n // refresh before going ahead anyway.\n me.view.afterRefresh(cleanDom);\n }\n else {\n cleanDom();\n }\n }\n }\n }\n updateEventRecord(record) {\n this.owner.eventRecord = record;\n }\n updateOverflow(value, instance) {\n if (!value && instance) {\n instance.destroy();\n }\n return value;\n }\n updateOwner(owner) {\n this.hoverIgnoreElement = owner?.gripper;\n }\n updateRootElement(rootEl) {\n const me = this;\n me.dragRootElement = rootEl;\n me.dropRootElement = me.droppable ? rootEl : null;\n me.hoverRootElement = me.hoverable ? rootEl : null;\n }\n updateView(view, was) {\n super.updateView(view, was);\n const me = this;\n me.rootElement = view ? me.findRootElement(view) : null;\n me._overflowDetacher?.();\n // Only listen for overflow popup being shown if the view itself offers the event.\n // We must not listen to the relayed version from the owning DayView of a CalendarRow\n // otherwise we'd end up with a DayZone owning a duplicate OverflowZone in addition\n // to the AllDayZone.\n if (view?.isDayCellRenderer) {\n me._overflowDetacher = view.ion({\n thisObj : me,\n showOverflowPopup : 'onShowOverflowPopup'\n });\n }\n }\n}\nZone.prototype._eventRecord = null;\n//====================================================================================================\n// DayView\nclass BaseDayZone extends Zone {\n static get $name() {\n return 'BaseDayZone';\n }\n static get configurable() {\n return {\n hoverSelector : '.b-cal-event-wrap',\n draggingClsSelector : '.b-dayview-content'\n };\n }\n getHoverHandleCls(other) {\n let vert = this.isAllDayZone;\n if (other) {\n vert = !vert;\n }\n return `b-gripper-${vert ? 'vert' : 'horz'}`;\n }\n}\n//-------------------------------------------------------------------------\nclass AllDayZone extends BaseDayZone {\n static get $name() {\n return 'AllDayZone';\n }\n static get configurable() {\n return {\n hoverEdges : 'lr'\n };\n }\n // Drag handling\n dragEnter(drag) {\n // If there's no space in which to display the drop indicator,\n // temporarily expand the gutter to allow for appearance of the drop indicator.\n if (!this.view.eventsPerCell) {\n this.view.expandGutter();\n }\n return super.dragEnter(drag);\n }\n dragLeave(drag) {\n this.view.collapseGutter();\n super.dragLeave(drag);\n }\n captureDragOffset(eventRecord, hit, drag) {\n drag.set('eventOffset', [\n Math.max(Math.floor(DH.diff(eventRecord.startDate, hit.date, 'd')), 0),\n 'd'\n ]);\n }\n // Drop handling\n dropHitCreate(drag, hit, dragFrom) {\n let endDate = this.clearTime(hit.date),\n startDate = this.clearTime(dragFrom.date);\n if (endDate < startDate) {\n [startDate, endDate] = [endDate, startDate];\n }\n // Update the final duration in the units the view created the record with.\n this.setEventData({\n startDate,\n duration : DH.as(this.eventRecord.durationUnit, DH.diff(startDate, endDate, 'd') + 1, 'd')\n });\n }\n async moveEventTo(drag, dropRec) {\n const\n me = this,\n hit = me.hitTest(drag),\n date = me.applyDragOffset(hit?.date, drag),\n newDate = new Date(dropRec.startDate);\n if (date) {\n // We're only changing the date component of the time.\n // Not the time of day that the event started at.\n newDate.setFullYear(date.getFullYear());\n newDate.setMonth(date.getMonth());\n newDate.setDate(date.getDate());\n // If the event does not belong in the all day zone, i.e. it's not day-spanning\n // and does not have the allDay flag set, then set the allDay flag\n if (me.view.dayTime.startShift) {\n newDate.setHours(date.getHours());\n newDate.setMinutes(date.getMinutes());\n newDate.setSeconds(date.getSeconds());\n dropRec.duration = 1;\n }\n else {\n if (!me.view.isAllDayEvent(dropRec)) {\n dropRec.allDay = true;\n }\n }\n await me.setStartDate(dropRec, newDate);\n }\n }\n // Misc\n setEventData(data, creating) {\n super.setEventData(data, creating);\n const\n me = this,\n { eventRecord } = me;\n const { startDate, endDate } = eventRecord;\n if (creating && !me.view.dayTime.startShift) {\n eventRecord.allDay = true;\n }\n me.days = me.makeDays(startDate, endDate);\n }\n // Configs\n updateDays(days) {\n const me = this;\n let { eventEl } = me;\n if (days?.length) {\n if (!eventEl) {\n me.eventEl = eventEl = DomHelper.createElement({\n ...me.eventDom\n });\n eventEl.classList.add('b-allday');\n }\n const\n { dropRootElement } = me,\n { visibleCellSelector, weekLength } = me.view,\n eventTop = me.dragging?.peek('eventSourceHit')?.eventTop,\n cells = DomHelper.children(dropRootElement, visibleCellSelector),\n cell = DomHelper.down(dropRootElement, `${visibleCellSelector}[data-date='${days[days.length - 1]}']`);\n // The one event element lives in the startDate cell, or the resource sub cell\n // of the startdate cell.\n DomHelper.down(cell, '.b-cal-event-bar-container').appendChild(eventEl);\n eventEl.style[me.view.rtl ? 'right' : 'left'] = DomHelper.percentify(100 * (cells.indexOf(cell) - days.length + 1) / weekLength);\n eventEl.style.width = DomHelper.percentify(100 * days.length / weekLength);\n if (eventTop) {\n eventEl.style.top = eventTop;\n }\n // Ensure element is in view in case it's scrolled, and we are dragging\n // an interday event in the main day part.\n me.view.scrollable.scrollIntoView(eventEl, true);\n }\n else if (eventEl) {\n if (eventEl.classList.contains('b-cal-tentative-event')) {\n eventEl.remove();\n }\n me.eventEl = null;\n }\n }\n updateView(view, was) {\n if (view) {\n const multiDay = DH.diff(view.startDate, view.endDate, 'd') > 1;\n this.hoverable = multiDay;\n this.draggable = multiDay || this.view.owner.isDayView;\n }\n super.updateView(view, was);\n }\n}\n//-------------------------------------------------------------------------\nclass DayZone extends BaseDayZone {\n static get $name() {\n return 'DayZone';\n }\n static get configurable() {\n return {\n dragEventId : null,\n hoverable : true,\n hoverEdges : 'tb',\n times : {\n $config : {\n equal : 'array'\n },\n value : null\n },\n alDayZoneClass : AllDayZone,\n // When dragging events, configure the DayZone with constrainToDay : true\n // to prevent dragging events so that they cross the day start or end boundaries.\n constrainToDay : false\n };\n }\n construct(...args) {\n super.construct(...args);\n const\n me = this,\n { allDayEvents } = me.view;\n if (allDayEvents) {\n me.allDayZone = new me.alDayZoneClass({\n active : me.active,\n owner : me.owner,\n view : allDayEvents,\n resource : me.resource\n });\n }\n }\n syncDraggingElements(eventId, active) {\n const\n { dragging : drag } = this,\n { draggingItemCls } = drag.source,\n containerEl = drag.itemElement.closest('.b-dayview-day-container'),\n elements = containerEl?.querySelectorAll(`[data-event-id=\"${eventId}\"]`) ?? [];\n for (const el of elements) {\n el.classList.toggle(draggingItemCls, active);\n }\n }\n hitTest(at) {\n const\n { view } = this,\n { dayTime } = view,\n hit = super.hitTest(at);\n // Cache the the main date for the column we are over.\n // This is used later in applyDragOffset to constrain the exact datetime to within that date\n if (hit) {\n hit.overDate = at?.isDragContext ? view.getDateFromPosition(at.event.clientX, Rectangle.fromScreen(view.dayContainerElement).y, false, dayTime) : dayTime.startOfDay(hit.date);\n }\n return hit;\n }\n updateDragEventId(eventId, previousEventId) {\n previousEventId && this.syncDraggingElements(previousEventId, false);\n eventId && this.syncDraggingElements(eventId, true);\n }\n get eventRecord() {\n return super.eventRecord || this.allDayZone?.eventRecord;\n }\n set eventRecord(value) {\n super.eventRecord = value;\n }\n get recurring() {\n return this.isCreating && this.eventRecord?.recurrenceRule != null;\n }\n get droppingAllDay() {\n const eventRecord = this.dropping?.peek('eventRecord');\n return eventRecord?.startDate && this.view?.isAllDayEvent(eventRecord) || false;\n }\n get useAllDay() {\n // when an allDay event is being dropping on the hourly part of the day view, relay that to the allDayZone\n // if it is from an outsider (we want to retain the allDay nature of the event). If it is from _our_ allDayZone,\n // then the goal is to move it from allDay to not allDay.\n return this.droppingAllDay && this.view.showAllDayHeader && this.dropping.source !== this.allDayZone;\n }\n get wasAllDay() {\n // when an allDay event is being dropping on the hourly part of the day view, relay that to the allDayZone\n // if it is from an outsider (we want to retain the allDay nature of the event). If it is from _our_ allDayZone,\n // then the goal is to move it from allDay to not allDay.\n return this.droppingAllDay && this.dropping.source === this.allDayZone;\n }\n doDestroy() {\n this.allDayZone?.destroy();\n super.doDestroy();\n }\n dragStart() {\n super.dragStart();\n this.dragEventId = this.dragging.peek('eventRecord')?.id ?? null;\n }\n findRootElement(view) {\n return view.eventContentElement;\n }\n // Drag handling\n captureDragOffset(eventRecord, hit, drag) {\n drag.set('eventOffset', [\n Math.floor(DH.diff(eventRecord.startDate, hit.date, 'm')),\n 'm'\n ]);\n }\n cleanupDrag() {\n this.dragEventId = null;\n super.cleanupDrag();\n this.allDayZone?.cleanupDrag();\n }\n // Drop handling\n cleanupDrop() {\n super.cleanupDrop();\n // Stop monitoring early. With polyfilled resize monitor scroll event\n // will fire too soon when eventRecord is nullified but monitor is not stopped\n this.owner.client?._scrollManager?.stopMonitoring();\n this.allDayZone?.cleanupDrop();\n }\n dropHitCreate(drag, hit) {\n const\n me = this,\n { durationUnit } = me.eventRecord;\n let endTime = hit.date,\n startTime = drag.peek('eventCreate').date,\n endDate = endTime,\n startDate = startTime,\n duration, recurrenceCount;\n const\n sameDay = !(me.clearTime(startTime) - me.clearTime(endTime)),\n recurring = drag.ctrlKey && !sameDay;\n if (recurring || sameDay) {\n endDate = me.clearTime(endTime);\n startDate = me.clearTime(startTime);\n // Now these are just milliseconds from midnight (note: Date - Date = millis):\n startTime = startTime - startDate;\n endTime = endTime - endDate;\n if (endDate < startDate) {\n [startDate, endDate] = [endDate, startDate];\n }\n if (endTime < startTime) {\n [startTime, endTime] = [endTime, startTime];\n }\n startDate.setTime(startDate.getTime() + startTime);\n // Convert the millisecond value of the duration to the event record\n duration = DH.as(durationUnit, Math.max(me.view.increment, Math.floor(endTime - startTime)));\n if (recurring) {\n recurrenceCount = DH.diff(me.clearTime(startDate), me.clearTime(endDate), 'd') + 1;\n }\n }\n else {\n if (endDate < startDate) {\n [startDate, endDate] = [endDate, startDate];\n }\n // Convert the millisecond value of the duration to the event record\n duration = DH.as(durationUnit, Math.floor((endDate - startDate) / MINUTES), 'm');\n }\n me.setEventData({\n startDate,\n duration,\n recurrenceRule : recurring ? `FREQ=DAILY;COUNT=${recurrenceCount}` : null\n });\n }\n dropHitMove(drag, hit, eventRecord) {\n let startDate = hit.date;\n const\n me = this,\n { view } = me,\n dayStart = view.dayTime.startOfDay(startDate);\n if (me.useAllDay) {\n me.allDayZone.dropHitMove(drag, hit, eventRecord);\n }\n else {\n // use the internal eventRecord since it may have a different durationUnit when dragging between allDay\n // and non-allDay:\n eventRecord = me.eventRecord;\n startDate = me.applyDragOffset(startDate, drag);\n // Dragging in a DayView must not allow dragging above \"midnight\", otherwise the drop indicator will\n // become what looks like a 2 day event in the all day header.\n if (view.showAllDayHeader && startDate < dayStart) {\n startDate = dayStart;\n }\n me.setEventData({\n startDate,\n endDate : DH.add(startDate, eventRecord.duration, eventRecord.durationUnit),\n duration : eventRecord.duration\n });\n }\n }\n applyDragOffset(date, drag) {\n let result = super.applyDragOffset(date, drag);\n // If we're not using an all day row, constrain the event to within the day\n if (this.constrainToDay) {\n const { overDate } = this.hit;\n result = new Date(\n Math.max(\n Math.min(result, overDate.getTime() + this.view.dayTime.timeEnd - this.eventRecord.durationMS),\n overDate\n )\n );\n }\n return result;\n }\n dropHitResize(drag, hit, eventHit) {\n const\n me = this,\n { eventRecord } = me,\n date = hit.date;\n if (eventHit.atEnd) {\n if (eventRecord.startDate < date) {\n me.setEventData({\n endDate : date\n });\n }\n }\n else if (date < eventRecord.endDate) {\n me.setEventData({\n startDate : date\n });\n }\n }\n async moveEventTo(drag, dropRec) {\n const\n me = this,\n hit = me.hitTest(drag),\n date = hit?.date;\n if (date) {\n if (me.useAllDay) {\n await me.allDayZone.moveEventTo(drag, dropRec);\n }\n else {\n const\n { view } = me,\n newStartDate = me.applyDragOffset(date, drag);\n // If converting from an all day event, ensure it doesn't remain as inter-day due to the\n // endDate now overrunning the end of the destination date.\n // Constrain newEndDate to the end of the destination date.\n if (me.wasAllDay) {\n const\n endOfDay = DH.add(view.dayTime.startOfDay(newStartDate), 24, 'h'),\n newEndDate = DH.add(newStartDate, dropRec.duration, dropRec.durationUnit);\n dropRec.allDay = false;\n // If the new start time we dropped at will cause it to overflow the end of the dropped day\n // then convert it to be autoCreate.duration in length (Still ensuring that that does not\n // escape the end of the day).\n if (newEndDate > endOfDay) {\n const\n defaultDuration = DH.parseDuration(view.autoCreate.duration),\n newEndDate = new Date(Math.min(DH.add(newStartDate, defaultDuration.magnitude, defaultDuration.unit), endOfDay)),\n newDuration = DH.diff(newStartDate, newEndDate, dropRec.durationUnit);\n dropRec.setDuration(newDuration, dropRec.unit);\n }\n }\n await me.setStartDate(dropRec, newStartDate);\n }\n }\n }\n startCreate(date) {\n this.createEvent({\n duration : 0,\n durationUnit : this.durationUnit,\n startDate : date,\n // It's only a provisional event until gesture is completed (possibly longer if an editor dialog is shown after)\n isCreating : true\n });\n }\n // Misc\n includeDay(date, cell, first, last) {\n return DomHelper.createElement({\n parent : cell.querySelector('.b-dayview-event-container'),\n ...this.renderEvent(this.eventRecord, first, last)\n });\n }\n removeDay(date, value) {\n if (value.classList.contains('b-cal-tentative-event')) {\n value.remove();\n }\n }\n setEventData(data, creating) {\n const me = this;\n if (me.useAllDay) {\n me.allDayZone.setEventData(data, creating);\n return;\n }\n super.setEventData(data, creating);\n const\n { eventRecord } = me,\n { endDate, startDate } = eventRecord,\n { dayTime } = me.view;\n let lastDate = endDate;\n if (me.recurring) {\n // odd thing here... the way \"days\" works is inclusive endDate (because of events that start/stop in the\n // same day), so we need the \"-1\":\n lastDate = DH.add(lastDate, eventRecord.recurrence.count - 1, 'd');\n }\n me.days = me.makeDays(startDate, lastDate); // updates rendered events for these days\n me.times = [\n dayTime.delta(startDate, 's'),\n dayTime.delta(endDate, 's')\n ];\n }\n setupEvent(data, creating) {\n const me = this;\n if (me.useAllDay) {\n me.allDayZone.setupEvent(data, creating);\n }\n else {\n if (this.wasAllDay) {\n data.allDay = false;\n data.endDate = DH.add(data.startDate, data.duration = 1, data.durationUnit = 'hour');\n }\n super.setupEvent(data, creating);\n }\n }\n // Configs\n updateDays(days, was) {\n super.updateDays(days, was);\n this.updateTimes(this.times, null);\n }\n updateTimes(times) {\n if (!times) {\n return;\n }\n const\n me = this,\n { allDayZone, dayValues, dragging, eventRecord, recurring, view } = me,\n { dayTime, eventSpacing } = view,\n insetProp = view.rtl ? 'right' : 'left',\n { endDate, startDate } = eventRecord,\n [startOffset, endOffset] = times,\n // drag move can come from outside our calendar, so only consider the eventWidth if we are the one doing\n // the dragging:\n eventInset = !dragging?.aborted && dragging?.peek('eventInset'),\n eventWidth = !dragging?.aborted && dragging?.peek('eventWidth'),\n firstDay = dayTime.dateKey(startDate),\n lastDay = dayTime.dateKey(endDate),\n multiDay = dayTime.startOfDay(startDate) < dayTime.startOfDay(endDate),\n heightScale = 100 / dayTime.duration('s'); // to give us percent when we multiply by this value\n let { days } = me,\n date, first, height, style, top;\n if (!days) {\n return;\n }\n // Since we may not have changed me.days (time of day only changes), we now need to update the vertical\n // aspect\n for (date in dayValues) {\n first = date === firstDay;\n style = dayValues[date].style;\n top = startOffset * heightScale;\n height = (endOffset - startOffset) * heightScale;\n DomSync.sync({\n targetElement : dayValues[date],\n domConfig : me.renderEvent(me.eventRecord, first, date === days[days.length - 1])\n });\n if (!recurring && multiDay) {\n if (first) {\n height = 100 - top;\n }\n else if (date === lastDay) {\n height = top + height;\n }\n else {\n height = 100;\n }\n }\n style.top = (recurring || first) ? DomHelper.percentify(top) : 0;\n style.height = DomHelper.percentify(height);\n style.paddingBottom = DomHelper.setLength(eventSpacing);\n if (eventInset) {\n style[insetProp] = eventInset;\n }\n if (eventWidth) {\n style.width = `${eventWidth}px`;\n }\n }\n // Now sync \"days\" for the allDayZone:\n if (!days || days.length < 2 || recurring) {\n allDayZone?.cleanupDrop();\n days = null;\n }\n else if (allDayZone && view.showAllDayHeader) {\n if (!allDayZone.eventRecord) {\n allDayZone.noTip = true;\n const eventData = {\n startDate : eventRecord.startDate,\n endDate : eventRecord.endDate\n };\n if (me.isResizing) {\n const resizeEvent = dragging.peek('eventRecord');\n eventData.assigned = resizeEvent.assigned;\n eventData.eventColor = resizeEvent.eventColor;\n }\n allDayZone.createEvent(eventData, me.dropping);\n }\n allDayZone.eventRecord.set({\n startDate : eventRecord.startDate,\n endDate : DH.add(eventRecord.startDate, days.length - 1, 'd')\n });\n allDayZone.days = days;\n }\n }\n}\nclass ResourceCalendarRowZone extends AllDayZone {\n static $name = 'ResourceCalendarRowZone';\n static configurable = {\n droppableSelector : '.b-calendarrow-cell-container,.b-dayresourcecalendarrow-cell-resources,.b-dayresource-allday.b-cal-cell-header'\n };\n // Disable Hoverable behaviour. Resizing is not allowed.\n // Event bars are discontiguous, so resizing an event across multiple\n // cells has ambiguous semantics. We just disallow it.\n // Events in this view may only be *moved*\n syncHoverListeners() {}\n beforeDrag(drag) {\n const hit = this.hitTest(drag);\n // Resizing and drag-creating not valid in this view.\n // Event bars are discontiguous, so resizing an event across multiple\n // cells has ambiguous semantics. We just disallow it.\n // Events in this view may only be *moved*\n if (!hit?.resource || hit.type === 'resize' || hit.type === 'schedule') {\n return false;\n }\n return super.beforeDrag(drag);\n }\n setupEvent() {\n this.view.defaultCalendar = (this.dragging || this.dropping).peek('resource');\n return super.setupEvent(...arguments);\n }\n updateHit(hit, was) {\n if (!hit || hit.resource) {\n super.updateHit(hit, was);\n }\n }\n makeDays(startDate) {\n const\n me = this,\n { isMoving } = me,\n drag = me.dragging || me.dropping,\n date = isMoving ? new Date(Math.max(startDate, me.view.firstVisibleDate)) : drag.peek('date'),\n result = super.makeDays(date, DH.add(date, 1, 'd'));\n // Cannot create or resize across resources\n result.resource = me.hit?.resource;\n return result;\n }\n updateDays(days) {\n const me = this;\n let { view, eventEl } = me;\n if (days?.length) {\n if (!eventEl) {\n me.eventEl = eventEl = DomHelper.createElement({\n ...me.eventDom\n });\n eventEl.classList.add('b-allday');\n }\n const\n eventTop = me.dragging?.peek('eventSourceHit')?.eventTop,\n resourceCell = DomHelper.down(me.dropRootElement,\n `${view.visibleCellSelector}:is(${days.map(d => `[data-date=\"${d}\"]`).join(',')}) [data-resource-id=\"${days.resource.id}\"] > .b-cal-event-bar-container`);\n // The one event element lives in the resource sub cell\n resourceCell.appendChild(eventEl);\n eventEl.style.width = '100%';\n if (eventTop) {\n eventEl.style.top = eventTop;\n }\n // Ensure element is in view in case it's scrolled, and we are dragging\n // an interday event in the main day part.\n view.scrollable.scrollIntoView(eventEl, true);\n }\n else if (eventEl) {\n if (eventEl.classList.contains('b-cal-tentative-event')) {\n eventEl.remove();\n }\n me.eventEl = null;\n }\n }\n}\nclass DayResourceZone extends DayZone {\n static $name = 'DayResourceZone';\n static configurable = {\n alDayZoneClass : ResourceCalendarRowZone\n };\n beforeDrag(drag) {\n const hit = this.hitTest(drag);\n if (!hit?.resource) {\n return false;\n }\n return super.beforeDrag(drag);\n }\n setupEvent() {\n this.view.defaultCalendar = (this.dragging || this.dropping).peek('resource');\n return super.setupEvent(...arguments);\n }\n hitTest(at) {\n const\n drag = this.dragging || this.dropping,\n result = super.hitTest(at);\n // We never resize of create across resource columns or date columns\n if (result && drag && !this.isMoving) {\n const fromDate = drag.peek('date');\n result.resource = drag.peek('resource');\n result.date.setDate(fromDate.getDate());\n result.date.setMonth(fromDate.getMonth());\n result.date.setFullYear(fromDate.getFullYear());\n }\n return result;\n }\n updateHit(hit, was) {\n if (!hit || hit.resource) {\n super.updateHit(hit, was);\n }\n }\n makeDays(startDate, endDate) {\n const\n me = this,\n { isMoving } = me,\n drag = me.dragging || me.dropping,\n date = isMoving ? startDate : drag.peek('date'),\n result = super.makeDays(date, DH.add(date, 1, 'd'));\n // Cannot create or resize across resources\n result.resource = me.hit?.resource;\n return result;\n }\n updateDays(days) {\n const me = this;\n let { eventEl } = me;\n if (days?.length) {\n const cell = DomHelper.down(me.dropRootElement,\n `:is(${days.map(d => `[data-date=\"${d}\"]`).join(',')}) ${me.view.visibleCellSelector}[data-resource-id=\"${days.resource.id}\"] .b-dayview-event-container`);\n // Dragging in this view never spans cells, so we only need one eventEl\n if (!eventEl) {\n me.eventEl = eventEl = DomHelper.createElement({\n ...me.eventDom\n });\n }\n cell.appendChild(eventEl);\n }\n else if (eventEl) {\n if (eventEl.classList.contains('b-cal-tentative-event')) {\n eventEl.remove();\n }\n me.eventEl = null;\n }\n me._times = null;\n }\n updateTimes(times) {\n if (!times || !this.days) {\n return;\n }\n const\n me = this,\n { dayTime, eventSpacing } = me.view,\n [startOffset, endOffset] = times,\n heightScale = 100 / dayTime.duration('s'), // to give us percent when we multiply by this value\n { style } = me.eventEl,\n top = startOffset * heightScale,\n height = (endOffset - startOffset) * heightScale;\n DomSync.sync({\n targetElement : me.eventEl,\n domConfig : me.renderEvent(me.eventRecord, true, true)\n });\n style.top = DomHelper.percentify(top);\n style.height = DomHelper.percentify(height);\n style.paddingBottom = DomHelper.setLength(eventSpacing);\n style.width = '100%';\n // We sidestep cross-date drags for now.\n // No connection into all day zone.\n }\n}\n//====================================================================================================\n// MonthView\nclass MonthZone extends Zone {\n static get $name() {\n return 'MonthZone';\n }\n static get configurable() {\n return {\n coverage : {\n $config : {\n equal : ObjectHelper.isEqual\n },\n value : null\n },\n hoverable : true,\n hoverEdges : 'lr',\n hoverSelector : '.b-cal-event-wrap.b-allday'\n };\n }\n findRootElement(view) {\n return view.weeksElement;\n }\n // Drag handling\n captureDragOffset(eventRecord, hit, drag) {\n drag.set('eventOffset', [\n Math.floor(DH.diff(this.clearTime(eventRecord.startDate), hit.date, 'd')),\n 'd'\n ]);\n }\n cleanupDrag() {\n super.cleanupDrag();\n const cleanDom = () => this.coverage = null;\n // Delay removal of the coverage element slightly if creating so that the refresh\n // will happen first and the event element will not appear to blink.\n if (this.isCreating) {\n // Wait for a max of 100ms for a refresh to occur before cleaning the DOM\n this.view.afterRefresh(cleanDom);\n }\n else {\n cleanDom();\n }\n }\n // Drop handling\n cleanupDrop() {\n super.cleanupDrop();\n // Stop monitoring early. With polyfilled resize monitor scroll event\n // will fire too soon when eventRecord is nullified but monitor is not stopped\n this.owner.client?._scrollManager?.stopMonitoring();\n const cleanDom = () => this.coverage = null;\n // Delay removal of the coverage element slightly if creating so that the refresh\n // will happen first and the event element will not appear to blink.\n if (this.isCreating) {\n // Wait for a max of 100ms for a refresh to occur before cleaning the DOM\n this.view.afterRefresh(cleanDom);\n }\n else {\n cleanDom();\n }\n }\n dropHitCreate(drag, hit) {\n const\n me = this,\n recurring = drag.ctrlKey,\n dragFrom = drag.peek('eventCreate');\n let recurrenceRule = null,\n count, day1, day2, endDate, startDate, week1, week2;\n endDate = me.clearTime(hit.date);\n startDate = me.clearTime(dragFrom.date);\n day1 = dragFrom.dayNumber;\n day2 = hit.dayNumber;\n week1 = dragFrom.weekOffset;\n week2 = hit.weekOffset;\n if (week2 < week1) {\n [week1, week2] = [week2, week1];\n }\n /*\n +-----+-----+-----+-----+-----+-----+-----+\n | S | M | Tu | W | Th | F | S |\n +-----+-----+-----+-----+-----+-----+-----+\n | | B | | A | | C | |\n +-----+-----+-----+-----+-----+-----+-----+\n | | | | | | | |\n +-----+-----+-----+-----+-----+-----+-----+\n | | D | | x | | E | |\n +-----+-----+-----+-----+-----+-----+-----+\n | | | | | | | |\n +-----+-----+-----+-----+-----+-----+-----+\n | | F | | G | | H | |\n +-----+-----+-----+-----+-----+-----+-----+\n startDate day1\n A > endDate = day2\n B > endDate > day2\n C > endDate < day2\n D > endDate > day2\n E < endDate < day2\n F < endDate > day2\n G < endDate = day2\n H < endDate < day2\n */\n if (recurring) {\n // In this mode, the interval [day1, day2] is used to draw the days of the week for each week, so it\n // must be that day1 <= day2.\n count = week2 - week1 + 1;\n recurrenceRule = (count > 1) ? `FREQ=WEEKLY;COUNT=${count}` : null;\n if (endDate < startDate) { // if (A, B, C or D)\n startDate = endDate; // only startDate matters for recurrence...\n if (day1 < day2) { // if (C)\n startDate = DH.add(startDate, day1 - day2, 'd');\n }\n }\n else if (day2 < day1) { // if (F)\n startDate = DH.add(startDate, day2 - day1, 'd');\n }\n if (day2 < day1) { // if (B, D or F)\n [day1, day2] = [day2, day1];\n }\n }\n // In this mode, day1 is the day of week the event starts and day2 is the day of week for the end of the\n // event, so they must adhere to startDate/endDate.\n else if (endDate < startDate) {\n [startDate, endDate] = [endDate, startDate];\n [day1, day2] = [day2, day1];\n }\n me.setEventData({\n startDate,\n duration : DH.as(me.eventRecord.durationUnit, (recurring ? day2 - day1 : DH.diff(startDate, endDate, 'd')) + 1, 'd'),\n recurrenceRule\n });\n }\n dropHitNowhere(drag) {\n super.dropHitNowhere(drag);\n this.coverage = null;\n }\n // Misc\n setEventData(data, creating) {\n super.setEventData(data, creating);\n const\n { dropping, eventRecord, view } = this,\n { visibleCellSelector } = view,\n weekEls = DomHelper.children(view.weeksElement, '> .b-calendar-week'),\n coverage = {\n // weekNumber : String[] describing the days for a weekEl (in order of weekEls)\n },\n add = event => {\n const { startDate, endDate } = event;\n for (let cells, cover, k, n, i = 0; i < weekEls.length; ++i) {\n cells = DomHelper.children(weekEls[i], visibleCellSelector); // not immediate descendants\n n = cells.length;\n // cover is a string w/day numbers for every day that intersects the event 0 to N-1 where N is\n // the number of days in the week. Day number 0 is preceded by '<' if the event started before\n // the week. Day number N-1 is followed by '>' if the event extends beyond the end of the week.\n // Ex: '0123' means the event occurs on the first 4 days of the week.\n // Ex: '<012' means the event started in the prior week and occurs on the first 3 days.\n cover = '';\n for (k = 0; k < n; ++k) {\n const\n dayStart = view.getDateFromElement(cells[k]),\n dayEnd = DH.add(dayStart, 1, 'd');\n if (startDate < dayEnd && dayStart < endDate) { // if (day intersects event)\n if (!k && startDate < dayStart) {\n cover = '<';\n }\n cover += k; // k is converted to a string since cov is a string\n if (k === n - 1 && dayEnd < endDate) {\n cover += '>';\n }\n }\n }\n if (cover) {\n (coverage[i] || (coverage[i] = [])).push(cover);\n }\n }\n };\n if (dropping?.has('eventRecord') || !eventRecord.recurrence) {\n add(eventRecord);\n }\n else {\n eventRecord.recurrence.forEachOccurrence(view.startDate, view.endDate, add);\n }\n this.coverage = coverage;\n }\n // Configs\n updateCoverage(coverage) {\n const\n me = this,\n {\n dragging,\n weekValues,\n view\n } = me,\n { rtl } = view,\n {\n visibleCellSelector\n } = view,\n eventSourceHit = coverage && dragging?.peek('eventSourceHit'),\n eventTop = eventSourceHit?.eventTop,\n newWeekValues = {},\n eventRow = view.getWeekElementFor(eventSourceHit?.eventElement),\n { weekElements } = view;\n let cell, cells, cov, cover, el, eventEl, extL, extR, i, k, weekEl;\n me.weekValues = newWeekValues;\n for (i = 0; i < weekElements.length; ++i) {\n if (!(cover = coverage?.[i])) {\n continue;\n }\n weekEl = weekElements[i];\n cells = DomHelper.children(weekEl, visibleCellSelector); // not immediate descendants\n for (k = 0; k < cover.length; ++k) {\n // we keep an array of elements for each week in case we need to render some sort of recurrence\n if (!(eventEl = weekValues?.[i]?.shift())) {\n eventEl = DomHelper.createElement(me.eventDom);\n }\n (newWeekValues[i] || (newWeekValues[i] = [])).push(eventEl);\n cov = cover[k];\n extL = cov.includes('<') ? 1 : 0;\n extR = cov.includes('>') ? 1 : 0;\n cov = cov.substr(extL, cov.length - extR - extL); // remove the < > chars if any\n eventEl.classList[extL ? 'add' : 'remove']('b-continues-past');\n eventEl.classList[extR ? 'add' : 'remove']('b-continues-future');\n eventEl.style[rtl ? 'right' : 'left'] = DomHelper.percentify(100 * Number(cov[0]) / cells.length);\n eventEl.style.width = DomHelper.percentify(100 * cov.length / cells.length);\n if (eventTop && weekEl === eventRow) {\n eventEl.style.top = eventTop;\n }\n // We put the el in the last cell so that it is on top of events for that day and all events on prior\n // days as well\n cell = cells[Number(cov[cov.length - 1])];\n el = DomHelper.down(cell, '.b-cal-event-bar-container');\n if (el !== eventEl.parentNode) {\n el.appendChild(eventEl);\n }\n }\n }\n if (weekValues) {\n for (i in weekValues) {\n weekValues[i].forEach(el => {\n if (el.classList.contains('b-cal-tentative-event')) {\n el.remove();\n }\n });\n }\n }\n }\n}\n//====================================================================================================\n// OverflowZone\nclass OverflowZone extends Zone {\n static get $name() {\n return 'OverflowZone';\n }\n static get configurable() {\n return {\n droppable : false,\n dragProxy : {\n type : 'default',\n open(drag) {\n const\n me = this,\n { owner } = drag.source.view,\n sourceEl = drag.element.closest('.b-cal-event-wrap');\n if (owner.isYearView) {\n me.proxyEl = sourceEl.cloneNode(true);\n me.proxyEl.classList.add('b-cal-drag-proxy');\n me.proxyEl.style.width = `${sourceEl.offsetWidth}px`;\n me.proxyOffset = EventHelper.getClientPoint(drag.startEvent).getDelta(Rectangle.from(sourceEl));\n owner.contentElement.appendChild(me.proxyEl);\n }\n },\n dragMove(drag) {\n if (this.proxyEl) {\n // Align the proxy to [10, 10] from the pointer\n DomHelper.alignTo(this.proxyEl, EventHelper.getClientPoint(drag.event).translate(10, 10), {\n align : 't0-t0'\n });\n }\n },\n close() {\n this.proxyEl?.remove();\n }\n }\n };\n }\n findRootElement(view) {\n return view.contentElement;\n }\n beforeDrag(drag) {\n const hit = this.hitTest(drag);\n if (hit?.type !== 'event' || !this.owner.draggable || !hit.eventRecord.isDraggable) {\n return false;\n }\n drag.set('eventRecord', hit.eventRecord);\n drag.set('eventDragMode', drag[eventDragSym] = modeDescriptor.move.mode);\n }\n dragStart() {\n this.view.hide();\n }\n}\n//====================================================================================================\n// YearView\nclass YearZone extends Zone {\n static get $name() {\n return 'YearZone';\n }\n startCreate() {\n // Overflow popup must hide during YearView drag create.\n this.view._overflowPopup?.hide();\n super.startCreate(...arguments);\n }\n // Drop handling\n dragEnter(drag) {\n const result = super.dragEnter(drag);\n if (result !== false) {\n this.view.contentElement.classList.add(this.draggingCls);\n }\n return result;\n }\n dragLeave(drag) {\n super.dragLeave(drag);\n this.view.contentElement.classList.remove(this.draggingCls);\n }\n dropHitCreate(drag, hit, dragFrom) {\n const me = this;\n let endDate = me.clearTime(hit.date),\n startDate = me.clearTime(dragFrom.date);\n if (endDate < startDate) {\n [startDate, endDate] = [endDate, startDate];\n }\n // Helpful to use the dates because of changing DST across large date ranges\n me.setEventData({\n startDate,\n endDate : DH.add(endDate, 1, 'd')\n });\n me.days = me.makeDayRange(startDate, endDate); // updates cell styles for these days\n }\n dropHitMove(drag, hit, eventRecord) {\n super.dropHitMove(drag, hit, eventRecord);\n const\n me = this,\n tempRec = me.eventRecord;\n let { endDate } = tempRec;\n if (tempRec.allDay) {\n endDate = DH.add(endDate, -1, 'd'); // switch to inclusive\n }\n me.days = me.makeDayRange(tempRec.startDate, endDate);\n }\n // Misc\n includeDay(date) {\n const els = DomHelper.children(this.view.bodyElement, `[data-date='${date}']`);\n els.forEach(e => e.classList.add(`b-cal-tentative-event${this.view.hideNonWorkingDays ? ':not(.b-nonworking-day)' : ''}`));\n return els;\n }\n makeDayRange(startDate, endDate) {\n const days = [];\n for (let date = startDate; date <= endDate; date = DH.add(date, 1, 'd')) {\n days.push(DH.format(date, YYYY_MM_DD));\n }\n return days;\n }\n removeDay(date, els) {\n els.forEach(e => e.classList.remove('b-cal-tentative-event'));\n }\n}\n//====================================================================================================\n// ResourceViewZone\nclass ResourceViewZone extends Base {\n static get configurable() {\n return {\n view : null,\n zones : {\n $config : ['nullify'],\n value : []\n }\n };\n }\n updateView(view) {\n // Create sub zones for any already existent views.\n // If project had static data, they will be generated at config time.\n view.eachView(view => {\n this.onResourceViewViewCreate({ view });\n });\n // If data is loaded async, they will be created when Resources arrive.\n view.ion({\n viewCreate : 'onResourceViewViewCreate',\n thisObj : this\n });\n }\n onResourceViewViewCreate({ view }) {\n const\n me = this,\n {\n zones,\n owner\n } = me,\n modes = owner.client.constructor.Modes,\n type = owner.getViewZoneType(modes.resolveType(view.type));\n type && zones.push(owner.createZone(type, {\n view,\n resource : view.defaultCalendar\n }));\n }\n changeZones(zones, oldZones) {\n if (oldZones?.length && !zones) {\n for (let i = 0, { length } = oldZones; i < length; i++) {\n oldZones[i].destroy();\n }\n }\n return zones;\n }\n}\n//----------------------------------------------------------------------------------------------------\n/**\n * Format expected to be returned in a `validateCreateFn`\n *\n * @typedef {Object} ValidateCreateResult\n * @property {Boolean} add Allow adding to store\n * @property {Boolean} edit Allow editor to open\n */\n/**\n * This feature provides drag-based event creation and modification for Calendars. When enabled (which is the default\n * for calendars), the user can do the following via the mouse or touch screen:\n *\n * - Create events by touching (or pressing the mouse button in) an the empty space and dragging. As the drag\n * progresses, a tentative event is rendered. On release, the {@link Calendar.feature.EventEdit} feature displays\n * the event edit dialog to complete the process. This can be disabled via the {@link #config-creatable} config.\n * - Adjust the start or end times of an event in the day or week views by dragging the top or bottom of an event.\n * This can be disabled via the {@link #config-resizable} config or the {@link Scheduler.model.mixin.EventModelMixin#field-resizable}\n * field on a per-event basis.\n * - Adjust the start or end date of an all-day event in the month view by dragging the left-most or right-most end\n * of an event. This can be disabled via the {@link #config-resizable} config or the\n * {@link Scheduler.model.mixin.EventModelMixin#field-resizable} field on a per-event basis.\n * - Move an event from its current time (in day or week views) or date (in all views except agenda) by dragging the\n * body of an event. This can be disabled via the {@link #config-draggable} config or via the\n * {@link Scheduler.model.mixin.EventModelMixin#field-draggable} field on a per-event basis.\n *\n * ```javascript\n * // change name for events created by drag to \"Event\":\n * let calendar = new Calendar({\n * features : {\n * drag : {\n * newName : 'Event'\n * }\n * }\n * });\n * ```\n *\n * ## Asynchronous validation of resize, move and create operations\n *\n * You can easily add a confirmation step after an operation to show a dialog to the end user. This is done using the\n * {@link #event-beforeDragMoveEnd}, {@link #event-beforeDragCreateEnd} and {@link #event-beforeDragResizeEnd} events.\n *\n * ```javascript\n * let calendar = new Calendar({\n * listeners : {\n * // Async event listeners allowing you to veto drag operations\n * beforeDragMoveEnd : async({ eventRecord }) => {\n * const result = await MessageDialog.confirm({\n * title : 'Please confirm',\n * message : 'Is this the start time you wanted?'\n * });\n *\n * // Return true to accept the drop or false to reject it\n * return result === MessageDialog.yesButton;\n * },\n * beforeDragResizeEnd : async({ eventRecord }) => {\n * const result = await MessageDialog.confirm({\n * title : 'Please confirm',\n * message : 'Is this the duration you wanted?'\n * });\n *\n * // Return true to accept the drop or false to reject it\n * return result === MessageDialog.yesButton;\n * },\n * beforeDragCreateEnd : async({ eventRecord }) => {\n * const result = await MessageDialog.confirm({\n * title : 'Please confirm',\n * message : 'Want to create this event?'\n * });\n *\n * // Return true to accept the drop or false to reject it\n * return result === MessageDialog.yesButton;\n * }\n * }\n * });\n * ```\n *\n * ## Converting \"All day\" events to intra day events\n * You may drag an \"All day\" event out of the {@link Calendar.widget.DayView#property-allDayEvents top row}\n * of a {@link Calendar.widget.DayView} and into the body of the view.\n *\n * The event's {@link Scheduler.model.EventModel#field-duration} will be preserved if possible.\n *\n * If the newly calculated end time (based on the dropped-at time and the {@link Scheduler.model.EventModel#field-duration}\n * of the event) will overflow the end of that date then the event is converted to the duration configured\n * in the `DayView`'s {@link Calendar.widget.DayView#config-autoCreate}.\n *\n * This feature is **enabled** by default.\n *\n * The example below demonstrates configuration of the EventEdit feature and implements validation of\n * drag gestures so that no event interrupts fika from 9:30am to 10:30am.\n *\n * {@inlineexample Calendar/feature/CalendarDrag.js}\n *\n * @extends Calendar/feature/CalendarFeature\n * @classtype drag\n * @feature\n */\nexport default class CalendarDrag extends CalendarFeature {\n static get $name() {\n return 'CalendarDrag';\n }\n static get type() {\n return 'drag';\n }\n static get configurable() {\n return {\n disableOnReadOnly : true,\n localizableProperties : [\n 'newName',\n 'recurrenceTip'\n ],\n /**\n * Specify `false` to disallow creating events by drag gestures.\n * @config {Boolean}\n */\n creatable : true,\n /**\n * Specify `false` to disallow dragging events to new times or days.\n * @config {Boolean}\n */\n draggable : true,\n /**\n * The {@link Scheduler.model.EventModel#field-durationUnit} to use when drag-creating events.\n *\n * If not specified, the `dragUnit` property of the active view's\n * {@link Calendar.widget.mixin.CalendarMixin#property-autoCreate} is used.\n *\n * For {@link Calendar.widget.DayView}s, this is normally `'hour'`, for views with a granularity\n * level of one day, the default is `'day'`.\n * @config {String}\n */\n durationUnit : null,\n /**\n * A {@link Core.helper.DomHelper#typedef-DomConfig DOM config} object used to create an extra element\n * during event drag to contain the end time of the tentative event. This element contains the CSS class\n * `'b-cal-event-footer'` which can be used for styling.\n *\n * Set this to `null` to remove the end time rendering during drag operations.\n * @config {DomConfig}\n * @default\n */\n footer : {\n className : 'b-cal-event-footer'\n },\n /**\n * This is configured as a {@link Core.helper.DomHelper#function-createElement-static DomHelper}\n * specification and is promoted to an `HTMLElement` during initialization. This element is moved between\n * calendar event elements on hover in order to show drag handles on the event under the mouse.\n * @config {HTMLElement|DomConfig}\n * @private\n */\n gripper : {\n class : 'b-gripper'\n },\n /**\n * The name of new events or a function to call with the event record that will return the event name.\n *\n * If a function is supplied, it is called in the scope of (the `this` reference is set to) the\n * view being dragged within.\n *\n * Cpnfigure as `null` to use the dragged-in view's {@link Calendar.widget.mixin.CalendarMixin#config-autoCreate}\n * `newName` property.\n * @config {String|Function}\n * @param {Scheduler.model.EventModel} eventRecord The record being drag-created.\n * @returns {String} Name of new event\n */\n newName : 'L{newEvent}',\n /**\n * The text to display as a hint for creating recurring events during drag. This tip is displayed in the\n * {@link #config-tooltip} in the same place as the recurrence summary (when there is no recurrence to\n * display).\n * @config {String}\n */\n recurrenceTip : '(L{holdCtrlForRecurrence})',\n /**\n * Specify `false` to disallow dragging the edges of events to change their start or end.\n * @config {Boolean}\n */\n resizable : true,\n /**\n * The tooltip to display during a drag create process. Disabled by\n * default, set to `true`, or provide a tooltip / config object, to enable it.\n * @config {Boolean|EventTipConfig|Calendar.widget.EventTip}\n */\n tooltip : {\n $config : ['lazy', 'nullify'],\n value : {\n type : 'eventTip',\n disabled : true,\n forSelector : null,\n tools : null\n }\n },\n /**\n * An empty function by default that allows you to perform custom validation on an event being created by\n * a drag gesture.\n *\n * The `drag` context contains the following data items (see {@link Core.util.drag.DragContext#function-get}):\n *\n * - `eventDragMode` : The {@link #typedef-CalendarDragMode} object describing the drag operation.\n * - `eventCreate` : The {@link Calendar.view.Calendar#typedef-CalendarHit} object that describes the target of the drag operation.\n *\n * Return `false` to cancel the create operation.\n *\n * This function can return a `Promise` (i.e., it can be `async`).\n *\n * Example:\n * ```javascript\n * let calendar = new Calendar({\n * features : {\n * drag : {\n * async validateCreateFn({ eventRecord, drag }) {\n * // This method can be async so it can make ajax requests or interact\n * // with the user...\n *\n * // if we return false, the event will be discarded\n *\n * // The following is equivalent to returning false:\n * //\n * // return {\n * // // Do not add the event to the store\n * // add : false,\n * // // Do not display the edit dialog (in the eventEdit feature):\n * // edit : false\n * // };\n * //\n * // This simply adds the event and does not display the editor:\n * //\n * return {\n * edit : false\n * };\n *\n * // To do delay adding the event until the editor is done (and\n * // not via Cancel):\n * // return {\n * // add : false\n * // };\n * }\n * }\n * }\n * });\n * ```\n * or:\n * ```javascript\n * let calendar = new Calendar({\n * features : {\n * drag : {\n * // Will resolve on the Calendar\n * validateCreateFn : 'up.validateCreate'\n * }\n * },\n * validateCreate{ eventRecord, drag } {\n * ...\n * }\n * });\n * ```\n *\n * Return `true` if the event should be added to the event store and to inform the\n * {@link Calendar.feature.EventEdit eventEdit} feature to display the edit dialog.\n *\n * If this function returns an object, the `add` property can be set to `false`\n * to prevent adding to the event store, and the `edit` property can be set to `false` to inform the\n * `eventEdit` feature not to display the edit dialog.\n *\n * @config {Function|String}\n * @param {Object} info\n * @param {Core.util.drag.DragContext} info.drag The drag create context.\n * @param {Event} info.event The browser event object.\n * @param {Scheduler.model.EventModel} info.eventRecord The Event record.\n * @returns {Boolean|ValidateCreateResult} Return `false` if this event should be rejected.\n */\n validateCreateFn : () => {},\n /**\n * An empty function by default that allows you to perform custom validation on the event being moved to a\n * new date or time via a drag gesture.\n *\n * The `drag` context contains the following data items (see {@link Core.util.drag.DragContext#function-get}):\n *\n * - `eventDragMode` : The {@link #typedef-CalendarDragMode} object describing the drag operation.\n * - `eventRecord` : The {@link Scheduler.model.EventModel event record} being moved.\n * - `eventSourceHit` : The {@link Calendar.view.Calendar#typedef-CalendarHit} object that describes the source of the drag operation.\n *\n * Return `false` to cancel the operation.\n *\n * This function can return a `Promise` (i.e., it can be `async`).\n *\n * Example:\n * ```javascript\n * let calendar = new Calendar({\n * features : {\n * drag : {\n * async validateMoveFn({ eventRecord, drag }) {\n * // This method can be async so it can make ajax requests or interact\n * // with the user...\n *\n * // if we return false, the event move will be discarded\n * }\n * }\n * }\n * });\n * ```\n * or:\n * ```javascript\n * let calendar = new Calendar({\n * features : {\n * drag : {\n * // Will resolve on the Calendar\n * validateMoveFn : 'up.validateMove'\n * }\n * },\n * validateMove{ eventRecord, drag } {\n * ...\n * }\n * });\n * ```\n *\n * @config {Function|String}\n * @param {Object} info\n * @param {Core.util.drag.DragContext} info.drag The drag create context.\n * @param {Event} info.event The browser event object.\n * @param {Scheduler.model.EventModel} info.eventRecord The Event record.\n * @returns {Boolean} Return `false` if this event change should be rejected.\n */\n validateMoveFn : () => {},\n /**\n * An empty function by default that allows you to perform custom validation on the event whose `startDate`\n * or `endDate` is being modified via drag gesture.\n *\n * The `drag` context contains the following data items (see {@link Core.util.drag.DragContext#function-get}):\n *\n * - `eventDragMode` : The {@link #typedef-CalendarDragMode} object describing the drag operation.\n * - `eventSourceHit` : The {@link Calendar.view.Calendar#typedef-CalendarHit} object that describes the source of the drag operation.\n *\n * Return `false` to cancel the operation.\n *\n * This function can return a `Promise` (i.e., it can be `async`).\n *\n * Example:\n * ```javascript\n * let calendar = new Calendar({\n * features : {\n * drag : {\n * async validateResizeFn({ eventRecord, drag }) {\n * // This method can be async so it can make ajax requests or interact\n * // with the user...\n *\n * // if we return false, the event change will be discarded\n * }\n * }\n * }\n * });\n * ```\n * or:\n * ```javascript\n * let calendar = new Calendar({\n * features : {\n * drag : {\n * // Will resolve on the Calendar\n * validateResizeFn : 'up.validateResize'\n * }\n * },\n * validateResize{ eventRecord, drag } {\n * ...\n * }\n * });\n * ```\n *\n * @config {Function|String}\n * @param {Object} info\n * @param {Core.util.drag.DragContext} info.drag The drag create context.\n * @param {Event} info.event The browser event object.\n * @param {Scheduler.model.EventModel} info.eventRecord The Event record.\n * @returns {Boolean|Promise} Return `false` if this event change should be rejected.\n */\n validateResizeFn : () => {},\n zoneTypes : {\n day : DayZone, // also covers WeekView\n month : MonthZone,\n year : YearZone,\n resource : ResourceViewZone,\n dayresource : DayResourceZone\n // AgendaView is not supported (though it could be a Draggable just not a Droppable)\n },\n /**\n * By default, when an event is dragged from an external source, the event is removed from the\n * source EventStore. Configure this as `false` to leave the event in place to allow for the dragging\n * in of the same event repeatedly.\n * @prp {Boolean}\n * @default\n */\n removeFromExternalStore : true\n };\n }\n callOnFunctions = true;\n // Called as a callOnFunctions function by the firing of the beforeDragStart event.\n // The beforeAutoCreate event is also triggered by CalendarMixin's detection of its own\n // autoCreate gesture. This event gives a common point for validation of UI-initiated\n // event creation.\n onBeforeDragStart(props) {\n const\n { drag, event : domEvent, source } = props,\n resourceRecord = source.owner.activeView.getResourceRecord?.(drag.element);\n if (drag.peek('eventDragMode').type === 'create') {\n return this.client.trigger('beforeAutoCreate', { domEvent, date : drag.peek('date'), resourceRecord });\n }\n }\n changeGripper(gripper, was) {\n was?.remove();\n return gripper && DomHelper.createElement(gripper);\n }\n changeTooltip(config, existing) {\n if (config) {\n config = config === true ? this.constructor.configurable.tooltip.value : config;\n if (this.initialConfig.tooltip) {\n config.disabled = false;\n }\n config.ownerFeature = this;\n }\n return Widget.reconfigure(existing, config, /* owner = */ this);\n }\n}\nCalendarDrag.initClass();\nCalendarDrag._$name = 'CalendarDrag';", "import SchedulerEventEditor from '../../Scheduler/view/EventEditor.js';\n/**\n * @module Calendar/widget/EventEditor\n */\n/**\n * Provided event editor dialog. This is not supposed to be used directly.\n *\n * Using the {@link Scheduler.feature.EventEdit#config-items items} config of the EventEdit feature\n * it is possible to reconfigure the layout of the event editor. See the {@link Calendar.feature.EventEdit}\n * for more information and an example of doing this.\n *\n * @extends Scheduler/view/EventEditor\n * @private\n *\n * @typings Scheduler.view.EventEditor -> Scheduler.view.SchedulerEventEditor\n */\nexport default class EventEditor extends SchedulerEventEditor {\n //region Config\n static get $name() {\n return 'EventEditor';\n }\n // Factoryable type name\n static get type() {\n return 'calendareventeditor';\n }\n static get configurable() {\n return {\n align : {\n monitorResize : true // Needed because DayView events change size\n }\n };\n }\n //endregion\n updateRecord(record) {\n this.fixTimeFieldVisibility(record.allDay);\n super.updateRecord(record);\n }\n onAllDayChange({ value, userAction }) {\n this.fixTimeFieldVisibility(value, userAction);\n }\n fixTimeFieldVisibility(allDay, fromUI) {\n const\n hideShowMethod = allDay ? 'hide' : 'show',\n {\n startDateField,\n startTimeField,\n endDateField,\n endTimeField\n } = this.widgetMap;\n // Times hidden for allDay events\n startTimeField?.[hideShowMethod]();\n endTimeField?.[hideShowMethod]();\n // Restore the time fields from the underlying data if the UI checkbox is cleared.\n // If the record was promoted to being allDay, the time portion does not get cleared,\n // just the date getters return snapped values. So the underlying data restores the fields\n // to the originally set start and end times so that the save operation will work as expected.\n if (!allDay && fromUI) {\n startDateField && (startDateField.value = startTimeField.value = this.record.getData('startDate'));\n endDateField && (endDateField.value = endTimeField.value = this.record.getData('endDate'));\n }\n }\n onBeforeShow() {\n const { deleteButton } = this.widgetMap;\n // Superclass has opinions at this time.\n super.onBeforeShow(...arguments);\n // If superclass has not already hidden it for its owm reasons\n // We hide the delete button for newly created events.\n // The cancel button removes it.\n if (deleteButton && !deleteButton.hidden) {\n if (this.record.isCreating) {\n deleteButton.hide();\n }\n }\n }\n onFocusOut() {\n super.onFocusOut(...arguments);\n this.owner = this.initialConfig.owner;\n }\n}\n// Register this widget type with its Factory\nEventEditor.initClass();\nEventEditor._$name = 'EventEditor';", "import CalendarFeature from './CalendarFeature.js';\nimport SchedulerEventEdit from '../../Scheduler/feature/EventEdit.js';\nimport '../widget/EventEditor.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport '../../Core/widget/SlideToggle.js';\nimport Scroller from '../../Core/helper/util/Scroller.js';\n/**\n * @module Calendar/feature/EventEdit\n */\nconst isCalendar = w => w.isCalendar;\n/**\n * Feature that displays a popup containing fields for editing event data.\n *\n * To customize its contents you can:\n *\n * * Reconfigure built-in widgets by providing override configs in the {@link Scheduler.feature.base.EditBase#config-items} config.\n * * Change the date format of the date & time fields: {@link Scheduler.feature.base.EditBase#config-dateFormat} and {@link Scheduler.feature.base.EditBase#config-timeFormat}\n * * Configure provided fields in the editor and add your own in the {@link Scheduler.feature.base.EditBase#config-items} config.\n * * Remove fields related to recurring events configuration (such as `recurrenceCombo`) by setting {@link Scheduler.feature.mixin.RecurringEventEdit#config-showRecurringUI} config to `false`.\n * * Advanced: Reconfigure the whole editor widget using {@link Scheduler.feature.EventEdit#config-editorConfig}\n *\n * For more info on customizing the event editor, please see [Customize event editor](#Calendar/guides/customization/eventedit.md) guide.\n *\n * {@inlineexample Calendar/feature/EventEdit.js}\n *\n * This feature is **enabled** by default.\n *\n * @demo Calendar/eventedit\n *\n * @extends Scheduler/feature/EventEdit\n * @classtype eventEdit\n * @feature\n *\n * @typings Scheduler.feature.EventEdit -> Scheduler.feature.SchedulerEventEdit\n */\nexport default class EventEdit extends SchedulerEventEdit {\n static get $name() {\n return 'EventEdit';\n }\n static get type() {\n return 'eventEdit';\n }\n static get configurable() {\n return {\n editorConfig : {\n type : 'calendareventeditor',\n items : {\n resourceField : {\n label : 'L{Calendar}',\n showEventColor : true\n },\n allDay : {\n type : 'checkbox',\n cls : 'b-match-label',\n name : 'allDay',\n weight : 250,\n label : 'L{All day}',\n internalListeners : {\n change : 'up.onAllDayChange'\n }\n }\n }\n }\n };\n }\n construct(config) {\n // Legacy constructor signature\n super.construct(config.client, config);\n }\n async onDragCreateEnd({ eventRecord, resourceRecord }) {\n eventRecord._dragCreated = true;\n await this.editNewlyCreatedEvent(eventRecord, resourceRecord);\n eventRecord._dragCreated = null;\n }\n onEventAutoCreated({ eventRecord }) {\n this.editNewlyCreatedEvent(eventRecord);\n }\n editNewlyCreatedEvent(eventRecord, resourceRecord) {\n if (!this.disabled) {\n // The Drag feature adds the record so we must set the flag here.\n eventRecord.isCreating = true;\n // Implementations may be async, so the return value must always be propagated.\n // also, set the `stmCapture` argument to `false` do disable the STM capturing mechanism\n // calendar is performing its own handling\n return this.editEvent(eventRecord, resourceRecord, null, false);\n }\n }\n /**\n * Opens an editor for the passed event. This function is exposed on Calendar and can be called as\n * `calendar.editEvent()`.\n *\n * If the event is not present in the `eventStore`, the event will be added so that it becomes\n * visible in the UI. The editor will then shows a \"Cancel\" button which removes the event when\n * clicked to abort a \"New Event\" operation.\n * @method editEvent\n * @param {Scheduler.model.EventModel} eventRecord Event to edit\n * @param {Scheduler.model.ResourceModel} [resourceRecord] Not used. Inherited from Scheduler.\n * @param {HTMLElement} [element] Element to anchor editor to (defaults to events element)\n * @async\n * @on-owner\n */\n // editEvent is the single entry point in the base class.\n // Subclass implementations of the action may differ, so are implemented in doEditEvent\n async doEditEvent(eventRecord, resourceRecord, element) {\n const\n me = this,\n { client } = me,\n { eventStore } = client,\n { startDate, endDate } = eventRecord;\n // eventSource is the descendant view that is being interacted with.\n // See Calendar#onViewCatchAll\n // activeSubView is the lowest level active view in the currently visible view in the\n // card layout of the viewContainer.\n // eventSource might be a descendant of the activeView.\n let view = client.eventSource || client.activeSubView;\n // If we get this event from a Scheduler view, use superclass's edit process.\n if (view.isScheduler) {\n me.client = view;\n await super.doEditEvent(...arguments);\n me.client = client;\n return;\n }\n // If we get this event from a non-Calendar view, or the view is cell editing, ignore it.\n if (!view.isCalendarMixin || view.features?.cellEdit?.isEditing) {\n return;\n }\n if (eventRecord.startDate && eventRecord.endDate &&\n !DateHelper.intersectSpans(\n startDate,\n endDate,\n view.startDate,\n view.endDate)) {\n client.date = eventRecord.startDate;\n }\n // If we've created in a DayView, and we are editing an inter day event, the responsible\n // view is the DayView's alldayEvents row **if there is one, and it's being used**.\n if (view.allDayEvents && view.isAllDayEvent(eventRecord) && view.showAllDayHeader) {\n view = view.allDayEvents;\n }\n // Occurrences are *never* added to the eventStore, but any other event being edited,\n // make sure it's in and set the `isCreating` flag to show the Cancel UI.\n if (!eventRecord.isOccurrence) {\n let added;\n if (!eventStore.includes(eventRecord)) {\n eventStore.add(eventRecord);\n added = true;\n }\n if (added || eventRecord._dragCreated) {\n // We need the view to contain the event's element, not the drag-create proxy.\n // So wait for refresh for a max of 100ms, if the refresh has not triggered, force the issue.\n await view.afterRefresh({ forceRefresh : true });\n }\n }\n // Special handling if editing from an overflow popup\n const\n { _overflowPopup } = view,\n activeDate = view.getDateFromElement(element);\n // Get the element for the date into which the element was rendered.\n // AgendaView can render multiple elements for day-spanning events\n // so we must attach to the correct one.\n let fromOverflow = _overflowPopup?.isVisible,\n eventElement = fromOverflow ? _overflowPopup.getEventElement(eventRecord) : view.getEventElement(eventRecord, activeDate);\n if (fromOverflow) {\n if (eventElement) {\n fromOverflow = false;\n }\n else {\n eventElement = _overflowPopup.getEventElement(eventRecord);\n }\n }\n // Call Calendar template method\n if (eventRecord.isCreating) {\n client.onEventCreated?.(eventRecord);\n }\n // If called from eventlist\n if (!eventElement && view.isEventList) {\n eventElement = view?.rowManager?.getRowFor(eventRecord)?.element;\n }\n // This flag is meant to prevent scrolling the element into the view if we dragcreate event and scroll the\n // view in the process. If we're creating event, then check if event was already added. If event was not\n // created allow scrolling - we haven't dragcreated event and should try to scroll to the element\n const scrollingAllowed = (eventElement && !DomHelper.isInView(eventElement)) || !eventRecord.isCreating || !eventRecord._dragCreated;\n // If editing triggered from overflow popup, ensure that the eventElement is focused.\n if (fromOverflow) {\n eventElement.focus();\n }\n else if (eventElement) {\n if (scrollingAllowed) {\n // If we found a rendered element, ensure the top 100 px and full width is visible in all\n // scroll viewports.\n // Sometimes there are two encapsulating scroll elements, one for horizontal\n // and one for vertical. For example ResourceView with multiple dayViews.\n // Static scrollIntoView searches all ancestors.\n await Scroller.scrollIntoView(eventElement, {\n animate : true,\n focus : true,\n maxHeight : 100\n });\n }\n else {\n eventElement.focus({ preventScroll : true });\n }\n }\n // If no element found, then we have to ask the view to navigate in time to encompass that event\n else {\n // If it's a single day event on a hidden, non-working day, show it centered.\n // align : { target : true } means centered.\n if (!view.isAllDayEvent(eventRecord) && (!startDate || view.hiddenNonWorkingDays[startDate.getDay()])) {\n me.internalShowEditor(eventRecord, null, {\n target : true\n });\n return;\n }\n if (startDate && scrollingAllowed) {\n // Ensure we have an in-view element to align to - data change response is async.\n // scrollTo refreshes if the element is not present\n await view.scrollTo(eventRecord);\n }\n // scrollTo might have to refresh to create the target.\n eventElement = view.getEventElement(eventRecord);\n }\n // If event element is missing and we render days (month, year), try to align editor to the date\n if (!eventElement && !element && view.isDayCellRenderer) {\n eventElement = view.getCell(eventRecord.startDate);\n }\n me.internalShowEditor(eventRecord, null, {\n target : eventElement || element,\n allowTargetOut : view.isAnimating\n });\n // Only on first show do we ignore clipping.\n // If target is scrolled out of view, editor must hide.\n if (me.editor?.lastAlignSpec) {\n me.editor.lastAlignSpec.allowTargetOut = false;\n }\n }\n async onSaveClick() {\n const\n me = this,\n { eventRecord } = me,\n { isCreating } = eventRecord.meta;\n if (me.isValid) {\n eventRecord.isCreating = false;\n }\n // So that resetting editing context doesn't remove the record\n const saved = await super.onSaveClick(...arguments);\n if (isCreating && saved) {\n me.eventStore.added.add(eventRecord);\n if (!me.eventStore.usesSingleAssignment) {\n me.assignmentStore.added.add(eventRecord.assignments);\n }\n if (me.client.crudManager?.autoSync) {\n me.client.crudManager.scheduleAutoSync();\n }\n }\n }\n internalShowEditor() {\n const\n {\n client,\n editor,\n startTimeField,\n endTimeField\n } = this,\n calendar = client.closest(isCalendar) || client,\n autoCreate = calendar.activeView?.autoCreate ?? (calendar.autoCreate || client.constructor.configurable.autoCreate),\n step = autoCreate?.step,\n { activeSubView } = calendar,\n _overflowPopup = activeSubView?._overflowPopup;\n // In case the tooltip is visible, we must hide it.\n // This reverts focus so that we pick up focusIn from the event.\n (client.isSchedulerBase ? client.calendar : client).features.eventTooltip?._tooltip?.hide();\n // Always hook the closest owning widget as our owner because there may be intervening\n // focused widgets between the Calendar (our default), and us.\n // For example, the all day row of a DayView may show an OverflowPopup. We have\n // to be owned by the OverflowPopup so that our owner chain is correct.\n editor.owner = _overflowPopup?.isVisible ? _overflowPopup : activeSubView;\n if (super.internalShowEditor(...arguments) === false) {\n // Editing was vetoed\n editor.owner = editor.initialConfig.owner;\n return;\n }\n if (step) {\n startTimeField && (startTimeField.step = step);\n endTimeField && (endTimeField.step = step);\n }\n }\n // calendar drag/auto create is different enough from scheduler's, so we just override this method\n // to empty function to opt-out of the STM capture mechanism\n async finalizeStmCapture(saved) {\n }\n}\n// Register this feature type with its Factory\nCalendarFeature.register(EventEdit.type, EventEdit);\nEventEdit._$name = 'EventEdit';", "import CalendarFeature from './CalendarFeature.js';\nimport SchedulerEventMenu from '../../Scheduler/feature/EventMenu.js';\n/**\n * @module Calendar/feature/EventMenu\n */\nconst hasEventStore = w => w.eventStore;\n/**\n * A feature which shows a context menu when right-clicking events in the calendar.\n *\n * There are three predefined {@link #config-items} provided by default:\n *\n * - `deleteEvent` Delete the event clicked upon.\n * - `editEvent` Edit the event clicked upon __Only present if the {@link Calendar.feature.EventEdit}\n * feature is present__ (which it is by default).\n * - `duplicate` Duplicate the event clicked upon with the same time and duration, the same\n * resource(s) assigned and a slightly edited name - `\" (copy)\"`.\n *\n * {@inlineexample Calendar/feature/EventMenu.js}\n *\n * The {@link #config-items} set can be reconfigured by providing an `items` property to this feature:\n *```javascript\n * const calendar = new Calendar({\n * features : {\n * eventMenu : {\n * items : {\n * // Removes the predefined deleteEvent item\n * deleteEvent : null,\n *\n * // Add our own custom item\n * postpone : {\n * text : 'Postpone 1h',\n * weight : 300,\n * icon : 'b-fa b-fa-fw b-fa-arrow-down',\n * onItem({ item, eventRecord }) {\n * eventRecord.shift(1, 'h');\n * }\n * }\n * }\n * }\n * }\n * });\n *```\n *\n * Items may also be reconfigured dynamically at run time:\n *\n * ```javascript\n * const calendar = new Calendar({\n * features : {\n * eventMenu : {\n * // Process items before menu is shown\n * processItems({eventRecord, items}) {\n * // Push an extra item for conferences\n * if (eventRecord.type === 'conference') {\n * items.showSessionItem = {\n * text : 'Show sessions',\n * onItem({eventRecord}) {\n * // ...\n * }\n * };\n * }\n *\n * // Do not show menu for secret events\n * if (eventRecord.type === 'secret') {\n * return false;\n * }\n * }\n * }\n * }\n * });\n * ```\n *\n * {@note}The `processItems` implementation may be an `async` function which `awaits` a result to mutate the `items`\n * object.\n *\n * This feature is **enabled** by default.\n *\n * @demo Calendar/custom-menus\n * @extends Scheduler/feature/EventMenu\n * @classtype eventMenu\n * @feature\n *\n * @typings Scheduler.feature.EventMenu -> Scheduler.feature.SchedulerEventMenu\n */\nexport default class EventMenu extends SchedulerEventMenu {\n static get $name() {\n return 'EventMenu';\n }\n static get type() {\n return 'eventMenu';\n }\n static configurable = {\n /**\n * This is a preconfigured set of items used to create the default context menu. The default options are\n * listed at the top of the page.\n *\n * To remove existing items, set corresponding keys `null`:\n *\n * ```javascript\n * const calendar = new Calendar({\n * features : {\n * eventMenu : {\n * items : {\n * deleteEvent : null,\n * duplicate : null\n * }\n * }\n * }\n * });\n * ```\n *\n * See the feature config in the above example for more details.\n *\n * @config {Object} items\n */\n items : {\n duplicate : {\n text : 'L{EventMenu.duplicateEvent}',\n icon : 'b-icon b-icon-copy',\n weight : 400,\n onItem({ eventRecord }) {\n const\n dupe = eventRecord.copy(null, { skipFieldIdentifiers : true }),\n { eventStore } = this.up(hasEventStore),\n { resources } = eventRecord;\n // Make a new name\n dupe.name = `${eventRecord.name} (${this.L('copy')})`;\n // In case it was a recurring event, the dupe will be a one-off.\n dupe.recurrence = null;\n // Dupe has same assignments initially handle usesSingleAssign as well as multiassign.\n // If an event without a resource is duplicated\n if (resources?.length) {\n eventStore.assignmentStore.assignEventToResource(dupe, resources);\n }\n eventStore.add(dupe);\n }\n }\n }\n };\n // Superclass registers this as a chained function.\n populateEventMenu({ items, eventRecord, assignmentRecord }) {\n super.populateEventMenu(...arguments);\n const { client } = this;\n // Hide the duplicate\n items.duplicate = {\n disabled : eventRecord.readOnly || assignmentRecord?.readOnly,\n hidden : client.readOnly\n };\n }\n getDataFromEvent(event) {\n const\n { client } = this,\n { activeView } = client;\n // Base class is SchedulerEventMenu\n if (activeView.isScheduler) {\n this.client = activeView;\n }\n else {\n // Contextual event must be focused.\n event.target.closest('.b-cal-event-wrap')?.focus();\n }\n const result = super.getDataFromEvent(event);\n this.client = client;\n return result;\n }\n changeMenu() {\n const\n me = this,\n result = super.changeMenu(...arguments);\n // Set the owner to be the currently active view (or its active OverflowPopup)\n // so that focus stays in that view's ownership tree.\n result?.ion({\n beforeShow({ source }) {\n const\n { activeSubView } = me.client,\n { _overflowPopup } = activeSubView;\n source.owner = _overflowPopup?.containsFocus ? _overflowPopup : activeSubView;\n }\n });\n return result;\n }\n changeItems(items) {\n items = super.changeItems(...arguments);\n // UnassignEvent is not valid where there is no contextual resource as there is in Scheduler where\n // the row denotes the contextual resource\n items.unassignEvent = null;\n return items;\n }\n}\n// Register this feature type with its Factory\nCalendarFeature.register(EventMenu.type, EventMenu);\nEventMenu._$name = 'EventMenu';", "import CalendarFeature from './CalendarFeature.js';\nimport Widget from '../../Core/widget/Widget.js';\nimport EventTip from '../widget/EventTip.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\nimport { parseAlign } from '../../Core/helper/util/Rectangle.js';\nimport '../../Scheduler/view/recurrence/RecurrenceConfirmationPopup.js';\n/**\n * @module Calendar/feature/EventTooltip\n */\nconst\n hasEventStore = w => w.eventStore,\n ownConfigs = [\n 'activeElement',\n 'client',\n 'clientListeners',\n 'disabled',\n 'showOn',\n 'tooltip'\n ];\n/**\n * A feature which displays a {@link #config-tooltip} containing extra information. The tooltip can\n * be triggered by clicking or hovering an event bar element (see {@link #config-showOn}).\n *\n * Configuration options from this feature are used to configure the {@link Calendar.widget.EventTip}\n * instance:\n *\n * ```javascript\n * new Calendar({\n * features : {\n * eventTooltip : {\n * tools : {\n * // Do not show the Delete tool in the tooltip header\n * delete : false,\n * // Add a new tool for our own operation\n * newTool : {\n * cls : 'b-icon-add',\n * tooltip : 'Test',\n * handler() {\n * console.log(`Test ${this.eventRecord.name}`);\n * }\n * }\n * },\n * renderer({ eventRecord }) {\n * return {\n * text : `From ${DateHelper.format(eventRecord.startDate, 'l')} to ${DateHelper.format(eventRecord.endDate, 'l')}`\n * },\n * },\n * titleRenderer( eventRecord ) {\n * return {\n * text : `${eventRecord.name} ${eventRecord.resource.name}`,\n * className : {\n * 'b-urgent' : eventRecord.isUrgent,\n * 'b-completed' : eventRecord.isCompleted\n * }\n * };\n * }\n * }\n * }\n * })\n * ```\n *\n * You can hide tools conditionally:\n * ```javascript\n * new Calendar({\n * features : {\n * eventTooltip : {\n * listeners : {\n * beforeShow({ source }) {\n * source.tools.delete = false;\n * }\n * }\n * }\n * }\n * })\n * ```\n *\n * This feature is **enabled** by default.\n *\n * {@inlineexample Calendar/feature/EventTooltip.js}\n *\n * @demo Calendar/tooltips\n *\n * @extends Calendar/feature/CalendarFeature\n * @classtype eventTooltip\n * @feature\n *\n * @typings Scheduler.feature.EventTooltip -> Scheduler.feature.SchedulerEventTooltip\n */\nexport default class EventTooltip extends CalendarFeature {\n static get $name() {\n return 'EventTooltip';\n }\n static get type() {\n return 'eventTooltip';\n }\n static get configurable() {\n return {\n /**\n * The gesture which activates the event tooltip. Defaults to `'click'`, but may be set to\n * `'contextmenu'` or `'mouseover`'. The tip persists until closed.\n *\n * If set to `'hover'`, the tip shows on mouseover and hides on mouseout.\n *\n * If set to `'contextmenu'`, the tip shows at the mouse/touch contact point, otherwise\n * it aligns to the target event bar.\n * @config {'click'|'contextmenu'|'mouseover'|'hover'}\n * @default\n */\n showOn : 'click',\n closable : true,\n // Allow it to fall back from its initial alignment axis to the cross axis.\n // So if aligned l-r or r-l and shown by a long multiday event, it allows\n // itself to be fall back to being aligned t-b\n axisLock : 'flexible',\n /**\n * Gets the Tooltip instance that this feature is using.\n * @member {Calendar.widget.EventTip} tooltip\n * @readonly\n */\n /**\n * This config is used to directly configure the associated {@link Calendar.widget.EventTip tooltip}.\n * @config {Calendar.widget.EventTip}\n */\n tooltip : {\n $config : ['lazy', 'nullify'],\n value : {\n type : 'eventTip'\n }\n },\n /**\n * A function, or the *name* of a function which, when passed the active\n * {@link Scheduler.model.EventModel}, returns a value to use as the tooltip's\n * {@link Core.widget.Panel#config-title}.\n *\n * The function may return either an HTML string, or a {@link DomConfig} object.\n * _Defaults to using the event `name`_\n *\n * @config {Function|String}\n * @param {Scheduler.model.EventModel} record Event record\n * @returns {String|DomConfig}\n */\n titleRenderer : eventRecord => StringHelper.encodeHtml(eventRecord.name),\n /**\n * A function, or the *name* of a function called to update the tooltip's content when the\n * cursor is moved over a target.\n *\n * It receives one argument containing context about the tooltip and show operation.\n * The function may return either an HTML string, or a {@link DomConfig} object, or\n * a Promise yielding one of these.\n *\n * ```javascript\n * new Calendar({\n * features : {\n * eventTooltip : {\n * renderer : 'up.getEventTip'\n * }\n * },\n * getEventTip({ eventRecord }) {\n * return {\n * className : 'tooltip-content',\n * text : eventRecord.name\n * }\n * }\n * });\n * ```\n *\n * or\n *\n * ```javascript\n * new Calendar({\n * features : {\n * eventTooltip : {\n * renderer : 'up.getEventTip'\n * }\n * },\n * getEventTip({ eventRecord }) {\n * return '
+ eventRecord.name + '
';\n * }\n * });\n * ```\n *\n * or\n *\n * ```javascript\n * new Calendar({\n * features : {\n * eventTooltip : {\n * renderer : 'up.getEventTip'\n * }\n * },\n * getEventTip : async function({ eventRecord }) {\n * // Use a web service which returns a JSON DomConfig block\n * const response = await fetch(`getEventTipContent?event=${eventRecord.id}`);\n * return response.json();\n * }\n * });\n * ```\n *\n * @config {Function|String}\n * @param {Object} context\n * @param {Scheduler.model.EventModel} context.eventRecord The event record which the tooltip is being shown for.\n * @param {Core.widget.Tooltip} context.tip The tooltip instance\n * @param {HTMLElement} context.element The Element for which the Tooltip is monitoring mouse movement\n * @param {HTMLElement} context.activeTarget The target element that triggered the show\n * @param {Event} context.event The raw DOM event\n * @returns {String|Promise|DomConfig}\n */\n renderer : null,\n /**\n * This config is used to directly configure the associated recurrence confirmation popup used\n * when a delete is requested.\n * @config {RecurrenceConfirmationPopupConfig}\n * @private\n */\n recurrenceConfirmation : {\n $config : ['lazy', 'nullify'],\n value : {\n type : 'recurrenceconfirmation'\n }\n },\n /**\n * By default, the end date of an all day event is displayed in the tooltip UI as\n * the last calendar date on which the event falls. For most end users, this is the\n * expected value.\n *\n * Technically, the {@link Scheduler.model.EventModel#field-endDate} is a timestamp\n * which represents the exact point in time at which an event ends. To use this instead,\n * configure `extendAllDayEndDay` as `true`.\n *\n * To be clear, this would mean that an {@link Scheduler.model.EventModel#field-allDay}\n * event starting and ending on the 7th of February 2020, would show the end date in the\n * tooltip as 8th of February 2020.\n * @config {Boolean}\n * @default false\n */\n extendAllDayEndDay : null,\n /**\n * Defines how to align the EventTooltip to its event.\n *\n * The value can be either a simple string or a full configuration object.\n *\n * When using a simple string, the format is `'[trblc]n-[trblc]n'` and it specifies tooltip edge and\n * the event edge plus optional offsets from 0 to 100 along the edges to align to. Also supports direction\n * independent edges horizontally, `s` for start and `e` for end (maps to `l` and `r` for LTR, `r` and `l`\n * for RTL).\n *\n * For more details about using the object form, see {@link Core.widget.Widget#function-showBy}.\n *\n * Once set, this is stored internally in object form.\n * @config {AlignSpec|String} align\n * @default 't-b'\n */\n align : null,\n /**\n * By default, if the tip's target event is in a cluster of overlapping events and therefore\n * narrow, activating the tip will expand it to full width temporarily.\n *\n * Configure this as `false` to disable this.\n * @prp {Boolean}\n * @default true\n */\n revealEventsInCluster : true,\n resources : null\n };\n }\n static get pluginConfig() {\n return {\n chain : ['render']\n };\n }\n // Because we insert ourself into the owner hierarchy, isVisible consults us\n get isVisible() {\n return true;\n }\n changeRecurrenceConfirmation(recurrenceConfirmation, existingInstance) {\n if (recurrenceConfirmation) {\n recurrenceConfirmation.rootElement = this.owner.rootElement;\n }\n return Widget.reconfigure(existingInstance, recurrenceConfirmation, {\n owner : this\n });\n }\n changeTooltip(config, existingInstance) {\n return Widget.reconfigure(existingInstance, config, {\n owner : this,\n setup : 'setupTooltip'\n });\n }\n setupTooltip(config) {\n const\n me = this,\n cfg = me.config;\n // Copy appropriate configs from this Feature into the tooltip.\n // We only pass them in if there are valid configs for this class, or they were in our configuration.\n Object.keys(cfg).forEach(k => {\n if (!ownConfigs[k] && (me.hasConfig(k) || (k in me.initialConfig))) {\n config[k] = cfg[k];\n }\n });\n return EventTip.mergeConfigs({\n ownerFeature : me,\n forElement : me.client.element,\n id : `${me.client.id}-event-tip`,\n // The Tooltip must activate on embedded widgets from other product families\n forSelector : me.showOn === 'hover' && '.b-cal-event-wrap,.b-sch-event-wrap,.b-gantt-task-wrap,.b-taskboard-card',\n resources : me.resources,\n disabled : me.disabled,\n internalListeners : {\n thisObj : me,\n delete : 'onDeleteClick',\n edit : 'onEditClick',\n pointerOver : 'onTipPointerOver'\n }\n }, config);\n }\n render() {\n const\n me = this,\n clientListeners = {\n eventsPerCellChange : 'onClientEventsPerCellChange',\n navigate : 'onClientNavigate',\n renderEvents : 'onRenderEvents',\n thisObj : me\n };\n if (me.showOn === 'hover') {\n // The tooltip needs to exist to take care of its own show/hide lifecycle if\n // we are configured to use the hover gesture.\n me.getConfig('tooltip');\n }\n else {\n // Some embedded widget from other product families use 'taskClick'\n clientListeners[`event${me.showOn}`] = clientListeners[`task${me.showOn}`] = 'onClientTooltipGesture';\n }\n me.client.ion(clientListeners);\n }\n get owner() {\n if (this.client.activeView._overflowPopup?.containsFocus) {\n return this.client.activeView.overflowPopup;\n }\n else {\n return this.client;\n }\n }\n //region Events\n addListener(...args) {\n // Add listener to the `tooltip` instance\n this.tooltip?.addListener(...args);\n }\n removeListener(...args) {\n // Remove listener from the `tooltip` instance\n this.tooltip?.removeListener(...args);\n }\n onEditClick() {\n const\n { client, activeClient, tooltip } = this,\n { overflowPopup } = activeClient,\n eventEdit = activeClient?.features?.eventEdit || client.features.eventEdit,\n fromPopup = overflowPopup?.element?.contains(tooltip.activeTarget),\n target = fromPopup ? overflowPopup.targetCell : tooltip.activeTarget;\n if (eventEdit && !eventEdit.disabled) {\n eventEdit.editEvent(this.eventRecord, null, target, false);\n tooltip.hide();\n }\n }\n onDeleteClick() {\n this.activeClient.calendar.removeEvents([this.eventRecord], () => this.tooltip?.hide(), this.tooltip);\n }\n onClientEventsPerCellChange() {\n // Overflow popup hides on this, so we must hide too.\n // Access the property directly so as not to create the tooltip.\n // We got here through a ResizeObserver so we must allow the notification to reach the\n // overflow popup before it hides to avoid the nonsensically fatal\n // \"ResizeObserver loop completed with undelivered notifications\" on FF.\n // Delayable.requestAnimationFrame uses itself as the thisObj,\n // so using the function reference will work.\n this._tooltip?.requestAnimationFrame(this._tooltip?.hide);\n }\n onClientNavigate(navEvent) {\n // Access the property directly so as not to create the tooltip\n const { _tooltip } = this;\n // If we are exiting the calendar or navigating to a new item that is not in the tooltip, hide the tooltip\n if (_tooltip?.activeTarget && (!this.owner.owns(navEvent.event) || (navEvent.item && navEvent.item !== _tooltip.activeTarget)) && !_tooltip.owns(navEvent.event?.relatedTarget)) {\n _tooltip.hide();\n }\n }\n onRenderEvents(e) {\n const { _tooltip } = this;\n // If the target element is no longer part of the activating view, hide the tooltip\n if (_tooltip?.activeTarget && !this.activeClient.element.contains(this.tooltip.activeTarget)) {\n _tooltip.hide();\n }\n }\n onClientTooltipGesture({ domEvent, event, eventElement, eventRecord, source : owningCalendarWidget }) {\n const { tooltip } = this;\n // Foreign objects (like a Scheduler) may not use \"domEvent\", so fallback to \"event\" if necessary:\n domEvent = domEvent || event;\n // Pass already known parts from the Widget gesture into onTipPointerOver\n if (this.onTipPointerOver({ event : domEvent, target : eventElement, eventRecord, owningCalendarWidget }) !== false) {\n // If the event is part of a cluster (overlaps others, and will expand)\n // and tooltip is aligned to the side, then delay the show to avoid a realign after expand.\n if (eventElement.classList.contains('b-cal-in-cluster') && parseAlign(tooltip.align.align).edgeAligned === 2) {\n tooltip.setTimeout({\n fn : 'showByEvent',\n args : [domEvent, eventElement],\n delay : 130\n });\n }\n else {\n // Handle products where the eventElement is passed as the \"inner\" instead of the wrap\n tooltip.showByEvent(domEvent, eventElement.closest('[data-event-id],[data-task-id]'));\n }\n }\n }\n onTipPointerOver({\n event,\n target,\n owningCalendarWidget,\n eventRecord\n }) {\n const { tooltip, client } = this;\n if (!owningCalendarWidget) {\n owningCalendarWidget = Widget.fromElement(target)?.closest(hasEventStore);\n }\n if (!eventRecord) {\n eventRecord = owningCalendarWidget.getEventRecord(target);\n }\n if (client.features?.eventEdit?.isEditing || client.activeView.features?.cellEdit?.isEditing) {\n return false;\n }\n // Embedded views from other products may be showing their own editors\n if (client.floatRoot.querySelector('.b-eventeditor,.b-taskeditor')) {\n return false;\n }\n if (owningCalendarWidget) {\n tooltip.triggeredByEvent = event;\n tooltip.activeTarget = target;\n this.activeClient = owningCalendarWidget;\n eventRecord = owningCalendarWidget.getEventRecord(target);\n /**\n * The event which the tooltip feature has been activated for.\n * @member {Scheduler.model.EventModel} eventRecord\n * @readonly\n */\n tooltip.eventRecord = this.eventRecord = eventRecord;\n }\n return eventRecord != null;\n }\n //endregion\n //region Internal\n updateDisabled(disabled, was) {\n super.updateDisabled(disabled, was);\n if (this._tooltip) {\n this._tooltip.disabled = disabled;\n }\n }\n //endregion\n}\n// Register this feature type with its Factory\nEventTooltip.initClass();\nEventTooltip._$name = 'EventTooltip';", "import Base from '../../Core/Base.js';\nimport CalendarFeature from './CalendarFeature.js';\nimport Draggable from '../../Core/mixin/Draggable.js';\nimport Droppable from '../../Core/mixin/Droppable.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport EventHelper from '../../Core/helper/EventHelper.js';\nimport Rectangle from '../../Core/helper/util/Rectangle.js';\nimport Delayable from '../../Core/mixin/Delayable.js';\nimport Widget from '../../Core/widget/Widget.js';\n/**\n * @module Calendar/feature/ExternalEventSource\n */\nconst oneHour = {\n magnitude : 1,\n unit : 'hour'\n};\nclass ExternalZone extends Base.mixin(Draggable, Droppable) {\n static get $name() {\n return 'ExternalZone';\n }\n static get configurable() {\n return {\n // Default to dragging grid rows\n dragItemSelector : '.b-grid-row',\n dragProxy : {\n type : 'default',\n open(drag) {\n // Use the Feature's openProxy\n const\n feature = this.owner.owner,\n proxyEl = feature.openProxy(drag);\n drag.cleaners.push(() => {\n feature.insertionPoint = null;\n proxyEl.remove();\n });\n return proxyEl;\n },\n dragMove(drag) {\n // Use the Feature's moveProxy\n return this.owner.owner.moveProxy(drag);\n },\n close() {\n this.owner.owner.proxyEl?.remove();\n }\n }\n };\n }\n beforeDrag(drag) {\n return this.owner.onDragStart(drag);\n }\n dragEnter(drag) {\n if (drag.source.isMoving) {\n drag.element = drag.targetElement;\n this.dragProxy.open(drag);\n }\n }\n dragMove(drag) {\n if (drag.source.isMoving) {\n this.dragProxy.dragMove(drag);\n }\n if (drag.source.isMoving || drag.source.isExternalZone) {\n return this.owner.onDragMove(drag);\n }\n }\n dragDrop(drag) {\n if (drag.source.isMoving) {\n this.dragProxy.close();\n }\n // Only react if we're dropping on our own ExternalZone.\n // If dropping on the Calendar, we listen to its beforeDragMoveEnd and dragMoveEnd events\n if (drag.target === this && (drag.source.isMoving || drag.source.isExternalZone)) {\n return this.owner.onDragDrop(drag);\n }\n }\n}\n/**\n * A Calendar feature which allows new events to be dragged into the Calendar from an external source.\n *\n * The default source type is a Bryntum {@link Grid.view.Grid grid} which is loaded with\n * {@link Scheduler.model.EventModel event records}.\n *\n * Optionally, the source can be specified by configuring a {@link #config-dragRootElement}\n * and a {@link #config-dragItemSelector} which together, identify elements which represent\n * draggable events.\n *\n * In this case, a {@link #config-getRecordFromElement} may be specified to yield the details of\n * the record to be dragged.\n *\n * In the simplest case the `textContent` of the identified element is used as the event name and\n * {@link #config-getRecordFromElement} is not required. The event duration in this case will be\n * that specified in the receiving Calendar's {@link Calendar.view.Calendar#config-autoCreate} setting.\n *\n * When dropping an unscheduled event (An event that has no start and end date specified) into\n * a day cell (For example a MonthView or YearView), the start *time* set within the day cell\n * will default to the `startHour` property of the receiving Calendar's {@link Calendar.view.Calendar#config-autoCreate} setting.\n *\n * This feature is **disabled** by default.\n *\n * {@inlineexample Calendar/feature/ExternalEventSource.js}\n *\n * @demo Calendar/dragfromgrid\n *\n * @extends Calendar/feature/CalendarFeature\n * @classtype externalEventSource\n * @feature\n */\nexport default class ExternalEventSource extends CalendarFeature.mixin(Delayable) {\n static get $name() {\n return 'ExternalEventSource';\n }\n static get delayable() {\n return {\n onCalendarPaint : 'raf'\n };\n }\n static get type() {\n return 'externalEventSource';\n }\n static get configurable() {\n return {\n /**\n * The grid, or `id` of a grid from which events are to be dragged.\n * @config {Grid.view.Grid|String}\n */\n grid : {\n $config : ['lazy'],\n value : null\n },\n /**\n * If not dragging from a grid, which is the default mode, then an element from which\n * dragging can take place must be supplied in the `dragRootElement` config.\n *\n * May also be specified as a selector which matches a unique element, or a simple element id.\n *\n * In this case a {@link #config-dragItemSelector} string, and {@link #config-getRecordFromElement}\n * function must be supplied to allow event records to be sourced from the element, for example:\n *\n * ```javascript\n * features : {\n * externalEventSource : {\n * dragRootElement : '#mySourceElementId',\n * dragItemSelector : '.my-item-class'\n * }\n * }```\n * @config {HTMLElement|String}\n */\n dragRootElement : null,\n /**\n * If not dragging from a grid, which is the default mode, then a selector which identifies\n * draggable elements within the {@link #config-dragRootElement}.\n *\n * In the simplest case, the identified element may contain simply a string which is used\n * as the event name, for example:\n *\n * ```javascript\n * features : {\n * externalEventSource : {\n * dragRootElement : '#mySourceElementId',\n * dragItemSelector : '.my-item-class'\n * }\n * }```\n * @config {String}\n */\n dragItemSelector : null,\n /**\n * If not dragging from a grid, which is the default mode, then a function which returns\n * an event record to drag from a passed element must be supplied.\n *\n * In this case a {@link #config-dragRootElement} and a {@link #config-dragItemSelector} string\n * may be supplied to allow event records to be sourced from the element.\n *\n * If the element identified by the {@link #config-dragItemSelector} just contains an event\n * name to create, this configuration is optional. A new event will be created by that name, for example:\n *\n * ```javascript\n * features : {\n * externalEventSource : {\n * dragRootElement : '#mySourceElementId',\n * dragItemSelector : '.my-item-class',\n * getRecordFromElement(element) {\n * // Return an object from which an EventModel can be created.\n * // Same format as loading an EventStore. { name : 'name', startDate: ''} etc\n * return myController.createRecordFromElement(element);\n * }\n * }\n * }```\n *\n * @config {Function|String}\n * @param {HTMLElement} element HTML element\n * @returns {Scheduler.model.EventModel|null}\n */\n getRecordFromElement : function(element) {\n const grid = this.grid || (this.grid = Widget.fromElement(element, 'grid'));\n if (grid) {\n return grid.getRecordFromElement(element);\n }\n // The simplest implementation is that the elements identified by\n // the selector yield the event name.\n return element.innerText;\n },\n /**\n * By default, the proxy shown when \"picking up\" the grid row is hidden\n * when dragging over the calendar because the {@link Calendar.feature.CalendarDrag}\n * feature automatically shows a drop position indicator which shows where the\n * proposed new event will be.\n * @config {Boolean}\n * @default\n */\n hideExternalProxy : true,\n /**\n * An object which overrides or augments the default configuration for the\n * {@link Core.mixin.Draggable} which handles picking up events.\n *\n * This is only necessary if there is no {@link #config-grid} specified.\n * @config {Object} [draggable]\n * @default\n */\n draggable : {\n $config : ['lazy'],\n value : {}\n },\n /**\n * An object which, if present, causes creation of a {@link Core.mixin.Droppable} which\n * handles dropping events *from* the Calendar into the external location.\n *\n * In the simplest configuration, configure this as `true`.\n *\n * __Important:__ when dropping on an external source, the record is _not_ removed\n * from the Calendar's `eventStore`. You will need to listen for the {@link #event-dropExternal} event.\n * @config {Object|Boolean} [droppable]\n * @default\n */\n droppable : {\n $config : ['lazy'],\n value : null\n },\n /**\n * Used when {@link #config-droppable} is used, and the external source is a Grid. This\n * allows us to track the over row to highlight the insertion point.\n * @private\n */\n insertionPoint : null\n };\n }\n // This is deferred to the next AF to allow the configured grid ID to be available\n onCalendarPaint({ source : calendar, firstPaint }) {\n // Ingestion of Draggable, and within that, grid is deferred until the host Calendar is painted\n if (firstPaint) {\n const {\n draggable = {},\n droppable = {}\n } = this,\n zone = new ExternalZone({\n view : this.grid,\n ...draggable,\n ...droppable\n });\n if (this._draggable) {\n this._draggable = zone;\n }\n if (this._droppable) {\n this._droppable = zone;\n }\n }\n // We neede to hook into the CalendarDrag's move ending events which are fired through the client.\n // We need to get in at that point so that we can veto the \"before\" event and fire our own\n // completion event after the event transfer has been completed.\n calendar.ion({\n beforeDragMoveEnd : 'onBeforeDragMoveEnd',\n dragMoveEnd : 'onDragMoveEnd',\n thisObj : this\n });\n }\n onBeforeDragMoveEnd({ drag }) {\n // A before drop on the Calendar. We only react if it is in fact an external drop.\n if (drag.source === this.draggable) {\n drag.dropOnCalendar = true;\n const\n gridStore = this.grid?.store,\n result = this.client.trigger('dropExternal', drag);\n // Handler may change state. If a chained store, it may need refilling\n gridStore?.isChained && gridStore.fillFromMaster();\n return result;\n }\n }\n onDragMoveEnd({ drag }) {\n // An after drop on the Calendar. We only react if it is in fact an external drop.\n if (drag.source === this.draggable) {\n return this.client.trigger('afterDropExternal', drag);\n }\n }\n onDragStart(drag) {\n const\n me = this,\n {\n client,\n grid\n } = me,\n { eventStore } = client,\n { modelClass } = eventStore;\n // If mousedown was not on our Draggable's dragItemSelector, veto drag start\n if (!drag.itemElement) {\n return false;\n }\n let eventRecord = me.callback(me.getRecordFromElement, me, [drag.itemElement]);\n if (eventRecord.isModel) {\n // CalendarDrag interrogates this to see if it should \"removeFromExternalStore\"\n if (grid) {\n drag.set('sourceStore', grid.store);\n }\n if (!eventRecord.isEventModel) {\n eventRecord = eventStore.createRecord(eventRecord.data);\n }\n }\n else {\n if (typeof eventRecord === 'string') {\n const\n autoCreate = client.activeView.autoCreate || client.autoCreate,\n duration = DateHelper.parseDuration(autoCreate?.duration || oneHour);\n eventRecord = {\n [modelClass.getFieldDataSource('name')] : eventRecord,\n [modelClass.getFieldDataSource('duration')] : duration.magnitude,\n [modelClass.getFieldDataSource('durationUnit')] : duration.unit\n };\n }\n eventRecord = eventStore.createRecord(eventRecord);\n }\n drag.set('sourceStore', me.grid?.store);\n drag.set('eventRecord', eventRecord);\n drag.eventRecord = eventRecord;\n }\n onDragMove(drag) {\n const { grid } = this;\n if (grid) {\n const\n row = grid.rowManager.getRowFor(drag.targetElement),\n record = row && grid.store.getAt(row.index);\n // If we over a row, that is *not* the row for the dragging record...\n if (row) {\n const isAbove = drag.lastMoveEvent.clientY < row.getRectangle(Object.keys(grid.subGrids)[0]).center.y;\n drag.overIndex = row.index;\n drag.overRecord = record;\n drag.isAbove = isAbove;\n this.insertionPoint = record === drag.peek('eventRecord') ? {} : { row, isAbove };\n }\n // If not over a row, see if we're dropping in free space after the bottom row (if present)\n // After the headerContainer if no rows present.\n else if (grid.contains(drag.targetElement)) {\n const hcCls = grid.headerContainer.classList;\n drag.overIndex = -1;\n this.insertionPoint = {\n row : grid.rowManager.bottomRow || {\n addCls : c => hcCls.add(c),\n removeCls : c => hcCls.remove(c)\n }\n };\n }\n // We've exited the Grid\n else {\n drag.overIndex = NaN;\n this.insertionPoint = null;\n }\n }\n drag.eventRecord = drag.data.get('eventRecord');\n /**\n * This event is fired on the owning Calendar when dragging an event from the calendar over the\n * external source __if the {@link #config-droppable} was configured__.\n *\n * __If a {@link #config-grid} was configured as the external source, a dropping\n * insertion point will be displayed in the grid__.\n *\n * If the external source is simply a set of HTML elements, your application must\n * process this gesture.\n * @event dragMoveExternal\n * @on-owner\n * @param {Scheduler.model.EventModel} eventRecord The event record being dragged.\n * @param {HTMLElement} itemElement The element in which the drag gesture started.\n * @param {HTMLElement} targetElement The current over element.\n * @param {Event} domEvent The pointer event associated with the drag point.\n * @param {Number} overIndex *If {@link #config-grid} was specified*, the index of the row\n * being moved over;\n * @param {Core.data.Model} overRecord *If {@link #config-grid} was specified*, the record\n * being moved over;\n * @param {Boolean} isAbove *If {@link #config-grid} was specified*, `true` if the pointer\n * position is above the halfway line of the over row.\n * @param {Boolean} altKey `true` if the Alt key was down when the last event was processed.\n * @param {Boolean} ctrlKey `true` if the Ctrl key was down when the last event was processed.\n * @param {Boolean} metaKey `true` if the Meta key was down when the last event was processed.\n * @param {Boolean} shiftKey `true` if the Shift key was down when the last event was processed.\n */\n this.client.trigger('dragMoveExternal', drag);\n }\n changeInsertionPoint(ip, was) {\n if (ip?.row !== was?.row || ip?.isAbove !== was?.isAbove) {\n return ip;\n }\n }\n updateInsertionPoint(ip, was) {\n was?.row?.removeCls(was.isAbove ? 'b-drop-above' : 'b-drop-below');\n ip?.row?.addCls(ip.isAbove ? 'b-drop-above' : 'b-drop-below');\n }\n async onDragDrop(drag) {\n const\n {\n client,\n grid\n } = this,\n { eventStore } = client,\n { eventRecord } = drag,\n gridStore = grid?.store,\n sameStore = gridStore === eventStore || gridStore?.masterStore === eventStore;\n /**\n * This event is fired on the owning Calendar when dropping an event from the calendar on the\n * external source __if the {@link #config-droppable} was configured__. Returning `false`\n * prevents the gesture from being completed.\n *\n * __If a {@link #config-grid} was configured as the external source, the record will be\n * removed from the Calendar's event store and inserted to the grid's store__.\n *\n * If the external source is simply a set of HTML elements, your application must\n * process this gesture.\n * @event dropExternal\n * @preventable\n * @on-owner\n * @param {Scheduler.model.EventModel} eventRecord The event record being dragged.\n * @param {Boolean} dropOnCalendar `true` if the drop gesture is over the client Calendar.\n * This feature also allows drag *out* of the Calendar and onto the external event source\n * if the {@link #config-droppable} config is set.\n * @param {HTMLElement} itemElement The element in which the drag gesture started.\n * @param {HTMLElement} targetElement The current over element.\n * @param {Event} domEvent The pointer event associated with the drag point.\n * @param {Number} overIndex *If {@link #config-grid} was specified*, the index of the row\n * being moved over;\n * @param {Core.data.Model} overRecord *If {@link #config-grid} was specified*, the record\n * being moved over;\n * @param {Boolean} isAbove *If {@link #config-grid} was specified*, `true` if the pointer\n * position is above the halfway line of the over row.\n * @param {Boolean} altKey `true` if the Alt key was down when the last event was processed.\n * @param {Boolean} ctrlKey `true` if the Ctrl key was down when the last event was processed.\n * @param {Boolean} metaKey `true` if the Meta key was down when the last event was processed.\n * @param {Boolean} shiftKey `true` if the Shift key was down when the last event was processed.\n */\n if (client.trigger('dropExternal', drag) === false) {\n // Handler may change state. If a chained store, it may need refilling\n gridStore?.isChained && gridStore.fillFromMaster();\n return;\n }\n // It is a drop on an external Grid\n if (!isNaN(drag.overIndex)) {\n // The event is being dragged out from the Calendar's eventStore\n // and our store is *not* based on the Calendar's eventStore.\n // If the source view is a resource-specific view, this gesture is\n // just a deassign, so only remove if the source view is not resource-specific.\n if (eventStore.includes(eventRecord) && !sameStore && !drag.source.view.resource) {\n eventStore.remove(eventRecord);\n }\n // The source store is chained off the main calendar eventStore.\n // In this case (Assuming the dropExternal handler set the record state to change its\n // filtered in/out status), this is a move event.\n if (sameStore) {\n eventStore.move(eventRecord, eventStore.getAt(drag.overIndex + drag.isAbove ? 1 : 0));\n }\n else {\n gridStore.insert(drag.overIndex + (drag.isAbove ? 0 : 1), eventRecord);\n }\n gridStore?.isChained && gridStore.fillFromMaster();\n }\n client.trigger('afterDropExternal', drag);\n }\n openProxy(drag) {\n const\n { grid } = this,\n sourceEl = drag.element.closest(this.draggable.dragItemSelector) || drag.element,\n nameCell = grid ? sourceEl.querySelector('[data-column=\"name\"]') : sourceEl,\n proxyEl = this.proxyEl || (this.proxyEl = DomHelper.createElement({\n className : 'b-grid-to-cal-drag-proxy'\n }));\n proxyEl.innerHTML = drag.peek('eventRecord')?.name || nameCell?.innerHTML || this.owner.L('newEvent');\n this.proxyOffset = EventHelper.getClientPoint(drag.event).getDelta(Rectangle.from(sourceEl));\n (grid?.element || this.dragRootElement).parentNode.appendChild(proxyEl);\n return proxyEl;\n }\n moveProxy(drag) {\n const { proxyEl } = this;\n if (proxyEl) {\n // Hide the proxy if the target droppable is a Calendar and we are configured to do so\n if (this.client.owns(drag.targetElement) && this.hideExternalProxy) {\n proxyEl.classList.add('b-hide-display');\n }\n else {\n // Align the proxy to [10, 10] from the pointer\n proxyEl.classList.remove('b-hide-display');\n DomHelper.alignTo(proxyEl, EventHelper.getClientPoint(drag.event).translate(10, 10), {\n align : 't0-t0'\n });\n }\n }\n }\n changeDragRootElement(dragRootElement) {\n if (typeof dragRootElement === 'string') {\n dragRootElement = document.querySelector(dragRootElement) || document.getElementById(dragRootElement);\n }\n return dragRootElement;\n }\n changeDraggable(draggable) {\n const\n { grid } = this,\n dragRootElement = grid?.contentElement || this.dragRootElement,\n { dragItemSelector } = this;\n draggable = ExternalEventSource.mergeConfigs({\n owner : this,\n grid\n }, draggable);\n if (dragRootElement) {\n draggable.dragRootElement = dragRootElement;\n }\n if (dragItemSelector) {\n draggable.dragItemSelector = dragItemSelector;\n }\n return draggable;\n }\n changeDroppable(droppable) {\n const\n { grid } = this,\n dropRootElement = grid?.contentElement || this.dropRootElement;\n if (droppable) {\n droppable = ExternalEventSource.mergeConfigs({\n owner : this,\n grid\n }, droppable);\n if (dropRootElement) {\n droppable.dropRootElement = dropRootElement;\n }\n }\n return droppable;\n }\n changeGrid(grid) {\n if (typeof grid === 'string') {\n grid = Widget.getById(grid);\n }\n return grid;\n }\n}\nExternalEventSource.initClass();\nExternalEventSource._$name = 'ExternalEventSource';", "import CalendarFeature from './CalendarFeature.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport MessageDialog from '../../Core/widget/MessageDialog.js';\n/**\n * @module Calendar/feature/LoadOnDemand\n */\n/**\n * Loads the host Calendar's {@link Scheduler.view.mixin.SchedulerStores#config-crudManager CrudManager} on demand\n * as the date range required to produce the UI changes.\n *\n * Passes the requested `startDate` and `endDate` as extra HTTP parameters along with the load request.\n *\n * By default, the HTTP parameters are called `'startDate'` and `'endDate'`. This is configurable using the\n * {@link #config-startDateParamName} and {@link #config-endDateParamName} configs.\n *\n * The date values are formatted according to the {@link #config-dateFormat} config.\n *\n * Usage:\n *\n * ```javascript\n * new Calendar({\n * features : {\n * loadOnDemand : true\n * }\n * });\n * ```\n *\n * ## Using recurring events\n * When using this feature when recurring events are in the database, *all recurring events* which\n * started before the requested start date, and have not yet finished recurring MUST be sent as part\n * of the return packet so that the Calendar is able to populate its UI.\n *\n * Only the base recurring event *definition* is stored in the Calendar's EventStore.\n *\n * When asked to yield a set of events for a certain date range for creating a UI, the EventStore\n * *automatically* interpolates any occurrences of recurring events into the results. They do not\n * occupy slots in the EventStore for every date in their repetition range (that would be very\n * inefficient, and *might* be infinite).\n *\n * ## Handling data load failures\n * If a network or server error is detected, the {@link Calendar.view.Calendar} will fire a\n * {@link #event-loadOnDemandFail} event so that an application can produce an error UI and\n * handle the situation.\n *\n * A handler should return `false` to prevent the default provided error UI from showing.\n *\n * If there is no handler, or the handler __does not__ return `false`, a default error UI is\n * shown using `{@link Core.widget.MessageDialog#function-alert MessageDialog}`.\n *\n * ## Using with `showEvents` in the sidebar date picker.\n * If you have configured the Calendar's {@link Calendar.view.Calendar#config-datePicker} to\n * {@link Calendar.widget.CalendarDatePicker#config-showEvents}, the date picker will also\n * initiate a request whenever it navigates forward or backward in time.\n *\n * This could interfere with the current Calendar `mode`, so in this case, this feature extends\n * the requested date range to include the date range which encapsulates both widgets' required\n * ranges.\n *\n * This __may__ mean that a large block of events could be loaded if the date picker is navigated\n * in time a long way while leaving the Calendar's main view date the same.\n *\n * The {@link #config-alwaysLoadNewRange} property must not be set in this use case because *both*\n * widgets will initiate requests, and this would cause an infinite recursion of event requests.\n *\n * This feature is **disabled** by default.\n *\n * @extends Calendar/feature/CalendarFeature\n * @classtype loadOnDemand\n * @feature\n */\nexport default class LoadOnDemand extends CalendarFeature {\n static $name = 'LoadOnDemand';\n static type = 'loadOnDemand';\n static get configurable() {\n return {\n /**\n * The name of the HTTP parameter which contains the start date of the view requiring new data.\n * @config {String}\n * @default\n */\n startDateParamName : 'startDate',\n /**\n * The name of the HTTP parameter which contains the end date of the view requiring new data.\n * @config {String}\n * @default\n */\n endDateParamName : 'endDate',\n /**\n * The {@link Core.helper.DateHelper#function-format-static DateHelper} format string to use to\n * encode the start date and end date of the events to load when the view requires a new date range.\n * @config {String}\n * @default\n */\n dateFormat : 'YYYY-MM-DD',\n /**\n * A function, or name of a function in the ownership hierarchy which may be called\n * to mutate the `options` packet that is passed to the {@link Scheduler.data.CrudManager}\n * {@link Scheduler.crud.AbstractCrudManagerMixin#function-load} method.\n * One possible use of this function is to mutate the `options.request.params` object to add extra\n * parameters for the server.\n *\n * @config {Function|String}\n * @param {Object} options The `options` parameter to be sent to the {@link Scheduler.data.CrudManager}\n * {@link Scheduler.crud.AbstractCrudManagerMixin#function-load} method.\n * @param {Object} options.dateRangeRequested An object containing the start and end dates of the range to load.\n * @param {Date} options.dateRangeRequested.startDate The start date of the range to request.\n * @param {Date} options.dateRangeRequested.endDate The end date of the range to request. **Note that Dates are timestamps**.\n * @param {Object} options.request A configuration object for the CrudManager load request\n * @param {Object} options.request.params An object where the property name is the HTTP parameter name and the property value is the parameter value.\n * @returns {void}\n */\n beforeRequest : null,\n /**\n * By default, if a view requests a date range that we have already loaded, no\n * network request is made, and the events will be loaded from the current content\n * of the event store.\n *\n * To make the feature load a new event block on every request for a __new__ date range,\n * configure this as `true`.\n * @config {Boolean}\n * @default false\n */\n alwaysLoadNewRange : null,\n /**\n * Configure this as `true` to clear the event store when a new date range has been requested\n * instead of leaving it until the load of the new data to correct the store contents,\n *\n * Setting this to true clears the event store prior to requesting the data load.\n * @config {Boolean}\n * @default false\n */\n clearOnNewRange : null\n };\n }\n construct(config) {\n const { client } = config;\n // The purpose of this feature is to load fresh data, so it should not use syncDataOnLoad.\n // This can be automatically set by framework wrapper, so we must ensure it is false.\n client.eventStore.syncDataOnLoad = false;\n // When the client requests a range of dates from its eventStore, we get notified.\n // If the eventStore has not successfully loaded that range, we load that range.\n client.ion({\n dateRangeRequested : 'onClientDateRangeRequested',\n thisObj : this\n });\n // This to register the date range that the operation just successfully loaded.\n // We register the loaded date range *before* the response is applied so that\n // when UI requests which emanate from the impending application of the new dataset\n // ask for date ranges requests, the range will be detected as already present.\n client.crudManager.ion({\n beforeLoadApply : 'onCrudManagerBeforeApply',\n thisObj : this,\n prio : 9999\n });\n super.construct(...arguments);\n }\n // Tests if the CrudManager has an outstanding load request which would satisfy the passed date range\n hasOutstandingLoadFor(startDate, endDate) {\n const { load } = this.client.crudManager.activeRequests;\n if (load) {\n const otherDateRangeRequested = load.options?.dateRangeRequested;\n // If the outstanding load request encompasses ours, allow it to go through\n // We do not need to do anything.\n if (otherDateRangeRequested && DateHelper.timeSpanContains(\n otherDateRangeRequested.startDate,\n otherDateRangeRequested.endDate,\n startDate,\n endDate\n )) {\n return true;\n }\n }\n }\n // We observe our CrudManager's successful loads and register the date range requested.\n // This is so that when a client dateRangeChange event is encountered, we can only\n // trigger a load if the date range is not already loaded unless alwaysLoadNewRange is set..\n onCrudManagerBeforeApply({ response, options }) {\n // If it was a full load from a mode which doesn't know about this feature such as\n // a Scheduler, that will have requested an unranged load and the last range loaded\n // will be unknown. In this case the next request will *always* trigger a load.\n this.lastRangeLoaded = response.success && options?.dateRangeRequested;\n }\n onClientDateRangeRequested({\n new : {\n startDate,\n endDate\n },\n changed\n }) {\n const\n me = this,\n { client } = me;\n // alwaysLoadNewRange is only valid for responding to *new* date range requests.\n // Otherwise it responds even if the request was satisfied, and an infinite\n // load->refresh->getEvents->rangeRequested->load loop would occur.\n if (!changed && me.alwaysLoadNewRange) {\n return;\n }\n const { lastRangeLoaded } = me;\n // Check for whether we have already loaded the requested range unless we are configured to always load.\n if (lastRangeLoaded && !me.alwaysLoadNewRange) {\n const {\n startDate : lastStartDate,\n endDate : lastEndDate\n } = me.lastRangeLoaded;\n // Our loaded range already contains this range\n if (DateHelper.timeSpanContains(lastStartDate, lastEndDate, startDate, endDate)) {\n return;\n }\n }\n // Setting to clear the store down on range change.\n // Long running events from one month will show up in the next month.\n // Set this to clear the store. Of course the same events will only get loaded again\n // because they are long running and intrude into the new month but\n // this is a cosmetic issue for app developers to choose.\n if (changed) {\n DomHelper.addTemporaryClass(client.element, 'b-notransition', 100, client);\n if (me.clearOnNewRange) {\n client.eventStore.clear(true);\n me.lastRangeLoaded = null;\n }\n }\n if (!me.disabled && !me.hasOutstandingLoadFor(startDate, endDate)) {\n // Register the range that the view needs.\n // All requested date ranged will be merged into one load\n me.loadDateRange(startDate, endDate);\n }\n }\n /**\n * Reloads the currently loaded date range.\n *\n * If your app detects that the data may be stale, or needs to periodically refresh the data,\n * this method may be used to issue a server request to reload the currently loaded date range.\n */\n refresh() {\n const { lastRangeLoaded } = this;\n if (lastRangeLoaded) {\n this.loadDateRange(lastRangeLoaded.startDate, lastRangeLoaded.endDate);\n }\n }\n loadDateRange(startDate, endDate) {\n const\n me = this,\n {\n pendingLoad,\n client\n } = me,\n { datePicker } = client;\n // If there's a DatePicker which is showing events, the requested date range must\n // encapsulate both the DatePicker's demands and the activeView's demands.\n if (datePicker?.showEvents) {\n const { activeView } = client;\n startDate = new Date(Math.min(activeView.startDate, datePicker.startDate));\n endDate = new Date(Math.max(activeView.endDate, datePicker.endDate));\n }\n // We gather the widest date range that is asked for, and the final range\n // is requested in the next time frame.\n if (pendingLoad) {\n pendingLoad.startDate = DateHelper.min(startDate, pendingLoad.startDate);\n pendingLoad.endDate = DateHelper.max(endDate, pendingLoad.endDate);\n }\n else {\n me.pendingLoad = {\n startDate,\n endDate\n };\n me.client.requestAnimationFrame(() => me.load());\n }\n }\n async load() {\n const\n me = this,\n {\n client,\n beforeRequest,\n dateFormat\n } = me,\n {\n crudManager\n } = client,\n {\n load\n } = crudManager.activeRequests,\n {\n startDate,\n endDate\n } = me.pendingLoad;\n const options = {\n dateRangeRequested : me.pendingLoad,\n request : {\n params : {\n [me.startDateParamName] : DateHelper.format(startDate, dateFormat),\n [me.endDateParamName] : DateHelper.format(endDate, dateFormat)\n }\n }\n };\n // Ensure that subsequent loadDateRange requests queue up.\n me.pendingLoad = null;\n // allow app developers to mutate the request\n if (beforeRequest) {\n me.callback(beforeRequest, client, [options]);\n }\n if (load) {\n // If there is already a load request in flight which would satisfy the date range\n // Alow it to go through.\n if (me.hasOutstandingLoadFor(startDate, endDate)) {\n return;\n }\n try {\n await crudManager.cancelRequest(load.desc, load.reject);\n }\n catch (e) {\n // swallow rejected load Promise exception\n }\n }\n let result;\n try {\n result = await crudManager.load(options);\n }\n catch (e) {\n /**\n * Fires when the {@link Calendar.feature.LoadOnDemand} feature detects that a request\n * for data from the server has failed.\n *\n * An event listener handler may produce an error UI.\n *\n * If no handler returns `false`, then a default error UI is shown\n * using `{@link Core.widget.MessageDialog#function-alert MessageDialog}`.\n * @event loadOnDemandFail\n * @param {Response} rawResponse The HTTP `fetch` response object.\n * @param {Object} request The CrudManager load data block.\n * @param {Object} response The decoded JSON response.\n * @on-owner\n */\n if (!client.isDestroyed && !e.cancelled && client.trigger('loadOnDemandFail', e) !== false) {\n MessageDialog.alert({\n title : client.L('L{Calendar.loadFail}'),\n message : e.message\n });\n }\n }\n /**\n * Fires when the {@link Calendar.feature.LoadOnDemand} feature has loaded a range of events.\n * @event dateRangeLoad\n * @param {Object} response The decoded JSON response.\n * @param {Object} options The options object passed into the CrudManager {@link Scheduler.data.CrudManager}\n * {@link Scheduler.crud.AbstractCrudManagerMixin#function-load} method.\n * @param {Date} startDate The start date of the range to request.\n * @param {Date} endDate The end date of the range to request. **Note that Dates are timestamps**.\n * @on-owner\n */\n (result && !client.isDestroyed) && client.trigger('dateRangeLoad', { response : result.response, options, startDate, endDate });\n }\n}\n// Register this feature type with its Factory\nLoadOnDemand.initClass();\nLoadOnDemand._$name = 'LoadOnDemand';", "import Exporter from '../../../../Grid/feature/export/exporter/Exporter.js';\nimport TemplateHelper from '../../../../Core/helper/TemplateHelper.js';\nimport Widget from '../../../../Core/widget/Widget.js';\nimport BrowserHelper from '../../../../Core/helper/BrowserHelper.js';\n/**\n * @module Calendar/feature/print/printer/Printer\n */\n/**\n * Base class for all printers\n * @extends Grid/feature/export/exporter/Exporter\n * @internal\n */\nexport default class Printer extends Exporter {\n restoreState({ client }) {}\n saveState({ client }) {}\n cloneElement(element, target = this.element, clear = true) {\n if (clear) {\n target.innerHTML = '';\n }\n target.appendChild(element.cloneNode(true));\n }\n /**\n * Template of an extracted page.\n * @param {Object} data Data for the page template\n * @returns {String}\n */\n pageTpl(data) {\n const\n {\n config,\n title,\n header,\n footer,\n styles,\n htmlClasses,\n bodyStyle,\n bodyClasses = [`b-${this.constructor.type}`, ...this.owner.bodyClasses, ...Widget.outerCls],\n paperHeight,\n paperWidth,\n html\n } = data,\n // Safari's print returns immediately, so we can't immediately remove the window.\n // It is removed if ever needed again.\n afterPrint = BrowserHelper.isSafari ? '' : 'window.removeElement && window.removeElement();',\n // Don't run print script in debug mode\n script = !config?.debug ? `` : '';\n return TemplateHelper.tpl`\n \n \n \n \n ${title}\n ${styles.join('')}\n \n \n
\n ${header && `
${header}
`}\n
${html}
\n ${footer && `
${footer}
`}\n
\n ${script}\n \n `;\n }\n}\nPrinter._$name = 'Printer';", "import Printer from './Printer.js';\nimport { PaperFormat } from '../../../../Grid/feature/export/Utils.js';\n/**\n * @module Calendar/feature/print/printer/CalendarPrinter\n */\nconst bigNumberProperty = {\n configurable : true,\n get : () => Number.MAX_SAFE_INTEGER\n};\n/**\n * Helper class for the Calendar print feature.\n * @private\n */\nexport default class CalendarPrinter extends Printer {\n static get $name() {\n return 'CalendarPrinter';\n }\n static get type() {\n return 'calendar';\n }\n getTotalHeight(client) {\n const { activeView } = client;\n switch (client.mode) {\n case 'agenda':\n return activeView.virtualScrollHeight;\n case 'day' :\n return activeView.dayContentElement.scrollHeight + activeView.alldayRowElement.offsetHeight;\n case 'week':\n return activeView.dayContentElement.scrollHeight + activeView.alldayRowElement.offsetHeight;\n case 'month':\n // Duplicating screen week row heights exactly.\n if (this.owner.wysiwyg) {\n return activeView.weeksElement.scrollHeight + activeView.weekdaysHeader.offsetHeight + 10;\n }\n // If we're not doing wysiwyg, total height is set during content cloning.\n break;\n case 'year' :\n return this.inchToPx(PaperFormat.A4.width);\n }\n }\n getTotalWidth(client) {\n switch (client.mode) {\n case 'year' :\n return this.inchToPx(PaperFormat.A4.height);\n default:\n return this.inchToPx(PaperFormat.A4.width);\n }\n }\n async prepareComponent(config) {\n const\n me = this,\n { owner } = me,\n { wysiwyg } = owner,\n shrinkwrapRowHeights = !wysiwyg,\n { client } = config,\n { activeView } = client;\n me.exportMeta = {\n title : owner.callback(owner.titleRenderer, owner, [activeView]),\n totalWidth : me.getTotalWidth(client),\n totalHeight : me.getTotalHeight(client),\n subGrids : {}\n };\n if (client.mode === 'month' && shrinkwrapRowHeights) {\n Object.defineProperty(activeView, 'eventsPerCell', bigNumberProperty);\n // Refresh with eventsPerCell at a Very Large Number so that all are rendered\n // since we are shrinkwrapping the week rows.\n activeView.doRefresh();\n }\n me.cloneElement(activeView.currentElement);\n if (client.mode === 'month') {\n let rowHeights;\n // Measure the row heights based upon the number of rendered events (which will be all for that day)\n // and the event height.\n if (shrinkwrapRowHeights) {\n rowHeights = activeView.shrinkwrapRowHeights;\n delete activeView.eventsPerCell;\n activeView.doRefresh();\n // Total exported height must be all calculated heights\n me.exportMeta.totalHeight = activeView.weekdaysHeader.offsetHeight + rowHeights.reduce((sum, r) => {\n return sum + r;\n }, 5);\n }\n activeView.weekElements.forEach((el, i) => {\n const clonedElement = me.element.querySelector(`[data-week=\"${el.dataset.week}\"]`);\n clonedElement.style.minHeight = '';\n if (shrinkwrapRowHeights) {\n clonedElement.style.flex = `0 0 ${rowHeights[i]}px`;\n }\n else if (wysiwyg) {\n clonedElement.style.flex = `1 0 ${el.offsetHeight}px`;\n }\n else {\n clonedElement.style.flex = `1 0 ${250 / 6}mm`;\n }\n });\n }\n }\n pxToInch(value) {\n return (value / 96).toFixed(2);\n }\n}\n// HACK: terser/obfuscator doesn't yet support async generators, when processing code it converts async generator to regular async\n// function.\nCalendarPrinter.prototype.pagesExtractor = async function * pagesExtractor(config) {\n const\n me = this,\n {\n totalHeight,\n totalWidth,\n title\n } = me.exportMeta;\n yield {\n html : me.pageTpl({\n config,\n title,\n html : me.prepareExportElement(),\n styles : me.stylesheets,\n paperWidth : me.pxToInch(totalWidth),\n paperHeight : me.pxToInch(totalHeight)\n })\n };\n};\nCalendarPrinter._$name = 'CalendarPrinter';", "import CalendarFeature from '../CalendarFeature.js';\nimport CalendarPrinter from './printer/CalendarPrinter.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\nimport DomHelper from '../../../Core/helper/DomHelper.js';\nimport '../../../Grid/feature/export/Print.js';\n/**\n * @module Calendar/feature/print/Print\n */\nconst emptyArray = Object.freeze([]);\n/**\n * This feature enables printing of the current Calendar mode.\n *\n * ## Usage\n *\n * ```javascript\n * const calendar = new Calendar({\n * features : {\n * print : true\n * }\n * });\n *\n * // Simple print\n * calendar.print();\n * ```\n *\n * This feature is **disabled** by default.\n *\n * @demo Calendar/basic\n * @classtype print\n * @feature\n * @typings Grid.feature.export.Print -> Grid.feature.export.GridPrint\n * @typings Scheduler.feature.export.Print -> Scheduler.feature.export.SchedulerPrint\n */\nexport default class Print extends CalendarFeature {\n static get $name() {\n return 'Print';\n }\n static get type() {\n return 'print';\n }\n static get configurable() {\n return {\n /**\n * Config for printer.\n * @config {Object}\n * @private\n */\n printer : {\n $config : ['lazy', 'nullify'],\n value : {\n type : 'calendar'\n }\n },\n /**\n * By default, a {@link Calendar.widget.MonthView} is rendered with the week rows\n * shrinkwrapping their event content. That is, rows with no events are small, and rows\n * containing events are expanded to make all events visible.\n *\n * To duplicate the on-screen appearance in terms of week row heights where empty rows\n * are flexed to consume an equal amount of height, configure this as `true`.\n * @config {Boolean}\n * @default\n */\n wysiwyg : false,\n /**\n * The function to use to create the [<title>](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title) element for the print document.\n * Defaults to using the {@link Scheduler.view.mixin.Describable#config-descriptionRenderer}\n * of the active view. Note that this does not process HTML source.\n *\n * @config {Function|String}\n * @param {Calendar.widget.mixin.CalendarMixin} source The view which triggered the event.\n * @typings source -> {typeof CalendarMixin}\n * @returns {String}\n * @default\n */\n titleRenderer : activeView => activeView.description,\n /**\n * Map of printer classes to use in print feature\n * @config {Map}\n * @private\n * @default\n */\n printers : new Map([[CalendarPrinter.type, CalendarPrinter]]),\n /**\n * This config is passed to the Grid print feature. Print dialog is ignored, instead Grid is printed with\n * best default configs.\n * @config {Object}\n * @private\n */\n gridPrintConfig : null\n };\n }\n construct() {\n super.construct(...arguments);\n this.client.print = this.print.bind(this);\n }\n changePrinter(config) {\n const\n me = this,\n printersMap = me.printersMap || (me.printersMap = new Map());\n if (config) {\n let printer;\n const { type } = config;\n if (printersMap.has(type)) {\n printer = printersMap.get(type);\n printer.setConfig(config);\n }\n else {\n const printerClass = me.printers.get(type);\n if (!printerClass) {\n throw new Error(`Printer type ${type} is not found. Make sure you've configured it`);\n }\n config = ObjectHelper.clone(config);\n config.owner = me;\n printer = new printerClass(config);\n printer.relayAll(me);\n printersMap.set(type, printer);\n }\n return printer;\n }\n else {\n printersMap.forEach(printer => printer.destroy());\n }\n }\n get bodyClasses() {\n if (this.shrinkwrapRowHeights) {\n return ['b-shrinkwrap-row-heights'];\n }\n return emptyArray;\n }\n /**\n * Prints the current active view of the Calendar\n * @privateparam config A config object for the Printer\n */\n async print(config = {}) {\n const\n me = this,\n {\n client,\n printer\n } = me,\n iframeId = `${client.id}-print-iframe`;\n /**\n * Fires on the owning Calendar before print starts. Return `false` to cancel the print.\n * @event beforePrint\n * @on-owner\n * @preventable\n * @param {Object} config Print config\n */\n if (client.trigger('beforePrint', { config, printer }) !== false) {\n if (client.activeView.isEventList) {\n await client.activeView.print(ObjectHelper.assign({\n exporterType : 'multipagevertical',\n useRenderedColumnWidth : true\n }, this.gridPrintConfig || {}));\n client.trigger('print');\n }\n else {\n config.client = client;\n const pages = await me.printer.export(config);\n if (config.debug) {\n client.trigger('print', pages);\n }\n else {\n // Remove existing iframe if it's there.\n // Safari can't wait until after print has finished, so it does not remove iframe after print\n document.getElementById(iframeId)?.remove();\n const iframe = DomHelper.createElement({\n id : iframeId,\n class : 'b-calendar-print-iframe',\n tag : 'iframe',\n parent : document.body\n });\n iframe.contentWindow.removeElement = () => {\n iframe.remove();\n /**\n * Fires when print has finished\n * @event print\n */\n client.trigger('print', pages);\n };\n iframe.contentWindow.document.write(pages[0].html);\n iframe.contentWindow.document.close();\n return pages;\n }\n }\n }\n }\n}\nPrint.initClass();\nPrint._$name = 'Print';", "import CalendarFeature from './CalendarFeature.js';\nimport SchedulerScheduleMenu from '../../Scheduler/feature/ScheduleMenu.js';\n/**\n * @module Calendar/feature/ScheduleMenu\n */\n/**\n * A feature which adds a context menu to the unoccupied parts of calendar views.\n *\n * There is one predefined {@link #config-items item} provided by default:\n *\n * - `addEvent` Adds an event at the time point indicated by the click\n *\n * If the timepoint has only date-level granularity (Such as when clicking in a MonthView or\n * AgendaView, or YearView), the start time of the event will default to the configured\n * {@link Calendar.view.Calendar#config-autoCreate}'s `startHour` property.\n *\n * If the {@link Calendar.feature.EventEdit EventEdit} feature is enabled, the new event is passed for editing.\n *\n * {@inlineexample Calendar/feature/ScheduleMenu.js}\n *\n * The {@link #config-items} set can be reconfigured by providing an `items` property to this feature:\n *\n *```javascript\n * features : {\n * scheduleMenu : {\n * items : {\n * // Knocks out the predefined addEvent item\n * addEvent : null,\n *\n * // Add our own custom item\n * disableDate : {\n * icon : 'b-fa b-fa-calendar-times',\n * text : 'Mark date unavailable',\n *\n * // Will look up ownership chain and find the Calendar\n * handler : 'up.makeDateUnavailable'\n * }\n * }\n * }\n * },\n * makeDateUnavailable({ date }) {\n * // Pass to our own app logic\n * this.disableDate(date);\n * }\n *```\n *\n * This feature is **enabled** by default.\n *\n * @demo Calendar/custom-menus\n * @extends Scheduler/feature/ScheduleMenu\n * @classtype scheduleMenu\n * @feature\n *\n * @typings Scheduler.feature.ScheduleMenu -> Scheduler.feature.SchedulerScheduleMenu\n */\nexport default class ScheduleMenu extends SchedulerScheduleMenu {\n static get $name() {\n return 'ScheduleMenu';\n }\n static get type() {\n return 'scheduleMenu';\n }\n getDataFromEvent(event) {\n const\n { client } = this,\n { activeView } = client,\n // Calendar has a defaultCalendar property for defaulting the resource\n resourceRecord = client.resolveResourceRecord(event) || client.defaultCalendar;\n // Base class is SchedulerScheduleMenu\n if (activeView.isScheduler) {\n this.client = activeView;\n }\n const result = super.getDataFromEvent(event);\n // Only inject the resourceRecord as the Calendar's detected version if the superclass didn't find one.\n // We may be hosting a Scheduler as a view which has its own opinions on this.\n if (!result.resourceRecord) {\n result.resourceRecord = resourceRecord;\n }\n this.client = client;\n return result;\n }\n shouldShowMenu({ date, targetElement }) {\n const\n { client } = this,\n { activeView } = client;\n if (activeView.isEventList && !activeView.isAgendaView) {\n return false;\n }\n // Base class is SchedulerScheduleMenu\n if (activeView.isScheduler) {\n this.client = activeView;\n const result = super.shouldShowMenu(...arguments);\n this.client = client;\n return result;\n }\n // We need a date and *not* an event element.\n return Boolean(date && !targetElement.closest(client.eventSelector));\n }\n populateScheduleMenu({ items, domEvent, date }) {\n super.populateScheduleMenu(...arguments);\n const\n { client } = this,\n { addEvent } = items;\n if (addEvent) {\n addEvent.disabled = this.disableAddEvent;\n addEvent.onItem = () => {\n const resourceRecord = client.activeView.getResourceRecord(domEvent);\n // We must offer the preventable beforeAutoCreate event\n if (client.activeView.trigger('beforeAutoCreate', { domEvent, date, resourceRecord }) !== false) {\n client.createEvent(date, resourceRecord);\n }\n };\n }\n }\n get disableAddEvent() {\n const { resourceRecord, date } = this.menuContext;\n return resourceRecord ? (resourceRecord.readOnly || !resourceRecord.isWorkingTime(date)) : false;\n }\n changeMenu() {\n const\n me = this,\n result = super.changeMenu(...arguments);\n // Set the owner to be the currently active view (or its active OverflowPopup)\n // so that focus stays in that view's ownership tree.\n result?.ion({\n beforeShow({ source }) {\n const\n { activeSubView } = me.client,\n { _overflowPopup } = activeSubView;\n source.owner = _overflowPopup?.containsFocus ? _overflowPopup : activeSubView;\n }\n });\n return result;\n }\n}\n// Register this feature type with its Factory\nCalendarFeature.register(ScheduleMenu.type, ScheduleMenu, true);\nScheduleMenu._$name = 'ScheduleMenu';", "import DomHelper from '../../Core/helper/DomHelper.js';\n/**\n * @module Calendar/layout/LayoutDim\n */\nconst\n noCalcRe = /^[+-]?\\d+(?:\\.\\d+)?(?:%|px)?$/;\n/**\n * Helper class for layout size pairs.\n * @internal\n */\nexport default class LayoutDim {\n static from(value) {\n if (value == null) {\n return null;\n }\n if (value instanceof LayoutDim) {\n return value;\n }\n // isNaN('4')=false, isNaN('4%')=true (preserve strings like \"5% + 10px\")\n if (!(Array.isArray(value) || (typeof value === 'string' && isNaN(value)))) {\n value = Number(value);\n value = (value < 1) ? [value, 0] : [0, value];\n }\n return new LayoutDim(...value);\n }\n static get(value) {\n return LayoutDim.from(value) || LayoutDim.ZERO;\n }\n constructor(ratio, delta) {\n this.r = ratio;\n this.d = delta;\n }\n add(v) {\n v = LayoutDim.from(v);\n return v ? new LayoutDim(this.r + v.r, this.d + v.d) : this;\n }\n adjust(r, d) {\n this.r += r || 0;\n this.d += d || 0;\n return this;\n }\n freeze() {\n return Object.freeze(this);\n }\n px(range) {\n return this.r * (range || 100) + this.d;\n }\n sub(v) {\n v = LayoutDim.from(v);\n return v ? new LayoutDim(this.r - v.r, this.d - v.d) : this;\n }\n * [Symbol.iterator]() {\n yield 'r';\n yield 'd';\n }\n stringify() {\n const str = this.toString();\n return noCalcRe.test(str) ? str : `calc(${str})`;\n }\n toString() {\n const { r, d } = this;\n let str;\n if (r) {\n str = DomHelper.percentify(r * 100);\n if (d) {\n str = `${str} + ${d}px`.replace('+ -', '- ');\n }\n }\n else {\n str = d ? `${d}px` : '0';\n }\n return str;\n }\n}\nLayoutDim.ZERO = new LayoutDim(0, 0).freeze();\nLayoutDim._$name = 'LayoutDim';", "import DomHelper from '../../Core/helper/DomHelper.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport CalendarFeature from './CalendarFeature.js';\nimport CalendarZone from './CalendarZone.js';\nimport LayoutDim from '../layout/LayoutDim.js';\nimport AttachToProjectMixin from '../../Scheduler/data/mixin/AttachToProjectMixin.js';\n/**\n * @module Calendar/feature/TimeRanges\n */\n/**\n * A mutable object used to render an element of the time range.\n *\n * @typedef {Object} TimeRangeRenderData\n * @property {Calendar.model.TimeRangeModel} record The record being rendered\n * @property {String} color The color to be applied to the element\n * @property {Object} cls An object whose truthy property names will be added to the element's CSS `classList`\n * @property {Object} style An object containing style properties for the element\n * @property {TimeRangeRenderData} [outer] The render data for the outermost element. This property is present when\n * rendering any of the inner elements. The outer element is rendered after all inner elements, meaning this object\n * can be modified by an inner element renderer function.\n * @property {TimeRangeRenderData} [header] The render data for the header element. This property is present when\n * rendering the outermost element. The corresponding element has already been rendered, meaning that this object\n * should be considered read only.\n * @property {TimeRangeRenderData} [body] The render data for the body element. This property is present when\n * rendering the outermost element. The corresponding element has already been rendered, meaning that this object\n * should be considered read only.\n * @property {TimeRangeRenderData} [footer] The render data for the footer element. This property is present when\n * rendering the outermost element. The corresponding element has already been rendered, meaning that this object\n * should be considered read only.\n */\n/**\n * The object passed to a {@link Calendar.feature.TimeRanges#config-renderer} function.\n * @typedef {Object} TimeRangeRenderInfo\n * @property {TimeRangeRenderData} renderData The render data object to modify\n * @property {Calendar.model.TimeRangeModel} timeRange The record being rendered\n * @property {DomConfig} [domConfig] The default DOM config. This is only passed to the `outer` renderer and represents\n * the DOM config that will be used for the element. The `className` and `style` properties are applied after the\n * renderer returns.\n */\n/**\n * An object containing rendering methods for the various elements of a time range. All functions are optional. The\n * `footer` function is special in that there is no footer element by default. If a footer is desired, a `footer`\n * renderer function must be provided.\n *\n * @typedef {Object} TimeRangeRenderer\n * @property {Function} [outer] An optional function to be called to render the outermost element. This function is\n * passed a {@link Calendar.feature.TimeRanges#typedef-TimeRangeRenderInfo} object.\n * @property {Function} [body] An optional function to be called to render the body element. This function is passed\n * a {@link Calendar.feature.TimeRanges#typedef-TimeRangeRenderInfo} object.\n * @property {Function} [header] An optional function to be called to render the header element. This function is passed\n * a {@link Calendar.feature.TimeRanges#typedef-TimeRangeRenderInfo} object.\n * @property {Function} [footer] An optional function to be called to render the footer element. This function is passed\n * a {@link Calendar.feature.TimeRanges#typedef-TimeRangeRenderInfo} object.\n */\nconst\n genericRenderer = renderData => ({\n className : renderData.cls,\n style : renderData.style\n }),\n defaultRotation = {\n end : 'pos',\n start : 'neg'\n },\n oppositeAlign = {\n end : 'start',\n start : 'end'\n },\n valueFields = Object.entries({\n alignment : 'alignment',\n color : 'color',\n footer : 'footer',\n header : 'name',\n rotation : 'rotation'\n });\n/*\n This class manages rendering time ranges in a Day/WeekView. Instances of this class are created by the\n CalendarFeature via zoneTypes map.\n */\nclass DayZone extends CalendarZone {\n static $name = 'DayZone';\n static configurable = {\n viewListeners : {\n beforeLayoutEvents : 'onBeforeLayoutEvents'\n // renderEvents : 'onRenderEvents'\n }\n };\n onBeforeLayoutEvents({ source, context }) {\n // This event is fired by DayView.renderEvents\n // We hook into that event which fires for each day even if there are no events so we can decorate the day\n // with appropriate time ranges\n const ranges = source.getTimeRanges(context.cellData.date, context.cellData.tomorrow);\n if (ranges.length) {\n const\n { layout } = context,\n footers = {},\n headers = {},\n clusters = [],\n items = [];\n let children, item;\n context.timeRangeHeaders = headers;\n context.timeRanges = ranges;\n for (const timeRange of ranges) {\n item = layout.createLayoutItem(timeRange, context);\n item.values = Object.fromEntries(valueFields.map(([name, fieldName]) => [name, timeRange[fieldName]]));\n item.values.rotation = item.values.rotation || defaultRotation[item.values.alignment];\n layout.clusterize(clusters, items, item, context);\n children = context.dayDomConfig.children.inset;\n children = children.children || (children.children = []);\n children.push(this.renderTimeSpan(context, item, headers, footers));\n }\n if (headers.end || footers.end) {\n context.dayDomConfig.className['b-dayview-inset-after'] = 1;\n }\n if (headers.start || footers.start) {\n context.dayDomConfig.className['b-dayview-inset-before'] = 1;\n }\n }\n }\n renderPart(defaultRenderer, renderer, renderData, part, headerFooter, align, extraData) {\n const\n isFooter = part === 'footer',\n { record } = renderData,\n renderInfo = {\n timeRange : record\n };\n let data = renderData,\n domConfig, extraDom, value;\n if (typeof part === 'string') {\n renderData[part] = data = ObjectHelper.merge({\n part,\n record,\n outer : renderData,\n cls : {\n [`b-cal-timerange-${part}`] : 1\n }\n }, extraData);\n value = renderData.values[part];\n if (value != null) {\n renderInfo.value = data.value = value;\n }\n }\n else {\n extraDom = part;\n part = 'outer';\n }\n defaultRenderer = defaultRenderer?.[part];\n renderer = renderer?.[part];\n renderInfo.renderData = data;\n renderInfo.domConfig = extraDom;\n if (renderer) {\n data.style = {};\n const ret = renderer(renderInfo);\n if (typeof ret === 'string') {\n extraDom = Object.assign({ html : ret }, extraDom);\n }\n else if (ObjectHelper.isObject(ret)) {\n domConfig = ret;\n }\n }\n domConfig = domConfig || defaultRenderer?.(renderInfo);\n if (extraDom) {\n domConfig = ObjectHelper.merge(domConfig || {}, extraDom);\n }\n if (headerFooter && domConfig) {\n align = (isFooter && oppositeAlign[align]) || align;\n headerFooter[align] = (headerFooter[align] || 0) + 1;\n }\n data.domConfig = domConfig;\n return domConfig;\n }\n renderTimeSpan(context, item, headers, footers) {\n const\n me = this,\n { owner } = me, // our feature\n { defaultRenderer, renderer } = owner,\n timeRange = item.eventRecord,\n sizeSeconds = isNaN(item.end) ? 0 : Math.abs(item.end - item.start), // seconds\n isRange = sizeSeconds > 1,\n isLine = !isRange,\n { rtl } = context.layout.owner,\n { values } = item,\n { alignment : align, color, rotation } = values,\n renderData = {\n color,\n values,\n record : timeRange,\n layoutContext : context,\n cls : {\n 'b-readonly' : timeRange.readOnly,\n 'b-rtl' : rtl,\n 'b-cal-timerange' : 1,\n 'b-cal-timerange-line' : isLine,\n 'b-cal-timerange-narrow' : isRange && sizeSeconds <= owner.narrowThreshold * 60,\n [`b-cal-timerange-align-${align}`] : align,\n [`b-cal-timerange-rotate-${rotation}`] : isRange && rotation\n }\n };\n // This minor fudge allows the background grid lines to show through (better aesthetically)\n isRange && item.height.adjust(0, -1);\n const styles = item.getStyles(rtl);\n return DomHelper.normalizeChildren(me.renderPart(defaultRenderer, renderer, renderData, {\n dataset : {\n 'timerange-id' : timeRange.id,\n btip : isLine && values.header || null\n },\n className : {\n [timeRange.cls] : timeRange.cls\n },\n elementData : {\n timeRange\n },\n style : {\n top : styles.top,\n height : styles.height\n },\n children : isRange && {\n header : me.renderPart(defaultRenderer, renderer, renderData, 'header', headers, align, {\n cls : {\n [timeRange.iconCls] : timeRange.iconCls\n }\n }),\n body : me.renderPart(defaultRenderer, renderer, renderData, 'body'),\n footer : me.renderPart(defaultRenderer, renderer, renderData, 'footer', footers, align)\n }\n }));\n }\n}\n/**\n * This feature provides an easy way to highlight ranges of time in a calendar's day and week views. Each time range is\n * represented using the {@link Calendar.model.TimeRangeModel}.\n *\n * {@inlineexample Calendar/feature/TimeRanges.js}\n *\n * Time ranges can take a few different forms:\n *\n * - A line at the {@link Calendar.model.TimeRangeModel#field-startDate} with optional tooltip based on the\n * {@link Calendar.model.TimeRangeModel#field-name}.\n * - A styled region between the {@link Calendar.model.TimeRangeModel#field-startDate} and\n * {@link Calendar.model.TimeRangeModel#field-endDate}. The {@link Calendar.model.TimeRangeModel#field-cls} field is\n * used to apply the desired style to the time range element.\n * - A titled region based on the {@link Calendar.model.TimeRangeModel#field-name} field, between the\n * {@link Calendar.model.TimeRangeModel#field-startDate} and {@link Calendar.model.TimeRangeModel#field-endDate}. The\n * {@link Calendar.model.TimeRangeModel#field-cls} field can be used to apply the styling to the time range element.\n * The {@link Calendar.model.TimeRangeModel#field-color} and {@link Calendar.model.TimeRangeModel#field-iconCls}\n * fields can be used to apply a background color and icon to the header element. An optional\n * {@link Calendar.model.TimeRangeModel#field-footer} can also be added.\n *\n * ## ResourceTimeRanges\n *\n * If `resourceTimeRanges` are included in the loaded data, the results are only applied to views\n * which display that resource. This means a {@link Calendar.widget.DayResourceView} or\n * subviews of a {@link Calendar.widget.ResourceView}.\n *\n * Be sure to see additional examples on Mar 4 (Wed) in the Live Demo.\n *\n * This feature is **disabled** by default.\n *\n * @demo Calendar/timeranges\n * @extends Scheduler/feature/TimeRanges\n * @classtype timeRanges\n * @feature\n *\n * @typings Scheduler.feature.TimeRanges -> Scheduler.feature.SchedulerTimeRanges\n */\nexport default class TimeRanges extends CalendarFeature.mixin(AttachToProjectMixin) {\n static $name = 'TimeRanges';\n static type = 'timeRanges';\n static configurable = {\n defaultRenderer : {\n outer({ renderData }) {\n const\n ret = genericRenderer(renderData),\n { color } = renderData;\n if (color) {\n if (DomHelper.isNamedColor(color)) {\n ret.className[`b-cal-color-${color}`] = 1;\n }\n else {\n // Background color is in a pseudo element whose styles\n // come from CSS vars, so set the var locally to the element.\n (ret.style || (ret.style = {}))['--timerange-color'] = color;\n }\n }\n ret.className['b-cal-timerange-has-header'] = renderData.header?.domConfig;\n return ret;\n },\n body : ({ renderData }) => genericRenderer(renderData),\n header : ({ renderData, value }) => value ? {\n ...genericRenderer(renderData),\n children : [{\n className : {\n 'b-cal-timerange-header-text' : 1\n },\n text : value\n }]\n } : null,\n footer : ({ renderData, value }) => value ? {\n ...genericRenderer(renderData),\n children : [{\n className : {\n 'b-cal-timerange-footer-text' : 1\n },\n text : value\n }]\n } : null\n },\n /**\n * The number of pixels or proportion of the overall width to allocate for time range headers.\n *\n * Values less than 1 are the fractional proportion of the width (for example, 0.04 is 4% of the width),\n * while values greater than or equal to 1 are a number of pixels.\n * @config {Number}\n * @default\n */\n headerWidth : 40,\n narrowThreshold : 60,\n /**\n * An empty function by default, but provided so that you can override it.\n *\n * This function is called each time a time range is rendered to allow developers to mutate the element metadata,\n * or the CSS classes to be applied to the rendered element.\n *\n * It's called with a {@link #typedef-TimeRangeRenderInfo} object containing the time span record, and a\n * {@link #typedef-TimeRangeRenderData renderData} object which allows you to mutate event metadata such as\n * `cls` and `style`.\n *\n * A non-null return value from the renderer is used as the element body content. A nullish return value results\n * in the default renderer for the element.\n *\n * ```javascript\n * timeRanges : {\n * renderer ({ timeRange, renderData }) {\n * if (timeRange.name === 'Doctors appointment') {\n * renderData.style.fontWeight = 'bold';\n * renderData.cls['custom-cls'] = 1;\n *\n * return 'Special doctors appointment';\n * }\n * }\n * }\n * ```\n *
When returning content, be sure to consider how that content should be encoded to avoid XSS\n * (Cross-Site Scripting) attacks. This is especially important when including user-controlled data such as\n * the event's `name`. The function {@link Core.helper.StringHelper#function-encodeHtml-static} as well as\n * {@link Core.helper.StringHelper#function-xss-static} can be helpful in these cases.
\n *\n * For example:\n * ```javascript\n * timeRanges : {\n * renderer ({ timeRange, renderData }) {\n * return StringHelper.xss`Special ${timeRange.name}`;\n * }\n * }\n * ```\n *\n * For advanced rendering, this config can be a {@link #typedef-TimeRangeRenderer} object with rendering\n * functions for individual elements: `header`, `body`, `footer`, and `outer`. When a function is provided,\n * that is equivalent to passing the `header` renderer. In other words, the above example is equivalent to\n * the following:\n *\n * ```javascript\n * timeRanges : {\n * renderer : {\n * header({ timeRange, renderData }) {\n * return StringHelper.xss`Special ${timeRange.name}`;\n * }\n * }\n * }\n * ```\n *\n * @config {Function|TimeRangeRenderer} renderer\n * @param {TimeRangeRenderInfo} info An object that contains data about the time span being rendered.\n * @returns {String}\n * @default\n */\n renderer : null,\n zoneTypes : {\n day : DayZone, // also covers WeekView\n resource : DayZone\n }\n };\n attachToProject(project) {\n super.attachToProject(project);\n this.detachListeners('project');\n project.timeRangeStore?.ion({\n name : 'project',\n change : 'refresh',\n thisObj : this\n });\n project.resourceTimeRangeStore?.ion({\n name : 'project',\n change : 'refresh',\n thisObj : this\n });\n }\n changeRenderer(renderer) {\n if (typeof renderer === 'function') {\n renderer = {\n header : renderer\n };\n }\n return renderer;\n }\n updateHeaderWidth(width) {\n const el = this.owner?.element;\n if (el) {\n el.style.setProperty('--timerange-header-width', LayoutDim.from(width)?.toString());\n }\n }\n refresh() {\n this.client.refresh();\n }\n}\n// Register this feature type with its Factory\nCalendarFeature.register(TimeRanges.type, TimeRanges);\nTimeRanges._$name = 'TimeRanges';", "import CalendarFeature from './CalendarFeature.js';\nimport FunctionHelper from '../../Core/helper/FunctionHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\n/**\n * @module Calendar/feature/WeekExpander\n */\n/**\n *\n * A Feature which, when present, adds a week row expansion tool to week rows in\n * {@link Calendar.widget.MonthView MonthView}s so that a row which contains overflowing cells\n * can be expanded to show all events with no overflow.\n *\n * ```javascript\n * const calendar = new Calendar({\n * appendTo : 'container',\n *\n * // Start life looking at this date\n * date : new Date(2020, 9, 12),\n *\n * features : {\n * weekExpander : true\n * },\n *\n * // CrudManager arranges loading and syncing of data in JSON form from/to a web service\n * crudManager : {\n * transport : {\n * load : {\n * url : 'data/data.json'\n * }\n * },\n * autoLoad : true\n * }\n * });```\n *\n *
\n * *Expanding* a week row using this feature may cause the MonthView to have vertical overflow.\n *
\n *\n *
\n * When combined with {@link Calendar.widget.MonthView#config-autoRowHeight}, *collapsing* a\n * week row sets the `autoRowHeight` property to `false`. Detect this state change using the\n * {@link Calendar.widget.MonthView#event-weekFlex} event.\n *
\n *\n * This feature is **disabled** by default\n * @extends Calendar/feature/CalendarFeature\n * @classtype weekExpander\n * @feature\n */\nexport default class WeekExpander extends CalendarFeature {\n static get $name() {\n return 'WeekExpander';\n }\n static get type() {\n return 'weekExpander';\n }\n static get pluginConfig() {\n return {\n chain : ['render']\n };\n }\n render() {\n const\n { client } = this,\n monthView = this.monthView = client.isMonthView ? client : client.modes.month;\n if (monthView) {\n const { weekRenderer } = this;\n monthView.showWeekColumn = true;\n monthView.weekRenderer = monthView.weekRenderer ? FunctionHelper.createSequence(monthView.weekRenderer, weekRenderer) : weekRenderer;\n monthView.ion({\n weeknumberclick : 'onWeekNumberClick',\n thisObj : this,\n // We must get in first so we can veto the switch to week view if we toggle a row.\n prio : 10000\n });\n }\n }\n weekRenderer(parent, [year, week]) {\n if (!parent.querySelector('.b-week-toggle-tool-wrap')) {\n DomHelper.createElement({\n parent,\n className : 'b-week-toggle-tool-wrap',\n children : [{\n className : 'b-icon b-week-toggle-tool',\n dataset : {\n btip : this.L('L{WeekExpander.expandTip}')\n }\n }]\n });\n }\n }\n onWeekNumberClick({ domEvent, date }) {\n const toggleTool = domEvent.target.closest('.b-week-toggle-tool');\n if (toggleTool && !this.disabled) {\n const weekRow = domEvent.target.closest('.b-calendar-row');\n // Shrinkwrapped means the row is expanded, toggle it to collapsed\n if (weekRow.classList.contains('b-shrinkwrapped')) {\n this.monthView.flexWeekRow(date, true);\n toggleTool.dataset.btip = this.L('L{expandTip}');\n }\n // And if it's collapsed, toggle it to expanded\n else if (weekRow.classList.contains('b-has-overflow')) {\n this.monthView.shrinkwrapWeekRow(date);\n toggleTool.dataset.btip = this.L('L{collapseTip}');\n }\n return false;\n }\n }\n updateDisabled(disabled, was) {\n super.updateDisabled(disabled, was);\n // Remove class when disabled. Eliminates toggling UI.\n this.client.element.classList.toggle('b-weekexpander', !disabled);\n }\n}\n// Register this feature type with its Factory\nWeekExpander.initClass();\nWeekExpander._$name = 'WeekExpander';", "import Base from '../../../Core/Base.js';\nimport Factoryable from '../../../Core/mixin/Factoryable.js';\nimport LayoutDim from '../LayoutDim.js';\n/**\n * @module Calendar/layout/day/DayLayout\n */\nconst\n getStyles = function(rtl) {\n const me = this; // a DayLayoutItem (also why we cannot use => fn here)\n return {\n [rtl ? 'right' : 'left'] : me.left?.stringify(),\n top : me.top.stringify(),\n width : me.width?.stringify(),\n height : me.height.stringify(),\n minWidth : me.minWidth\n };\n };\n/**\n * The item returned by the `layoutEvents` method.\n *\n * @typedef {Object} DayLayoutItem\n * @property {Scheduler.model.EventModel} eventRecord The `event` being displayed.\n * @property {DayLayoutCluster} cluster The cluster of events with overlapping times.\n * @property {Number} start The start time (as the number seconds since midnight) of the item.\n * @property {Number} end The end time (as the number seconds since midnight) of the item.\n * @property {Calendar.layout.LayoutDim} left The left position of the item.\n * @property {Calendar.layout.LayoutDim} top The top position of the item.\n * @property {Calendar.layout.LayoutDim} width The width of the item.\n * @property {Calendar.layout.LayoutDim} height The height of the item.\n * @property {Boolean} startsBefore Set to `true` if the event started in a previous day.\n * @property {Boolean} endsAfter Set to `true` if the event end in a future day.\n * @internal\n */\n/**\n * A set of `items` that overlap. This object is passed to the `layoutCluster` method.\n *\n * @typedef {Object} DayLayoutCluster\n * @property {DayLayoutContext} context The layout context\n * @property {DayLayoutItem[]} items The items in this event cluster.\n * @property {Number} start The start time (as the number seconds since midnight) of the item.\n * @property {Number} end The end time (as the number seconds since midnight) of the item.\n * @internal\n */\n/**\n * The object returned by `createLayoutContext`.\n *\n * @typedef {Object} DayLayoutContext\n * @property {DayCell} cellData An object containing information about the day cell being created.\n * @property {DayLayoutCluster[]} clusters The item clusters produced by `layoutEvents`.\n * @property {DayLayoutItem[]} items The items created by the `layoutEvents` method.\n * @property {Calendar.layout.day.DayLayout} layout The owing layout instance.\n * @internal\n */\n/**\n * The base class for {@link Calendar.widget.DayView} layout algorithms.\n * @extends Core/Base\n * @abstract\n */\nexport default class DayLayout extends Base.mixin(Factoryable) {\n static factoryable = {\n // establish this class as the Factoryable base\n };\n static configurable = {\n /**\n * Set to `false` to disable the gap on the right-most edge of events. See {@link #config-gutterWidth} to\n * control the size of the gutter.\n *\n * The gutter allows the user to select the times overlapped by events, for example, to create new events.\n * @config {Boolean}\n * @default\n */\n gutter : true,\n /**\n * The number of pixels or proportion of the overall width to allocate to the {@link #config-gutter}.\n *\n * Values less than 1 are the fractional proportion of the width (for example, 0.04 is 4% of the width),\n * while values greater than or equal to 1 are a number of pixels.\n * @config {Number}\n * @default\n */\n gutterWidth : 5,\n /**\n * The number of pixels or proportion of the overall width to allocate for rendering on outside the area where\n * events are displayed. This space is used by {@link Calendar.feature.TimeRanges} to render arbitrary spans of\n * time on either side of the day's events.\n *\n * Values less than 1 are the fractional proportion of the width (for example, 0.04 is 4% of the width),\n * while values greater than or equal to 1 are a number of pixels.\n * @config {Number}\n * @default\n */\n inset : 40,\n /**\n * The minimum number of minutes an event must overlap another event before it is considered an overlap\n * for layout purposes.\n *\n * The default value of 0 treats any overlap in time as an overlap in the layout.\n * @config {Number}\n * @default 0\n * @internal\n */\n overlapTolerance : null,\n owner : null\n };\n /**\n * This method is called prior to performing the layout in {@link #function-layoutEvents}.\n * @param {DayLayoutContext} context The layout context\n * @returns {DayLayoutContext}\n * @internal\n */\n beforeLayoutEvents(context) {\n this.owner.trigger('beforeLayoutEvents', {\n context\n });\n return context;\n }\n /**\n * This method packages items into clusters of overlapping items.\n * @param {DayLayoutCluster[]} clusters The cluster array being produced. This method adds to this array.\n * @param {DayLayoutItem[]} items The items array being produced. This method adds `item` to this array.\n * @param {DayLayoutItem} item The item to add and pack into a cluster.\n * @param {DayLayoutContext} context The layout context\n * @internal\n */\n clusterize(clusters, items, item, context) {\n const cluster = clusters[clusters.length - 1] || null; // undefined => null when clusters.length=0\n items.push(item);\n // Because items are in order of increasing start times, we don't have to worry about coalescing clusters.\n if (cluster && this.overlaps(cluster, item)) {\n item.cluster = cluster;\n cluster.end = Math.max(cluster.end, item.end);\n cluster.items.push(item);\n // If the item overlaps a cluster, we simply add it there and return. No other items can overlap\n // since items are added in order of start time.\n }\n else {\n // Item does not overlap, so make a new cluster.\n clusters.push(item.cluster = {\n context,\n start : item.start,\n end : item.end,\n items : [item]\n });\n }\n }\n /**\n * Populates and returns a layout context used for the layout process.\n * @param {DayCell} cellData An object containing information about the day cell being created.\n * @param {DomConfig} [dayDomConfig] The DomConfig element definition for the day cell into which events are being\n * rendered.\n * @returns {DayLayoutContext}\n * @internal\n */\n createLayoutContext(cellData, dayDomConfig) {\n const events = cellData?.events;\n return {\n cellData,\n dayDomConfig,\n // We need the events for the day to be sorted by startDate but limited to the start of the day. In\n // other words, all events that start before \"midnight\" are equally considered as starting at midnight.\n // This order of events is an assumption that runs deep in FluidDayLayout but also in clusterization.\n events : events?.length > 1 ? cellData.dayTime.sortEvents(cellData.date, events.slice()) : (events || []),\n clusters : [],\n items : [],\n layout : this\n };\n }\n /**\n * Calculate the placements for the given events within the specified time range.\n * @param {DayCell} cellData An object containing information about the day cell being created.\n * @param {DomConfig} [dayDomConfig] The DomConfig element definition for the day cell into which events are being\n * rendered.\n * @returns {DayLayoutContext}\n * @internal\n */\n layoutEvents(cellData, dayDomConfig) {\n const\n me = this,\n context = me.beforeLayoutEvents(me.createLayoutContext(cellData, dayDomConfig)),\n { clusters, events, items } = context;\n let event, i, item, n;\n // As the base class, we simply pick up the events and wrap them in a layout item to contain their positions:\n for (event of events) {\n item = me.createLayoutItem(event, context);\n me.clusterize(clusters, items, item, context);\n }\n // cluster layouts are done in seconds:\n for (i = 0, n = clusters.length; i < n; ++i) {\n me.layoutCluster(clusters[i]);\n }\n me.owner.trigger('layoutEvents', {\n context\n });\n return context;\n }\n /**\n * Returns the base of a {@link Calendar.layout.day.DayLayout#typedef-DayLayoutItem} for the passed\n * event record.\n * @param {Scheduler.model.EventModel} eventRecord The event record for which to create a layout item.\n * @param {DayLayoutContext} context The layout context\n * @returns {DayLayoutItem}\n * @internal\n */\n createLayoutItem(eventRecord, context) {\n // Note: DH.diff() does not produce the correct layout position if DST adjustment lands on \"date\"\n const\n { date, tomorrow, dayEnd, dayTime } = context.cellData,\n { allDay, startDate, endingDate } = eventRecord,\n startSec = (allDay || startDate < date) ? 0 : dayTime.delta(startDate, 's');\n let endSec = (allDay || endingDate >= tomorrow) ? dayEnd : dayTime.delta(endingDate, 's');\n // Milestones must grow to appear to have \"milestoneDuration\"\n if (eventRecord.isMilestone && !eventRecord.isTimeRangeModel && !eventRecord.allDay) {\n endSec = startSec + (this.owner.milestoneDuration / 1000);\n }\n const\n start = Math.max(startSec, 0),\n end = Math.min(endSec, dayEnd),\n top = LayoutDim.from(start / dayEnd);\n return {\n eventRecord,\n getStyles,\n start,\n end,\n top,\n id : eventRecord.id,\n height : new LayoutDim(end / dayEnd, 0).sub(top),\n startsBefore : startDate < date || startSec < 0,\n endsAfter : tomorrow < endingDate || endSec > dayEnd\n };\n }\n overlaps(a, b, tolerance, end) { // minutes => seconds\n if (typeof tolerance === 'string') {\n end = tolerance;\n tolerance = null;\n }\n end = end || 'end';\n tolerance = tolerance ?? (this.overlapTolerance * 60 || 0); // avoid NaN\n return a.start < (b[end] - tolerance) && b.start < (a[end] - tolerance);\n }\n syncGutter() {\n this.owner.setStyle('--dayview-cell-gutter', String(LayoutDim.get(this.gutter && this.gutterWidth)));\n }\n updateGutter() {\n this.syncGutter();\n }\n updateGutterWidth() {\n this.syncGutter();\n }\n updateInset(inset) {\n this.owner.setStyle('--dayview-cell-inset-size', String(LayoutDim.get(inset)));\n }\n}\nDayLayout._$name = 'DayLayout';", "import DayLayout from './DayLayout.js';\nimport PackMixin from '../../../Scheduler/eventlayout/PackMixin.js';\nimport LayoutDim from '../LayoutDim.js';\n/**\n * @module Calendar/layout/day/FluidDayLayout\n */\nclass Packer extends PackMixin() {\n static get defaultConfig() {\n return {\n coordProp : 'left',\n sizeProp : 'width'\n };\n }\n pack(items) {\n const\n wrappedItems = items.map(item => {\n const\n { startDate } = item.eventRecord,\n endDate = new Date(startDate);\n endDate.setSeconds(endDate.getSeconds() + item.maxEnd - item.start);\n return {\n item,\n start : startDate,\n end : endDate,\n x : 0\n };\n });\n this.packEventsInBands(wrappedItems, (itemData, clusterIndex, slot, slotSize) => {\n // This logic was extracted from Scheduler/eventlayout/VerticalLayout#applyLayout\n itemData.width = slotSize;\n itemData.w = slotSize * COLUMN_WIDTH;\n itemData.x += (itemData.left = slot.start + (clusterIndex * slotSize)) * COLUMN_WIDTH;\n itemData.item.x = itemData.x;\n itemData.item.w = itemData.w;\n });\n }\n}\nconst\n COLUMN_WIDTH = 10000,\n EMPTY = Object.freeze([]),\n packer = new Packer();\n/**\n * This class positions events for a `DayView` by maximizing the visible area of each event. When events overlap, this\n * class determines the minimum amount of horizontal indent required for the overlapping events so that as much of\n * their content as possible is unobstructed.\n *\n * @extends Calendar/layout/day/DayLayout\n */\nexport default class FluidDayLayout extends DayLayout {\n static type = 'fluid';\n static configurable = {\n /**\n * The number of minutes of an event that must be (vertically) cleared by another event before it is\n * allowed to be significantly overlapped by it (horizontally).\n *\n * For example:\n *\n * ```text\n * >= clearanceMinutes < clearanceMinutes\n * +--------------+ +----------------+\n * | Event 1 | | Event 3 |\n * | 9am-11am | | 9am-11am +-------------+\n * | +----------------+ | | Event 4 |\n * | | Event 2 | | | 9:30am-12pm |\n * | | 10am-12pm | | | |\n * | | | | | |\n * +--| | +----------| |\n * | | | |\n * +----------------+ +-------------+\n * ```\n *\n * In the example above, the start time of Event 2 is more than `clearanceMinutes` after the start time of\n * Event 1, therefore it is displayed with a minimal indent from the left of Event 1. The start time of\n * Event 4, however, is less than `clearanceMinutes` after Event 3 and so they both share the space evenly.\n * @config {Number}\n * @default\n */\n clearanceMinutes : 45,\n /**\n * The maximum number of possible solutions to evaluate when calculating an event's width.\n * @config {Number}\n * @internal\n * @default\n */\n complexityLimit : 2000,\n /**\n * The number of minutes of an overlapping event that must be (vertically) cleared by another event before\n * it is allowed to be fully overlapped by it (horizontally). THis value is a number of minutes _beyond_\n * {@link #config-clearanceMinutes}. In other words, if `clearanceMinutes` is 45 and this config is set to\n * 75, the start time of an event must be two hours (45+75 = 120 minutes) after the prior event to fully\n * overlap it.\n *\n * For example:\n *\n * ```text\n * >= escapeMinutes < escapeMinutes\n * +----------------+ +----------------+\n * | Event 1 | | Event 5 |\n * | 9am-11am +-------------+ | 9am-11am +-------------+\n * | | Event 2 | | | Event 6 |\n * | | 9:30am-12pm | | | 9:30am-12pm |\n * | | | | | +-------------+\n * | + --------------------+ | | | Event 7 |\n * +--| Event 3 | +----------| | 10:15am |\n * | 10:30am | | | |\n * | | +--| |\n * +---------------------+ +-------------+\n * ```\n *\n * In the example above, the start time of Event 3 is more than `escapeMinutes` after the start time of\n * Event 2, therefore it is allowed to fully overlap the bottom of Event 2. As can be seen above, this does\n * not allow Event 3 to overlap the top-most overlapping event (Event 1). In the case of Event 7, the event\n * starts less than `escapeMinutes` after Event 6 and so the left edge of Event 6 remains exposed. The\n * positioning of Event 7 is determined by {@link #config-clearanceMinutes}.\n * @config {Number}\n * @default\n * @internal\n */\n escapeMinutes : null,\n /**\n * The number of pixels or proportion of the overall width to indent overlapping events that overlap by at\n * least {@link #config-clearanceMinutes}. Events that overlap by less than `clearanceMinutes` will split\n * the available space.\n *\n * Values less than 1 are the fractional proportion of the width (for example, 0.04 is 4% of the width),\n * while values greater than or equal to 1 are a number of pixels.\n * @config {Number}\n * @default\n * @internal\n */\n indentWidth : 10,\n /**\n * The maximum amount of width reduction due to overlapping items. If {@link #config-gutterWidth} is a\n * number of pixels, this value must also be in pixels (i.e., >= 1). Otherwise, this value is a proportional\n * value between 0 and 1.\n *\n * Even though this value limits the width reduction from overlapping items, it is possible that this\n * value exceeds the event width due to its nesting level (the number of prior events this event overlaps).\n * In this case, the {@link #config-staggerMinimum} value will prevent the width from becoming too small.\n * @config {Number}\n * @default\n * @internal\n */\n staggerMaximum : null,\n /**\n * This is the minimum width to which `staggerWidth` will size an event. For example, if an event has many\n * overlapping events, its width may be reduced a number of steps due to `staggerWidth`. This value limits\n * how much the event's width will be reduced.\n *\n * This value is expressed as a decimal proportion of the width of 1. For example, the value 0.4 is 40% of\n * the actual width. With this setting, the `staggerWidth` calculation will not reduce an event's width\n * below 40%.\n * @config {Number}\n * @default\n */\n staggerMinimum : 0.4,\n /**\n * When enabled, the width of an event is reduced in steps based on the number of events that overlap it.\n * Set this config to `false` or 0 to disable this effect.\n *\n * If this value is a boolean, the `gutterWidth` is used for the size of the reduction. If this value is a\n * number, it is the size of the reduction. For example, a value of 0.05 would cause an event to reduce in\n * steps of 5% width based on the number of events that overlap it. A number >= 1 is a number of pixels,\n * however, this is only valid if `gutterWidth` is also a number of pixels.\n *\n * By default, events are reduced by the `gutterWidth` based on the number of events that overlap them.\n * @config {Boolean|Number}\n * @default\n */\n staggerWidth : true,\n /**\n * Set this to `true` to use the full day width for events. By default, overlapping events equally split the\n * width.\n * @config {Boolean}\n * @default false\n */\n stretch : null\n };\n createLayoutContext(cellData, dayDomConfig) {\n const\n me = this,\n context = super.createLayoutContext(cellData, dayDomConfig),\n { staggerWidth } = me;\n // These values are consistent for all clusters in a given day, so cache them on the layout context (also\n // allows for event listeners to tweak these prior to our using them - lookin' at you timeRanges):\n return Object.assign(context, {\n indentWidth : LayoutDim.get(me.indentWidth),\n stagger : new LayoutDim(), // just a reused instance\n staggerMaximum : LayoutDim.from(me.staggerMaximum), // can be null\n staggerMinimum : me.staggerMinimum,\n staggerWidth : LayoutDim.from((staggerWidth === true) ? me.gutterWidth : staggerWidth),\n stretch : me.stretch\n });\n }\n layoutCluster(cluster /* , parentItem */) {\n const\n me = this,\n { context, items } = cluster,\n {\n indentWidth, stagger, staggerMaximum, staggerMinimum, staggerWidth, stretch\n } = context,\n treeLevels = me.treeify(items);\n me._assignSizes(items, treeLevels);\n for (const item of items) {\n /*\n +---------------------------------------+ :\n | | :\n | +-----------------------------------------+ :\n | | | :\n | | | :\n | | +-------------------------------------------+ :\n +------| | | :\n | | | :\n | | | :\n | +-------------------------------------------+ :\n | | :\n +-----------------------------------------+ ^ :\n | :\n ^ ^ |\n ^ | | | ^\n |<---->| |<------>|<------>|\n |indent| | stagger gutter |\n | |<--------------------------------------->| |\n | width |\n |<---------------------------------------------------------------->|\n root.w\n */\n const\n // { children } = item.eventRecord,\n depth = item.depth,\n left = new LayoutDim(),\n width = new LayoutDim(),\n root = item.majorParent || item;\n for (const k of stagger) {\n stagger[k] = staggerWidth[k] * (depth.height + depth.overlap);\n stagger[k] = staggerMaximum?.[k] ? Math.min(staggerMaximum[k], stagger[k]) : stagger[k];\n }\n left.r = root.x + depth.minor * indentWidth.r * root.w;\n left.d = depth.minor * indentWidth.d;\n width.r = stretch ? 1 - left.r : (root.w - left.r + root.x);\n width.d = -left.d;\n // if (parentItem) {\n // left.r += parentItem.left.r;\n // left.d += parentItem.left.d + parentItem.width.d;\n //\n // width.r *= parentItem.blockWidth.r;\n // width.d += parentItem.blockWidth.d - parentItem.width.d;\n // }\n if (staggerMinimum) {\n // The staggerMinimum is a proportion of the ideal width, which is the column's width minus the left\n // edge (i.e., the width w/o accounting for stagger).\n item.minWidth = `calc(${staggerMinimum} * (${width}))`;\n }\n width.r -= stagger.r * root.w;\n width.d -= stagger.d;\n item.left = left;\n item.width = width;\n }\n }\n treeify(items) {\n const treeLevels = [];\n // Organize items as a tree where parents can have two kinds of children: minor overlap and major overlap.\n // The tree starts as a sorted list which can be seen as each parent having one child.\n for (let i = 0; i < items.length; i++) {\n this._addChild(items[i], i, treeLevels);\n }\n return treeLevels;\n }\n _addChild(item, order, treeLevels) {\n const\n me = this,\n { clearanceMinutes, escapeMinutes, stretch } = me,\n clearanceSeconds = clearanceMinutes * 60,\n escapeSeconds = clearanceSeconds + escapeMinutes * 60,\n overlapTolerance = (me.overlapTolerance || 0) * 60, // minutes => seconds\n isMinor = (a, b) => Math.abs(b.start - a.start) >= clearanceSeconds,\n scoreFn = item => item.depth.minor * 10 + item.depth.major * (stretch ? 1 : 0),\n depth = {\n // The true depth from the root of the tree, regardless of major/minor distinctions.\n depth : 0,\n // The number of steps up from the deepest minor child to this node.\n height : 0,\n // The number of steps up from the deepest major child to this node.\n heightMajor : 0,\n // The number of items this item overlaps. This happens when a node clears the end time of a higher\n // level node and is elevated. This ensures that the bottom of these overlapped events are exposed\n // by the staggered width of this item. See item 2 in example C below.\n overlap : 0,\n // The number of major overlaps for this item and its ancestry. More space is allocated in this case\n // then for minor overlaps. The number of minor overlaps per major overlap is held in \"clearanceScale\".\n major : 0,\n // The number of minor overlaps for this item and its ancestry. When there is sufficient content shown\n // for a parent, a child can be indented by much less without hiding those details. This minimal amount\n // of overlap is specified in seconds via \"clearanceSeconds\".\n minor : 0\n };\n // Each item's parent is determined below, but initially we assign items as root (left-most).\n item.parent = null;\n item.maxEnd = item.maxEndMajor = item.end;\n item.depth = depth;\n item.order = order;\n if (!treeLevels.length) {\n // Nothing much to do with the first item...\n treeLevels[0] = item;\n item.barriers = EMPTY;\n return;\n }\n let best = 0, // actual value isn't important when !parent, however we get warnings w/o assigning a value\n child, major, minor, p, parent, score;\n // The goal of this loop is to determine the best parent for item\n for (p of treeLevels) {\n child = p.lastItem || p;\n if (!me.overlaps(item, p, overlapTolerance, 'maxEnd')) {\n /*\n treeLevels\n [0] [1] [2] [3]\n +---------------+---------------+---------------+---------------+\n : +-----------+ : +-----------+ : : :\n : | | : | | : +-----------+ : +-----------+ :\n : | | : | | : | | : | | :\n : | | : +-----------+ : | | : | | :\n : | | : : | | : | | :\n : | | : +-----------+ : | | : +-----------+ :\n : +-----------+ : | item | : +-----------+ : :\n : : +-----------+ : : :\n If there is a tree level that item does not overlap, attach item there. We want to put item at the\n highest level of the tree (aka left-most) so we break the loop now.\n */\n parent = p.parent;\n major = true;\n break;\n }\n if (isMinor(item, child)) {\n /*\n treeLevels\n [0] [1] [2] [3]\n +---------------+---------------+---------------+---------------+\n : +-----------+ : +----------+ : : :\n : | | : | | : +----------+ : +----------+ :\n : | | : | | : | | : | | :\n : | | : | | : | +---------+ : | +---------+ :\n : | | : | | : | | | : | | | :\n : | | : | +---------+ : | | | : | | | :\n : | | : | | | : | | | : | | | :\n : | | : +-| item | : | | | : | | | :\n : | | : +---------+ : | | | : | | | :\n : | | : : | +---------+ : | +---------+ :\n : | | : : | | : | | :\n : | | : : | | : +----------+ :\n : +-----------+ : : +----------+ : :\n : : : : :\n If we have a minor overlap with a level, we want to attach item where we minimize the depth of the\n minor overlap. Set the minor flag to note that we should no longer consider major overlaps.\n */\n minor = true;\n if (major) {\n // The current candidate is a major overlap, so clear the major flag and reset parent so that we\n // pick this level as the initial best choice.\n major = false;\n parent = null;\n }\n for (/* empty */; child !== p; child = child.parent) {\n // For scoring purposes, we don't include \"escape\" climbing, just overlapping.\n if (me.overlaps(child, item, overlapTolerance)) {\n break;\n }\n }\n score = scoreFn(child);\n if (!parent || score < best) {\n // either we had no current winner (!parent) or this child has a better score (lower, like golf).\n parent = child;\n best = score;\n }\n }\n else if (!minor) {\n /*\n treeLevels\n [0] [1] [2] [3]\n +---------------+---------------+---------------+---------------+\n : +-----------+ : +-----------+ : : :\n : | | : | | : +-----------+ : +-----------+ : +-----------+\n : | | : | | : | | : | | : | |\n : | | : +-----------+ : | | : | parent <-------- item |\n : | | : : | | : | | : | |\n : | | : : | | : | | : +-----------+\n : | | : : | | : +-----------+ :\n : +-----------+ : : +-----------+ : :\n : : : : :\n If we have no minor overlaps (yet), the deepest (right-most) major overlap will be the parent\n */\n major = true;\n parent = p;\n }\n }\n // Since we have at least one item in treeLevels, the above loop will always end with the major or minor flag\n // set to true.\n if (major) {\n // In a major overlap parent could be null (if item does not overlap treeLevels[0])\n minor = 0;\n major = parent ? parent.depth.major + 1 : 0;\n p = parent = treeLevels[major - 1] || null;\n }\n else {\n // In a minor overlap parent will be the child item that we overlapped.\n p = parent.majorParent || parent;\n // Now account for escaping\n for (/* empty */; escapeSeconds && parent !== p; parent = parent.parent) {\n if (me.overlaps(parent, item, overlapTolerance) && item.start - parent.start < escapeSeconds) {\n break;\n }\n }\n minor = parent.depth.minor + 1;\n major = parent.depth.major;\n }\n // major is the number of major parent items (i.e., the depth including only major parents)\n // minor is the depth of the item below its major parent (!minor indicates that item is a major overlap)\n // p is the major parent (the parent that is not a minor overlap of another item)\n // parent is the immediate parent (maybe the major parent or a child)\n // p and parent may be null (when major = 0 and !minor)\n item.parent = parent;\n depth.major = major;\n depth.minor = minor;\n depth.depth = parent ? parent.depth.depth + 1 : 0;\n if (minor) { // now that major and minor are depths, only minor can be treated as a boolean\n item.majorParent = p;\n item.previousItem = p.lastItem;\n p.lastItem = item;\n }\n else {\n me._addMajor(item, treeLevels);\n }\n me._adjustOverlap(item);\n me._adjustParents(item);\n }\n _addMajor(item, treeLevels) {\n const\n me = this,\n { stretch } = me,\n level = item.depth.major;\n treeLevels[level] = item;\n item.barriers = me._getOverlaps(treeLevels, item, 1);\n if (stretch || item.barriers.length) {\n // Barriers are prior overlapping events that are deeper in the tree which restrict the width of item. If\n // these barrier events are in the list of barriers for items higher in the tree, replace them with this\n // item.\n //\n // To calculate stretch overlap we need to track all paths. For non-stretch mode, we can skip this for\n // items that have no barriers (in essence, these provide their contribution in heightMajor of the item's\n // depth). Further, this optimization is important for use cases with lots of overlapping events (see\n // https://github.com/bryntum/support/issues/3140)\n for (const prior of me._getOverlaps(treeLevels, item, -1)) {\n // Remove common barriers:\n const barriers = prior.barriers.filter(b => !item.barriers.includes(b));\n if (stretch || barriers.length < prior.barriers.length) { // if (we have common barriers)\n prior.barriers = barriers;\n barriers.push(item);\n }\n }\n }\n }\n _adjustOverlap(item) {\n if (item.depth.minor) {\n let overlap, p;\n for (p = item; p.depth.minor > 1; p = p.parent) {\n // empty\n }\n // p is the top-most minor child of item in our parent\n for (overlap = 0; (p = p.previousItem); /* empty */) {\n if (this.overlaps(p, item)) {\n overlap = Math.max(overlap, p.depth.height + p.depth.overlap + 1);\n }\n }\n item.depth.overlap = overlap;\n }\n }\n _adjustParents(item) {\n const\n { depth, end } = item,\n level = depth.minor + depth.overlap;\n for (let parentDepth, p = item; (p = p.parent); /* empty */) {\n parentDepth = p.depth;\n if (parentDepth.major !== depth.major) {\n parentDepth.heightMajor = Math.max(parentDepth.heightMajor, depth.major - parentDepth.major);\n continue;\n }\n // Update the parent's maxEnd to include the new child\n p.maxEnd = Math.max(p.maxEnd, end);\n // Also update the height of all parent nodes to account for the new child\n while (parentDepth.height < level - parentDepth.minor) { // may be > 1 loop w/overlap\n ++parentDepth.height;\n if (parentDepth.overlap) {\n --parentDepth.overlap;\n }\n }\n }\n }\n _assignSizes(items, treeLevels) {\n const\n { complexityLimit, stretch } = this,\n topLevelItems = items.filter(it => !it.depth.minor);\n if (!complexityLimit) {\n packer.pack(topLevelItems);\n for (const item of topLevelItems) {\n item.x /= COLUMN_WIDTH;\n item.w /= COLUMN_WIDTH;\n }\n }\n else {\n for (const item of topLevelItems) {\n const\n paths = item.barriers.map(b => [b]),\n { parent } = item,\n height = item.depth.heightMajor + 1; // the height of this subtree; +1 to include item\n item.x = parent ? parent.x + parent.w : 0;\n let\n w = (1 - item.x) / height, // best-case width (excluding prior overlapping events)\n i, include, longest, path, tail, v, x;\n if (paths.length) {\n // Here we are treating the prior overlapping events as children of a sort, which converts our\n // tree into a DAG (directed, acyclic graph). We want to consider all paths from item to terminal\n // items in the DAG (items with no children). Each path provides a possible space allocation. It\n // is the minimum space allocation we are after.\n for (i = 0; i < paths.length;) {\n path = paths[i];\n longest = longest || path; // may hit complexityLimit or never improve on best case\n if (i > complexityLimit) {\n w = 1 / treeLevels.length; // worst-case width\n break;\n }\n tail = path[path.length - 1];\n if (tail.order < item.order) {\n // A path is a terminal path if the tail item is a prior event (order is just a number like\n // 1, 2, 3, etc. that we set on each event as we process it).\n ++i;\n x = tail.x; // that prior event has an x coordinate, so we must not overlap it\n include = 0; // do not include the tail event as we divvy up the space\n }\n else if (!tail.barriers.length) {\n // The tail event has no barriers, but because item is prior to tail, tail has no x value\n // determined yet.\n ++i;\n x = 1; // divvy up all remaining space\n include = 1; // but include the tail item in the split\n }\n else {\n // There could be too many levels to the tree to directly recurse, so we just replace this\n // non-terminal path with the set of paths that include the next layer. These may be either\n // terminal, non-terminal or both, but we'll explore them by not incrementing \"i\".\n paths.splice(i, 1, ...tail.barriers.map(b => path.concat(b)));\n if (longest === path) {\n longest = null; // non-terminal path cannot be the longest path\n }\n continue;\n }\n v = (x - item.x) / (include + path.length); // the width of item for this path\n if (v < w) {\n w = v;\n longest = path;\n }\n }\n if (stretch) {\n // In stretch mode, the idea is to expand the width of columns to cover the width of the view,\n // but we need to account for overlapping items in the way. We use the longest path (the path\n // that determined the item's width) to calculate additional overlaps for this item and its\n // minor children:\n v = longest.reduce((s, it) => s + it.depth.height + 1, 0); // sum of minor stacking depths\n for (i = item.lastItem; i; i = i.previousItem) {\n i.depth.overlap += v;\n }\n item.depth.overlap += v;\n }\n }\n item.w = w;\n }\n }\n }\n _getOverlaps(treeLevels, item, step) {\n const\n { end } = item, // item has no minor children yet, so end === maxEnd for item...\n stop = (step < 0) ? -1 : treeLevels.length;\n let { start } = item,\n i, other, ret;\n for (i = item.depth.major + step; i !== stop && start < end; i += step) {\n other = treeLevels[i];\n /*\n Consider (step = 1):\n other[1] other[2] other[3]\n -+- other.start\n | -+-\n | | -+-\n item | | |\n start -+- | | |\n | -+- other.end | |\n | -+- -+-\n |\n end -+-\n item overlaps other[1] and other[2] but not other[2] because you cannot draw a horizontal line that\n intersects item and other[3] w/o crossing through other[0] or other[1].\n Consider (step = -1):\n other[-3] other[-2] other[-1]\n -+- other.start\n | -+-\n | | -+- item\n | | | -+- start\n | | | |\n | -+- -+- |\n | -+- end\n -+- other.end\n In the reverse case, we are likewise looking for items that pass the horizontal line test. So the\n overlaps are other[-1] and other[-3].\n */\n if (start < other.maxEnd && other.start < end) {\n (ret || (ret = [])).push(other);\n start = other.maxEnd;\n }\n }\n return ret || EMPTY;\n }\n}\nFluidDayLayout.initClass();\nFluidDayLayout._$name = 'FluidDayLayout';", "import Base from '../../Core/Base.js';\nimport ProjectConsumer from '../../Scheduler/data/mixin/ProjectConsumer.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport CrudManager from '../data/CrudManager.js';\nimport ProjectModel from '../model/ProjectModel.js';\nimport TimeRangeModel from '../model/TimeRangeModel.js';\nimport TimeZoneHelper from '../../Core/helper/TimeZoneHelper.js';\nimport ResourceTimeRangeModel from '../../Scheduler/model/ResourceTimeRangeModel.js';\n/**\n * @module Calendar/mixin/CalendarStores\n */\n/**\n * Functions for store assignment and store event listeners.\n *\n * @mixin\n * @extends Scheduler/data/mixin/ProjectConsumer\n */\nexport default Target => class CalendarStores extends ProjectConsumer(Target || Base) {\n static $name = 'CalendarStores';\n static configurable = {\n /**\n * The calendar ({@link Scheduler.model.ResourceModel Resource}), (or its `id`) to use as the\n * default calendar for new events created using {@link Calendar.view.Calendar#config-autoCreate dblclick}\n * or {@link Calendar.feature.CalendarDrag drag-create}, or {@link Calendar.feature.ExternalEventSource dragging in}.\n *\n * May be specified as the `id` of an existing resource, or a resource record that is present in the project.\n *\n * If not specified, the first record in the {@link #property-resourceStore} will be used.\n *\n * If specified as `null`, then new events created using {@link Calendar.view.Calendar#config-autoCreate dblclick}\n * or {@link Calendar.feature.CalendarDrag drag-create}, or {@link Calendar.feature.ExternalEventSource dragging in}\n * will not be automatically assigned a calendar.\n * @config {String|Scheduler.model.ResourceModel}\n */\n defaultCalendar : null,\n /**\n * Class that should be used to instantiate a CrudManager in case it's provided as a simple object to\n * {@link #config-crudManager} config.\n * @config {Scheduler.data.CrudManager}\n * @category Data\n */\n crudManagerClass : CrudManager,\n /**\n * Get/set the CrudManager instance\n * @member {Scheduler.data.CrudManager} crudManager\n * @category Data\n */\n /**\n * Supply a {@link Scheduler.data.CrudManager} instance or a config object if you want to use\n * CrudManager for handling data.\n * @config {CrudManagerConfig|Scheduler.data.CrudManager}\n * @category Data\n */\n crudManager : null,\n /**\n * Set to a time zone or a UTC offset. This will set the projects\n * {@link Scheduler.model.ProjectModel#config-timeZone} config accordingly. As this config is only a referer,\n * please se project's config {@link Scheduler.model.ProjectModel#config-timeZone documentation} for more\n * information.\n *\n * ```javascript\n * new Calendar(){\n * timeZone : 'America/Chicago'\n * }\n * ```\n * @config {String|Number} timeZone\n * @category Misc\n */\n timeZone : {\n // Don't ingest the config eagerly because it relies on project being present.\n // Lazy means it waits for ingestion until timeZone property is referenced.\n $config : 'lazy',\n value : null\n }\n };\n static defaultConfig = {\n projectModelClass : ProjectModel\n };\n //region Default config\n // This is the static definition of the Stores we consume from the project, and\n // which we must provide *TO* the project if we or our CrudManager is configured\n // with them.\n // The property name is the store name, and within that there is the dataName which\n // is the property which provides static data definition. And there is a listeners\n // definition which specifies the listeners *on this object* for each store.\n //\n // To process incoming stores, implement an updateXxxxxStore method such\n // as `updateEventStore(eventStore)`.\n //\n // To process an incoming Project implement `updateProject`. __Note that\n // `super.updateProject(...arguments)` must be called first.__\n static get projectStores() {\n return {\n resourceStore : {\n dataName : 'resources',\n // eslint-disable-next-line bryntum/no-listeners-in-lib\n listeners : {\n changePreCommit : 'onCalendarStoreChange'\n }\n },\n eventStore : {\n dataName : 'events',\n // eslint-disable-next-line bryntum/no-listeners-in-lib\n listeners : {\n changePreCommit : 'onCalendarStoreChange'\n }\n },\n assignmentStore : {\n dataName : 'assignments'\n },\n timeRangeStore : {\n dataName : 'timeRanges',\n modelClass : TimeRangeModel\n },\n resourceTimeRangeStore : {\n dataName : 'resourceTimeRanges',\n modelClass : ResourceTimeRangeModel\n }\n };\n }\n /**\n * Inline events, will be loaded into the {@link #property-eventStore}.\n * @prp {Scheduler.model.EventModel[]|EventModelConfig[]} events\n * @category Data\n */\n /**\n * The {@link Scheduler.data.EventStore} or a reconfiguring object for a store which will hold\n * the events to be rendered into the Calendar.\n * @config {Scheduler.data.EventStore|EventStoreConfig} eventStore\n * @category Data\n */\n /**\n * The {@link Scheduler.data.EventStore} holding the events to be rendered into the Calendar.\n * @member {Scheduler.data.EventStore} eventStore\n * @readonly\n * @category Data\n */\n /**\n * Inline resources, will be loaded into the {@link #property-resourceStore}.\n * @prp {Scheduler.model.ResourceModel[]|ResourceModelConfig[]} resources\n * @category Data\n */\n /**\n * The {@link Scheduler.data.ResourceStore} or a reconfiguring object for a store which will hold the resources to be rendered into the Calendar.\n * @config {Scheduler.data.ResourceStore|ResourceStoreConfig} resourceStore\n * @category Data\n */\n /**\n * The {@link Scheduler.data.ResourceStore} holding the resources to be rendered into the Calendar.\n * @member {Scheduler.data.ResourceStore} resourceStore\n * @readonly\n * @category Data\n */\n /**\n * Inline assignments, will be loaded into the {@link #property-assignmentStore}.\n * @prp {Scheduler.model.AssignmentModel[]|AssignmentModelConfig[]} assignments\n * @category Data\n */\n /**\n * The {@link Scheduler.data.AssignmentStore} or a reconfiguring object for a store which will hold assignments linking resources to events.\n * @config {Scheduler.data.AssignmentStore|AssignmentStoreConfig} assignmentStore\n * @category Data\n */\n /**\n * The {@link Scheduler.data.AssignmentStore} holding assignments linking resources to events.\n * @member {Scheduler.data.AssignmentStore} assignmentStore\n * @readonly\n * @category Data\n */\n /**\n * Inline time ranges, will be loaded into the {@link #property-timeRangeStore}.\n *\n * Time ranges are rendered in Calendar {@link Calendar.widget.DayView} or\n * {@link Calendar.widget.WeekView} when the Calendar has the {@link Calendar.feature.TimeRanges}\n * feature enabled.\n *\n * Time ranges are rendered into a {@link Scheduler.view.Scheduler} subview when that subview\n * has the {@link Scheduler.feature.TimeRanges} feature enabled.\n *\n * @prp {Calendar.model.TimeRangeModel[]|TimeRangeModelConfig[]} timeRanges\n * @accepts {Calendar.model.TimeRangeModel[]|TimeRangeModelConfig[]}\n * @category Data\n */\n /**\n * The {@link Calendar.data.TimeRangeStore} or a reconfiguring object for a store which will hold time ranges.\n * These may be used by the {@link Calendar.feature.TimeRanges} feature.\n * @config {Calendar.data.TimeRangeStore|TimeRangeStoreConfig} timeRangeStore\n * @category Data\n */\n /**\n * The {@link Calendar.data.TimeRangeStore} holding time ranges.\n * These may be used by the {@link Calendar.feature.TimeRanges} feature.\n * @member {Calendar.data.TimeRangeStore} timeRangeStore\n * @readonly\n * @category Data\n */\n /**\n * Inline resource time ranges, will be loaded into {@link #property-resourceTimeRangeStore}.\n *\n * Resource time ranges are rendered in a Calendar {@link Calendar.widget.ResourceView} when the\n * Calendar has the {@link Calendar.feature.TimeRanges} feature enabled.\n *\n * Resource time ranges are rendered into a {@link Scheduler.view.Scheduler} subview when that subview\n * has the {@link Scheduler.feature.ResourceTimeRanges} feature enabled.\n *\n * @prp {Scheduler.model.ResourceTimeRangeModel[]|ResourceTimeRangeModelConfig[]} resourceTimeRanges\n * @accepts {Scheduler.model.ResourceTimeRangeModel[]|ResourceTimeRangeModelConfig[]}\n * @category Data\n */\n /**\n * The {@link Scheduler.data.ResourceTimeRangeStore} or a reconfiguring object for a store which will hold resource time ranges.\n * These may be used by the {@link Calendar.feature.TimeRanges} feature.\n * @config {Scheduler.data.ResourceTimeRangeStore|ResourceTimeRangeStoreConfig} resourceTimeRangeStore\n * @category Data\n */\n /**\n * The {@link Scheduler.data.ResourceTimeRangeStore} holding resource time ranges.\n * These may be used by the {@link Calendar.feature.TimeRanges} feature.\n * @member {Scheduler.data.ResourceTimeRangeStore} resourceTimeRangeStore\n * @readonly\n * @category Data\n */\n //endregion\n //region CrudManager\n changeCrudManager(crudManager) {\n const me = this;\n if (crudManager && !crudManager.isCrudManager) {\n const type = crudManager.type || me.crudManagerClass;\n // CrudManager injects itself into is Scheduler's _crudManager property\n // because code it triggers needs to access it through its getter.\n crudManager = type.new({\n scheduler : me\n }, crudManager);\n }\n // config setter will veto because of above described behaviour\n // of setting the property early on creation\n me._crudManager = crudManager;\n me.bindCrudManager?.(crudManager);\n }\n //endregion\n updateTimeZone(timeZone) {\n this.project.timeZone = timeZone;\n }\n get timeZone() {\n return this.project.timeZone;\n }\n // When project changes time zone, change Calendar date\n onBeforeTimeZoneChange({ timeZone, oldTimeZone }) {\n if (this.isConfiguring) {\n // Too early\n return;\n }\n const\n me = this,\n // Only one receiver of this event should change Calendar date.\n // The Calendar's activeView if we are inside a Calendar, or this view if not\n target = me.isCalendar ? me.activeView : (!me.calendar && me);\n // Only change view date if dayView\n if (target?.duration === 1) {\n // Get events in current dayView\n const currentEvents = target.events.filter(e => e.startDate >= target.startDate && e.endDate && e.endDate <= target.endDate);\n if (currentEvents.length) {\n // If there is events, calculate an average date of those events\n const\n eventsCenterMs = currentEvents.map(e => (e.startDate.getTime() + e.endDate.getTime()) / 2),\n avgCenterDate = new Date(Math.floor(eventsCenterMs.reduce((sum, e) => sum + e, 0) / eventsCenterMs.length)),\n // If already converted, revert that date to local time zone\n centerDateLocal = oldTimeZone != null ? TimeZoneHelper.fromTimeZone(avgCenterDate, oldTimeZone) : avgCenterDate,\n // And then convert it to the new time zone (or not)\n centerDateTZ = timeZone != null ? TimeZoneHelper.toTimeZone(centerDateLocal, timeZone) : centerDateLocal;\n // If different date from current, change\n if (centerDateTZ < target.startDate || centerDateTZ > target.endDate) {\n (target.calendar || target).date = centerDateTZ;\n }\n }\n }\n }\n // Need this to not run conversion in ProjectConsumer\n onTimeZoneChange() {}\n /**\n * The default Calendar to be used when creating new events which do not initially have a resource.\n *\n * This includes {@link Calendar.view.Calendar#config-autoCreate dblclick-created} events and\n * {@link Calendar.feature.CalendarDrag drag-created} events and\n * {@link Calendar.feature.ExternalEventSource dragged in} events.\n * @property {Scheduler.model.ResourceModel}\n */\n get defaultCalendar() {\n const\n { eventStore } = this,\n defaultCalendar = ObjectHelper.hasOwn(this, '_defaultCalendar') ? this._defaultCalendar : eventStore.defaultCalendarId;\n if (defaultCalendar !== null) {\n return defaultCalendar != undefined ? (defaultCalendar.isResourceModel ? defaultCalendar : eventStore.resourceStore.getById(defaultCalendar)) : eventStore.resourceStore.first;\n }\n }\n get defaultCalendarId() {\n return this.eventStore.modelClass.asId(this.defaultCalendar);\n }\n //region Project\n updateProject(project, oldProject) {\n super.updateProject(project, oldProject);\n const me = this;\n // Now is the time to force timeZone ingestion. When we have all our stores.\n me.getConfig('timeZone');\n me.detachListeners('CalendarStores');\n project.ion({\n name : 'CalendarStores',\n dataReady : 'onCalendarStoreChange',\n refresh : 'onProjectRefresh',\n thisObj : me\n });\n // Assigned a project at runtime\n if (!me.isConfiguring) {\n me.eachView(view => {\n view.project = project;\n });\n }\n }\n onProjectRefresh({ source : project, isInitialCommit }) {\n // Force reevaluation of date indices next time requested because the\n // initial project commit may have rescheduled the events.\n if (isInitialCommit) {\n project.eventStore.invalidateDayIndices();\n }\n }\n updateEventStore(eventStore) {\n // Decorate the eventStore's createRecord method to inject our defaultCalendar into new\n // events as the default resource.\n if (eventStore && !eventStore.isCalendarEventStore) {\n const storeOwner = this;\n Object.defineProperty(eventStore, 'defaultCalendar', {\n get : () => storeOwner.defaultCalendar\n });\n eventStore.isCalendarEventStore = true;\n // Events should stay available when they are deassigned unless requested otherwise\n if (!('removeUnassignedEvent' in eventStore.initialConfig)) {\n eventStore.removeUnassignedEvent = false;\n }\n }\n }\n //endregion\n //region WidgetClass\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n //endregion\n};\n", "/**\n * @module Calendar/util/EventSlots\n */\n/**\n * An Array which allows prefilling of some slots and automatic filling\n * of vacant slots.\n *\n * Used by the Calendar to fill event slots in day cells in the MonthView\n * @internal\n */\nexport default class EventSlots extends Array {\n firstFreeSlot = 0;\n set(index, event) {\n const me = this;\n if (index == null) {\n return me.add(event);\n }\n else {\n me[index] = event;\n }\n // Stepped on the first free slot pointer, move it on.\n if (me.firstFreeSlot === index) {\n // Move onwards while the pointer references an occupied slot\n while (me[me.firstFreeSlot]) {\n me.firstFreeSlot++;\n }\n }\n }\n add(event) {\n const result = this.firstFreeSlot;\n this[result] = event;\n // Move onwards while the pointer references an occupied slot\n while (this[this.firstFreeSlot]) {\n this.firstFreeSlot++;\n }\n return result;\n }\n setEvents(events) {\n const length = this.length = this.firstFreeSlot = events.length;\n for (let i = 0; i < length; i++) {\n this[i] = events[i];\n }\n }\n}\nEventSlots._$name = 'EventSlots';", "import Base from '../../Core/Base.js';\n/**\n * @module Calendar/util/EventSorter\n */\n/**\n * This class contains methods to sort events into appropriate order within a day for display\n * in all contexts.\n *\n * Whenever a day's events are rendered, those events are sorted with {@link #function-defaultSorterFn-static} method.\n */\nexport default class EventSorter extends Base {\n /**\n * This sorting method implement following rules:\n *\n * 0. Unscheduled events go before scheduled ones\n * 1. Compare by floored start date\n * 2. If equal, compare by floored duration\n * 3. If equal, compare by start date\n * 4. If equal, compare by duration\n * @param {Scheduler.model.EventModel|EventBar} event1\n * @param {Scheduler.model.EventModel|EventBar} event2\n * @returns {Number}\n */\n static defaultSorterFn(event1, event2) {\n // Handle event wrapping which is what MonthView does.\n event1 = event1.eventRecord || event1;\n event2 = event2.eventRecord || event2;\n const\n { startDate : start1 } = event1,\n { startDate : start2 } = event2;\n // Unscheduled events sort to the top.\n if (!start1) {\n return -1;\n }\n if (!start2) {\n return 1;\n }\n // Sort by start timestamp first, then duration.\n // This is *in-cell* sorting.\n return start1 - start2 || event2.durationMS - event1.durationMS;\n }\n /**\n * This sorting method implement following rules:\n *\n * 0. Unscheduled events go before scheduled ones\n * 1. An {@link Scheduler.model.EventModel#property-isInterDay} event sorts before events that are not.\n * 2. Compare floored start date, if the events have different values\n * 3. Compare floored duration, if the events have different values\n * 4. Compare start date, if the events have different values\n * 5. Compare duration\n *\n * This is used by {@link Calendar.widget.MonthView} and {@link Calendar.widget.AgendaView} since these views mix\n * both interday and intraday events in the same view but render them differently.\n * @param {Scheduler.model.EventModel|EventBar} event1\n * @param {Scheduler.model.EventModel|EventBar} event2\n * @returns {Number}\n * @internal\n */\n static interDaySorterFn(event1, event2) {\n // Handle event wrapping which is what MonthView does.\n event1 = event1.eventRecord || event1;\n event2 = event2.eventRecord || event2;\n const\n {\n startDate : start1,\n isInterDay : event1InterDay\n } = event1,\n {\n startDate : start2,\n isInterDay : event2InterDay\n } = event2;\n // Unscheduled events sort to the top.\n if (!start1) {\n return -1;\n }\n if (!start2) {\n return 1;\n }\n // InterDay events sort to the top (https://github.com/bryntum/support/issues/1693).\n if (event1InterDay !== event2InterDay) {\n return Number(event2InterDay) - Number(event1InterDay);\n }\n // If both events fit inside one day cell, the only sort order we care about is start time.\n if (!event1InterDay && !event2InterDay) {\n return start1 - start2;\n }\n // Sort Duration (longest first), then by ending date (furthest in future first), then by start timestamp.\n // This is *in-cell* sorting.\n return event2.durationMS - event1.durationMS || event2.endingDate - event1.endingDate || start1 - start2;\n }\n}\nEventSorter._$name = 'EventSorter';", "import Base from '../../Core/Base.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\n/**\n * @module Calendar/mixin/SchedulerInterface\n */\nconst\n hasEventStore = w => w.isCalendarMixin && w.eventStore,\n eventNameSplitter = /(touch|mouse|pointer|key|context|dbl)(.*)/,\n eventPartReplacer = (match, prefix, remainder) => `${StringHelper.capitalize(prefix)}${StringHelper.capitalize(remainder)}`,\n capitalizeEvent = domEvent => domEvent.type.replace(eventNameSplitter, eventPartReplacer);\n/**\n * Exposes an interface similar to a {@link Scheduler.view.Scheduler} so that Calendar Features which\n * extend Scheduler Features can treat their client in a standard manner.\n * @private\n * @mixin\n */\nexport default Target => class SchedulerInterface extends (Target || Base) {\n static get $name() {\n return 'SchedulerInterface';\n }\n /**\n * Determines what is under the cursor of the specified event or what is described by the given element.\n * @param {Event|Element} domEvent The event or element\n * @returns {CalendarHit}\n */\n calendarHitTest(domEvent) {\n const\n { activeView } = this,\n target = DomHelper.getEventElement(domEvent);\n return activeView?.element.contains(target) ? activeView.calendarHitTest(domEvent) : null;\n }\n // Hack to expose part of the Scheduler API that features and mixins inherited from Scheduler use.\n get timeAxis() {\n const me = this;\n if (!me._timeAxis) {\n me._timeAxis = {\n get startDate() {\n return me.activeView.startDate;\n },\n get endDateDate() {\n return me.activeView.endDate;\n },\n isTimeSpanInAxis(event) {\n return DateHelper.intersectSpans(event.startDate, event.endDate, this.startDate, this.endDate);\n }\n };\n }\n return this._timeAxis;\n }\n // Hack to expose part of the Scheduler API that features use.\n get timeAxisViewModel() {\n const me = this;\n if (!me._timeAxisViewModel) {\n me._timeAxisViewModel = {\n get timeResolution() {\n return me.activeView.timeResolution || {};\n }\n };\n }\n return this._timeAxisViewModel;\n }\n /**\n * Interface method required for navigation/selection.\n * Returns the event record for a DOM element.\n * @param {HTMLElement|Event} elementOrEvent The DOM node to lookup, or a DOM event whose target to lookup.\n * @returns {Scheduler.model.EventModel} The event record\n */\n resolveEventRecord(elementOrEvent) {\n if (elementOrEvent instanceof Event) {\n elementOrEvent = elementOrEvent.target;\n }\n const activeClient = this.constructor.fromElement(elementOrEvent)?.closest(hasEventStore);\n return activeClient?.getEventRecord(elementOrEvent);\n }\n /**\n * Interface method required for navigation/selection\n * Assignment not supported in Calendar.\n * @private\n */\n resolveAssignmentRecord() {\n }\n /**\n * Interface method required for navigation/selection.\n * Returns the resource (calendar) record for a DOM element.\n * @param {HTMLElement|Event} elementOrEvent The DOM node to lookup, or a DOM event whose target to lookup.\n * @returns {Scheduler.model.ResourceModel} Any corresponding event record's resource if any.\n */\n resolveResourceRecord(elementOrEvent) {\n const { activeView } = this;\n // For a resource view, return the subView's configured resource.\n // If the target element is within an overflow popup, the subView is the popup's owner.\n // Otherwise, just look up the DOM parentNode axis to find an instance of the view type.\n if (activeView.isResourceView) {\n const\n element = elementOrEvent.nodeType === Node.ELEMENT_NODE ? elementOrEvent : elementOrEvent.target,\n sourcePopup = element.closest('.b-overflowpopup'),\n subView = sourcePopup ? bryntum.fromElement(sourcePopup, 'overflowpopup').owner : bryntum.fromElement(elementOrEvent, activeView.viewType.type);\n if (subView) {\n return subView.resource;\n }\n }\n return this.resolveEventRecord(elementOrEvent)?.resource;\n }\n handleEvent(domEvent) {\n // Map event names, eg: contextmenu -> ContextMenu\n const eventName = capitalizeEvent(domEvent);\n // We are a Grid. Our superclass handleEvent distributes to onElementXxxx\n // This is called directly as part of the GridElementEvents mixin\n if (super.handleEvent) {\n super.handleEvent(domEvent);\n }\n // We are a regular CalendarMixin. We implement the interface of the Feature host as defined\n // in GridElementEvents.\n // We get here via Calendar's onViewCatchAll which directs allDomEvents through here\n // so ensure we only process each domEvent once.\n // For example, contextmenu in a Scheduler causes schedulecontextmenu\n // and cellcontextmenu both from the same initial DOM event.\n else if (!domEvent.handled && !domEvent.schedulerRedirected) {\n if (this.trigger(`beforeElement${eventName}`, { event : domEvent }) !== false) {\n this[`onElement${eventName}`]?.(domEvent);\n }\n // Sets this flag to avoid double invocation\n domEvent.schedulerRedirected = true;\n }\n }\n onInternalKeyDown(domEvent) {\n this.onCalendarPointerInteraction?.(domEvent);\n }\n getCellDataFromEvent(domEvent) {\n return super.getCellDataFromEvent?.(domEvent);\n }\n getDateFromDomEvent(domEvent) {\n const activeClient = this.constructor.fromElement(domEvent)?.closest(hasEventStore);\n if (activeClient) {\n return activeClient.getDateFromDomEvent(domEvent);\n }\n }\n getDateFromXY(xy, roundingMethod, local = true, allowOutOfRange) {\n const activeClient = this.activeSubView;\n if (activeClient) {\n return activeClient.getDateFromPosition(xy[0] - globalThis.scrollX, xy[1] - globalThis.scrollY, local);\n }\n }\n // Used by shared feature code.\n // Route to view's create implementation.\n createEvent() {\n this.activeView.createEvent(...arguments);\n }\n // It's fixed to be enabled for now\n get enableRecurringEvents() {\n return true;\n }\n // Used by shared feature code. Not relevant in Calendar\n getRowFor() { }\n // Used by shared feature code. Could implement if needed.\n suspendRefresh() { }\n // Used by shared feature code. Could implement if needed.\n resumeRefresh() { }\n get widgetClass() {}\n};\n", "import Base from '../../../Core/Base.js';\nimport DomClassList from '../../../Core/helper/util/DomClassList.js';\nimport DomHelper from '../../../Core/helper/DomHelper.js';\nimport StringHelper from '../../../Core/helper/StringHelper.js';\nimport DH from '../../../Core/helper/DateHelper.js';\n/**\n * @module Calendar/widget/mixin/EventRenderer\n */\nconst emptyString = new String('');\n/**\n * Mixin that can be used to generate DomConfig blocks for events.\n *\n * @mixin\n */\nexport default Target => class EventRenderer extends (Target || Base) {\n static $name = 'EventRenderer';\n static configurable = {\n /**\n * A function, or the name of a function in the ownership hierarchy which you\n * can specify to customize event DOM content.\n *\n * This function is called each time an event is rendered to allow developers to mutate\n * the cell metadata, or the CSS classes to be applied to the event element.\n *\n * It's called with the event record, and a eventData object which allows you to mutate event metadata\n * such as `cls`, `style`.\n *\n * The `cls` property is an object whose property names will be added to the event element if the property\n * value is truthy.\n *\n * The `style` property is an object containing style properties for the event element.\n *\n * A non-null return value from the renderer is used as the event body content. A nullish\n * return value causes the default renderer to be used which just uses the event name.\n *\n * If a string is returned, it is used as the HTML content of the event body element.\n *\n * If an object is returned, it is used as a {@link Core.helper.DomHelper#typedef-DomConfig} object to\n * create complex content in the event body element.\n *\n * ```javascript\n * eventRenderer({ eventRecord, renderData }) {\n * if (eventRecord.name === 'Doctors appointment') {\n * eventData.style.fontWeight = 'bold';\n * eventData.cls['custom-cls'] = 1;\n *\n * return 'Special doctors appointment';\n * }\n * }\n * ```\n *\n * IMPORTANT: When returning content, be sure to consider how that content should be encoded to avoid XSS\n * (Cross-Site Scripting) attacks. This is especially important when including user-controlled data such as\n * the event's `name`. The function {@link Core.helper.StringHelper#function-encodeHtml-static} as well as\n * {@link Core.helper.StringHelper#function-xss-static} can be helpful in these cases.\n *\n * For example:\n *\n * ```javascript\n * eventRenderer({ eventRecord }) {\n * return StringHelper.xss`Event: ${eventRecord.name}`;\n * }\n * ```\n *\n * @param {Object} detail An object that contains data about the event being rendered\n * @param {Calendar.widget.mixin.CalendarMixin} detail.view The view rendering the event\n * @typings detail.view -> {typeof CalendarMixin}\n * @param {Scheduler.model.EventModel} detail.eventRecord The event record\n * @param {Scheduler.model.ResourceModel} detail.resourceRecord The event record\n * @param {Object} detail.renderData A data object containing properties that will be used to create the event element\n * @param {Object} detail.renderData.style The style property is an object containing style properties for the event element\n * @param {Object} detail.renderData.cls The cls property is an object whose property names will be added to\n * the event element if the property value is truthy\n * @param {Object} detail.renderData.iconStyle The iconStyle property is an object containing style properties for\n * the icon element if an icon element is to be used\n * @param {Object} detail.renderData.iconCls The iconCls property is an object whose property names will be added to\n * the icon element. Initially set from the event record's {@link Scheduler.model.EventModel#field-iconCls}.\n * Can be mutated by the renderer. If null, or no properties are set, no icon will be rendered\n * @param {String} detail.renderData.eventColor Color to be applied to the event\n * @param {Object} detail.renderData.dataset An object which produces the `dataset` of the resulting event bar\n * @param {Boolean} detail.renderData.solidBar This is valid for views which create event bars.\n * This is set to `true` by default for all day and interday events so that these appear as a solid block of background color.\n * An eventRenderer may mutate this flag to change in what manner the event bar is coloured - as a solid bar of colour,\n * or using the foreground colour (text and icons) such as the MonthView, the CalendarRow (all day events in a DayView), and OverflowPopups\n * @param {String} detail.renderData.bodyColor When used in a {@link Calendar.widget.DayView},\n * this color is applied to the body of the event element. Note that this must be light enough\n * that the text colour (From the SASS variable `$dayview-event-color`) is visible\n * @param {Boolean} detail.showBullet If there is no `iconCls`, and the event is not recurring, then by default\n * a \"bullet\" circular icon is shown if the view's {@link Calendar.widget.mixin.CalendarMixin#config-showBullet}\n * if set. Setting this property in an event renderer overrides this behaviour.\n * @returns {DomConfig|DomConfig[]|String|null}\n * @config {Function|String}\n */\n eventRenderer : null,\n /**\n * If this is set to `true`, then when determining which assigned resource of a multi assigned event\n * to use to create the event UI, the first resource which is still selected in the\n * {@link Calendar.widget.Sidebar#property-resourceFilter} is used.\n *\n * The default is to use the first resource in the assigned list.\n *\n * The resource's {@link Scheduler.model.ResourceModel#field-eventColor} is used as the colour for the\n * event unless the event has its own {@link Scheduler.model.EventModel#field-eventColor}.\n *\n * The resource's {@link Scheduler.model.ResourceModel#field-eventStyle} is used as the base of the style\n * for the event, and the event's {@link Scheduler.model.EventModel#field-style} is applied to it.\n * @prp {Boolean}\n */\n filterEventResources : null,\n /**\n * A Function (or name of a function in the ownership hierarchy) which returns the\n * {@link Scheduler.model.ResourceModel resource record} to use to create the UI for an event.\n *\n * The resource's {@link Scheduler.model.ResourceModel#field-eventColor} is used as the colour for the\n * event unless the event has its own {@link Scheduler.model.EventModel#field-eventColor}.\n *\n * The resource's {@link Scheduler.model.ResourceModel#field-eventStyle} is used as the base of the style\n * for the event, and the event's {@link Scheduler.model.EventModel#field-style} is applied to it.\n *\n * For views which are linked to a single resource such as `ResourceView` and `DayResourceView`, the\n * default implementation always returns the view's resource.\n *\n * If multi assignment is used, the default is to pick the first resource in the assigned resource list.\n *\n * If this view's {@link #property-filterEventResources} is `true`,\n * then the first assigned event which is still filtered __in__ is chosen.\n *\n * An implementation of this function may be configured in to your {@link Calendar.view.Calendar#config-modes}\n * to customize how the resource is chosen from a multi assigned event.\n *\n * @config {Function|String} [getPrimaryResource]\n * @param {Scheduler.model.EventModel} eventRecord The event from which to extract the primary resource.\n * @returns {Scheduler.model.ResourceModel} The resource to be used to render the event.\n */\n getPrimaryResource({ resources }) {\n // If we are a view type which shows events only for one resource, choose that\n // as the primary resource for the event\n if (this.resource) {\n return this.resource;\n }\n // Normally, just pick the first resource.\n // If filterEventResources is set, we pick the first one which is still selected in the ResourceFilter\n if (resources.length) {\n const resourceFilter = this.filterEventResources && this.calendar?.widgetMap?.resourceFilter;\n return resourceFilter ? resources.find(r => resourceFilter.selected.includes(r)) : resources[0];\n }\n }\n };\n // Must refresh when renderer changes\n updateEventRenderer() {\n this.refreshSoon();\n }\n /**\n * This is the standard way to create a {@link Core.helper.DomHelper#typedef-DomConfig}\n * element definition object for creating event bars in all view types.\n *\n * This may be used by application code which needs to create DOM structure for event bars, such\n * as in custom cell renderers in an {@link Calendar.widget.AgendaView}.\n *\n * @param {Object} renderData Context for the event bar config creation.\n * @param {Scheduler.model.EventModel} renderData.eventRecord The event record to create a {@link DomConfig} block for.\n * @param {Boolean} renderData.minimal If this is set, no inner content is rendered, only\n * the wrap and body element. This is to enable rendering placeholders such as bullets\n * to represent the presence of events.\n * @param {Date} renderData.date The date to create th DOM config for.\n * @param {Date} [renderData.eventEndDate] An optional override to the event's ending date.\n * @param {Function} [eventRenderer] Optionally a function which created content HTML for the\n * event body. Defaults to any {@link #config-eventRenderer} configured into this view.\n * @returns {DomConfig} A {@link Core.helper.DomHelper#typedef-DomConfig} element definition object\n */\n createEventDomConfig(renderData, eventRenderer = this.eventRenderer) {\n const\n me = this,\n {\n eventHeight,\n intradayCls,\n alldayCls,\n solidBarCls,\n pastEventCls,\n showTime,\n timeFormat,\n rtl\n } = me,\n calendar = me.up('calendar'),\n {\n eventRecord,\n minimal\n } = renderData,\n eventEndDate = renderData.eventEndDate || eventRecord.endingDate,\n resourceRecord = me.callback(me.getPrimaryResource, me, [eventRecord.isOccurrence ? eventRecord.recurringEvent : eventRecord]),\n isRecurring = eventRecord.isRecurring || eventRecord.isOccurrence,\n isAllDay = ('isAllDay' in renderData) ? renderData.isAllDay : me.isAllDayEvent?.(eventRecord),\n eventInnerStyle = {\n height : eventHeight !== 'auto' ? DomHelper.setLength(eventHeight) : null\n },\n eventSelectedCls = calendar?.eventSelectedCls,\n dataset = renderData.dataset = {\n eventId : eventRecord.id\n },\n eventStyle = Object.assign(DomHelper.parseStyle(resourceRecord?.eventStyle), DomHelper.parseStyle(eventRecord.style));\n let color = eventRecord.color || eventRecord.eventColor || resourceRecord?.eventColor || emptyString;\n // Make DomClassList copies for renderers to mutate.\n // We add our essential classes in after the renderer has run\n // then use these in the DomConfig object\n renderData.cls = eventRecord.cls.clone();\n renderData.solidBar = isAllDay || minimal;\n renderData.iconStyle = me.iconTarget === 'header' && me.showTime && !DomHelper.isNamedColor(color) ? { color } : {};\n renderData.iconCls = new DomClassList(eventRecord.iconCls); // Not a DomClassList, so not cloneable\n renderData.style = eventStyle;\n renderData.eventColor = color;\n renderData.eventHeight = eventHeight;\n renderData.cls[me.shortEventCls] = eventRecord.durationMS <= me.shortEventDuration;\n renderData.bodyStyle = {};\n if (resourceRecord?.cls) {\n renderData.cls.add(resourceRecord.cls);\n }\n // Allow subclasses to create body content differently.\n // DayView will create different content layout.\n let bodyContent = me.internalBodyContentRenderer(eventRecord, resourceRecord, renderData, !minimal && eventRenderer) ?? '',\n complexContent = typeof bodyContent !== 'string';\n if (eventRenderer && !minimal) {\n // Allow renderer to change the event height\n if (renderData.eventHeight !== eventHeight) {\n eventInnerStyle.height = DomHelper.setLength(renderData.eventHeight);\n }\n // If the renderer has replaced the DomClassList with a string, promote back to a DomClassList\n if (typeof renderData.cls === 'string') {\n renderData.cls = new DomClassList(renderData.cls);\n }\n // Same goes for iconCls\n if (typeof renderData.iconCls === 'string') {\n renderData.iconCls = new DomClassList(renderData.iconCls);\n }\n // If the renderer set it to be a string, reinstate it as an object so we can add our essential styles\n if (typeof renderData.style === 'string') {\n renderData.style = DomHelper.parseStyle(renderData.style);\n }\n // If the renderer set it to be a string, reinstate it as an object so we can add our essential styles\n if (typeof renderData.bodyStyle === 'string') {\n renderData.bodyStyle = DomHelper.parseStyle(renderData.bodyStyle);\n }\n }\n bodyContent = [{\n className : {\n 'b-cal-event-desc' : 1,\n 'b-cal-event-desc-complex' : complexContent\n },\n [complexContent ? 'children' : 'html'] : bodyContent\n }];\n // Add essential classes for eventWrap *after* the renderer has run\n Object.assign(renderData.cls, {\n 'b-cal-event-wrap' : 1,\n 'b-iscreating' : eventRecord.isCreating,\n 'b-readonly' : eventRecord.readOnly,\n 'b-minimal' : minimal,\n 'b-milestone' : eventRecord.isMilestone && !isAllDay,\n [alldayCls] : alldayCls && isAllDay,\n [solidBarCls] : solidBarCls && renderData.solidBar,\n [intradayCls] : intradayCls && !isAllDay,\n [pastEventCls] : pastEventCls && eventEndDate < new Date(),\n [eventSelectedCls] : eventSelectedCls && calendar?.isEventSelected(eventRecord),\n 'b-rtl' : rtl\n });\n color = renderData.eventColor;\n const { bodyColor } = renderData;\n if (bodyColor?.length) {\n renderData.cls['b-custom-body-color'] = 1;\n renderData.bodyStyle['--dayview-body-background-color'] = bodyColor;\n }\n if (color?.length) {\n // DomHelper.createColorStyle takes Non-CSS colors to be one of the predefined colors\n eventStyle['--cal-event-color'] = DomHelper.createColorStyle(color);\n }\n // All day event *bars* don't have a header.\n // But DayView can now be configured to not show the allDayHeader which means allDay events\n // go into tye day schedule as normal intraday event elements which *do* have a header.\n if (showTime && !(isAllDay && this.showAllDayHeader)) {\n bodyContent.unshift({\n className : 'b-event-header',\n children : [\n {\n className : 'b-event-time',\n html : DH.format(eventRecord.startDate, timeFormat)\n }\n ]\n });\n }\n const\n // Presence of icon classes triggers inclusion of an icon\n hasIcon = Boolean(renderData.iconCls?.length),\n useIconAsRecurrIcon = !hasIcon && isRecurring,\n showBullet = ('showBullet' in renderData) ? renderData.showBullet : me.showBullet === true || ((me.showBullet?.bar && renderData.solidBar) || (me.showBullet?.noBar && !renderData.solidBar)),\n showCircle = !hasIcon && !isRecurring && showBullet,\n iconElement = {\n tag : 'i',\n className : Object.assign({\n 'b-cal-event-icon' : !useIconAsRecurrIcon,\n 'b-cal-recurrence-icon' : useIconAsRecurrIcon,\n 'b-icon' : 1,\n 'b-fw-icon' : 1,\n 'b-icon-circle' : showCircle,\n 'b-icon-recurring' : useIconAsRecurrIcon\n }, renderData.iconCls),\n style : renderData.iconStyle\n },\n eventInnerContent = [{\n className : 'b-cal-event-body',\n children : bodyContent,\n style : renderData.bodyStyle\n }],\n iconParent =\n me.iconTarget === 'header' && me.showTime\n ? (bodyContent[0].children.length > 0 ? bodyContent[0].children : bodyContent)\n : eventInnerContent;\n // Only insert the icon DOM if we are showing any kind of icon, either\n // from an iconCls spec, or a recurrence icon, or showing a bullet via the showBullet config.\n if (hasIcon || useIconAsRecurrIcon || showCircle) {\n if (me.iconTarget === 'header' && me.showTime) {\n iconParent.push(iconElement);\n }\n else {\n iconParent.unshift(iconElement);\n }\n }\n // If the event had its own icon and is recurring, the recurrence icon is extra\n if (hasIcon && isRecurring) {\n iconParent.push({\n tag : 'i',\n className : {\n 'b-cal-recurrence-icon' : 1,\n 'b-icon' : 1,\n 'b-fw-icon' : 1,\n 'b-icon-recurring' : 1\n },\n style : renderData.iconStyle\n });\n }\n return {\n // Events are tabbable unless minimally rendered (dots)\n tabIndex : minimal ? null : 0,\n dataset,\n className : renderData.cls,\n style : renderData.style,\n children : [{\n className : 'b-cal-event',\n style : eventInnerStyle,\n children : minimal ? null : eventInnerContent\n }]\n };\n }\n internalBodyContentRenderer(eventRecord, resourceRecord, renderData, eventRenderer) {\n const\n me = this,\n { showResourceAvatars } = me,\n defaultBodyContent = eventRenderer && me.callback(eventRenderer, me, [{\n view : me,\n eventRecord,\n resourceRecord,\n renderData\n }]) ||\n // If creating a DayView event block, we inject
for newlines\n StringHelper[me.eventHeight === 'auto' ? 'encodeHtmlBR' : 'encodeHtml'](eventRecord.name);\n // Only attempt to show avatars if there is an assignment Set.\n // It has to share with defaultBodyContent, so we will be creating a children array.\n // showResourceAvatars may specify whether it goes before or after the default content\n if (showResourceAvatars && eventRecord.assigned?.size) {\n const\n content = [{\n class : 'b-cal-event-resource-avatars',\n children : eventRecord.resources.map(resource => me.getResourceAvatar(resource))\n }],\n spliceArgs = [showResourceAvatars === 'last' ? 0 : 1, 0];\n if (eventRenderer) {\n // Assume it's HTML\n if (typeof defaultBodyContent === 'string') {\n spliceArgs.push({\n tag : 'span',\n html : defaultBodyContent\n });\n }\n // Else it's DomConfig\n else {\n spliceArgs.push[Array.isArray(defaultBodyContent) ? 'apply' : 'call'](spliceArgs, defaultBodyContent);\n }\n }\n else {\n spliceArgs.push({\n class : 'b-cal-event-name',\n text : defaultBodyContent\n });\n }\n content.splice(...spliceArgs);\n return content;\n }\n // Just return whatever the renderer returned or the default textual event name\n else {\n return defaultBodyContent;\n }\n }\n};\n", "import LocaleHelper from '../../Core/localization/LocaleHelper.js';\nimport '../../Scheduler/localization/En.js';\nconst locale = {\n localeName : 'En',\n localeDesc : 'English (US)',\n localeCode : 'en-US',\n EventEdit : {\n Calendar : 'Calendar',\n 'All day' : 'All day',\n day : 'Day',\n week : 'Week',\n month : 'Month',\n year : 'Year',\n decade : 'Decade'\n },\n EventMenu : {\n duplicateEvent : 'Duplicate event',\n copy : 'copy'\n },\n Calendar : {\n Today : 'Today',\n next : range => `Next ${range}`,\n previous : range => `Previous ${range}`,\n plusMore : value => `+${value} more`,\n allDay : 'All day',\n endsOn : d => `Ends ${d}`,\n weekOfYear : ([y, w]) => `Week ${w}, ${y}`,\n loadFail : 'Calendar data load failed. Please contact your system administrator'\n },\n CalendarDrag : {\n holdCtrlForRecurrence : 'Hold CTRL for a recurring event'\n },\n CalendarMixin : {\n eventCount : count => `${count || 'No'} event${count === 1 ? '' : 's'}`\n },\n EventTip : {\n 'Edit event' : 'Edit event',\n timeFormat : 'LST'\n },\n ModeSelector : {\n includeWeekends : 'Include weekends',\n weekends : 'Weekends'\n },\n AgendaView : {\n Agenda : 'Agenda'\n },\n MonthView : {\n Month : 'Month',\n monthUnit : 'month'\n },\n WeekView : {\n weekUnit : 'week'\n },\n YearView : {\n Year : 'Year',\n yearUnit : 'year',\n noEvents : 'No events'\n },\n EventList : {\n List : 'List',\n Start : 'Start',\n Finish : 'End',\n days : count => `${count > 1 ? `${count} ` : ''}day${count === 1 ? '' : 's'}`\n },\n DayView : {\n Day : 'Day',\n dayUnit : 'day',\n daysUnit : 'days',\n expandAllDayRow : 'Expand all-day section',\n collapseAllDayRow : 'Collapse all-day section',\n timeFormat : 'LST'\n },\n DayResourceView : {\n dayResourceView : 'Day resources'\n },\n Sidebar : {\n 'Filter events' : 'Filter events'\n },\n WeekExpander : {\n expandTip : 'Click to expand row',\n collapseTip : 'Click to collapse row'\n }\n};\nexport default LocaleHelper.publishLocale(locale);\n", "import Base from '../../../Core/Base.js';\nimport Config from '../../../Core/Config.js';\nimport Featureable from '../../../Core/mixin/Featureable.js';\nimport StringHelper from '../../../Core/helper/StringHelper.js';\nimport DomHelper from '../../../Core/helper/DomHelper.js';\nimport EventHelper from '../../../Core/helper/EventHelper.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\nimport Responsive from '../../../Core/widget/mixin/Responsive.js';\nimport Rectangle from '../../../Core/helper/util/Rectangle.js';\nimport DH from '../../../Core/helper/DateHelper.js';\nimport CalendarFeature from '../../feature/CalendarFeature.js';\nimport CalendarStores from '../../mixin/CalendarStores.js';\nimport SchedulerInterface from '../../mixin/SchedulerInterface.js';\nimport EventRenderer from './EventRenderer.js';\nimport AvatarRendering from '../../../Core/widget/util/AvatarRendering.js';\nimport Describable from '../../../Scheduler/view/mixin/Describable.js';\n// This Mixin is the basis of the Calendar package, so it must load the default locale\nimport '../../localization/En.js';\nimport EventSorter from '../../util/EventSorter.js';\n/**\n * @module Calendar/widget/mixin/CalendarMixin\n */\nconst\n immediatePromise = Promise.resolve(),\n emptyObject = Object.freeze({}),\n { eventNameMap } = EventHelper,\n isFocusedCalendarMixin = w => w.isCalendarMixin && w.containsFocus;\n/**\n * Mixin that provides common handling methods and configs for Calendar widgets.\n *\n * This mixin also brings in the {@link Core.mixin.Featureable} mixin.\n *\n * @mixin\n * @mixes Scheduler/view/mixin/Describable\n * @mixes Calendar/widget/mixin/EventRenderer\n */\nexport default Target => class CalendarMixin extends (Target || Base).mixin(\n Describable,\n SchedulerInterface,\n Featureable,\n CalendarStores,\n EventRenderer,\n Responsive\n) {\n static $name = 'CalendarMixin';\n static get configurable() {\n return {\n //region Hidden configs\n /**\n * @event eventSelectionChange\n * @hide\n */\n /**\n * @hideconfigs htmlCls, autoUpdateRecord, record, textContent, content, html\n */\n /**\n * @hideproperties content, html\n */\n /**\n * A String which describes how much the {@link #function-next} and {@link #function-previous}\n * methods will move this view forwards or backwards in time.\n *\n * This is used to create the tooltip hints for the `nextButton` and `prevButton` in the\n * {@link Calendar.view.Calendar#property-tbar Calendar's toolbar}. If this property\n * is not defined, the `nextButton` and `prevButton` will be disabled when this view is active.\n *\n * Note that {@link Calendar.widget.WeekView} and {@link Calendar.widget.YearView} use a localized\n * string property to yield this value. Other view types implement a `get stepUnit` getter because\n * their step increments are variable.\n * @member {String} stepUnit\n * @readonly\n */\n //endregion\n localizableProperties : [\n 'autoCreate.newName', 'timeFormat', 'shortDateFormat', 'shortDateTimeFormat'\n ],\n eventStore : null,\n resourceStore : null,\n /**\n * A function which compares events which some views use to decide upon rendering order.\n *\n * Default sorter function are provided from the {@link Calendar.util.EventSorter} class.\n *\n * A custom sort function may be configured.\n *\n * Note that the two objects to compare may either be {@link Scheduler.model.EventModel}s\n * or {@link EventBar}s which contain an `eventRecord` property which is the {@link Scheduler.model.EventModel}.\n * @config {Function}\n * @param {Scheduler.model.EventModel|EventBar} lhs The left side value to conpare\n * @param {Scheduler.model.EventModel|EventBar} rhs The right side value to conpare\n * @returns {Number}\n */\n eventSorter : EventSorter.defaultSorterFn,\n responsive : {}, // brand as responsive so b-responsive-xxx CSS classes get added\n /**\n * Configure as `true` to hide {@link #config-nonWorkingDays}\n * @config {Boolean}\n */\n hideNonWorkingDays : null,\n hideNonWorkingDaysCls : 'b-hide-nonworking-days',\n /**\n * The week start day, 0 meaning Sunday, 6 meaning Saturday.\n * Defaults to {@link Core.helper.DateHelper#property-weekStartDay-static}.\n * @config {Number}\n */\n weekStartDay : DH.weekStartDay,\n /**\n * Non-working days as an object where keys are day indices, 0-6 (Sunday-Saturday), and the value is `true`.\n * Defaults to {@link Core.helper.DateHelper#property-nonWorkingDays-static}.\n * @config {Object}\n */\n nonWorkingDays : {\n value : DH.nonWorkingDays,\n $config : {\n merge : 'replace'\n }\n },\n /**\n * The class name to add to calendar cells which are non working days.\n * @config {String}\n * @private\n */\n nonWorkingDayCls : 'b-nonworking-day',\n /**\n * The class name to add to calendar cells.\n * @member {String} dayCellCls\n */\n /**\n * The class name to add to calendar cells.\n * @config {String}\n * @private\n */\n dayCellCls : 'b-calendar-cell',\n /**\n * The class name to add to calendar cells which are weekend days.\n * @config {String}\n * @private\n */\n weekendCls : 'b-weekend',\n todayCls : 'b-today',\n pastEventCls : 'b-past-event',\n /**\n * The class name to add to events which have duration less than or equal to\n * {@link #config-shortEventDuration}.\n * @config {String}\n */\n shortEventCls : 'b-short-event',\n /**\n * The duration at which below and equal to this value, an event's encapsulating element gets\n * the {@link #config-shortEventCls} added to it so that small event bars can have style rearrangements.\n *\n * In {@link Calendar.widget.DayView}s, short events have compressed layout so that the event name is\n * visible on the top line next to the start time.\n *\n * This may be a string in the format required by {@link Core.helper.DateHelper#function-parseDuration-static}.\n *\n * It may also be configured as a millisecond value.\n * @config {String|Number}\n * @default\n */\n shortEventDuration : '30 minutes',\n /**\n * The height of event bars if this view creates event bars.\n *\n * {@link Calendar.widget.MonthView MonthView}, {@link Calendar.widget.MonthView CalendarRow}\n * (the {@link Calendar.widget.DayView#config-allDayEvents all day row} in a\n * {@link Calendar.widget.WeekView WeekView}) and {@link Calendar.widget.AgendaView AgendaView}\n * use this config.\n *\n * In {@link Calendar.widget.DayView DayView} and {@link Calendar.widget.WeekView WeekView},\n * the event element's height is part of the widget's layout and signifies the event's duration,\n * so these use a default value of `'auto'`.\n * @config {Number|String}\n * @default\n */\n eventHeight : 25,\n eventSpacing : 2,\n intradayCls : 'b-intraday',\n alldayCls : 'b-allday',\n solidBarCls : 'b-solid-bar',\n dayNameSelector : '.b-day-name', // MonthView widens this to be the whole cell header\n // if it's showing a separate week number column.\n // CalendarRow always widens this to the cell header.\n showTime : false,\n /**\n * A {@link Core.helper.DateHelper} format string used to format the time displayed in events\n *\n * @config {String}\n * @default 'LT'\n */\n timeFormat : {\n value : 'LT',\n $config : {\n localeKey : 'L{timeFormat}'\n }\n },\n /**\n * __Not applicable in a `DayView`__\n *\n * This specifies whether to show a circular \"bullet\" icon if there is no\n * {@link Scheduler.model.EventModel#field-iconCls} defined for an event.\n *\n * By default, events which are rendered as solid blocks of colour (such as all day events) do __not__\n * show the bullet icon.\n *\n * By default, events which do not show as a colour block show the bullet icon as a means of showing\n * the event's defined `eventColor`.\n *\n * This property may contain two properties which define whether to show the bullet icon for both\n * event types.\n *\n * If configured as `true`, all event bars will show a bullet icon if they do not have an\n * {@link Scheduler.model.EventModel#field-iconCls}\n * @config {Boolean|Object}\n * @param {Boolean} [bar] This is `false` by default. Set this to `true` in modes where a solid event\n * bar should show a bullet icon\n * @param {Boolean} [noBar] This is `true` by default. Events with no background colour, use this to\n * show the event's defined `eventColor`\n * @default\n */\n showBullet : {\n bar : false,\n noBar : true\n },\n eventColourStyleProperty : 'color', // By default the event color becomes the colour\n // DayView uses backgroundColor\n handlePointerInteraction : true,\n /**\n * A {@link Core.helper.DateHelper} format string to use to create date output for\n * abbreviated view descriptions.\n * @prp {String}\n * @default 'll'\n */\n shortDateFormat : {\n value : 'll',\n $config : {\n localeKey : 'L{shortDateFormat}'\n }\n },\n /**\n * A title text used by the Calendar's mode selector button\n * @config {String}\n */\n title : null,\n /**\n * A {@link Core.helper.DateHelper} format string to use to create date and time output for\n * abbreviated view descriptions.\n * @prp {String}\n * @default 'll LT'\n */\n shortDateTimeFormat : {\n value : 'll LT',\n $config : {\n localeKey : 'L{shortDateTimeFormat}'\n }\n },\n /**\n * Configure as `true` to make the view read-only, by disabling any UIs for modifying data.\n *\n * __Note that checks MUST always also be applied at the server side.__\n * @config {Boolean}\n */\n readOnly : null,\n /**\n * If this config is set, then the `gesture` configured (which defaults to `dblclick`) creates a\n * new event at the mouse or touch event's time point.\n *\n * The exact time is rounded to the closest specified `step` value. This value is also used\n * for the {@link Core.widget.TimeField#property-step} value in the {@link Calendar.feature.EventEdit}'s\n * time input field.\n *\n * The duration of the created event is the specified `duration` value.\n *\n * If this is specified as `true`, the `gesture` becomes `dblclick`, and the other properties\n * are the default values listed below.\n *\n * If this is specified as a string, the string becomes the `gesture`, and the other properties\n * are the default values listed below.\n *\n * @prp {Object}\n * @property {String} [gesture='dblclick'] The DOM event name which initiates event creation at the event's position.\n * @property {String|Function} [newName='New Event'] The name of an event created using `autoCreate` or a function to call which yields the name.\n * @property {String} [step='15 minutes'] The time unit by which to snap the start click point of auto created events.\n * __Only for views which have a granularity of less than one day such as `WeekView` and `DayView`__.\n *\n * For views which show whole days, the start defaults to 8am.\n *\n * This is a string in the format required by {@link Core.helper.DateHelper#function-parseDuration-static}.\n *\n * This value is also used for the {@link Core.widget.TimeField#property-step} value in the\n * {@link Calendar.feature.EventEdit}'s time input field.\n *\n * @property {'round'|'ceil'|'floor'} [snapType='round'] How to snap a precise gesture time to a boundary specified by the `step` property.\n * __Only for views which have a granularity of less than one day such as `WeekView` and `DayView`__.\n * @property {String} [duration='1 hour'] The default start hour for auto created events in the form accepted by {@link Core.helper.DateHelper#function-parseDuration-static}\n * @property {Number} [startHour=8] The default start hour for auto created events\n * in views where the time granularity is one day. In a `DayView` or `WeekView` where a mouse event position\n * will translate to a time of day, this is not used.\n *\n * This is the hour of the day to start the event at. It may be fractional.\n * @accepts {Object|String|Boolean}\n * @default\n */\n autoCreate : {\n gesture : 'dblclick',\n newName : 'L{Object.newEvent}',\n step : '15 minutes',\n snapType : 'round',\n duration : '1 hour',\n startHour : 8\n },\n /**\n * The {@link Scheduler.model.EventModel#field-durationUnit} to use when drag-creating events\n * in this view.\n *\n * For {@link Calendar.widget.DayView}s, this is normally `'hour'`, for views with a granularity\n * level of one day, the default is `'day'`.\n * @config {String}\n */\n dragUnit : 'hour',\n autoRefresh : {\n $config : {\n merge : 'classList'\n },\n value : null\n },\n /**\n * Set to false if you don't want to allow events overlapping times for any one resource (defaults to true).\n * @config {Boolean}\n * @default\n * @private\n */\n allowOverlap : true,\n /**\n * When used as a {@link Calendar.view.Calendar#config-modes mode} of a Calendar, the\n * date will automatically be kept synced with the Calendar's\n * {@link Calendar.view.Calendar#property-date}.\n *\n * Configure this as `false` to opt out of this.\n *\n * __Note that this places the onus on the application developer to control the\n * viewed date range in this widget.__\n * @config {Boolean} syncViewDate\n * @default\n */\n syncViewDate : true,\n // For views which are Panels, make them not include a tabIndex\n focusable : false,\n // Allow an AvatarRendering instance to be specified\n avatarRendering : {\n $config : 'lazy',\n value : null\n },\n /**\n * Configure as `true` to show avatars of the assigned resources (calendars) at the\n * start of the event bar.\n *\n * Configure as `'last'` to show avatars of the assigned resources (calendars) at the\n * end of the event bar.\n *\n * Note that the avatars are `2.22em` diameter circles, and this may not be suitable\n * for rendering in short events inside a DayView.\n *\n * In a view which renders event bars, the {@link #config-eventHeight} should be\n * increased from the default to accommodate the extra information.\n *\n * Note that you must set {@link #config-resourceImagePath} in order that the system\n * knows where to access the resource's image file from.\n *\n * If no image is set, or the image is not found, the resource's initials are shown instead.\n *\n * By default it is inherited from the owning Calendar:\n * ```javascript\n * new Calendar({\n * resourceImagePath : 'images/resources/'\n * modes : {\n * month : {\n * showResourceAvatars : true,\n * },\n * week : {\n * // Images go at the end of the body with name first\n * showResourceAvatars : 'last,\n * }\n * }\n * });\n * ```\n * @config {Boolean|String}\n * @default false\n */\n showResourceAvatars : null,\n /**\n * Path to load resource images from. Used by the {@link #config-showResourceAvatars} config\n * to create URLs using the resource's\n * {@link Scheduler/model/ResourceModel#field-image} or\n * {@link Scheduler/model/ResourceModel#field-imageUrl} fields:\n *\n * * `image` represents image name inside the specified `resourceImagePath`,\n * * `imageUrl` represents fully qualified image URL.\n *\n * **NOTE**: The path should end with a `/`:\n *\n * ```javascript\n * new Calendar({\n * modeDefaults : {\n * showResourceAvatars : true,\n * resourceImagePath : 'images/resources/'\n * }\n * });\n * ```\n * @config {String}\n */\n resourceImagePath : null,\n /**\n * The minimum date to which the `startDate` of this view may be navigated.\n * @member {Date} minDate\n */\n /**\n * The minimum date to which the `startDate` of this view may be navigated.\n * @config {Date|String}\n */\n minDate : null,\n /**\n * The maximum date to which the `endDate` of this view may be navigated.\n * @member {Date} maxDate\n */\n /**\n * The maximum date to which the `endDate` of this view may be navigated.\n * @config {Date|String}\n */\n maxDate : null,\n /**\n * By default, when navigating through time, the next time\n * block will be animated in from the appropriate direction.\n *\n * Configure this as `false` to disable this.\n * @prp {Boolean} animateTimeShift\n * @default\n */\n animateTimeShift : true,\n // Private at this level, it's only processed for a ResourceView\n includeTimeRanges : null,\n testConfig : {\n animateTimeShift : false\n }\n };\n }\n static get delayable() {\n return {\n refreshSoon : {\n type : 'raf',\n cancelOutstanding : true\n }\n };\n }\n static get featureable() {\n return {\n factory : CalendarFeature\n };\n }\n construct(config) {\n const me = this;\n super.construct(config);\n // Not tabbable, but conducts focus.\n // We have not implemented Calendar Cell navigation which is external\n // to event-to-event navigation, so YearView does not receive focus yet.\n // Only add tabIndex if we don't already have it\n if (!me.isYearView && me.element.tabIndex !== -1 && me.contentElement?.tabIndex !== -1) {\n (me.contentElement || me.element).tabIndex = -1;\n }\n // Pull any the AvatarRendering instance through\n me.getConfig('avatarRendering');\n EventHelper.on({\n element : me.element,\n keydown : 'onCalendarKeyDown',\n thisObj : me\n });\n if (me.handlePointerInteraction) {\n EventHelper.on({\n element : me.element,\n mouseover : 'onEventMouseOverOut',\n mouseout : 'onEventMouseOverOut',\n mousedown : 'onCalendarPointerInteraction',\n mouseup : 'onCalendarPointerInteraction',\n // Block subsequent clicks before 300ms has elapsed\n click : {\n handler : 'onCalendarPointerInteraction',\n block : 300\n },\n dblclick : 'onCalendarPointerInteraction',\n contextmenu : 'onCalendarPointerInteraction',\n thisObj : me\n });\n }\n }\n /**\n * For use by the {@link Calendar.feature.TimeRanges} feature. This yields the set of\n * {@link Calendar.model.TimeRangeModel}s and {@link Scheduler.model.ResourceTimeRangeModel}s\n * to be rendered in the passed date range.\n * @param {Date} startDate The start date of the range to be returned\n * @param {Date} endDate The end date of the range to be returned.\n * @returns {Calendar.model.TimeRangeModel[]}\n * @private\n */\n getTimeRanges(startDate, endDate) {\n const\n {\n resourceId,\n project\n } = this,\n includeTimeRanges = resourceId ? this.owner.includeTimeRanges : true,\n ranges = (resourceId == null || includeTimeRanges) ? project?.getTimeRanges(startDate, endDate) : [];\n // Add in resourceTimeRanges for this view if this view is for a certain resource\n if (resourceId != null) {\n const resourceRanges = project?.getResourceTimeRanges(startDate, endDate).filter(r => r.resourceId == resourceId);\n // Default color to event color for resource\n resourceRanges.forEach(r => {\n if (!r.color) {\n r.color = this.resource.eventColor;\n }\n });\n ranges.push(...resourceRanges);\n }\n return ranges;\n }\n updateIncludeTimeRanges() {\n if (!this.isConfiguring) {\n this.refresh();\n }\n }\n onConfigChange(info) {\n if (this.autoRefresh?.[info?.name]) {\n this.refreshSoon();\n }\n super.onConfigChange(info);\n }\n changeAvatarRendering(avatarRendering) {\n return AvatarRendering.new({\n element : this.element\n }, avatarRendering);\n }\n updateShowResourceAvatars(showResourceAvatars) {\n if (showResourceAvatars) {\n // We need the AvatarRendering utility if we are showing avatars.\n this.avatarRendering || (this.avatarRendering = true);\n }\n this.refresh();\n }\n getResourceAvatar(resourceRecord) {\n return this.avatarRendering.getResourceAvatar({\n resourceRecord,\n imageUrl : resourceRecord.image === false ? null : (resourceRecord.imageUrl || resourceRecord.image && (this.resourceImagePath + resourceRecord.image)),\n color : resourceRecord.eventColor,\n initials : resourceRecord.initials,\n dataset : {\n btip : StringHelper.encodeHtml(resourceRecord.name),\n resourceId : resourceRecord.id\n }\n });\n }\n updateEventHeight(eventHeight) {\n const { style } = this.element;\n // Force a recalculate on next access\n this._eventHeightInPixels = null;\n style.setProperty('--event-height', DomHelper.setLength(eventHeight));\n style.setProperty('--arrow-width', 'calc(var(--event-height) / 3)');\n style.setProperty('--arrow-margin', 'calc(var(--event-height) / -3)');\n // Schedule a refresh\n if (!this.isConfiguring) {\n this.refreshSoon();\n }\n }\n /**\n * Returns the pixel value of the {@link #config-eventHeight} in case it was configured as a\n * CSS measurement in other units.\n * @private\n */\n get eventHeightInPixels() {\n const\n me = this,\n { eventHeight } = me;\n let eventHeightInPixels = me._eventHeightInPixels;\n // Some views, like DayView don't have a defined event height.\n if (eventHeight !== 'auto') {\n if (!eventHeightInPixels) {\n eventHeightInPixels = me._eventHeight;\n // Measure the height if it's a string value.\n // Value is cached until eventHeight is changed again.\n if (typeof eventHeightInPixels === 'string') {\n eventHeightInPixels = DomHelper.measureSize(eventHeightInPixels, me.contentElement.querySelector(`.${me.eventBarContainerCls}`), false);\n }\n me._eventHeightInPixels = eventHeightInPixels;\n }\n }\n return eventHeightInPixels;\n }\n /**\n * This property yields the base selector to use to find visible cell elements in this view.\n *\n * It's based upon the {@link #property-dayCellCls}, but also takes into account the\n * {@link #config-hideNonWorkingDays} setting.\n *\n * If this is a MonthView, it also takes into account the\n * {@link Calendar.widget.MonthView#config-hideOtherMonthCells} setting.\n * @property {String}\n * @readonly\n */\n get visibleCellSelector() {\n const excludes = [];\n if (this.hideOtherMonthCells) {\n excludes.push(`.${this.otherMonthCls}`);\n }\n if (this.hideNonWorkingDays) {\n excludes.push(`.${this.nonWorkingDayCls}`);\n }\n return `.${this.dayCellCls}${excludes.length ? `:not(${excludes.join(',')})` : ''}`;\n }\n /**\n * This property yields this widget. This is to enable Calendar Features to be able to attach\n * to standalone Calendar widgets as their owning client, and to access a currently active view\n * in a standard way.\n * @property {Calendar.widget.mixin.CalendarMixin}\n * @typings {typeof CalendarMixin}\n * @readonly\n * @internal\n */\n get activeView() {\n return this;\n }\n /**\n * This property yields this widget. This is to enable Calendar Features to be able to attach\n * to standalone Calendar widgets as their owning client, and to access a currently active view\n * in a standard way.\n * @property {Calendar.widget.mixin.CalendarMixin}\n * @typings {typeof CalendarMixin}\n * @readonly\n * @internal\n */\n get activeSubView() {\n const\n { items } = this,\n // If we're a multi-CalendarWidget view (Such as a ResourceView), narrow down activeView\n // to the active subView which contains focus.\n activeSubView = items.filter(isFocusedCalendarMixin)?.[0];\n return activeSubView || this;\n }\n /**\n * Calendar mode that this view represents (eg. \"day\", \"month\" etc). Only accessible when used within a Calendar.\n * @member {String} modeName\n * @readonly\n */\n /**\n * This function allows a Calendar widget to act as a Feature host by exposing the same interface\n * as a {@link Calendar.view.Calendar}. It executes the passed function on this widget.\n * @internal\n * @param {Function} fn The function to call.\n * @param {Object[]} [args] The arguments to pass. Defaults to this view.\n * @param {Object} [thisObj] The `this` reference for the function. Defaults to this view.\n */\n eachView(fn, args, thisObj = null) {\n this.callback(fn, thisObj || this, args || [this]);\n }\n get focusElement() {\n const { calendar } = this;\n if (calendar) {\n const { navigator } = calendar;\n return navigator.activeItem || navigator.previousActiveItem || this.element.querySelector(navigator.itemSelector) || super.focusElement;\n }\n }\n captureFocusItem(activeElement) {\n const\n activeEvent = this.getEventRecord(activeElement),\n base = super.captureFocusItem(activeElement);\n return (scrollIntoView = true) => {\n const newEl = activeEvent && this.getEventElement(activeEvent);\n if (newEl) {\n scrollIntoView ? newEl.focus() : newEl.focus({ preventScroll : true });\n }\n else {\n base?.(scrollIntoView);\n }\n };\n }\n /**\n * Refreshes the UI after a change to the EventStore, or to a configuration that requires\n * the UI to change.\n *\n * Only updates the UI if this widget is visible. If it is not visible, the refresh is\n * deferred until it next becomes visible.\n */\n refresh() {\n // If we're being called programmatically, cancel upcoming delayed refreshes.\n this.refreshSoon.cancel();\n this.month && this.element.style.setProperty('--week-length', this.month.weekLength);\n // Only refresh immediately if we are visible.\n this.whenVisible('refreshNow');\n }\n refreshNow() {\n const refocus = this.captureFocus();\n this.doRefresh();\n refocus();\n }\n /**\n * Executes the passed callback after the next refresh, but waits only for a maximum number of\n * milliseconds before optionally performing a refresh and executing the callback.\n *\n * When awaited, the function resolves after the refresh or timeout and after any callback have been executed\n * and the Promise yields `true` if a refresh has been performed.\n *\n * @param {String|Function} [callback] A function or the name of a function in the ownership hierarchy\n * to run after the next refresh operation. May be omitted, and `options` passed as the sole parameter.\n * @param {Object} [options] How long to wait and what to do on timeout.\n * @param {Number} [options.delay=100] The number of milliseconds to wait for a refresh.\n * @param {Boolean} [options.forceRefresh=false] If the refresh does not happen within the timer, call refresh.\n * @async\n * @internal\n */\n afterRefresh(callback, options = { delay : 100, forceRefresh : false }) {\n if (typeof callback === 'object') {\n options = callback;\n callback = null;\n }\n else if (callback) {\n callback = this.resolveCallback(callback, this);\n callback = callback.handler.bind(callback.thisObj);\n }\n if (typeof options === 'number') {\n options = { delay : options };\n }\n return new Promise(resolve => {\n this.ion({\n refresh : () => {\n callback?.();\n resolve(true);\n },\n once : true,\n expires : {\n delay : options.delay || 100,\n alt : () => {\n options.forceRefresh && this.refresh();\n callback?.();\n resolve(options.forceRefresh);\n }\n }\n });\n });\n }\n get displayName() {\n return StringHelper.capitalize(this._displayName || this.title || this.type);\n }\n get hiddenNonWorkingDays() {\n return this.hideNonWorkingDays ? (this.nonWorkingDays || this.month.nonWorkingDays) : emptyObject;\n }\n changeAutoCreate(autoCreate) {\n const defaults = CalendarMixin.$meta.config.autoCreate;\n if (autoCreate === true) {\n return defaults;\n }\n if (typeof autoCreate === 'string') {\n autoCreate = {\n gesture : autoCreate\n };\n }\n return Config.merge(autoCreate, defaults);\n }\n updateDateSeparator() {\n this.refreshCalendarDescription();\n }\n updateDescriptionFormat() {\n this.refreshCalendarDescription();\n }\n refreshCalendarDescription() {\n const { calendar } = this;\n if (calendar?.isPainted && calendar.activeView === this) {\n calendar.updateViewDescription();\n }\n }\n changeShortEventDuration(shortEventDuration) {\n return isNaN(shortEventDuration) ? DH.as('ms', shortEventDuration) : Number(shortEventDuration);\n }\n updateShortEventDuration() {\n if (!this.isConfiguring) {\n this.refresh();\n }\n }\n updateLocalization() {\n // If user configured calendar with specific config, then prefer it to the localized value\n if (!('weekStartDay' in this.initialConfig)) {\n this.weekStartDay = DH.weekStartDay;\n }\n if (!('nonWorkingDays' in this.initialConfig)) {\n this.nonWorkingDays = DH.nonWorkingDays;\n }\n super.updateLocalization();\n this.refreshCalendarDescription();\n }\n updateAutoCreate(autoCreate) {\n // The autocreate.newEvent property must be processed\n this.updateLocalization();\n }\n updateWeekStartDay(weekStartDay) {\n const { refreshCount, month } = this;\n super.updateWeekStartDay?.(weekStartDay);\n // This can be called from changeMonth during initialization of the Month object\n // and at that time, obviously the property will not be present.\n if (month) {\n month.weekStartDay = weekStartDay;\n }\n if (this.isPainted && this.refreshCount === refreshCount) {\n this.refresh();\n }\n }\n changeNonWorkingDays(nonWorkingDays) {\n const\n me = this,\n result = new Proxy(ObjectHelper.assign({}, nonWorkingDays), {\n set(target) {\n const result = Reflect.set(...arguments);\n me.updateNonWorkingDays(target);\n return result;\n },\n deleteProperty(target) {\n const result = Reflect.deleteProperty(...arguments);\n me.updateNonWorkingDays(target);\n return result;\n }\n });\n return result;\n }\n updateNonWorkingDays(nonWorkingDays) {\n const { refreshCount, month } = this;\n super.updateNonWorkingDays?.(nonWorkingDays);\n // This can be called from changeMonth during initialization of the Month object\n // and at that time, obviously the property will not be present.\n if (month) {\n month.nonWorkingDays = nonWorkingDays;\n }\n if (this.isPainted && this.refreshCount === refreshCount) {\n this.refresh();\n }\n }\n dayOfDate(date) {\n return DH.clearTime(date);\n }\n ingestDate(date) {\n date = typeof date === 'string' ? DH.parse(date) : new Date(date);\n if (isNaN(date)) {\n throw new Error('Calendar widget date ingestion must be passed a Date, or a YYYY-MM-DD date string');\n }\n return this.dayOfDate(date);\n }\n changeDate(date, oldDate) {\n date = this.ingestDate(date);\n // Honour minDate and maxDate\n // isValidTargetDate always needs the answer.\n if (!this.isInIsValidTargetDate && !this.isValidTargetDate(date)) {\n return;\n }\n // Don't fire the beforeDateChange event for a no-change.\n if (!oldDate || (date - oldDate)) {\n /**\n * Triggered before a view's orientating date changes.\n *\n * return `false` from an event handler to veto the temporal navigation.\n * @preventable\n * @event beforeChangeDate\n * @param {Date} oldDate The current orientating date of this view.\n * @param {Date} date The new date to which this view is to be orientated.\n */\n if (this.trigger('beforeDateChange', { date, oldDate }) !== false) {\n return date;\n }\n }\n }\n isValidTargetDate(date, end) {\n const\n me = this,\n minDate = me.minDate || me.calendar?.minDate,\n maxDate = me.maxDate || me.calendar?.maxDate;\n if (!isNaN(minDate) || !isNaN(maxDate)) {\n // flag so that changers don't ask for validation.\n this.isInIsValidTargetDate = true;\n // We need to call changer here so that subclasses can snap to their range start.\n // But the base changer above must not ask for validation.\n const newDate = end ? me[`change${StringHelper.capitalize(end)}Date`](date, null) : date;\n me.isInIsValidTargetDate = false;\n // Veto navigation to before minDate.\n if (!isNaN(minDate) && newDate < minDate) {\n return false;\n }\n // Veto navigation to after maxDate.\n if (!isNaN(maxDate)) {\n return !(end === 'end' ? newDate > maxDate : newDate >= maxDate);\n }\n }\n return true;\n }\n changeStartDate(startDate) {\n // Subclass may already have vetoed the change\n if (startDate) {\n startDate = this.ingestDate(startDate);\n // Honour minDate and maxDate\n // isValidTargetDate always needs the answer.\n if (this.isInIsValidTargetDate || this.isValidTargetDate(startDate, 'start')) {\n return startDate;\n }\n }\n }\n changeEndDate(endDate) {\n // Subclass may already have vetoed the change\n if (endDate) {\n endDate = this.ingestDate(endDate);\n // Honour minDate and maxDate\n // isValidTargetDate always needs the answer.\n if (this.isInIsValidTargetDate || this.isValidTargetDate(endDate, 'end')) {\n return endDate;\n }\n }\n }\n /**\n * Brings an event or a time into view. Optionally visually highlights the target.\n *\n * __This may change the date range encompassed by this view to bring the date or event into its\n * ownership__.\n *\n * Scrolling may or may not be required, depending on the type and size constraints of the view.\n * @param {Scheduler.model.EventModel|Date} target The event or Date to scroll to.\n * @param {Object} [options] How to scroll.\n * @param {'start'|'end'|'center'|'nearest'} [options.block] How far to scroll the target.\n * @param {Number} [options.edgeOffset] edgeOffset A margin around the target to bring into view.\n * @param {Object|Boolean|Number} [options.animate] Set to `true` to animate the scroll by 300ms,\n * or the number of milliseconds to animate over, or an animation config object.\n * @param {Number} [options.animate.duration] The number of milliseconds to animate over.\n * @param {String} [options.animate.easing] The name of an easing function.\n * @param {Boolean|Function} [options.highlight] Set to `true` to highlight the resulting element\n * when it is in view. May be a function which is called passing the resulting element\n * to provide customized highlighting.\n * @param {Boolean} [options.focus] Set to `true` to focus the element when it is in view.\n * @param {Boolean} [options.x] Pass as `false` to disable scrolling in the `X` axis.\n * @param {Boolean} [options.y] Pass as `false` to disable scrolling in the `Y` axis.\n * @returns {Promise} A promise which is resolved when the target has been scrolled into view.\n */\n async scrollTo(target, options = { animate : true }) {\n const\n me = this,\n { scrollable } = me;\n let promise = immediatePromise;\n if (me.scrollPromise) {\n await me.scrollPromise;\n }\n // Scrolling to an event. Make sure it's in our date range first\n if (target.isEvent) {\n const eventRecord = target;\n // If we do not encompass the event, move to the event's startDate.\n if (!DH.intersectSpans(me.startDate, me.endDate, target.startDate, target.endDate)) {\n me.date = target.startDate;\n }\n target = me.getEventElement(target);\n if (!target) {\n me.refresh();\n target = me.getEventElement(eventRecord);\n }\n }\n // The only other option is scrolling to a Date\n else {\n target = me.changeDate(target);\n // If we do not own the date, move to that date.\n if (!DH.betweenLesser(target, me.startDate, me.endDate) || !me.getDayElement(target, true)) {\n me.date = target;\n }\n target = me.getDayElement(target);\n }\n // If this view does scrolling, scroll the target into view\n if (scrollable) {\n promise = scrollable.scrollIntoView(target, options);\n }\n // Otherwise, we are responsible for any highlight\n else if (options.highlight) {\n if (typeof options.highlight === 'boolean') {\n DomHelper.highlight(Rectangle.from(target));\n }\n else {\n me.callback(options.highlight, me, [target, me]);\n }\n }\n return me.scrollPromise = promise;\n }\n async checkAutoCreateGesture(domEvent, date, resourceRecord) {\n const\n me = this,\n { autoCreate } = me;\n // If the gesture is on a known date, and we are visible, and not readOnly and it's an autoCreate.gesture...\n if (date && me.isVisible && !me.readOnly && domEvent.type === autoCreate?.gesture?.toLowerCase()) {\n const\n dateStart = DH.startOf(date, undefined, undefined, me.weekStartDay),\n startHourMS = isNaN(autoCreate.startHour) ? DH.getTimeOfDay(DH.parse(autoCreate.startHour, 'HH:mm:ss')) : autoCreate.startHour * 1000 * 60 * 60;\n /**\n * This event fires whenever the {@link #config-autoCreate autoCreate gesture} is detected\n * and also when a {@link Calendar.feature.CalendarDrag drag-create} gesture is detected.\n *\n * This event is preventable and may be used to validate UI-initiated event creation.\n * @event beforeAutoCreate\n * @preventable\n * @param {Event} domEvent The DOM event which initiated the creation.\n * @param {Date} date The starting time of the event to be created. If this is in a\n * `DayView, this will be snapped according to the specification in {@link #property-autoCreate}\n */\n if (me.trigger('beforeAutoCreate', { domEvent, date : me.isDayView ? DH[autoCreate.snapType](date, autoCreate.step) : DH.add(dateStart, startHourMS) }) !== false) {\n return me.createEvent(date, resourceRecord);\n }\n }\n }\n /**\n * Creates an event on the specified date which conforms to this view's {@link #config-autoCreate}\n * setting.\n *\n * This method may be called programmatically by application code if the `autoCreate` setting\n * is `false`, in which case the default values for `autoCreate` will be used.\n *\n * If the {@link Calendar.feature.EventEdit EventEdit} feature is active, the new event\n * will be displayed in the event editor.\n * @param {Date} date The date to add the event at. If there's no time component, the\n * {@link #config-autoCreate}'s `startHour` will be used.\n */\n createEvent(date, resourceRecord) {\n const handler = this.calendar || this.owner?.calendar || this;\n // If contained by a Calendar the Calendar may have opinions about which view\n // to pass to doCreateEvent as the editing view.\n handler.doCreateEvent(date, resourceRecord, this);\n }\n async doCreateEvent(date, resourceRecord, editingView = this) {\n resourceRecord = resourceRecord ?? this.defaultCalendar;\n const\n me = this,\n { isDayView } = (me.viewType || me),\n // We are either a mode or a CalendarRow\n calendar = me.calendar || me.owner?.calendar,\n // Some views may be created with a chained EventStore.\n // We must use the Calendar's EventStore.\n eventStore = calendar?.eventStore || me.eventStore,\n autoCreate = editingView.autoCreate || editingView.changeAutoCreate(true),\n { modelClass } = eventStore,\n { newName } = autoCreate,\n dateStart = new Date(date.getTime() + (me.dayStartShift || 0)),\n startHourMS = isNaN(autoCreate.startHour) ? DH.getTimeOfDay(DH.parse(autoCreate.startHour, 'HH:mm:ss')) : autoCreate.startHour * 1000 * 60 * 60,\n // If this view has high definition time granularity (isa DayView), then round the precise date\n // passed to this view's autoCreate.step and snapType.\n // Otherwise default to an event starting at autoCreate.startHour.\n startDate = isDayView ? DH[autoCreate.snapType](date, autoCreate.step) : DH.add(dateStart, startHourMS),\n duration = DH.parseDuration(autoCreate.duration),\n endDate = DH.add(startDate, duration.magnitude, duration.unit),\n name = me.resolveCallback(newName, me, false) ? me.callback(newName, me, [me, startDate]) : newName,\n recordData = {\n [modelClass.getFieldDataSource('name')] : name,\n [modelClass.getFieldDataSource('startDate')] : startDate,\n [modelClass.getFieldDataSource('endDate')] : endDate,\n [modelClass.getFieldDataSource('duration')] : duration.magnitude,\n [modelClass.getFieldDataSource('durationUnit')] : duration.unit,\n // If the view's settings resulted in a midnight to midnight event, flag it as allDay\n allDay : DH.diff(startDate, endDate, 'day') === 1\n },\n // For EventLists, when we are using a startDate->endDate range as opposed to a fixed\n // range, the dates are *inclusive*, so pick the correct date containment function.\n dateContainmentFn = editingView.isEventList && !editingView.range ? 'betweenLesserEqual' : 'betweenLesser';\n const newRecord = eventStore.createRecord(recordData);\n // If an editor is available, mark the event as non-persistable while it is being edited\n if (calendar?.features.eventEdit && !calendar.features.eventEdit.disabled) {\n newRecord.isCreating = true;\n }\n if (resourceRecord) {\n eventStore.assignmentStore.assignEventToResource(newRecord, resourceRecord);\n }\n await eventStore.addAsync(newRecord);\n // If the date we are being asked to create at is in view, edit the event when\n // the view has rendered it.\n if (DH[dateContainmentFn](startDate, editingView.startDate, editingView.endDate)) {\n if (editingView.getEventElement(newRecord, startDate)) {\n editingView.editAutoCreatedEvent(newRecord);\n }\n else {\n editingView.ion({\n refresh({ source }) {\n // Conditionally call. May have been destroyed\n source.editAutoCreatedEvent?.(newRecord);\n },\n once : true,\n prio : -10000,\n buffer : 100,\n expires : 500\n });\n }\n }\n }\n editAutoCreatedEvent(eventRecord) {\n /**\n * Fired when an {@link #config-autoCreate} gesture has created a new event\n * and added it to the event store.\n *\n * If the {@link Calendar.feature.EventEdit} feature is present, it listens for\n * this event and initiates an edit operation. Adding a high `prio` listener which\n * returns `false` can prevent this event from reaching the `eventEdit` processing.\n * @event eventAutoCreated\n * @param {Calendar.widget.mixin.CalendarMixin} source This Calendar view instance.\n * @typings source -> {typeof CalendarMixin}\n * @param {Scheduler.model.EventModel} eventRecord The new event record.\n */\n this.trigger('eventAutoCreated', {\n eventRecord\n });\n }\n get duration() {\n // All views have a startDate and endDate property, so duration can be calculated.\n // The endDate is \"exclusive\" because it means 00:00:00 of that day.\n return this.endDate ? this.calculateDuration(this.startDate, this.endDate) : 1;\n }\n calculateDuration(startDate, endDate) {\n // This is overridden in WeekView to enforce the correct duration.\n // This enables updaters to \"calculate\" the duration and therefore share code.\n return DH.diff(startDate, endDate, 'day');\n }\n /**\n * Moves this view forwards in time by its configured (or intrinsic if it's a\n * {@link Calendar.widget.WeekView} or a {@link Calendar.widget.YearView}) duration.\n */\n next() {\n this.date = DH.add(this.date, this.duration, 'day');\n }\n /**\n * Moves this view backwards in time by its configured (or intrinsic if it's a\n * {@link Calendar.widget.WeekView} or a {@link Calendar.widget.YearView}) duration.\n */\n previous() {\n this.date = DH.add(this.date, -this.duration, 'day');\n }\n get eventContentElement() {\n return this.contentElement;\n }\n /**\n * The first *visible* event-bearing element in this view. So if the first day defined in the\n * range is a Sunday, and {@link #config-hideNonWorkingDays} is set, then the first visible\n * cell will be for the Monday.\n * @property {HTMLElement}\n */\n get firstVisibleCell() {\n return this.eventContentElement.querySelector(this.visibleCellSelector);\n }\n /**\n * The last *visible* event-bearing element in this view. So if the last day defined in the\n * range is a Sunday, and {@link #config-hideNonWorkingDays} is set, then the last visible\n * cell will be for the Friday.\n * @property {HTMLElement}\n */\n get lastVisibleCell() {\n const visibleCells = this.contentElement.querySelectorAll(this.visibleCellSelector);\n return visibleCells[visibleCells.length - 1];\n }\n /**\n * The date of the first *visible* event-bearing element in this view. So if the first day defined\n * in the range is a Sunday, and {@link #config-hideNonWorkingDays} is set, then the first visible\n * date will be the date of the Monday.\n * @property {Date}\n */\n get firstVisibleDate() {\n const\n me = this,\n date = new Date(me.startDate),\n // Extracting the month index from our instance of the Month helper class\n { month } = me.month;\n while ((me.hideOtherMonthCells && date.getMonth() !== month) || me.hiddenNonWorkingDays[date.getDay()]) {\n date.setDate(date.getDate() + 1);\n }\n return date;\n }\n /**\n * The date of the last *visible* event-bearing element in this view. So if the last day defined\n * in the range is a Sunday, and {@link #config-hideNonWorkingDays} is set, then the last visible\n * date will be the date of the Friday.\n * @property {Date}\n */\n get lastVisibleDate() {\n const\n me = this,\n date = DH.add(me.endDate, -1, 'd'),\n // Extracting the month index from our instance of the Month helper class\n { month } = me.month;\n while ((me.hideOtherMonthCells && date.getMonth() !== month) || me.hiddenNonWorkingDays[date.getDay()]) {\n date.setDate(date.getDate() - 1);\n }\n return date;\n }\n updateHideNonWorkingDays(hideNonWorkingDays) {\n const\n me = this,\n {\n month,\n calendar\n } = me;\n me.contentElement?.classList[hideNonWorkingDays ? 'add' : 'remove'](me.hideNonWorkingDaysCls);\n // Bail out for view types not supporting this (ResourceView)\n if (month == null) {\n return;\n }\n let activeColumnIndex, date, activeDay;\n // Our active date is going to be hidden\n if (!me.isConfiguring && hideNonWorkingDays) {\n date = me.date;\n activeDay = date?.getDay();\n if (date && me.nonWorkingDays[activeDay] && me.getDayElement(date)) {\n activeColumnIndex = month.visibleDayColumnIndex[activeDay];\n }\n }\n month.hideNonWorkingDays = hideNonWorkingDays;\n super.updateHideNonWorkingDays?.(hideNonWorkingDays);\n // Active date has been hidden by hiding nonworking days, we must move it.\n if (typeof activeColumnIndex === 'number') {\n const\n weekStart = month.getWeekStart(month.getWeekNumber(date)),\n newActiveColumnIndex = Math.min(activeColumnIndex, month.visibleColumnCount - 1);\n // Find the date for the new visible column index\n for (let i = -1; ; weekStart.setDate(weekStart.getDate() + 1)) {\n // Entry may be zero, cannot use truthiness test\n if (typeof month.visibleDayColumnIndex[weekStart.getDay()] === 'number') {\n if (++i === newActiveColumnIndex) {\n break;\n }\n }\n }\n me.date = weekStart;\n // Owning active date should change\n calendar && (calendar.date = date);\n }\n }\n onCalendarStoreChange({ source, action }) {\n const me = this;\n // Draw on project refresh instead of on dataset.\n // Unless it's a chained store; they change dataset upon master store change\n if (action === 'dataset' && !source.isChained) {\n return;\n }\n // Only refresh once initial commit is performed and change is not cause by project writing back data\n if (me.project.isInitialCommitPerformed && !me.project.isWritingData && me.project.isEngineReady()) {\n // CellMap must be rebuilt when data changes\n me._cellMap?.clear();\n me.refreshSoon();\n }\n }\n /**\n * Schedules a refresh of the UI for the next animation frame. This is a useful method to call when\n * making multiple data changes, so that each change merely *schedules* a refresh for the next AF and\n * DOM churn is kept to a minimum.\n *\n * Calling {@link #function-refresh} directly cancels any scheduled refresh operation and updates\n * the UI immediately\n */\n refreshSoon() {\n this.refresh();\n }\n /**\n * Called when new event is created.\n * \u0421an be overridden to supply default record values etc.\n * @param {Scheduler.model.EventModel} eventRecord Newly created event\n */\n onEventCreated(eventRecord) {\n // template method\n }\n /**\n * Returns the event record for a DOM element or DOM event.\n * @param {HTMLElement|Event} elementOrEvent The DOM node to lookup, or a DOM event whose target to lookup.\n * @returns {Scheduler.model.EventModel} The event record\n */\n getEventRecord(elementOrEvent) {\n let element = (elementOrEvent instanceof Event) ? elementOrEvent.target : elementOrEvent;\n element = element?.closest?.('[data-event-id]');\n return element && this.eventStore.getById(element.dataset.eventId);\n }\n /**\n * Returns the resource record for a DOM element or DOM event if the element is inside a view\n * which displays events for one resource such as a {@link Calendar.widget.ResourceView}\n * or a {@link Calendar.widget.DayResourceView}.\n * @param {HTMLElement|Event} elementOrEvent The DOM node to lookup, or a DOM event whose target to lookup.\n * @returns {Scheduler.model.ResourceModel} The resource record\n */\n getResourceRecord(elementOrEvent) {\n let element = (elementOrEvent instanceof Event) ? elementOrEvent.target : elementOrEvent;\n element = element?.closest('[data-resource-id]') || null;\n return element && this.resourceStore.getById(element.dataset.resourceId);\n }\n /**\n * Returns the event record for a DOM element or DOM event.\n * @param {HTMLElement|Event} elementOrEvent The DOM node to lookup, or a DOM event whose target to lookup.\n * @returns {Scheduler.model.EventModel} The event record\n */\n resolveEventRecord(elementOrEvent) {\n // this method is added for symmetry w/SchedulerInterface\n return this.getEventRecord(elementOrEvent);\n }\n getDateFromElement(element, keyParser = null, raw = false) {\n // Month headers also yield the start date for that month\n let dateElement = element?.closest('[data-date],[data-header-date],[data-month-date]');\n // Clicked on an element with a data-date or data-header-date, or data-month-date value.\n // Callers who need a more granular date WRT time shifting, such as CalendarDrag should pass\n // a DayTime instance with the correct startShift.\n // As a default, most views use DateHelper, a DayView uses its own DayTime.\n if (dateElement) {\n const rawDate = dateElement.dataset.date || dateElement.dataset.headerDate || dateElement.dataset.monthDate;\n return raw ? rawDate : (keyParser || (this.isDayView ? this.dayTime : DH)).parseKey(rawDate);\n }\n dateElement = element?.closest('[data-week]');\n // Clicked on an element with a data-week value, that should yield the week start date.\n if (dateElement) {\n return this.month?.getWeekStart(dateElement.dataset.week.split(',').map(Number));\n }\n }\n getDateFromDomEvent(domEvent) {\n return this.getDateFromElement(DomHelper.getEventElement(domEvent));\n }\n getDateFromPosition() {\n return null;\n }\n dateKey(date) {\n return DH.makeKey(date);\n }\n /**\n * Returns the cell associated with the passed date.\n *\n * In certain views, the strict definition if whether the view owns the date may be optionally enforced.\n *\n * For example, in a YearView or MonthView, dates outside the configured year or month may be displayed.\n *\n * To exclude these, pass the `strict` parameter as `true`\n * @param {Date|String} date The date to find the element for or a key in the format `YYYY-MM-DD`\n * @param {Boolean} strict Only return the element if this view *owns* the date. (MonthView and YearView)\n */\n getDayElement(date, strict) {\n if (typeof date !== 'string') {\n date = this.dateKey(date);\n }\n return this.eventContentElement.querySelector(`[data-date=\"${date}\"]`);\n }\n // Used by DayView and CalendarRow to see which day cell the X position relates to.\n getDayElementFromX(x) {\n const dayCells = this.eventContentElement.querySelectorAll('[data-date]');\n for (let rect, el, i = 0, { length } = dayCells; i < length; i++) {\n rect = (el = dayCells[i]).getBoundingClientRect();\n if (x >= rect.x && x <= rect.x + rect.width) {\n return el;\n }\n }\n return dayCells[0];\n }\n /**\n * Returns the outermost element which represents the first block of the passed event in the view. *If the\n * event is represented within the view*.\n *\n * *Note* if the event covers multiple weeks, this will only return the first element.\n *\n * To return all elements use {@link #function-getEventElements}.\n *\n * To return an event element at a particular date, pass the date as the second parameter.\n * @param {Scheduler.model.EventModel|String|Number} eventRecord The event, or event ID to find the element for.\n * @param {Date} [date] Optionally, the event element at the specified date.\n * @returns {HTMLElement} The first element which corresponds to the event. Note that *some* views,\n * such as {@link Calendar.widget.MonthView MonthView} and {@link Calendar.widget.CalendarRow CalendarRow}\n * may render multiple elements for long events.\n */\n getEventElement(eventRecord, date = Math.max(eventRecord.startDate, this.firstVisibleDate || this.startDate)) {\n const\n me = this,\n activeEventElement = me.calendar?.navigator.activeItem,\n activeDate = me.getDateFromElement(activeEventElement),\n eventId = me.eventStore.modelClass.asId(eventRecord);\n // If the navigated to event is still in the document and is the event being asked for,\n // and on the active date, then use that element.\n // Some views have multiple elements representing one event.\n if (document.contains(activeEventElement) && activeEventElement?.dataset.eventId === String(eventId) && (activeDate && !(date - activeDate))) {\n return activeEventElement;\n }\n if (date) {\n const dayCell = me.getDayElement(date);\n if (dayCell) {\n // In EventList, the day cell is the event el.\n // In all other views the day cell *contains* the event el.\n return DomHelper.down(dayCell, `[data-event-id=\"${eventId}\"]`);\n }\n }\n return me.getEventElements(eventRecord)[0];\n }\n /**\n * Returns all outermost elements which represents the passed event in the view. *If the\n * event is represented within the view*\n * @param {Scheduler.model.EventModel|String|Number} eventRecord The event, or event ID to find the elements for.\n * @returns {HTMLElement[]} The elements which corresponds to the event. Note that *some* views,\n * such as {@link Calendar.widget.MonthView MonthView} and {@link Calendar.widget.CalendarRow CalendarRow}\n * may render multiple elements for long events.\n */\n getEventElements(eventRecord) {\n const eventId = this.eventStore.modelClass.asId(eventRecord);\n return this.eventContentElement.querySelectorAll(`[data-event-id=\"${eventId}\"]`);\n }\n onEventMouseOverOut(domEvent) {\n const\n me = this,\n {\n currentOverEventEl\n } = me,\n isOut = domEvent.type === 'mouseout',\n toElement = domEvent[isOut ? 'relatedTarget' : 'target'],\n toEventEl = toElement?.closest('.b-cal-event-wrap') || null,\n isChange = toEventEl !== (currentOverEventEl || null);\n if (isChange) {\n if (isOut) {\n me.currentOverEventEl = null;\n if (currentOverEventEl) {\n Object.defineProperty(domEvent, 'target', {\n configurable : true,\n get : () => currentOverEventEl\n });\n }\n return me.onCalendarPointerInteraction(domEvent);\n }\n else {\n me.currentOverEventEl = toEventEl;\n return me.onCalendarPointerInteraction(domEvent);\n }\n }\n }\n /**\n * Determines what is under the cursor of the specified event or what is described by the given element.\n * @param {Event|Element} domEvent The event or element\n * @returns {CalendarHit}\n */\n calendarHitTest(domEvent) {\n const\n me = this,\n { monthSelector } = me,\n date = me.getDateFromDomEvent(domEvent),\n target = DomHelper.getEventElement(domEvent);\n let ret = null,\n closest,\n eventRecord;\n // Only a hit on an event if the event could be found in the EventStore.\n // May be a transient event added solely to the UI and not backed by the store.\n if ((closest /* assignment */ = target.closest('.b-cal-event-wrap')) && (eventRecord /* assignment */ = me.eventStore.getById(closest.dataset.eventId))) {\n ret = {\n type : 'event',\n eventElement : closest,\n eventRecord\n };\n }\n // If we are showing week number in its own column, then the whole cell header represents the day.\n // Otherwise just the .b-day-name represents it.\n else if ((closest /* assignment */ = target.closest(me.dayNameSelector))) {\n ret = {\n type : 'dayNumber',\n dayNumberElement : closest\n };\n }\n else if ((closest /* assignment */ = target.closest('.b-week-num,.b-week-number-cell'))) {\n const weekElement = target.closest('.b-calendar-week');\n // Week number cell in the day name row has no week.\n if (weekElement && weekElement.dataset.week) {\n ret = {\n type : 'weekNumber',\n week : weekElement.dataset.week.split(',').map(Number),\n weekNumberElement : closest,\n weekElement\n };\n }\n }\n else if (monthSelector && target.closest(monthSelector)) {\n ret = {\n type : 'monthName',\n month : date.getMonth(),\n date\n };\n }\n if (!ret) {\n if ((closest /* assignment */ = target.closest('.b-cal-cell-overflow'))) {\n ret = {\n type : 'cellOverflow',\n cellOverflowElement : closest\n };\n }\n else if (date) {\n ret = {\n type : 'schedule'\n };\n }\n }\n if (ret) {\n ret.resource = me.getResourceRecord(domEvent);\n ret.cell = target.closest('.b-calendar-cell');\n ret.date = date;\n ret.view = me;\n }\n return ret;\n }\n onCalendarPointerInteraction(domEvent) {\n const\n me = this,\n { monthSelector } = me,\n { target } = domEvent,\n fromOverflowPopup = Boolean(target.closest('.b-overflowpopup')),\n domEventName = eventNameMap[domEvent.type],\n eventWrap = target.closest('.b-cal-event-wrap'),\n eventRecord = eventWrap ? me.eventStore.getById(eventWrap.dataset.eventId) : me.getEventRecord(target),\n date = domEvent.key ? eventRecord?.startDate : me.getDateFromDomEvent(domEvent),\n eventElement = eventWrap || (eventRecord && me.getEventElement(eventRecord, date)),\n resourceElement = target.closest('[data-resource-id]'),\n resourceRecord = resourceElement && me.resourceStore.getById(resourceElement.dataset.resourceId);\n let result;\n // Mouse interaction was on a resource.\n // These can be outside of the eventContentElement.\n // Resource is a property of an event, so it triggers first.\n if (resourceRecord) {\n result = me.trigger(`resource${domEventName}`, {\n domEvent,\n date,\n eventElement,\n eventRecord,\n resourceRecord,\n fromOverflowPopup\n });\n }\n // If we are showing week number in its own column, then the whole cell header represents the day.\n // Otherwise just the .b-day-name represents it.\n if (target.closest(me.dayNameSelector)) {\n result = me.trigger(`dayNumber${domEventName}`, {\n domEvent,\n date,\n cellData : me.cellMap.get(date) || me.createCellData(date),\n resourceRecord,\n fromOverflowPopup\n });\n if (result === false) {\n return result;\n }\n }\n // All other interaction must be in content element or our overflow popup.\n if (!fromOverflowPopup && !me.eventContentElement.contains(target)) {\n return;\n }\n // Mouse interaction was on an event\n if (result !== false && eventRecord) {\n const eventResult = me.trigger(`event${domEventName}`, {\n domEvent,\n date,\n eventElement,\n eventRecord,\n resourceRecord,\n fromOverflowPopup\n });\n if (eventResult) {\n result = eventResult;\n }\n }\n // Interacted with an event. No further interaction.\n if (eventRecord) {\n return result;\n }\n // Interaction was with a week number\n if (target.closest('.b-week-num,.b-week-number-cell')) {\n const weekElement = domEvent.target.closest('[data-week]');\n // If we find an element we can ask the week.\n if (weekElement) {\n return me.trigger(`weekNumber${domEventName}`, {\n domEvent,\n week : weekElement.dataset.week.split(',').map(Number),\n date : me.getDateFromElement(weekElement.querySelector('.b-calendar-cell')),\n fromOverflowPopup\n });\n }\n }\n // Interaction was with a month in the YearView.\n if (monthSelector && target.closest(monthSelector)) {\n return me.trigger(`monthName${domEventName}`, {\n domEvent,\n month : date.getMonth(),\n date,\n fromOverflowPopup\n });\n }\n // Interacting with a cell overflow indicator\n if (target.closest('.b-cal-cell-overflow')) {\n if (me.trigger(`cellOverflow${domEventName}`, {\n domEvent,\n date,\n fromOverflowPopup,\n resourceRecord\n }) !== false) {\n return;\n }\n }\n // It's only a schedule{event} if the event is in a day cell.\n // Pure Grid views like ListView don't have a schedule area - it's all events.\n if (date && me.dayCellCls && domEvent.target.closest(`.${me.dayCellCls}`)) {\n result = me.trigger(`schedule${domEventName}`, {\n domEvent,\n date,\n fromOverflowPopup,\n resourceRecord\n });\n if (result === false) {\n return result;\n }\n }\n // Finally check if the gesture matches the autoCreate gesture.\n // A precise time is passed to autoCreate if possible (Only DayView offers a precise time)\n // This is so that the autoCreate's configure snapType may be applied\n me.checkAutoCreateGesture(domEvent, me.getDateFromDomEvent(domEvent, true), resourceRecord || undefined);\n return result;\n }\n onCalendarKeyDown(keyEvent) {\n if (keyEvent.ctrlKey && keyEvent.key.toLowerCase() === 'z' && this.calendar?.enableUndoRedoKeys) {\n this.project?.stm?.onUndoKeyPress(keyEvent);\n }\n else {\n this.onCalendarPointerInteraction(keyEvent);\n }\n }\n isAllDayEvent(eventRecord) {\n return eventRecord.allDay || (eventRecord.isScheduled && this.dayTime ? this.dayTime.isInterDay(eventRecord) : eventRecord.isInterDay);\n }\n /**\n * Sort the given array of `events` in the desired order for this view.\n * @param {Scheduler.model.EventModel[]} events\n * @internal\n */\n sortEvents(events) {\n events.sort(this.eventSorter);\n }\n //region Extract configs\n // These functions are not meant to be called by any code other than Base#getCurrentConfig().\n // This excludes project and calendar from being serialized,\n // they are always assigned on creation not actually configurable\n preProcessCurrentConfigs(configs) {\n super.preProcessCurrentConfigs(configs);\n delete configs.calendar;\n delete configs.project;\n }\n // Extracts the current configs for the calendar view, with special handling to exclude project\n getCurrentConfig(options) {\n const result = super.getCurrentConfig(options);\n delete result.project;\n return result;\n }\n //endregion\n};\n", "import Base from '../../../Core/Base.js';\nimport DH from '../../../Core/helper/DateHelper.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\nimport DayTime from '../../../Core/util/DayTime.js';\nimport Month from '../../../Core/util/Month.js';\nimport EventSlots from '../../util/EventSlots.js';\n/**\n * @module Calendar/widget/mixin/DayCellCollecter\n */\nconst\n byKey = ({ key : lhs }, { key : rhs }) => {\n return lhs < rhs ? -1 : rhs < lhs ? 1 : 0;\n },\n extractEndDate = e => e.endDate || DH.add(e.startDate, e.duration, e.durationUnit);\n/**\n * A data block created by all {@link Calendar.widget.mixin.DayCellCollecter} Calendar views to\n * encapsulate occupied day cells and the events which intersect with each date to be shown in the UI.\n * All useful data about the date and the shape of the UI is included.\n * @typedef {Object} DayCell\n * @property {Date} date The date of the cell.\n * @property {String} key a `YYYY-MM-DD` formatted date key for the cell.\n * @property {Number} cellIndex The overall cell index in the cell-based UI being created.\n * @property {Number} day The day of week for the cell: 0=Sunday, 6=Saturday\n * @property {Number} columnIndex The column index in the cell-based UI being created.\n * @property {Number} visibleColumnIndex The visible column index (eg 0 for a Monday if Sunday is the week start day, but was hidden)\n * @property {Boolean} isNonWorking `true` if the owning view considers the date a non-working day.\n * @property {Number[]} week The `[year, week]` encapsulating the cell.\n * @property {Boolean} isOtherMonth The cell is outside the view's primary time range. Only significant\n * when used by a CalendarPanel which encapsulates a single month.\n * @property {Boolean} visible `true` if the date cell is not for a hidden day.\n * @property {Date} tomorrow The date of the following cell.\n * @property {Boolean} isRowStart `true` if the cell is at the start of a visible row.\n * @property {Boolean} isRowEnd `true` if the cell is at the end of a visible row.\n * @property {Boolean} hasOverflow `true` if the `renderedEvents` overflow the cell height and\n * require a `+n more` button.\n * @property {Scheduler.model.EventModel[]} events The events which are to be shown for this date.\n * @property {EventBar[]} renderedEvents If this view renders event bars ({@link Calendar.widget.MonthView},\n * {@link Calendar.widget.CalendarRow}, {@link Calendar.widget.AgendaView}), then this is an array of\n * {@link EventBar event bar} definitions which belong in the cell. Whether all can be rendered depends\n * upon the view's configured {@link Calendar.widget.mixin.CalendarMixin#config-eventHeight} and whether\n * the cell is of fixed height. The `hasOverflow` property is set if the rendered events overflow\n * a cell's fixed capacity.\n */\n/**\n * A data block which describes how an event bar is to be rendered into a day cell.\n * @typedef {Object} EventBar\n * @property {Scheduler.model.EventModel} eventRecord The event record for which the event bar is being rendered.\n * @property {Date} propagateEndDate The date of the last cell into which the event bar will extend.\n * @property {Core.helper.util.DomClassList} cls The CSS classes to apply to the event bar.\n * @property {Core.helper.util.DomClassList} iconCls The CSS classes to apply to an event icon.\n * @property {Object} dataset Property names and values to be applied to the Event bar's DOM `dataset`\n * @property {String} eventColor Either a predefined colour name, or a DOM colour value to apply to the event bar.\n * @property {Boolean} isAllDay `true` if the event is flagged as an all day event in its data, or\n * if it spans a day boundary and occupies more than one cell.\n * @property {Boolean} isOverflow `true` if this event bar is a continuation from a previous cell.\n * @property {Boolean} overflows `true` if this event bar flows into the next cell.\n * @property {Boolean} solidBar `true` if the event bar is to be rendered with a solid background of\n * its defined colour. All day events are solid by default.\n */\n/**\n * Mixin that provides the ability to collect {@link DayCell day cell} data containing the events\n * of interest to a Calendar widget.\n *\n * This is used by all implemented Calendar widgets Except {@link Calendar.widget.AgendaView}\n * which creates its cellMap from the events it finds in the eventStore.\n *\n * @mixin\n */\nexport default Target => class DayCellCollecter extends (Target || Base) {\n static get $name() {\n return 'DayCellCollecter';\n }\n static get configurable() {\n return {\n /**\n * A function, or the name of a function in the ownership hierarchy to filter which events\n * are collected into the day cell data blocks.\n * Return `true` to include the passed event, or a *falsy* value to exclude the event.\n *\n * @config {Function|String}\n * @param {Scheduler.model.EventModel} event the passed event\n * @returns {Boolean}\n */\n eventFilter : {\n $config : 'lazy',\n value : null\n }\n };\n }\n get dayTime() {\n return DayTime.MIDNIGHT;\n }\n get cellMonth() {\n return this._cellMonth || (this._cellMonth = new Month({}));\n }\n changeEventFilter(eventFilter) {\n if (typeof eventFilter === 'string') {\n const { handler, thisObj } = this.resolveCallback(eventFilter);\n eventFilter = handler.bind(thisObj);\n }\n return eventFilter;\n }\n createCellMap(getEventsOptions = {}) {\n const\n me = this,\n {\n filter,\n skipPropagate\n } = getEventsOptions,\n {\n eventFilter,\n cellMonth,\n lastVisibleDate\n } = me,\n cellMap = getEventsOptions.cellMap || me._cellMap || (me._cellMap = new CellMap());\n // For data purposes, last visible Date is 00:00 on the following day\n if (lastVisibleDate) {\n lastVisibleDate.setDate(lastVisibleDate.getDate() + 1);\n }\n let startDate = getEventsOptions.startDate || me.firstVisibleDate || me.startDate,\n endDate = getEventsOptions.endDate || lastVisibleDate || me.endDate;\n // We need a separate Month object to iterate through the cells to create cell context objects\n cellMonth.configure({\n weekBase : null,\n weekStartDay : me.weekStartDay,\n nonWorkingDays : me.nonWorkingDays,\n hideNonWorkingDays : me.hideNonWorkingDays,\n sixWeeks : me.sixWeeks,\n date : startDate\n });\n if (me.eventStore) {\n // Create mutable copy so that collectEvents implementations may intervene\n getEventsOptions = ObjectHelper.assign({\n dayTime : DayTime.MIDNIGHT\n }, getEventsOptions, {\n filter : filter && eventFilter ? e => filter(e) && eventFilter(e) : (filter || eventFilter),\n dateMap : cellMap,\n startDate,\n endDate\n });\n me.collectEvents(getEventsOptions);\n // collectEvents may manipulate the exact view start and end.\n // For example MonthView.hideOtherMonthCells\n startDate = getEventsOptions.startDate;\n endDate = getEventsOptions.endDate;\n // Create a cell entry for every date which this view encapsulates which intersects\n // with an event.\n // To be completely clear: depending upon the requirements of the widget that\n // mixes there will likely be some cell entries created\n // here which may never have any events *STARTING* in them.\n // But they may exist because they have events from previous days\n // flowing into them.\n // These must exist because they still need to propagate their overflowing\n // events forward into visible cells.\n // All cells which require visible event bars will be represented here.\n // Multi day events will be propagated forward into their following cells\n // further down.\n //\n // Extract the keys() iterator into an array first because the cellMap will be\n // added to during the iteration because of forward-propagation cells being added\n // when events reach forward in time. We only want to iterate the *preexisting*\n // set of event dates. The new entries created for propagation will be be added\n // containing empty cellData blocks.\n for (const key of [...cellMap.keys()]) {\n let lastEventEndDate = 0;\n const\n dayTime = getEventsOptions.dayTime,\n date = dayTime.dayOfDate(DH.parseKey(key)),\n cellData = me.createCellData(date),\n sortEvent = {\n events : cellMap.get(key),\n date\n };\n me.sortEvents(sortEvent.events, date);\n /**\n * Fired after one day cell's events are collected in sorted order according to the\n * {@link Calendar.widget.mixin.CalendarMixin#config-eventSorter}\n *\n * An application may use this to intervene in the event load received by the UI\n * by mutating the `events` array.\n * @event dayCellPopulated\n * @param {Scheduler.model.EventModel[]} events The events to be shown for the passed date\n * @param {Date} The date the events are to be shown in.\n */\n me.trigger('dayCellPopulated', sortEvent);\n // In case an event handler mutated the event\n const events = sortEvent.events;\n if (getEventsOptions.rawEvents) {\n lastEventEndDate = Math.min(endDate, Math.max.apply(Math, events.map(extractEndDate)));\n cellData.events = events;\n }\n else {\n cellData.events = events.map(eventRecord => {\n const\n eventEndDate = eventRecord.endingDate,\n overflows = eventEndDate > cellData.tomorrow,\n eventData = {\n isAllDay : me.isAllDayEvent(eventRecord),\n isOverflow : eventRecord.startDate < cellData.date && (date - startDate),\n eventRecord,\n eventEndDate,\n overflows,\n date\n };\n if (!skipPropagate) {\n lastEventEndDate = Math.min(endDate, Math.max(lastEventEndDate, eventEndDate));\n if (overflows) {\n eventData.propagateEndDate = me.calculatePropagateEndDate(eventData, endDate);\n }\n }\n return eventData;\n });\n }\n // Create the cells to propagate into based on the latest ending of the events just found.\n // Cells after the first cell are collected on a startDate only basis, so the cells they\n // will extend into will need to be created.\n // This operation mutates the cellMap but the ongoing iteration must not be affected.\n if (!skipPropagate) {\n for (; date < lastEventEndDate; date.setDate(date.getDate() + 1)) {\n const key = dayTime.dateKey(date);\n // At the end of the outer cellMap iteration, it is expected that all\n // entries will consist of cellData blocks, *not* raw arrays\n // of events, so when creating the cells for propagation, create\n // cell data blocks for any currently non-existent dates.\n cellMap.has(key) || cellMap.set(key, me.createCellData(date));\n }\n }\n // Change the raw event array to a cellData object\n cellMap.set(key, cellData);\n }\n // Pre-fill slots for all days that the events for this day cover\n if (cellMap.size) {\n // Sort the day entries into ascending date order.\n // The creation of the cells to propagate into may create some out of order\n const cellMapEntries = [...cellMap.values()].sort(byKey);\n let previousEvents;\n // Replace entries in order while linking them up to form a linked list.\n cellMap.clear();\n cellMapEntries.forEach(entry => {\n cellMap.set(entry.key, entry);\n if (previousEvents) {\n previousEvents.nextEvents = entry;\n entry.previousEvents = previousEvents;\n }\n previousEvents = entry;\n });\n // Pre-fill slots for all days that the events for this day cover\n if (!skipPropagate) {\n me.propagateCellEvents(cellMapEntries[0], cellMap);\n }\n }\n }\n // The getter kicks off a new create for cellMaps which are not populated.\n // A cellMap with zero size may still have been populated.\n cellMap.populated = true;\n /**\n * Fired when a new set of events has been gathered for this view's date range.\n * @event cellMapPopulated\n */\n me.trigger('cellMapPopulated', {\n cellMap\n });\n return cellMap;\n }\n /**\n * Calculates the end date (EXCLUSIVE) to which an event must be propagated based upon the\n * event's data in order to create a day-spanning event bar.\n *\n * If an event overflows into 2011-01-02T01:00, then the exclusive propagateEndDate\n * is 2011-01-03T00:00:00 so the event will be propagated into 2011-01-02.\n *\n * But if an event ends on 2011-01-02T00:00:00, its propagateEndDate will be 2011-01-02T00:00:00\n * so it will be propagated as far as 2011-01-01\n *\n * This may be overridden in subclasses to customize how events are propagated forwards.\n *\n * example:\n * ```javascript\n * class OvernightEventMonthView extends MonthView {\n * static get name() {\n * return 'OvernightEventMonthView';\n * }\n *\n * static get type() {\n * return 'overnighteventmonthview';\n * }\n *\n * calculatePropagateEndDate(eventData) {\n * // If the event only spills into the next day but not further\n * // then we do not want an extended event bar.\n * // It will still get an arrow indicating that it continues rightwards.\n * if (eventData.eventEndDate < DateHelper.add(eventData.date, 1, 'd')) {\n * return DateHelper.add(DateHelper.clearTime(eventData.eventRecord.startDate), 1, 'd');\n * }\n * // Default case, propagate event into the future as usual\n * return super.calculatePropagateEndDate(eventData);\n * }\n * }\n * // Register the type name\n * OvernightEventMonthView.initClass();\n *\n * new Calendar({\n * modes : {\n * // Use our MonthView subclass as the month mode.\n * month : {\n * type :'overnighteventmonthview'\n * }\n * }\n * })\n * ```\n *\n * Note that this is implemented by both {@link Calendar.widget.MonthView} and {Calendar.widget.CalendarRow}\n * which is the \"all day\" row in a week or day view.\n *\n * @param {Object} eventData A data block describing the time context of an event.\n * @param {Date} eventData.eventEndDate The end date for which to calculate the propagate end date.\n * @param {Boolean} eventData.isAllDay `true` if the event is an all day event, or spans multiple days.\n * @param {Boolean} eventData.isOverflow `true` if this is being called as part of further propagation.\n * @param {Boolean} eventData.overflows `true` if the event extends into future cells.\n * @param {Scheduler.model.EventModel} eventData.eventRecord The event record being propagated.\n * @param {Date} eventData.date The date from which the event is being propagated.\n * @returns {Date} The date (as a timepoint, *not* a reference to a 24 hour time block)\n * to which the event bar should be propagated\n * @internal\n */\n calculatePropagateEndDate(eventData, viewEndDate = this.endDate) {\n const\n { eventEndDate : endDate } = eventData,\n startOfDay = this.dayTime.startOfDay(endDate);\n // Round a timeStamp after midnight to the next midnight.\n // Then minimize with our end date. No point collecting cells after the view's last cell\n eventData.propagateEndDate = new Date(Math.min((endDate > startOfDay) ? DH.add(startOfDay, 1, 'day') : endDate, viewEndDate));\n /**\n * Fires when a day spanning event is found, and the date to which its encapsulating event bar\n * extends has been calculated.\n *\n * The default result in the event's `propagateEndDate` property may be mutated by a listener.\n *\n * Note that this is an ending point in time, it does *not* refer to a 24 hour block. So setting\n * the `propagateEndDate` to `new Date(2022, 1, 10)` means that the event bar will occupy cells\n * up to and including February 9 2022 and no further.\n *\n * This is relayed through the owning {@link Calendar.view.Calendar}, so a single listener\n * may be used, for example:\n *\n * ```javascript\n * new Calendar({\n * listeners : {\n * eventPropagate(eventData) {\n * // If the event only spills into the next day but not further\n * // then we do not want an extended event bar.\n * // An arrow will indicate that it continues rightwards.\n * if (eventData.eventEndDate < DateHelper.add(eventData.date, 2, 'd')) {\n * eventData.propagateEndDate = DateHelper.add(DateHelper.clearTime(eventData.eventRecord.startDate), 1, 'd');\n * }\n * }\n * }\n * })\n * ```\n *\n * The `eventEndDate` in the data block may also be changed to override the event's real end date.\n * This will mean that there will be no arrow indicating that the event continues:\n *\n * ```javascript\n * new Calendar({\n * listeners : {\n * eventPropagate(eventData) {\n * // If the event spills into the next day but not further\n * // then we do not want an extended event bar.\n * // Because we override the eventEndDate, no arrow will be present\n * // to indicate any continuation.\n * if (eventData.eventEndDate < DateHelper.add(eventData.date, 2, 'd')) {\n * eventData.propagateEndDate = eventData.eventEndDate = DateHelper.add(DateHelper.clearTime(eventData.eventRecord.startDate), 1, 'd');\n * }\n * }\n * }\n * });\n * ```\n *\n * @event eventPropagate\n * @param {Date} eventEndDate The end date for which to calculate the propagate end date.\n * @param {Date} propagateEndDate The system-calculated end point of the event bar.\n * @param {Boolean} isAllDay `true` if the event is an all day event, or spans multiple days.\n * @param {Boolean} isOverflow `true` if this is being called as part of further propagation.\n * @param {Boolean} overflows `true` if the event extends into future cells.\n * @param {Scheduler.model.EventModel} eventRecord The event record being propagated.\n * @param {Date} date The date from which the event is being propagated.\n */\n this.trigger('eventPropagate', eventData);\n return eventData.propagateEndDate;\n }\n // Overrideable in subclasses.\n collectEvents(options) {\n return this.eventStore.getEvents(options);\n }\n propagateCellEvents(cellData, cellMap) {\n const\n {\n events,\n renderedEvents,\n previousEvents,\n nextEvents,\n date\n } = cellData,\n eventsPerCell = this.getEventsPerCell(date),\n { length } = events;\n for (let i = 0; i < length; i++) {\n const\n event = events[i],\n {\n eventRecord,\n propagateEndDate,\n eventEndDate\n } = event;\n // This is its start slot in its starting cell.\n // For the rest of the week, it must occupy the same slot in cells\n // that iot flow into.\n // Once wrapped to a new week, it just stacks up in available space.\n let renderedSlot = renderedEvents.add(event);\n // The event overflows into future cells.\n // We need to claim the event's slot in any future cells which it covers.\n if (event.overflows) {\n // It's only overflow in cells which come *after* it has become visible\n let isVisible = cellData.visible, lastEvent;\n // Walk forwards until we are on a cell which is not covered by this event.\n for (let nextDay = nextEvents; nextDay && nextDay.date < propagateEndDate; nextDay = nextDay.nextEvents) {\n // On move to a new week, we no longer have to maintain the same event slot\n if (!nextDay.columnIndex) {\n renderedSlot = nextDay.renderedEvents.firstFreeSlot;\n }\n // For each day into which the event extends, occupy its slot\n nextDay.renderedEvents.set(renderedSlot, lastEvent = {\n eventRecord,\n eventEndDate,\n propagateEndDate,\n isAllDay : event.isAllDay,\n isOverflow : isVisible,\n overflows : true\n });\n // Once it's visible, all future cell slots have isOverflow: true\n isVisible = isVisible || nextDay.visible;\n }\n // Obviously the last one we propagated to does not overflow\n lastEvent && (lastEvent.overflows = false);\n }\n }\n // The loop end when rendering\n cellData.maxRow = renderedEvents.length;\n const lastEvent = renderedEvents[eventsPerCell - 1];\n // If we're just filling our cell, but the last one is an overflow from the previous cell\n // AND the previous cell vertically overflowed, we must show the +1 more indicator to match.\n // This is the *ONLY* case where we ever show a \"+1 more\" indicator.\n // We show \"+2 more\" at least because an overflow indicator is the same height as an event bar.\n if (renderedEvents.length === eventsPerCell) {\n if (lastEvent?.isOverflow && previousEvents?.hasOverflow) {\n cellData.maxRow--;\n cellData.hasOverflow = true;\n }\n }\n // Decide whether the cell's rendered events overflow its height.\n else if (renderedEvents.length > eventsPerCell) {\n cellData.maxRow = eventsPerCell - 1;\n cellData.hasOverflow = true;\n // If the last slot is an overflow, its originating cell and all intervening ones\n // must be flagged as overflowing so that they get a +\"1 more\" indicator.\n // The originating cell and all intervening cells must display the overflow indicator\n // if its last visible slot overflows and any future cells that it flows into overflow.\n // See below. We are processing that 3rd cell.\n // If the 3rd cell was not overflowing, it would be fine.\n // But because it needs its own \"+2 More\" indicator, that originating\n // cell and all intervening ones must also get a \"+1 More\" indicator even\n // if they're not overflowing because there must be no long event bar to\n // obscure Oct 12's \"+2 More indicator\".\n // +----------+----------+----------+----------+\n // | Oct 10 | Oct 11 | Oct 12 | |\n // +----------+----------+----------+----------+\n // | Event | Event | Event | |\n // | Event | Event | Event | |\n // | Event | Event | Event | |\n // | EventWhichIsExtremelyLong | |\n // +----------+----------+----------+----------+\n // Event\n if (lastEvent?.isOverflow) {\n const\n // Jump back to row's start cell. That will depend what a row is.\n // If we can find a weekContext (this isa MonthView), use the week start date\n // else use the view's start date.\n weekStartValue = this.getWeekContext?.(date).visibleWeekStart || this.firstVisibleDate,\n eventStartValue = DH.clearTime(lastEvent.eventRecord.startDate).valueOf();\n // Only go back as far as the start of the current week.\n let originatingCell = cellMap.get(DH.makeKey(new Date(Math.max(weekStartValue, eventStartValue))));\n // So if Oct 12's lastEvent isOverflow, we loop through Oct 10 and 11th's cells\n // and reduce the number of available visual slots\n while (originatingCell.key !== cellData.key) {\n originatingCell.hasOverflow = true;\n originatingCell.maxRow = eventsPerCell - 1;\n originatingCell = originatingCell.nextEvents;\n }\n }\n }\n // Walk on to the next one\n nextEvents && this.propagateCellEvents(nextEvents, cellMap);\n }\n createCellData(date) {\n return Object.assign(this.cellMonth.getCellData(date, this.month, this.dayTime), {\n events : [],\n // Events can forward-occupy slots if they\n // overrun their start day.\n // So the next step is to propagate forward\n // multi day events into future cells they cover.\n renderedEvents : new EventSlots()\n });\n }\n};\n// We need a cell map which can be flagged as being populated even if it is empty\n// so that the cellMap getter can only actually refill the cell map if it is not populated.\n// A cell map may be empty but populated if there are no eligible events in the date range.\nclass CellMap extends Map {\n populated = false;\n get(d, value) {\n return super.get(DH.makeKey(d), value);\n }\n set(d, value) {\n d = DH.makeKey(d);\n if (!this.has(d)) {\n this.generation = (this.generation || 0) + 1;\n }\n return super.set(d, value);\n }\n delete(d, value) {\n d = DH.makeKey(d);\n if (this.has(d)) {\n this.generation++;\n }\n return super.delete(d, value);\n }\n has(d) {\n return super.has(DH.makeKey(d));\n }\n clear() {\n if (this.populated) {\n this.populated = false;\n this.generation = (this.generation || 0) + 1;\n return super.clear();\n }\n }\n}\n", "import Popup from '../../Core/widget/Popup.js';\nimport DH from '../../Core/helper/DateHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport DomSync from '../../Core/helper/DomSync.js';\n/**\n * @module Calendar/widget/OverflowPopup\n */\n/**\n * This class is not supposed to be used directly. It is used by Calendar views which need to show\n * more events than will fit into a day cell.\n *\n * A Popup which displays events which will not fit into their container in a View\n *\n * @extends Core/widget/Popup\n * @classtype overflowpopup\n */\nexport default class OverflowPopup extends Popup {\n static get $name() {\n return 'OverflowPopup';\n }\n // Factoryable type name\n static get type() {\n return 'overflowpopup';\n }\n static configurable = {\n textContent : false,\n autoShow : false,\n floating : false,\n cls : 'b-cal-event-list',\n closable : true,\n draggable : {\n handleSelector : ':not(.b-cal-event-wrap)'\n },\n anchor : true,\n layout : 'vbox',\n /**\n * An empty function by default, but provided so that you can override it.\n *\n * This function is called each time an event is rendered to allow developers to mutate\n * the cell metadata, or the CSS classes to be applied to the event element.\n *\n * It's called with the event record, and a eventData object which allows you to mutate event metadata\n * such as 'cls', 'style'.\n *\n * The cls property is an object whose property names will be added to the event element if the property\n * value is truthy.\n *\n * The style property is an object containing style properties for the event element.\n *\n * A non-null return value from the renderer is used as the event body content. A nullish\n * return value causes the default renderer to be used which just uses the event name.\n *\n * If a string is returned, it is used as the HTML content of the event body element.\n *\n * If an object is returned, it is used as a {@link Core.helper.DomHelper#typedef-DomConfig} object to\n * create complex content in the event body element.\n *\n * ```javascript\n * eventRenderer({ eventRecord, renderData }) {\n * if (eventRecord.name === 'Doctors appointment') {\n * eventData.style.fontWeight = 'bold';\n * eventData.cls['custom-cls'] = 1;\n *\n * return 'Special doctors appointment';\n * }\n * }\n * ```\n * IMPORTANT: When returning content, be sure to consider how that content should be encoded to avoid XSS\n * (Cross-Site Scripting) attacks. This is especially important when including user-controlled data such as\n * the event's `name`. The function {@link Core.helper.StringHelper#function-encodeHtml-static} as well as\n * {@link Core.helper.StringHelper#function-xss-static} can be helpful in these cases.\n *\n * For example:\n * ```javascript\n * eventRenderer({ eventRecord }) {\n * return StringHelper.xss`Event: ${eventRecord.name}`;\n * }\n * ```\n * @config {Function} eventRenderer\n * @param {Object} detail An object that contains data about the event being rendered.\n * @param {Scheduler.model.EventModel} detail.eventRecord The event record\n * @param {Scheduler.model.ResourceModel} detail.resourceRecord The event record\n * @param {Object} detail.renderData A data object containing properties that will be used to create the event element.\n * @param {Object} detail.renderData.style The style property is an object containing style properties for\n * the event element.\n * @param {Object} detail.renderData.cls The cls property is an object whose property names will be added to\n * the event element if the property value is truthy.\n * @param {String} detail.renderData.eventColor Color to be applied to the event\n * @returns {String|DomConfig|DomConfig[]|null} A simple string, or a DomConfig object defining the actual HTML\n */\n eventRenderer : null,\n /**\n * A function which compares events to decide upon rendering order.\n *\n * By default, this class uses the sorted order of its owning view and does *not* perform\n * a sort, but this may be configured to override that behaviour.\n *\n * Note that the two objects to compare may either be {@link Scheduler.model.EventModel}s\n * or {@link EventBar}s which __contain__ an `eventRecord` property which is the {@link Scheduler.model.EventModel}.\n * @config {Function}\n * @param {Scheduler.model.EventModel|EventBar} lhs The left side value to conpare.\n * @param {Scheduler.model.EventModel|EventBar} rhs The right side value to conpare.\n * @returns {Number}\n */\n eventSorter : null,\n /**\n * A {@link Core.widget.Widget} config object used to show the inner list of overflowing events\n * shown in this popup.\n *\n * This widget has a {@link Core.widget.Widget#config-weight} of `500`, so to insert widgets above\n * this, use `weight` less than 500, and to insert widgets below it use `weight` greater than 500.\n * @config {Object}\n * @default\n */\n eventList : {\n type : 'widget',\n cls : 'b-cal-event-bar-container',\n weight : 500\n },\n items : {},\n tools : {\n maximize : null\n },\n /**\n * The {@link Core.helper.DateHelper#function-format-static DateHelper} format string to use to\n * create the {@link #config-title} of this dialog.\n * @config {String}\n * @default\n */\n dateFormat : 'dddd, MMM DD',\n activeDate : {\n $config : {\n equal : 'date'\n },\n value : null\n },\n scrollAction : 'realign',\n align : {\n axisLock : 'flexible',\n constrainPadding : 20,\n minHeight : 400\n },\n scrollable : {\n overflowY : 'auto'\n },\n /**\n * By default an event overflow popup shows all the events for the activated date.\n *\n * Configure this as `true` to only display the events which were hidden due to overflow.\n * @config {Boolean}\n */\n onlyShowOverflow : null\n };\n calendarHitTest(domEvent) {\n const\n target = DomHelper.getEventElement(domEvent),\n closest = target.closest('.b-cal-event-wrap');\n let eventRecord;\n // It's only an event hit if the id exists in the event store.\n // May be a transient event added solely to the UI and not backed by the store.\n if (closest && (eventRecord /* assignment */ = this.owner.eventStore.getById(closest.dataset.eventId))) {\n return {\n eventRecord,\n type : 'event',\n eventElement : closest,\n view : this\n };\n }\n return null;\n }\n onPanelHeaderClick({ event : domEvent }) {\n if (domEvent.target.closest('.b-header-title')) {\n this.owner?.trigger('dayNumberClick', {\n domEvent,\n date : this.activeDate,\n cellData : this.cellData,\n source : this.owner,\n fromOverflowPopup : true\n });\n }\n else {\n super.onPanelHeaderClick(...arguments);\n }\n }\n get focusElement() {\n const activeElement = DomHelper.getActiveElement(this);\n return this.element.contains(activeElement)\n ? activeElement\n : (this.eventList?.element?.firstElementChild || super.focusElement);\n }\n getDateFromPosition() {\n // This View only shows one date, so the answer is easy.\n return this.activeDate;\n }\n getEventElement(eventRecord) {\n return this.contentElement.querySelector(`[data-event-id=\"${eventRecord.id}\"]`);\n }\n showOverflow(cell, cellData) {\n /**\n * The date for which overflow is being shown.\n * @readonly\n * @member {Date} activeDate\n */\n const date = this.activeDate = cellData.date;\n /**\n * A data block containing information about the day for which overflow is being shown.\n * @readonly\n * @member {DayCell} cellData\n */\n this.cellData = cellData;\n this.targetCell = cell;\n this.refresh(cellData);\n this.showBy(cell);\n if (this.isVisible) {\n // Fired on the owning view. Documented in DayCellRenderer\n this.owner?.trigger('showOverflowPopup', { cell, cellData, date, overflowPopup : this });\n }\n }\n // Owning view calls this from its own onCalendarStoreChange implementation\n onCalendarStoreChange() {\n const me = this;\n if (me.isVisible) {\n me.cellData = me.owner.cellMap.get(DH.makeKey(me.activeDate));\n me.refresh(me.cellData);\n }\n }\n refresh(cellData) {\n // eventList might be configured away\n if (!this.eventList) {\n return;\n }\n // Allow the caller to update the overflow state\n if (cellData) {\n this.cellData = cellData;\n }\n else {\n cellData = this.cellData;\n }\n const\n me = this,\n {\n owner,\n eventRenderer,\n eventSorter\n } = me,\n { element } = me.eventList,\n // Slice using eventsPerCell - 1 because if there's one event that won't fit,\n // the last event fitting will be evicted to make room for the overflow indicator.\n // If there's no overflow indicator (like in YearView), eventsPerCell will be\n // zero, so sanitize value up to 0.\n slicePoint = me.onlyShowOverflow ? Math.max(owner.eventsPerCell - 1, 0) : 0,\n // Because of long running events overflowing, allDay events and intraday\n // events could be interleaved in the cells slots.\n // In the event list, we sort them into the required order with\n // oldest and longest at the top.\n events = cellData?.renderedEvents.slice(slicePoint),\n children = [];\n // We can delete events from the Popup, so when we've exhausted the events, we must hide.\n // Also, if a refresh was called from the owner's resize handling, that may have caused\n // the overflow state to have changed to not overflowing.\n // YearView can't not overflow. It's just a heat map.\n if (!events?.length || (!cellData?.hasOverflow && !owner.isYearView)) {\n return me.hide();\n }\n // If we have been configured with an overriding eventSorter, apply it now.\n // Otherwise, we are using the data as shown in our owning view.\n if (eventSorter) {\n events.sort(eventSorter);\n }\n for (let i = 0, eventRow = 0, { length } = events; i < length; i++, eventRow++) {\n const renderedEvent = events[i];\n // If the slot is occupied, add a child event element.\n // These just flow down the Popup's bodyElement\n if (renderedEvent) {\n const eventDomConfig = owner.createEventDomConfig(renderedEvent, eventRenderer);\n Object.assign(eventDomConfig.className, {\n // The event started in a previous day\n 'b-continues-past' : renderedEvent.eventRecord.startDate < cellData.date,\n // The event ends in a future day\n 'b-continues-future' : renderedEvent.eventRecord.endDate > cellData.tomorrow\n });\n eventDomConfig.style.marginBottom = `${owner.eventSpacing}px`;\n children.push(eventDomConfig);\n }\n }\n DomSync.sync({\n domConfig : {\n children\n },\n targetElement : element\n });\n // Fix up cell's time info.\n element.dataset.date = cellData.key;\n element.classList.add(`b-day-of-week-${cellData.day}`);\n element.classList.remove(`b-day-of-week-${me.lastRefreshDay}`);\n me.lastRefreshDay = cellData.day;\n me.realign();\n }\n changeItems(items) {\n const { eventList } = this;\n if (eventList) {\n items.eventList = eventList;\n }\n const result = super.changeItems(items);\n if (eventList) {\n this.eventList = this.widgetMap.eventList;\n }\n return result;\n }\n changeActiveDate(activeDate, oldActiveDate) {\n activeDate = typeof date === 'string' ? DH.parse(activeDate) : new Date(activeDate);\n if (isNaN(activeDate)) {\n throw new Error('OverflowPopup date ingestion must be passed a Date, or a YYYY-MM-DD date string');\n }\n return activeDate;\n }\n updateActiveDate(activeDate) {\n this.element.dataset.date = DH.makeKey(activeDate);\n this.title = DH.format(activeDate, this.dateFormat);\n }\n onDocumentMouseDown({ event }) {\n const\n alignedTo = this.lastAlignSpec?.target,\n { target } = event;\n // On mousedown of our own activating element, do not focusout\n if (alignedTo?.contains(target)) {\n const cellOverflowButton = target.closest('.b-cal-cell-overflow');\n // If it's a click inside the overflowing cell, or inside the overflow button\n // then ignore it, we're clicking on our own data or overflow button.\n if (target.closest('.b-cal-event-bar-container') || target.matches('.b-cal-cell-overflow') || (cellOverflowButton?.children.length === 1)) {\n return event.preventDefault();\n }\n }\n super.onDocumentMouseDown(...arguments);\n }\n}\nOverflowPopup.initClass();\nOverflowPopup._$name = 'OverflowPopup';", "import Base from '../../../Core/Base.js';\nimport DH from '../../../Core/helper/DateHelper.js';\nimport DayTime from '../../../Core/util/DayTime.js';\nimport DomClassList from '../../../Core/helper/util/DomClassList.js';\nimport ArrayHelper from '../../../Core/helper/ArrayHelper.js';\nimport DomHelper from '../../../Core/helper/DomHelper.js';\nimport DomSync from '../../../Core/helper/DomSync.js';\nimport ObjectHelper from '../../../Core/helper/ObjectHelper.js';\nimport EventHelper from '../../../Core/helper/EventHelper.js';\nimport StringHelper from '../../../Core/helper/StringHelper.js';\nimport OverflowPopup from '../OverflowPopup.js';\n/**\n * @module Calendar/widget/mixin/DayCellRenderer\n */\nconst\n emptyFn = () => {},\n { eventNameMap } = EventHelper;\n/**\n * Mixin that provides the ability to render a calendar cell.\n *\n * This is used by the MonthView and also CalendarRow. It expects its\n * host class to include the {@link Calendar.widget.mixin.CalendarMixin} mixin.\n *\n * @mixin\n */\nexport default Target => class DayCellRenderer extends (Target || Base) {\n static get $name() {\n return 'DayCellRenderer';\n }\n static get configurable() {\n return {\n monitorResize : true, // we need to adjust the \"+ 2 more\" overflow indicator\n /**\n * This may be specified to create the content for the date and day name section of calendar cells.\n *\n * This function is called for each cell rendered. It can return an HTML string which will become the\n * content of the header section of the cell above any events.\n *\n * It can also return a {@link Core.helper.DomHelper#typedef-DomConfig} element creation object (or array of\n * same) to specify content to create in the header section of the cell.\n *\n * It also allows developers to mutate the cell metadata, or the CSS classes to be applied to the cell.\n *\n * The {@link Core.helper.DomHelper#typedef-DomConfig} definition passed as the first parameter may be\n * mutated to create a different cell header.\n *\n * ```javascript\n * dayCellRenderer : function(cellData, dayCellDomConfig) {\n * // I don't like Mondays!\n * if (cellData.day === 1) {\n * dayCellDomConfig.className['hackathon-dayoff'] = true;\n * dayCellDomConfig.style.fontWeight = 'bold';\n *\n * cellData.isNonWorking = true;\n *\n * return `${cellData.date.getDate()} Day off yay!`;\n * }\n * }\n *```\n *\n * A non-null return value from the renderer is used as the content of the day number element.\n *\n * @config {Function} dayCellRenderer\n * @param {DayCell} dayCellRenderer.cellData An object that contains data about the cell.\n * @param {DomConfig} dayCellDomConfig An object to sync the day cell element.\n * @param {Object} dayCellDomConfig.className An object who's truthy property names will be applied as class\n * names.\n * @param {Object} dayCellDomConfig.style A CSS style definition object.\n * @param {Object} dayCellDomConfig.dataset The DOM data properties to set.\n * @param {DomConfig[]} dayCellDomConfig.children The {@link DomConfig} definitions for the content of the\n * cell.\n * @returns {String|Object|Object[]} The definition of the cell header content.\n */\n dayCellRenderer : null,\n // Must still be visible if dynamically set to non working to keep\n // column arrangement correct.\n dynamicHideNonWorkingdayCls : 'b-dynamic-nonworking-day',\n /**\n * The {@link Calendar.widget.OverflowPopup} instance that this view may show when events\n * for one day overflow the available space.\n * @member {Calendar.widget.OverflowPopup} overflowPopup\n * @readonly\n */\n /**\n * A config object used to create the {@link Calendar.widget.OverflowPopup} that this view\n * may show when events for one day overflow the available space.\n *\n * For example\n *\n *```javascript\n * modes : {\n * month : {\n * overflowPopup : {\n * closable : false,\n * dateFormat : 'dddd, MMM M',\n * eventRenderer({ eventRecord, renderData }) {\n * if (calendarUtils.isImportantEvent(eventRecord)) {\n * // Add CSS class to important events\n * renderData.cls['b-important'] = 1;\n * }\n * }\n * }\n * }\n * }\n *```\n * @config {OverflowPopupConfig}\n */\n overflowPopup : {\n $config : ['lazy', 'nullify'],\n value : {\n type : 'overflowpopup'\n }\n },\n /**\n * The pointer gesture which shows the popup containing any overflowing events\n * in the current view.\n *\n * This means events which will not fit into a `MonthView` day cell, or *all* events\n * for a `YearView` cell.\n *\n * Useful values are `'click'` (the default), and `'mouseover'`\n * @config {'click'|'mouseover'|'hover'}\n * @default\n */\n overflowPopupTrigger : 'click',\n eventBarContainerCls : 'b-cal-event-bar-container',\n /**\n * A function, or name of a function which is passed the {@link DomConfig} object which\n * will be used to create the \"+n more\" button which indicates that a day cell has\n * overflowing events.\n *\n * ```javascript\n * overflowButtonRenderer : function(domConfig) {\n * domConfig.className['b-fa'] = domConfig.className['b-fa-list'] = 1;\n * return domConfig;\n * }\n *```\n *\n * The result is used to create the overflow button element.\n *\n * To target the element using custom CSS, use the class name `b-cal-cell-overflow`.\n *\n * @config {Function} overflowButtonRenderer\n * @param {DomConfig} domConfig A {@link DomConfig} config object which is used to\n * create the overflow button.\n * @param {String} domConfig.tag=button The tag name of the element to create.\n * @param {Object} domConfig.className An object who's truthy property names will be applied as class names.\n * @param {String} domConfig.text The inner content of the element. **Note that this\n * will be HTML encoded for XSS safety**\n * @param {Object} domConfig.style A CSS style definition object.\n * @param {Object} domConfig.dataset The DOM data properties to set.\n * @param {Number} overflowCount The number of overflowing events.\n * @returns {DomConfig|String|null}\n */\n overflowButtonRenderer : null,\n /**\n * The {@link Core.helper.DateHelper} format string to format the day names\n * in the header part of each calendar cell.\n * @config {String}\n */\n dayCellNameFormat : null,\n /**\n * How much vertical space in pixels to leave between event bars in a cell.\n * @member {Number} eventSpacing\n */\n /**\n * How much vertical space in pixels to leave between event bars in a cell.\n * @config {Number}\n * @default\n */\n eventSpacing : 2,\n emptyCellCls : 'b-cal-empty-cell',\n /**\n * A {@link DomConfig} object which will be used to create the content of a clickable\n * element which is present when no events are in a cell.\n *\n * Or a function, or name of a function which returns a {@link DomConfig} object.\n *\n * See the {@link Calendar.view.Calendar#event-emptyCellClick} event.\n *\n * @config {Function|Object|String} emptyCellRenderer\n * @param {DayCell} dayCellRenderer.cellData An object that contains data about the cell.\n * @returns {DomConfig|null} DomConfig object representing the HTML markup\n */\n emptyCellRenderer : null\n };\n }\n onCalendarStoreChange() {\n super.onCalendarStoreChange(...arguments);\n // Ensure any overflow popup is informed immediately after its owning View has been informed.\n if (this._overflowPopup?.isVisible) {\n this._overflowPopup.onCalendarStoreChange(...arguments);\n }\n }\n // Called automatically on the CellOverflow${overflowPopupTrigger} event because of callOnFunctions\n onCellOverflowGesture({ domEvent, date }) {\n const\n me = this,\n cellData = me.cellMap.get(DH.makeKey(date));\n if (cellData) {\n const\n { overflowPopup } = me,\n cell = me.getCellFromEvent(domEvent);\n /**\n * Fired after an {@link Calendar.widget.OverflowPopup} has been shown when an a\n * \"+ n more\" overflow button is activated by an {@link #config-overflowPopupTrigger} event.\n * @event showOverflowPopup\n * @param {HTMLElement} cell The day cell for which the overflow popup is going to be shown.\n * @param {DayCell} cellData An object that contains data about the cell.\n * @param {Date} date The date which has overflowing events\n * @param {Calendar.widget.OverflowPopup} overflowPopup The overflow `Popup`.\n */\n /**\n * Fired before an {@link Calendar.widget.OverflowPopup} is shown when an a\n * \"+ n more\" overflow button is activated by an {@link #config-overflowPopupTrigger} event.\n * @event beforeShowOverflowPopup\n * @param {HTMLElement} cell The day cell for which the overflow popup is going to be shown.\n * @param {DayCell} cellData An object that contains data about the cell.\n * @param {Date} date The date which has overflowing events\n * @param {Calendar.widget.OverflowPopup} overflowPopup The overflow `Popup`.\n * @preventable\n */\n if (overflowPopup && me.trigger('beforeShowOverflowPopup', { cell, cellData, date, overflowPopup })) {\n overflowPopup.showOverflow(cell, cellData);\n }\n }\n }\n getCellFromEvent(domEvent) {\n return domEvent.target.closest('.b-calendar-cell[data-date]');\n }\n changeOverflowPopupTrigger(overflowPopupTrigger) {\n // Must be correctly camel cased so the we can create the `onCellOverflow${gesture}` method name.\n // So mouseover => mouseOver so that we inject an onCellOverflowMouseOver method.\n overflowPopupTrigger = overflowPopupTrigger.toLowerCase();\n if (overflowPopupTrigger === 'mouseover' || overflowPopupTrigger === 'hover') {\n overflowPopupTrigger = 'mouseOver';\n }\n return overflowPopupTrigger;\n }\n updateOverflowPopupTrigger(overflowPopupTrigger, was) {\n if (was) {\n this[`onCellOverflow${StringHelper.capitalize(was)}`] = emptyFn;\n }\n this[`onCellOverflow${StringHelper.capitalize(overflowPopupTrigger)}`] = this.onCellOverflowGesture;\n }\n onEventMouseOverOut({ target, relatedTarget, type }) {\n if (this.overflowPopupTrigger === 'mouseOver' && target.closest('.b-cal-cell-overflow') && !relatedTarget.closest('.b-cal-cell-overflow')) {\n if (type === 'mouseover') {\n // CalendarMixin's implementation triggers for overflow button gestures\n return this.onCalendarPointerInteraction(...arguments);\n }\n else {\n this._overflowPopup?.hide();\n }\n }\n return this.onCalendarPointerInteraction(...arguments);\n }\n changeOverflowPopup(config, instance) {\n const\n me = this,\n popupOwner = me.up('calendar') || me.owner || me,\n // We use OverflowPopup instead of Widget since that will have any additional configs and will use the\n // correct merge procedure for them (if any were customized). The actual type can be derived and if so,\n // those config merge fns will not be consulted but that's very unlikely and not worth solving for in\n // general (though it could be).\n ret = OverflowPopup.reconfigure(instance, config, {\n owner : me, // so that we'll destroy our instances on reconfigure to null\n defaults : {\n owner : me,\n align : {\n constrainTo : globalThis\n }\n }\n });\n if (ret) {\n const\n { element } = ret,\n { eventHeightInPixels } = me;\n // Make popup selectable\n ret.element.classList.add(`b-${me.type}-overflowpopup`);\n // OverflowPopup is not a global floater by default. It's rendered inside of the Calendar\n // element so that focus stays within, and the Navigator can follow focus.\n // If that has not been overridden by configuration, render inside calendar content.\n if (!ret.floating) {\n ret.positioned = true;\n ret.render(popupOwner.isCalendar ? popupOwner.element : popupOwner.contentElement);\n }\n // Some views, like DayView don't have a pixel event height.\n if (eventHeightInPixels) {\n element.style.setProperty('--event-height', `${eventHeightInPixels}px`);\n element.style.setProperty('--arrow-width', `${eventHeightInPixels / 3}px`);\n }\n // We have to relay interaction events upwards from the overflow popup if it's\n // not rendered into this view. If it is, then the events will bubble.\n if (ret !== instance && popupOwner !== me) {\n EventHelper.on({\n thisObj : me,\n element : ret.bodyElement,\n delegate : '.b-cal-event-wrap',\n mouseover : 'onEventMouseOverOut',\n mouseout : 'onEventMouseOverOut',\n mousedown : 'onCalendarPointerInteraction',\n mouseup : 'onCalendarPointerInteraction',\n click : 'onCalendarPointerInteraction',\n dblclick : 'onCalendarPointerInteraction',\n contextmenu : 'onCalendarPointerInteraction'\n });\n // Header may have been configured away.\n if (ret.headerElement) {\n EventHelper.on({\n thisObj : me,\n element : ret.headerElement,\n mousedown : 'onCalendarPointerInteraction',\n mouseup : 'onCalendarPointerInteraction',\n click : 'onCalendarPointerInteraction',\n dblclick : 'onCalendarPointerInteraction',\n contextmenu : 'onCalendarPointerInteraction'\n });\n }\n }\n }\n return ret;\n }\n onInternalResize(element, width, height, oldWidth, oldHeight) {\n const\n {\n _eventsPerCell,\n _eventContainerTop\n } = this;\n super.onInternalResize(element, width, height, oldWidth, oldHeight);\n if (this.rendered && height !== oldHeight) {\n // Calculates new values for eventsPerCell and eventContainerTop\n // and handles changes to either.\n this.performResizeRefresh(_eventsPerCell, _eventContainerTop);\n }\n }\n performResizeRefresh(prevEventsPerCell, prevEventContainerTop, now) {\n // Invalidate the values so that they are recalculated\n this._eventsPerCell = this._eventContainerTop = this._eventContainerHeight = null;\n const\n me = this,\n {\n eventsPerCell,\n _overflowPopup\n } = me;\n if (eventsPerCell !== prevEventsPerCell) {\n /**\n * Fires when number of events which could be placed in one cell is changed.\n * Has place when the height of the Month view is changed.\n * @event eventsPerCellChange\n * @param {Calendar.widget.MonthView} source This `MonthView` instance.\n * @param {Number} value New number of events per cell.\n * @param {Number} oldValue Previous number of events per cell.\n * @private\n */\n me.trigger('eventsPerCellChange', {\n value : eventsPerCell,\n oldValue : prevEventsPerCell\n });\n }\n // If the component height change caused the event start position to change\n // or the eventsPerCell to change, refresh.\n if (me.eventContainerTop !== prevEventContainerTop || eventsPerCell !== prevEventsPerCell) {\n // If now passed as true, use doRefresh rather than refresh which waits until visible.\n now ? me.doRefresh() : me.refresh();\n // The overflow state may have changed. If we are visible, refresh will have happened.\n // OverflowPopup will hide itself if the ext cellData block has no overflow\n if (_overflowPopup?.isVisible) {\n _overflowPopup.refresh(me._cellMap.get(DH.makeKey(_overflowPopup.activeDate)));\n }\n }\n }\n updateEventHeight() {\n // CalendarMixin class needs to know\n super.updateEventHeight(...arguments);\n // Force a recalculate on next access\n this._eventsPerCell = null;\n this.element.style.setProperty('--event-height-px', `${this.eventHeightInPixels}px`);\n }\n updateEventSpacing(eventSpacing) {\n // Force a recalculate on next access\n this._eventsPerCell = null;\n // Schedule a refresh\n if (!this.isConfiguring) {\n this.refreshSoon();\n }\n this.element.style.setProperty('--event-spacing', `${eventSpacing}px`);\n }\n get weeksElement() {\n return this.contentElement;\n }\n get eventContainerHeight() {\n // Must not bake the property in as zero if called during configuration.\n if (this._eventContainerHeight == null && this.isVisible && !this.isConfiguring) {\n const { firstVisibleCell } = this;\n this._eventContainerHeight = firstVisibleCell ? firstVisibleCell.offsetHeight - this.eventContainerTop : NaN;\n }\n return this._eventContainerHeight;\n }\n get eventContainerTop() {\n const me = this;\n // Must not bake the property in as zero if called during configuration.\n if (me._eventContainerTop == null && me.isVisible && !me.isConfiguring) {\n const\n { firstVisibleCell } = me,\n c = firstVisibleCell && firstVisibleCell.querySelector('.b-cal-cell-header'),\n top = c ? c.getBoundingClientRect().height : 0;\n me._eventContainerTop = top === 0 ? null : top;\n me.element.style.setProperty('--event-top', `${me._eventContainerTop}px`);\n }\n return me._eventContainerTop || 0;\n }\n /**\n * Returns the number of complete event bars which will fit inside the referenced cell.\n *\n * The base implementation assumes all cells are the same height. In most views, most of the time,\n * this is true.\n *\n * It's only in MonthView when some rows are shrinkwrapped round their event content (meaning\n * either expanded or contracted away from the 1/6 height default) that there may be a customized\n * eventsPerCell for a certain date. So only MonthView has an overriding implementation.\n * @internal\n */\n getEventsPerCell(date) {\n return this.eventsPerCell;\n }\n get eventsPerCell() {\n const me = this;\n if (me._eventsPerCell == null) {\n me._eventsPerCell = Math.floor((me.eventContainerHeight + me.eventSpacing) / (me.eventHeightInPixels + me.eventSpacing));\n }\n return me._eventsPerCell;\n }\n get cellMap() {\n // If the cellMap has not been populated, create it.\n return this._cellMap?.populated ? this._cellMap : this.createCellMap();\n }\n cellRenderer({ cell }) {\n const domConfig = this.getCellDomConfig(...arguments);\n DomSync.sync({\n domConfig,\n targetElement : cell\n });\n }\n getCellDomConfig({ cell, columnIndex, row, date, day, dayTime = DayTime.MIDNIGHT, visibleColumnIndex, key }) {\n const\n me = this,\n {\n eventHeightInPixels,\n eventSpacing,\n weekLength,\n todayCls,\n emptyCellRenderer\n } = me,\n today = me.dayTime.startOfDay(me.calendar?.dateTimeNow || new Date()),\n isToday = date.getTime() === today.getTime(),\n dayNumber = date.getDate(),\n eventContainer = {\n className : me.eventBarContainerCls,\n role : 'presentation',\n children : [],\n // Match existing data-event-id elements first and ensure DOM order matches\n // children order.\n syncOptions : {\n syncIdField : 'eventId',\n releaseThreshold : 0,\n strict : true\n }\n },\n cellHeader = {\n style : {},\n className : new DomClassList({\n 'b-cal-cell-header' : true,\n [todayCls] : isToday\n })\n },\n domConfig = {\n dataset : {},\n style : {},\n className : new DomClassList(cell?.className),\n children : [cellHeader, eventContainer]\n },\n isFirstVisibleCell = !(date - (me.firstVisibleDate || -1));\n domConfig.className[todayCls] = isToday;\n // Some views may create a day name element into which a dayCellRenderer may add content.\n // MonthView does this. CalendarRow does not. It has a separate concept of dayHeaderRenderer\n let dayName,\n dayEvents = !me.isConfiguring && me.cellMap.get(DH.makeKey(date));\n if (me.addCellHeaderContent) {\n // addCellHeaderContent mutates the cellHeader DomConfig block.\n // And if we are to have a day name element, returns the DomConfig for it.\n dayName = me.addCellHeaderContent(cellHeader, dayEvents || (dayEvents = me.createCellData(date)));\n }\n else {\n cellHeader.children = [dayName = {\n className : {\n 'b-day-name' : true\n }\n }];\n }\n let dynamicallySetToNonWorking;\n // Give the dayCellRenderer access to the configuration object for the cell header\n if (me.dayCellRenderer && !me.isConfiguring) {\n // If they have a cell renderer, there must be cell info to give it.\n if (!dayEvents) {\n dayEvents = me.createCellData(date);\n }\n // Allow dayCellRenderer to access cell style and classes\n dayEvents.style = domConfig.style;\n dayEvents.cls = domConfig.className;\n // Allow dayCellRenderer to access cell header style and classes\n dayEvents.headerStyle = cellHeader.style;\n dayEvents.headerCls = cellHeader.className;\n const\n wasNonWorking = dayEvents && dayEvents.isNonWorking,\n dayNameContent = me.callback(me.dayCellRenderer, me, [dayEvents, domConfig]);\n // If renderer changed the cls or style properties, propagate the values back into place\n if (typeof dayEvents.cls == 'string') {\n domConfig.className = new DomClassList(dayEvents.cls);\n }\n if (typeof dayEvents.style === 'string') {\n domConfig.style = DomHelper.parseStyle(dayEvents.style);\n }\n if (typeof dayEvents.headerCls == 'string') {\n cellHeader.className = new DomClassList(dayEvents.headerCls);\n }\n if (typeof dayEvents.headerStyle === 'string') {\n cellHeader.style = DomHelper.parseStyle(dayEvents.headerStyle);\n }\n if (dayNameContent != null) {\n if (typeof dayNameContent === 'string') {\n dayName.html = dayNameContent;\n }\n // Assuming Object or Object Array.\n else {\n dayName.text = null;\n dayName.children = ArrayHelper.asArray(dayNameContent);\n }\n }\n dynamicallySetToNonWorking = !wasNonWorking && dayEvents.isNonWorking;\n }\n if (dayName) {\n // If there was no renderer, use the date as the textContent\n if (!(dayName.text || dayName.html)) {\n dayName.text = me.dayCellNameFormat ? DH.format(date, me.dayCellNameFormat) : dayNumber;\n }\n // If all there is in there is the date, give it the day number CSS rendition\n // This makes it a 2emX2em circular element.\n if ((dayName.text || dayName.html) == dayNumber) {\n dayName.className['b-day-num'] = true;\n }\n }\n // If there's a cell entry which is visible (within this month and not a hidden nonworking day)\n // then we add the child entries to the eventContainer's children array.\n if (dayEvents.visible) {\n const\n {\n hasOverflow,\n renderedEvents,\n maxRow\n } = dayEvents,\n events = renderedEvents,\n { length } = events,\n children = eventContainer.children;\n // Sync the non working day CSS class.\n // But if a dayCellRenderer changed isNonWorking to true, the cell must remain\n // visible in certain views, to maintain cell arrangement, so add extra CSS class\n // to enable views to override the rule from Core/calendarpanel.scss.\n domConfig.className[me.nonWorkingDayCls] = dayEvents.isNonWorking;\n domConfig.className[me.dynamicHideNonWorkingdayCls] = dynamicallySetToNonWorking;\n domConfig.className[me.weekendCls] = DH.weekends[day];\n // How many events we find below the eventsPerCell point\n let i = 0, eventRow = 0, overflowCount = 0;\n for (; i < maxRow; i++, eventRow++) {\n const renderedEvent = events[i];\n // If the slot is occupied, add a child event element.\n // The event's .b-cal-event-wrap is position:absolute, so its offsetParent is the closest\n // position:relative element which is the .b-calendar-days row.\n // This is so that the events can use %age widths and need no intervention\n // for width changes. The left position is the .b-cal-event-bar-container's left.\n // Only height changes which result in a change to this.eventsPerCell require\n // a refresh.\n if (renderedEvent) {\n const\n {\n eventRecord,\n isOverflow,\n propagateEndDate\n } = renderedEvent,\n eventEndDate = renderedEvent.eventEndDate || eventRecord.endingDate,\n renderedDaySpan = Math.max(1, me.getDaySpan(date, propagateEndDate || eventEndDate, dayTime)),\n daySpan = me.getDaySpan(date, eventEndDate, dayTime, true),\n remainingColumns = weekLength - visibleColumnIndex,\n isHiddenOverflow = visibleColumnIndex && isOverflow,\n width = DomHelper.percentify(ObjectHelper.round((\n isHiddenOverflow ? 1 : Math.min(renderedDaySpan, remainingColumns)) / weekLength * 100, 4)),\n eventDomConfig = me.createEventDomConfig(renderedEvent);\n Object.assign(eventDomConfig.style, {\n width,\n top : `${eventRow * eventHeightInPixels + (eventRow * eventSpacing) + me.eventContainerTop}px`\n });\n Object.assign(eventDomConfig.className, {\n // If flowing in from a previous cell\n 'b-overflow' : isHiddenOverflow,\n // We're in the first cell, and it was from a previous week\n 'b-continues-past' : !isHiddenOverflow && (!visibleColumnIndex || isFirstVisibleCell) && eventRecord.startDate < date,\n // The event ends in a future week\n 'b-continues-future' : !isHiddenOverflow && (daySpan > remainingColumns || daySpan > renderedDaySpan)\n });\n children.push(eventDomConfig);\n }\n }\n // Continue after the maxRow has been reached\n // keeping track of how many events are below the fold\n while (i < length) {\n if (events[i++]) {\n overflowCount++;\n }\n }\n // The cell was found to need an overflow link by propagateCellEvents.\n // This could be because it has more renderedEvents than me.eventsPerCell\n // Or it could be because its last visible event flowed forwards into a cell\n // whose own events only *filled*\n if (hasOverflow) {\n row.classList.add('b-has-overflow');\n domConfig.children.push(me.getOverflowButtonDomConfig(overflowCount));\n }\n else if (!columnIndex) {\n row.classList.remove('b-has-overflow');\n }\n // Flag the event container element as empty if necessary\n const emptyCell = domConfig.className[me.emptyCellCls] = !events.length;\n if (emptyCell && emptyCellRenderer) {\n const\n rType = typeof emptyCellRenderer,\n rCallback = rType === 'function' || rType === 'string' ? me.resolveCallback(emptyCellRenderer, me, false) : null,\n noEvents = rCallback?.handler ? rCallback.handler.call(rCallback.thisObj, dayEvents) : emptyCellRenderer;\n // By default, a single line no events button will appear similar to\n // a \"+n more\" overflow button. It will be the size and shape of an event pill.\n if (noEvents) {\n eventContainer.children[0] = {\n tag : 'button',\n class : 'b-cal-cell-no-content',\n children : [\n rCallback?.handler ? rCallback.handler.call(rCallback.thisObj, dayEvents) : emptyCellRenderer\n ]\n };\n }\n }\n }\n return domConfig;\n }\n onCalendarPointerInteraction(domEvent) {\n const\n me = this,\n { target } = domEvent;\n // Broadcast a click on content in an empty cell.\n if (target.closest(`.${me.emptyCellCls} .${me.eventBarContainerCls}`)) {\n // If they have an emptyCellRenderer, then that must be the click target\n if (!me.emptyCellRenderer || target.closest('.b-cal-cell-no-content')) {\n /**\n * Fired when an empty cell content area is clicked on. If the handler returns\n * `false` the current pointer event is not processed further.\n * @event emptyCellClick\n * @param {Event} domEvent The triggering DOM event.\n * @param {Date} date The date which has no visible events\n */\n if (me.trigger(`emptyCell${eventNameMap[domEvent.type]}`, {\n date : me.getDateFromDomEvent(domEvent),\n domEvent\n }) === false) {\n return false;\n };\n }\n }\n return super.onCalendarPointerInteraction(domEvent);\n }\n getDaySpan(startDate, endDate, dayTime, ignoreNonWorkingDays) {\n if (this.hideNonWorkingDays && !ignoreNonWorkingDays) {\n let result = 0;\n for (const date = new Date(startDate), spanEnd = dayTime.ceil(endDate, '1 day'); date < spanEnd; date.setDate(date.getDate() + 1)) {\n if (!this.nonWorkingDays[date.getDay()]) {\n result++;\n }\n }\n return result;\n }\n else {\n return Math.max(DH.diff(startDate, dayTime.ceil(endDate, '1 day'), 'day'), 1);\n }\n }\n getOverflowButtonDomConfig(overflowCount) {\n const\n { overflowButtonRenderer } = this,\n domConfig = {\n tag : 'button',\n className : {\n 'b-cal-cell-overflow' : 1\n },\n text : this.L('L{Calendar.plusMore}', overflowCount),\n style : {\n lineHeight : `${this.eventHeightInPixels}px`,\n marginBottom : `${this.eventSpacing}px`\n },\n dataset : {\n eventId : 'overflow'\n }\n };\n return overflowButtonRenderer ? this.callback(overflowButtonRenderer, this, [domConfig, overflowCount]) : domConfig;\n }\n getCell(date) {\n if (typeof date !== 'string') {\n date = this.dayTime.dateKey(date);\n }\n return this.contentElement.querySelector(`[data-date=\"${date}\"]`);\n }\n getCellOverflowButton(date) {\n return this.getCell(date)?.querySelector('.b-cal-cell-overflow');\n }\n};\n", "import Base from '../../../Core/Base.js';\nimport DateHelper from '../../../Core/helper/DateHelper.js';\nimport Month from '../../../Core/util/Month.js';\n/**\n * @module Calendar/widget/mixin/DateRangeOwner\n */\nconst\n validRangeUnits = {\n day : 1,\n week : 1,\n month : 1,\n year : 1,\n decade : 1\n },\n compareRange = (r1, r2) => r1?.unit === r2?.unit && r1?.magnitude === r2?.magnitude;\n/**\n * Mixin that provides the ability to collect encapsulate a range of dates specified by a\n * {@link #config-startDate} and a {@link #config-range}.\n *\n * @mixin\n */\nexport default Target => class DateRangeOwner extends (Target || Base) {\n static $name = 'DateRangeOwner';\n static configurable = {\n month : true,\n /**\n * Setting this property may change the encapsulated range if the date is outside the current\n * range.\n *\n * It also causes this view to scroll the view to the passed date, or closest date.\n * See {@link Calendar.widget.mixin.CalendarMixin#function-scrollTo}\n * @member {Date} date\n */\n /**\n * The date to orient this view's {@link #config-range} around.\n *\n * When using a {@link #config-range} of weeks, months, years or decades, the {@link #config-startDate} snaps\n * to the closest lower range boundary, and the end date snaps to the closest larger\n * range boundary.\n *\n * When using a {@link #config-range} of days, the {@link #config-startDate} is set to the passed date.\n * @config {Date}\n */\n date : {\n $config : {\n equal : 'date'\n },\n value : null\n },\n /**\n * The time range encapsulated by the current {@link #property-date}.\n *\n * When a range is used, changing the {@link #config-date} snaps the {@link #config-startDate}\n * to the closest starting date of the range. For Example if the range was configured as `'1 week'`\n * then setting the date to the date of next Wednesday would mean that the {@link #property-startDate}\n * would be the __start__ of next week, and an entire week would be encapsulated by this view.\n * @member {DurationConfig} range\n */\n /**\n * The time range around the {@link #config-date} to display events for.\n *\n * Valid values are:\n * - day\n * - week\n * - month\n * - year\n * - decade\n *\n * This may also be specified as a duration with a magnitude part and a unit part. For\n * example `'1m'` would mean one month, and `'4w'` would mean four weeks.\n * See {@link Core.helper.DateHelper#function-parseDuration-static} for details\n * of syntax.\n *\n * When using a range of weeks, months, years or decades, then when this widget's\n * {@link #config-date} is synced with its owning {@link Calendar.view.Calendar}'s\n * {@link Calendar.view.Calendar#property-date}, this widget's {@link #config-startDate}\n * is snapped to the closest start point of the range which encompasses that date.\n *\n * So if using `range : '1w'`, then setting the date to Thursday, 28th October 2021\n * Would mean that the `startDate` snaps to Sunday 24th October 2021 (assuming the locale\n * uses Sunday as the week start day).\n *\n * If configured to use a range of *days*, no snapping is done. There's no defined start point\n * so the {@link #config-startDate} is set to the incoming Calendar date.\n *\n * __Note:__ If an {@link #config-endDate} is specified, any range is ignored. The encompassed range\n * will be specified by the {@link #config-startDate} and {@link #config-endDate}, and when the\n * {@link #config-startDate} changes, the {@link #config-endDate} is changed to keep the duration\n * the same.\n * @config {String|DurationConfig}\n */\n range : {\n $config : {\n lazy : true,\n equal : compareRange\n },\n value : null\n },\n /**\n * Gets the start date of the {@link #config-range} that this view covers.\n * @member {Date} startDate\n * @readonly\n */\n /**\n * The start date (Time component is zeroed) of this view.\n * @config {Date}\n */\n startDate : {\n $config : {\n equal : 'date'\n }\n },\n /**\n * Gets the end date of the {@link #config-range} that this view covers.\n * Note that Date objects are time points, not a representation of a 24 hour period,\n * So `{startDate : '2020-10-24', endDate : '2020-10-25' }` spans the __single__ day\n * 24th October 2020. The end point is `2020-10-25T00:00:00`\n * @member {Date} endDate\n * @readonly\n */\n /**\n * The end date (Time component is zeroed) of this view. Note that in terms of full days,\n * this is exclusive, ie: 2020-01-012 to 2020-01-08 is *seven* days. The end is 00:00:00 on\n * the 8th.\n *\n * __Note:__ This configuration takes precedence over any {@link #config-range} specified.\n * If used, the {@link #config-range} is ignored, and after configuration, the `endDate` is\n * locked to the {@link #config-startDate} when the {@link #config-startDate} is changed.\n * @config {Date}\n */\n endDate : {\n $config : {\n equal : 'date'\n }\n }\n };\n /**\n * Interface method used by an encapsulating Calendar view to implement the \"prev\" button.\n */\n previous() {\n const { range } = this;\n if (range) {\n this.date = DateHelper.add(this.date, -range.magnitude, range.unit);\n }\n else {\n this.startDate = DateHelper.add(this.startDate, -this.duration, 'day');\n }\n }\n /**\n * Interface method used by an encapsulating Calendar view to implement the \"next\" button.\n */\n next() {\n const { range } = this;\n if (range) {\n this.date = DateHelper.add(this.date, range.magnitude, range.unit);\n }\n else {\n this.startDate = DateHelper.add(this.startDate, this.duration, 'day');\n }\n }\n changeDate(date) {\n date = super.changeDate(date || this.startDate);\n if (this.isConfiguring || this.isValidRange(this.range, date)) {\n return date;\n }\n }\n updateDate(date) {\n const\n me = this,\n {\n startDate,\n _month\n } = me,\n newStartDate = me.changeStartDate(date),\n generation = _month?.generation;\n // Move range so that it encapsulates the target date if necessary\n if (!startDate || (newStartDate - startDate)) {\n // Having an endDate configured takes precedence over a range.\n // Shift the range forward or back so that the target date is in\n if (me.hasConfig('endDate')) {\n const\n { endDate, duration } = me,\n // For EventLists, when we are using a startDate->endDate range as opposed to a fixed\n // range, the dates are *inclusive*, so pick the correct date containment function.\n dateContainmentFn = me.isEventList && !me.range ? 'betweenLesserEqual' : 'betweenLesser';\n if (!me.isConfiguring || !DateHelper[dateContainmentFn](date, startDate, endDate)) {\n // Need to scroll left\n if (!startDate || !endDate || date < startDate) {\n me.startDate = date;\n }\n // Need to scroll right.\n // EventList range is *inclusive*\n else if (me.isEventList ? (date > endDate) : (date >= endDate)) {\n me.startDate = DateHelper.add(date, -(duration - 1), 'day');\n }\n }\n }\n // If there's no endDate, we MUST be configured with a range, so snap\n // the date to the closest range start.\n else {\n me.startDate = DateHelper.floor(date, me.range, me.startDate, me.weekStartDay);\n }\n }\n // If we have not already updated our month by setting startDate above\n // then update the month now.\n // We must only update it once because we react to month mutation to refresh the UI.\n if (_month && (_month.generation === generation)) {\n _month.date = date;\n }\n super.updateDate?.(...arguments);\n }\n changeStartDate(startDate, oldStartDate) {\n return super.changeStartDate(this.snapDate(this.ingestDate(startDate)), oldStartDate);\n }\n updateStartDate(startDate, oldStartDate) {\n const\n me = this,\n {\n refreshCount,\n _month\n } = me;\n if (!me.date) {\n me.date = startDate;\n }\n if (_month) {\n _month.date = startDate;\n }\n // Some views inherit startDate\n super.updateStartDate?.(...arguments);\n // If we are bounded by an endDate configuration, but are not in the process of being passed\n // a new endDate (unless we are at configure time), keep the end date synced with current duration.\n if (me.hasConfig('endDate') && (!me.peekConfig('endDate') || this.isConfiguring)) {\n const duration = DateHelper.diff(oldStartDate || startDate, me.endDate, 'day');\n me.endDate = DateHelper.add(startDate, duration, 'day');\n }\n if (!me.isConfiguring) {\n // If that changed the end date, the updater will have done a refresh.\n // If there was no change to the endDate, so no refresh, we have to refresh here.\n if (me.refreshCount === refreshCount) {\n me._cellMap?.clear();\n me.refresh();\n }\n }\n me.triggerRangeChange(startDate, me.endDate);\n }\n updateEndDate(endDate) {\n super.updateEndDate?.(...arguments);\n this.triggerRangeChange(this.startDate, endDate);\n }\n triggerRangeChange(startDate, endDate) {\n const { lastRangeAnnounced } = this;\n if (!lastRangeAnnounced || (lastRangeAnnounced.startDate - startDate) || (lastRangeAnnounced.endDate - endDate)) {\n /**\n * Fired when the range of dates encapsulated by this view changes.\n *\n * This will be when initially configured with a {@link #config-startDate} and {@link #config-endDate},\n * and when moving a view in time by changing its {@link #property-date}, or its {@link #property-range},\n * or its {@link #property-startDate}, or its {@link #property-endDate}.\n *\n * This will happen when moving in time using the Calendar's previous and next\n * buttons in its {@link Calendar.view.Calendar#property-tbar}.\n * @event rangeChange\n * @param {Scheduler.view.TimelineBase} source This Scheduler/Gantt instance.\n * @param {Object} [old] The old date range __if any__.\n * @param {Date} old.startDate the old start date.\n * @param {Date} old.endDate the old end date.\n * @param {Object} new The new date range\n * @param {Date} new.startDate the new start date.\n * @param {Date} new.endDate the new end date.\n */\n this.trigger('rangeChange', {\n old : lastRangeAnnounced,\n new : this.lastRangeAnnounced = {\n startDate,\n endDate\n }\n });\n }\n }\n get range() {\n return this.hasConfig('endDate') ? null : this._range;\n }\n get endDate() {\n const me = this;\n return me.hasConfig('endDate')\n ? me._endDate\n : me.startDate && DateHelper.add(me.startDate, me.range.magnitude, me.range.unit);\n }\n // Snap the passed date to the start or end of our configured range block if we have one.\n snapDate(date, end) {\n const\n me = this,\n range = me._endDate || me.peekConfig('endDate') ? null : me.range;\n // If we have been configured with a range which needs snapping, snap the date to the required end\n return range && range.unit !== 'day' && date\n ? DateHelper[end ? 'ceil' : 'floor'](date, range, undefined, me.weekStartDay)\n : date;\n }\n changeRange(range) {\n if (range && !this.hasConfig('endDate')) {\n // '1d' or '1 day' or '4 weeks', '1\u0434\u0435\u0441\u044F\u0442\u0438\u043B\u0435\u0442\u0438\u0435' etc.\n // We parse to an object.\n if (typeof range === 'string') {\n if (DateHelper.parseTimeUnit(range)) {\n range = {\n magnitude : 1,\n unit : range\n };\n }\n else {\n range = DateHelper.parseDuration(range);\n }\n }\n else if (typeof range === 'number') {\n return {\n magnitude : range,\n unit : 'day'\n };\n }\n // range : '100ms' would be invalid.\n if (!validRangeUnits[range.unit]) {\n throw new Error('Range must be in days, weeks, months, years or decades');\n }\n // Veto invalid navigation\n if (this._date && !this.isValidRange(range)) {\n return;\n }\n }\n return range;\n }\n isValidRange(range, date = this.date) {\n const\n minDate = this.minDate || this.calendar?.minDate,\n maxDate = this.maxDate || this.calendar?.maxDate;\n // Only do date arithmetic if we need to.\n if (range && !isNaN(minDate) || !isNaN(maxDate)) {\n const newRange = this.calculateDateRange(range, date);\n if (!isNaN(minDate)) {\n // Veto navigation to before minDate.\n if (newRange.startDate < minDate) {\n return false;\n }\n }\n if (!isNaN(maxDate)) {\n // Veto navigation to after maxDate.\n if (newRange.endDate > maxDate) {\n return false;\n }\n }\n }\n return true;\n }\n updateRange(range) {\n const\n me = this,\n { date } = me;\n // Change the start and end dates depending on the range size around the current date\n if (range && date && !me.hasConfig('endDate')) {\n // If we have a range, then endDate is derived\n me.startDate = date;\n }\n }\n calculateDateRange(range, date) {\n // Calculate the start and end dates depending on the range size around the requested date\n if (date) {\n // Only snap for units with definite start points\n if (range.unit !== 'day') {\n return {\n startDate : DateHelper.floor(date, range, undefined, this.weekStartDay),\n endDate : DateHelper.ceil(DateHelper.add(date, 1, 'day'), range, undefined, this.weekStartDay)\n };\n }\n return {\n startDate : date,\n endDate : DateHelper.add(date, range.magnitude, 'day')\n };\n }\n }\n changeMonth(month) {\n const\n me = this,\n { date } = me;\n // MonthView, based on CalendarPanel has its own opinions\n if (super.changeMonth) {\n return super.changeMonth(...arguments);\n }\n if (!month?.isMonth) {\n month = new Month({\n date,\n weekStartDay : me.weekStartDay,\n hideNonWorkingDays : me.hideNonWorkingDays,\n nonWorkingDays : me.nonWorkingDays\n });\n if (me.nonWorkingDays == null) {\n me.nonWorkingDays = month.nonWorkingDays;\n }\n if (me.weekStartDay == null) {\n me.weekStartDay = month.weekStartDay;\n }\n }\n return month;\n }\n /**\n * Returns the range of included dates in the range as a two-element array, i.e., `[0]` is {@link #config-startDate}\n * and `[1]` is {@link #property-lastDate}.\n * @member {Date[]}\n * @internal\n */\n get dateBounds() {\n return [this.startDate, this.lastDate];\n }\n get duration() {\n const { range } = this;\n return range ? DateHelper.as('d', range.magnitude, range.unit) : super.duration;\n }\n /**\n * The last day that is included in the date range. This is different than {@link #config-endDate} since that date\n * is not inclusive. For example, an `endDate` of 2022-07-21 00:00:00 indicates that the time range ends at that\n * time, and so 2022-07-21 is _not_ in the range. In this example, `lastDate` would be 2022-07-20 since that is the\n * last day included in the range.\n * @member {Date}\n * @internal\n */\n get lastDate() {\n const lastDate = this.endDate;\n // endDate is \"exclusive\" because it means 00:00:00 of that day, so subtract 1\n // to keep description consistent with human expectations.\n return lastDate && DateHelper.add(lastDate, -1, 'day');\n }\n};\n", "import Widget from '../../Core/widget/Widget.js';\nimport DayCellCollecter from './mixin/DayCellCollecter.js';\nimport CalendarMixin from './mixin/CalendarMixin.js';\nimport DayCellRenderer from './mixin/DayCellRenderer.js';\nimport DH from '../../Core/helper/DateHelper.js';\nimport EventSlots from '../util/EventSlots.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport DomSync from '../../Core/helper/DomSync.js';\nimport EventHelper from '../../Core/helper/EventHelper.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport DayTime from '../../Core/util/DayTime.js';\nimport Scroller from '../../Core/helper/util/Scroller.js';\nimport Objects from '../../Core/helper/util/Objects.js';\nimport DateRangeOwner from './mixin/DateRangeOwner.js';\n/**\n * @module Calendar/widget/CalendarRow\n */\nconst\n emptyObject = Object.freeze({}),\n expandGestures = {\n shrinkwrap : 1,\n expand : 1\n },\n formatDayPart = (format, sep, d1, d2, compress) => {\n const s1 = DH.format(d1, format);\n return d2 ? `${s1}${compress ? sep.trim() : sep}${DH.format(d2, format).slice(compress ? -1 : 0)}` : s1;\n };\n/**\n * This is normally used as the \"All day events\" section of a {@link Calendar.widget.DayView} or\n * {@link Calendar.widget.WeekView}. But it may be used standalone as a regular Widget.\n *\n * As a standalone widget, it will lack the capabilities of the {@link Calendar.view.Calendar Calendar}\n * class, such as keyboard-based event to event navigation and drag/drop features.\n *\n * A Widget which displays a single row of calendar cells for a configured range of dates.\n *\n * Cell rendering can be customized using the {@link #config-dayCellRenderer} method.\n *\n * Event rendering can be customized using the {@link #config-eventRenderer} method.\n *\n * @extends Core/widget/Widget\n * @mixes Core/widget/mixin/Responsive\n * @mixes Calendar/widget/mixin/DayCellRenderer\n * @mixes Calendar/widget/mixin/CalendarMixin\n * @mixes Calendar/widget/mixin/DateRangeOwner\n * @classtype calendarrow\n */\nexport default class CalendarRow extends Widget.mixin(\n CalendarMixin, DayCellCollecter, DayCellRenderer, DateRangeOwner\n) {\n static get $name() {\n return 'CalendarRow';\n }\n // Factoryable type name\n static get type() {\n return 'calendarrow';\n }\n static get configurable() {\n return {\n // region Hidden configs\n /**\n * @config dayCellRenderer\n * @hide\n */\n // endRegion\n cls : 'b-calendar-days',\n dragUnit : 'day',\n /**\n * Set this to `false` to not use transition for this Widget as it changes height\n *\n * @config {Boolean}\n * @default\n */\n animate : true,\n /**\n * By default, this widget displays a maximum of {@link #config-defaultEventRowCount} events\n * before showing overflow indicators, and becoming {@link #function-toggleExpandCollapse expandable}.\n *\n * Configuring this as `true` makes this widget accommodate all events with no overflow.\n * @config {Boolean}\n */\n autoHeight : null,\n autoRefresh : [\n 'dayNameFormat',\n 'dayNumberCompress',\n 'dayNumberFormat',\n 'daySeparator',\n 'hideEmptyDays'\n ],\n descriptionFormat : [true, true],\n /**\n * Either the start hour of the day, or a *24 hour* `HH:MM` string denoting the start of the first rendered\n * daily time block.\n *\n * @config {String|Number}\n * @default 0\n */\n dayStartShift : null,\n dayTime : 0,\n /**\n * The number of events to show to define the height of this widget by default if this widget\n * {@link #config-autoHeight} is *not* defined as `true`. The widget may be expanded to accommodate all\n * the events if there are overflowing events.\n * @config {Number}\n * @default\n */\n defaultEventRowCount : 3,\n /**\n * When `true`, a full week of dates is rendered for a single day range. This should not be applied when\n * the `duration` spans multiple days.\n * @prp {Boolean}\n */\n fullWeek : null,\n /**\n * By default, the day columns flex to all fit within the width of this widget.\n *\n * configuring a `minDayWidth` means that if the day columns do not fit within this\n * widget's width, it becomes horizontally scrollable.\n * @config {Number}\n */\n minDayWidth : null,\n scrollable : {\n overflowX : 'hidden',\n overflowY : 'hidden',\n propagateSync : true\n },\n headerScroller : {\n $config : ['lazy', 'nullify'],\n value : {\n overflowX : 'hidden',\n overflowY : 'hidden',\n propagateSync : true\n }\n },\n /**\n * The {@link Core.helper.DateHelper} format string for day names (e.g., \"ddd\" for \"Mon\", \"Tue\", ...)\n * @config {String}\n * @default\n */\n dayNameFormat : 'ddd',\n /**\n * Specify `true` to textually compress day number pairs. For example, compress \"11/12\" to \"11/2\". Also\n * when `true`, the {@link #config-daySeparator} is trimmed of any whitespace.\n * @config {Boolean}\n * @default false\n */\n dayNumberCompress : null,\n /**\n * The {@link Core.helper.DateHelper} format string for day numbers (e.g., \"D\" for \"9\", \"10\", ...)\n * @config {String}\n * @default\n */\n dayNumberFormat : 'D',\n /**\n * The separator between day names and numbers. If a single string is provided, it applies to both day\n * names and day numbers. If an array of 2 strings is provided, the [0] element is the separator for day\n * names and [1] element is the separator for day numbers.\n * @config {String|String[]}\n */\n daySeparator : '-',\n responsive : {\n small : {\n // dayNameFormat : 'd1/d1',\n // dayNumberFormat : 'D/D',\n dayNameFormat : 'd1',\n dayNumberCompress : true,\n daySeparator : '/'\n },\n '*' : {\n // dayNameFormat : 'ddd-ddd',\n // dayNumberFormat : 'D-D',\n dayNameFormat : 'ddd',\n dayNumberCompress : false,\n daySeparator : '-'\n }\n },\n dayNameSelector : '.b-cal-cell-header',\n // We are in control of our size. Once we can calculate our maxEventCount, then from\n // that and the eventContainerTop and the defaultEventRowCount and the autoHeight and\n // expanded settings we calculate our height.\n // We have to have been through one initial refresh cycle to measure eventContainerTop\n // which is handled in onInternalPaint.\n monitorResize : false,\n /**\n * How much extra space in pixels or other DOM units to allow below the event bars to\n * facilitate drag-create gestures.\n * @config {Number|String}\n * @default\n */\n gutterHeight : null,\n expanded : null,\n /**\n * How the view responds to clicking on a `+n more` button in an overflowing day cell.\n *\n * The default value, `'popup'`, means that a small dialog box showing the full complement\n * of events for that cell is shown aligned to the cell.\n *\n * When set to `'expand'`, then clicking the `+n more` button causes the encapsulating\n * row to expand to accommodate all events in that row with no overflow.\n *\n * Navigating to a new month resets the row to its default, flexed height.\n * @config {'popup'|'expand'} overflowClickAction\n * @default\n */\n overflowClickAction : 'popup',\n /**\n * A function, or name of a function which is passed the {@link DomConfig} object which\n * will be used to sync with a day cell header.\n *\n * ```javascript\n * dayHeaderRenderer : function(headerDomConfig, cellData) {\n * if (this.isSpecialDate(cellData.date)) {\n * headerDomConfig.className['b-is-special-date'] = 1;\n *\n * // Add to the content element's children\n * headerDomConfig.children.push({\n * text : 'Special day',\n * className : 'b-special-day\n * });\n * }\n * }\n *```\n *\n * The result is used to sync the DOM of the day column.\n *\n * @config {Function|String} dayHeaderRenderer\n * @param {DomConfig} headerDomConfig A {@link DomConfig} config object which is used to sync the day header element.\n * @param {Object} headerDomConfig.className An object who's truthy property names will be applied as class names.\n * @param {Object} headerDomConfig.style A CSS style definition object.\n * @param {Object} headerDomConfig.dataset The DOM data properties to set.\n * @param {DomConfig[]} headerDomConfig.children The {@link DomConfig} definitions the header content.\n * There will be 2 `children` encapsulating the day name and the date.\n * @param {DayCell} cellData An object that contains data about the cell.\n * @returns {String}\n */\n dayHeaderRenderer : null,\n /**\n * Configure this as `true` to hide day columns which contain no events.\n *\n * {@note}Use with care. This may result in no day columns being rendered\n * for completely empty time ranges.{/@note}\n * @prp {Boolean}\n * @default false\n */\n hideEmptyDays : null\n };\n }\n /**\n * A Promise which will be in _Pending_ state only when the `minHeight` is animating to a new value.\n * @property {Promise}\n */\n heightAnimation = Promise.resolve;\n compose() {\n return {\n children : {\n headerElement : {\n className : 'b-calendarrow-header',\n children : {\n headerCellContainer : {\n className : 'b-calendarrow-header-container'\n },\n scrollPadElement : {\n // retainElement : true, // DomSync should leave this alone\n ...DomHelper.scrollBarPadElement\n }\n }\n },\n bodyElement : {\n className : 'b-calendarrow-body',\n children : {\n cellContainer : {\n reference : 'cellContainer',\n className : 'b-calendarrow-cell-container'\n }\n }\n }\n }\n };\n }\n onInternalPaint({ firstPaint }) {\n // On first paint, create measurable elements, the refresh measures and caches uninitialized\n // heights, so delete the cached values so that they get measured again\n if (firstPaint) {\n const\n me = this,\n { fonts } = document,\n onFirstPaint = () => {\n // In case we are arriving here after the font load. Need to remeasure\n // elements that are sized by text.\n me._eventContainerTop = me._eventContainerHeight = null;\n if (me.eventStore.count) {\n me.performResizeRefresh(null, null, true);\n }\n };\n // If the API is available, we need to remeasure when fonts become ready\n if (fonts?.status !== 'loaded') {\n fonts.ready.then(() => !me.isDestroyed && onFirstPaint());\n }\n onFirstPaint();\n }\n }\n changeDaySeparator(daySeparator) {\n return Array.isArray(daySeparator) ? daySeparator : [daySeparator, daySeparator];\n }\n changeElement() {\n const result = super.changeElement(...arguments);\n // Ensure header scroller is in sync in the X axis with the main scroller\n this.scrollable.addPartner(this.headerScroller, 'x');\n return result;\n }\n changeHeaderScroller(headerScroller, oldHeaderScroller) {\n if (headerScroller) {\n headerScroller = Scroller.new({\n _id : `${this.id}-header-scroller`,\n element : this.headerCellContainer,\n widget : this\n }, headerScroller);\n }\n else {\n oldHeaderScroller?.destroy();\n }\n return headerScroller;\n }\n /**\n * Brings an event or a time into view.\n * @param {Scheduler.model.EventModel|Date|Number} target The event to scroll to or\n * a `Date` to read the hour value from, or an hour number.\n * @param {BryntumScrollOptions} [options] How to scroll.\n * @returns {Promise} A promise which is resolved when the target has been scrolled into view.\n */\n async scrollTo(target) {\n const\n me = this,\n { eventFilter } = me;\n // If it's an event and filtered in, and intersects our date range, but we don't have an element\n // for it, then it must be because we are collapsed. Expand so it is rendered.\n if (target.isEvent && (!eventFilter || eventFilter(target)) && DH.intersectSpans(me.startDate, me.endDate, target.startDate, target.endDate)) {\n if (!me.getEventElement(target)) {\n if (!(me.expanded || me.autoHeight)) {\n me.toggleExpandCollapse();\n }\n }\n }\n return super.scrollTo(...arguments);\n }\n updateDate(date, oldDate) {\n const me = this;\n let el = oldDate && me.getDayHeader(oldDate);\n el?.classList.remove('b-selected-date');\n // Base class may move our range if new date is outside of current range.\n super.updateDate?.(date, oldDate);\n el = date && me.getDayHeader(date);\n el?.classList.add('b-selected-date');\n }\n getDayHeader(date) {\n if (typeof date !== 'string') {\n date = this.dateKey(date);\n }\n return this.headerCellContainer.querySelector(`.b-cal-cell-header[data-header-date=\"${date}\"]`);\n }\n get overflowElement() {\n return this.bodyElement;\n }\n createCellMap(getEventsOptions = {}) {\n const\n me = this,\n hiddenDays = me.hideNonWorkingDays ? me.nonWorkingDays : emptyObject,\n { maxEventCount } = me,\n options = ObjectHelper.assign({\n dayTime : me.dayTime,\n // Only the first *visible* cell needs overflows flowing into it.\n // from after that, propagateCellEvents copies events forward, so\n // the getEvents will use the \"startDate\" index to extract events for a date.\n getDateIndex : date => date > (me.firstVisibleDate || me.startDate) ? 'startDate' : 'date'\n }, getEventsOptions),\n cellMap = super.createCellMap(options),\n { owner } = me;\n let newMaxEventCount = 0,\n lastVisibleCellData;\n cellMap.forEach(cellData => {\n if (!hiddenDays[cellData.day]) {\n lastVisibleCellData = cellData;\n }\n newMaxEventCount = Math.max(newMaxEventCount, cellData.renderedEvents.length);\n });\n me.maxEventCount = newMaxEventCount;\n // If we changed maxEventCount, recreate the data\n if (newMaxEventCount !== maxEventCount) {\n cellMap.clear();\n return me.createCellMap(options);\n }\n // Have to set this on the last cellData entry which is visible\n lastVisibleCellData && (lastVisibleCellData.isRowEnd = true);\n owner?.element.classList.toggle('b-has-allday-events', Boolean(cellMap.size));\n return cellMap;\n }\n collectEvents(options) {\n // Only the first cell needs overflows flowing into it.\n // from after that, propagateCellEvents copies events forward\n options = ObjectHelper.assign({\n dayTime : this.dayTime\n }, options, {\n // Only the first *visible* cell needs overflows flowing into it.\n // from after that, propagateCellEvents copies events forward, so\n // the getEvents will use the \"startDate\" index to extract events for a date.\n getDateIndex : date => date > (this.firstVisibleDate || this.startDate) ? 'startDate' : 'date'\n });\n return super.collectEvents(options);\n }\n createCellData(date) {\n const\n me = this,\n columnIndex = DH.diff(me.startDate, date, 'day'),\n visibleColumnIndex = columnIndex;\n return Object.assign(super.createCellData(date), {\n visibleColumnIndex,\n columnIndex,\n isRowStart : visibleColumnIndex === 0,\n isRowEnd : false,\n // Events can forward-occupy slots if they\n // overrun their start day.\n // So the next step is to propagate forward\n // multi day events into future cells they cover.\n renderedEvents : new EventSlots()\n });\n }\n get dayStartShift() {\n return this.dayTime?.startShift ?? this._dayStartShift;\n }\n updateDayStartShift(dayStartShift) {\n // Day number circle needs to be oval to accommodate 00-00\n this.element.classList.toggle('b-shifted-day', Boolean(dayStartShift));\n this.dayTime = new DayTime(dayStartShift);\n }\n changeDayTime(dayTime) {\n if (!dayTime) {\n dayTime = new DayTime(this.dayStartShift);\n }\n // Allow DayTime config object to be passed\n if (!dayTime.isDayTime) {\n dayTime = new DayTime(dayTime);\n }\n if (!this._dayTime?.equals(dayTime)) {\n return dayTime;\n }\n }\n dayOfDate(date) {\n return this.dayTime.dayOfDate(date);\n }\n updateMinDayWidth(minDayWidth) {\n const\n {\n scrollable,\n headerScroller\n } = this,\n { element } = scrollable,\n { style } = this.element;\n // Need min-width : 0 to allow the element to shrink\n style.setProperty('--min-day-width', minDayWidth ? DomHelper.setLength(minDayWidth) : 0);\n style.setProperty('--cell-container-overflow', minDayWidth ? 'visible' : 'hidden');\n // Forced synchronous layout here, but we need to ascertain horizontal overflow state\n if (minDayWidth && element.scrollWidth > element.clientWidth) {\n // Overflow 'hidden-scroll' is a special Scroller setting.\n // With overlayed scrollbars it just means 'auto'\n // With space-consuming scrollbars, it hides scrollbars using CSS while using auto.\n // But if the two axes scroll, then both scrollbars should not be hidden so it will\n // fall back to using overflow:hidden and a `wheel` listener.\n scrollable.overflowX = headerScroller.overflowX = 'hidden-scroll';\n }\n else {\n scrollable.overflowX = headerScroller.overflowX = false;\n }\n }\n updateEventHeight() {\n // CalendarMixin needs to know first\n super.updateEventHeight(...arguments);\n if (!this.autoHeight && !this.isConfiguring && !this.expanded) {\n this.setEventContentHeight(this.cellContentHeight);\n }\n }\n updateGutterHeight() {\n if (!this.isConfiguring) {\n this.setEventContentHeight(this.cellContentHeight);\n }\n }\n get stepUnit() {\n return this.duration > 1 ? `${this.duration} ${this.L('L{DayView.daysUnit}')}` : this.L('L{DayView.dayUnit}');\n }\n updateNonWorkingDays() {\n this.onVisibleDateRangeChange();\n }\n updateHideNonWorkingDays() {\n super.updateHideNonWorkingDays(...arguments);\n this.onVisibleDateRangeChange();\n }\n // Override from DayCellRenderer\n // Called automatically on the CellOverflow${overflowPopupTrigger} event because of callOnFunctions\n onCellOverflowGesture({ date }) {\n if (expandGestures[this.overflowClickAction.toLowerCase()]) {\n this.expanded = true;\n }\n else {\n super.onCellOverflowGesture(...arguments);\n }\n }\n onVisibleDateRangeChange() {\n if (!this.isConfiguring) {\n this._cellMap?.clear();\n this.refresh();\n }\n }\n changeAutoHeight(autoHeight) {\n const\n me = this,\n // Must be cached before property changes. This is calculated in this class\n { eventsPerCell } = me;\n // We need to update in the changer because we need to cache conditions that\n // applied before the change: eventsPerCell\n me._autoHeight = autoHeight;\n me.setEventContentHeight(me.cellContentHeight);\n // Calculates new values for eventsPerCell and eventContainerTop\n // and handles changes to either.\n if (!me.isConfiguring) {\n me.performResizeRefresh(eventsPerCell, me.eventContainerTop, true);\n }\n }\n async setEventContentHeight(eventContentHeight, syncingSiblings) {\n const\n me = this,\n {\n cellContainer : element,\n parent\n } = me;\n // Reject non-changes.\n // This isn't a config because setting it is an async awaitable method.\n if (me._eventContentHeight !== eventContentHeight) {\n // Update any smaller sibling rows unless that is what is being done to us\n if (!syncingSiblings && parent?.isDayView && parent.parent?.isResourceView) {\n const siblings = parent.parent.items.map(v => v.allDayEvents).filter(v => v && v !== me);\n // If we are the allDayEvents of a DayView which has siblings, we must consult\n // all siblings which are not time axes/scrollers and find the max so that we all\n // stay in sync.\n // This may be the case in a ResourceView of several DayViews side-by-side.\n eventContentHeight = Math.max(eventContentHeight || 0, ...siblings.filter(v => !v.owner.isResourceDayViewTimeAxis).map(v => v.calculateCellContentHeight() || 0));\n siblings?.forEach(v => {\n v.setEventContentHeight(eventContentHeight, true);\n });\n }\n const { height : oldHeight } = me;\n let { animate } = me;\n // Set this widget to the animating state if we are configured to animate the height\n me.isAnimating = animate;\n // Once we have set the animating flag which sets the CSS class, we can detect any duration\n const duration = DomHelper.getPropertyTransitionDuration(element, 'height');\n if (!duration) {\n me.isAnimating = animate = false;\n }\n // Only show the scrollbar when we need to - if there's a space-consuming scrollbar shown.\n // We pre-change the cell heights in unanimated mode and see if there's overflow so that\n // we can set overflowY appropriately before the animation is kicked off.\n // Needs to be at least 1px so that horizontal scrolling can stay in sync\n element.style.height = `${eventContentHeight || 1}px`;\n // If it's zero height, the top border will not be shown because this border would collide\n // with the border-top of the day content element below.\n me.bodyElement.classList.toggle('b-zero-height', !Boolean(eventContentHeight));\n if (animate) {\n await (me.heightAnimation = EventHelper.waitForTransitionEnd({\n property : 'height',\n element,\n duration\n }));\n }\n if (!me.isDestroyed) {\n const { height } = me;\n me.isAnimating = false;\n me._eventContentHeight = eventContentHeight;\n me.owner?.syncScrollbarPadding?.();\n /**\n * Fires when this CalendarRow has completely changed its height.\n * This fires *after* the animation has finished.\n * @param {Calendar.widget.CalendarRow} source The triggering instance.\n * @param {Number} oldHeight The old height.\n * @param {Number} height The new height.\n * @event heightChange\n */\n if (height !== oldHeight) {\n me.trigger('heightChange', {\n height,\n oldHeight\n });\n }\n }\n }\n }\n get hasOverflow() {\n return !this.autoHeight && this.maxEventCount > this.defaultEventRowCount;\n }\n get eventsPerCell() {\n const\n me = this,\n { maxEventCount } = me;\n return (me.expanded || me.autoHeight) ? maxEventCount : Math.min(maxEventCount, me.defaultEventRowCount);\n }\n get cellContentHeight() {\n return this.calculateCellContentHeight();\n }\n calculateCellContentHeight() {\n // The minHeight must accommodate at least one row, but by default, defaultEventRowCount rows of events.\n // The all day section is expandable. If autoHeight, the minHeight must accommodate all events.\n const\n me = this,\n { gutterHeight } = me;\n let result = Math.ceil(me.eventContainerTop + me.eventsPerCell * (me.eventHeightInPixels + me.eventSpacing));\n // Allow gutterHeight : 1em to result in a 'calc(100px + 5em)' type value\n if (gutterHeight) {\n // The gutter is *instead of* the ${eventSpacing}px below the last event\n if (me.eventsPerCell) {\n result -= me.eventSpacing;\n }\n if (isNaN(gutterHeight)) {\n result = `calc(${result}px + ${gutterHeight})`;\n }\n else {\n result += Number(gutterHeight);\n }\n }\n return result;\n }\n getDateFromPosition(clientX, clientY, local = false, keyParser) {\n const\n me = this,\n {\n eventContentElement\n } = me,\n rowRect = eventContentElement.getBoundingClientRect(),\n dx = me.rtl ? rowRect.right - clientX : clientX - rowRect.left,\n width = eventContentElement.scrollWidth,\n // We have to compare element position because day columns may have different widths\n overCell = me.getDayElementFromX(clientX);\n if (dx < 0 || width < dx || clientY < rowRect.top || rowRect.bottom < clientY) {\n return null;\n }\n return me.getDateFromElement(overCell, keyParser);\n }\n /**\n * If not {@link #config-autoHeight}, this toggles between the collapsed state where it shows\n * the {@link #config-defaultEventRowCount} even if more event rows exist, and the expanded state\n * (which is equivalent to {@link #config-autoHeight}) where all event rows are shown.\n */\n async toggleExpandCollapse() {\n const { expanded } = this;\n // Do not go through the setter because this method is async and needs to be awaited\n await this.updateExpanded(!Boolean(expanded), expanded);\n }\n async updateExpanded(expanded, wasExpanded) {\n const me = this;\n // Temporarily set the property so that eventsPerCell yields the \"from\" count.\n me._expanded = wasExpanded;\n const { eventsPerCell } = me;\n me._expanded = expanded;\n // If we are expanding, a refresh will update the height *after* the refresh\n // which is what we want: it will \"reveal\" existing event bars\n if (me.expanded) {\n // If not yet visible, this will be called on paint.\n if (me.isVisible) {\n me.performResizeRefresh(eventsPerCell, me.eventContainerTop, true);\n await me.heightAnimation;\n }\n }\n // If we are collapsing however, we want to hide the overflowing event bars\n // and *only then* refresh to cut the event bars back.\n else {\n me.scrollable.overflowY = 'hidden';\n await me.setEventContentHeight(me.cellContentHeight);\n // Calculates new values for eventsPerCell and eventContainerTop\n // and handles changes to either.\n if (wasExpanded && !me.isDestroyed) {\n me.performResizeRefresh(eventsPerCell, me.eventContainerTop, true);\n }\n }\n }\n get visibleDateHeaders() {\n const me = this;\n let firstDate, lastDate;\n if (me.fullWeek) {\n firstDate = me.month.getWeekStart(me.month.getWeekNumber(me.startDate));\n while (me.hiddenNonWorkingDays[firstDate.getDay()]) {\n firstDate.setDate(firstDate.getDate() + 1);\n }\n lastDate = DH.add(firstDate, 6, 'd'); // inclusive\n while (me.hiddenNonWorkingDays[lastDate.getDay()]) {\n lastDate.setDate(lastDate.getDate() - 1);\n }\n }\n else {\n firstDate = me.firstVisibleDate;\n lastDate = me.lastVisibleDate;\n }\n return [firstDate, lastDate];\n }\n // We must implement the CalendarMixin interface.\n // All views must expose a doRefresh method.\n doRefresh() {\n this._cellMap?.clear();\n const\n me = this,\n {\n dayTime,\n fullWeek,\n startDate,\n endDate,\n headerCellContainer,\n cellContainer,\n dayHeaderRenderer,\n hiddenNonWorkingDays,\n hideEmptyDays,\n owner\n } = me,\n [from, to] = me.visibleDateHeaders,\n cellMap = (startDate || endDate) && me.cellMap,\n nonWorkingDays = me.nonWorkingDays ?? me.month.nonWorkingDays,\n cellDataBlocks = [],\n eventCells = [],\n headerCells = [];\n if (!cellMap) {\n return;\n }\n let columnIndex = 0,\n visibleColumnIndex = 0,\n currentDay, i, lastWorkingDayCell;\n // Collect all our cell data blocks and measure our week length\n // Note: \"!(to < date)\" ==> \"date <= to\" but works for Date since they are never ==\n for (const date = from; !(to < date); date.setDate(date.getDate() + 1), columnIndex++) {\n const\n cellData = cellMap.get(dayTime.dateKey(date)) || me.createCellData(date),\n { day, key } = cellData,\n dayEvents = hideEmptyDays && (owner ? owner.getEventsForDay(key, me.startDate) : cellData.renderedEvents),\n skipDay = hideEmptyDays && !dayEvents?.length;\n // There'll be no cell if it's a hidden, nonworking day or an empty date that we are hiding\n if (!(hiddenNonWorkingDays[day] || skipDay)) {\n cellData.columnIndex = cellData.cellIndex = columnIndex++;\n cellData.isRowStart = visibleColumnIndex === 0;\n cellData.visibleColumnIndex = visibleColumnIndex;\n if (!fullWeek) {\n visibleColumnIndex++;\n }\n cellDataBlocks.push(cellData);\n }\n }\n // Needed for event bar %age width calculation in getCellDomConfig\n me.weekLength = fullWeek ? 1 : visibleColumnIndex;\n const length = cellDataBlocks.length;\n for (i = 0; i < length; i++) {\n const\n cellData = cellDataBlocks[i],\n { day, key } = cellData,\n isNonWorking = nonWorkingDays[day],\n dayCls = `b-day-of-week-${day}`;\n currentDay = !(cellData.date - me.date);\n cellData.cell = me.getCell(key);\n // The contract of DayCellRenderer is defined in Core/widget/CalendarPanel.\n cellData.row = me.cellContainer;\n const cellDomConfig = me.getCellDomConfig(cellData);\n // Falsy means omit the column\n if (cellDomConfig) {\n const headerDomConfig = Objects.merge({\n dataset : {\n // The [data-date] property marks an event content cell.\n headerDate : key\n }\n }, cellDomConfig.children[0]);\n headerDomConfig.className['b-selected-date'] = currentDay;\n headerDomConfig.className['b-current-date'] = fullWeek && currentDay;\n headerDomConfig.className[dayCls] = 1;\n // Show the dayHeaderRenderer the day header domConfig\n dayHeaderRenderer && me.callback(dayHeaderRenderer, me, [headerDomConfig, cellData]);\n cellDomConfig.dataset.date = key;\n Object.assign(cellDomConfig.className, {\n 'b-dayview-allday' : 1,\n [me.nonWorkingDayCls] : isNonWorking,\n [me.weekendCls] : DH.weekends[day],\n [me.dayCellCls] : 1,\n [dayCls] : 1\n });\n // Remove header child from cell config\n cellDomConfig.children.shift();\n headerCells.push(headerDomConfig);\n if (!fullWeek || currentDay) {\n eventCells.push(cellDomConfig);\n if (!isNonWorking) {\n lastWorkingDayCell = cellDomConfig;\n }\n }\n }\n }\n // Identify last working day in row if there were any.\n lastWorkingDayCell && (lastWorkingDayCell.className['b-last-working-day'] = 1);\n DomSync.sync({\n targetElement : headerCellContainer,\n domConfig : {\n children : headerCells,\n // Ensure DOM order matches children order.\n syncOptions : {\n releaseThreshold : 0,\n strict : true\n }\n }\n });\n DomSync.sync({\n targetElement : cellContainer,\n domConfig : {\n children : eventCells,\n // Ensure DOM order matches children order.\n syncOptions : {\n releaseThreshold : 0,\n strict : true\n }\n }\n });\n me.refreshCount = (me.refreshCount || 0) + 1;\n // Must only ever be a temporary state to accommodate dropping into an empty row.\n // As soon as a refresh happens, the state must be revoked.\n me.collapseGutter();\n // Needs day elements to be in place before this can be measured and fixed.\n me.setEventContentHeight(me.cellContentHeight);\n /**\n * Fires when this CalendarRow refreshes.\n * @param {Calendar.widget.CalendarRow} source The triggering instance.\n * @event refresh\n */\n me.trigger('refresh');\n }\n get eventContainerTop() {\n return 0;\n }\n async expandGutter() {\n const me = this;\n if (!me._isTemporarilyExpanded) {\n me.gutterHeight = (me.gutterHeight || 0) + me.eventHeightInPixels + me.eventSpacing;\n await me.setEventContentHeight(me.cellContentHeight);\n me._isTemporarilyExpanded = true;\n }\n }\n async collapseGutter() {\n const me = this;\n if (me._isTemporarilyExpanded) {\n me.gutterHeight = me.gutterHeight - (me.eventHeightInPixels + me.eventSpacing);\n await me.setEventContentHeight(me.cellContentHeight);\n me._isTemporarilyExpanded = false;\n }\n }\n // addCellHeaderContent mutates the cellHeader DomConfig block.\n // And if we are to have a day name element, returns the DomConfig for it.\n // It's called from DayCellRenderer#getCellDomConfig\n addCellHeaderContent(cellHeader, cellData) {\n const\n me = this,\n { date, day, tomorrow } = cellData,\n { dayNameFormat, dayNumberCompress, daySeparator } = me,\n shifted = me?.dayTime?.startShift;\n cellHeader.children = [{\n className : `b-day-name-part b-day-name-day${dayNumberCompress ? ' b-day-name-short' : ''}`,\n html : formatDayPart(dayNameFormat, daySeparator[0], date, shifted && tomorrow)\n }, {\n className : `b-day-name-part b-day-name-date`,\n html : formatDayPart(me.dayNumberFormat, daySeparator[1], date, shifted && tomorrow, dayNumberCompress)\n }];\n cellHeader.className[me.nonWorkingDayCls] = cellData.isNonWorking;\n cellHeader.className[me.weekendCls] = DH.weekends[day];\n }\n updateLocalization() {\n if (!this.isConfiguring) {\n this.refresh();\n }\n super.updateLocalization();\n }\n updateFullWeek() {\n if (!this.isConfiguring) {\n this.refresh();\n }\n }\n}\nCalendarRow.initClass();\nCalendarRow._$name = 'CalendarRow';", "import CalendarRow from './CalendarRow.js';\nimport FunctionHelper from '../../Core/helper/FunctionHelper.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\n/**\n * @module Calendar/widget/DaySelector\n */\n/**\n * This is used as the day selector header in an {@link Calendar.widget.EventList}\n * or {@link Calendar.widget.DayView}. It should not be used standalone as a regular Widget.\n *\n * @internal\n * @extends Calendar/widget/CalendarRow\n * @classtype dayselector\n */\nexport default class DaySelector extends CalendarRow {\n static $name = 'DaySelector';\n // Factoryable type name\n static type = 'dayselector';\n static configurable = {\n readOnly : true,\n autoCreate : false,\n flex : '0 0 auto',\n dock : 'top'\n };\n afterConfigure() {\n const\n me = this,\n { owner } = me;\n super.afterConfigure();\n owner.scrollable?.ion({\n overflowChange : 'onOwnerOverflowChange',\n thisObj : me\n });\n // We take over our owner's descriptionRenderer\n owner.descriptionRenderer = me.descriptionRenderer.bind(me);\n // We take over control over our owner's next and previous methods.\n // \"this\" within these functions will refer to the owner widget\n owner.previous = function() {\n this.date = DateHelper.add(owner.date, -owner.duration, 'd');\n };\n owner.next = function() {\n this.date = DateHelper.add(owner.date, owner.duration, 'd');\n };\n // We need to update ourselves in sync with our owner's date\n FunctionHelper.before(owner, 'updateDate', this.beforeOwnerDateUpdate, this);\n }\n beforeOwnerDateUpdate(date) {\n this.date = date;\n }\n onOwnerOverflowChange({ y }) {\n this.headerElement.classList.toggle('b-show-yscroll-padding', Boolean(y));\n }\n onDayNumberClick({ date }) {\n if (this.owner) {\n this.owner.date = date;\n }\n // No further navigation must take place. Note that this is not a scheduleClick - this\n // widget is merely a slave of its owning Calendar widget. This is an internal gesture\n // which sets the owning Calendar widget's date.\n return false;\n }\n descriptionRenderer() {\n const\n {\n startDate,\n endDate,\n owner\n } = this,\n startMonth = startDate.getMonth(),\n endMonth = endDate.getMonth(),\n monthDesc = startMonth === endMonth ? DateHelper.format(startDate, 'MMMM') : `${DateHelper.format(startDate, 'MMM')} - ${DateHelper.format(endDate, 'MMM')}`,\n week = owner.month.getWeekNumber(startDate);\n return `${this.L('L{Object.Week}')} ${week[1]}, ${monthDesc} ${week[0]}`;\n }\n}\nDaySelector.initClass();\nDaySelector._$name = 'DaySelector';", "import Base from '../../../Core/Base.js';\nimport DaySelector from '../DaySelector.js';\n/**\n * @module Calendar/widget/mixin/DaySelectable\n */\n/**\n * Mixin that provides the ability to add a {@link Calendar.widget.DaySelector} as a\n * {@link Core.widget.Panel#config-tbar}.\n *\n * This is used by the {@link Calendar.widget.EventList} and also {@link Calendar.widget.DayView} to\n * optionally be able to show a day selector row docked at the top.\n *\n * @mixin\n */\nexport default Target => class DaySelectable extends (Target || Base) {\n static get $name() {\n return 'CalendarMixin';\n }\n static get configurable() {\n return {\n /**\n * If {@link #config-daySelector} is set, then this will be an instance\n * of {@link Calendar.widget.DaySelector} which encapsulates the day selector at the top\n * of this view.\n * @member {Calendar.widget.DaySelector} daySelector\n * @readonly\n * @internal\n */\n /**\n * A Configure this as `true` to show a {@link Calendar.widget.DaySelector} docked at the top to\n * act as a day selector. By default, the DaySelector will be seven days in duration and locked\n * to start a the `weekStartDay`\n * @config {Boolean|DaySelectorConfig}\n * @internal\n */\n daySelector : null\n };\n }\n changeDaySelector(daySelector, oldDaySelector) {\n const me = this;\n if (daySelector) {\n // Whatever we are mixed into, it's because it is showing only one day.\n me.range = '1 day';\n // In case we are mixed into an EventList.\n me.settings = null;\n me.hideHeaders = true;\n const\n startDate = me.dayTime.shiftDate(me.month.getWeekStart(me.month.getWeekNumber(me.startDate))),\n result = DaySelector.reconfigure(oldDaySelector, daySelector, {\n owner : me,\n defaults : {\n type : 'dayselector',\n calendar : me.calendar,\n parent : me,\n cls : {\n [`b-${me.type}-dayselector`] : 1\n },\n dayStartShift : me.dayStartShift,\n dayTime : me.dayTime,\n month : me.month,\n date : me.date,\n startDate,\n range : { magnitude : 1, unit : 'week' },\n hideNonWorkingDays : me.hideNonWorkingDays,\n nonWorkingDays : me.nonWorkingDays,\n nonWorkingDayCls : me.nonWorkingDayCls,\n weekendCls : me.weekendCls,\n weekStartDay : me.weekStartDay\n }\n });\n me.element.classList.add(`b-${me.type}-with-dayselector`);\n me.tbar = result;\n return result;\n }\n else {\n oldDaySelector?.destroy();\n }\n }\n //region Current config\n getCurrentConfig(options) {\n const result = super.getCurrentConfig(options);\n // Internal matter\n delete result.daySelector;\n return result;\n }\n //endregion\n};\n", "import DateHelper from '../../Core/helper/DateHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport Toast from '../../Core/widget/Toast.js';\nimport Grid from '../../Grid/view/Grid.js';\nimport CalendarMixin from '../../Calendar/widget/mixin/CalendarMixin.js';\nimport '../../Grid/column/DateColumn.js';\nimport '../../Core/widget/DateTimeField.js';\nimport Store from '../../Core/data/Store.js';\nimport Button from '../../Core/widget/Button.js';\nimport Config from '../../Core/Config.js';\nimport DayCellCollecter from './mixin/DayCellCollecter.js';\nimport DaySelectable from './mixin/DaySelectable.js';\nimport DateRangeOwner from './mixin/DateRangeOwner.js';\nimport Collection from '../../Core/util/Collection.js';\n/**\n * @module Calendar/widget/EventList\n */\nconst\n byStartDate = (lhs, rhs) => lhs.startDate.valueOf() - rhs.startDate.valueOf(),\n mergeColumns = (configuredColumns, defaultColumns) => {\n if (defaultColumns) {\n // Support columns : { data : { name : { field : 'name', text : 'Name' }}}\n // or columns : { data : [{ field : 'name', text : 'Name' }] }\n configuredColumns = configuredColumns.data || configuredColumns;\n // Object form { name : { field : 'name', text : 'Name' }}\n if (ObjectHelper.isObject(configuredColumns)) {\n const result = defaultColumns.slice();\n for (const id in configuredColumns) {\n const\n newColumn = configuredColumns[id],\n // Match incoming column with existing by field name if there, or, if not, by name\n matchIndex = result.findIndex(c => c.id === id || c.field === id);\n // Configuration wants to add or override matched column\n if (newColumn) {\n const v = Config.merge(newColumn, result[matchIndex]);\n // So that it can be looked up in future merges\n v.id = id;\n result[matchIndex === -1 ? result.length : matchIndex] = v;\n }\n // Configuration wants to remove matched column\n else if (matchIndex > -1) {\n result.splice(matchIndex, 1);\n }\n }\n return result;\n }\n // Array form [{ field : 'name', text : 'Name' }]\n else {\n defaultColumns = new Collection({\n values : defaultColumns,\n idProperty : 'field'\n });\n // Iterate the configured column set\n for (let i = 0, { length } = configuredColumns; i < length; i++) {\n const\n newColumn = configuredColumns[i],\n matchedExistingColumn = defaultColumns.get(newColumn.field);\n // Configuration wants to override matched column\n if (matchedExistingColumn) {\n configuredColumns[i] = Config.merge(newColumn, matchedExistingColumn);\n defaultColumns.remove(matchedExistingColumn);\n }\n }\n // Now append the remaining default columns\n configuredColumns.push(...defaultColumns.values);\n return configuredColumns;\n }\n }\n else {\n return configuredColumns;\n }\n };\n/**\n * A Grid view of the EventStore.\n *\n * This shows a configured range of events from the event store.\n *\n * When used as a {@link Calendar.view.Calendar#config-modes mode} of a Calendar, the configured\n * {@link #config-range} is snapped to encapsulate the Calendar's current\n * {@link Calendar.view.Calendar#config-date}.\n *\n * If configured with an explicit {@link #config-startDate} and {@link #config-endDate}, the\n * {@link #config-range} is not used. When setting the {@link #property-date}, the duration\n * of the configured range is preserved, but the range is shifted backwards or forwards in time\n * just enough to bring the passed `Date` into view.\n *\n * The EventList's header context menu is extended to allow the user to change the range type. This\n * may be disabled by configuring the {@link #config-listRangeMenu} as `null`.\n *\n * For further information about features available to be configured directly into `EventList`\n * calendar views, see the {@link Grid.view.Grid} documentation and the associated examples.\n *\n * {@inlineexample Calendar/widget/ListView.js}\n *\n * @demo Calendar/listview\n *\n * @extends Grid/view/Grid\n * @mixes Core/widget/mixin/Responsive\n * @mixes Calendar/widget/mixin/CalendarMixin\n * @mixes Calendar/widget/mixin/DayCellCollecter\n * @mixes Calendar/widget/mixin/DateRangeOwner\n * @classtype eventlist\n */\nexport default class EventList extends Grid.mixin(CalendarMixin, DayCellCollecter, DaySelectable, DateRangeOwner) {\n static get $name() {\n return 'EventList';\n }\n static get type() {\n return 'eventlist';\n }\n static get configurable() {\n return {\n preserveScrollOnDatasetChange : true,\n cls : 'b-slide-vertical',\n eventFilter : null,\n localizableProperties : ['title', 'text'],\n title : 'L{List}',\n range : '1 month',\n // We have a Month utility object.\n // It helps us with week values and week change events\n month : true,\n /**\n * Column definitions to add to the default columns, or column definitions which override\n * the provided, default columns.\n *\n * By default, the `EventList` shows three columns:\n *\n * ```javascript:\n * columns : [{\n * text : 'Name',\n * field : 'name'\n * }, {\n * text : 'Start',\n * field : 'startDate'\n * }, {\n * text : 'End',\n * field : 'endDate'\n * }]\n * ```\n *\n * Your `columns` config is appended to the default columns *unless you provide\n * columns for the `name`, `startDate` and `endDate` fields*, in which case your\n * column definitions are merged into the default column definitions.\n *\n * In this way you can provide a `renderer` for the default columns, or otherwise\n * configure them in a customizable way.\n *\n * You can also supply columns keyed by field, to reconfigure / remove / add similar to how you would manage\n * items in containers and menus:\n *\n * ```javascript\n * columns : {\n * // Remove the name column\n * name : null,\n * // Change the format of the startDate column\n * startDate : {\n * format : 'YYYY'\n * },\n * // Add a description column\n * description : {\n * renderer : ({ record }) => record.description.substring(0, 10)\n * }\n * }\n * ```\n *\n * @config {Object|GridColumnConfig[]}\n */\n columns : {\n $config : {\n // Columns with matching field names are merged.\n // Non-matching columns are added\n merge : mergeColumns\n },\n value : [{\n text : 'L{EventEdit.Name}',\n field : 'name',\n flex : '1 0 12em'\n }, {\n text : 'L{EventList.Start}',\n //type : 'startDate', // When column is hoisted from Gantt to Scheduler\n type : 'date',\n editor : {\n type : 'datetime',\n dateField : {\n step : null\n },\n timeField : {\n step : null\n }\n },\n field : 'startDate',\n width : '16.5em',\n format : 'L LT',\n renderer({ record, value }) {\n return record.allDay ? DateHelper.format(value, 'L') : this.defaultRenderer(...arguments);\n }\n }, {\n text : 'L{EventList.Finish}',\n //type : 'endDate', // When column is hoisted from Gantt to Scheduler\n type : 'date',\n editor : {\n type : 'datetime',\n dateField : {\n step : null\n },\n timeField : {\n step : null\n }\n },\n field : 'endDate',\n width : '16.5em',\n format : 'L LT',\n renderer({ record, value }) {\n return record.allDay ? DateHelper.format(value, 'L') : this.defaultRenderer(...arguments);\n }\n }, {\n type : 'widget',\n text : 'Resources',\n field : 'resources',\n minWidth : 250,\n autoHeight : true,\n widgets : [{\n type : 'chipview',\n valueProperty : 'items',\n displayField : 'name',\n itemsFocusable : false,\n navigator : null,\n closable : false,\n style : {\n flexFlow : 'row nowrap',\n display : 'flex',\n padding : '5px 0 3px 0'\n },\n scrollable : {\n overflowX : 'hidden-scroll',\n overflowY : false\n },\n getItemCls : r => DomHelper.isNamedColor(r.eventColor) ? ` b-sch-${r.eventColor}` : '',\n getItemStyle : r => `color:#fff;${r.eventColor && !DomHelper.isNamedColor(r.eventColor) ? `background-color:${r.eventColor}` : ''}`\n }],\n editor : false\n }]\n },\n features : {\n group : false,\n rowCopyPaste : false,\n columnPicker : {\n createColumnsFromModel : true\n }\n },\n internalListeners : {\n beforeCellEditStart({ editorContext }) {\n const { editor, record } = editorContext;\n if (record.isRecurring || record.isOccurrence) {\n Toast.show({\n html : 'Please use EventEdit to edit recurring events'\n });\n return false;\n }\n // Hide event tooltip if present.\n this.calendar?.features.eventTooltip?._tooltip?.hide();\n editor.timeField?.[record.allDay ? 'hide' : 'show']();\n }\n },\n settings : {\n $config : 'lazy',\n value : null\n },\n /**\n * A {@link Core.widget.Menu#configs MenuConfig} block which configures the {@link #property-listRangeMenu} property which\n * is the range choosing menu provided which by default selects one of the following:\n * - day\n * - week\n * - month\n * - year\n * - decade\n *\n * This may be used to either reconfigure that menu, or, by configuring it as `null`, could remove\n * the menu entirely if the date range of this view is controlled by other means.\n *\n * The individual range menu items are under the `items` property and have the following\n * property names:\n * - `listRangeDayItem`\n * - `listRangeWeekItem`\n * - `listRangeMonthItem`\n * - `listRangeYearItem`\n * - `listRangeDecadeItem`\n *\n * These may be reconfigured:\n *\n * ```javascript\n * calendar = new Calendar({\n * ...\n * modes : {\n * agenda : {\n * listRangeMenu : {\n * items : {\n * // We don't want the decade range option\n * listRangeDecadeItem : null\n * }\n * }\n * }\n * }\n * });\n * ```\n *\n * @config {MenuConfig} listRangeMenu\n */\n listRangeMenu : {\n $config : 'lazy',\n value : {\n anchor : true,\n items : {\n listRangeDayItem : {\n range : 'day',\n text : 'L{EventEdit.day}',\n _unit : 'day'\n },\n listRangeWeekItem : {\n range : 'week',\n text : 'L{EventEdit.week}',\n _unit : 'week'\n },\n listRangeMonthItem : {\n range : 'month',\n text : 'L{EventEdit.month}',\n _unit : 'month'\n },\n listRangeYearItem : {\n range : 'year',\n text : 'L{EventEdit.year}',\n _unit : 'year'\n },\n listRangeDecadeItem : {\n range : 'decade',\n text : 'L{EventEdit.decade}',\n _unit : 'decade'\n }\n }\n }\n },\n /**\n * A {@link Core.helper.DateHelper} format string used to format the time displayed\n * next to event bars in the custom columns which {@link Calendar.widget.EventList}\n * based views use - {@link Calendar.widget.EventList} and {@link Calendar.widget.AgendaView}.\n * @config {String}\n * @default\n */\n eventListTimeFormat : 'HH:mm'\n };\n }\n /**\n * Returns the resource associated with this event list when used inside a {@link Calendar.widget.ResourceView}\n * @readonly\n * @member {Scheduler.model.ResourceModel} resource\n */\n static get delayable() {\n return {\n populateStoreSoon : {\n type : 'raf',\n cancelOutstanding : true\n }\n };\n }\n construct(...args) {\n const\n me = this,\n featuresProp = ObjectHelper.getPropertyDescriptor(this, 'features');\n // Enable print feature on EventList view if it was configured directly or on the calendar\n Object.defineProperty(me, 'features', {\n get : () => {\n return featuresProp.get.call(this) || {};\n },\n set : features => {\n if (features === true) {\n features = {};\n }\n if (!features.print) {\n features.print = Boolean(this.calendar?.features.print);\n }\n featuresProp.set.call(this, features);\n },\n configurable : true\n });\n super.construct(...args);\n }\n // We must implement the CalendarMixin interface.\n // All views must expose a doRefresh method.\n doRefresh() {\n this.refreshRows();\n }\n getEventElement(eventRecord, date = Math.max(eventRecord.startDate, this.firstVisibleDate || this.startDate)) {\n // Try as a base grid EventList first, then fall back to separate event *bars* being rendered.\n return this.eventContentElement.querySelector(`.b-grid-row[data-event-id=\"${eventRecord.id}\"][data-date=\"${DateHelper.makeKey(date)}\"]`) ||\n super.getEventElement(...arguments);\n }\n // Returns true is this EventList encapsulates this date\n containsDate(date) {\n const dateContainmentFn = this.range ? 'betweenLesser' : 'betweenLesserEqual';\n return DateHelper[dateContainmentFn](date, this.startDate, this.endDate);\n }\n /**\n * This method produces the event time details next to the event bar in\n * {@link Calendar.widget.EventList} and {@link Calendar.widget.AgendaView}\n * as a {@link DomConfig} object.\n *\n * The content is encapsulated in an element with CSS class `b-cal-eventlist-event-time`.\n * For multi day events, the ending date is shown. For intra-day events, the start and end\n * times are shown.\n * @param {Scheduler.model.EventModel} eventRecord\n * @returns {DomConfig}\n */\n eventListEventTimeRenderer(eventRecord) {\n const\n me = this,\n daySpan = DateHelper.diff(DateHelper.clearTime(eventRecord.startDate), DateHelper.clearTime(eventRecord.endDate), 'day'),\n timeString = me.eventTimeRenderer ? me.callback(me.eventTimeRenderer, me, arguments)\n : daySpan > 1\n ? me.L('L{Calendar.endsOn}', DateHelper.format(eventRecord.endDate, 'DD MMM'))\n : eventRecord.allDay\n ? me.L('L{Calendar.allDay}')\n : `${DateHelper.format(eventRecord.startDate, me.eventListTimeFormat)} - ${DateHelper.format(eventRecord.endDate, me.eventListTimeFormat)}`;\n return {\n className : {\n 'b-cal-eventlist-event-time' : 1\n },\n text : timeString\n };\n }\n /**\n * This method produces the date details block in {@link Calendar.widget.AgendaView} cells\n * as a {@link DomConfig} object.\n *\n * The content is encapsulated in an element with CSS class `b-cal-agenda-date`.\n * @param {Date} date\n * @returns {DomConfig}\n */\n agendaEventDateRenderer(date) {\n return {\n className : {\n 'b-day-name' : 1,\n 'b-cal-agenda-date' : 1,\n 'b-today' : !Boolean(DateHelper.clearTime(new Date()) - DateHelper.clearTime(date))\n },\n children : [{\n className : {\n 'b-cal-agenda-date-date-number' : 1\n },\n text : date.getDate()\n }, {\n className : {\n 'b-cal-agenda-date-date-text' : 1\n },\n children : [{\n text : DateHelper.format(date, 'dddd')\n }, {\n text : DateHelper.format(date, 'MMM YYYY')\n }]\n }]\n };\n }\n // Override because our Featurable mixin which comes before GridBase sets features to null\n // to destroy them, so we must ensure the inherited Grid features are cleaned up.\n destroy() {\n for (const feature of Object.values(this.features)) {\n feature.destroy?.();\n }\n super.destroy();\n }\n populateHeaderMenu({ items }) {\n const { listRangeMenu : menu } = this;\n if (menu) {\n items.listRangeItem = {\n weight : -1000,\n icon : 'b-icon-calendar-week',\n text : 'List Range',\n menu\n };\n }\n super.populateHeaderMenu(...arguments);\n }\n refreshVirtualScrollbars() {\n super.refreshVirtualScrollbars();\n // Our floating settings button needs to be inset a little more if there is a visible scrollbar\n this.bodyElement.classList[DomHelper.scrollBarWidth && this.hasVerticalOverflow ? 'add' : 'remove']('b-has-scrollbar');\n }\n /**\n * This property yields a {@link Core.widget.Menu} config object which encapsulates the range choices\n * which this widget may be set to encapsulate:\n * - day\n * - week\n * - month\n * - year\n * - decade\n *\n * By default a `list` view adds these choices to the header context menu.\n * An `agenda` view creates a floating settings button which offers this menu.\n * The property may be used to create a custom UI for changing the range.\n * The value yielded by the default `get listRangeMenu()` implementation looks like this:\n *\n *```javascript\n * {\n * items : {\n * listRangeDayItem : {config for DAY range menu item },\n * listRangWeekItem : {config for WEEK range menu item },\n * listRangMonthItem : {config for MONTH range menu item },\n * listRangeYearItem : {config for YEAR range menu item },\n * listRangeDecadeItem : {config for DECADE range menu item }\n * }\n * }\n *```\n *\n * A subclass can override `get listRangeMenu()` and mutate the object returned by the `super` call.\n *\n * For example, it could `delete` properties of the `items` block to limit which ranges may be selected.\n *\n * @member {MenuConfig} listRangeMenu\n * @readonly\n */\n changeListRangeMenu(listRangeMenu) {\n if (listRangeMenu) {\n const\n me = this,\n toggleGroup = `${me.id}-range-items`;\n listRangeMenu = ObjectHelper.merge({\n onToggle : e => {\n if (e.checked) {\n me.range = e.item.range;\n e.bubbles = false;\n }\n // We may lose or gain a scrollbar which will move the button\n if (DomHelper.scrollBarWidth) {\n e.menu.realign();\n }\n },\n items : {\n listRangeDayItem : {\n toggleGroup\n },\n listRangeWeekItem : {\n toggleGroup\n },\n listRangeMonthItem : {\n toggleGroup\n },\n listRangeYearItem : {\n toggleGroup\n },\n listRangeDecadeItem : {\n toggleGroup\n }\n }\n }, listRangeMenu);\n return listRangeMenu;\n }\n }\n get listRangeMenu() {\n const\n me = this,\n listRangeMenu = me._listRangeMenu;\n if (listRangeMenu) {\n for (const i of Object.values(listRangeMenu.items)) {\n if (i) {\n i.checked = i._unit === me.range?.unit;\n }\n }\n }\n return listRangeMenu;\n }\n updateRowManager(rowManager) {\n super.updateRowManager?.(...arguments);\n // Make sure rows which represent EventModels have [data-event-id=\"?\"] stamped into them.\n rowManager.ion({\n beforeRenderRow : 'onBeforeRenderRow',\n thisObj : this\n });\n }\n onBeforeRenderRow({ row, record }) {\n const\n { _elementsArray } = row,\n { id, startDate } = record;\n if (record.isSpecialRow) {\n // If it's a group header, cleanse it of any connection to an eventRecord\n row.eachElement(e => delete e.dataset.eventId);\n }\n // Only if it represents an EventModel.\n // In AgendaView, there are event bars with the event id, and the cells encapsulate dates.\n else if (record.isEventModel) {\n for (let i = 0, { length } = _elementsArray; i < length; i++) {\n _elementsArray[i].dataset.eventId = id;\n _elementsArray[i].dataset.date = DateHelper.makeKey(startDate);\n }\n row.cls[`b-day-of-week-${startDate.getDay()}`] = 1;\n }\n }\n // Scheduler interface usually routes this to handleEvent.\n // If we're a Grid, GridElementEvents routes events to handleEvent, so override it to do nothing.\n // Otherwise keydown events would be handled twice\n onInternalKeyDown(domEvent) {}\n handleEvent(domEvent) {\n // Don't cause scroll when clicking in event list\n this.preventScroll = true;\n super.handleEvent(domEvent);\n this.preventScroll = false;\n }\n get displayName() {\n let s = this.title;\n if (typeof s !== 'string') {\n s = this.type;\n }\n return StringHelper.capitalize(s);\n }\n /**\n * Scrolls vertically to bring an event or a time into view.\n * @param {Scheduler.model.EventModel|Date} target The event to scroll to or a `Date` to scroll to.\n * @param {Object} [options] How to scroll.\n * @param {String} [options.block] How far to scroll the target: `start/end/center/nearest`.\n * @param {Number} [options.edgeOffset] edgeOffset A margin around the target to bring into view.\n * @param {Object|Boolean|Number} [options.animate] Set to `true` to animate the scroll by 300ms,\n * or the number of milliseconds to animate over, or an animation config object.\n * @param {Number} [options.animate.duration] The number of milliseconds to animate over.\n * @param {String} [options.animate.easing] The name of an easing function.\n * @param {Boolean|Function} [options.highlight] Set to `true` to highlight the resulting element\n * when it is in view. May be a function which is called passing the resulting element\n * to provide customized highlighting.\n * @param {Boolean} [options.focus] Set to `true` to focus the element when it is in view.\n * @param {Boolean} [options.y] Pass as `false` to disable scrolling in the `Y` axis.\n * @returns {Promise} A promise which is resolved when the target has been scrolled into view.\n */\n async scrollTo(target, options = { animate : true }) {\n const me = this;\n if (target instanceof me.store.modelClass) {\n // Scroll the passed record into view\n await me.scrollRowIntoView(target, Object.assign({}, options, { highlight : false }));\n if (options.highlight) {\n target = me.getEventElement(target, target.startDate);\n if (typeof options.highlight === 'boolean') {\n DomHelper.highlight(target, me);\n }\n else {\n (me.widget || me).callback(options.highlight, null, [target]);\n }\n }\n }\n else if (ObjectHelper.isDate(target) && me.store.count) {\n const\n index = me.dateIndex,\n key = DateHelper.makeKey(target);\n // We have a row for this date...\n if (index[key]) {\n await me.scrollRowIntoView(index[key], options);\n me.scrolledToDate = target;\n }\n // Otherwise, find the closest in time\n else {\n let closest = Number.MAX_SAFE_INTEGER;\n const keys = Object.keys(index);\n for (let i = 0, { length } = keys; i < length; i++) {\n const d = DateHelper.parseKey(keys[i]);\n if (Math.abs(d - target) < Math.abs(closest - target)) {\n closest = d;\n }\n }\n // Recurse with a known-to-exist date\n await me.scrollTo(closest);\n }\n }\n }\n updateStartDate() {\n const { refreshCount } = this;\n // Prevent this.onMonthChange from trying to scroll when we update our month's active date\n this.preventScroll = true;\n super.updateStartDate(...arguments);\n this.preventScroll = false;\n // Superclass's updateStartDate will most likely cause a refresh due to changing the date.\n // But if we're moving to a larger encapsulating range (eg 1w to 1y), the date may\n // not be forced to change, so kick off a refresh if it has not been done.\n if (!this.isConfiguring && this.refreshCount === refreshCount) {\n this.populateStoreSoon();\n }\n }\n updateEndDate() {\n const { refreshCount } = this;\n super.updateEndDate?.(...arguments);\n // Superclass's updateEndDate will most likely cause a refresh due to changing the date.\n // But if we're moving to a larger encapsulating range (eg 1w to 1y), the date may\n // not be forced to change, so kick off a refresh if it has not been done.\n if (!this.isConfiguring && this.refreshCount === refreshCount) {\n this.populateStoreSoon();\n }\n }\n updateRange() {\n const { refreshCount } = this;\n super.updateRange?.(...arguments);\n // Superclass's updateRange will most likely cause a refresh due to changing the date.\n // But if we're moving to a larger encapsulating range (eg 1w to 1y), the date may\n // not be forced to change, so kick off a refresh if it has not been done.\n if (!this.isConfiguring && this.refreshCount === refreshCount) {\n this.populateStoreSoon();\n }\n }\n // Interface method used by the Describable Scheduler mixin which renders the date(s) of a view\n // If the result is an array, it creates a range description based on the descriptionFormat.\n get dateBounds() {\n return [this.startDate, this.endDate];\n }\n // We default the range description format to using the shortDateFormat each side (from and to)\n // but this can be configured.\n get descriptionFormat() {\n return super.descriptionFormat || [this.shortDateFormat, `S{${this.shortDateFormat}} - E{${this.shortDateFormat}}`];\n }\n set descriptionFormat(descriptionFormat) {\n super.descriptionFormat = descriptionFormat;\n }\n descriptionRenderer() {\n const\n me = this,\n {\n date,\n startDate,\n endDate,\n range,\n count\n } = me;\n let rangeDesc;\n if (range?.magnitude === 1) {\n switch (range.unit) {\n case 'day':\n rangeDesc = DateHelper.format(date, 'L');\n break;\n case 'week':\n {\n const\n startMonth = startDate.getMonth(),\n endMonth = endDate.getMonth(),\n monthDesc = startMonth === endMonth ? DateHelper.format(startDate, 'MMMM') : `${DateHelper.format(startDate, 'MMM')} - ${DateHelper.format(endDate, 'MMM')}`,\n week = me.month.getWeekNumber(startDate);\n rangeDesc = `${me.L('L{Object.Week}')} ${week[1]}, ${monthDesc} ${week[0]}`;\n break;\n }\n case 'month':\n rangeDesc = DateHelper.format(date, 'MMMM, YYYY');\n break;\n case 'year':\n rangeDesc = DateHelper.format(date, 'YYYY');\n break;\n case 'decade':\n rangeDesc = `${DateHelper.format(startDate, 'YYYY')}s`;\n }\n }\n else {\n rangeDesc = me.formattedDescription;\n }\n return `${rangeDesc}. ${me.L('eventCount', count)}`;\n }\n /**\n * The number of events that this View currently encapsulates in its {@link #config-range date range}.\n * @member {Number}\n * @readonly\n */\n get count() {\n return this.store.count - (this.store.groupRecords?.count || 0);\n }\n get stepUnit() {\n const { range } = this;\n // If just one unit, return the unit name\n return range ? range.magnitude === 1 ? range.unit : this.range : this.L('L{days}', this.duration);\n }\n get store() {\n return super.store;\n }\n set store(store) {\n if (store && !store.modelClass && this.project) {\n store.modelClass = this.project.eventStore.modelClass;\n }\n super.store = store;\n }\n /**\n * When an EventStore arrives, chain off a slave store from that which we can then\n * filter to only show the week we are focused upon.\n */\n updateEventStore(eventStore) {\n super.updateEventStore?.(eventStore);\n // We monitor changes to the EventStore and repopulate our store if it needs it.\n eventStore.ion({\n refresh : 'onCalendarStoreChange',\n thisObj : this\n });\n this.populateStoreSoon();\n }\n changeStore(store) {\n const me = this;\n if (store) {\n store = Store.mergeConfigs({\n useRawData : {\n ignoreDefaults : true,\n disableDefaultValue : true,\n disableTypeConversion : true,\n enabled : true\n },\n modelClass : me.modelClass\n }, store);\n }\n store = super.changeStore(store);\n // Ensure our subclass, AgendaView is able to use its own filter\n if (store?.modelClass.isEventModel) {\n me.nonWorkingDaysFilter = store.addFilter({\n id : `${me.id}-nonworkingday-filter`,\n filterBy : event => !me.dayTime.isIntraDay(event) || !me.hiddenNonWorkingDays[event.startDate.getDay()],\n disabled : !me.hideNonWorkingDays\n }, true);\n }\n return store;\n }\n updateHideNonWorkingDays(hideNonWorkingDays) {\n const\n me = this,\n { store } = me;\n super.updateHideNonWorkingDays(hideNonWorkingDays);\n // We do it by filtering the generated day records by the isNonWorking flag\n if (store) {\n me.nonWorkingDaysFilter.disabled = !hideNonWorkingDays;\n store.filter();\n }\n me.trigger('refresh');\n }\n afterRemove({ records }) {\n // If they remove records from the Grid Store, assume they want to remove the underlying\n // events from the eventStore.\n this.eventStore.remove(records);\n super.afterRemove(...arguments);\n }\n get modelClass() {\n return this.eventStore.modelClass;\n }\n /**\n * This is called when our store needs to be repopulated from the eventStore\n * @private\n */\n populateStoreSoon() {\n const\n me = this,\n { project } = me;\n // Only refresh immediately if we are visible.\n if (me.isVisible) {\n // Only populate if initial commit is performed and change is not triggered by project writing back data\n if ((project.isInitialCommitPerformed && !project.isWritingData) || !project.eventStore.count) {\n me.populateStore();\n }\n }\n // Otherwise wait till next time we get painted (shown, or a hidden ancestor shown)\n else {\n me.whenVisible('populateStore');\n }\n }\n get duration() {\n // If we are in startDate->endDate mode, as opposed to using a fixed \"range\"\n // around a date, then to provide a more intuitive interface, we *include* the endDate\n // for EventLists\n return super.duration + (this.range ? 0 : 1);\n }\n populateStore() {\n const\n me = this,\n { cellEdit } = me.features,\n ec = cellEdit?.editorContext,\n events = me.eventStore.getEvents({\n startDate : me.startDate,\n // If we are being set a startDate and endDate, as opposed to using a fixed \"range\"\n // around a date, then to provide a more intuitive interface, we *include* the endDate\n // for EventLists\n endDate : DateHelper.add(me.endDate, me.range ? 0 : 1, 'd'),\n filter : me.eventFilter\n }).sort(byStartDate);\n // Create our date index by which we can scroll to dates.\n me.dateIndex = events.reduce((result, event) => {\n const key = DateHelper.makeKey(event.startDate);\n if (!result[key]) {\n result[key] = event;\n }\n return result;\n }, {});\n // The complete data replacement disturbs CellEdit\n // If editing is in progress, cache the context and cancel it\n // to resume after the refresh.\n if (ec) {\n cellEdit.cancelEditing();\n }\n me.store.data = events;\n me.trigger('refresh');\n if (ec) {\n cellEdit.startEditing(ec);\n }\n // The owning Calendar's UI may need to sync with the new state\n me.calendar?.syncUIWithActiveView(this);\n }\n /**\n * Creates the Month utility object. We use it to track what week we are looking at.\n */\n changeMonth() {\n const result = super.changeMonth(...arguments);\n // Update when the month changes.\n result.ion({\n dateChange : 'onMonthChange',\n thisObj : this\n });\n return result;\n }\n /**\n * When the date we have been told to look at changes, recalculate the date range.\n * If the date range changes, this will cause a refill of our grid store from the\n * master event store.\n */\n onMonthChange({ newDate }) {\n const\n me = this,\n { startDate } = me,\n newStartDate = me.changeStartDate(newDate);\n // Move range so that it encapsulates the target date if necessary\n if (!startDate || (newStartDate - startDate && !me.containsDate(newStartDate))) {\n me.updateRange(me.range);\n }\n // Only attempt if the store got populated and we are visible.\n if (!me.preventScroll && me.isVisible && me.store.count) {\n // Ensure any store rebuild triggered by reconfiguring is flushed before\n // we attempt to scroll to that date\n me.populateStoreSoon.flush();\n me.scrollTo(newDate);\n }\n }\n /**\n * This is added as a listener by the CalendarStores mixin.\n *\n * Our store is chained off of the EventStore; refill it if the EventStore changes.\n * The store will fire events which cause UI update.\n * We must fire a refresh event so that the encapsulating Calendar view knows about this.\n */\n onCalendarStoreChange({ source : eventStore }) {\n if (!this.date) {\n this.date = eventStore.map(r => r.startDate).sort((lhs, rhs) => lhs.valueOf() - rhs.valueOf())[0];\n }\n // Only refresh immediately if we are visible.\n this.populateStoreSoon();\n }\n changeSettings(settings, oldSettings) {\n return settings && Button.reconfigure(oldSettings, Button.mergeConfigs({\n type : 'button',\n positioned : true,\n icon : 'b-icon-cog',\n menuIcon : null,\n cls : 'b-blue b-cal-widget-settings-button',\n appendTo : this.bodyElement\n }, settings), this);\n }\n //region Current config\n getCurrentConfig(options) {\n const result = super.getCurrentConfig(options);\n // Internally assigned\n delete result.store;\n delete result.data;\n return result;\n }\n //endregion\n}\nEventList.initClass();\nEventList._$name = 'EventList';", "import EventList from '../../Calendar/widget/EventList.js';\nimport DH from '../../Core/helper/DateHelper.js';\nimport ArrayHelper from '../../Core/helper/ArrayHelper.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport Responsive from '../../Core/widget/mixin/Responsive.js';\nimport GridRowModel from '../../Grid/data/GridRowModel.js';\nimport EventSorter from '../util/EventSorter.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport GridFeatureManager from '../../Grid/feature/GridFeatureManager.js';\nimport '../column/AgendaColumn.js';\n/**\n * @module Calendar/widget/AgendaView\n */\nconst\n isMouseOverOut = {\n mouseover : 1,\n mouseout : 1\n },\n isMouseInteraction = {\n mousedown : 1,\n mouseup : 1,\n click : 1,\n dblclick : 1,\n contextmenu : 1\n };\n/**\n * This is normally used as a {@link Calendar.view.Calendar#config-modes mode} of a Calendar (as seen in the live\n * demo below) but may be used standalone as a regular Widget.\n *\n * {@inlineexample Calendar/widget/CalendarAgendaView.js}\n *\n * As a standalone widget, it will lack the capabilities of the {@link Calendar.view.Calendar Calendar}\n * class, such as keyboard-based event to event navigation and drag/drop features. As seen in this demo:\n *\n * {@inlineexample Calendar/widget/AgendaView.js}\n *\n * A Grid which displays an agenda view of the events in an EventStore.\n *\n * When used as a {@link Calendar.view.Calendar#config-modes mode} of a Calendar, the configured\n * {@link #config-range} is snapped to encapsulate the Calendar's current\n * {@link Calendar.view.Calendar#config-date}.\n *\n * If configured with an explicit {@link #config-startDate} and {@link #config-endDate}, the\n * {@link #config-range} is not used. When setting the {@link #property-date}, the duration\n * of the configured range is preserved, but the range is shifted backwards or forwards in time\n * just enough to bring the passed `Date` into view.\n *\n * The AgendaView offers a floating settings button to allow the user to change the range type. This\n * may be disabled by configuring the {@link #config-listRangeMenu} as `null`.\n *\n * ### Column renderer\n * The content of each agenda cell is created by the {@link Calendar.column.AgendaColumn}'s\n * {@link Calendar.column.AgendaColumn#function-defaultRenderer}\n *\n * To inject content or manipulate the cell's DOM, you may configure the column with a renderer:\n *\n * ```javascript\n * modes : {\n * agenda : {\n * columns : {\n * agenda : {\n * renderer({ cellElement, record : cellData }) {\n * // Manipulate the cell as we need\n * cellElement.classList.toggle('is-sunday', cellData.day === 0);\n *\n * // We need the system-provided cell rendering\n * return this.defaultRenderer(...arguments);\n * }\n * }\n * }\n * }\n * }\n * ```\n *\n * @extends Calendar/widget/EventList\n * @classtype agendaview\n * @classtypealias agenda\n * @typingswidget\n */\nexport default class AgendaView extends EventList.mixin(Responsive) {\n static $name = 'AgendaView';\n static type = 'agendaview';\n static configurable = {\n eventSorter : EventSorter.interDaySorterFn,\n /**\n * The spacing between event bars in the default rendering of a day cell.\n * @config {Number|String}\n * @default\n */\n eventRowSpacing : 8,\n title : 'L{Agenda}',\n range : 'year',\n /**\n * By default, long running events are repeated in all rows that the event covers.\n *\n * Configure this as `true` to only see the start of a long running event in its\n * start day.\n * @config {Boolean}\n */\n hideEventOverflow : null,\n /**\n * This view lines up the textual content of event bars by shifting event bars of\n * events which start before the bar's cell leftwards by the arrow width.\n *\n * Set this config to `false` to prevent this.\n * @prp {Boolean}\n * @default\n */\n offsetStartsBeforeEvents : true,\n // We handle this internally using the notifications from the GridElementEvents mixin\n handlePointerInteraction : false,\n /**\n * Specify `false` to display column headers\n * @config {Boolean}\n * @default\n * @category Misc\n */\n hideHeaders : true,\n /**\n * Column definitions.\n *\n * By default, a single {@link Calendar.column.AgendaColumn} is configured which creates\n * the default cell content for one day's events.\n *\n * You may configure the default agenda column away, and provide a custom column type\n * to produce the day's content where the `record` passed is a\n * {@link Calendar.widget.mixin.DayCellCollecter#typedef-DayCell}.\n *\n * Because cells may contain varying numbers of events, all columns in an AgendaView are\n * set to {@link Grid.column.Column#config-autoHeight}\n *\n * ```javascript\n * class MyAgendaColumn extends Column {\n * // So we automatically get b-myagenda-cell class on the cells\n * static get type() {\n * return 'myagenda';\n * }\n *\n * renderer({ cellElement, record : cellData }) {\n * // Create a DomHelper element configuration object here using cellData\n * // cellData contains date contextual info and an events array.\n * }\n * }\n *\n * ...\n *\n * {\n * columns : {\n * agenda : null,\n * {\n * type : 'mycolumntype'\n * }\n * }\n * }\n *\n * // Register this Column type so that in the app we can use type : 'myagendacolumn'\n * ColumnStore.registerColumnType(MyAgendaColumn);\n *```\n * @config {Object|Object[]}\n * @default { agenda : { type : 'agendacolumn' } }\n */\n columns : {\n // We knock out the columns we inherit from EventList.\n name : null,\n startDate : null,\n endDate : null,\n resources : null,\n agenda : {\n type : 'agendacolumn'\n }\n },\n /**\n * A function, or name of a function in the ownership hierarchy which is used to create\n * the time output next to event bars in an agenda cell.\n *\n * @config {Function|String}\n * @param {Scheduler.model.EventModel} eventRecord The event record for which to create a time string.\n * @param {Date} date The date of the cell in which the event is being rendered.\n * @returns {String}\n */\n eventTimeRenderer : null,\n enableSticky : true,\n preserveScrollOnDatasetChange : true,\n positionMode : 'position',\n settings : {},\n cellTabIndex : null,\n rowCls : {\n 'b-cal-agenda-grid-row' : 1\n },\n cellCls : {\n 'b-calendar-cell' : 1\n },\n eventBarContainerCls : 'b-cal-event-bar-container',\n // No GridNavigation key events in an AgendaView. It is natural, event-to-event navigation.\n keyMap : null,\n // Our rows encapsulate dates and *contain* events, so they are raw GridRowModels\n store : {\n modelClass : GridRowModel\n },\n listRangeMenu : {\n align : {\n align : 't100-b100'\n }\n }\n };\n /**\n * Returns the resource associated with this agenda view when used inside a {@link Calendar.widget.ResourceView}\n * @readonly\n * @member {Scheduler.model.ResourceModel} resource\n */\n construct(config) {\n const\n me = this,\n featuresProp = ObjectHelper.getPropertyDescriptor(this, 'features');\n // Disable GridFeatures in AgendaView.\n // This is necessary in the built version where the features are all included\n // because of the needs of the docs app to use Grid for its own UI and because\n // many documentation examples run Grid examples.\n // This should change when https://github.com/bryntum/bryntum-suite/issues/1475 is addressed\n Object.defineProperty(me, 'features', {\n get : () => {\n return featuresProp.get.call(this);\n },\n set : features => {\n const f = GridFeatureManager.getInstanceDefaultFeatures(this);\n // Kill all the defaults\n for (const ft in f) {\n f[ft] = false;\n }\n // We want to pass print config to the agenda view or simply enable print\n // feature if it is enabled on the calendar\n f.print = features?.print || Boolean(this.calendar?.features.print);\n featuresProp.set.call(this, f);\n },\n configurable : true\n });\n super.construct(config);\n // CalendarNavigation focuses event bars\n me.bodyContainer.removeAttribute('tabIndex');\n }\n onResponsiveStateChange({ state, oldState }) {\n super.onResponsiveStateChange?.(...arguments);\n // Moving between small and non-small state requires a refresh because the cell\n // layout changes and the rows need remeasuring and repositioning.\n if (oldState && (oldState === 'small' || state === 'small')) {\n this.refresh();\n }\n }\n changeColumns() {\n const result = super.changeColumns(...arguments);\n // Custom columns and AgendaColumns with custom renderer will be autoHeight\n result?.forEach?.(c => {\n c.autoHeight = Boolean(!c.isAgendaColumn || (c.renderer || this.eventRenderer));\n });\n return result;\n }\n // Override these because CalendarNavigation focuses and navigates *events*, not grid cells.\n onFocusGesture() {}\n onGridElementFocus() {}\n onGridBodyFocusIn() {}\n focusCell() {}\n setHoveredRow() {}\n onElementKeyDown() {}\n onElementMouseDown() {}\n editAutoCreatedEvent(event, eventRecord) {\n // Uniquely, AgendaView has to regenerate its Grid store on event add so that\n // there is an event element to edit by.\n this.populateStoreSoon.now();\n super.editAutoCreatedEvent(event, eventRecord);\n }\n handleEvent(event) {\n const { type } = event;\n super.handleEvent(event);\n // Implement eventMouseover/eventMouseout.\n // All else is handled at the EventList level.\n if (isMouseOverOut[event.type]) {\n this.onEventMouseOverOut(event);\n }\n else if (isMouseInteraction[type]) {\n this.onCalendarPointerInteraction(event);\n }\n }\n getCellDataFromEvent(domEvent) {\n if (domEvent.target.closest('.b-grid-cell')) {\n const result = super.getCellDataFromEvent(domEvent);\n result && (result.record = this.getEventRecord(domEvent.target));\n return result;\n }\n }\n updateOffsetStartsBeforeEvents(offsetStartsBeforeEvents) {\n // Must case to Boolean because undefined defaults to true\n this.element.classList.toggle('b-offset-continues-past', Boolean(offsetStartsBeforeEvents));\n }\n updateEventRowSpacing(eventRowSpacing) {\n this.contentElement.style.setProperty('--event-row-spacing', DomHelper.setLength(eventRowSpacing));\n }\n updateSuppressLongEvents() {\n this.fillFromMaster();\n }\n onCalendarStoreChange({ action, oldCount, records, removed, added }) {\n const me = this;\n if (me.isPainted) {\n // A filter which resulted in no filtering. Ignore it.\n if (action === 'filter' && !removed?.length && !added?.length) {\n return;\n }\n // Draw on project refresh instead of on dataset\n if (action === 'dataset') {\n return;\n }\n // Single record remove just updates the generated records that the event covers\n if (action === 'remove' && records.length === 1 && records[0].isEventModel) {\n const\n { store } = me,\n eventRecord = records[0],\n date = DH.clearTime(eventRecord.startDate),\n endDate = DH.clearTime(eventRecord.endDate);\n do {\n const\n key = DH.makeKey(date),\n cellData = me.cellMap.get(key);\n if (cellData) {\n ArrayHelper.remove(cellData.events, eventRecord);\n // Update the row for this date\n if (cellData.events.length) {\n me.onStoreUpdateRecord({\n source : store,\n record : me.store.getById(key),\n changes : {}\n });\n }\n // No events on this date\n else {\n me.cellMap.delete(key);\n delete me.dateIndex[key];\n store.remove(key, true);\n }\n }\n date.setDate(date.getDate() + 1);\n } while (date < endDate);\n return;\n }\n }\n me.populateStoreSoon();\n }\n get cellMap() {\n const me = this;\n // If the cellMap has not been populated, create it.\n return me._cellMap?.populated ? me._cellMap : me.createCellMap({\n // If we are being set a startDate and endDate, as opposed to using a fixed \"range\"\n // around a date, then to provide a more intuitive interface, we *include* the endDate\n // for EventLists\n endDate : DH.add(me.endDate, me.range ? 0 : 1, 'd'),\n rawEvents : true,\n skipPropagate : true\n });\n }\n populateStore() {\n this._cellMap?.clear();\n const\n me = this,\n {\n store,\n eventStore,\n rowManager\n } = me,\n { rowHeight } = rowManager,\n rowCount = rowManager.rows?.length,\n eventHeight = isNaN(me.eventHeight) ? 25 : me.eventHeight;\n me.eventCount = 0;\n if (!me.date) {\n // Avoid recursion into populateStore\n me.isConfiguring = true;\n me.date = eventStore.map(r => r.startDate).sort((lhs, rhs) => lhs.valueOf() - rhs.valueOf())[0];\n me.isConfiguring = false;\n }\n const\n { cellMap } = me,\n cellMapEntries = [...cellMap.values()];\n me.dateIndex = {};\n for (let i = 0, { length } = cellMapEntries; i < length; i++) {\n const\n cellData = cellMapEntries[i],\n { events, date } = cellData;\n // Count unique events\n for (let j = 0, { length } = events; j < length; j++) {\n const event = events[j];\n if (!me.isAllDayEvent(event) || !i || DH.clearTime(event.startDate).valueOf() === date.valueOf()) {\n me.eventCount++;\n }\n }\n // build date index\n me.dateIndex[cellData.id] = cellMapEntries[i] = store.createRecord(cellData);\n }\n const avgEventsPerCell = me.eventCount ? cellMapEntries.map(e => e.events.length).reduce((a, b) => a + b, 0) / cellMapEntries.length : 0;\n store.suspendEvents();\n store.loadData(cellMapEntries);\n store.resumeEvents();\n // Give RowManager a clue so that it can calculate an appropriate rowCount.\n // If the rows are tall, we do not need many to cover the viewport.\n rowManager._rowHeight = 20;\n // RowManager#set rowHeight does not tolerate no rows.\n if (store.count) {\n rowManager.rowHeight = Math.max(avgEventsPerCell * (eventHeight + me.eventSpacing), 70);\n }\n // Setting the rowHeight does a refresh if there are existing rows and the height actually changed.\n // Otherwise, we explicitly refresh now.\n if (!rowCount || !store.count || rowManager.rowHeight === rowHeight) {\n rowManager.calculateRowCount();\n rowManager.estimateTotalHeight(true);\n }\n me.refreshCount = (me.refreshCount || 0) + 1;\n /**\n * Fires when this AgendaView refreshes.\n * @param {Calendar.widget.AgendaView} source The triggering instance.\n * @event refresh\n */\n me.trigger('refresh');\n // The owning Calendar's UI may need to sync with the new state\n me.calendar?.syncUIWithActiveView(me);\n me.columns.forEach(c => c.constructor.exposeProperties?.());\n // Evaluate this late so that it doesn't change the order of date config evaluation\n // Ensure that the menu stays aligned if scrollbar causes button movement.\n me.settings?._menu?.realign();\n }\n get count() {\n return this.eventCount;\n }\n collectEvents(options) {\n // Only the first cell, or !hideEventOverflow needs overflows flowing into it.\n options.getDateIndex = date => date > this.startDate && this.hideEventOverflow ? 'startDate' : 'date';\n return super.collectEvents(options);\n }\n changeStore(store) {\n store = super.changeStore(store);\n if (store) {\n this.nonWorkingDaysFilter = store.addFilter({\n id : `${this.id}-nonworkingday-filter`,\n filterBy : rec => !rec.isNonWorking,\n disabled : !this.hideNonWorkingDays\n }, true);\n this.detachListeners('agendaStoreFilter');\n store.ion({\n name : 'agendaStoreFilter',\n filter : 'onAgendaStoreFilter',\n thisObj : this\n });\n }\n return store;\n }\n onAgendaStoreFilter() {\n const me = this;\n // Count unique events\n me.eventCount = me.store.reduce((result, rec, i) => {\n const { events, date } = rec;\n for (let j = 0, { length } = events; j < length; j++) {\n const event = events[j];\n if (!me.isAllDayEvent(event) || !i || DH.clearTime(event.startDate).valueOf() === date.valueOf()) {\n result++;\n }\n }\n return result;\n }, 0);\n }\n updateHideEventOverflow() {\n this.populateStore();\n }\n // We must implement the CalendarMixin interface.\n // All views must expose a doRefresh method.\n // Override from EventList. We need to repopulate our store to create day cells.\n doRefresh() {\n this.populateStore();\n }\n createCellData(date) {\n return Object.assign(this.cellMonth.getCellData(date, this.month), {\n id : DH.makeKey(date),\n events : []\n });\n }\n set cellRenderer(cellRenderer) {\n this._cellRenderer = cellRenderer;\n }\n changeSettings(settings) {\n const { listRangeMenu : menu } = this;\n return settings && menu && super.changeSettings({\n menu\n });\n }\n}\nAgendaView.initClass();\nAgendaView._$name = 'AgendaView';", "import EventRenderer from './mixin/EventRenderer.js';\nimport SchedulerDatePicker from '../../Scheduler/widget/SchedulerDatePicker.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\n/**\n * @module Calendar/widget/CalendarDatePicker\n */\n/**\n * A subclass of {@link Core.widget.DatePicker} which is able to show the presence of\n * events in its cells if contained in a Calendar, and {@link #config-showEvents} is set\n * to a truthy value.\n *\n * The `datepicker` Widget type is implemented by this class when this class is imported, or built\n * into a bundle, and so any {@link Core.widget.DateField} may have its\n * {@link Core.widget.PickerField#config-picker} configured to use its capabilities of showing\n * the presence of events in its date cells.\n *\n * @extends Scheduler/widget/SchedulerDatePicker\n * @mixes Calendar/widget/mixin/EventRenderer\n * @classtype datepicker\n * @widget\n */\nexport default class CalendarDatePicker extends SchedulerDatePicker.mixin(EventRenderer) {\n static $name = 'CalendarDatePicker';\n // Factoryable type name\n static type = 'datepicker';\n static configurable = {\n /**\n * How to show presence of events in the configured {@link #config-eventStore} in the\n * day cells. Values may be:\n *\n * * `false` - Do not show events in cells.\n * * `true` - Show a themeable bullet to indicate the presence of events for a date.\n * * `'count'` - Show a themeable badge containing the event count for a date.\n * * `'dots'` - Show small event-coloured bullets up to a maximum of {@link #config-maxDots} to indicate event presence.\n * @prp {Boolean|'count'|'dots'}\n * @default false\n */\n showEvents : null,\n /**\n * When {@link #config-showEvents} is `'dots'`, this is the maximum number of dots to show\n * below the date number in the cell.\n *\n * The default is four. Note that increasing this may lead to a cluttered UI in which the dots\n * obscure the date figure in the cell.\n *\n * @prp {Number}\n * @default\n */\n maxDots : 4,\n /**\n * When {@link #config-showEvents} is __not__ `'count'`, setting this to\n * `true` means that a tooltip containing the event count will be shown on hover of\n * a day cell.\n *\n * @prp {Boolean}\n * @default\n */\n eventCountTip : null,\n alwaysRefreshOnMonthChange : true\n };\n construct(config) {\n const calendar = (config.owner || config.parent)?.up('calendar');\n if (calendar && !config.eventStore) {\n config.eventStore = calendar.eventStore;\n }\n super.construct(...arguments);\n }\n updateMaxDots() {\n this.refresh();\n }\n refreshEventsMap() {\n const me = this;\n if (me.showEvents) {\n me.eventsMap = me.eventStore[me.showEvents === 'dots' ? 'getEvents' : 'getEventCounts']({\n startDate : me.startDate,\n endDate : me.endDate,\n dateMap : me.eventsMap || (me.eventsMap = new Map()),\n filter : me.eventFilter\n });\n }\n }\n cellRenderer({ cell, date }) {\n const\n { showEvents } = this,\n isCount = showEvents === 'count',\n isDots = showEvents === 'dots',\n eventInfo = this.eventsMap?.get?.(DateHelper.makeKey(date)),\n count = isDots ? eventInfo?.length : eventInfo,\n countCls = isCount ? 'b-cell-events-badge' : isDots ? 'b-cal-minimal-event-container' : 'b-icon b-icon-circle';\n if (isDots) {\n // We replace the text-only date with an element so it can carry the background\n // and the background will not obscure the dots.\n cell.innerHTML = '';\n DomHelper.createElement({\n class : 'b-date-cell-inner',\n text : date.getDate(),\n parent : cell\n });\n }\n delete cell.parentNode.dataset.btip;\n if (count) {\n if (!isCount && this.eventCountTip) {\n cell.parentNode.dataset.btip = this.L('L{ResourceInfoColumn.eventCountText}', count);\n }\n const cellContent = {\n dataset : {\n count\n },\n class : {\n [countCls] : 1,\n [SchedulerDatePicker.getEventCountClass(count)] : 1\n },\n parent : cell,\n [isCount ? 'text' : ''] : count\n };\n if (isDots) {\n const children = cellContent.children = [];\n for (let i = 0; i < Math.min(eventInfo?.length || 0, this.maxDots); i++) {\n const eventDomConfig = this.createEventDomConfig({\n eventRecord : eventInfo[i],\n // renders without content with just background colour\n minimal : true\n });\n children.push(eventDomConfig);\n }\n }\n DomHelper.createElement(cellContent);\n }\n }\n static setupClass(meta) {\n // We take over the type name 'datepicker' when we are in the app\n meta.replaceType = true;\n super.setupClass(meta);\n }\n}\nCalendarDatePicker.initClass();\nCalendarDatePicker._$name = 'CalendarDatePicker';", "import CalendarMixin from './mixin/CalendarMixin.js';\nimport DayCellCollecter from './mixin/DayCellCollecter.js';\nimport DayTime from '../../Core/util/DayTime.js';\nimport Panel from '../../Core/widget/Panel.js';\nimport DH from '../../Core/helper/DateHelper.js';\nimport EventHelper from '../../Core/helper/EventHelper.js';\nimport Rectangle from '../../Core/helper/util/Rectangle.js';\nimport DomSync from '../../Core/helper/DomSync.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport Scroller from '../../Core/helper/util/Scroller.js';\nimport ResizeMonitor from '../../Core/helper/ResizeMonitor.js';\nimport CalendarRow from './CalendarRow.js';\nimport DayLayout from '../layout/day/DayLayout.js';\nimport DaySelectable from './mixin/DaySelectable.js';\nimport '../layout/day/FluidDayLayout.js';\nimport GlobalEvents from '../../Core/GlobalEvents.js';\nimport DateRangeOwner from './mixin/DateRangeOwner.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport ArrayHelper from '../../Core/helper/ArrayHelper.js';\n/**\n * @module Calendar/widget/DayView\n */\nconst\n { MILLIS_PER_HOUR } = DayTime,\n // We need the full longest date because intervening ticks may now be shown.\n widestDate = new Date(2020, 10, 22, 22, 59, 59),\n blockedAllDayEvents = {\n paint : 1,\n refresh : 1,\n resize : 1,\n eventspercellchange : 1\n },\n stopEvent = e => {\n e.stopImmediatePropagation();\n e.cancelBubble = true;\n },\n preventDefault = e => e.ctrlKey && e.preventDefault(),\n hourHeightLevelZero = {\n level : 0,\n step : '1 hour'\n },\n zeroRect = new Rectangle(0, 0, 0, 0),\n fiveMinuteSteps = [\n '30 minutes',\n '15 minutes',\n '10 minutes',\n '5 minutes'\n ],\n sixMinuteSteps = [\n '30 minutes',\n '12 minutes',\n '6 minutes'\n ],\n extractEventRecord = e => e.eventRecord || e,\n emptyArray = Object.freeze([]);\n/**\n * An object which contains properties which encapsulate hour height breakpoints which dictate\n * when intervening time indicators are introduced into the DayView's time axis.\n *\n * @typedef {Object} HourHeightBreakPoints\n * @property {Number} thirty The height at which half hour time is displayed.\n * @property {Number} fifteen The height at which all fifteen minute times are displayed.\n * @property {Number} ten The height at which all ten minute times are displayed.\n * @property {Number} five The height at which all five minute times are displayed.\n */\n/**\n * An object which describes the properties of action buttons injected into event blocks.\n *\n * @typedef {Object} ActionButtonsConfig\n * @property {String} cls A class name to add to the button element. It may be of the form\n * `b-icon-xxxx` which will use a font-awesome icon by that name.\n * @property {String} tooltip The tooltip to show when the button is hovered.\n * @property {String|Function} handler A function, or the name of a function in the ownership hierarchy\n * to call when the button is clicked.\n */\n/**\n * This is normally used as a {@link Calendar.view.Calendar#config-modes mode} of a Calendar (as seen in the live\n * demo below), but may be used standalone as a regular Widget.\n *\n * {@inlineexample Calendar/widget/CalendarDayView.js}\n *\n * As a standalone widget, it will lack the capabilities of the {@link Calendar.view.Calendar Calendar}\n * class, such as keyboard-based event to event navigation and drag/drop features. As seen in this demo:\n *\n * {@inlineexample Calendar/widget/DayView.js}\n *\n * A Panel which displays one or more columns of days with events for each day arranged in ascending\n * time order in each column.\n *\n * This view is *not* limited to showing weeks. The {@link #config-startDate} and {@link #config-endDate}\n * may be configured to any date value. When the {@link #config-startDate} is changed dynamically,\n * the duration remains the same.\n *\n * This view can be configured to scroll to the specific time on first render, which defaults to 7 AM. This behavior\n * is controlled by the {@link #config-visibleStartTime} config.\n *\n * A {@link Calendar.widget.WeekView WeekView} is a subclass of this view which is tied to showing\n * weeks as defined by the {@link Calendar.widget.mixin.CalendarMixin#config-weekStartDay}.\n *\n * ## Multi day events.\n *\n * All day events, and multi day events are displayed in a {@link #config-allDayEvents row at the top}.\n *\n * Intraday events are arranged in ascending time order down day columns from the {@link #config-dayStartTime} to\n * the {@link #config-dayEndTime}.\n *\n * The {@link #config-showAllDayHeader} config option can be used to *not* show multi day events at\n * the top, but have them wrap across multiple day columns.\n *\n * The following configs which apply to the all day row are passed into the configuration of the\n * {@link #config-allDayEvents} widget:\n * - {@link Calendar.widget.CalendarRow#config-overflowPopup}\n * - {@link Calendar.widget.CalendarRow#config-overflowButtonRenderer}\n * - {@link Calendar.widget.CalendarRow#config-overflowClickAction}\n * - {@link Calendar.widget.CalendarRow#config-dayHeaderRenderer}\n *\n * Event rendering can be customized using the {@link #config-eventRenderer} method.\n *\n * @extends Core/widget/Panel\n * @mixes Core/widget/mixin/Responsive\n * @mixes Calendar/widget/mixin/CalendarMixin\n * @mixes Calendar/widget/mixin/DayCellCollecter\n * @mixes Calendar/widget/mixin/DateRangeOwner\n *\n * @classtype dayview\n * @classtypealias day\n * @typingswidget\n */\nexport default class DayView extends Panel.mixin(\n CalendarMixin, DayCellCollecter, DaySelectable, DateRangeOwner) {\n static $name = 'DayView';\n static type = 'dayview';\n static get delayable() {\n return {\n updateElementLayout : {\n type : 'raf',\n cancelOutstanding : true\n },\n refreshDayBackground : {\n type : 'raf',\n cancelOutstanding : true\n },\n adjustCoreHours : {\n type : 'raf',\n cancelOutstanding : true\n }\n };\n }\n static get configurable() {\n // region Hidden configs\n /**\n * @hideconfigs shortEventDuration\n * @hide\n */\n /**\n * @hideconfigs eventHeight\n */\n // endRegion\n return {\n // have to add `timeFormat` property to `localizableProperties` even if the iterator in `Localizable` mixin\n // will be iterating over configs with `localeKey` in addition to `localizableProperties`\n // completely unclear why - the property value is localized, but rendering seem to use the old value\n localizableProperties : ['timeFormat'],\n layout : 'vbox',\n textContent : false,\n scrollable : {\n overflowY : true\n },\n title : 'L{Day}',\n eventHeight : 'auto',\n /**\n * The height __in pixels__ of one hour cell in a day column.\n *\n * Hour cells are bounded by lines, and there is a fainter half hour line in the middle.\n * @prp {Number}\n * @default\n */\n hourHeight : 42,\n range : {\n magnitude : 1,\n unit : 'day'\n },\n /**\n * By default, reconfiguring the {@link #config-startDate} maintains the current duration\n * of the view and moves the {@link #config-endDate}.\n *\n * But for flexibility, reconfiguring the {@link #config-endDate} changes the duration.\n *\n * Setting `fixedDuration` to `true` locks this down to changing either end just moves\n * the view.\n * @config {Boolean}\n */\n fixedDuration : null,\n /**\n * Either the start hour of the day, or a *24 hour * `HH:MM` string denoting the initially visible start\n * time of the day. Configure this as `null` to not have the view scroll to an initial position.\n * @default\n * @config {String|Number} [visibleStartTime]\n */\n visibleStartTime : 7,\n /**\n * Either the start hour of the day, or a *24 hour* `HH:MM` string denoting the start time for days. This\n * is midnight by default.\n *\n * Setting this value to 12, for example, indicates that the 24 hour \"day\" runs from noon on one day, to\n * noon on the following day. This causes events in this span of time to layout in the same day column. In\n * this example, a two hour event that spanned midnight would be rendered in the same way a normal, 2 hour\n * event spanning noon would be rendered without this option.\n *\n * When this config is non-zero, the headings that display the day name and number are adjusted to indicate\n * the range of days for the column. For example, the \"Wed\" column for the 12th of the month will now show\n * \"Wed-Thu\" for the day name and \"12-13\" for the day number.\n *\n * @config {String|Number}\n * @default 0\n */\n dayStartShift : null,\n /**\n * The **configured** start time of the day, expressed in ms (8am would be represented as 8 * 60 * 60 * 1000).\n * You can set this value to either an hour value (0-23), a *24 hour* `HH:MM` string denoting the start of\n * the first rendered daily time block or to a ms timestamp representing time from midnight.\n *\n * Note that this is only granular to the hour level. The value will be rounded __down__\n * to the starting hour of the specified time.\n * @member {Number} dayStartTime\n */\n /**\n * Either the start hour of the day, or a *24 hour* `HH:MM` string denoting the start of the first rendered\n * daily time block. You can also set this value to a ms timestamp representing time from midnight.\n *\n * This config, along with {@link #config-dayEndTime} determines which hours are displayed in a day column.\n *\n * Note that this is only granular to the hour level. The value will be rounded __down__\n * to the starting hour of the configured time.\n * @config {String|Number}\n * @default 0\n */\n dayStartTime : null,\n /**\n * The **configured** end time of the day, expressed in ms (6pm would be represented as 18 * 60 * 60 * 1000).\n * You can set this value to either an hour value (1-24), a *24 hour* `HH:MM` string denoting the end of\n * the last rendered daily time block or to a ms timestamp representing time from midnight.\n *\n * Note that this is only granular to the hour level. The value will be rounded __up__\n * to the ending hour of the specified time.\n * @member {String|Number} dayEndTime\n */\n /**\n * Either the end hour of the day, or a *24 hour* `HH:MM` string denoting the end date of the last rendered time block.\n * You can also set this value to a ms timestamp representing time from midnight.\n *\n * This config, along with {@link #config-dayStartTime} determines which hours are displayed in a day column.\n *\n * Note that this is only granular to the hour level. The value will be rounded __up__\n * to the ending hour of the configured time.\n * @config {String|Number}\n * @default 24\n */\n dayEndTime : null,\n dayTime : 0, // ensure the change/update cycle runs using dayStart/EndTime and dayStartShift\n /**\n * A millisecond value to which to snap pointer times when clicking or dragging within a day column.\n *\n * May be specified in string form eg: `'15 minutes'`\n *\n * By default, the pointer position is __rounded__ to the nearest `increment`, but this can be\n * configured using the {@link #config-timeSnapType} option.\n * @prp {Number}\n * @accepts {String|Number}\n * @default\n */\n increment : '15 min',\n /**\n * The type of rounding to apply when calculating a date from a pointer position in a day\n * column.\n *\n * This defaults to `'round`', but may also be `'floor'` or `'ceil'`. A pointer position will\n * be snapped to the appropriate {@link #config-increment}.\n * @prp {'round'|'ceil'|'floor'}\n * @default\n */\n timeSnapType : 'round',\n intradayCls : null,\n /**\n * Configure as `false` to hide the start time normally shown at the top of the events.\n *\n * @config {Boolean}\n * @default\n */\n showTime : true,\n showBullet : false,\n iconTarget : 'header',\n /**\n * Configuration to manage event layout class.\n * See {@link Calendar.layout.day.FluidDayLayout} class docs to see all possible configurations.\n *\n * Defaults to `{ type : 'fluid' }`.\n *\n * @config {FluidDayLayoutConfig}\n */\n eventLayout : {\n type : 'fluid'\n },\n /**\n * The minimum width of a day column.\n *\n * If this is set, and the day columns overflow the horizontal space available, the columns\n * will be scrollable horizontally in the normal way.\n *\n * There is a {@link #property-horizontalScroller} property which handles scrolling in this\n * dimension.\n * @prp {Number|String}\n */\n minDayWidth : null,\n // In days, event colour means background color\n eventColourStyleProperty : 'backgroundColor',\n monitorResize : Boolean(DomHelper.scrollBarWidth), // Need to adjust the width of the header\n eventFilter : undefined,\n timeFormat : {\n value : 'LST',\n $config : {\n localeKey : 'L{timeFormat}'\n }\n },\n /**\n * If {@link #config-showAllDayHeader} is not set to `false`, then this will be an instance\n * of {@link Calendar.widget.CalendarRow} which encapsulates the all day events at the top\n * of this view.\n * @member {Calendar.widget.CalendarRow} allDayEvents\n * @readonly\n */\n /**\n * A {@link Calendar.widget.CalendarRow} widget containing the horizontal series of calendar cells with the\n * day headers and any all-day, or day-spanning events which fall inside this view's time range.\n *\n * Note that this component calculates its height depending on its\n * {@link Calendar.widget.CalendarRow#config-eventHeight},\n * {@link Calendar.widget.CalendarRow#config-defaultEventRowCount} and\n * {@link Calendar.widget.CalendarRow#config-autoHeight} settings, therefore any configured `height`\n * and `flex` values will be ignored.\n *\n * ```javascript\n * modes : {\n * day : {\n * // Do not show the whole week in the header for the one day view\n * allDayEvents : {\n * fullWeek : false\n * }\n * }\n * }\n * ```\n * @config {Calendar.widget.CalendarRow|CalendarRowConfig}\n */\n allDayEvents : {\n $config : ['lazy', 'nullify'],\n value : {\n type : 'calendarrow'\n }\n },\n /**\n * A config object used to create the {@link Calendar.widget.OverflowPopup} that the\n * {@link #property-allDayEvents} may show when events for one day overflow the available space.\n *\n * For example\n *\n *```javascript\n * modes : {\n * week : {\n * overflowPopup : {\n * closable : false,\n * dateFormat : 'dddd, MMM M',\n * eventRenderer({ eventRecord, renderData }) {\n * if (calendarUtils.isImportantEvent(eventRecord)) {\n * // Add CSS class to important events\n * renderData.cls['b-important'] = 1;\n * }\n * }\n * }\n * }\n * }\n *```\n * @config {OverflowPopupConfig}\n */\n overflowPopup : null,\n /**\n * Shows an all day header above the main schedule for All Day events.\n * Set to `false` to not show all day, or multi-day events in an all day header, but\n * to have them showing wrapping through the day cells.\n * @config {Boolean}\n * @default true\n */\n showAllDayHeader : {\n value : null,\n $config : null,\n default : true\n },\n /**\n * Number of pixels to reduce the height of events by, to leave a gap between them.\n * @config {Number}\n * @default\n */\n eventSpacing : 1,\n responsive : {\n small : {\n descriptionFormat : 'MMMM YYYY'\n },\n '*' : {\n descriptionFormat : null\n }\n },\n /**\n * The maximum height the all day event row is allowed to grow within this view\n * when it is expanded to show all its \"all day\" events.\n *\n * This defaults to `50%`, but can also be set to any CSS size value. A numeric\n * value will be taken as pixels.\n * @config {Number|String}\n * @default 50%\n */\n maxAllDayHeight : null,\n /**\n * When set to `true`, the hours in the day will be sized so that they fit in the available\n * height.\n *\n * In the Object form, the value may contain `minHeight` as the minimum hour height to which\n * the hour cells may shrink:\n *\n * ```javascript\n * fitHours : {\n * minHeight : 31\n * }\n * ```\n *\n * Note that if the all day events row at the top changes size, the space available for the\n * hours will change too, and the hour cell height will change.\n * @prp {Boolean|Object}\n * @default false\n */\n fitHours : null,\n /**\n * A function, or name of a function which is passed the {@link DomConfig} object which\n * will be used to sync with a day column.\n *\n * ```javascript\n * dayCellRenderer : function(domConfig, cellData) {\n * if (this.isSpecialDate(cellData.date)) {\n * domConfig.className['b-fa'] =\n * domConfig.className['b-fa-birthday-cake'] = 1;\n * }\n * return domConfig;\n * }\n *```\n *\n * The result is used to sync the DOM of the day column.\n *\n * @config {Function|String} dayCellRenderer\n * @param {DomConfig} domConfig A {@link DomConfig} config object which is used to sync the day column element.\n * @param {Object} domConfig.className An object who's truthy property names will be applied as class names.\n * @param {Object} domConfig.style A CSS style definition object.\n * @param {Object} domConfig.dataset The DOM data properties to set.\n * @param {DomConfig[]} children The {@link DomConfig} definitions for the events in the day.\n * @param {DayCell} cellData An object that contains data about the cell.\n * @returns {String}\n */\n dayCellRenderer : null,\n /**\n * An object containing two properties, `start` and `end` representing the start and\n * end of core working hours.\n *\n * This causes the non core hours to be covered by a themeable translucent grey mask\n * in the time axis.\n *\n * This may be configured to also mask the non core hours in the day part of the view\n * by setting the `overlayDay` property.\n *\n * ```javascript\n * {\n * coreHours : {\n * start : 9,\n * end : 17,\n * overlayDay : true\n * }\n * }\n * ```\n *\n * If this is configured as an array of less than seven elements, it is taken to be\n * describing __multiple__ core hours blocks within one day, so it could be\n *\n * ```javascript\n * {\n * coreHours : [{\n * start : 8,\n * end : 12,\n * }, {\n * start : 14,\n * end : 18\n * }\n * }\n * ```\n *\n * This may also be a __seven element__ array so as to have different core hours for\n * each JavaScript day of the week (Meaning `0` for Sunday to `6` for Saturday).\n * This causes only the hours in the day columns to be masked:\n *\n * ```javascript\n * {\n * coreHours : [{\n * start : 10,\n * end : 15\n * },{\n * start : 9,\n * end : 17\n * },{\n * start : 9,\n * end : 17\n * },{\n * start : 9,\n * end : 17\n * },{\n * start : 9,\n * end : 17\n * },{\n * start : 9,\n * end : 17\n * },{\n * start : 10,\n * end : 15\n * }]\n * }\n * ```\n *\n * This may also be a function to return calculated core hours for every date.\n * This causes only the hours in the day columns to be masked:\n *\n * ```javascript\n * {\n * coreHours : function(date) {\n * // Shorter core hours at weekends\n * if (date.getDay() === 0 || date.getDay() === 6) {\n * return {\n * start : '10:00',\n * end : '15:00'\n * };\n * }\n * // Pre-lunch and post-lunch working blocks in the week\n * return [{\n * start : '08:00',\n * end : '12:00'\n * }, {\n * start : '14:00',\n * end : '18:00'\n * };\n * }\n * }\n * ```\n *\n * This may also be a __seven element__ array which contains s seperate core hours\n * specification for each day of the week as returned from the `Date` class.\n *\n * This may also be a function, which, when passed a `Date`, returns a core hours\n * specification for that date.\n *\n * In the simplest case an object containing two properties, `start` and `end`:\n *\n * - `coreHours.start` - The start hour or start time string `HH:MM` of the core working hours. `Date` or `String` value allowed.\n * - `coreHours.end` - The end hour or start time string `HH:MM` of the core working hours. `Date` or `String` value allowed\n * - `coreHours.overlayDay` - Set to `true` to have the greyed zone cover the day part of the view.\n *\n * __Only valid when this config is specified as a simple Object__.\n *\n * @prp {Object|Function|String} coreHours\n *\n * @param {Date} date Date for hours calculation\n * @returns {Array}\n */\n coreHours : null,\n /**\n * You can zoom in and out on the time axis using CTRL-key + mouse wheel\n * on mouse-based devices or pinch-zoom on touch devices.\n * See also the {@link #config-hourHeightBreakpoints} config option.\n *\n * You cannot zoom so far out that the day height falls below the available height.\n *\n * __Note that zooming necessarily sets {@link #config-fitHours} to `false`.__\n *\n * Configure this as `false` to disable this behaviour.\n * @config {Boolean}\n * @default\n */\n zoomOnMouseWheel : true,\n /**\n * An array which encapsulates a set of {@link #config-hourHeight} breakpoints which\n * dictate when subticks - intervening time indicators - are introduced into the DayView's\n * time axis.\n *\n * Entries are in ascending granularity order, so the values must ascend.\n *\n * Subtick visibility is updated dynamically during {@link #config-zoomOnMouseWheel zooming}.\n *\n * When an {@link #property-hourHeight} change causes a change of sub tick granularity, a\n * {@link #event-tickChange} event is fired.\n *\n * @prp {Number[]}\n * @default\n */\n hourHeightBreakpoints : [70, 140, 300, 500],\n /**\n * By default, the most granular time tick level in the DayView's time axis is five minutes.\n *\n * Set this property to `true` to have the hour split into six minute ticks.\n * @prp {Boolean}\n * @default false\n */\n sixMinuteTicks : null,\n /**\n * The minimum height to which event blocks in a day cell may shrink. If an event has very\n * short duration, whatever the {@link #config-hourHeight}, and regardless of\n * {@link #function-zoomTo timeline zooming}, the event block will never drop below this height.\n * @prp {Number|String}\n * @default\n */\n minEventHeight : '1em',\n /**\n * The event block height at which the event display rendition switches to \"compact\"\n * mode with the name, then start time both on the top line with a slightly smaller font.\n * @prp {Number}\n * @default\n * @private\n */\n shortEventHeight : 32,\n /**\n * A function, or name of a function which produces a {@link DomConfig} block to create the current time indicator\n * which is displayed in a day column which represents the current date. It is the developer's responsibility\n * to add CSS classes and the appropriate CSS rules to produce the desire appearance.\n *\n * ```javascript\n * currentTimeIndicatorRenderer : function() {\n * return {\n * className : 'my-current-time',\n * text : 'NOW'\n * };\n * }\n *```\n *\n * The result is used to sync the DOM of the day column.\n *\n * @config {Function|String} currentTimeIndicatorRenderer\n * @returns {DomConfig} An object which describes the DOM structure of the today indicator element.\n */\n currentTimeIndicatorRenderer : () => {\n return {\n // Don't use a div so that :last-of-type can be used for multiple divs\n // inside a day column (Such as injected by the DayResourceView)\n tag : 'span',\n className : 'b-current-time-indicator',\n retainElement : true\n };\n },\n /**\n * An array of button specifications which add clickable icon buttons to the rendered\n * event blocks which contain the following properties.\n * @config {ActionButtonsConfig[]}\n */\n actionButtons : null,\n /**\n * Configure this as `true` to hide day columns which contain no events.\n *\n *
Use with care. This may result in no day columns being rendered\n * for completely empty time ranges.
\n * @prp {Boolean}\n * @default false\n */\n hideEmptyDays : null,\n autoRefresh : [\n 'hideEmptyDays'\n ],\n /**\n * By default, half hour, fifteen minute tick lines are rendered in a lower contrast\n * colour than hour lines.\n *\n * Configure this as `true` to instead render the minor tick lines as dashed lines\n * at the same contrast level as the hour lines.\n * @prp {Boolean}\n * @default false\n */\n dashedSubticks : null\n };\n }\n /**\n * Returns the resource associated with this day view when used inside a {@link Calendar.widget.ResourceView}\n * @readonly\n * @member {Scheduler.model.ResourceModel} resource\n */\n construct(config) {\n const me = this;\n // If we are configured to not show vertical scrolling, we must know this so that\n // scrollbar equalization can adjust to this.\n me.configuredHiddenVerticalScroll = config.scrollable?.overflowY === 'hidden-scroll';\n // Needs scope\n me.cellMapEventFilter = me.cellMapEventFilter.bind(me);\n super.construct(...arguments);\n if (!me.startDate) {\n me.startDate = me.month.date;\n }\n GlobalEvents.ion({\n theme : 'onThemeChange',\n thisObj : me\n });\n }\n get hasNonWorkingDays() {\n return true;\n }\n updateZoomOnMouseWheel(zoomOnMouseWheel) {\n if (zoomOnMouseWheel) {\n // Only respond every 50ms to keep zooming response sane to a user.\n this.zoomListener = EventHelper.on({\n element : this.dayContentElement,\n wheel : 'onDayContentMousewheel',\n thisObj : this,\n throttled : {\n buffer : 100,\n alt : preventDefault\n }\n });\n }\n else {\n this.zoomListener?.();\n }\n }\n get childItems() {\n const\n { allDayEvents } = this,\n result = super.childItems;\n if (allDayEvents) {\n result.push(allDayEvents);\n }\n return result;\n }\n get dayEndTime() {\n return this.dayTime?.timeEnd ?? this._dayEndTime;\n }\n get dayStartTime() {\n return this.dayTime?.timeStart ?? this._dayStartTime;\n }\n get dayStartShift() {\n return this.dayTime?.startShift ?? this._dayStartShift;\n }\n changeDayEndTime(dayEndTime) {\n // Update the UI on AF if needed\n this.adjustCoreHours();\n // Due to how the time axis is rendered with twelve flexed ticks in each hour tick, the view\n // can only support day start and end times in whole hour granularity.\n // Any end time is rounded *up*.\n return Math.ceil((this.configuredDayEndTime = DayTime.parse(dayEndTime)) / MILLIS_PER_HOUR) * MILLIS_PER_HOUR;\n }\n updateDashedSubticks(dashedSubticks) {\n this.dayContainerElement.classList.toggle('b-dashed-subticks', Boolean(dashedSubticks));\n }\n updateDayEndTime(dayEndTime) {\n // When more than one of these 3 configs changes at the same time, the following will trigger the yet to be\n // realized configs, which will in turn call their updaters until the last of the batch runs its updater. In\n // that updater call, the dayTime config will be set to the new DayTime instance that has all of the correct\n // config values. The changeDayTime() method will detect a not-equals() DayTime and return it, which will run\n // updateDayTime(). The updates for the non-final configs will also call changeDayTime() but their DayTime\n // instances will all have the same properties and will not result in a call of updateDayTime().\n //\n // We also clear _dayTime so that the getters won't use the old value in our getter calls.\n this._dayTime = null;\n this.dayTime = new DayTime({\n startShift : this.dayStartShift,\n timeStart : this.dayStartTime,\n timeEnd : dayEndTime\n });\n }\n changeDayStartTime(dayStartTime) {\n // Update the UI on AF if needed\n this.adjustCoreHours();\n // Due to how the time axis is rendered with twelve flexed ticks in each hour tick, the view\n // can only support day start and end times in whole hour granularity.\n // Any start time is rounded *down*.\n return Math.floor((this.configuredDayStartTime = DayTime.parse(dayStartTime)) / MILLIS_PER_HOUR) * MILLIS_PER_HOUR;\n }\n adjustCoreHours() {\n // If the app has not configured any coreHours, a start/end hour was rounded, then set the coreHours\n // to the configured day so that the out of range parts are grayed out.\n if (this.initialConfig.coreHours == null) {\n const { _dayStartTime, _dayEndTime, configuredDayStartTime, configuredDayEndTime } = this;\n if (_dayStartTime < configuredDayStartTime || _dayEndTime > configuredDayEndTime) {\n this.coreHours = {\n start : configuredDayStartTime || 0,\n end : configuredDayEndTime || 24,\n overlayDay : true\n };\n }\n else {\n this.coreHours = null;\n }\n }\n }\n updateDate(date, was) {\n const { allDayEvents } = this;\n if (allDayEvents) {\n allDayEvents.date = date;\n }\n super.updateDate(date, was);\n }\n updateDayStartTime(dayStartTime) {\n this._dayTime = null;\n this.dayTime = new DayTime({\n startShift : this.dayStartShift,\n timeStart : dayStartTime,\n timeEnd : this.dayEndTime\n });\n }\n updateDayStartShift(dayStartShift) {\n this._dayTime = null;\n this.dayTime = new DayTime({\n startShift : dayStartShift,\n timeStart : this.dayStartTime,\n timeEnd : this.dayEndTime\n });\n }\n // dayTime\n changeDayTime(dayTime) {\n if (!dayTime) {\n dayTime = new DayTime(this);\n }\n if (!this._dayTime?.equals(dayTime)) {\n return dayTime;\n }\n }\n updateDayTime(dayTime, was) {\n const\n me = this,\n { eventStore } = me;\n if (eventStore) {\n eventStore.registerDayIndex(dayTime);\n was && eventStore.unregisterDayIndex(was);\n }\n if (!me.isConfiguring) {\n const { startDate } = me;\n me.syncHours();\n me.setConfig({\n date : startDate,\n startDate\n });\n me.allDayEvents?.setConfig({\n date : startDate,\n dayTime,\n startDate\n });\n }\n }\n dateKey(date) {\n return this.dayTime.dateKey(date);\n }\n dayOfDate(date) {\n return date && this.dayTime.dayOfDate(date);\n }\n /**\n * Scrolls vertically to bring an event or a time into view.\n * @param {Scheduler.model.EventModel|Date|Number} target The event to scroll to or\n * a `Date` to read the hour value from, or an hour number.\n * @param {Object} [options] How to scroll.\n * @param {'start'|'end'|'center'|'nearest'} [options.block] How far to scroll the target.\n * @param {Number} [options.edgeOffset] edgeOffset A margin around the target to bring into view.\n * @param {Object|Boolean|Number} [options.animate] Set to `true` to animate the scroll by 300ms,\n * or the number of milliseconds to animate over, or an animation config object.\n * @param {Number} [options.animate.duration] The number of milliseconds to animate over.\n * @param {String} [options.animate.easing] The name of an easing function.\n * @param {Boolean} [options.highlight] Set to `true` to highlight the target when it is in view, _if the target is an `EventModel`_.\n * @param {Boolean} [options.focus] Set to `true` to focus the target when it is in view.\n * @param {Boolean} [options.x] Pass as `false` to disable scrolling in the `X` axis.\n * @param {Boolean} [options.y] Pass as `false` to disable scrolling in the `Y` axis.\n * @returns {Promise} A promise which is resolved when the target has been scrolled into view.\n */\n async scrollTo(target, options = { animate : true }) {\n const\n me = this,\n {\n allDayEvents,\n minDayWidth\n } = me,\n scrollPromises = [];\n if (me.scrollPromise) {\n await me.scrollPromise;\n }\n // If the all day event row is in transition, wait until it's done\n await allDayEvents?.heightAnimation;\n // Component might get destroyed by the time promises above get resolved\n if (me.isDestroyed) {\n return;\n }\n // Convert hour number to a time in our start date\n if (typeof target === 'number') {\n target = DH.add(me.startDate, target, 'hour');\n }\n const targetIsDate = Boolean(target.getHours);\n // CalendarMixin knows how to do this.\n // If it's a Date It must not scroll vertically; we do that below.\n await super.scrollTo(target, Object.assign({}, options, { y : !targetIsDate }));\n // Scrolling to a Date is more granular in this view\n if (targetIsDate) {\n // If we are showing more than one day, ensure the date column is in view\n if (me.duration > 1 && minDayWidth) {\n scrollPromises.push(me.horizontalScroller.scrollIntoView(me.getDayElement(target), options));\n }\n target = target.getHours() + (target.getMinutes() / 60);\n scrollPromises.push(me.scrollable.scrollTo(null, me.getPositionFromTime(target), options));\n // There may be a horizontal as well as vertical component if we are in a multi day\n // view with minDayWidth set causing overflow.\n return Promise.all(scrollPromises);\n }\n }\n getEventElement(event, date) {\n return super.getEventElement(event, date) || this.allDayEvents?.getEventElement(event, date);\n }\n getEventElements(event) {\n return super.getEventElements(event) || this.allDayEvents?.getEventElements(event);\n }\n /**\n * Returns the pixel coordinate on the time axis for the passed time of day.\n * @param {Date|Number|String} time The hour number, 'HH:MM' time or a `Date` instance.\n * @internal\n * @returns {Number}\n */\n getPositionFromTime(time) {\n // If it's not possible, return 0. DayTime returns the positive delta.\n if (DayTime.parse(time) < DayTime.parse(this.dayStartTime) - this.dayStartShift) {\n return 0;\n }\n return this.dayTime.delta(time, 'h') * this.hourHeight;\n }\n updateShowAllDayHeader(showAllDayHeader) {\n const\n me = this,\n { _allDayEvents } = me;\n me._cellMap?.clear();\n if (_allDayEvents) {\n _allDayEvents._cellMap?.clear();\n _allDayEvents.element.classList.toggle('b-hide-allday-header', !showAllDayHeader);\n _allDayEvents.refresh();\n }\n me.refresh();\n }\n changeAllDayEvents(alldayEvents, oldAlldayEvents) {\n // Shortcut nullifying the allDayEvents property\n if (!alldayEvents) {\n return oldAlldayEvents?.destroy();\n }\n this.getConfig('date'); // ensure we have startDate/endDate setup if we were given a date\n // CalendarRow controls its own height based on event count and expanded/collapsed state.\n // But the max height it may scroll in within a DayView is controlled by us, so treat maxHeight\n // configured on the allDayEvents as a request for maxAllDayHeight\n if (alldayEvents.maxHeight) {\n this.maxAllDayHeight = alldayEvents.maxHeight;\n alldayEvents.maxHeight = null;\n }\n const\n me = this,\n {\n autoCreate,\n dayHeaderRenderer,\n overflowButtonRenderer,\n overflowClickAction,\n overflowPopup,\n avatarRendering,\n range\n } = me,\n result = CalendarRow.reconfigure(oldAlldayEvents, alldayEvents, {\n owner : me,\n defaults : {\n calendar : me.calendar,\n parent : me,\n rtl : me.rtl,\n cls : {\n 'b-dayview-schedule-container' : 1,\n 'b-dayview-initializing' : 1\n },\n // If we were configured with any of the following, they were obviously intended for use\n // by the all day row\n [overflowPopup !== undefined ? 'overflowPopup' : '_'] : overflowPopup,\n [overflowButtonRenderer ? 'overflowButtonRenderer' : '_'] : overflowButtonRenderer,\n [overflowClickAction ? 'overflowClickAction' : '_'] : overflowClickAction,\n [dayHeaderRenderer ? 'dayHeaderRenderer' : '_'] : dayHeaderRenderer,\n [avatarRendering ? 'avatarRendering' : '_'] : avatarRendering,\n // This view always autoCreates allDay events starting at midnight\n autoCreate : autoCreate !== false ? {\n newName : autoCreate.newName,\n gesture : autoCreate.gesture,\n startHour : 0,\n duration : '1 day'\n } : false,\n // Only signal a dayNumberClick on a click on the day number element.\n // Allow clicks in the surrounding header to be used to create new events.\n dayNameSelector : '.b-day-name-date',\n // Must use the same configured event filter as us in addition to only showing\n // the all day and interDay events\n eventFilter : e => me.showAllDayHeader && me.isAllDayEvent(e) && (!me.eventFilter || me.eventFilter(e)),\n dayStartTime : me.dayStartTime,\n dayEndTime : me.dayEndTime,\n dayStartShift : me.dayStartShift,\n eventRenderer : me.eventRenderer,\n eventStore : me.eventStore,\n month : me.month,\n fullWeek : me.duration === 1 && !me.dayTime.startShift,\n filterEventResources : me.filterEventResources,\n startDate : me.startDate,\n [range ? 'range' : '_'] : range,\n [range ? '_' : 'endDate'] : me.endDate,\n nonWorkingDays : me.nonWorkingDays,\n nonWorkingDayCls : me.nonWorkingDayCls,\n weekendCls : me.weekendCls,\n weekStartDay : me.weekStartDay,\n defaultCalendar : me.defaultCalendar,\n emptyCellRenderer : me.emptyCellRenderer,\n hideEmptyDays : me.hideEmptyDays,\n internalListeners : {\n heightChange : 'updateElementLayout',\n refresh : 'updateElementLayout',\n catchall : 'relayAllDayEvents',\n showoverflowpopup : 'onAllDayOverflowPopupShown',\n thisObj : me\n },\n // If all day row does not render events, the day part must fire\n // the creation signal so that responders such as EventEdit can do right things.\n editAutoCreatedEvent(eventRecord) {\n (me.showAllDayHeader ? this : me).trigger('eventAutoCreated', {\n eventRecord\n });\n },\n // If we are not showing all day events, always return an empty Map\n createCellMap() {\n return me.showAllDayHeader ? this.constructor.prototype.createCellMap.call(this, ...arguments) : (me.emptyMap || (me.emptyMap = new Map()));\n }\n },\n setup(config) {\n // We need to postprocess the inheriting of hideNonWorkingDays after\n // we know how external configurations have played into the full config.\n // If we are showing only one day, then hiding non working days is invalid\n config.hideNonWorkingDays = me.duration === 1 && !config.fullWeek ? false : me._hideNonWorkingDays;\n }\n });\n // It's null on destroy\n if (result) {\n // The all day row must control its own height.\n // These configs must be ignored.\n result.height = result.flex = null;\n // The all day row is not in control of its date range.\n // If we ever have to scroll to another date, this entire view does that\n // before handing control on to the all day row widget.\n me.originalAllDayEventsScrollTo = result.scrollTo;\n result.scrollTo = me.allDayEventsScrollTo.bind(me);\n }\n return result;\n }\n // We have to be able to yield the underbar property so that Calendar can ask if there is an\n // overflowPopup for a child view without triggering its creation.\n onAllDayOverflowPopupShown({ overflowPopup }) {\n this._overflowPopup = overflowPopup;\n }\n // This is what gets called when the all day row is asked to scrollTo\n // We have control of what it does. It does not have control of its date range.\n allDayEventsScrollTo(target) {\n const\n me = this,\n newDate = target.isEvent ? target.startDate : me.changeEndDate(target),\n dateIntersects = target.isEvent ? DH.intersectSpans(me.startDate, me.endDate, target.startDate, target.endDate) : DH.betweenLesser(newDate, me.startDate, me.endDate);\n // If we do not encompass the date, move to the date.\n if (!dateIntersects) {\n me.date = newDate;\n }\n // Now CalendarRow can have at it.\n return me.originalAllDayEventsScrollTo.call(me.allDayEvents, ...arguments);\n }\n updateAutoCreate(autoCreate) {\n // Use the property name so as not to ingest the lazy config at configure time\n const { _allDayEvents } = this;\n super.updateAutoCreate?.(autoCreate);\n if (_allDayEvents) {\n _allDayEvents.autoCreate = autoCreate ? {\n newName : autoCreate.newName,\n gesture : autoCreate.gesture,\n startHour : 0,\n duration : '1 day'\n } : false;\n }\n }\n updateWeekStartDay(weekStartDay, oldWeekStartDay) {\n super.updateWeekStartDay?.(weekStartDay);\n if (!this.isConfiguring && this.allDayEvents) {\n this.allDayEvents.weekStartDay = weekStartDay;\n }\n }\n updateEventStore(eventStore, was) {\n super.updateEventStore(eventStore, was);\n const { dayTime } = this;\n if (dayTime) {\n eventStore?.registerDayIndex(dayTime);\n was?.unregisterDayIndex(dayTime);\n }\n }\n /**\n * The {@link Calendar.widget.OverflowPopup} instance that the {@link #property-allDayEvents}\n * may show when events for one day overflow the available space.\n * @member {Calendar.widget.OverflowPopup} overflowPopup\n * @readonly\n */\n get overflowPopup() {\n // If we don't have _allDayEvents yet, return the underlying config.\n return this._allDayEvents?.overflowPopup || this._overflowPopup;\n }\n get stepUnit() {\n return this.duration > 1 ? `${this.duration} ${this.L('L{daysUnit}')}` : this.L('L{dayUnit}');\n }\n get eventContentElement() {\n return this.dayContainerElement;\n }\n getDateFromDomEvent(domEvent, precise = false) {\n let date = super.getDateFromDomEvent(domEvent);\n const\n me = this,\n el = DomHelper.getEventElement(domEvent);\n // Override to add a time component to the DOM event's date if we receive and event (not an element) and\n // the event was in the day container.\n if (date && el !== domEvent && me.dayContainerElement.contains(el)) {\n // If it's a KeyboardEvent, the y must be the event el's y\n const y = domEvent.clientY || el.getBoundingClientRect().y - 1;\n date = DH.add(date,\n me.dayStartHour - me.dayStartShift / 3600000 +\n (y - me.scrollable.element.getBoundingClientRect().y + me.scrollable.y) / me.hourHeight,\n 'hour');\n if (!precise) {\n date = DH[me.timeSnapType](date, me.increment);\n }\n }\n return date;\n }\n getDateFromPosition(clientX, clientY, local = false, keyParser) {\n const\n me = this,\n {\n eventContentElement,\n allDayEvents\n } = me,\n rect = local ? zeroRect : Rectangle.fromScreen(eventContentElement).roundPx().translate(-eventContentElement.scrollLeft),\n width = eventContentElement.scrollWidth,\n height = me.hourHeight * me.getDayLength('hour'),\n localX = local ? clientX : clientX - rect.x,\n dx = me.rtl ? me.eventContentElement.offsetWidth - localX : localX,\n dy = clientY - rect.y,\n // We have to compare element position because day columns may have different widths\n overCell = me.getDayElementFromX(clientX),\n // Completely empty views must return their date.\n // DayView can hide empty days and DayResourceView can hide empty resources which can result\n // in no day cells being rendered. This method must yield a valid Date.\n date = me.getDateFromElement(overCell, keyParser) || me.date;\n if (allDayEvents && (dx < 0 || width < dx || dy < 0 || height < dy)) {\n // CalendarDrag will pass this view's DayTime so pass it into CalendarRow\n return allDayEvents.getDateFromPosition(clientX, clientY, keyParser);\n }\n // DateHelper.add() operates in UTC and therefore does not respect DST, so we cannot do this:\n // DH.add(DH.clearTime(date), me.dayStartMs + Math.floor(dy / height * me.getDayLength()), 'ms')\n // Instead, we leverage setMilliseconds()'s ability to handle denormalized values:\n DH.clearTime(date, /*clone = */false);\n date.setMilliseconds(date.getMilliseconds() + me.dayStartMs + Math.floor(dy / height * me.getDayLength()));\n return DH[me.timeSnapType](date, me.increment);\n }\n // We must implement the CalendarMixin interface.\n // All views must expose a doRefresh method.\n doRefresh() {\n const me = this;\n if (me.isVisible) {\n // Opt out of animations while we refresh to avoid reused elements resizing\n DomHelper.addTemporaryClass(me.element, 'b-no-transitions', 200, me);\n const children = [];\n // Calculate this for getDayDomConfig only once per refresh.\n me.today = me.dayTime.startOfDay(me.calendar?.dateTimeNow || new Date());\n // Create day cell child array. DomSync ignores null array entries which is what\n // getDayDomConfig returns for hidden days.\n for (const date = new Date(me.startDate); date < me.endDate; date.setDate(date.getDate() + 1)) {\n children.push(me.getDayDomConfig(date));\n }\n DomSync.sync({\n targetElement : me.dayContainerElement,\n domConfig : {\n onlyChildren : true,\n children,\n // Match existing data-date elements first and ensure DOM order matches\n // children order.\n syncOptions : {\n syncIdField : 'date',\n releaseThreshold : 0,\n strict : true\n }\n }\n });\n // In case height has changed since last refresh.\n me.refreshDayBackground();\n me.refreshCount = (me.refreshCount || 0) + 1;\n me.syncCurrentTimeIndicator();\n /**\n * Fires when this DayView refreshes.\n * @param {Calendar.widget.DayView} source The triggering instance.\n * @event refresh\n */\n me.trigger('refresh');\n }\n }\n /**\n * Gets the full event load which the passed date contains for this view. Includes events\n * in the all day row as well as in the main day area.\n * @param {Date|String} date The date or `YYYY-MM-DD` key for which to gather events.\n * @param {Date} startDate To sync this view's range with the caller's range. Used by\n * this view's {@link #property-allDayEvents} view.\n * @returns {Scheduler.model.EventModel[]}\n * @private\n */\n getEventsForDay(date, startDate) {\n const\n me = this,\n key = typeof date === 'string' ? date : me.dayTime.dateKey(date),\n { allDayEvents } = me;\n // Ensure we are in sync with our caller\n if (startDate && me.startDate - startDate) {\n me._cellMap?.clear();\n me.startDate = startDate;\n }\n const result = me.cellMap.get(key)?.events?.slice() || [];\n if (allDayEvents) {\n if (allDayEvents.startDate - me.startDate) {\n allDayEvents._cellMap?.clear();\n allDayEvents.startDate = me.startDate;\n }\n result.push.apply(result, allDayEvents.cellMap.get(key)?.renderedEvents || emptyArray);\n }\n // Some events arrays are raw EventModels, some are event info blocks.\n // We extract into an array of EventModels.\n return result.map(extractEventRecord);\n }\n getBaseDayDomConfig(date) {\n const\n me = this,\n key = me.dayTime.dateKey(date),\n day = date.getDay(),\n // Skip hidden, nonworking days (unless we're a single day view).\n // Skip empty days if configured to do so.\n skipDay = (me.hiddenNonWorkingDays[day] && me.duration !== 1) || (me.hideEmptyDays && !me.getEventsForDay(key).length);\n // Return nullish for skipped days.\n if (!skipDay) {\n const\n cellData = me.cellMap.get(key) || me.createCellData(date), // dayCellRenderer & timeRanges need one\n nonWorkingDays = me.nonWorkingDays || me.month.nonWorkingDays;\n return [cellData, {\n dataset : {\n date : key\n },\n className : {\n 'b-dayview-day-detail' : 1,\n [me.dayCellCls] : 1,\n [me.nonWorkingDayCls] : nonWorkingDays[day] || false,\n [me.weekendCls] : DH.weekends[day],\n [me.todayCls] : !(date - me.today),\n 'b-last-cell' : !(date - me.lastVisibleDate),\n [`b-day-of-week-${day}`] : 1\n },\n style : {},\n children : {\n inset : {\n className : {\n 'b-dayview-inset' : 1\n }\n },\n events : {\n className : {\n 'b-dayview-event-container' : 1\n },\n children : []\n }\n },\n // Match existing data-event-id elements first and ensure DOM order matches\n // children order.\n syncOptions : {\n syncIdField : 'eventId',\n releaseThreshold : 0,\n strict : true\n }\n }];\n }\n }\n getDayDomConfig(date) {\n const\n me = this,\n base = me.getBaseDayDomConfig(date);\n if (base) {\n const\n { dayCellRenderer } = me,\n [cellData, dayDomConfig] = base;\n if (me.coreHours) {\n // If our coreHours yields a callable function, ask it the coreHours for this date.\n // If it is an array, extract the coreHours for the day.\n // Set up the background image to create the effect.\n dayDomConfig.style.backgroundImage = me.getCoreHoursGradient(me.getCoreHoursForDate(date));\n }\n // Render events if any. Call even if we have no events to allow beforeLayoutEvents event to fire and\n // listeners to act (e.g., timeRanges)\n me.renderEvents(cellData, dayDomConfig);\n return DomHelper.normalizeChildren(\n dayCellRenderer ? me.callback(dayCellRenderer, me, [dayDomConfig, cellData]) : dayDomConfig);\n }\n }\n /**\n * Calculates A CSS `linear-gradient` specification from a {@link #config-coreHours} definition object.\n *\n * A core hours object consists ot two properties, `start` and `end`. It may also be an array containing\n * multiple core hours definitions.\n * @param {Object} coreHours\n * @param {Number|String} coreHours.start The start hour or start time string `HH:MM` of the core working hours.\n * @param {Number|String} coreHours.end The start hour or end time string `HH:MM` of the core working hours.\n * @returns A String containing a `linear-gradient` style which shades non-working times using the\n * `--dayview-outside-core-hours-color` CSS variable.\n * @internal\n */\n getCoreHoursGradient(coreHours) {\n // No background image gradient if no core hours specified.\n if (!coreHours) {\n return '';\n }\n const\n me = this,\n { dayTime } = me,\n dayEnd = dayTime.duration('h'),\n result = ['linear-gradient(to bottom'];\n // Convert a single time block into an array, we need to handle multiple\n // time blocks.\n coreHours = ArrayHelper.asArray(coreHours);\n let lastEnd = 0;\n for (let i = 0, { length } = coreHours; i < length; i++) {\n const\n c = coreHours[i],\n start = Math.max(dayTime.delta(c.start, 'h'), 0) / dayEnd * 100,\n end = Math.min(dayTime.delta(c.end, 'h'), dayEnd) / dayEnd * 100;\n // If the working block for the day is the whole day, we don't need a background\n if (length === 1 && start === 0 && end === 100) {\n return '';\n }\n // Blocked hours prior to this working block\n if (lastEnd < start) {\n result.push(`var(--dayview-outside-core-hours-color) ${DomHelper.percentify(lastEnd)}, var(--dayview-outside-core-hours-color) ${DomHelper.percentify(start)}`);\n }\n result.push(`transparent ${DomHelper.percentify(start)}, transparent ${DomHelper.percentify(end)}`);\n lastEnd = end;\n }\n // Closing blocked out hours if any\n if (lastEnd < 100) {\n result.push(`var(--dayview-outside-core-hours-color) ${DomHelper.percentify(lastEnd)}, var(--dayview-outside-core-hours-color) 100%`);\n }\n return result.join(',') + ')';\n }\n getCoreHoursForDate(date) {\n const { coreHours } = this;\n // It's an array for each day\n if (coreHours.length === 7) {\n return coreHours[date.getDay()];\n }\n // Object or array of objects\n if (typeof coreHours === 'object') {\n // Core hours as a simple object only applies to dates if overlayDay set.\n return coreHours.overlayDay ? coreHours : null;\n }\n // Must be a callback\n return this.callback(coreHours, this, [date]);\n }\n /**\n * Refreshes the event layout inside a day column in case the stacking order becomes incorrect.\n * @param {Date} date\n * @internal\n */\n refreshDayEvents(date) {\n const me = this;\n // Promote YYYY-MM-DD keys to Dates\n date = me.changeEndDate(date);\n // getDayDomConfig reads this.\n me.today = me.dayTime.startOfDay(new Date());\n const domConfig = me.getDayDomConfig(date);\n // Opt out of animations while we refresh to avoid reused elements resizing\n DomHelper.addTemporaryClass(me.element, 'b-no-transitions', 200, me);\n domConfig.onlyChildren = true;\n DomSync.sync({\n targetElement : me.getDayElement(date),\n domConfig\n });\n }\n /**\n * Pushes event bar DomConfig definitions into the `children` property of the passed\n * `dayDomConfig` object\n * @param {DayCell} cellData An object containing information about the day cell being created.\n * @param {DomConfig} dayDomConfig The DomConfig element definition for the day cell.\n * @internal\n */\n renderEvents(cellData, dayDomConfig) {\n const\n me = this,\n context = me.eventLayout.layoutEvents(cellData, dayDomConfig),\n { items } = context,\n { eventSpacing, rtl } = me;\n for (const item of items) {\n const eventDomConfig = me.createEventDomConfig({ eventRecord : item.eventRecord });\n me.insertActionButtons(eventDomConfig, item.eventRecord, cellData);\n // Set the classes for the event overflowing the *visible* day if it's cropped.\n eventDomConfig.className['b-starts-above'] = item.startsBefore;\n eventDomConfig.className['b-ends-below'] = item.endsAfter;\n if (item.cluster.items.length > 1) {\n eventDomConfig.className['b-cal-in-cluster'] = 1;\n }\n Object.assign(eventDomConfig.style, {\n // Leave eventSpacing pixels at the bottom by reducing the available content height.\n // The event-wrap's default background-color is transparent.\n // This is to create the appearance of the event-spacing config.\n [eventSpacing ? 'padding-bottom' : ''] : `${eventSpacing}px`,\n ...item.getStyles(rtl)\n });\n dayDomConfig.children.events.children.push(eventDomConfig);\n }\n me.trigger('renderEvents', {\n context\n });\n }\n insertActionButtons(eventDomConfig, eventRecord, cellData) {\n const { actionButtons } = this;\n if (actionButtons) {\n eventDomConfig.children.push({\n className : 'b-event-action-buttons',\n children : actionButtons.map((actionButton, index) => {\n return {\n tag : 'button',\n className : {\n 'b-tool' : 1,\n 'b-icon' : 1,\n [actionButton.cls] : 1\n },\n dataset : {\n index,\n btip : actionButton.tooltip\n }\n };\n })\n });\n }\n }\n onEventClick({ domEvent }) {\n const button = domEvent.target.closest('.b-event-action-buttons [data-index]');\n if (button) {\n this.callback(this.actionButtons[Number(button.dataset.index)].handler, this, arguments);\n return false;\n }\n }\n get overflowElement() {\n // The vertical scrolling element\n return this.dayContentElement;\n }\n get cellMap() {\n // If the cellMap has not been populated, create it.\n return this._cellMap?.populated ? this._cellMap : this.createCellMap();\n }\n get bodyConfig() {\n const\n me = this,\n {\n allDayEvents,\n maxAllDayHeight\n } = me;\n return Object.assign(super.bodyConfig, {\n children : {\n alldayRowElement : allDayEvents ? {\n className : {\n 'b-dayview-allday-row' : 1\n },\n style : {\n [maxAllDayHeight ? 'maxHeight' : ''] : DomHelper.setLength(maxAllDayHeight)\n },\n children : {\n cornerElement : {\n className : {\n 'b-dayview-allday-row-start' : 1,\n 'b-dayview-allday-autoheight' : allDayEvents.autoHeight\n },\n children : {\n allDayTextElement : {\n className : 'b-dayview-allday-text',\n html : me.L('L{EventEdit.All day}')\n },\n allDayToggleIcon : {\n tag : 'button',\n className : 'b-expand-allday-button b-icon b-icon-expand-row',\n dataset : {\n btip : 'L{DayView.expandAllDayRow}'\n }\n }\n }\n },\n allDayEvents : allDayEvents?.element, // May have been configured away\n $scrollerPad : DomHelper.scrollBarPadElement // $ prefix -> not a reference\n }\n } : null,\n dayContentElement : {\n tabIndex : -1,\n className : {\n 'b-dayview-day-content' : 1\n },\n children : {\n timeAxisElement : {\n children : me.getTimeElementConfigs(),\n className : {\n 'b-timeaxis-container' : 1\n }\n },\n dayContainerElement : {\n className : {\n 'b-dayview-day-container' : 1\n }\n }\n }\n },\n horizontalScrollerElement : {\n className : 'b-virtual-scrollers b-hide-display',\n children : [{\n className : 'b-virtual-scroller'\n }, DomHelper.scrollBarPadElement]\n }\n }\n });\n }\n onDayContentMousewheel(e) {\n if (e.ctrlKey) {\n e.preventDefault();\n const\n pointerOffsetY = e.clientY - this.scrollable.element.getBoundingClientRect().y,\n reqDelta = -Math.min(Math.abs(e.deltaY), 10) * Math.sign(e.deltaY);\n this.zoomBy(reqDelta, pointerOffsetY);\n }\n }\n /**\n * Zooms the timeline by incrementing the {@link #property-hourHeight} by the requested pixel delta.\n * @param {Number} reqDelta The number of pixels by which to increment the {@link #property-hourHeight}\n * @param {Number|String} [zoomCenter] The center time to zoom in to. This may be a number of pixels\n * down the DayView viewport, or it may be a time to use as the center in the format `HH:MM:ss`.\n * __If omitted, the visual central time in the viewport is used__.\n *\n * Note that this will usually require a layout update which happens in the next animation frame\n * so to postprocess the new state of the view, the returned Promise must be awaited.\n * @async\n */\n zoomBy(reqDelta, zoomCenter = Math.min(this.scrollable.scrollHeight, this.scrollable.clientHeight) / 2 - 1) {\n return new Promise(resolve => {\n // Ensure the layout is up to date before we measure things\n this.updateElementLayout.cancel();\n const\n me = this,\n {\n scrollable,\n hourHeight : oldHourHeight\n } = me,\n // Round the zoom center date to our configured snap point so that the view stays steady.\n // Use x as center to 99% likely avoid Sundays which are DST switch days which break fixed timepoint\n zoomCenterTime = DH.round(typeof zoomCenter === 'number' ? me.getDateFromPosition(me.dayContainerElement.offsetWidth / 2, zoomCenter + scrollable.y, true) : DH.parse(zoomCenter, 'HH:mm:ss'), me.increment),\n hoursInDay = me.getDayLength('h'),\n newHourHeight = Math.max(oldHourHeight + reqDelta, me.dayContentClientHeight / hoursInDay),\n pointerOffsetY = me.getPositionFromTime(zoomCenterTime) - scrollable.y;\n if (oldHourHeight !== newHourHeight) {\n // When the day layout has been done, keep the zoom center time still.\n me.ion({\n layoutUpdate : () => {\n scrollable.scrollTo(null, me.getPositionFromTime(zoomCenterTime) - pointerOffsetY);\n // Sync partners synchronously so there's no delay in a multi-view mode like ResourceView\n scrollable.syncPartners(false, true);\n resolve();\n },\n once : true,\n prio : 1000\n });\n // Zooming obviously breaks fitting the hours into the space.\n me.fitHours = false;\n // Invalidate the day layout\n me.hourHeight = newHourHeight;\n }\n else {\n resolve();\n }\n });\n }\n /**\n * Zooms the timeline by setting the {@link #property-hourHeight} to the requested pixel value.\n * @param {Number} newHourHeight The new {@link #property-hourHeight} in pixels.\n * @param {Number|String} [zoomCenter] The center time to zoom in to. This may be a number of pixels\n * down the DayView viewport, or it may be a time to use as the center in the format `HH:MM:ss`.\n * __If omitted, the visual center of the viewport is used__.\n *\n * Note that this will usually require a layout update which happens in the next animation frame\n * so to postprocess the new state of the view, the returned Promise must be awaited.\n * @async\n */\n zoomTo(newHourHeight, zoomCenter) {\n return this.zoomBy(newHourHeight - this.hourHeight, zoomCenter);\n }\n /**\n * Zooms to fit all visible events within the vertical scroll viewport.\n * @param {Object} [options] How to scroll.\n * @param {Number} [options.edgeOffset] edgeOffset A margin around the target to bring into view.\n * @param {Object|Boolean|Number} [options.animate] Set to `true` to animate the scroll by 300ms,\n * or the number of milliseconds to animate over, or an animation config object.\n * @param {Number} [options.animate.duration] The number of milliseconds to animate over.\n * @param {String} [options.animate.easing] The name of an easing function.\n * @returns {Promise} A promise which is resolved when the target has been scrolled into view.\n * @async\n */\n async zoomToFit(options) {\n const\n me = this,\n events = me.eventStore.getEvents({\n startDate : me.startDate,\n endDate : me.endDate,\n filter : e => !e.isInterDay\n }),\n [start, end] = events.reduce((r, e) => {\n // Round times to nearest half hour\n const\n startHour = DH.getTimeOfDay(DH.floor(e.startDate, '0.5h'), 'h'),\n endHour = DH.getTimeOfDay(DH.ceil(e.endDate, '0.5h'), 'h');\n return [(startHour < r[0]) ? startHour : r[0], (endHour > r[1]) ? endHour : r[1]];\n }, [24, 0]);\n await me.zoomTo(Math.floor(me.scrollable.clientHeight / (end - start)));\n await me.scrollTo(start, options);\n }\n createCellMap() {\n const { showAllDayHeader } = this;\n // We only want events which start and end *in* each date.\n // These will not propagate forwards anyway, so skip propagation.\n // By default filter by our dayFilter which skips events in non working days\n // and events outside of our configured start/end time range.\n // We must also honour any configured eventFilter\n return super.createCellMap({\n dayTime : this.dayTime,\n // Normally, DayView only displays intraday events, so only those which start *on*\n // the cell's date and only those which fit completely *inside* the cell's date.\n // showDayHeader flips those assumptions because all intersecting events need to\n // be collected because we have nowhere else to show interday events.\n startOnly : showAllDayHeader,\n allowPartial : !showAllDayHeader,\n skipPropagate : true,\n rawEvents : true,\n filter : this.cellMapEventFilter\n });\n }\n cellMapEventFilter(eventRecord) {\n const { dayTime, hiddenNonWorkingDays, showAllDayHeader } = this;\n // DayView rejects events which span days unless showAllDayHeader is false.\n // In which case we have to show them across multiple day cells.\n return (!showAllDayHeader || (dayTime.isIntraDay(eventRecord) && !eventRecord.allDay)) &&\n // Event is eligible if it's within our view's day start/end range\n dayTime.intersects(eventRecord) &&\n // AND it's not in a hidden nonworking day\n !hiddenNonWorkingDays[dayTime.dayOfWeek(eventRecord.startDate)];\n }\n getDayLength(as = 'ms') {\n return this.dayTime.duration(as);\n }\n changeIncrement(increment) {\n if (typeof increment === 'string') {\n increment = DH.parseDuration(increment);\n return DH.as('ms', increment.magnitude, increment.unit);\n }\n return increment;\n }\n get dayStartHour() {\n return this.dayStartTime == null ? 0 : Math.floor(this.dayStartTime / MILLIS_PER_HOUR);\n }\n get dayEndHour() {\n return this.dayEndTime == null ? 24 : Math.ceil(this.dayEndTime / MILLIS_PER_HOUR);\n }\n get dayStartMs() {\n return this.dayStartTime == null ? 0 : this.dayStartTime;\n }\n get dayEndMs() {\n return this.dayEndTime == null ? 24 * MILLIS_PER_HOUR : this.dayEndTime;\n }\n /**\n * This is the increment in milliseconds from the floored day start hour to the configured day start time.\n *\n * This is used to calculate the offset by which to move the timeAxis ticks when the start is not on an hour boundary.\n * @internal\n */\n get dayStartOffset() {\n return (this.dayTime.startTimeOffsetMs / MILLIS_PER_HOUR) * this.hourHeight;\n }\n changeEventFilter(filter) {\n if (filter === undefined) {\n filter = event => !this.isAllDayEvent(event);\n }\n return filter;\n }\n changeEventLayout(config, existing) {\n return DayLayout.reconfigure(existing, config, {\n owner : this,\n defaults : {\n owner : this\n }\n });\n }\n updateHideEmptyDays(hideEmptyDays) {\n if (!this.isConfiguring) {\n this._allDayEvents && (this._allDayEvents.hideEmptyDays = hideEmptyDays);\n }\n }\n updateNonWorkingDays(nonWorkingDays) {\n const me = this;\n super.updateNonWorkingDays?.(nonWorkingDays);\n me._allDayEvents && (me._allDayEvents.nonWorkingDays = nonWorkingDays);\n if (!me.isConfiguring) {\n me._cellMap?.clear();\n me.refresh();\n }\n }\n updateMaxAllDayHeight(maxAllDayHeight) {\n if (this.alldayRowElement) {\n DomHelper.setLength(this.alldayRowElement, 'max-height', maxAllDayHeight);\n }\n }\n get hideNonWorkingDays() {\n // Hiding non working days is only valid for multi day views\n return (this._hideNonWorkingDays === true && this.duration === 1) ? false : this._hideNonWorkingDays;\n }\n set hideNonWorkingDays(hideNonWorkingDays) {\n super.hideNonWorkingDays = hideNonWorkingDays;\n }\n updateHideNonWorkingDays(hideNonWorkingDays) {\n const\n me = this,\n { _allDayEvents } = me;\n super.updateHideNonWorkingDays(hideNonWorkingDays);\n // Pass out *property* here, because if we're a single day view, hideNonWorkingDays\n // always yields false. Hiding non working days is only valid for multi day views\n _allDayEvents && (_allDayEvents.hideNonWorkingDays = me.duration === 1 && !_allDayEvents.fullWeek ? false : me._hideNonWorkingDays);\n if (!me.isConfiguring) {\n me._cellMap?.clear();\n me.refresh();\n }\n }\n syncHours() {\n const me = this;\n me._cellMap?.clear();\n DomSync.sync({\n targetElement : me.timeAxisElement,\n domConfig : {\n onlyChildren : true,\n children : me.getTimeElementConfigs()\n }\n });\n // We need to update and measure immediately, before the refresh\n me.updateElementLayout.now();\n me.refresh();\n }\n syncCurrentTimeIndicator() {\n const\n me = this,\n now = me.calendar?.dateTimeNow || new Date(),\n dayElement = me.getDayElement(now),\n {\n currentTimeIndicator,\n dayTime,\n endDate,\n startDate\n } = me;\n if (startDate && endDate) {\n if (dayElement && DH.betweenLesser(now, startDate, endDate) && dayTime.contains(now)) {\n const\n dayLengthMs = me.getDayLength('ms'),\n nowMS = dayTime.delta(now, 'ms');\n if (currentTimeIndicator.parentNode !== dayElement) {\n dayElement?.appendChild(currentTimeIndicator);\n }\n currentTimeIndicator.style.top = DomHelper.percentify(nowMS / dayLengthMs * 100);\n }\n else {\n currentTimeIndicator.remove();\n }\n }\n }\n get currentTimeIndicator() {\n return this._currentTimeIndicator || (this._currentTimeIndicator = DomHelper.createElement(this.callback(this.currentTimeIndicatorRenderer, this)));\n }\n getTimeElementConfigs() {\n const\n me = this,\n result = [],\n { dayTime } = me,\n { startHour } = dayTime,\n date = new Date(2000, 5, 15, startHour, 0, 0),\n hours = dayTime.duration('h');\n for (let h, i = 1; i <= hours; i++) {\n // Ticks come from the previous hour.\n // The hour value is the ending tick of the hour cell\n const ticks = me.createLeafTicks(date);\n // Move to the ending hour\n date.setHours(h = (date.getHours() + 1));\n date.setMinutes(0);\n result.push({\n className : `b-dayview-timeaxis-time b-dayview-timeaxis-time-${h < 10 ? '0' : ''}${h}`,\n children : ticks.concat([{\n className : 'b-dayview-timeaxis-tick b-dayview-hour-tick',\n text : DH.format(date, me.timeFormat)\n }])\n });\n }\n // TimeAxis can only show the core hours if they are the same for every day\n if (me.coreHours && me._simpleCoreHours) {\n result.unshift({\n className : 'b-dayview-timeaxis-background',\n style : {\n backgroundImage : me.getCoreHoursGradient(me.coreHours)\n }\n });\n }\n return result;\n }\n createLeafTicks(date) {\n return this[this.sixMinuteTicks ? 'createSixMinuteTicks' : 'createFiveMinuteTicks'](date);\n }\n createFiveMinuteTicks(date) {\n const result = [];\n for (let i = 1; i < 12; i++) {\n date.setMinutes(i * 5);\n result.push({\n className : {\n 'b-dayview-timeaxis-tick' : 1,\n 'b-dayview-tick-level-4' : 1, // Five minutes\n 'b-dayview-tick-level-3' : !(i & 1), // Ten minutes\n 'b-dayview-tick-level-2' : !(i % 3), // Fifteen minutes\n 'b-dayview-tick-level-1' : i === 6 // Half hour\n },\n text : DH.format(date, this.timeFormat)\n });\n }\n return result;\n }\n createSixMinuteTicks(date) {\n const result = [];\n for (let i = 1; i < 10; i++) {\n date.setMinutes(i * 6);\n result.push({\n className : {\n 'b-dayview-timeaxis-tick' : 1,\n 'b-dayview-tick-level-3' : 1, // Six minutes\n 'b-dayview-tick-level-2' : !(i & 1), // Twelve minutes\n 'b-dayview-tick-level-1' : i === 5 // Half hour\n },\n text : DH.format(date, this.timeFormat)\n });\n }\n return result;\n }\n changeCoreHours(coreHours) {\n const me = this;\n // Same core hours for every day\n me._simpleCoreHours = ObjectHelper.isObject(coreHours) || (Array.isArray(coreHours) && coreHours.length !== 7);\n if (me._simpleCoreHours) {\n // In case we are sharing this via modeDefaults. We must own a copy\n coreHours = ObjectHelper.clone(coreHours);\n coreHours._overlayDay = coreHours.overlayDay;\n Object.defineProperty(coreHours, 'overlayDay', {\n set(v) {\n this._overlayDay = v;\n me.updateCoreHours();\n },\n get(v) {\n return this._overlayDay;\n }\n });\n }\n return coreHours;\n }\n updateCoreHours() {\n if (!this.isConfiguring) {\n this.syncHours();\n }\n }\n changeStartDate() {\n // Base class gets a chance to veto the change\n return this.dayOfDate(super.changeStartDate(...arguments));\n }\n updateStartDate(startDate) {\n // Keep all day row in time sync\n this._allDayEvents?.setConfig({\n startDate\n });\n super.updateStartDate(...arguments);\n }\n changeEndDate() {\n // Base class gets a chance to veto the change\n return this.dayOfDate(super.changeEndDate(...arguments));\n }\n updateEndDate(endDate) {\n super.updateEndDate?.(...arguments);\n // Keep all day row in time sync\n if (!this.updatingRange) {\n this._allDayEvents?.setConfig({\n date : this.date,\n endDate\n });\n }\n }\n changeMinDayWidth(minDayWidth) {\n // null must be returned to mean no minWidth because undefined signals no change.\n return typeof minDayWidth === 'number' ? Math.max(minDayWidth, 50) : typeof minDayWidth === 'string' ? minDayWidth : null;\n }\n updateMinDayWidth(minDayWidth) {\n this.element.style.setProperty('--min-day-width', minDayWidth ? DomHelper.setLength(minDayWidth) : null);\n this._allDayEvents && (this._allDayEvents.minDayWidth = minDayWidth);\n this.updateElementLayout();\n }\n updateHourHeight(hourHeight) {\n // Set up milestone height initially as half the hour Height, but at least 22px\n if (this.isConfiguring) {\n this.milestoneHeight = Math.max(Math.min(hourHeight / 2, this.shortEventHeight), 22);\n }\n this.milestoneDuration = 3600000 / (hourHeight / this.milestoneHeight);\n if (!this.isConfiguring) {\n this.shortEventDuration = 3600000 / (hourHeight / this.shortEventHeight);\n // All we need to do is recalculate our CSS properties and hour height class indicator\n this.updateElementLayout();\n // hourHeight may have changed, some events may change their b-short-event state\n if (this.fitHours) {\n this.refresh();\n }\n }\n }\n updateShortEventHeight(shortEventHeight) {\n this.updateHourHeight(this.hourHeight);\n }\n updateMinEventHeight(minEventHeight) {\n this.contentElement.style.setProperty('--dayview-min-event-height', DomHelper.setLength(minEventHeight));\n }\n get hourHeight() {\n // Order of the boolean expression is important:\n // We do not want to interrogate this.fitHours if we are configuring.\n return !this.isConfiguring && this.fitHours ? Math.max(this.dayContentClientHeight / this.getDayLength('hour'), this.minHourHeight) : this._hourHeight;\n }\n changeFitHours(fitHours) {\n if (fitHours?.minHeight) {\n // Set a hard minimum. Even a phone in portrait mode could show a schedule at 9px per hour\n this.minHourHeight = Math.max(fitHours.minHeight, 9);\n }\n else {\n // If they don't specify a minimum, we use 17.\n // Odd numbers are better. Avoids fractional pixels in background line generation.\n this.minHourHeight = 17;\n }\n return fitHours;\n }\n get dayContentClientHeight() {\n return DomHelper.floorPx(Rectangle.client(this.dayContentElement).height);\n }\n updateFitHours(fitHours) {\n const me = this;\n if (!me.isConfiguring) {\n // We only need to change the hourHeight if we are moving *to* fitting\n fitHours && (me.hourHeight = Math.max(me.dayContentClientHeight / me.getDayLength('hour'), me.minHourHeight));\n }\n me.element.classList.toggle('b-fit-hours', Boolean(fitHours));\n me.monitorResize = DomHelper.scrollBarWidth || fitHours;\n }\n updateEventSpacing() {\n if (!this.isConfiguring) {\n this._cellMap?.clear();\n this.refresh();\n }\n }\n onInternalPaint({ firstPaint }) {\n const\n me = this,\n {\n dayContainerElement,\n horizontalScrollerElement\n } = me,\n {\n scrollBarWidth\n } = DomHelper;\n if (firstPaint) {\n // This will be the first read of the allDayEvents property and will\n // trigger ingestion of allDayEvents and its upgrade into an instance of CalendarRow\n const { allDayEvents } = me;\n /**\n * A Scroller which encapsulates horizontal scrolling of the view in case a {@link #config-minDayWidth}\n * setting causes the days to overflow the available width.\n * @member {Core.helper.util.Scroller} horizontalScroller\n */\n me.horizontalScroller = new Scroller({\n widget : me,\n element : dayContainerElement,\n overflowX : scrollBarWidth ? 'hidden-scroll' : true,\n overflowY : 'clip',\n propagateSync : true,\n internalListeners : {\n overflowChange : 'updateElementLayout',\n thisObj : me\n }\n });\n if (allDayEvents) {\n allDayEvents.element.classList.remove('b-dayview-initializing');\n me.horizontalScroller.addPartner(allDayEvents.headerScroller);\n }\n ResizeMonitor.addResizeListener(me.dayContainerElement, me.onDayContainerResize.bind(me));\n // We need the scroller even if the UI is overlay scrollbars.\n // Because the scrollbar needs to be docked at the bottom while content scrolls.\n me.scrollbarScroller = new Scroller({\n widget : me,\n element : horizontalScrollerElement.firstChild,\n scrollWidth : dayContainerElement.scrollWidth - scrollBarWidth,\n overflowX : true,\n overflowY : false\n });\n me.horizontalScroller.addPartner(me.scrollbarScroller);\n me.refresh();\n me.updateElementLayout.now();\n me.setInterval(me.syncCurrentTimeIndicator.bind(me), 30 * 1000, 'syncCurrentTimeIndicator');\n if (allDayEvents) {\n EventHelper.on({\n click : {\n element : me.cornerElement,\n handler : 'onCornerClick'\n },\n // The scrollbar padding must not bubble any mousemove events to dragdrop.\n // This is because a mouseover of the allDay row *may*, if there are no\n // all day events, cause expansion of the allDay row, which *may* cause\n // vertical overflow, which *may* on some platforms cause this padding element\n // to pop into visibility below the cursor which would then cause\n // a dragleave.\n mousemove : {\n element : me.allDayEvents.element.nextSibling,\n handler : stopEvent,\n capture : true\n },\n thisObj : me\n });\n // If, through window resizing, or changing hourHeight, the scrollbar status flips\n // we have to run the scrollbar syncing.\n me.scrollable.ion({\n overflowChange : 'syncScrollbarPadding',\n thisObj : me\n });\n }\n me.scrollToVisibleStartTime();\n }\n }\n scrollToVisibleStartTime() {\n if (this.visibleStartTime != null) {\n const\n me = this,\n { scrollable } = me,\n startScrollPos = me.getPositionFromTime(me.visibleStartTime),\n doScroll = () => {\n scrollable.scrollTo(null, startScrollPos, {\n animate : false,\n block : 'start'\n });\n };\n // If at this startup phase, the scroll was not possible due to the clientHeight\n // being too high, it *may* become possible after the allDayEvents animates to\n // a new height because of its events, so wait a short time for that scenario.\n if (startScrollPos > scrollable.maxY && !me.scrollToStartTimer && me.allDayEvents) {\n me.scrollToStartTimer = me.allDayEvents.ion({\n heightChange : doScroll,\n once : true,\n expires : {\n delay : 5000,\n alt : doScroll\n },\n name : 'scrollToVisibleStartTime'\n });\n }\n else {\n doScroll();\n }\n }\n }\n relayAllDayEvents(event) {\n // Don't relay every type of event\n if (!blockedAllDayEvents[event.type]) {\n return this.trigger(event.eventName, event);\n }\n }\n async onCornerClick() {\n const { allDayEvents } = this;\n if (!allDayEvents.isAnimating) {\n await allDayEvents.toggleExpandCollapse();\n if (!this.isDestroyed) {\n this.allDayToggleIcon.dataset.btip = allDayEvents.expanded ? this.L('L{collapseAllDayRow}') : this.L('L{expandAllDayRow}');\n }\n }\n }\n syncScrollbarPadding() {\n // configuredHiddenVerticalScroll means that we must not show a scrollbar, so none of this\n // must execute. ResourceView uses this and docks a fake scroller at its trailing edge.\n // We only have anything to sync if we have an allDayEvents widget.\n if (!this.configuredHiddenVerticalScroll && this.allDayEvents) {\n if (DomHelper.scrollBarWidth) {\n if (!this.allDayEvents.isAnimating) {\n const\n {\n allDayEvents,\n alldayRowElement,\n scrollable\n } = this,\n fitHours = this.fitHours && scrollable.clientHeight / this.getDayLength('hour') >= this.minHourHeight,\n // fitHours means we'll never overflow\n hasOverflow = !fitHours && scrollable.hasOverflow(),\n {\n headerElement,\n scrollable : verticalScroller\n } = allDayEvents,\n expanded = allDayEvents.expanded || allDayEvents.autoHeight,\n // Will only have overflow if it's expanded\n allDayHasOverflow = Boolean(expanded && verticalScroller.hasOverflow());\n // Day view AND all day view both have vertical overflow.\n // Only the all day view *header* has to fake one to match.\n if (hasOverflow && allDayHasOverflow) {\n headerElement.classList.add('b-show-yscroll-padding');\n alldayRowElement.classList.remove('b-show-yscroll-padding');\n scrollable.overflowY = verticalScroller.overflowY = 'auto';\n }\n // Both in different overflowY states.\n else if (allDayHasOverflow !== hasOverflow) {\n // ONLY the all day view overflows, so allday *header* must show padding\n // and the day view must show a scrollbar\n if (allDayHasOverflow) {\n headerElement.classList.add('b-show-yscroll-padding');\n verticalScroller.overflowY = 'auto';\n scrollable.overflowY = 'scroll';\n }\n // ONLY the day view overflows, so that all day must show its scrollbar padding\n // But the all day header must not.\n else {\n headerElement.classList.remove('b-show-yscroll-padding');\n alldayRowElement.classList.add('b-show-yscroll-padding');\n verticalScroller.overflowY = 'hidden';\n scrollable.overflowY = !fitHours && 'auto';\n }\n }\n // Neither of the two views overflow\n else {\n alldayRowElement.classList.remove('b-show-yscroll-padding');\n headerElement.classList.remove('b-show-yscroll-padding');\n scrollable.overflowY = !fitHours && 'auto';\n verticalScroller.overflowY = 'hidden';\n }\n }\n }\n // If scrollbars are overlayed when scrolling we can always have the two views scrollable\n else {\n this.scrollable.overflowY = this.allDayEvents.scrollable.overflowY = 'auto';\n }\n }\n }\n onInternalResize(element, width, height, oldWidth, oldHeight) {\n const { _allDayEvents : allDayEvents } = this;\n super.onInternalResize(element, width, height, oldWidth, oldHeight);\n // Don't update on the initial render resize from no dimensions.\n // That is handled by onInternalPaint({ firstPaint })\n if (oldHeight) {\n allDayEvents?.performResizeRefresh(allDayEvents.eventsPerCell, allDayEvents.eventContainerTop);\n if (height !== oldHeight) {\n this.updateElementLayout();\n this.syncScrollbarPadding();\n }\n }\n }\n onThemeChange() {\n this.updateElementLayout();\n }\n // Only the day container *height* is of interest generally.\n // Unless we have had a minDayWidth set and we show scrollbars, in which case horizontal scrolling\n // may come and go and the horizontalScrollerElement which shows a scrollbar might need toggling.\n onDayContainerResize(el, { height : oldHeight } = {}, { height }) {\n if (oldHeight && (height !== oldHeight || (DomHelper.scrollBarWidth && this.minDayWidth))) {\n this.updateElementLayout();\n // Must recalculate the hour height if fitHours is set.\n if (this.fitHours) {\n this.updateFitHours(this.fitHours);\n }\n }\n }\n async updateElementLayout() {\n if (!this.refreshCount || this.owner?.isDestroyed) {\n return;\n }\n const\n me = this,\n {\n dayContainerElement,\n horizontalScrollerElement,\n horizontalScroller,\n allDayEvents\n } = me,\n dayElements = dayContainerElement.querySelectorAll('[data-date]'),\n { scrollBarWidth } = DomHelper;\n let i, end;\n // AllDayEVents expander needs to know whether there's overflow\n if (allDayEvents) {\n const cornerElementClassList = me.cornerElement.classList;\n if (allDayEvents.hasOverflow) {\n cornerElementClassList.add('b-has-cell-overflow');\n cornerElementClassList.toggle('b-expanded', Boolean(allDayEvents.expanded));\n }\n else {\n cornerElementClassList.remove('b-has-cell-overflow');\n }\n }\n // Hour lines now. We are in an AF.\n me.refreshDayBackground.now();\n for (i = 0, end = dayElements.length - 1; i <= end; i++) {\n dayElements[i].classList.toggle('b-last-cell', i === end);\n }\n // Hide/show the pseudo horizontal scrollbar that we show on scrollbar displaying platforms.\n if (allDayEvents) {\n me.syncScrollbarPadding();\n }\n if (scrollBarWidth) {\n horizontalScrollerElement.classList.toggle('b-show-yscroll-padding', me.scrollable.hasOverflow());\n }\n // Handle DayViews with zero days. These can be used as standalone TimeAxes.\n // Horizontal scrollbar has to be present if there's overflow even if scrollbars overlayed\n // in this case they are position:absolute.\n if (dayElements.length) {\n const\n r = Rectangle.from(dayElements[dayElements.length - 1], dayContainerElement),\n clientWidth = DomHelper.roundPx(Rectangle.client(dayContainerElement).width),\n scrollWidth = DomHelper.roundPx(me.rtl ? clientWidth - r.left : r.right - 1);\n // Forced synchronous layout here, but we need to ascertain horizontal overflow state\n if (scrollWidth > clientWidth) {\n horizontalScrollerElement.classList.remove('b-hide-display');\n me.scrollbarScroller.scrollWidth = scrollWidth;\n horizontalScroller.overflowX = 'hidden-scroll';\n }\n else {\n horizontalScrollerElement.classList.add('b-hide-display');\n me.scrollbarScroller.scrollWidth = null;\n horizontalScroller.overflowX = false;\n }\n }\n /**\n * Fires when this DayView changes an aspect of its layout. This happens when changing\n * {@link #property-hourHeight}, {@link #property-minDayWidth}, and when the available\n * day container height changes.\n * @event layoutUpdate\n * @param {Calendar.widget.DayView} source The triggering instance.\n */\n me.trigger('layoutUpdate');\n }\n refreshDayBackground() {\n const\n me = this,\n {\n contentElement,\n hourHeight,\n dayStartOffset,\n _hourHeightLevel,\n hourHeightLevel\n } = me,\n dayContentCls = me.dayContentElement.classList,\n dayLength = me.getDayLength('hour'),\n dayHeight = hourHeight * dayLength,\n halfHourHeight = (hourHeight - 2) / 2,\n fifteenMinuteHeight = (hourHeight - 4) / 4,\n twelveMinuteHeight = (hourHeight - 5) / 5,\n tenMinuteHeight = (hourHeight - 6) / 6,\n sixMinuteHeight = (hourHeight - 10) / 10,\n fiveMinuteHeight = (hourHeight - 12) / 12,\n contentElementStyle = contentElement.style,\n // Take the longest possible date and format it with the `timeFormat`, then estimate approximate space\n // required for the time.\n timeAxisWidth = Math.ceil(DH.format(widestDate, me.timeFormat).length / 2);\n dayContentCls.remove('b-dayview-hourheight-level-1', 'b-dayview-hourheight-level-2', 'b-dayview-hourheight-level-3', 'b-dayview-hourheight-level-4');\n hourHeightLevel.level && dayContentCls.add(`b-dayview-hourheight-level-${hourHeightLevel.level}`);\n contentElement.classList.toggle('b-six-minute-ticks', Boolean(me.sixMinuteTicks));\n // The allDayRow needs to know this width\n me.element.style.setProperty('--time-axis-width', `${timeAxisWidth}em`);\n contentElementStyle.setProperty('--day-length', dayLength);\n contentElementStyle.setProperty('--day-height', `${dayHeight}px`);\n contentElementStyle.setProperty('--hour-height', `${hourHeight}px`);\n contentElementStyle.setProperty('--half-hour-height', `${halfHourHeight}px`);\n contentElementStyle.setProperty('--fifteen-minute-height', `${fifteenMinuteHeight}px`);\n contentElementStyle.setProperty('--twelve-minute-height', `${twelveMinuteHeight}px`);\n contentElementStyle.setProperty('--ten-minute-height', `${tenMinuteHeight}px`);\n contentElementStyle.setProperty('--six-minute-height', `${sixMinuteHeight}px`);\n contentElementStyle.setProperty('--five-minute-height', `${fiveMinuteHeight}px`);\n contentElementStyle.setProperty('--leaf-tick-height', `${me.sixMinuteTicks ? sixMinuteHeight : fiveMinuteHeight}px`);\n contentElementStyle.setProperty('--day-start-offset', `${dayStartOffset}px`);\n if (hourHeightLevel.level !== _hourHeightLevel?.level) {\n /**\n * Triggered when changing the {@link #property-hourHeight} causes an\n * {@link #config-hourHeightBreakpoints hour height breakpoint} to be crossed\n * and the displayed subTick intervals in the time axis change.\n *\n * @event tickChange\n * @param {Object} old The old hour height tick resolution object.\n * @param {Number} old.level The level `0` to `4` where `0` is the default with no\n * subTick times displayed, and `4` means every 5 minute time is displayed.\n * @param {String} old.step The time duration of visible subTicks. This is a string in the format\n * required by {@link Core.helper.DateHelper#function-parseDuration-static}\n * @param {Object} new The new hour height tick resolution object.\n * @param {Number} new.level The level `0` to `4` where `0` is the default with no\n * subTick times displayed, and `4` means every 5 minute time is displayed.\n * @param {String} new.step The time duration of visible subTicks. This is a string in the format\n * required by {@link Core.helper.DateHelper#function-parseDuration-static}\n */\n me.trigger('tickChange', {\n old : _hourHeightLevel || hourHeightLevelZero,\n new : hourHeightLevel\n });\n }\n }\n updateSixMinuteTicks(sixMinuteTicks) {\n if (!this.isConfiguring) {\n this.updateElementLayout();\n }\n }\n changeHourHeightBreakpoints(hourHeightBreakpoints) {\n // Convert from 5.2.x object format\n if (!Array.isArray(hourHeightBreakpoints)) {\n return Object.values(hourHeightBreakpoints);\n }\n return hourHeightBreakpoints;\n }\n updateHourHeightBreakpoints() {\n if (!this.isConfiguring) {\n this.updateElementLayout();\n }\n }\n get hourHeightLevel() {\n const\n me = this,\n {\n hourHeight,\n hourHeightBreakpoints,\n sixMinuteTicks\n } = me,\n steps = sixMinuteTicks ? sixMinuteSteps : fiveMinuteSteps;\n // Convert object format\n for (let i = sixMinuteTicks ? 2 : 3; i >= 0; i--) {\n if (hourHeight >= hourHeightBreakpoints[i]) {\n return me._hourHeightLevel = {\n level : i + 1,\n step : steps[i]\n };\n }\n }\n return me._hourHeightLevel = hourHeightLevelZero;\n }\n updateLocalization() {\n if (!this.isConfiguring && this.allDayTextElement) {\n DomSync.sync({\n targetElement : this.allDayTextElement,\n domConfig : {\n html : this.L('L{EventEdit.All day}')\n }\n });\n }\n super.updateLocalization();\n }\n}\nDayView.initClass();\nDayView._$name = 'DayView';", "import DateHelper from '../../Core/helper/DateHelper.js';\nimport CalendarRow from './CalendarRow.js';\n/**\n * @module Calendar/widget/DayResourceCalendarRow\n */\n/**\n * This is normally used as the \"All day events\" section of a {@link Calendar.widget.DayResourceView}.\n * It is not designed to be used standalone as a regular Widget.\n *\n * A Widget which displays date and resource headers, and all day events at the top of a\n * {@link Calendar.widget.DayResourceView}.\n *\n * Cell rendering can be customized using the {@link #config-dayCellRenderer} method.\n *\n * Event rendering can be customized using the {@link #config-eventRenderer} method.\n *\n * {@inlineexample Calendar/widget/DayResourceView.js}\n *\n * @demo Calendar/date-resource\n *\n * @extends Calendar/widget/CalendarRow\n * @classtype dayresourcecalendarrow\n */\nexport default class DayResourceCalendarRow extends CalendarRow {\n static $name = 'DayResourceCalendarRow';\n // Factoryable type name\n static type = 'dayresourcecalendarrow';\n static configurable = {\n /**\n * Configure as `true` to show avatars of the resources (calendars) alongside\n * resource names in resource column headers.\n *\n * Configure as `'last'` to show avatars of the assigned resources (calendars) after the name.\n *\n * Note that you must set {@link #config-resourceImagePath} in order that the system\n * knows where to access the resource's image file from.\n *\n * If no image is set, or the image is not found, the resource's initials are shown instead.\n *\n * By default it is inherited from the owning Calendar:\n * ```javascript\n * new Calendar({\n * resourceImagePath : 'images/resources/'\n * modes : {\n * dayresource : {\n * showHeaderAvatars : true,\n * }\n * }\n * });\n * ```\n * @config {Boolean|'last'}\n * @default\n */\n showHeaderAvatars : true,\n responsive : {\n // We can use \"large\" formats here because the cell will be wide\n // to accommodate multiple resources.\n small : {\n dayNameFormat : 'ddd',\n dayNumberCompress : false\n }\n },\n autoRefresh : [\n 'hideEmptyResources'\n ],\n /**\n * Configure this as `true` to hide resource columns which contain no events.\n *\n *
Use with care. This may result in no resource columns being rendered\n * for completely empty dates.
\n * @prp {Boolean}\n * @default false\n */\n hideEmptyResources : null\n };\n get eventContentElement() {\n return this.bodyElement;\n }\n // Dragging can drag to the resource header cells. This view does not need to open\n // up temporarily to accept a drop gesture\n expandGutter() {}\n get viewResources() {\n const\n me = this,\n { resourceStore } = me,\n resourceFilter = me.calendar?.widgetMap.resourceFilter;\n return resourceFilter ? resourceStore.records.filter(c => resourceFilter.value.includes(c)) : resourceStore.records;\n }\n onCellOverflowGesture({ resourceRecord, date }) {\n const\n cellData = this.cellMap.get(DateHelper.makeKey(date)),\n { renderedEvents } = cellData;\n cellData.renderedEvents = renderedEvents.filter(e => e.eventRecord.resources?.includes(resourceRecord));\n super.onCellOverflowGesture(...arguments);\n cellData.renderedEvents = renderedEvents;\n }\n getCellFromEvent(domEvent) {\n return domEvent.target.closest('.b-calendar-cell[data-date] [data-resource-id]');\n }\n createCellMap() {\n const\n cellMap = super.createCellMap(...arguments),\n { viewResources } = this;\n // We need to recalculate maxEventCount due to them being split and stacked by resource\n this.maxEventCount = 0;\n cellMap.forEach(cellData => {\n for (let i = 0, { length } = viewResources; i < length; i++) {\n // Filter down day's events to only those for this resource to calculate max stacking height\n this.maxEventCount = Math.max(this.maxEventCount, cellData.renderedEvents.filter(e => e.eventRecord.resources?.includes(viewResources[i])).length);\n }\n });\n return cellMap;\n }\n getCellDomConfig(cellData) {\n const\n me = this,\n {\n viewResources,\n eventsPerCell,\n showHeaderAvatars,\n hideEmptyResources\n } = me,\n renderedEvents = cellData.renderedEvents,\n bodyChildren = [],\n today = me.dayTime.startOfDay(me.calendar?.dateTimeNow || new Date()),\n isToday = cellData.date.getTime() === today.getTime(),\n {\n maxRow,\n day\n } = cellData,\n nonWorkingDays = me.nonWorkingDays || me.month.nonWorkingDays,\n dayEvents = hideEmptyResources && (me.owner?.getEventsForDay(cellData.key, me.startDate) || renderedEvents),\n // If we are hiding empty resource columns, filter down visibleResources to only those resources\n // which have events for this day\n visibleResources = hideEmptyResources ? viewResources.reduce((result, resource) => {\n const resourceEvents = dayEvents.filter(e => e.resources?.includes(resource));\n if (resourceEvents.length) {\n result.push(resource);\n }\n return result;\n }, []) : viewResources;\n me.weekLength = 1;\n // One sub-column for each resource\n for (let i = 0, { length } = visibleResources; i < length; i++) {\n // Filter down day's events to only those for this resource column\n cellData.renderedEvents = renderedEvents.filter(e => e.eventRecord.resources?.includes(visibleResources[i]));\n // There is only one column in this view. It is a single day column.\n cellData.visibleColumnIndex = cellData.columnIndex = 0;\n cellData.maxRow = cellData.renderedEvents.length > eventsPerCell ? maxRow : eventsPerCell;\n const dayCell = super.getCellDomConfig(cellData);\n dayCell.children[1].dataset = {\n resourceId : visibleResources[i].id\n };\n // We only need the cell content\n bodyChildren.push({\n className : 'b-resourcecalendarrow-column-resource-cell',\n dataset : {\n resourceId : visibleResources[i].id\n },\n children : [\n dayCell.children[1],\n // Add the overflow button\n cellData.hasOverflow && cellData.renderedEvents.length > eventsPerCell ? dayCell.children[2] : null\n ]\n });\n }\n // Restore day's full event load\n cellData && (cellData.renderedEvents = renderedEvents);\n if (visibleResources.length || !hideEmptyResources) {\n // A single day's column encapsulates all resources.\n // The outer element becomes the content cell.\n // children[0] is extracted to use as the header cell.\n const result = {\n className : {\n 'b-dayresourcecalendarrow-column' : 1\n },\n style : {\n '--visible-resource-count' : visibleResources.length\n },\n children : [{\n style : {\n // This element is extracted into the event content element\n // so it does not inherit --visible-resource-count in the final DOM structure\n '--visible-resource-count' : visibleResources.length\n },\n className : {\n 'b-dayresource-allday' : 1,\n 'b-cal-cell-header' : 1,\n [me.todayCls] : isToday,\n [me.nonWorkingDayCls] : nonWorkingDays[day] || false,\n [me.weekendCls] : DateHelper.weekends[day],\n [`b-day-of-week-${day}`] : 1\n },\n children : [{\n className : {\n 'b-dayname-date' : 1\n }\n }, ...visibleResources.map(r => {\n return {\n className : {\n 'b-dayresourcecalendarrow-resource-header' : 1,\n 'b-avatar-after' : showHeaderAvatars === 'last'\n },\n children : [\n showHeaderAvatars ? me.getResourceAvatar(r) : null,\n {\n className : 'b-dayresourcecalendarrow-resource-name',\n text : me.resourceHeaderRenderer(r)\n }\n ],\n dataset : {\n resourceId : r.id\n }\n };\n })]\n },\n ...bodyChildren\n ],\n dataset : {}\n };\n me.addCellHeaderContent(result.children[0].children[0], cellData);\n return result;\n }\n }\n updateMinResourceWidth(minResourceWidth) {\n const\n {\n scrollable,\n headerScroller\n } = this;\n this.element.style.setProperty('--cell-container-overflow', minResourceWidth ? 'visible' : 'hidden');\n if (minResourceWidth) {\n // Overflow 'hidden-scroll' is a special Scroller setting.\n // With overlayed scrollbars it just means 'auto'\n // With space-consuming scrollbars, it hides scrollbars using CSS while using auto.\n // But if the two axes scroll, then both scrollbars should not be hidden so it will\n // fall back to using overflow:hidden and a `wheel` listener.\n scrollable.overflowX = headerScroller.overflowX = 'hidden-scroll';\n }\n else {\n scrollable.overflowX = headerScroller.overflowX = false;\n }\n }\n resourceHeaderRenderer(resource) {\n return resource.name;\n }\n updateShowHeaderAvatars(showHeaderAvatars) {\n if (showHeaderAvatars) {\n // We need the AvatarRendering utility if we are showing avatars.\n this.avatarRendering || (this.avatarRendering = true);\n }\n this.refresh();\n }\n // This is never fullWeek\n changeFullWeek() {}\n}\nDayResourceCalendarRow.initClass();\nDayResourceCalendarRow._$name = 'DayResourceCalendarRow';", "import DayView from './DayView.js';\nimport './DayResourceCalendarRow.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\n/**\n * @module Calendar/widget/DayResourceView\n */\n/**\n * A calendar view showing resources grouped by date, it is normally used as a {@link Calendar.view.Calendar#config-modes mode}\n * of a Calendar but may be used standalone as a regular Widget.\n *\n * By default, it shows a one week range encapsulating the Calendar's current {@link Calendar.view.Calendar#property-date}.\n * This can be configured using the {@link #config-range} config property.\n *\n * {@inlineexample Calendar/widget/DayResourceView.js}\n *\n * @demo Calendar/date-resource\n *\n * @extends Calendar/widget/DayView\n * @classtype dayresource\n * @typingswidget\n */\nexport default class DayResourceView extends DayView {\n static $name = 'DayResourceView';\n static type = 'dayresource';\n static configurable = {\n /**\n * The minimum width of a resource column. This must be a non-zero value to ensure that space\n * is allocated even when there are many resources and a narrow viewport.\n *\n * The default value is `4em`\n *\n * If the day columns columns overflow the horizontal space available, the columns\n * will be scrollable horizontally in the normal way.\n *\n * There is a {@link #property-horizontalScroller} property which handles scrolling in this\n * dimension.\n * @prp {Number|String}\n */\n minResourceWidth : '4em',\n /**\n * By default, resource avatars are shown in the resource header if there is horizontal space.\n * Configure this as `false` to inhibit this.\n * @prp {Boolean}\n */\n showAvatars : true,\n title : 'L{dayResourceView}',\n allDayEvents : {\n type : 'dayresourcecalendarrow'\n },\n range : '1w',\n /**\n * Configure as `true` to show avatars of the resources (calendars) alongside\n * resource names in resource column headers.\n *\n * Configure as `'last'` to show avatars of the assigned resources (calendars) after the name.\n *\n * Note that you must set {@link #config-resourceImagePath} in order that the system\n * knows where to access the resource's image file from.\n *\n * If no image is set, or the image is not found, the resource's initials are shown instead.\n *\n * By default it is inherited from the owning Calendar:\n * ```javascript\n * new Calendar({\n * resourceImagePath : 'images/resources/'\n * modes : {\n * dayresource : {\n * showHeaderAvatars : true,\n * }\n * }\n * });\n * ```\n * @config {Boolean|'last'}\n */\n showHeaderAvatars : true,\n autoRefresh : [\n 'hideEmptyResources'\n ],\n /**\n * Configure this as `true` to hide resource columns which contain no events.\n *\n *
Use with care. This may result in no resource columns being rendered\n * for completely empty dates.
\n * @prp {Boolean}\n * @default false\n */\n hideEmptyResources : null\n };\n changeAllDayEvents() {\n const result = super.changeAllDayEvents(...arguments);\n if (result) {\n result.hideEmptyResources = this.hideEmptyResources;\n }\n return result;\n }\n checkAutoCreateGesture(domEvent, date, resourceRecord) {\n if (resourceRecord) {\n return super.checkAutoCreateGesture(...arguments);\n }\n }\n // Called as an onFunction by updateElementLayout triggering 'layoutUpdate'.\n onLayoutUpdate() {\n this.syncNarrowResourceWidth();\n super.onLayoutUpdate?.(...arguments);\n }\n onDayContainerResize() {\n this.syncNarrowResourceWidth();\n return super.onDayContainerResize?.(...arguments);\n }\n syncNarrowResourceWidth() {\n const resourceHeader = this.element.querySelector('.b-dayresourcecalendarrow-resource-header');\n if (resourceHeader) {\n this.allDayEvents.element.classList.toggle('b-narrow-resource-header', resourceHeader.offsetWidth < 100);\n }\n }\n updateHideEmptyResources(hideEmptyResources) {\n if (!this.isConfiguring) {\n this._allDayEvents && (this._allDayEvents.hideEmptyResources = hideEmptyResources);\n }\n }\n changeMinResourceWidth(minResourceWidth) {\n // Falsy/zero means use class default\n return minResourceWidth || this.constructor.configurable.minResourceWidth;\n }\n updateMinResourceWidth(minResourceWidth) {\n this.element.style.setProperty('--min-resource-width', DomHelper.setLength(minResourceWidth));\n this.updateElementLayout();\n this.allDayEvents?.updateMinResourceWidth(minResourceWidth);\n }\n updateShowHeaderAvatars(showHeaderAvatars) {\n const { allDayEvents : a } = this;\n if (a) {\n a.resourceImagePath = this.resourceImagePath;\n a.showHeaderAvatars = showHeaderAvatars;\n }\n }\n updateWeekStartDay(weekStartDay, oldWeekStartDay) {\n super.updateWeekStartDay?.(weekStartDay);\n if (!this.isConfiguring) {\n const startDate = new Date(this.startDate);\n startDate.setDate(startDate.getDate() + weekStartDay - oldWeekStartDay);\n this.startDate = startDate;\n }\n }\n // Override from DayView.\n // This returns a DayView day column config for each resource\n getDayDomConfig(date) {\n const\n me = this,\n {\n hideEmptyDays,\n hideEmptyResources\n } = me,\n key = me.dayTime.dateKey(date),\n day = date.getDay(),\n eventsForDate = (hideEmptyDays || hideEmptyResources) && me.getEventsForDay(key),\n // Skip hidden, nonworking days (unless we're a single day view).\n // Skip empty days if configured to do so.\n skipDay = (me.hiddenNonWorkingDays[day] && me.duration !== 1) || (hideEmptyDays && !eventsForDate.length);\n // Return nullish for skipped days.\n if (!skipDay) {\n const\n key = me.dayTime.dateKey(date),\n cellData = me.cellMap.get(key) || me.createCellData(date),\n events = cellData.events,\n children = [],\n {\n calendar,\n resourceStore\n } = me,\n resourceFilter = calendar?.widgetMap.resourceFilter,\n resources = resourceFilter ? resourceStore.records.filter(c => resourceFilter.value.includes(c)) : resourceStore.records;\n // One sub-column for each resource\n for (let i = 0, { length } = resources, dayColumn; i < length; i++) {\n const\n resource = me.resource = resources[i],\n filterResources = e => e.resources?.includes(resource);\n // Various renderers detect whether the view owns a Resource.\n // While processing a resource column for this day, we must own that resource.\n me.resourceId = resource.id;\n // Filter down day's events to only those for this resource column\n cellData.events = events.filter(filterResources);\n // Skip the resource if it's empty and we are configured to skip empty resources\n if (!hideEmptyResources || eventsForDate.filter(filterResources).length) {\n // The super call must not process hideEmptyDays. We might have just filtered\n // cellData.events to empty if current resource has no events for the day.\n me._hideEmptyDays = false;\n dayColumn = super.getDayDomConfig(date);\n me._hideEmptyDays = hideEmptyDays;\n delete dayColumn.dataset.date;\n dayColumn.dataset.resourceId = resource.id;\n children.push(dayColumn);\n }\n // We only own a resource when creating a resource column for a day\n me.resource = me.resourceId = null;\n }\n // Restore day's full event load\n cellData.events = events;\n // A single day's column encapsulates all resources.\n // Do not return a DomSync object if all resources have been skipped as empty.\n if (children.length || !hideEmptyResources) {\n return {\n className : {\n 'b-dayresourceview-column' : 1,\n [`b-day-of-week-${cellData.day}`] : 1\n },\n dataset : {\n date : key\n },\n children\n };\n }\n }\n }\n}\nDayResourceView.initClass();\nDayResourceView._$name = 'DayResourceView';", "import Fencible from '../../Core/mixin/Fencible.js';\nimport Button from '../../Core/widget/Button.js';\nimport ButtonGroup from '../../Core/widget/ButtonGroup.js';\nimport MenuItem from '../../Core/widget/MenuItem.js';\nimport Container from '../../Core/widget/Container.js';\nimport Minifiable from '../../Core/widget/mixin/Minifiable.js';\nimport Responsive from '../../Core/widget/mixin/Responsive.js';\nimport '../../Core/widget/layout/Box.js';\n/**\n * @module Calendar/widget/ModeSelector\n */\n/**\n * Displays the set of calendar modes. The modes can be displayed as a {@link Core.widget.ButtonGroup} or a single\n * {@link Core.widget.Button} with a {@link Core.widget.Button#config-menu}. Which presentation is used depends on\n * the {@link #config-minified} config property. By default, this is set\n * {@link Core.widget.mixin.Responsive#config-responsive responsively} in order to present the best UI for different\n * screen sizes.\n *\n * @extends Core/widget/Container\n * @classtype calendarModeSelector\n * @widget\n */\nexport default class ModeSelector extends Container.mixin(Fencible, Minifiable, Responsive) {\n //region Config\n static $name = 'ModeSelector';\n static type = 'calendarmodeselector';\n static configurable = {\n // Since Minifiable is @internal for now\n /**\n * Set to `false` to prevent this widget from assuming is {@link #config-minified} form automatically (for\n * example, due to {@link Core.widget.Toolbar#config-overflow} handling.\n *\n * When this value is `true` (the default), the minifiable widget's {@link #config-minified} config may be\n * set to `true` to reduce toolbar overflow.\n *\n * @config {Boolean}\n * @default\n */\n minifiable : true,\n /**\n * The config property that will be used as the readable title for each mode.\n * @config {String}\n * @default\n */\n titleProperty : 'title',\n /**\n * Set to `true` to present this widget in its minimal form.\n * @config {Boolean}\n * @default false\n */\n minified : null,\n /**\n * The button or button config object that will display a popup menu to select the calendar mode.\n * @config {Core.widget.Button}\n */\n button : {\n type : 'button',\n icon : 'b-icon-calendar-days', // avoid b-icon-menu since toolbar overflow also uses that icon\n cls : 'b-calendar-mode-button',\n menuIcon : null,\n menu : [],\n internalListeners : {\n beforeShowMenu : 'up.onBeforeFirstShowModeMenu',\n once : true\n }\n },\n /**\n * The button group or button group config object that will display the calendar modes, one per button.\n * @config {Core.widget.ButtonGroup}\n */\n buttonBar : {\n type : 'buttongroup',\n ignoreParentReadOnly : true\n },\n calendar : {\n value : 'calendar',\n $config : 'lazy'\n },\n includeWeekendsButton : {\n $config : 'lazy',\n value : {\n type : 'button',\n cls : 'b-calendar-fullweek-button',\n toggleGroup : `no`, // so ButtonGroup does not take over\n text : 'L{ModeSelector.weekends}',\n tooltip : 'L{ModeSelector.includeWeekends}',\n onToggle : 'up.onToggleWorkingDaysButton',\n weight : -1\n }\n },\n includeWeekendsMenuItem : {\n $config : 'lazy',\n value : {\n separator : true,\n text : 'L{ModeSelector.includeWeekends}',\n checked : false,\n onToggle : 'up.onToggleWorkingDaysMenu',\n weight : 10\n }\n },\n layout : {\n type : 'box',\n wrap : false\n },\n overflowable : 'none',\n responsive : {\n large : {\n // Allow toolbar overflow to kick us into minified state\n minifiable : true,\n minified : null\n },\n '*' : {\n // Don't allow toolbar overflow to kick us out of minified state\n minifiable : false,\n minified : true\n }\n },\n responsiveTarget : '@calendar'\n };\n static fenced = {\n onToggleButton : true,\n onToggleMenuItem : true,\n syncFullWeek : true,\n syncActiveMode : {\n all : 'syncActiveMode',\n lock : ['onToggleButton', 'onToggleMenuItem', 'syncActiveMode']\n }\n };\n get hideNonWorkingDays() {\n return this.calendar?.hideNonWorkingDays;\n }\n set hideNonWorkingDays(value) {\n const { calendar } = this;\n // If the current value of calendar.hideNonWorkingDays is null, it is acting as false, so don't bother to\n // set it if value is also false. If we do, that would push the value down to each mode which would mask a\n // value that may be set directly on the child view.\n if (calendar && !(!value && calendar.hideNonWorkingDays == null)) {\n calendar.hideNonWorkingDays = value;\n }\n }\n changeIncludeWeekendsButton(config, existing) {\n const\n me = this,\n includeWeekendsButton = config && me.calendar?.includeWeekendsButton;\n if (includeWeekendsButton) {\n // Calendar may have false/null for its config but we ignore such values. In that case, the button will be\n // hidden by CSS rules (not destroyed)\n config = Button.mergeConfigs(config, includeWeekendsButton);\n }\n if (config && !existing) {\n return me.add(config);\n }\n return Button.reconfigure(existing, config, /* owner = */me);\n }\n updateIncludeWeekendsButton(includeWeekendsButton) {\n if (includeWeekendsButton) {\n includeWeekendsButton.toggleGroup = null;\n }\n this.syncFullWeek();\n }\n changeIncludeWeekendsMenuItem(config, existing) {\n const menu = this?.button?.menu;\n if (config && !existing) {\n return menu?.add(config);\n }\n return MenuItem.reconfigure(existing, config, /* owner = */menu);\n }\n updateIncludeWeekendsMenuItem() {\n this.syncFullWeek();\n }\n onBeforeFirstShowModeMenu({ menu }) {\n const\n me = this,\n { calendar } = me,\n { activeView } = calendar,\n modes = Object.values(calendar.modes);\n let menuItem, mode;\n for (mode of modes) {\n menuItem = mode.$modeMenuItem;\n menu.add(menuItem);\n // We cannot set the check state until after adding to the menu or else we will fail to find the correct\n // rootElement and toggle group\n menuItem.checked = mode === activeView;\n // Wire up handler after setting \"checked\" (we don't want to be called as we set things up)\n menuItem.onToggle = 'up.onToggleMenuItem';\n }\n me.getConfig('includeWeekendsMenuItem');\n me.syncFullWeek();\n me.menuReady = true;\n }\n addMode(name, view, options) {\n const\n me = this,\n { buttonBar } = me,\n text = view[me.titleProperty] || view.displayName || view.type,\n // We cannot add items to the menu at this time because the menu will not be assigned to a rootElement\n // as yet which is problematic for floated widgets. So, instead we create the MenuItem widgets and attach\n // them to their view and add them to the button's menu just before it is shown.\n // NOPE - menuItem = me.button.menu.add(MenuItem.mergeConfigs({\n menuItem = view.$modeMenuItem = MenuItem.reconfigure(view.$modeMenuItem, MenuItem.mergeConfigs({\n type : MenuItem,\n view, // Button carries a reference to the view it shows\n ref : `${name}ShowMenuItem`,\n checked : false,\n closeParent : true,\n toggleGroup : `${me.id}-modeSelectorMenuItem`,\n localizable : false,\n text,\n weight : 0\n }, options)),\n button = buttonBar.add(Button.mergeConfigs({\n view, // Button carries a reference to the view it shows\n ref : `${name}ShowButton`,\n toggleGroup : `${me.id}-modeSelectorButton`,\n text,\n localizable : false,\n onBeforeToggle : 'up.onBeforeToggleButton',\n onToggle : 'up.onToggleButton',\n weight : 0\n }, options));\n me.getConfig('includeWeekendsButton');\n view.ion({\n thisObj : me,\n localized() {\n button.text = view.displayName;\n menuItem.text = view.displayName;\n }\n });\n }\n onBeforeToggleButton({ pressed }) {\n // Effectively disable button toggling during animated card change\n if (pressed && this.calendar.viewContainer.layout.isChangingCard) {\n return false;\n }\n }\n onToggleButton({ source, pressed }) {\n if (pressed) {\n this.calendar.mode = source.view;\n }\n }\n updateDisabled(disabled) {\n // When disabling, disable all buttons except the one that just got pressed - the focused one.\n this.buttonBar.items.forEach(button => {\n if (!disabled || !button.containsFocus) {\n button.disabled = disabled;\n }\n });\n }\n onToggleMenuItem({ source, checked }) {\n if (checked) {\n this.calendar.mode = source.view;\n }\n }\n onToggleWorkingDaysButton({ pressed }) {\n this.hideNonWorkingDays = !pressed;\n }\n onToggleWorkingDaysMenu({ checked }) {\n this.hideNonWorkingDays = !checked;\n }\n syncActiveMode(activeView) {\n const\n me = this,\n buttons = me.buttonBar.items;\n let item;\n me.button.text = activeView.displayName;\n me.includeWeekendsButton.hidden = !activeView.hasNonWorkingDays;\n me.syncFullWeek();\n // These loops would call onToggleButton/MenuItem if it weren't for Fencible\n for (item of buttons) {\n if (item.view) {\n item.pressed = item.view === activeView;\n }\n }\n if (me.menuReady) {\n for (item of me.button.menu.items) {\n if (item.view?.$modeMenuItem === item) { // if (a calendar mode item)\n item.checked = item.view === activeView;\n }\n }\n }\n // Don't show the mode selector if there's only one view\n me[buttons.length > 1 ? 'show' : 'hide']();\n }\n syncFullWeek() {\n const\n {\n calendar,\n hideNonWorkingDays,\n _includeWeekendsButton : includeWeekendsButton,\n _includeWeekendsMenuItem : includeWeekendsMenuItem\n } = this,\n fullWeek = !hideNonWorkingDays;\n if (!calendar.isConfiguring) {\n if (includeWeekendsButton) {\n includeWeekendsButton.pressed = fullWeek;\n }\n if (includeWeekendsMenuItem) {\n includeWeekendsMenuItem.checked = fullWeek;\n }\n }\n }\n changeButton(config, existing) {\n return Button.reconfigure(existing, config);\n }\n updateButton(button) {\n button && this.add(button);\n }\n changeButtonBar(config, existing) {\n return ButtonGroup.reconfigure(existing, config);\n }\n updateButtonBar(buttonBar) {\n buttonBar && this.add(buttonBar);\n }\n changeCalendar(calendar) {\n if (calendar && !calendar.isWidget) {\n calendar = this.up(calendar);\n }\n return calendar;\n }\n updateCalendar(calendar) {\n this.detachListeners('cal');\n this.syncFullWeek();\n calendar?.ion({\n name : 'cal',\n changeHideNonWorkingDays : 'syncFullWeek',\n thisObj : this\n });\n }\n}\n// Register this feature type with its Factory\nModeSelector.initClass();\nModeSelector._$name = 'ModeSelector';", "import CalendarMixin from './mixin/CalendarMixin.js';\nimport DayCellCollecter from './mixin/DayCellCollecter.js';\nimport DayCellRenderer from './mixin/DayCellRenderer.js';\nimport CalendarPanel from '../../Core/widget/CalendarPanel.js';\nimport DH from '../../Core/helper/DateHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport Scroller from '../../Core/helper/util/Scroller.js';\nimport EventHelper from '../../Core/helper/EventHelper.js';\nimport EventSorter from '../util/EventSorter.js';\n/**\n * @module Calendar/widget/MonthView\n */\nconst\n evRegexp = /^(\\d+)ev$/,\n expandGestures = {\n shrinkwrap : 1,\n expand : 1\n };\n/**\n * This is normally used as a {@link Calendar.view.Calendar#config-modes mode} of a Calendar (as seen in the live\n * demo below) but may be used standalone as a regular Widget.\n *\n * {@inlineexample Calendar/widget/CalendarMonthView.js}\n *\n * As a standalone widget, it will lack the capabilities of the {@link Calendar.view.Calendar Calendar}\n * class, such as keyboard-based event to event navigation and drag/drop features. As seen in this demo:\n *\n * {@inlineexample Calendar/widget/MonthView.js}\n *\n * A Panel which displays a single month in a calendar like view.\n *\n * Cell rendering can be customized using the {@link #config-dayCellRenderer} method.\n *\n * Event rendering can be customized using the {@link Calendar.widget.mixin.EventRenderer#config-eventRenderer} method.\n *\n * @extends Core/widget/CalendarPanel\n * @mixes Core/widget/mixin/Responsive\n * @mixes Calendar/widget/mixin/DayCellCollecter\n * @mixes Calendar/widget/mixin/DayCellRenderer\n * @mixes Calendar/widget/mixin/CalendarMixin\n * @classtype monthview\n * @classtypealias month\n * @typingswidget\n */\nexport default class MonthView extends CalendarPanel.mixin(CalendarMixin, DayCellCollecter, DayCellRenderer) {\n static $name = 'MonthView';\n static type = 'monthview';\n static get configurable() {\n return {\n eventSorter : EventSorter.interDaySorterFn,\n localizableProperties : ['title', 'stepUnit'],\n title : 'L{Month}',\n stepUnit : 'L{monthUnit}',\n dragUnit : 'day',\n localeClass : this,\n descriptionFormat : 'MMMM, YYYY',\n dayNumberCentered : null,\n /**\n * The height of event bars in this view. This can be a numeric value in pixels or a CSS unit measure such\n * as `'2em'`.\n * @config {Number|String}\n * @default\n */\n eventHeight : 20,\n minHeight : 485,\n /**\n * By default, weeks rows all flex to share the available height equally.\n *\n * To make them shrinkwrap their events to show all events in every row, configure this as `true`\n * @prp {Boolean}\n * @default false\n */\n autoRowHeight : {\n $config : 'lazy',\n value : false\n },\n /**\n * By default, rows which have been modified by the {@link Calendar.feature.WeekExpander}\n * feature, __not by the {@link #config-autoRowHeight} setting__, to shinkwrap large content\n * are reset to flexed height on month change.\n *\n * To have rows persist their shrinkwrapped status across month changes, confgure this as `true`.\n *\n * If {@link #config-autoRowHeight} is set, then the new month always has auto heighted rows.\n * @prp {Boolean}\n * @default false\n */\n persistShrinkWrappedRows : null,\n /**\n * The maximum number of events to show in a cell when the row is shrinkwrapped.\n * Use this to keep rows to a sane size when using {@link #config-autoRowHeight},\n * or the {@link Calendar.feature.WeekExpander} feature.\n * @config {Number}\n * @default\n */\n maxEventsPerCell : 100,\n /**\n * By default, week rows flex to share available Panel height equally.\n *\n * This may be configured as a number, in which case it means pixels, or a CSS length.\n *\n * The non-standard unit `ev` may also be specified to mean \"events\". For example\n * `'3ev'` means rows will always be three events bars (plus the day header)\n * tall.\n *\n * This is a useful config when using {@link #config-autoRowHeight}, or using\n * {@link #config-overflowClickAction} when rows may be switched to shrinkwrapping\n * their event content and may shrink in height.\n *\n * Setting this config causes the month grid to become scrollable in the `Y` axis.\n * @config {Number|String}\n */\n minRowHeight : null,\n /**\n * How the view responds to clicking on a `+n more` button in an overflowing day cell.\n *\n * The default value, `'popup'`, means that a small dialog box showing the full complement\n * of events for that cell is shown aligned to the cell.\n *\n * When set to `'expand'`, then clicking the `+n more` button causes the encapsulating\n * row to expand to accommodate all events in that row with no overflow.\n *\n * Navigating to a new month resets the row to its default, flexed height.\n * @config {'popup'|'expand'} overflowClickAction\n * @default\n */\n overflowClickAction : 'popup',\n // So that when clicking the prev and next buttons, the UI will change\n // even if a cell for the new date is present.\n alwaysRefreshOnMonthChange : true\n };\n }\n static delayable = {\n syncCalendarWeekDaysWithScrollable : {\n type : 'raf',\n cancelOutstanding : true\n },\n // Need to handle cleanup after the row collapse animation\n // in the next AF so that all scrolling has been recalculated\n // and the overflowY can be set accurately\n onAllWeekElementsFlexed : {\n type : 'raf',\n cancelOutstanding : true\n }\n };\n get eventContainerHeight() {\n const\n me = this,\n { classList } = me.weeksElement;\n // Must not bake the property in as zero if called during configuration.\n if (me._eventContainerHeight == null && me.isVisible && !me.isConfiguring) {\n // Rows must revert topstrictly flexed heights during measuring.\n // This class uses a !important CSS rule to ensure that.\n classList.add('b-measuring-container-height');\n me._eventContainerHeight = super.eventContainerHeight;\n classList.remove('b-measuring-container-height');\n }\n return me._eventContainerHeight;\n }\n onCalendarStoreChange() {\n super.onCalendarStoreChange(...arguments);\n // Keep any shrinkwrapped rows in the correct shape\n this.syncShrinkwrappedRows();\n }\n onDateChange({ changes }) {\n // When month changes, keep any shrinkwrapped rows in the correct shape if configured to do so\n if (changes.m) {\n const\n me = this,\n { autoRowHeight } = me;\n // If we are auto heighting rows, then it must be applied on each month change.\n if (autoRowHeight) {\n me.weekElements.forEach(({ classList }) => classList.add('b-shrinkwrapped'));\n }\n if (me.persistShrinkWrappedRows || autoRowHeight) {\n me.syncShrinkwrappedRows();\n }\n else {\n me.shrinkwrappedRows.forEach(r => me.flexWeekRow(r));\n }\n }\n }\n /**\n * Returns the resource associated with this month view when used inside a {@link Calendar.widget.ResourceView}\n * @readonly\n * @member {Scheduler.model.ResourceModel} resource\n */\n // Override from DayCellRenderer\n // Called automatically on the CellOverflow${overflowPopupTrigger} event because of callOnFunctions\n onCellOverflowGesture({ date }) {\n if (expandGestures[this.overflowClickAction.toLowerCase()]) {\n this.shrinkwrapWeekRow(date);\n }\n else {\n super.onCellOverflowGesture(...arguments);\n }\n }\n // addCellHeaderContent mutates the cellHeader DomConfig block.\n // And if we are to have a day name element, returns the DomConfig for it.\n // It's called from DayCellRenderer#getCellDomConfig\n addCellHeaderContent(cellHeader, cellData) {\n const dayName = {\n className : {\n 'b-day-name' : true\n }\n };\n // showWeekColumn refers to the extra week number cell.\n // MonthView shows the week in the first day cell if that's *false*\n cellHeader.children = [\n cellData.visibleColumnIndex || this.showWeekColumn ? null : {\n className : 'b-week-num',\n text : cellData.week[1]\n },\n dayName\n ];\n return dayName;\n }\n get shrinkwrappedRows() {\n return this.weeksElement.querySelectorAll('.b-shrinkwrapped');\n }\n get shrinkwrapRowHeights() {\n const\n me = this,\n rowHeights = [],\n { cellMap } = me;\n me.month.eachWeek((week, [date]) => {\n let eventCount = 0;\n for (let i = 0; i < 7; i++, date.setDate(date.getDate() + 1)) {\n const cellData = cellMap.get(DH.makeKey(date));\n if (cellData) {\n eventCount = Math.max(eventCount, cellData.renderedEvents.length);\n }\n }\n rowHeights.push(eventCount);\n });\n return rowHeights.map(maxEventCount => me.eventHeightInPixels * maxEventCount + (me.eventSpacing * (maxEventCount + 1)) + Math.ceil(me._eventContainerTop));\n }\n /**\n * Returns the number of complete event bars which will fit inside the referenced cell.\n *\n * It's only in MonthView when some rows are shrinkwrapped round their event content (meaning\n * either expanded or contracted away from the 1/6 height default) that there may be a customized\n * eventsPerCell for a certain date.\n * @internal\n */\n getEventsPerCell(date) {\n const me = this;\n if (me.hasShrinkwrappedRows) {\n const rowIndex = Math.floor(DH.diff(me.startDate, date, 'd') / 7);\n // For a shrinkwrapped row, all events are rendered, so use the configured upper limit\n if (me.weekElements[rowIndex].classList.contains('b-shrinkwrapped')) {\n return me.maxEventsPerCell;\n }\n // If there are shrinkwrapped rows, other row heights are unpredictable.\n // Some may be flexed, but they also have a minRowHeight.\n else {\n const\n firstCell = me.weekElements[rowIndex].querySelector(me.visibleCellSelector),\n eventContainerHeight = firstCell.offsetHeight - me.eventContainerTop;\n return Math.floor((eventContainerHeight + me.eventSpacing) / (me.eventHeightInPixels + me.eventSpacing));\n }\n }\n else {\n return me.eventsPerCell;\n }\n }\n getMaxEventsForWeek(week) {\n const { row } = this.getWeekContext(week);\n return Math.max(...Array.from(row.querySelectorAll(this.visibleCellSelector)).map(c => {\n const cellData = this.cellMap.get(c.dataset.date);\n return cellData?.renderedEvents.length || 0;\n }));\n }\n getWeekContext(week) {\n let weekStart, visibleWeekStart, rowIndex;\n // Zero-based row index used. Extract the date of its first cell\n if (typeof week === 'number') {\n rowIndex = week;\n visibleWeekStart = weekStart = DH.parseKey(this.weekElements[week].querySelector(this.visibleCellSelector).dataset.date);\n }\n // Element passed\n else if (week.nodeType === 1) {\n visibleWeekStart = weekStart = DH.parseKey(week.closest('.b-calendar-row').querySelector('[data-date]').dataset.date);\n rowIndex = Math.floor(DH.diff(this.startDate, weekStart, 'd') / 7);\n }\n // Date passed\n else {\n const incr = ((week.getDay(week) - DH.weekStartDay) + 7) % 7;\n visibleWeekStart = weekStart = DH.add(DH.clearTime(week), -incr, 'd');\n rowIndex = Math.floor(DH.diff(this.startDate, week, 'd') / 7);\n }\n // Step over initial hidden days. For example, US has Sunday as the week start day.\n // If that's hidden, then the Monday is the *visible* week start.\n while (this.hiddenNonWorkingDays[visibleWeekStart.getDay()]) {\n visibleWeekStart.setDate(weekStart.getDate() + 1);\n }\n return {\n rowIndex,\n weekStart,\n visibleWeekStart,\n row : this.weekElements[rowIndex]\n };\n }\n /**\n * Causes the week row referenced by the parameter (Either a Date, or the **zero based** row index)\n * to size itself to exactly wrap the maximum number of events for any day of that week.\n *\n * If there are a *lot* of events, the row may grow in height. If few, or none, the row will shrink\n * in height. The day name header along the top will always be visible by default.\n *\n * The row has the CSS class `'b-shrinkwrapped'` added when it is in the shrinkwrapped state\n * to allow querying, and custom styling.\n *\n * See {@link #function-flexWeekRow} for the converse operation.\n *\n * @param {Date|Number} week Either the date of a day within the week, or the **zero based** week row\n * to shrinkwrap.\n */\n shrinkwrapWeekRow(week, /* private */ isLastCall = true) {\n const\n me = this,\n {\n weekStart,\n row\n } = me.getWeekContext(week),\n {\n maxEventsPerCell,\n eventContainerTop\n } = me,\n wasShrinkwrapped = row.classList.contains('b-shrinkwrapped'),\n maxEventsForWeek = me.getMaxEventsForWeek(week),\n maxEventCount = maxEventsPerCell ? Math.min(maxEventsPerCell, maxEventsForWeek) : maxEventsForWeek,\n shrinkwrapHeight = me.eventHeightInPixels * maxEventCount + (me.eventSpacing * (maxEventCount + 1)) + Math.ceil(eventContainerTop),\n expanded = maxEventsForWeek > me.eventsPerCell,\n t = row.querySelector('.b-week-toggle-tool');\n // Create, or reconfigure any existing scrollable in the read phase\n if (isLastCall) {\n me.scrollable = {\n overflowY : 'auto'\n };\n }\n // All rows get the class. It's mainly a flag to indicate that the row\n // *should* be measured and re-flexed when any data changes.\n row.classList.add('b-shrinkwrapped');\n // Empty rows do not get a calculated size\n if (!row.classList.contains('b-empty-row')) {\n t && (t.dataset.btip = me.L('L{WeekExpander.collapseTip}'));\n row.classList.remove('b-has-overflow');\n // We need to know if it's expanded\n row.classList.toggle('b-expanded', expanded);\n // If we need to expand, gir and shrink must be 0.\n // If it was not a full row, it's allowed to grow.\n row.style.flex = expanded ? `0 0 ${shrinkwrapHeight}px` : `1 0 ${shrinkwrapHeight}px`;\n }\n // Keep a flag so that our getEventsPerCell(date) can shortcut is answer\n // if all rows are evenly flexed without having to query.\n me.hasShrinkwrappedRows = true;\n // Refresh content before it achieves its new height.\n // Content will be revealed by the transition.\n if (isLastCall) {\n me.refresh();\n }\n /**\n * This event is fired as soon as a week row is requested to be shrinkwrapped.\n *\n * It's not called if we are just re-synching the height of shrinkwrapped rows\n * which needs to be done if the shape of the data changes.\n *\n * The animated transition to the new height will still be in progress, but the row's\n * flex style is set to its calculated height.\n *\n * To wait until the animated transition is finished, use the Promise returned\n * from {@link #function-shrinkwrapWeekRow}\n *\n * ```javascript\n * monthView.shrinkwrapWeekRow(0).then() => Toast.show('Row zero shrinkwraps event content);\n * ```\n * @event weekShrinkwrap\n * @param {Date} weekStart The start date of the week being shrinkwrapped.\n * @param {HTMLElement} element The week row being shrinkwrapped.\n */\n if (!wasShrinkwrapped) {\n me.trigger('weekShrinkwrap', {\n weekStart,\n element : row\n });\n }\n // Sets the flag class on the widget which warns all and sundry that styles may be in flux.\n if (isLastCall) {\n if (!me.isAnimating) {\n me.isAnimating = true;\n }\n return new Promise(resolve => {\n EventHelper.onTransitionEnd({\n element : row,\n property : 'flex-basis',\n handler : 'onAllWeekElementsExpanded',\n thisObj : me,\n args : [resolve]\n });\n });\n }\n }\n onAllWeekElementsExpanded(element, property, resolve) {\n this.isAnimating = false;\n // Account for any scrollbar.\n // The call from the refresh in shrinkwrapWeekRow will find that there is no overflow yet\n // due to animated nature of expansion. We must check when expansion has finished.\n this.syncCalendarWeekDaysWithScrollable();\n resolve();\n }\n /**\n * Causes the week row referenced by the parameter (Either a Date, or the **zero-based** row index)\n * to become flexed in height to share the available height of the Calendar equally with other\n * flexed rows.\n *\n * See {@link #function-shrinkwrapWeekRow} for the converse operation.\n *\n * @param {Date|Number} date Either the date of a day within the week, or the **zero based** week row\n * to flex.\n */\n flexWeekRow(date, /* private */ isLastCall = true, allRows = false) {\n const\n me = this,\n {\n weekStart,\n row\n } = me.getWeekContext(date),\n t = row.querySelector('.b-week-toggle-tool');\n if (row.classList.contains('b-shrinkwrapped')) {\n // Week will transition back to flex-basis : 1/6 * 100% from CSS\n row.style.flex = '';\n row.classList.add('b-flexing');\n t && (t.dataset.btip = this.L('L{WeekExpander.expandTip}'));\n /**\n * This event is fired as soon as a week row is requested to be flexed. The animated\n * transition to the new height will still be in progress, but the row's flex style is\n * set to its evenly shared flex value.\n *\n * To wait until the animated transition is finished, use the Promise returned\n * from {@link #function-flexWeekRow}\n *\n * ```javascript\n * monthView.flexWeekRow(0).then() => Toast.show('Row zero flexed);\n * ```\n * @event weekFlex\n * @param {Date} weekStart The start date of the week being reverted to a flexed height.\n * @param {HTMLElement} element The week row being reverted to a flexed height.\n */\n me.trigger('weekFlex', {\n weekStart,\n element : row\n });\n // Set the underlying property. We do not want to trigger a full switch to all flexed.\n me._autoRowHeight = false;\n // Sets the flag class on the widget which warns all and sundry that styles may be in flux.\n if (isLastCall && !me.isAnimating) {\n me.isAnimating = true;\n }\n const result = new Promise(resolve => {\n EventHelper.onTransitionEnd({\n element : row,\n property : 'flex-basis',\n handler : isLastCall ? 'onAllWeekElementsFlexed' : 'onWeekElementFlexed',\n thisObj : me,\n args : [resolve, allRows]\n });\n });\n return result;\n }\n }\n onWeekElementFlexed(weekElement, property, resolve) {\n weekElement.classList.remove('b-shrinkwrapped', 'b-flexing', 'b-expanded');\n resolve();\n }\n onAllWeekElementsFlexed(weekElement, property, resolve, allRows) {\n const me = this;\n // Reconfigure any existing scrollable.\n me.scrollable.overflowY = me.scrollable.hasOverflow('y');\n // If we are flexing *all* rows, ensure they are all fixed.\n if (allRows) {\n me.shrinkwrappedRows.forEach(r => r.classList.remove('b-shrinkwrapped', 'b-flexing', 'b-expanded'));\n }\n else {\n weekElement.classList.remove('b-shrinkwrapped', 'b-flexing', 'b-expanded');\n }\n // Fire animationEnd event after element classes have been fixed up.\n me.isAnimating = false;\n // Keep a flag so that our getEventsPerCell(date) can shortcut is answer\n // if all rows are evenly flexed without having to query.\n me.hasShrinkwrappedRows = me.shrinkwrappedRows.length;\n // Refresh after the height shrink animation has ended.\n // Old, overflowing data will be clipped. The visual effect will just be\n // the +n more appearing\n me.refresh();\n // Account for any scrollbar.\n // The call from the refresh in flexWeekRow will find that there is still overflow\n // due to animated nature of collapse. We must check when collapse has finished.\n me.syncCalendarWeekDaysWithScrollable();\n resolve();\n }\n // The header must allow a scrollbar width if the platform displays scrollbars\n syncCalendarWeekDaysWithScrollable() {\n this.weekdaysHeader.classList[this.scrollable?.hasScrollbar() ? 'add' : 'remove']('b-show-yscroll-padding');\n }\n updateHideOtherMonthCells() {\n super.updateHideOtherMonthCells(...arguments);\n this.refresh();\n }\n updateEventHeight(height, oldHeight) {\n const me = this;\n super.updateEventHeight(height, oldHeight);\n if (!me.isConfiguring) {\n // If the minRowHeight is expressed in evs, it has to be reavaluated.\n if (me.minRowHeight?.match(evRegexp)) {\n me.updateMinRowHeight(me._minRowHeight);\n }\n // Keep any shrinkwrapped rows in the correct shape\n me.syncShrinkwrappedRows();\n const padding = DomHelper.getEdgeSize(me.element, 'padding', 'tb');\n // Always leave room for at least two events\n me.minHeight =\n // Month is usually 6 weeks\n ((me.eventHeightInPixels + 1) * 2 + me.eventSpacing * 3 + Math.ceil(me.eventContainerTop)) * 6 +\n // Add header height with borders\n me.weekdaysHeader.offsetHeight + 7 +\n // And view padding\n padding.height;\n }\n }\n updateMinRowHeight(minRowHeight) {\n const\n me = this,\n eventCount = parseInt(minRowHeight?.match?.(evRegexp)?.[1]);\n // See if they configured it in evs which is our own \"CSS\" units meaning events\n if (!isNaN(eventCount)) {\n if (me.isConfiguring) {\n return me.ion({\n paint : 'updateMinRowHeight',\n args : [minRowHeight],\n once : true\n });\n }\n minRowHeight = me.eventHeightInPixels * eventCount + (me.eventSpacing * (eventCount + 1)) + Math.ceil(me.eventContainerTop);\n }\n super.updateMinRowHeight(minRowHeight);\n // If we are in the middle of a flexWeekRow or shrinkwrapWeekRow animation\n // We cannot do this as it needs to measure a final value\n if (me.isAnimating) {\n me.ion({\n animationEnd : 'performResizeRefresh',\n thisObj : me,\n args : [me._eventsPerCell, me._eventContainerTop],\n once : true\n });\n }\n else {\n // Calculates new values for eventsPerCell and eventContainerTop\n // and handles changes to either.\n me.performResizeRefresh(me._eventsPerCell, me._eventContainerTop);\n }\n }\n changeMaxEventsPerCell(maxEventsPerCell) {\n return maxEventsPerCell == null ? this.constructor.configurable.maxEventsPerCell : maxEventsPerCell;\n }\n updateMaxEventsPerCell() {\n if (!this.isConfiguring) {\n this.syncShrinkwrappedRows();\n }\n }\n async updateAutoRowHeight(autoRowHeight, wasAutoRowHeight) {\n // The change from undefined to false during initialization is a noop.\n if (this.initializingAutoRowHeight && autoRowHeight === Boolean(wasAutoRowHeight)) {\n return;\n }\n const\n me = this,\n { weekElements } = me,\n { length } = weekElements,\n weekExpander = (me.features || me.calendar?.features)?.weekExpander;\n let finalPromise;\n // Disable WeekExpander *before*() we shrinkwrap so that the WeekExpander's\n // UI disappears immediately.\n if (weekExpander && autoRowHeight) {\n weekExpander.disabled = weekExpander.disabledByAutoRowHeight = true;\n }\n // Either shrinkwrap or reset to flex all week rows.\n // autoRowHeight disables weekExpander and decides row heights.\n if (autoRowHeight) {\n for (let i = 0; i < length; i++) {\n finalPromise = me.shrinkwrapWeekRow(i, i === length - 1);\n }\n }\n else {\n for (let i = 0; i < length; i++) {\n finalPromise = me.flexWeekRow(i, i === length - 1, true);\n }\n }\n // Wait for the last row to finish.\n await finalPromise;\n // Re-enable *after* collapsing so that WeekExpander UI only\n // appears if needed.\n if (weekExpander && autoRowHeight && weekExpander.disabledByAutoRowHeight) {\n weekExpander.disabled = weekExpander.disabledByAutoRowHeight = false;\n }\n // Will need to redraw when we reach all flexed row heights because\n // the eventsPerCell will need to be recalculated\n if (!autoRowHeight) {\n me._eventContainerHeight = me._eventsPerCell = null;\n me.refresh();\n }\n }\n // When data changes or eventHeight changes, any shrinkwrapped rows need to be\n // kept in the correct shape;\n syncShrinkwrappedRows() {\n if (this.isVisible) {\n const { shrinkwrappedRows } = this;\n for (let i = 0, { length } = shrinkwrappedRows; i < length; i++) {\n this.shrinkwrapWeekRow(shrinkwrappedRows[i], i === length - 1);\n }\n }\n else {\n this.whenVisible(this.syncShrinkwrappedRows);\n }\n }\n changeScrollable(scrollable, oldScrollable) {\n scrollable = super.changeScrollable(scrollable, oldScrollable);\n if (scrollable?.overflowX) {\n // Create a Scroller to scroll the day header's X axis in sync with the month grid\n this.weekdaysScrollable || (this.weekdaysScrollable = new Scroller({\n widget : this,\n element : this.weekdaysHeader,\n overflowX : 'hidden-scroll'\n }));\n scrollable.addPartner(this.weekdaysScrollable, 'x');\n }\n return scrollable;\n }\n collectEvents(options) {\n if (this.hideOtherMonthCells) {\n const { year, month } = this.month;\n // use strict bounds of the month, not of the cells in the UI.\n // The \"other month\" cells in the UI are not visible in this mode.\n options.startDate = new Date(year, month, 1);\n options.endDate = new Date(year, month + 1, 1);\n }\n // Only the first *visible* cell needs overflows flowing into it.\n // from after that, propagateCellEvents copies events forward, so\n // the getEvents will use the \"startDate\" index to extract events for a date.\n options.getDateIndex = date => date > (this.firstVisibleDate || this.startDate) ? 'startDate' : 'date';\n return super.collectEvents(options);\n }\n getDayElement(date, strict) {\n if (typeof date !== 'string') {\n date = DH.makeKey(date);\n }\n // Enforce strict meaning this view must own that date.\n // month.month is the *zero based* index that the Date class uses.\n if (strict && parseInt(date.substr(5, 2)) !== this.month.month + 1) {\n return;\n }\n return super.getDayElement(date);\n }\n /**\n * Determines what is under the cursor of the specified event or what is described by the given element.\n * @param {Event|Element} domEvent The event or element\n * @returns {CalendarHit}\n */\n calendarHitTest(domEvent) {\n const\n hit = super.calendarHitTest(domEvent),\n target = DomHelper.getEventElement(domEvent);\n if (hit) {\n // Two levels of disabling other month cells.\n // Disabled means they are visible but unresponsive.\n // hidden means they are invisible\n if (hit.date.getMonth() !== this.month.month && (this.disableOtherMonthCells || this.hideOtherMonthCells)) {\n return;\n }\n const\n weekElement = target.closest('.b-calendar-week'),\n week = weekElement?.dataset.week?.split(',').map(Number);\n if (week) {\n hit.cell = hit.cell || target.closest('.b-calendar-cell');\n hit.dayNumber = Number(hit.cell?.dataset.columnIndex);\n hit.week = week;\n hit.weekElement = weekElement;\n hit.weekNumber = week[1];\n hit.weekOffset = week[1] - Number(this.weeksElement.firstElementChild.dataset.week.split(',')[1]);\n }\n }\n return hit;\n }\n getDateFromPosition(clientX, clientY) {\n const\n me = this,\n weekEls = me.weeksElement.childNodes;\n for (let rect, i = 0; i < weekEls.length; ++i) {\n rect = weekEls[i].getBoundingClientRect();\n if (rect.top <= clientY && clientY < rect.bottom) {\n if (rect.left <= clientX && clientX < rect.right) {\n const\n dx = me.rtl ? rect.right - clientX : clientX - rect.x,\n column = Math.floor(dx * me.weekLength / rect.width);\n // Some days may be hidden.\n if (me.hideNonWorkingDays) {\n const cellDates = Array.from(weekEls[i].querySelectorAll(me.visibleCellSelector)).map(e => me.getDateFromElement(e));\n return cellDates[column];\n }\n else {\n const date = me.getDateFromElement(weekEls[i].querySelector(me.visibleCellSelector));\n date.setDate(date.getDate() + column);\n return date;\n }\n }\n }\n }\n return null;\n }\n /**\n * Determines the week container element of the specified event or the given element.\n * @param {Event|Element} domEvent The event or element\n * @returns {Element}\n * @internal\n */\n getWeekElementFor(domEvent) {\n const target = DomHelper.getEventElement(domEvent);\n return target?.closest('.b-calendar-week') || null;\n }\n updateEventStore(eventStore, was) {\n super.updateEventStore?.(eventStore, was);\n // Create the empty cell structure before the first refresh with data\n // so that boilerplate elements may be measured.\n CalendarPanel.prototype.doRefresh.call(this);\n }\n updateOverflowClickAction() {\n this.refresh();\n }\n updateSixWeeks() {\n // Invalidate the values so that they are recalculated in the superclass's refresh\n this._eventsPerCell = this._eventContainerTop = this._eventContainerHeight = null;\n super.updateSixWeeks(...arguments);\n }\n onMonthDateChange({ changes }) {\n // Month's row count with respect to the sixWeeks setting has changed...\n if (changes.r && !this.sixWeeks) {\n // Invalidate the values so that they are recalculated in the superclass's refresh\n this._eventsPerCell = this._eventContainerTop = this._eventContainerHeight = null;\n }\n super.onMonthDateChange(...arguments);\n }\n doRefresh() {\n const\n me = this,\n {\n weekElements\n } = me;\n // Only ingest and process autoRowHeight when we have visibility\n if (!me.isConfiguring) {\n me.getConfig('autoRowHeight');\n me._cellMap?.clear();\n }\n const result = super.doRefresh();\n // Mark rows with no events. These are willing to flex-shrink to a CSS-defined minimum\n for (let i = 0, { length } = weekElements; i < length; i++) {\n const\n row = weekElements[i],\n maxEvents = Array.prototype.reduce.call(row.querySelectorAll(me.visibleCellSelector), (result, cell) => {\n const cellData = me.cellMap.get(cell.dataset.date);\n return result + (cellData?.renderedEvents.length || 0);\n }, 0);\n row.classList.toggle('b-empty-row', !maxEvents);\n }\n // Account for any scrollbar\n me.syncCalendarWeekDaysWithScrollable();\n return result;\n }\n showEvent(eventRecord) {\n this.setDate(eventRecord.startDate);\n }\n changeDayNumberCentered(dayNumberCentered) {\n return Boolean(dayNumberCentered);\n }\n updateShowWeekColumn(showWeekColumn) {\n // If we are hiding the week column and we never created any in-cell week number\n // elements (They are not rendered if not required), we have to refresh to get them.\n if (!showWeekColumn && !this.element.querySelector('.b-week-num')) {\n this.doRefresh();\n }\n super.updateShowWeekColumn(showWeekColumn);\n }\n updateHideNonWorkingDays(hideNonWorkingDays) {\n super.updateHideNonWorkingDays?.(hideNonWorkingDays);\n // Widths will change, so a refresh is needed.\n if (!this.isConfiguring) {\n this.refresh();\n }\n }\n updateDayNumberCentered(dayNumberCentered) {\n const me = this;\n // First time we flip to center, cache was the week number showing was\n // so that we can restore it.\n if (!me._dayNumberCentered && !('nonCenteredDayNumShowWeekColumn' in me)) {\n me.nonCenteredDayNumShowWeekColumn = me.showWeekColumn;\n }\n me._dayNumberCentered = dayNumberCentered;\n me.element.classList[dayNumberCentered ? 'add' : 'remove']('day-number-center');\n // Centered day number with week number inside the cell header looks bad.\n me.showWeekColumn = dayNumberCentered ? true : me.nonCenteredDayNumShowWeekColumn;\n }\n get dayNameSelector() {\n return this.showWeekColumn ? '.b-cal-cell-header' : super.dayNameSelector;\n }\n set dayNameSelector(dayNameSelector) {\n this._dayNameSelector = dayNameSelector;\n }\n isValidTargetDate(date) {\n const newMonth = date.getMonth();\n if (newMonth !== this.month.month) {\n const\n minDate = this.minDate || this.calendar?.minDate,\n maxDate = this.maxDate || this.calendar?.maxDate;\n // Only do date arithmetic if we need to.\n if (!isNaN(minDate) || !isNaN(maxDate)) {\n const { cellMonth } = this;\n cellMonth.date = date;\n if (!isNaN(minDate)) {\n // Veto navigation to before minDate.\n if (cellMonth.startDate < minDate) {\n return false;\n }\n }\n if (!isNaN(maxDate)) {\n // Veto navigation to after maxDate.\n // Month class's concept of date is inclusive. Its dates\n // refer to a 24 hour block unlike scheduling UIs so increment it.\n if (DH.add(cellMonth.endDate, 1, 'd') > maxDate) {\n return false;\n }\n }\n }\n }\n return true;\n }\n set startDate(date) {\n this.date = date;\n }\n get startDate() {\n return super.startDate;\n }\n next() {\n this.date = DH.add(this.date || this.startDate, 1, 'month');\n }\n previous() {\n this.date = DH.add(this.date || this.startDate, -1, 'month');\n }\n}\nMonthView.initClass();\nMonthView._$name = 'MonthView';", "import Panel from '../../Core/widget/Panel.js';\nimport CalendarMixin from './mixin/CalendarMixin.js';\nimport Objects from '../../Core/helper/util/Objects.js';\nimport Bag from '../../Core/util/Bag.js';\nimport DayView from './DayView.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport AvatarRendering from '../../Core/widget/util/AvatarRendering.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport CalendarRow from './CalendarRow.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport ResizeMonitor from '../../Core/helper/ResizeMonitor.js';\nimport FunctionHelper from '../../Core/helper/FunctionHelper.js';\nimport Rectangle from '../../Core/helper/util/Rectangle.js';\n/**\n * @module Calendar/widget/ResourceView\n */\nconst\n day0 = new Date(0),\n day1 = DateHelper.add(day0, 1, 'day'),\n emptyMap = Object.freeze(new Map()),\n scrollAxesConfigs = {\n hourHeight : 1,\n showAllDayHeader : 1,\n dayStartTime : 1,\n dayEndTime : 1\n },\n sharedConfigs = ['allowOverlap', 'timeFormat', 'coreHours', 'fitHours', 'hourHeight', 'visibleStartTime', 'dateFormat', 'dayStartTime', 'dayEndTime', 'hideNonWorkingDays', 'nonWorkingDays', 'readOnly', 'zoomOnMouseWheel', 'filterEventResources'];\n/**\n * A Calendar view which encapsulates a series of child Calendar views, one for each resource (often\n * referred to as \"calendar\") in the project.\n *\n * The type of view displayed defaults to `'week'`, but this can be changed using the {@link #config-view}\n * config object.\n *\n * Usage :\n *\n * ```javascript\n * new Calendar({\n * appendTo : domElement,\n *\n * // Resource avatar images are loaded from this path\n * resourceImagePath : '../_shared/images/users/',\n *\n * modes : {\n * // Let's not show the default views\n * day : null,\n * week : null,\n * month : null,\n * year : null,\n * agenda : null,\n *\n * // Mode name can be anything if it contains a \"type\" property.\n * monthResourceview : {\n * // Type has the final say over which view type is created\n * type : 'resource',\n *\n * // This is a config object for the subviews; one for each resource\n * view : {\n * // We show a month view for each resource in the project\n * type : 'month'\n * }\n * }\n * }\n * });\n * ```\n *\n * {@inlineexample Calendar/widget/ResourceView.js}\n *\n * @demo Calendar/resourceview\n *\n * @extends Core/widget/Panel\n * @mixes Core/widget/mixin/Responsive\n * @mixes Calendar/widget/mixin/CalendarMixin\n * @classtype resourceview\n * @classtypealias resource\n * @typingswidget\n */\nexport default class ResourceView extends Panel.mixin(CalendarMixin) {\n static $name = 'ResourceView';\n static type = 'resourceview';\n static get configurable() {\n return {\n layout : 'box',\n textContent : false,\n scrollable : {\n overflowX : true\n },\n date : {\n $config : {\n equal : 'date'\n },\n value : null\n },\n /**\n * A config object used to configure the sub views. The default `type` used is `'weekview'`\n *\n * After instantiation, while in use, changes to the `view` property, will be propagated\n * to all child {@link #config-view views}.\n *\n * This property may be used to adjust properties of every child view of the resource\n * view in one statement.\n * @prp {ContainerItemConfig|Object} view\n * @typings {ContainerItemConfig|Record}\n */\n view : {\n type : 'weekview'\n },\n /**\n * By default, the resource views are displayed in the order that the resources appear\n * in the project's `resourceStore`, so they will appear in a stable position, meaning\n * when a view is filtered out, then filtering it in will replace it in the same position.\n *\n * If this config is `false`, re-adding a view will place it at the end.\n * @config {Boolean}\n * @default\n */\n stableResourceOrder : true,\n /**\n * The width of a resource calendar panel (view always stretches to fill window)\n * @member {Number|String} resourceWidth\n */\n /**\n * The width of a resource calendar panel (view always stretches to fill window)\n * @config {Number|String}\n */\n resourceWidth : null,\n /**\n * Set to true to hide non-working days\n * @member {Boolean} hideNonWorkingDays\n */\n /**\n * Set to true to hide non-working days\n * @config {Boolean}\n */\n hideNonWorkingDays : null,\n viewCache : {\n $config : ['lazy', 'nullify'],\n value : true\n },\n avatarRendering : {},\n /**\n * A field name or a function returning a string to be displayed below resource name in the resource view\n * headers.\n *\n * ```javascript\n * const calendar = new Calendar({\n * modes : {\n * // Mode name can be anything if it contains a \"type\" property.\n * weekResources : {\n * type : 'resource',\n * // Get meta string to display\n * meta : resource => resource.title\n * }\n * }\n * });\n * ```\n *\n * @config {String|Function}\n * @param {Scheduler.model.ResourceModel} resource Displayed resource\n * @returns {String} Text to be displayed below resource name\n */\n meta : null,\n /**\n * Display an avatar in the resource view headers, either as an image or using resource initials.\n *\n * Looks for an image name in the {@link Scheduler/model/ResourceModel#field-imageUrl} and\n * {@link Scheduler/model/ResourceModel#field-image} fields on the resource. Set\n * {@link Calendar/view/Calendar#config-resourceImagePath} on Calendar to specify where to load images from.\n * If no image is found, resource initials are displayed.\n *\n * @config {Boolean}\n * @default\n */\n showAvatars : true,\n /**\n * When {@link Scheduler.model.ResourceTimeRangeModel}s are included in the data, they\n * are only rendered in subviews of {@link Calendar.widget.ResourceView}s and normal\n * {@link Calendar.model.TimeRangeModel}s are __not__ rendered in subviews of\n * {@link Calendar.widget.ResourceView}s.\n *\n * Set this to `true` to render normal {@link Calendar.model.TimeRangeModel}s in subviews of\n * this view.\n * @config {Boolean}\n * @default false\n */\n includeTimeRanges : null\n };\n }\n // Use config system properties because these are *always available, including during construction.\n static properties = {\n sharedConfigs,\n timeAxisConfigs : ['allDayEvents'].concat(sharedConfigs)\n };\n construct() {\n super.construct(...arguments);\n // If the built-in resource filter changes the resources visible, we have to react\n // to that by refreshing which may add/remove some child views.\n // Note this is a filter operation on the eventStore.\n // We don't subscribe to the filter operation on the eventStore because that may happen\n // often for other reasons (filtering based on other criteria), and we do not want to\n // invoke this expensive refresh unnecessarily.\n this.calendar?.sidebar?.widgetMap.resourceFilter?.ion({\n change : 'onResourceFilterSelectionChange',\n thisObj : this\n });\n }\n // This view is animating if any of its child views are animating\n get isAnimating() {\n return super.isAnimating || this.items.some(v => v.isAnimating);\n }\n get hasNonWorkingDays() {\n return true;\n }\n changeScrollable(scrollable) {\n scrollable = super.changeScrollable(...arguments);\n // Our horizontal scroll range must be within the dayViewTimeAxis and dayViewScroller\n // which are positioned sticky to the edges, thus narrowing the true visible range.\n if (scrollable) {\n Object.defineProperty(scrollable, 'viewport', {\n get : this.getScrollingViewport.bind(this)\n });\n }\n return scrollable;\n }\n // The scrolling viewport calculation method injected as the getter for the `viewport`\n // property in our scrollable. It has to account for the time axis and the scroller\n // which are docked at left and right using position : sticky.\n getScrollingViewport() {\n const\n {\n dayViewTimeAxis,\n dayViewScroller\n } = this,\n scrollerWidth = dayViewScroller.isVisible ? dayViewScroller.width : 0,\n result = Rectangle.client(this.scrollable.element);\n return this.rtl ? result.adjust(scrollerWidth, 0, -dayViewTimeAxis.width, 0)\n : result.adjust(dayViewTimeAxis.width, 0, -scrollerWidth, 0);\n }\n changeView(view) {\n const\n me = this,\n result = new Proxy(ObjectHelper.assign({}, view), {\n set(target, prop, value) {\n const result = Reflect.set(...arguments);\n // Pass new property setting in to child views\n me.syncViewConfig(prop, value);\n return result;\n },\n deleteProperty(target, prop) {\n const result = Reflect.deleteProperty(...arguments);\n // Pass new property setting in to child views\n me.syncViewConfig(prop, null);\n return result;\n }\n });\n me.viewType = bryntum.Calendar.Modes.resolveType(view.type);\n return result;\n }\n /**\n * Executes the passed function for each child view corresponding to each resource in the `resourceStore`.\n * @param {Function} fn The function to call.\n * @param {Object[]} [args] The arguments to pass. Defaults to the view being called followed by its index.\n * @param {Object} [thisObj] The `this` reference for the function. Defaults to the view being called.\n */\n eachView(fn, args, thisObj = null) {\n const\n passView = args == null,\n items = [...this.viewCache];\n for (let i = 0, { length } = items; i < length; i++) {\n const view = items[i];\n if (passView) {\n args = [view, i];\n }\n if (view.callback(fn, thisObj || view, args) === false) {\n return;\n }\n }\n }\n /**\n * Yields the views which this ResourceView owns.\n * @property {Calendar.widget.mixin.CalendarMixin[]}\n * @readonly\n */\n get views() {\n return [...this.viewCache];\n }\n updateResourceStore(resourceStore) {\n this.detachListeners('resourceViewResourceChange');\n super.updateResourceStore?.(resourceStore);\n resourceStore.ion({\n name : 'resourceViewResourceChange',\n change : 'onResourceStoreChange',\n sort : 'onResourceStoreSort',\n thisObj : this\n });\n this.refreshSoon();\n }\n onResourceStoreChange() {\n this.refreshSoon();\n }\n onResourceStoreSort({ source }) {\n const\n visibleViews = this.items.filter(v => v.isVisible && !v.isResourceDayViewTimeAxis),\n resourceIdOrder = source.map(r => this.createViewId(r)),\n viewIdOrder = visibleViews.map(v => v.id);\n // If the visible views are out of order, remove them then refresh\n if (!ObjectHelper.isEqual(resourceIdOrder, viewIdOrder)) {\n // Remove the views (not the timeaxis and scroller).\n // refresh will add them in the right order\n this.remove(...visibleViews);\n this.refreshSoon();\n }\n }\n onResourceFilterSelectionChange() {\n this.refreshSoon();\n }\n changeViewCache(viewCache, oldViewCache) {\n if (viewCache) {\n return new Bag();\n }\n else if (oldViewCache) {\n oldViewCache.forEach(v => v.destroy());\n oldViewCache.clear();\n }\n }\n getResourceView(resource) {\n return this.viewCache.get(this.createViewId(resource)) || this.createView(resource);\n }\n doRefresh() {\n const\n me = this,\n { scrollBarWidth } = DomHelper,\n {\n calendar,\n _items,\n resourceStore\n } = me,\n resourceFilter = calendar?.widgetMap.resourceFilter,\n // Filter available resources by the owning Calendar's ResourceFilter\n calendars = resourceFilter ? me.resourceStore.records.filter(c => resourceFilter.value.includes(c)) : me.resourceStore.records,\n { length } = calendars,\n toAdd = [],\n toRemove = [],\n usedIds = {};\n // We need to have some resources loaded for us to know what resources we have to create views for.\n // If the Calendar is using the loadOnDemand feature, we need to \"prime the pump\"\n // by kicking off a load to get this information. We load a month's worth of\n // events under the assumption that yearViews will not be used.\n if (!resourceStore.count) {\n const\n { weekStartDay } = me,\n monthStart = DateHelper.getFirstDateOfMonth(me.date),\n nextMonthStart = DateHelper.add(monthStart, 1, 'month');\n // Load a whole visible month block as displayed in a MonthView.\n // Note that these are snapped to week starts as in a Calendar.\n me.eventStore.getEvents({\n startDate : DateHelper.add(monthStart, -(monthStart.getDay() - weekStartDay + 7) % 7, 'd'),\n endDate : DateHelper.add(nextMonthStart, 7 - (nextMonthStart.getDay() - weekStartDay + 7) % 7, 'd')\n });\n }\n // If this was called directly, cancel any queued call.\n me.refreshSoon.cancel();\n let hitCount = 0;\n for (let i = 0; i < length; i++) {\n const\n view = me.getResourceView(calendars[i]),\n isShown = _items.includes(view);\n // If the ResourceStore was updated and the view is orphaned\n // by the resource no longer being in there, we have to remove the view.\n if (resourceStore.getById(view.resourceId)) {\n view.title = me.titleTemplate(view.resource);\n // View is present in our items..\n if (isShown) {\n hitCount++;\n }\n // Not in our items; add\n else {\n toAdd.push(view);\n }\n usedIds[view.id] = 1;\n }\n else if (isShown) {\n toRemove.push(view);\n }\n }\n // Check removals, unless all records were visited above\n if (hitCount < _items.count) {\n me.eachView(view => {\n if (!usedIds[view.id]) {\n toRemove.push(view);\n }\n });\n me.remove(toRemove);\n }\n // Ensure the docked left and right axes are present in correct positions for DayViews\n if (me.viewType.isDayView) {\n if (!_items.includes(me.dayViewTimeAxis)) {\n toAdd.unshift(me.dayViewTimeAxis);\n }\n if (scrollBarWidth && !_items.includes(me.dayViewScroller)) {\n toAdd.push(me.dayViewScroller);\n }\n }\n const y = me.items[0]?.scrollable?.y;\n me.add(...toAdd);\n // Sync incoming view with the common scroll position\n if (y != null) {\n toAdd.forEach(v => {\n // Must go directly to DOM because the config value will be equal on a re-show\n v.scrollable.element.scrollTop = y;\n });\n }\n // If we have added or removed any views, we need to sync some things.\n if (toAdd.length || toRemove.length) {\n let lastView;\n for (let i = 0, { items } = me, { length } = items; i < length; i++) {\n const\n view = items[i],\n { scrollable } = view;\n // Border collisions mean that a view's CSS may need to know whether\n // it is first, last, or in between.\n view.element.classList.remove('b-last-resource-view');\n // isResourceDayViewTimeAxis is set in the dayViewTimeAxis, and the dayViewScroller\n if (!view.isResourceDayViewTimeAxis) {\n view.element.classList[i > 1 ? 'remove' : 'add']('b-first-resource-view');\n lastView = view;\n }\n // Keep the Y axis of any scrollers synced.\n if (scrollable) {\n scrollable.clearPartners();\n if (i) {\n view.scrollable.addPartner(items[i - 1].scrollable, 'y');\n }\n }\n // In case the view add/remove caused differences in the heights of the all day rows.\n // All views must be in sync WRT the height of their all day rows.\n view.allDayEvents?.refresh();\n }\n if (lastView) {\n lastView.element.classList.add('b-last-resource-view');\n }\n // If some views have been added or removed, we need to resync the all day row heights\n // because until all views are present, the sync cannot be valid.\n if (me.viewType.isDayView) {\n const\n allDayRows = me.views.filter(v => v.allDayEvents && v.isVisible),\n maxHeight = allDayRows.length && Math.max(...allDayRows.map(v => v.allDayEvents.cellContentHeight));\n // The allDayEvents refreshes might have caused one of them to be taller\n // than any others. We have to resync them after their refresh.\n if (maxHeight) {\n _items.forEach(v => {\n v.allDayEvents?.setEventContentHeight(maxHeight, false, true);\n });\n }\n }\n }\n if (me.viewType.isDayView) {\n // Show/hide our fake scroller\n me.syncDayViewScrollerVisibility();\n }\n me.refreshCount = (me.refreshCount || 0) + 1;\n /**\n * Fires when this ResourceView refreshes.\n * @param {Calendar.widget.ResourceView} source The triggering instance.\n * @event refresh\n */\n me.trigger('refresh');\n }\n // Override at this level. Child views process events\n onCalendarPointerInteraction() {}\n // Override at this level. Child views process data mutations\n onCalendarStoreChange() {}\n onChildAdd(child) {\n super.onChildAdd(child);\n // We get a look at child view config changes to see if we need to propagate them to their siblings\n FunctionHelper.before(child, 'onConfigChange', 'onChildViewConfigChange', this, { return : false });\n }\n onChildViewConfigChange({ name, value }) {\n // Propagate timeAxisConfig settings between all siblings.\n // Do not proceed if we're already responding, *or* if this config change\n // is the result of a syncViewConfig call and will be applied to all views anyway.\n if (!this.syncingChildViewConfigs && !this.syncingViewConfig && this.timeAxisConfigs.includes(name)) {\n // We need *all* sub views. Hidden (filtered out) subviews\n // from the view cache have to be included. Use Set to uniquify them.\n const items = new Set(this.items.concat([...this.viewCache]));\n this.syncingChildViewConfigs = true;\n items.forEach(i => {\n if (name in i) {\n i[name] = value;\n }\n });\n this.syncingChildViewConfigs = false;\n }\n }\n createView(resource) {\n const\n me = this,\n { id : resourceId } = resource,\n {\n resourceStore,\n viewCache\n } = me,\n { project } = resourceStore,\n config = Objects.merge({\n project,\n // All views must have a reference to the Calendar\n calendar : me.calendar,\n // IDs are matched so that a minimal Container update can be done\n id : me.createViewId(resource),\n cls : 'b-resourceview-resource',\n // The view must know which resource it is showing.\n defaultCalendar : resourceId,\n // Resource is configured in initially because it may be needed during\n // configuration before we set a getter for it.\n resource,\n resourceId,\n includeTimeRanges : me.includeTimeRanges,\n weekStartDay : me.weekStartDay,\n parent : me,\n date : me.date,\n dateFormat : me.dateFormat,\n title : me.titleTemplate(resource)\n }, me.view);\n // Copy in shared configs like hourHeight, dateFormat, dayStartTime, readOnly etc\n if (me.calendar) {\n ObjectHelper.copyPropertiesIf(config, [...viewCache][0] || me, me.sharedConfigs);\n }\n if (me.visibleStartTime) {\n config.visibleStartTime = me.visibleStartTime;\n }\n // DayViews must not show scrollers\n if (DomHelper.scrollBarWidth && me.viewType.isDayView) {\n config.scrollable = {\n overflowX : false,\n overflowY : 'hidden-scroll'\n };\n }\n const result = bryntum.Calendar.Modes.create(config);\n result.ion({\n catchAll : 'onChildViewCatchAll',\n thisObj : me\n });\n result.element.removeAttribute('tabIndex');\n result.element.dataset.resourceId = resourceId;\n result.contentElement?.removeAttribute('tabIndex');\n // The item's weight is its store index if we are using stableResourceOrder\n Object.defineProperty(result, 'weight', {\n get() {\n return me.stableResourceOrder ? resourceStore.allIndexOf(resourceId) : 0;\n }\n });\n // The item's resource should be dynamically accessed from the resourceStore\n Object.defineProperty(result, 'resource', {\n get() {\n return resourceStore.getById(resourceId);\n }\n });\n // The item's eventFilter filters in events assigned to its resource\n Object.defineProperty(result, 'eventFilter', {\n get() {\n return e => e.resources.includes(this.resource);\n }\n });\n viewCache.add(result);\n /**\n * Fires when a new sub view is created.\n * @param {Calendar.widget.ResourceView} source The triggering instance.\n * @param {Calendar.widget.mixin.CalendarMixin} view The newly created sub view.\n * @typings view -> {typeof CalendarMixin}\n * @event viewCreate\n */\n me.trigger('viewCreate', { view : result });\n return result;\n }\n onChildViewCatchAll(e) {\n // Inject the child view's resource into the event as the resourceRecord\n e.resourceRecord = e.source.resource;\n if (e.type !== 'paint') {\n this.trigger(e.eventName, e);\n }\n if (e.type === 'heightchange') {\n this.syncDayViewScrollerVisibility();\n }\n }\n //region Title\n changeAvatarRendering(config) {\n if (config) {\n return AvatarRendering.new({\n element : this.element\n }, config);\n }\n }\n titleTemplate(resource) {\n const\n me = this,\n { meta } = me,\n metaValue = typeof meta === 'string' ? resource[meta] : meta?.(resource),\n // eventColor = #FF5555, apply as background-color\n namedColor = DomHelper.isNamedColor(resource.eventColor) && resource.eventColor,\n // eventColor = red, add b-sch-red cls\n hexColor = !namedColor && resource.eventColor;\n return {\n class : {\n 'b-resourceview-title' : 1,\n 'b-has-meta' : metaValue\n },\n children : [\n me.showAvatars && {\n class : {\n 'b-resource-avatar-container' : 1,\n [`b-sch-foreground-${namedColor}`] : namedColor\n },\n style : {\n color : hexColor || null\n },\n children : [\n me.getResourceAvatar(resource)\n ]\n },\n {\n class : 'b-resource-name',\n text : resource.name\n },\n metaValue && {\n class : 'b-resource-meta',\n text : metaValue\n }\n ]\n };\n }\n //endregion\n // Override here because we need to delegate the request to the subview for the\n // event's resource\n getEventElement(eventRecord, date = eventRecord.startDate, resourceRecord) {\n return this.getResourceView(eventRecord.resource || resourceRecord)?.getEventElement(eventRecord, date);\n }\n /**\n * This creates a specially styled DayView which matches the view config (so that\n * dayStartTime, hourHeight etc. is synced) which shows nothing but its time axis.\n * This acts as the single visible time axis on the left.\n * @private\n */\n get dayViewTimeAxis() {\n const me = this;\n if (!me._dayViewTimeAxis) {\n const viewConfig = ObjectHelper.copyProperties({}, me.view, me.timeAxisConfigs);\n me._dayViewTimeAxis = ResourceDayViewTimeAxis.create({\n ...viewConfig,\n // Must always be at the beginning\n weight : -1,\n // This view must update its shape on data change but it won't contain any events.\n // All it has to do is keep its allDayEventsHeight in sync with all its siblings\n // which happens on refresh.\n project : me.project,\n type : 'resourcedayviewtimeaxis',\n minWidth : 0,\n cls : 'b-resource-dayview-timeaxis',\n startDate : day0,\n endDate : day1,\n scrollable : {\n overflowX : false,\n overflowY : 'hidden-scroll'\n },\n // This toggles all the allDayEvents rows in synchrony\n onCornerClick() {\n const\n { expanded } = me.firstChild.allDayEvents,\n toRefresh = [];\n let drivingView = null;\n me.eachView(({ allDayEvents }) => {\n // Collapsing, do the one with least overflow first\n if (expanded) {\n if (!drivingView || allDayEvents.maxEventCount < drivingView.maxEventCount) {\n drivingView = allDayEvents;\n }\n }\n // Expanding, we have to do the one with most overflow first\n else {\n if (!drivingView || allDayEvents.maxEventCount > drivingView.maxEventCount) {\n drivingView = allDayEvents;\n }\n }\n });\n // Toggle the driving one\n const r = drivingView.refreshCount;\n drivingView.expanded = !expanded;\n // If it found nothing to do, it will not have refreshed. They all must refresh eventually.\n if (drivingView.refreshCount === r) {\n toRefresh.push(drivingView);\n }\n // Now do the rest\n me.items.forEach(v => {\n if (v !== drivingView) {\n const\n { allDayEvents } = v,\n r = allDayEvents.refreshCount;\n // Don't recurse into this, call the real one.\n v.allDayEvents.expanded = !expanded;\n // If it found nothing to do, it will not have refreshed. They all must refresh eventually.\n if (allDayEvents.refreshCount === r) {\n toRefresh.push(allDayEvents);\n }\n }\n });\n // Some will not have found that they needed to refresh.\n // Force the issue so that they too correct their cellContentHeights\n for (let i = 0, { length } = toRefresh; i < length; i++) {\n toRefresh[i].doRefresh();\n }\n }\n }, me);\n // If the time axis changes size, we may acquire or lose overflow\n ResizeMonitor.addResizeListener(me._dayViewTimeAxis.timeAxisElement, me.syncDayViewScrollerVisibility.bind(me));\n }\n return me._dayViewTimeAxis;\n }\n /**\n * This creates a specially styled DayView which matches the view config (so that\n * dayStartTime, hourHeight etc. is synced) which shows nothing but its scrollbar.\n * This acts as the single visible scrollbar on the right of the ResourceView.\n * We cannot have the last DayView `overflowY : true` because then its flexed width\n * being equal to the others, its content area would be narrower\n * than the others.\n * @private\n */\n get dayViewScroller() {\n const me = this;\n if (!me._dayViewScroller) {\n const viewConfig = ObjectHelper.copyProperties({}, me.view, me.timeAxisConfigs);\n me._dayViewScroller = ResourceDayViewTimeAxis.create({\n ...viewConfig,\n // Must always be at the end\n weight : 999,\n // This view must update its shape on data change but it won't contain any events.\n // All it has to do is keep its allDayEventsHeight in sync with all its siblings\n // which happens on refresh.\n project : me.project,\n type : 'resourcedayviewtimeaxis',\n flex : `0 0 ${DomHelper.scrollBarWidth}px`,\n minWidth : DomHelper.scrollBarWidth,\n cls : 'b-resource-dayview-scroller',\n startDate : day0,\n endDate : day1,\n scrollable : {\n overflowX : false,\n overflowY : 'scroll'\n }\n }, me);\n me._dayViewScroller.scrollable.addPartner(me.dayViewTimeAxis.scrollable, 'y');\n // This may have to show/hide as we need/don't need a scrollbar\n me.monitorResize = true;\n }\n return me._dayViewScroller;\n }\n onElementResize() {\n super.onElementResize();\n this.syncDayViewScrollerVisibility();\n }\n syncDayViewScrollerVisibility() {\n // Show/hide our fake scroller if we have one\n if (this.dayViewScroller) {\n const needsScroller = this.dayViewTimeAxis.scrollable.hasOverflow('y');\n if (this.dayViewScroller.isVisible !== needsScroller) {\n this.dayViewScroller[needsScroller ? 'show' : 'hide']();\n }\n }\n }\n async scrollTo(target, options) {\n const { views } = this;\n if (target.isEventModel) {\n const owningView = views.find(v => v.eventStore.includes(target));\n owningView?.scrollTo(...arguments);\n target = owningView.getEventElement(target);\n // If the owning view was able to got to the passed event, ensure we\n // scroll it into view.\n if (target) {\n return this.scrollable.scrollIntoView(target, options);\n }\n }\n return views[0].scrollTo(...arguments);\n }\n createViewId(resource) {\n return `${this.id}-resource${this.config.view.type}-${resource.id}`;\n }\n updateDate(date) {\n // Inhibit any refreshes during multiple subview updates\n this.suspendVisibility();\n // Keep *all* views in sync, not just visible ones.\n // Hidden ones will not refresh immediately. If a view is not currently visible,\n // CalendarMixin's refresh schedules a refresh for the next time the view is painted.\n this.viewCache.forEach(v => {\n // We must skip the time axis and scroller that are added to handle Day/Week view scrolling\n if (!v.isResourceDayViewTimeAxis) {\n v.date = date;\n }\n });\n // Trigger one round of refreshes.\n this.resumeVisibility();\n if (this.viewType.isDayView) {\n // The allDayEvents refreshes might have caused one of them to be taller\n // than any others. We have to resync them after their refresh.\n this.items.forEach(v => {\n v.allDayEvents?.setEventContentHeight(v.allDayEvents?.cellContentHeight);\n });\n }\n }\n updateResourceWidth(value) {\n this.contentElement.style.setProperty('--resource-width', DomHelper.setLength(value));\n }\n updateWeekStartDay(weekStartDay, oldWeekStartDay) {\n super.updateWeekStartDay?.(weekStartDay);\n if (!this.isConfiguring) {\n this.syncViewConfig('weekStartDay', weekStartDay);\n }\n }\n updateHideNonWorkingDays(value) {\n if (!this.isConfiguring) {\n this.syncViewConfig('hideNonWorkingDays', value);\n }\n }\n updateNonWorkingDays(value) {\n if (!this.isConfiguring) {\n this.syncViewConfig('nonWorkingDays', value);\n }\n }\n updateIncludeTimeRanges(value) {\n if (!this.isConfiguring) {\n this.syncViewConfig('includeTimeRanges', value);\n }\n }\n syncViewConfig(configName, value) {\n const update = view => {\n view[configName] = value;\n };\n // Cache this during the run so that onChildViewConfigChange doesn't bounce\n this.syncingViewConfig = true;\n // Some configs must affect the DayView scroller axes.\n if (scrollAxesConfigs[configName]) {\n this.items.forEach(update);\n }\n // Most only go to the real child views.\n else {\n this.eachView(update);\n }\n this.syncingViewConfig = false;\n }\n descriptionRenderer() {\n return [...this.viewCache.items][0]?.description || 'No resources';\n }\n get startDate() {\n return new Date(Math.min(...this.items.reduce((result, v) => {\n if (!v.isResourceDayViewTimeAxis) {\n result.push(v.startDate);\n }\n return result;\n }, [])));\n }\n get endDate() {\n return new Date(Math.max(...this.items.reduce((result, v) => {\n if (!v.isResourceDayViewTimeAxis) {\n result.push(v.endDate);\n }\n return result;\n }, [])));\n }\n get stepUnit() {\n const firstItem = [...this.viewCache][0];\n return firstItem?.stepUnit;\n }\n get firstChild() {\n return this.items.filter(w => !w.isResourceDayViewTimeAxis)[0];\n }\n previous() {\n const firstItem = [...this.viewCache][0];\n // We may never have created a child view.\n if (firstItem) {\n this.date = DateHelper.add(this.date, -firstItem.duration, 'day');\n }\n }\n next() {\n const firstItem = [...this.viewCache][0];\n // We may never have created a child view.\n if (firstItem) {\n this.date = DateHelper.add(this.date, firstItem.duration, 'day');\n }\n }\n}\n// Special non-data reading classes to create the scrollers\n// either side of a series of DayViews.\nclass ResourceDayViewAllDayEvents extends CalendarRow {\n static get $name() {\n return 'ResourceDayViewAllDayEvents';\n }\n // Factoryable type name\n static get type() {\n return 'resourcedayviewalldayevents';\n }\n // The timeAxis's allDayEvents has overflow if any of the\n // real sibling DayView allDayEvents has overflow\n get hasOverflow() {\n return this.up('resourceview').views.some(v => v.allDayEvents?.hasOverflow);\n }\n createCellMap() {\n return emptyMap;\n }\n}\nclass ResourceDayViewTimeAxis extends DayView {\n static get $name() {\n return 'ResourceDayViewTimeAxis';\n }\n // Factoryable type name\n static get type() {\n return 'resourcedayviewtimeaxis';\n }\n static get configurable() {\n return {\n allDayEvents : {\n type : 'resourcedayviewalldayevents'\n }\n };\n }\n compose() {\n const result = super.compose();\n result['aria-hidden'] = true;\n return result;\n }\n // These axes have no say in this\n scrollToVisibleStartTime() {}\n createCellMap() {\n return emptyMap;\n }\n calculateCellContentHeight() {\n return 0;\n }\n getDateFromPosition(clientX, clientY, local = false) {\n const\n me = this,\n date = me.startDate,\n top = local ? 0 : me.dayContentElement.getBoundingClientRect().y,\n height = me.timeAxisElement.offsetHeight,\n dy = clientY - top;\n return DateHelper.round(\n DateHelper.add(DateHelper.clearTime(date), me.dayStartMs + Math.floor(dy / height * me.getDayLength()), 'ms'),\n me.increment);\n }\n}\nResourceDayViewAllDayEvents.initClass();\nResourceDayViewTimeAxis.initClass();\nResourceView.initClass();\nResourceView._$name = 'ResourceView';", "import DateHelper from '../../Core/helper/DateHelper.js';\nimport Responsive from '../../Core/widget/mixin/Responsive.js';\nimport Panel from '../../Core/widget/Panel.js';\nimport '../../Calendar/widget/CalendarDatePicker.js';\nimport '../../Scheduler/widget/ResourceFilter.js';\nimport '../../Core/widget/FilterField.js';\n/**\n * @module Calendar/widget/Sidebar\n */\n/**\n * This class is not supposed to be used directly. This widget provides the utility UI as the\n * {@link Calendar.view.Calendar#config-sidebar} of a {@link Calendar.view.Calendar Calendar} widget.\n *\n * Sidebar items provided by default:\n *\n * | Widget ref | Type | Weight | Description |\n * |------------------|----------------------------------------------|--------|---------------------------------------------|\n * | `datePicker` | {@link Calendar.widget.CalendarDatePicker} | 100 | Used to pick Calendar's active date |\n * | `eventFilter` | {@link Core.widget.FilterField} | 150 | Used to filter events by name |\n * | `resourceFilter` | {@link Scheduler.widget.ResourceFilter} | 200 | Used to select resources to show events for |\n *\n * The configuration of these items may be overridden:\n *\n * ```javascript\n * new Calendar({\n * sidebar : {\n * items : {\n * datePicker : {\n * // Never go to dates in the past\n * minDate : new Date()\n * },\n * eventFilter : {\n * // Let's have this at the top\n * weight : 50\n * },\n * resourceFilter : {\n * store : {\n * sorters : [{\n * field : 'name',\n * // By default this is in ascending name order\n * // Let's change that round.\n * ascending : false\n * }]\n * }\n * }\n * }\n * }\n * });\n * ```\n *\n * The {@link #config-bbar} is used to hold the navigation buttons (\"Today\" and next/previous) when the owning\n * `Calendar` is configured with {@link Calendar.view.Calendar#config-navigatorPlacement} set to `'sidebar'`. The\n * location of the `bbar`, as well as other options, can be changed via the `bbar` config, like so:\n *\n * ```javascript\n * new Calendar({\n * sidebar : {\n * bbar : {\n * dock : 'top'\n * }\n * }\n * });\n * ```\n *\n * {@inlineexample Calendar/widget/Sidebar.js}\n *\n * @extends Core/widget/Panel\n * @mixes Core/widget/mixin/Responsive\n * @classtype sidebar\n */\nexport default class Sidebar extends Panel.mixin(Responsive) {\n static get $name() {\n return 'Sidebar';\n }\n // Factoryable type name\n static get type() {\n return 'sidebar';\n }\n static get configurable() {\n return {\n focusable : false,\n ignoreParentReadOnly : true,\n bbar : {\n cls : 'b-cal-nav-item',\n layout : {\n justify : 'center'\n },\n items : {\n todayButtonSidebar : {\n text : 'L{Calendar.Today}',\n onClick : 'up.shiftToNow',\n weight : 200\n },\n prevButtonSidebar : {\n onClick : 'up.shiftPrevious',\n cls : 'b-borderless',\n icon : 'b-icon-previous',\n weight : 300\n },\n nextButtonSidebar : {\n onClick : 'up.shiftNext',\n cls : 'b-borderless',\n icon : 'b-icon-next',\n weight : 400\n }\n }\n },\n items : {\n datePicker : {\n type : 'datepicker',\n weight : 100,\n internalListeners : {\n selectionChange : 'up.onDatePickerSelectionChange'\n }\n },\n eventFilter : {\n type : 'filterfield',\n field : 'name',\n // We want this in second position\n weight : 150,\n placeholder : 'L{Filter events}',\n localeClass : this\n },\n resourceFilter : {\n ignoreParentReadOnly : true\n }\n },\n date : {\n $config : {\n equal : 'date'\n },\n value : null\n },\n eventStore : null,\n responsive : {}, // brand us as responsive so \"collapsed\" is tracked per responsive state\n stepUnitText : null,\n /**\n * May be configured with `'left'` or `'right'` to dock the Sidebar to either side.\n *\n * Defaults to `'left'`.\n * @config {'left'|'right'}\n * @default\n */\n side : 'left',\n collapsible : {\n tool : null\n },\n /**\n * The resource filtering widget which hides and shows events based upon\n * whether they are assigned to the selected resources.\n * @member {Scheduler.widget.ResourceFilter} resourceFilter\n */\n /**\n * A configuration object specifying options to change how the sidebar's resourcefilter is configured.\n * @config {ResourceFilterConfig}\n */\n resourceFilter : {\n type : 'resourcefilter',\n flex : '1 1 auto',\n weight : 200,\n minHeight : 110,\n scrollable : {\n overflowY : 'auto'\n },\n store : {\n sorters : [{\n field : 'name',\n ascending : true\n }]\n },\n // We must only see the resources that are filtered in\n masterFilter(r) {\n return this.eventStore.resourceStore.isAvailable(r);\n }\n }\n };\n }\n setupWidgetConfig(widgetConfig, type) {\n let result = super.setupWidgetConfig(...arguments);\n // A string becomes the defaultType (see below) with the html set to the string.\n if (result.ref === 'eventFilter') {\n result.store = this.initialConfig.eventStore;\n }\n // Apply our configuration to the resourceFilter if it has not been configured to be\n // a completely different type of widget\n if (result.ref === 'resourceFilter') {\n if (!result.type || result.type === this.resourceFilter.type) {\n result = Sidebar.mergeConfigs(this.resourceFilter, result);\n }\n }\n // Sidebar has to know these so it can set an optimum minWidth to prevent\n // the DatePicker from being crushed into a bad UX.\n if (result.type === 'datepicker') {\n this.element.classList.add('b-has-datepicker');\n this.element.classList.toggle('b-datepicker-with-events', Boolean(result.events));\n // Monitor rangeChange events from EventLists\n this.up('calendar')?.ion({\n rangeChange : 'onCalendarViewRangeChange',\n thisObj : this\n });\n }\n return result;\n }\n updateSide(side, oldSide) {\n const { classList } = this.element;\n classList.remove(`b-sidebar-${oldSide}`);\n classList.add(`b-sidebar-${side}`);\n if (this.collapsible) {\n this.collapsible.direction = side;\n }\n }\n updateStepUnitText(stepUnitText) {\n const\n me = this,\n { prevButtonSidebar, nextButtonSidebar } = me.widgetMap;\n if (prevButtonSidebar) {\n prevButtonSidebar.tooltip = stepUnitText ? me.L('L{Calendar.previous}', stepUnitText) : '';\n prevButtonSidebar.disabled = !stepUnitText;\n }\n if (nextButtonSidebar) {\n nextButtonSidebar.tooltip = stepUnitText ? me.L('L{Calendar.next}', stepUnitText) : '';\n nextButtonSidebar.disabled = !stepUnitText;\n }\n }\n updateEventStore(eventStore) {\n const { resourceFilter, datePicker } = this.widgetMap;\n if (resourceFilter) {\n resourceFilter.eventStore = eventStore;\n }\n if (datePicker) {\n datePicker.eventStore = eventStore;\n }\n }\n // Called when a DateRangeOwner mode changes its range. The event is relayed by the Calendar.\n // If the mode is an EventList in startDate->endDate mode, the date picker should match it\n onCalendarViewRangeChange({ source, new : { startDate, endDate } }) {\n const { datePicker } = this.widgetMap;\n // If the source is an event list, and *not* being driven by a fixed range around a date\n // and if datePicker is selecting a range, then datePicker must match the view's range.\n if (source.isEventList && !source.range && datePicker?.multiSelect === 'range') {\n datePicker.selection = [startDate, endDate];\n }\n }\n onDatePickerSelectionChange({ source, selection : [startDate, endDate], userAction }) {\n this.UIdateChange = userAction;\n // If the datePicker is selecting a range, apply the range to ListView modes\n // which are in startDate->endDate mode as opposed to showing a fixed range.\n if (source.multiSelect === 'range') {\n this.up('calendar')?.eachView(v => {\n if (v.isEventList && !v.range) {\n v.setConfig({\n startDate,\n endDate\n });\n }\n });\n }\n this.date = startDate;\n this.UIdateChange = false;\n }\n changeDate(date, oldDate) {\n date = typeof date === 'string' ? DateHelper.parse(date) : new Date(date);\n if (isNaN(date)) {\n throw new Error('Calendar widget date ingestion must be passed a Date, or a YYYY-MM-DD date string');\n }\n date = DateHelper.clearTime(date);\n // Protect the setter from processing a no-change.\n if (!oldDate || (date - oldDate)) {\n return date;\n }\n }\n updateDate(date, oldDate) {\n const { datePicker } = this.widgetMap;\n datePicker && (datePicker.value = date);\n this.trigger('dateChange', {\n date,\n oldDate,\n userAction : Boolean(this.UIdateChange)\n });\n }\n}\nSidebar.initClass();\nSidebar._$name = 'Sidebar';", "import DayView from './DayView.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\n/**\n * @module Calendar/widget/WeekView\n */\n/**\n * This is normally used as a {@link Calendar.view.Calendar#config-modes mode} of a Calendar (as seen in the live\n * demo below) but may be used standalone as a regular Widget.\n *\n * {@inlineexample Calendar/widget/CalendarWeekView.js}\n *\n * As a standalone widget, it will lack the capabilities of the {@link Calendar.view.Calendar Calendar}\n * class, such as keyboard-based event to event navigation and drag/drop features. As seen in this demo:\n *\n * {@inlineexample Calendar/widget/WeekView.js}\n *\n * A Panel which displays up to 7 columns of days with events for each day arranged in ascending\n * time order in each column.\n *\n * All day events, and multi day events which intersect that day are displayed in a row at the top.\n *\n * Intra day events are arranged in ascending time order down the column from the {@link Calendar.widget.DayView#config-dayStartTime} to\n * the {@link Calendar.widget.DayView#config-dayEndTime}\n *\n * Event rendering can be customized using the {@link #config-eventRenderer} method.\n *\n * @extends Calendar/widget/DayView\n *\n * @classtype weekview\n * @classtypealias week\n * @typingswidget\n */\nexport default class WeekView extends DayView {\n static $name = 'WeekView';\n static type = 'weekview';\n static get configurable() {\n return {\n localizableProperties : ['title', 'stepUnit'],\n title : 'L{Week}',\n stepUnit : 'L{weekUnit}',\n range : {\n magnitude : 1,\n unit : 'week'\n },\n responsive : {\n small : {\n descriptionFormat : 'Wp YYYY'\n },\n large : {\n descriptionFormat : ['MMMM YYYY (Wp)', 'S{MMM} - E{MMM YYYY} (S{Wp})']\n },\n '*' : {\n descriptionFormat : ['MMMM YYYY', 'S{MMM} - E{MMM YYYY}']\n }\n },\n week : null,\n // Override from DayView. This means that in addition to endDate being\n // locked to startDate, and being changed when startDate changes, startDate\n // is also locked to endDate and is changed when the endDate changes.\n fixedDuration : true\n };\n }\n /**\n * Returns the resource associated with this week view when used inside a {@link Calendar.widget.ResourceView}\n * @readonly\n * @member {Scheduler.model.ResourceModel} resource\n */\n calculateDuration() {\n // Override from CalendarMixin where the value is calculated from two passed dates.\n return 7;\n }\n updateWeekStartDay(weekStartDay, oldWeekStartDay) {\n super.updateWeekStartDay?.(weekStartDay);\n if (!this.isConfiguring) {\n const startDate = new Date(this.startDate);\n startDate.setDate(startDate.getDate() + weekStartDay - oldWeekStartDay);\n this.startDate = startDate;\n }\n }\n changeMonth() {\n const result = super.changeMonth(...arguments);\n result.ion({\n weekChange : 'onMonthWeekChange',\n thisObj : this\n });\n return result;\n }\n onMonthWeekChange({ source, newDate }) {\n // We have to keep the week number in sync\n this.week = source.getWeekNumber(newDate);\n }\n changeWeek(week, oldWeek) {\n const me = this;\n // If not an array, assume it's the week number\n week = Array.isArray(week) ? week : [me.month.year, week];\n // Only return a value if a change has been requested\n if (!ObjectHelper.isEqual(week, oldWeek)) {\n const\n minDate = me.minDate || me.calendar?.minDate,\n maxDate = me.maxDate || me.calendar?.maxDate;\n // Only do date arithmetic if we need to validate.\n if (!isNaN(minDate) || !isNaN(maxDate)) {\n const\n weekStart = me.month.getWeekStart(week),\n weekEnd = DateHelper.add(weekStart, me.duration, 'd');\n if (!isNaN(minDate) && weekStart < minDate) {\n return;\n }\n if (!isNaN(maxDate) && weekEnd > maxDate) {\n return;\n }\n }\n return week;\n }\n }\n updateWeek(week) {\n const\n me = this,\n { month, date, dayTime } = me;\n // If our current date is outside of the requested week, move it\n // to the week start which will set the startDate\n if (!date || !ObjectHelper.isEqual(month.getWeekNumber(date), week)) {\n me.date = dayTime.shiftDate(month.getWeekStart(week));\n }\n // In case a beforeDateChange handler.\n // vetoed the date change - we have to sync the week to our date.\n me.week = month.getWeekNumber(me.date);\n }\n}\nWeekView.initClass();\nWeekView._$name = 'WeekView';", "import CalendarMixin from './mixin/CalendarMixin.js';\nimport DayCellCollecter from './mixin/DayCellCollecter.js';\nimport DayCellRenderer from './mixin/DayCellRenderer.js';\nimport Panel from '../../Core/widget/Panel.js';\nimport DH from '../../Core/helper/DateHelper.js';\nimport Month from '../../Core/util/Month.js';\nimport DomSync from '../../Core/helper/DomSync.js';\nimport SDP from '../../Scheduler/widget/SchedulerDatePicker.js';\nimport Tooltip from '../../Core/widget/Tooltip.js';\n/**\n * @module Calendar/widget/YearView\n */\nconst isHoverGesture = {\n hover : 1,\n mouseover : 1\n};\n/**\n * This is normally used as a {@link Calendar.view.Calendar#config-modes mode} of a Calendar (as seen in the live\n * demo below) but may be used standalone as a regular Widget.\n *\n * {@inlineexample Calendar/widget/CalendarYearView.js}\n *\n * As a standalone widget, it will lack the capabilities of the {@link Calendar.view.Calendar Calendar}\n * class, such as keyboard-based event to event navigation and drag/drop features. As seen in this demo:\n *\n * {@inlineexample Calendar/widget/YearView.js}\n *\n * A Panel which displays a year's worth of months with days which have events highlighted.\n *\n * @extends Core/widget/Panel\n * @mixes Core/widget/mixin/Responsive\n * @mixes Calendar/widget/mixin/CalendarMixin\n * @mixes Calendar/widget/mixin/DayCellCollecter\n * @mixes Calendar/widget/mixin/DayCellRenderer\n *\n * @classtype yearview\n * @classtypealias year\n * @typingswidget\n */\nexport default class YearView extends Panel.mixin(CalendarMixin, DayCellCollecter, DayCellRenderer) {\n static $name = 'YearView';\n static type = 'yearview';\n static get configurable() {\n return {\n textContent : false,\n localizableProperties : ['title', 'stepUnit'],\n title : 'L{Year}',\n scrollable : {\n overflowY : true\n },\n stepUnit : 'L{yearUnit}',\n dragUnit : 'day',\n month : true,\n /**\n * A date which specifies the year to display. All types of calendar view have a `date`\n * config which they use to set their visible date range according to their configuration\n * and type.\n * @config {Date}\n */\n date : {\n $config : {\n equal : 'date'\n },\n value : null\n },\n descriptionFormat : 'YYYY',\n /**\n * The year to display\n * @config {Number}\n */\n year : null,\n monitorResize : false,\n showWeekColumn : true,\n hideWeekColumnCls : 'b-hide-week-numbers',\n /**\n * The class name to add to calendar cells which are in the previous or next month.\n * @config {String}\n * @private\n */\n otherMonthCls : 'b-other-month',\n /**\n * By default, all months show six week rows. Pass `false` to only render as many rows\n * as needed.\n * @config {Boolean}\n */\n sixWeeks : true,\n /**\n * An empty function by default, but provided so that you can override it.\n *\n * This function is called for each cell rendered to allow developers to mutate the cell metadata, or\n * the CSS classes to be applied to the cell.\n *\n * The cellConfig (a {@link Core.helper.DomHelper#typedef-DomConfig}) definition passed as part of the\n * single parameter may be mutated to add `style` and `className`.\n *\n * ```javascript\n * dayCellRenderer : function(cellData) {\n * // I don't like Mondays!\n * if (cellData.date === 1) {\n * cellData.cls['dayoff'] = true;\n * }\n * }\n *\n *```\n *\n * A non-null return value from the renderer is used as the content of the day cell element.\n *\n * @config {Function} dayCellRenderer\n * @param {Object} cellData An object that contains data about the cell.\n * @param {Date} cellData.date The Date of this cell\n * @param {Scheduler.model.EventModel[]} cellData.events The array of events in this cell\n * @param {DomConfig} cellData.cellConfig A {@link Core.helper.DomHelper#typedef-DomConfig}\n * object that contains data about the cells element.\n * @param {String} cellData.cellConfig.style The style property is an object containing\n * style properties for the cell header element.\n * @param {String} cellData.cellConfig.cls The cls property is an object whose property\n * names will be added to the cell element if the property value is truthy.\n * @returns {DomConfig|String|null}\n *\n * @category Rendering\n */\n dayCellRenderer : null,\n monthSelector : '.b-yearview-month-name',\n focusable : false,\n /**\n * How to indicate the presence of events for a date. The default is `heatmap` which adds\n * classes depending on how many events intersect the date.Values may be:\n *\n * * `false` - Do not show events in cells.\n * * `true` - Show a heatmap of colours the intensity of which indicates event load.\n * * `'heatmap'` - Show a heatmap of colours the intensity of which indicates event load.\n * * `'count'` - Show a themeable badge containing the event count for a date.\n * * `'dots'` - Show small event-coloured bullets up to a maximum of {@link #config-maxDots}\n * to indicate event presence.\n * @prp {Boolean|'heatmap'|'dots'}\n * @default\n */\n showEvents : 'heatmap',\n /**\n * When {@link #config-showEvents} is `'dots'`, this is the maximum number of dots to show\n * below the date number in the cell.\n *\n * The default is four. Note that increasing this may lead to a cluttered UI in which the dots\n * obscure the date figure in the cell.\n *\n * @prp {Number}\n * @default\n */\n maxDots : 4,\n /**\n * When {@link #config-overflowPopupTrigger} is not a mouseover gesture, setting this to\n * a truthy value means that a tooltip containing the event count will be shown on hover of\n * a day cell.\n *\n * It may be specified as an Object which contains {@link Core.widget.Tooltip} config options,\n * and also the following option:\n *\n * - showNoEvents - When set to `true`, a tooltip containing \"No events\" is shown when\n * hovering empty day cells.\n *\n * For example:\n *\n * ```javascript\n * {\n * modes : {\n * year : {\n * // We want it to show if there are no visible events for that date.\n * // And we want the tip showing to the right of the cell\n * eventCountTip : {\n * showNoEvents : true,\n * align : 'l-r\n * }\n * }\n * }\n * }\n * ```\n * @prp {Boolean|Object}\n * @default\n */\n eventCountTip : null\n };\n }\n /**\n * Returns the resource associated with this year view when used inside a {@link Calendar.widget.ResourceView}\n * @readonly\n * @member {Scheduler.model.ResourceModel} resource\n */\n // Override from DayCellCollecter\n // We don't propagate. We copy all events into renderedEvents.\n createCellMap(options) {\n // We use the dateIndex, so gather all events which intersect. No need for propagation.\n const result = super.createCellMap(options = {\n skipPropagate : true,\n ...options\n });\n // YearView always places all its events as rendered events because we use skipPropagate\n // when creating the cell map, and just copy them all in so that the overflowPopup uses\n // them all. Any number of events is overflow for a YearView\n for (const cellData of result.values()) {\n cellData.renderedEvents.setEvents(cellData.events);\n }\n return result;\n }\n get date() {\n // If we have been injected with a specific date (Such from the Calendar Sidebar)\n // then use that as our anchor point. Fall back to the first visible event. If we are\n // without orientation use 1st January\n return this._date || (!this.isConfiguring && this.firstEventDate) || new Date(this.year, 0, 1);\n }\n next() {\n this.date = new Date(this.year + 1, this.date.getMonth(), this.date.getDate());\n }\n previous() {\n this.date = new Date(this.year - 1, this.date.getMonth(), this.date.getDate());\n }\n get firstEventDate() {\n const entries = [...this.cellMap.values()];\n if (entries.length) {\n return entries[0].date;\n }\n }\n get lastEventDate() {\n const entries = [...this.cellMap.values()];\n if (entries.length) {\n return entries[entries.length - 1].date;\n }\n }\n onCalendarPointerInteraction(domEvent) {\n const\n me = this,\n superCall = super.onCalendarPointerInteraction,\n {\n target,\n type\n } = domEvent;\n if (type === 'mousedown' || type.endsWith('click')) {\n // Any clicking after kicking off the overflow timer cancels it\n me.clearTimeout(me.cellOverflowTimer);\n }\n // Veto focusing out of the overflowPopup when mousedowning overflow button\n // (which is a cell which contains elements) so that the overflow popup doesn't flicker.\n if (type === 'mousedown' && me._overflowPopup?.isVisible && target.closest('.b-cal-cell-overflow')) {\n domEvent.preventDefault();\n }\n // If we're showing the overflow popup on click, and they clicked on an empty\n // cell, then they *might* be intending a dblclick, so we need to pause the\n // propagation of the click event into the processing\n if (me.overflowPopupTrigger === 'click' && me.autoCreate?.gesture === 'dblclick' && type === 'click' && target.closest(`.${me.emptyCellCls}`) && !me.emptyCellRenderer) {\n me.cellOverflowTimer = me.setTimeout({\n fn : superCall,\n delay : 300,\n args : [domEvent]\n });\n }\n else {\n return superCall.apply(me, arguments);\n }\n }\n changeMonth(month, oldMonth) {\n const\n me = this,\n listeners = {\n name : 'yearChangeListener',\n yearChange : 'onMonthYearChange',\n thisObj : me\n };\n me.detachListeners('yearChangeListener');\n if (month instanceof Month) {\n month.ion(listeners);\n me._year = month.year;\n }\n else {\n month = new Month({\n date : new Date(me.year || new Date().getFullYear(), 0, 1),\n weekStartDay : me.weekStartDay,\n hideNonWorkingDays : me.hideNonWorkingDays,\n nonWorkingDays : me.nonWorkingDays,\n sixWeeks : me.sixWeeks,\n internalListeners : listeners\n });\n }\n if (me.nonWorkingDays == null) {\n me.nonWorkingDays = me._month.nonWorkingDays;\n }\n // Keep our property in line with reality\n me._year = month.year;\n return month;\n }\n onMonthYearChange({ source : { year, date } }) {\n const me = this;\n // Keep our property in line with reality\n me._year = year;\n if (!me.isConfiguring) {\n me._cellMap?.clear();\n me.date = date;\n me.refresh();\n }\n }\n // Override for the YearView. We have to scroll *months* into view\n scrollTo(date, options = { animate : true }) {\n const me = this;\n // We do not display events. If passed an event, scroll to its start date.\n date = me.ingestDate(date.isEventModel ? date.startDate : date);\n // If we do not own the date, move to that date.\n if (!DH.betweenLesser(date, me.startDate, me.endDate) || !me.getDayElement(date, true)) {\n me.date = date;\n }\n else {\n const monthEl = me.eventContentElement.querySelector(`[data-month-index=\"${date.getMonth()}\"]`);\n monthEl && me.scrollable.scrollIntoView(monthEl, options);\n }\n }\n get eventsPerCell() {\n return 0;\n }\n get startDate() {\n return this.month.getOtherMonth(new Date(this.year, 0, 1)).startDate;\n }\n get endDate() {\n // It's exclusive of the day itself - this is a timepoint; 00:00 on the day after\n return DH.add(this.month.getOtherMonth(new Date(this.year, 11, 1)).endDate, 1, 'day');\n }\n /**\n * For a consistent API, allow startDate to set the year\n * @internal\n */\n set startDate(startDate) {\n this.date = startDate;\n }\n isValidTargetDate(date) {\n const newYear = date.getFullYear();\n if (newYear !== this.year) {\n const\n minDate = this.minDate || this.calendar?.minDate,\n maxDate = this.maxDate || this.calendar?.maxDate;\n // Only do date arithmetic if we need to.\n if (!isNaN(minDate) || !isNaN(maxDate)) {\n const { cellMonth } = this;\n if (!isNaN(minDate)) {\n // Work out what our new startDate would be.\n // eg startDate of Jan 2021 as a Calendar view is 27th Dec 20221.\n const newStartDate = cellMonth.getWeekStart(cellMonth.getWeekNumber(new Date(newYear, 0, 1)));\n // Veto navigation to before minDate.\n if (newStartDate < minDate) {\n return false;\n }\n }\n if (!isNaN(maxDate)) {\n // Move month to December to see what our new end date would be.\n // eg endDate of Dec 2021 as a Calendar view is 8th Jan 2022.\n cellMonth.date = new Date(newYear, 11, 31);\n // Veto navigation to after maxDate.\n // Month class's concept of date is inclusive. Its dates\n // refer to a 24 hour block unlike scheduling UIs so increment it.\n if (DH.add(cellMonth.endDate, 1, 'd') > maxDate) {\n return false;\n }\n }\n }\n }\n return true;\n }\n updateDate(date) {\n this.month.date = date;\n // Only scroll to the date if we are visible.\n // onInternalPaint will scroll the active date into view when we are shown\n if (this.isVisible && !this.isConfiguring) {\n this.scrollTo(date);\n }\n }\n changeYear(year) {\n if (this.isConfiguring) {\n return year;\n }\n this.month.year = year;\n return this.month.year;\n }\n changeShowEvents(showEvents, oldShowEvents) {\n return showEvents === true ? 'heatmap' : showEvents;\n }\n updateShowEvents(showEvents, oldShowEvents) {\n const { classList } = this.contentElement;\n showEvents && classList.add(`b-show-events-${showEvents}`);\n classList.remove(`b-show-events-${oldShowEvents}`);\n if (!this.isConfiguring) {\n this.doRefresh();\n }\n }\n updateShowWeekNumber() {\n this.bodyElement.classList[this.showWeekColumn ? 'remove' : 'add'](this.hideWeekColumnCls);\n }\n createCellData(date) {\n // So that createCellData can evaluate if the cell is \"other month\"\n // For YearView, the month needs to be moved along as the cells are created.\n this.month.month = date.getMonth();\n return super.createCellData(date);\n }\n // We must implement the CalendarMixin interface.\n // All views must expose a doRefresh method.\n doRefresh() {\n const\n me = this,\n {\n bodyElement : targetElement,\n month,\n dayCellCls,\n otherMonthCls,\n weekendCls,\n todayCls,\n nonWorkingDayCls,\n emptyCellCls,\n cellMap,\n showEvents,\n eventCountTip\n } = me,\n children = [],\n today = me.calendar?.today || new Date(),\n todayKey = DH.makeKey(today);\n for (let monthIndex = 0; monthIndex < 12; monthIndex++) {\n month.month = monthIndex;\n const\n monthHeader = {\n tag : 'button',\n className : 'b-yearview-month-name',\n html : DH.getMonthName(monthIndex),\n dataset : {\n // Month names must not look like day cells which have data-date=\"YYYY-MM-DD\"\n monthDate : DH.makeKey(new Date(me.year, monthIndex, 1))\n }\n },\n weeknameCells = [{\n className : 'b-week-number-cell'\n }],\n weekNameRow = {\n className : 'b-calendar-week b-calendar-weekdays',\n children : weeknameCells\n },\n monthElement = {\n className : 'b-yearview-month',\n children : [monthHeader, weekNameRow],\n dataset : {\n monthIndex\n }\n },\n weeks = monthElement.children;\n children.push(monthElement);\n let cellIndex = 0;\n month.eachWeek((week, dates) => {\n // Populate week day cells when processing first week of month.\n if (weeknameCells.length === 1) {\n for (let columnIndex = 0; columnIndex < 7; columnIndex++) {\n weeknameCells.push({\n className : {\n 'b-yearview-weekday-cell' : 1,\n [nonWorkingDayCls] : me.nonWorkingDays[month.canonicalDayNumbers[columnIndex]]\n },\n text : DH.format(dates[columnIndex], 'd1')\n });\n }\n }\n const\n weekElement = {\n className : 'b-calendar-week',\n dataset : {\n week : `${week[0]},${week[1]}`\n }\n },\n dayCells = weekElement.children = [{\n tag : 'button',\n ariaLabel : me.L('L{Calendar.weekOfYear}', week),\n className : 'b-week-number-cell',\n html : week[1]\n }];\n weeks.push(weekElement);\n for (let columnIndex = 0; columnIndex < 7; columnIndex++) {\n const\n date = dates[columnIndex],\n isOtherMonth = date.getMonth() !== month.month,\n key = DH.makeKey(date),\n day = date.getDay(),\n cellData = !me.isConfiguring && cellMap.get(key),\n events = cellData?.events,\n eventCount = isOtherMonth ? 0 : events?.length || 0,\n showOverflow = eventCount,\n cell = {\n // tabIndex : -1, When we implement Calendar Cell navigation\n style : {},\n className : {\n 'b-day-name' : 1,\n [dayCellCls] : 1,\n [emptyCellCls] : !eventCount\n },\n dataset : {\n date : key,\n cellIndex,\n columnIndex\n }\n };\n let content = String(date.getDate());\n Object.assign(cell.className, {\n [weekendCls] : DH.weekends[day],\n [todayCls] : key === todayKey && !isOtherMonth,\n [nonWorkingDayCls] : me.nonWorkingDays[day],\n [otherMonthCls] : isOtherMonth,\n 'b-cal-cell-overflow' : showOverflow,\n [SDP.getEventCountClass(eventCount)] : showOverflow,\n [`b-day-of-week-${day}`] : 1\n });\n if (me.dayCellRenderer) {\n const result = me.callback(me.dayCellRenderer, me, [{ cellConfig : cell, date, events : cellData?.events?.map(data => data.eventRecord) || [] }]);\n if (result != null) {\n content = result;\n }\n }\n // Event count tooltip to show only if the overflow popup is not shown on hover.\n if (eventCountTip && !(isHoverGesture[me.overflowPopupTrigger])) {\n const btip = eventCount ? me.L('L{ResourceInfoColumn.eventCountText}', eventCount) : eventCountTip.showNoEvents ? me.L('L{noEvents}') : null;\n if (btip) {\n const tipData = Tooltip.encodeConfig(eventCountTip);\n cell.dataset = {\n ...cell.dataset,\n ...tipData,\n btip\n };\n }\n }\n if (showEvents === 'dots') {\n const children = [];\n for (let i = 0; i < Math.min(eventCount || 0, me.maxDots); i++) {\n const eventDomConfig = me.createEventDomConfig({\n eventRecord : events[i].eventRecord,\n // renders without content with just background colour\n minimal : true\n });\n children.push(eventDomConfig);\n }\n content = [typeof content === 'object' ? content : {\n tag : 'span',\n html : content\n }, {\n className : 'b-cal-minimal-event-container',\n children\n }];\n }\n else if (showEvents === 'count') {\n const count = eventCount;\n content = [typeof content === 'object' ? content : {\n tag : 'span',\n html : content\n }, count ? {\n dataset : {\n count\n },\n class : {\n 'b-cell-events-badge' : 1\n },\n text : count\n } : null];\n }\n // Cell content\n cell.children = [{\n className : 'b-calendar-cell-inner',\n [typeof content === 'string' ? 'html' : 'children'] : content\n }];\n dayCells.push(cell);\n cellIndex++;\n }\n });\n }\n DomSync.sync({\n targetElement,\n domConfig : {\n children\n }\n });\n me.refreshCount = (me.refreshCount || 0) + 1;\n /**\n * Fires when this YearView refreshes.\n * @param {Calendar.widget.YearView} source The triggering instance.\n * @event refresh\n */\n me.trigger('refresh');\n }\n getDayElement(date, strict) {\n if (typeof date !== 'string') {\n date = DH.makeKey(date);\n }\n // Enforce strict meaning this view must own that date\n if (strict && parseInt(date.substr(0, 4)) !== this.year) {\n return;\n }\n // In a multi month view, we must filter out dates which are in the \"other month\" category.\n return this.contentElement.querySelector(`.b-calendar-cell[data-date=\"${date}\"]:not(.b-other-month)`);\n }\n // Override in this class to eliminate \"other\" month cells.\n getCell() {\n return this.getDayElement(...arguments);\n }\n onInternalPaint({ firstPaint }) {\n if (firstPaint) {\n this.refresh();\n }\n // If we are animating into view, we have to jump over that.\n this.setTimeout(() => this.scrollTo(this.date, { animate : false }), 10);\n }\n}\nYearView.initClass();\nYearView._$name = 'YearView';", "import Base from '../../../Core/Base.js';\nimport DomHelper from '../../../Core/helper/DomHelper.js';\nimport SchedulerEventNavigation from '../../../Scheduler/view/mixin/EventNavigation.js';\n/**\n * @module Calendar/view/mixin/EventNavigation\n */\nconst isCalendarMixin = w => w.isCalendarMixin;\n/**\n * Mixin that tracks event selection by clicking on one or more events in the calendar.\n * @mixin\n * @extends Scheduler/view/mixin/EventNavigation\n *\n * @typings Scheduler.view.mixin.EventNavigation -> Scheduler.view.mixin.SchedulerEventNavigation\n */\nexport default Target => class EventNavigation extends SchedulerEventNavigation(Target || Base) {\n // region Hidden configs\n /**\n * @method beforeAssignmentDelete\n * @hide\n */\n // endRegion\n static get configurable() {\n return {\n /**\n * A config object to use when creating the {@link Core.helper.util.Navigator}\n * to use to perform keyboard navigation in the timeline.\n * @config {NavigatorConfig}\n * @default\n * @category Misc\n * @internal\n */\n navigator : {\n allowCtrlKey : true,\n scrollSilently : true,\n datasetIdProperty : 'eventId',\n // TAB navigation is used, so the Navigator *reacts* to navigation rather than\n // listens for keystrokes and moves focus.\n itemsTabbable : true,\n // Override inherited SchedulerEventNavigation handlers\n keys : {\n ArrowUp : null,\n ArrowDown : null,\n Escape : null,\n Tab : null,\n 'SHIFT+Tab' : null\n }\n }\n };\n }\n normalizeTarget(event) {\n return event.eventRecord;\n }\n changeNavigator(navigator) {\n const me = this;\n // Force evaluation to create the eventSelector\n me.getConfig('eventCls');\n return super.changeNavigator(me.constructor.mergeConfigs({\n target : me.element,\n itemSelector : `.b-cal-cell-overflow,.b-cal-cell-no-content,${me.eventSelector}:not(.b-minimal)`,\n // Calendar doesn't have a scrollable.\n skipScrollIntoView : true\n }, navigator));\n }\n onViewRefresh() {\n super.onViewRefresh?.(...arguments);\n // If the view refreshed while active, correct the active element\n if (this.navigator.activeItem && !this.activeView._overflowPopup?.containsFocus) {\n const activeEvent = this.getEventRecord(this.navigator.activeItem);\n if (activeEvent) {\n this.navigator.updateActiveItem(this.getElementFromEventRecord(activeEvent));\n }\n }\n }\n onCalendarStoreChange({ action, records }) {\n const\n me = this,\n { navigator } = me,\n activeItem = navigator?.activeItem;\n // Handle keeping a close activeItem if the activeItem ever leaves the store\n if (activeItem && !me.eventStore.includes(activeItem.dataset.eventId)) {\n const\n activeView = me.constructor.fromElement(activeItem, isCalendarMixin) || me.activeView,\n { _overflowPopup } = activeView,\n nextItem = navigator.next;\n // If we're in a contiguous range of event bars and not using syncId to map\n // events to the same element, then the following events will just \"move up\".\n // Only the last element will be removed, so we \"navigate\" to the same element.\n if (nextItem === activeItem.nextSibling && !nextItem.parentNode.syncIdMap) {\n // Trigger a navigation event because focus will remain in the document\n // so we are silently navigating to the next item.\n navigator.triggerNavigate({\n eventPhase : Event.BUBBLING_PHASE,\n target : nextItem\n }, nextItem);\n }\n else {\n // First, navigate forwards or back\n let fallback = nextItem || navigator.previous;\n // But if we are in the overflow popup and that took us out because it was empty,\n // navigate forwards or back from the popup's source cell.\n if (_overflowPopup?.containsFocus && !_overflowPopup.contentElement.contains(fallback)) {\n const { target } = _overflowPopup.lastAlignSpec;\n // Move forward or backward from the cell.\n fallback = navigator.getAdjacent(1, target.nextSibling) || navigator.getAdjacent(-1, target);\n }\n // If a previous or next event element was not found, push focus\n // to where it came in from with a forced outward focus reversion if they clicked straight\n // in and there was no relatedTarget.\n if (!fallback) {\n me.widgetMap.viewContainer.revertFocus(true);\n }\n else {\n // Capture the full context of the soon-to-be-active fallback event.\n // We will need to recapture the corresponding element after the refresh.\n const\n nextActiveDate = activeView.getDateFromElement(fallback),\n nextActiveEventId = fallback.dataset.eventId,\n nextActiveView = me.constructor.fromElement(fallback).closest(isCalendarMixin);\n // Must keep focus in the Calendar if possible.\n // This item *should* remain undisturbed by a DomSync refresh\n fallback.focus();\n // After the impending refresh, restore focus\n nextActiveView.ion({\n refresh : () => {\n // Recapture the matching element after the refresh\n fallback = nextActiveView.getEventElement(nextActiveEventId, nextActiveDate);\n // May not always be one. YearView is not yet keyboard-navigable.\n if (fallback) {\n if (fallback === DomHelper.getActiveElement(fallback)) {\n // Trigger a navigation event because focus has remained in the document\n // so it was a silent navigate to the next item.\n navigator.triggerNavigate({\n eventPhase : Event.BUBBLING_PHASE,\n target : fallback\n }, fallback);\n }\n else {\n fallback.focus();\n }\n }\n navigator.updateActiveItem(fallback, activeItem);\n },\n once : true\n });\n }\n }\n }\n super.onCalendarStoreChange?.(...arguments);\n }\n onElementKeyDown(keyEvent) {\n if (keyEvent.target.closest(this.navigator.itemSelector)) {\n super.onElementKeyDown?.(keyEvent);\n }\n }\n /**\n * The currently focused event record.\n * @property {Scheduler.model.EventModel}\n * @readonly\n */\n get activeEvent() {\n const { activeItem } = this.navigator;\n if (activeItem) {\n return this.resolveEventRecord(activeItem);\n }\n }\n // This does not need a className on Widgets.\n // Each *Class* which doesn't need 'b-' + constructor.name.toLowerCase() automatically adding\n // to the Widget it's mixed in to should implement thus.\n get widgetClass() {}\n};\n", "import Base from '../../../Core/Base.js';\nimport ArrayHelper from '../../../Core/helper/ArrayHelper.js';\nimport SchedulerEventSelection from '../../../Scheduler/view/mixin/EventSelection.js';\nimport GlobalEvents from '../../../Core/GlobalEvents.js';\n/**\n * @module Calendar/view/mixin/EventSelection\n */\n/**\n * Mixin that tracks event selection by clicking on one or more events in the calendar.\n * @mixin\n * @extends Scheduler/view/mixin/EventSelection\n *\n * @typings Scheduler.view.mixin.EventSelection -> Scheduler.view.mixin.SchedulerEventSelection\n */\nexport default Target => class EventSelection extends SchedulerEventSelection(Target || Base) {\n //region Hidden configs\n /**\n * @event eventSelectionChange\n * @hide\n */\n /**\n * @event assignmentSelectionChange\n * @hide\n */\n /**\n * @member {Scheduler.model.AssignmentModel[]} selectedAssignments\n * @hide\n */\n /**\n * @config {String} eventAssignHighlightCls\n * @hide\n */\n /**\n * @method deselectAssignment\n * @param {Scheduler.model.AssignmentModel} assignment The assignment to deselect\n * @hide\n */\n /**\n * @method deselectAssignments\n * @param {Scheduler.model.AssignmentModel[]} assignments Assignments to be deselected\n * @hide\n */\n /**\n * @method isAssignmentSelected\n * @param {Scheduler.model.AssignmentModel} assignment The assignment\n * @hide\n */\n /**\n * @method selectAssignment\n * @param {Scheduler.model.AssignmentModel} assignment The assignment to select\n * @param {Boolean} [preserveSelection] Pass `true` to preserve any other selected assignments\n * @hide\n */\n /**\n * @method selectAssignments\n * @param {Scheduler.model.AssignmentModel[]} assignments Assignments to be selected\n * @hide\n */\n //endregion\n static configurable = {\n eventSelectedCls : 'b-selected'\n };\n //region Events\n /**\n * Fired any time there is a change to the events selected in the Calendar.\n * @event selectionChange\n * @param {Calendar.view.Calendar} source The Calendar instance.\n * @param {'select'|'deselect'|'update'|'clear'} action One of the actions 'select', 'deselect', 'update',\n * 'clear'\n * @param {Scheduler.model.EventModel[]} selected An array of the Events added to the selection.\n * @param {Scheduler.model.EventModel[]} deselected An array of the Event removed from the selection.\n * @param {Scheduler.model.EventModel[]} selection The new selection.\n */\n //endregion\n normalizeTarget(event) {\n return event.eventRecord;\n }\n /**\n * Responds to mutations of the underlying selection Collection.\n * Keeps the UI synced, selectionChange event is fired when `me.silent` is falsy.\n * @private\n */\n onSelectedCollectionChange({ added, removed }) {\n const\n me = this,\n selection = me.selectedCollection,\n selected = added || [],\n deselected = removed || [];\n me.updateSelected();\n if (!me.silent) {\n const action = (selection.count > 0)\n ? ((selected.length > 0 && deselected.length > 0)\n ? 'update'\n : (selected.length > 0\n ? 'select'\n : 'deselect'))\n : 'clear';\n me.trigger('selectionChange', {\n action,\n selection : selection.values,\n selected,\n deselected\n });\n }\n }\n onCalendarStoreChange({ action, records }) {\n // Deselect on remove, not load.\n // Calendar can load and discard many time periods during navigation.\n // Only events which are actually removed become unselected.\n if (action === 'remove') {\n this.selectedCollection.remove(...records);\n }\n super.onCalendarStoreChange?.(...arguments);\n }\n /**\n * Deselects all {@link Scheduler.model.EventModel events}.\n * @category Selection\n */\n clearEventSelection() {\n this.selectedCollection.clear();\n }\n /**\n * The {@link Scheduler.model.EventModel events} which are selected.\n * @property {Scheduler.model.EventModel[]}\n * @category Selection\n */\n get selectedEvents() {\n return this.selectedCollection.values;\n }\n set selectedEvents(events) {\n events = ArrayHelper.asArray(events);\n // Replace the entire selected collection with the new record set\n this.selectedCollection.splice(0, this.selectedCollection.count, events);\n }\n /**\n * Returns `true` if the {@link Scheduler.model.EventModel event} is selected.\n * @param {Scheduler.model.EventModel} event The event\n * @returns {Boolean} Returns `true` if the event is selected\n * @category Selection\n */\n isEventSelected(event) {\n return this.selectedCollection.includes(event);\n }\n /**\n * Selects the passed {@link Scheduler.model.EventModel event} *if it is not selected*.\n * @param {Scheduler.model.EventModel} event The event to select\n * @param {Boolean} [preserveSelection] Pass `true` to preserve any other selected events\n * @category Selection\n */\n select(event, preserveSelection = false) {\n this.selectEvent(event, preserveSelection);\n }\n /**\n * Selects the passed {@link Scheduler.model.EventModel event} *if it is not selected*.\n * @param {Scheduler.model.EventModel} event The event select\n * @param {Boolean} [preserveSelection] Pass `true` to preserve any other selected events\n * @category Selection\n */\n selectEvent(event, preserveSelection = false) {\n const { selectedCollection } = this;\n // If the event is already selected, this is a no-op.\n // In this case, selection must not be cleared even in the absence of preserveSelection\n if (!this.isEventSelected(event) && this.isEventSelectable(event) !== false) {\n preserveSelection ? selectedCollection.add(event) : selectedCollection.splice(0, selectedCollection.count, event);\n }\n }\n /**\n * Deselects the passed {@link Scheduler.model.EventModel event}*if it is selected*.\n * @param {Scheduler.model.EventModel} event The event to deselect.\n * @category Selection\n */\n deselect(event) {\n this.deselectEvent(event);\n }\n /**\n * Deselects the passed {@link Scheduler.model.EventModel event} *if it is selected*.\n * @param {Scheduler.model.EventModel} event The event to deselect.\n * @category Selection\n */\n deselectEvent(event) {\n if (this.isEventSelected(event)) {\n this.selectedCollection.remove(event);\n }\n }\n /**\n * Adds {@link Scheduler.model.EventModel events} to the selection.\n * @param {Scheduler.model.EventModel[]} events Events to be selected\n * @category Selection\n */\n selectEvents(events) {\n this.selectedCollection.add(events.filter(event => this.isEventSelectable(event) !== false));\n }\n /**\n * Removes {@link Scheduler.model.EventModel events} from the selection.\n * @param {Scheduler.model.EventModel[]} events Events to be deselected\n * @category Selection\n */\n deselectEvents(events) {\n this.selectedCollection.remove(events);\n }\n /**\n * Mouse listener to update selection.\n * @private\n */\n onEventSelectionClick(clickedRecord) {\n // Multi selection: CTRL means preserve selection, just add or remove the event.\n // Single selection: CTRL deselects already selected event\n if (this.isEventSelected(clickedRecord)) {\n if (GlobalEvents.ctrlKeyDown) {\n this.deselectEvent(clickedRecord);\n }\n }\n else {\n this.selectEvent(clickedRecord, this.multiEventSelect && GlobalEvents.ctrlKeyDown);\n }\n }\n /**\n * Navigation listener to update selection.\n * @private\n */\n onEventNavigate({ event, item }) {\n // Navigating out of the navigation domain leaves selection unchanged.\n if (item) {\n const eventRecord = this.activeView.getEventRecord(item);\n if (eventRecord) {\n // Normally, mousedown on a selected record with no modifier deselects.\n // Context menu should never deselect.\n if (event.button === 2 && this.isEventSelected(eventRecord)) {\n return;\n }\n this.onEventSelectionClick(eventRecord);\n }\n // Click outside of an event;\n else {\n this.clearEventSelection();\n }\n }\n }\n // we do not need this class to participate in widget CSS classes\n get widgetClass() {}\n};\n", "import VersionHelper from '../../Core/helper/VersionHelper.js';\nimport Factoryable from '../../Core/mixin/Factoryable.js';\nimport Featureable from '../../Core/mixin/Featureable.js';\nimport State from '../../Core/mixin/State.js';\nimport Base from '../../Core/Base.js';\nimport Panel from '../../Core/widget/Panel.js';\nimport Widget from '../../Core/widget/Widget.js';\nimport Responsive from '../../Core/widget/mixin/Responsive.js';\nimport ObjectHelper from '../../Core/helper/ObjectHelper.js';\nimport DateHelper from '../../Core/helper/DateHelper.js';\nimport TimeZoneHelper from '../../Core/helper/TimeZoneHelper.js';\nimport DomHelper from '../../Core/helper/DomHelper.js';\nimport Rectangle from '../../Core/helper/util/Rectangle.js';\nimport DynamicObject from '../../Core/util/DynamicObject.js';\nimport ScrollManager from '../../Core/util/ScrollManager.js';\nimport CalendarFeature from '../feature/CalendarFeature.js';\nimport CrudManagerView from '../../Scheduler/crud/mixin/CrudManagerView.js';\nimport CurrentConfig from '../../Scheduler/view/mixin/CurrentConfig.js';\nimport Sidebar from '../widget/Sidebar.js';\nimport AgendaView from '../widget/AgendaView.js';\nimport DayView from '../widget/DayView.js';\nimport MonthView from '../widget/MonthView.js';\nimport WeekView from '../widget/WeekView.js';\nimport YearView from '../widget/YearView.js';\nimport EventList from '../widget/EventList.js';\nimport ResourceView from '../widget/ResourceView.js';\nimport DayResourceView from '../widget/DayResourceView.js';\nimport CalendarStores from '../mixin/CalendarStores.js';\nimport SchedulerInterface from '../mixin/SchedulerInterface.js';\nimport EventNavigation from './mixin/EventNavigation.js';\nimport EventSelection from './mixin/EventSelection.js';\nimport RecurringEvents from '../../Scheduler/view/mixin/RecurringEvents.js';\nimport '../localization/En.js';\nimport '../widget/ModeSelector.js';\nimport '../../Core/widget/layout/Card.js';\nimport '../../Core/widget/ButtonGroup.js';\nimport '../../Core/widget/panel/PanelCollapserOverlay.js';\nimport '../feature/CalendarDrag.js';\nimport '../feature/EventEdit.js';\nimport '../feature/EventMenu.js';\nimport '../feature/EventTooltip.js';\nimport '../feature/ScheduleMenu.js';\nimport StringHelper from '../../Core/helper/StringHelper.js';\n/**\n * @module Calendar/view/Calendar\n */\nconst\n byWeight = (l, r) => (l.weight || 0) - (r.weight || 0),\n relayedEvents = /^.*event.*|.*resource.*|.*cell.*|.*row.*|.*schedule.*|daynumber.*|weeknumber.*|monthname.*|weekname.*$|beforedatechange|tickchange|.*showoverflowpopup|beforeautocreate|rangechange|weekflex/,\n isFocusedCalendarMixin = w => w.isCalendarMixin && w.containsFocus,\n // These are the configs which, when applied to the calendar are propagated down to child views.\n // modeDefaults *could* handle this task, but some configs make sense as Calendar-wide settings.\n propagatedConfigs = ['date', 'coreHours', 'resourceImagePath', 'hideNonWorkingDays', 'nonWorkingDays', 'dateFormat', 'visibleStartTime', 'filterEventResources'],\n emptyArray = Object.freeze([]),\n hasWeight = m => m.weight > 0,\n noDateChangeEvents = {\n weeknumberclick : 1,\n monthnameclick : 1\n },\n isMonthView = v => v.isMonthView || v.view?.type === 'monthview',\n isWeekView = v => v.isWeekView || v.view?.type === 'weekview';\n/**\n * @typedef {Object} CalendarHit\n * @property {'event'|'dayNumber'|'weekNumber'|'cellOverflow'|'schedule'} type The type of the target:\n * `'event'`, `'dayNumber'`, `'weekNumber'`, `'cellOverflow'`, or `'schedule'`.\n * @property {Date} date The date of the target.\n * @property {Scheduler.model.EventModel} eventRecord The target event record.\n */\n/**\n * A configurable, aggregated view of a {@link Scheduler.data.EventStore} which may comprise several\n * view types to display the events in different ways.\n *\n * This is the primary way of creating a calendar UI.\n *\n * {@inlineexample Calendar/view/Calendar.js}\n *\n * ## Calendar modes\n * A Calendar may be configured with {@link #config-modes} which describe the types of views of the\n * calendar data which should be shown.\n *\n * These are:\n * - `'agenda'`\n * - `'year'`\n * - `'month'`\n * - `'week'`\n * - `'day'`\n * - `'list'`\n * - `'resource'`\n * - `'dayresource'`\n *\n * All except `'list'` and `'resource'` and `'dayresource'` are included by default.\n *\n * The modes are instances of the following classes:\n *\n * - {@link Calendar.widget.AgendaView}\n * - {@link Calendar.widget.YearView}\n * - {@link Calendar.widget.MonthView}\n * - {@link Calendar.widget.WeekView}\n * - {@link Calendar.widget.DayView}\n * - {@link Calendar.widget.EventList}\n * - {@link Calendar.widget.ResourceView}\n * - {@link Calendar.widget.DayResourceView}\n *\n * Each may be reconfigured from its default configuration by specifying its mode value as an object:\n *\n * ```javascript\n * new Calendar({\n * appendTo : domElement,\n * modes : {\n * month : {\n * // Week number in a separate, clickable column\n * showWeekColumn : true\n * },\n * week : {\n * // Day columns start at 8am. No events shown before this\n * dayStartTime : 8\n * }\n * }\n * });\n * ```\n *\n * Modes may be omitted from the view by specifying its mode value as `null`.\n * To specify the initial active mode, {@link #config-mode} config should be used, to manage mode at runtime, {@link #property-mode} property is available.\n *\n * ```javascript\n * new Calendar({\n * appendTo : domElement,\n * mode : 'week',\n * modes : {\n * agenda : null,\n * year : null\n * }\n * });\n * ```\n *\n * Other provided UI elements may be omitted from the view by specifying their configuration values as `null`:\n *\n * ```javascript\n * new Calendar({\n * appendTo : domElement,\n *\n * // Do not show the top toolbar\n * tbar : null,\n *\n * // Do not show the sidebar\n * sidebar : null\n * });\n * ```\n *\n * Or, for more granularity:\n *\n * ```javascript\n * new Calendar({\n * appendTo : domElement,\n *\n * tbar : {\n * items : {\n * // Do not show the \"Today\" button in the top toolbar\n * todayButton : null\n * }\n * },\n *\n * sidebar : {\n * items : {\n * // Do not show the mini calendar in the sidebar\n * datePicker : null\n * }\n * }\n * });\n * ```\n *\n * ## Toolbar, sidebar and viewContainer\n * A Calendar is basically a {@link Core.widget.Panel} which contains nested widgets which implement\n * the complex UI. By default it has three immediate child widgets which may be accessed through the\n * following properties:\n *\n * - {@link #property-tbar} references the top toolbar, which is an instance of {@link Core.widget.Toolbar}.\n * - {@link #property-sidebar} references the sidebar, which is an instance of {@link Calendar.widget.Sidebar}.\n *
This item has a {@link Core.widget.Widget#config-weight} of `-10` by default, placing it at the\n * `inline-start` side of the Calendar.
If the Sidebar is configured with\n * {@link Calendar.widget.Sidebar#config-side} as `'end'`, then it uses `200` to move it to the\n * `inline-end` side.\n * - {@link #property-viewContainer} references the subordinate {@link Core.widget.Container} which manages the modes\n * and changes which mode is active through its {@link Core.widget.Container#property-layout}.\n *
This item has a {@link Core.widget.Widget#config-weight} of `100` by default, placing it after\n * the sidebar.\n *\n * The Calendar *may* be configured with extra {@link #config-items} which will be integrated into the\n * horizontal flexbox display, sharing space with the `sidebar` and `viewContainer`.\n * The order may be controlled using the {@link Core.widget.Widget#config-weight} property.\n *\n * These three child widgets may be reconfigured at instantiation time using their config options\n * {@link #config-tbar}, {@link #config-sidebar} and {@link #config-viewContainer}.\n *\n * ## Loading data\n *\n * Fundamentally, all data stores mentioned below are subordinate to the Calendar's\n * {@link #property-project Project} which is the managing object for the {@link #property-eventStore},\n * {@link #property-resourceStore}, {@link #property-assignmentStore}, {@link #property-timeRangeStore} and\n * {@link #property-resourceTimeRangeStore}\n *\n * A Calendar loads its events into an {@link Scheduler.data.EventStore}.\n *\n * The recommended way to load and sync data is to use a {@link Scheduler.data.CrudManager} configured with\n * the URL of web services:\n *\n * ```javascript\n * new Calendar({\n * appendTo : domElement,\n * crudManager : {\n * transport : {\n * load : {\n * url : '/data-providing-url'\n * }\n * sync : {\n * url : '/data-update-url'\n * }\n * },\n * autoLoad : true,\n * autoSync : true\n * }\n * });\n * ```\n *\n * JSON data should use this format:\n *\n * ```json\n * {\n * \"success\" : true,\n * \"resources\" : {\n * \"rows\" : [\n * {\n * \"id\" : 1,\n * \"name\" : 'Default Calendar',\n * \"eventColor\" : 'green'\n * }\n * ]\n * },\n * \"events\" : {\n * \"rows\" : [\n * {\n * \"id\" : 1,\n * \"name\" : 'Meeting',\n * \"startDate\" : '2020-10-01T10:00:00',\n * \"endDate\" : '2020-10-01T11:00:00',\n * \"resourceId\" : 1\n * }\n * ]\n * }\n * }\n * ```\n *\n * ### Multiple assignment\n *\n * When multiple resource assignment is required, data should look as below. Assignments\n * are seperate records which link events to resources by connecting the ids of each.\n *\n * In this example, event id `1` is assigned to resources `1` and `2`\n *\n * Note that there is __no__ `resourceId` field in the event data:\n *\n * ```json\n * {\n * \"success\" : true,\n * \"resources\" : {\n * \"rows\" : [\n * {\n * \"id\" : 1,\n * \"name\" : 'Default Calendar',\n * \"eventColor\" : 'green'\n * }, {\n * \"id\" : 2,\n * \"name\" : 'Alternative Calendar',\n * \"eventColor\" : 'red'\n * }\n * ]\n * },\n * \"events\" : {\n * \"rows\" : [\n * {\n * \"id\" : 1,\n * \"name\" : 'Meeting',\n * \"startDate\" : '2020-10-01T10:00:00',\n * \"endDate\" : '2020-10-01T11:00:00'\n * }\n * ]\n * },\n * \"assignments\" : {\n * \"rows\" : [\n * {\n * id : 1,\n * eventId : 1,\n * resourceId : 1\n * }, {\n * id : 2,\n * eventId : 1,\n * resourceId : 2\n * }\n * ]\n * }\n * }\n * ```\n *\n * ### Loading time ranges\n *\n * When using the {@link Calendar.feature.TimeRanges} feature, the time ranges are included in\n * named data blocks:\n *\n * ```json\n * {\n * success : true,\n * events : {...},\n * resources : {...},\n * timeRanges : {\n * rows : [\n * {\n * \"id\" : 1,\n * \"name\" : \"Post-conference\",\n * \"alignment\" : \"end\",\n * \"startDate\" : \"2020-10-15 15:00\",\n * \"endDate\" : \"2020-10-15 20:00\",\n * \"color\" : \"red\"\n * }\n * ]\n * }\n * }\n * ```\n *\n * When using a {@link Calendar.widget.ResourceView}, resource-specific time ranges may\n * also be included in the data. These are only rendered in subviews of the resource view\n * with matching resource ids:\n *\n * ```json\n * {\n * success : true,\n * events : {...},\n * resources : {...},\n * resourceTimeRanges : {\n * rows : [\n * {\n * \"id\" : 1,\n * \"resourceId\" : 1\n * \"name\" : \"Post-conference\",\n * \"alignment\" : \"end\",\n * \"startDate\" : \"2020-10-15 15:00\",\n * \"endDate\" : \"2020-10-15 20:00\",\n * \"color\" : \"red\"\n * }\n * ]\n * }\n * }\n * ```\n *\n * For more information on loading events and resources, see the {@link Scheduler.view.Scheduler}\n * documentation. Calendar uses the same data classes.\n *\n * ## Listening to events\n * The events emitted by the Calendar are documented {@link #event-eventClick here}. Note that in\n * addition to `click`, all other mouse events are also covered and all significant UI elements\n * are active, and follow the same naming convention.\n *\n * So there is a `dayNumberClick` event and a `weekNumberClick` event and a\n * `monthNameClick` event and so on.\n *\n * ## Specifying a default calendar\n *\n * To set the default calendar for your events, please use the {@link #config-defaultCalendar} config.\n *\n * ```javascript\n * new Calendar({\n * defaultCalendar : 123 // the id of your default calendar\n * });\n * ```\n *\n * You may specify {@link #config-defaultCalendar} as `null` to specify that when an event is\n * {@link #config-autoCreate auto created}, it is not automatically assigned to a calendar.\n *\n * ## State saving\n *\n * By default the {@link #property-mode} and {@link #property-hideNonWorkingDays} properties are saved\n * when a {@link #config-stateProvider} is used.\n *\n * You can configure other properties to be part of the persistent state:\n *\n * ```javascript\n * new Calendar({\n * stateful : [ 'date' ]\n * })\n * ```\n *\n * @extends Core/widget/Panel\n *\n * @mixes Core/widget/mixin/Responsive\n * @mixes Calendar/mixin/CalendarStores\n * @mixes Scheduler/crud/mixin/CrudManagerView\n * @mixes Scheduler/view/mixin/RecurringEvents\n * @mixes Calendar/view/mixin/EventNavigation\n * @mixes Calendar/view/mixin/EventSelection\n *\n * @features Calendar/feature/CalendarDrag\n * @features Calendar/feature/EventEdit\n * @features Calendar/feature/EventMenu\n * @features Calendar/feature/EventTooltip\n * @features Calendar/feature/ExternalEventSource\n * @features Calendar/feature/LoadOnDemand\n * @features Calendar/feature/ScheduleMenu\n * @features Calendar/feature/TimeRanges\n * @features Calendar/feature/WeekExpander\n *\n * @features Calendar/feature/print/Print\n *\n * @classtype calendar\n *\n * @widget\n */\nexport default class Calendar extends Panel.mixin(\n SchedulerInterface,\n CalendarStores,\n Featureable,\n CrudManagerView,\n EventNavigation,\n EventSelection,\n CurrentConfig,\n Responsive,\n State,\n RecurringEvents\n) {\n //region Config\n static get $name() {\n return 'Calendar';\n }\n // Factoryable type name\n static get type() {\n return 'calendar';\n }\n static get configurable() {\n return {\n // region Hidden configs\n /**\n * @event eventSelectionChange\n * @hide\n */\n /**\n * @hideconfigs htmlCls, autoUpdateRecord, record, textContent, content, html\n */\n /**\n * @hideproperties content, html\n */\n // endRegion\n // Insert features config here because it is inherited from Featurable, which is @internal\n // and therefore does not show up in the API docs in its default state.\n /**\n * Specifies the features to create and associate with the Calendar.\n *\n * The keys of this object are the names of features. The values are config objects for those features.\n *\n * ```javascript\n * features : {\n * // Exclude the CalendarDrag feature from the Calendar\n * drag : false,\n *\n * // Change the default configuration of a feature\n * eventTooltip : {\n * showOn : 'hover'\n * }\n * }\n * ```\n * @config {Object} features\n */\n /**\n *\n * After construction, this property can be used to access the Calendar's features and\n * reconfigure them.\n *\n * For example:\n *\n * ```javascript\n * myCalendar.features.eventTooltip.disabled = true;\n * ```\n * @member {Object} features\n */\n layout : 'hbox',\n /**\n * Enables events being recurring and also adds extra recurrence UI fields in the built-in event editor.\n * @config {Boolean}\n * @default true\n * @category Scheduled events\n */\n enableRecurringEvents : true,\n localizableProperties : [\n 'autoCreate.newName'\n ],\n crudManager : null,\n features : {\n drag : {},\n eventEdit : {},\n eventTooltip : {},\n scheduleMenu : {},\n eventMenu : {}\n },\n /**\n * Indicates where the Next/Previous/Today buttons should be placed.\n * @config {'toolbar'|'sidebar'}\n * @default 'toolbar'\n */\n navigatorPlacement : null,\n responsive : {\n small : {\n when : 600,\n once : {\n mode : 'day'\n }\n },\n medium : {\n when : 800\n },\n large : {\n overlaySidebar : false\n },\n '*' : {\n overlaySidebar : true,\n once : {\n mode : 'week'\n }\n }\n },\n responsiveRoot : true,\n stateful : [\n 'hideNonWorkingDays',\n 'mode'\n ],\n /**\n * A {@link Core.widget.Toolbar} which displays and manages the calendar title\n * and the buttons which manipulate the Calendar's temporal navigation and\n * active mode.\n *\n * Provided widgets include:\n *\n * - `toggleSidebar` A button to collapse and expand the {@link #config-sidebar}\n * - `todayButton` A button which moves the active view to include today's date.\n * - `prevButton` A button which moves the active view to its previous time span.\n *
__Note:__ The active view must yield a {@link Calendar.widget.mixin.CalendarMixin#property-stepUnit}\n * to use as the tooltip hint for this button, otherwise it will be disabled.\n * - `nextButton` A button which moves the active view to its next time span.\n *
__Note:__ The active view must yield a {@link Calendar.widget.mixin.CalendarMixin#property-stepUnit}\n * to use as the tooltip hint for this button, otherwise it will be disabled.\n * - `viewDescription` A widget which is used to display the `description` property of the active view.\n * - `spacer` A spacer widget which pushes following items to be aligned to the right.\n * - `modeSelector` A {@link Calendar.widget.ModeSelector} which contains buttons for selecting which\n * view is active. This is hidden if only one {@link #config-modes mode} is enabled in the Calendar.\n *\n * These have `weight` values 100 to 700. New items can be inserted at any position by\n * configuring them with an appropriate `weight`.\n *\n * @member {Core.widget.Toolbar} tbar\n * @readonly\n * @category Content\n */\n /**\n * A config object containing definitions of the toolbar of the Calendar.\n *\n * Its `items` property defines the buttons and informational widgets\n * provided by default.\n *\n * There are several provided widgets, each of which may be reconfigured using\n * an object, or disabled by configuring them as `null`.\n *\n * ```javascript\n * tbar : {\n * items : {\n * prevButton : null,\n * toggleSidebar : null\n * }\n * }\n * ```\n *\n * Provided widgets include:\n *\n * - `toggleSidebar` A button to collapse and expand the {@link #config-sidebar}\n * - `todayButton` A button which moves the active view to include today's date.\n * - `prevButton` A button which moves the active view to its previous time span.\n *
__Note:__ The active view must yield a {@link Calendar.widget.mixin.CalendarMixin#property-stepUnit}\n * to use as the tooltip hint for this button, otherwise it will be disabled.\n * - `nextButton` A button which moves the active view to its next time span.\n *
__Note:__ The active view must yield a {@link Calendar.widget.mixin.CalendarMixin#property-stepUnit}\n * to use as the tooltip hint for this button, otherwise it will be disabled.\n * - `viewDescription` A widget which is used to display the `description` property of the active view.\n * - `spacer` A spacer widget which pushes following items to be aligned to the right.\n * - `modeSelector` A {@link Calendar.widget.ModeSelector} which contains buttons for selecting which\n * view is active. This is hidden if only one {@link #config-modes mode} is enabled in the Calendar.\n *\n * These have `weight` values 100 to 800. New items can be inserted at any position by\n * configuring them with an appropriate `weight`.\n *\n * Configure this as `null` to remove the toolbar entirely.\n * @config {ToolbarConfig}\n */\n tbar : {\n cls : 'b-calendar-toolbar',\n items : {\n toggleSidebar : {\n icon : 'b-icon-menu-vertical',\n cls : 'b-sidebar-toggle b-borderless b-transparent',\n onClick : 'up.onToggleSidebarClick',\n weight : 100\n },\n todayButton : {\n text : 'L{Calendar.Today}',\n cls : 'b-cal-nav-item b-calendar-today-button',\n icon : 'b-icon-calendar-day',\n onClick : 'up.shiftToNow',\n weight : 200\n },\n prevButton : {\n onClick : 'up.shiftPrevious',\n cls : 'b-cal-nav-item b-borderless b-transparent',\n icon : 'b-icon-previous',\n weight : 300\n },\n nextButton : {\n onClick : 'up.shiftNext',\n cls : 'b-cal-nav-item b-borderless b-transparent b-cal-nav-next',\n icon : 'b-icon-next',\n weight : 400\n },\n viewDescription : {\n cls : 'b-calendar-view-desc',\n type : 'widget',\n flex : '',\n html : '\\xa0',\n overflowable : 'none',\n weight : 500\n },\n spacer : {\n type : 'widget',\n cls : 'b-toolbar-fill',\n weight : 600\n },\n modeSelector : {\n type : 'calendarModeSelector',\n weight : 700\n }\n }\n },\n /**\n * The child items of the Calendar view.\n *\n * The Calendar contains two child items:\n *\n * - `sidebar` The sidebar which by default contains a clickable date picker to show and/or select\n * the active date, and a Calendar filter UI to filter events belonging to the calendars\n * defined in the {@link Calendar.mixin.CalendarStores#config-resourceStore}.\n * - `viewContainer` A {@link Core.widget.layout.Card card layout}\n * {@link Core.widget.Container container} which contains the enabled {@link #config-modes}.\n *\n * These items may be reconfigured by specifying them as an object, for example:\n *\n * ```javascript\n * new Calendar({\n * appendTo : document.body,\n *\n * crudManager : {\n * transport : {\n * load : {\n * url : '/data-providing-url'\n * }\n * sync : {\n * url : '/data-update-url'\n * }\n * },\n * autoLoad : true,\n * autoSync : true\n * },\n *\n * // Reconfigure our viewContainer to change which \"mode\" is active upon startup\n * items : {\n * viewContainer : {\n * // Start looking at the week - its the fourth \"mode\" by default.\n * layout : {\n * activeIndex : 3\n * }\n * }\n * }\n * });\n * ```\n * @config {Object}\n * @private\n */\n items : {},\n /**\n * Configuration options to change how the subordinate {@link Core.widget.Container} which contains\n * the calendar's child views is created.\n *\n * After instantiation, this Container may be referenced using the {@link #property-viewContainer} property\n *\n * For example:\n * ```javascript\n * new Calendar({\n * appendTo : document.body,\n *\n * crudManager : {\n * loadUrl : '/data-providing-url',\n * syncUrl : '/data-update-url',\n * autoLoad : true,\n * autoSync : true\n * },\n *\n * // Reconfigure our viewContainer to change which \"mode\" is active upon startup\n * items : {\n * viewContainer : {\n * // No sliding in or out of child views\n * layout : {\n * animateCardChange : false\n * }\n * }\n * }\n * });\n * ```\n * @config {ContainerConfig} viewContainer\n */\n viewContainer : {\n $config : 'lazy',\n value : {\n type : 'container',\n weight : 100,\n cls : {\n 'b-calendar-viewcontainer' : 1\n },\n flex : '1 1 100%',\n layout : {\n type : 'card'\n },\n scrollable : {\n overflowY : true,\n overflowX : true\n },\n suppressChildHeaders : true,\n layoutStyle : {\n padding : 0\n },\n internalListeners : {\n beforeActiveItemChange : 'up.onBeforeModeChange',\n activeItemChange : 'up.onModeChange'\n }\n }\n },\n /**\n * Set to `true` to show the \"Weekends\" toggle button of the mode selector. Alternatively, this config\n * can be a {@link Core.widget.Button} config object to configure the button.\n * @config {Boolean|ButtonConfig}\n * @default\n */\n includeWeekendsButton : false,\n layoutStyle : {\n padding : 0,\n flexFlow : 'row nowrap'\n },\n /**\n * The {@link #config-modes} as widget instances.\n * @member {Object} modes\n */\n /**\n * Configures the view modes which are to be available in this Calendar.\n *\n * Normally, the property names in this object are the `type` names of the eight standard\n * Calendar views, and so the corresponding configuration object should be an object which\n * configures that type:\n *\n * - agenda - Configuration for a {@link Calendar.widget.AgendaView}\n * - year - Configuration for a {@link Calendar.widget.YearView}\n * - month - Configuration for a {@link Calendar.widget.MonthView}\n * - week - Configuration for a {@link Calendar.widget.WeekView}\n * - day - Configuration for a {@link Calendar.widget.DayView}\n * - list - Configuration for a {@link Calendar.widget.EventList}\n * - resource - Configuration for a {@link Calendar.widget.ResourceView}\n * - dayresource - Configuration for a {@link Calendar.widget.DayResourceView}\n *\n * By default, the following modes are included:\n *\n * - day\n * - week\n * - month\n * - year\n * - agenda\n *\n * Any of these may be reconfigured from its default, or omitted from the UI, by configuring the\n * property as `null`:\n *\n * ```javascript\n * modes : {\n * agenda : {\n * title : 'Conference events'\n * },\n * // Remove year view completely\n * year : null,\n * // Add an event list. This type of view is not included by default\n * list : {\n * range : 'month'\n * }\n * }\n * ```\n *\n * Note that the default order of the modes as listed above can be changed by configuring the\n * modes with a `weight` value which causes them to be sorted into ascending weight order.\n *\n * Non-Calendar widgets, outside of those eight types may be specified by including a `type` property\n * in the configuration block. This is the type string of any widget.\n *\n * If using a non-Calendar widget the widget must contain the following properties:\n *\n * - `title` A string used as the button text in the mode activation button.\n * - `description` A string used as the Calendar title when the mode is activated.\n *\n * For example, you might want to use a scheduler as a calendar mode. This can be done like this:\n *\n * ```javascript\n * modes : {\n * myScheduler : {\n * // If the mode name is not a standard Calender view\n * // we need to specify the type of Widget we are configuring here.\n * type : 'scheduler',\n *\n * // This text goes into the activation button\n * title : 'Timeline',\n * columns : [\n * { type : 'resourceInfo', field : 'name', text : 'Staff/Resource', width : 175 }\n * ],\n *\n * features : {\n * nonWorkingTime : true,\n * timeRanges : true,\n * resourceTimeRanges : true\n * },\n *\n * workingTime : {\n * fromHour : 7,\n * toHour : 22\n * },\n * }\n * }\n * ```\n *\n * @property {ContainerItemConfig} [modes.custom] Settings specific to custom mode. `custom` may be any `String` property within this configuration object.\n * @typings modes.custom -> {[mode: string]}:{Partial|boolean|null|undefined}\n *\n * @property {AgendaViewConfig|Boolean|null} [modes.agenda] Settings specific to `agenda` mode. Specify `null` or `false` to disable this mode.\n * @property {YearViewConfig|Boolean|null} [modes.year] Settings specific to `year` mode. Specify `null` or `false` to disable this mode.\n * @property {MonthViewConfig|Boolean|null} [modes.month] Settings specific to `month` mode. Specify `null` or `false` to disable this mode.\n * @property {WeekViewConfig|Boolean|null} [modes.week] Settings specific to `week` mode. Specify `null` or `false` to disable this mode.\n * @property {DayViewConfig|Boolean|null} [modes.day] Settings specific to `day` mode. Specify `null` or `false` to disable this mode.\n * @property {EventListConfig|Boolean|null} [modes.list] Settings specific to `list` mode. This mode is disabled by default.\n * @property {ResourceViewConfig|Boolean|null} [modes.resource] Settings specific to `resource` mode. This mode is disabled by default.\n * @property {DayResourceViewConfig|Boolean|null} [modes.dayresourceview] Settings specific to `dayresourceview` mode. This mode is disabled by default.\n * @config {Object} [modes]\n * @default\n */\n modes : {\n day : {\n // This view is locked to one day duration\n fixedDuration : true\n },\n week : {},\n month : {},\n year : {},\n agenda : {}\n },\n /**\n * Which of the built-in {@link #config-modes} should be the initially active view.\n * @config {'agenda'|'year'|'month'|'week'|'day'|'list'|'resource'|'dayresourceview'|String}\n * @default week\n */\n mode : {\n $config : 'lazy',\n value : 'week'\n },\n /**\n * The default settings applied to all child views.\n *\n * This is a dynamic object, and mutations of it will reapply the new value to all\n * child views.\n * @member {Object} modeDefaults\n */\n /**\n * An object to use to configure common properties for all {@link #config-modes} prior to their construction.\n * @config {Object}\n */\n modeDefaults : {\n value : null // use the value config so that the changer always runs so that Proxy is created\n },\n /**\n * The {@link #config-sidebar} as an instance of {@link Calendar.widget.Sidebar}.\n * @member {Core.widget.Container} sidebar\n * @readonly\n */\n /**\n * An optional config object to configure the {@link Calendar.widget.Sidebar} which is\n * shown next to the calendar views specified by the {@link #config-modes}.\n *\n * To disable the sidebar, configure it as `null`.\n *\n * To reconfigure it, specify this config value as an object. The following parameters include\n * several commonly reconfigured properties.\n * @config {Object|Boolean}\n * @param {'left'|'right'} side Which {@link Calendar.widget.Sidebar#config-side} to dock to.\n * @param {Boolean} collapsed May be initially {@link Calendar.widget.Sidebar#config-collapsed}.\n * @param {Object} items Reconfigure or add to the sidebar UI.\n * @param {DatePickerConfig} items.datePicker The {@link Core.widget.DatePicker} may be reconfigured using\n * an object, or configured away using `null`. Its default {@link Core.widget.Widget#config-weight} is 100.\n * @param {TextFieldConfig} items.eventFilter The eventFilter is a {@link Core.widget.TextField} which may\n * be used to filter the events by matched name. It may be reconfigured using an object, or configured away\n * using `null`. Its default {@link Core.widget.Widget#config-weight} is 150.\n * @param {ResourceFilterConfig} items.resourceFilter The {@link Scheduler.widget.ResourceFilter} may be\n * reconfigured using an object, or configured away using `null`. Its default\n * {@link Core.widget.Widget#config-weight} is 200.\n * @param {Object} items.resourceFilter.scrollable By default it scrolls in the Y axis.\n * @param {String|Number} items.resourceFilter.flex By default it uses flex `1 1 auto`.\n * @param {Function} items.resourceFilter.masterFilter The filter function to apply when loading resources\n * from the project's `resourceStore`. Defaults to only including resources which are filtered into the Project's\n * `resourceStore`. Configure this as `() => true` to always include all resources.\n */\n sidebar : {\n $config : {\n merge : 'objects'\n },\n value : {\n type : 'sidebar',\n side : 'left',\n scrollable : {\n overflowY : true\n },\n internalListeners : {\n dateChange : 'up.onCalendarDateChange',\n collapse : 'up.onCalendarSidebarToggle',\n expand : 'up.onCalendarSidebarToggle'\n }\n }\n },\n /**\n * An optional config object to configure the {@link Calendar.widget.CalendarDatePicker} which is\n * shown in the {@link #property-sidebar} next to the calendar views.\n *\n * To disable the datePicker, configure it as `null`.\n *\n * To reconfigure it, specify this config value as an object.\n *\n * Note that when `showEvents` is set in the `datePicker`, the cells are slightly larger,\n * therefore the `datePicker` takes up more space and so will make the\n * {@link #property-sidebar} a little wider than normal.\n * @config {Object|Boolean}\n * @param {Boolean|'count'|'dots'} [datePicker.showEvents] Displays the presence of events in each cell.\n * values may be:\n *\n * * `false` - Do not show events in cells.\n * * `true` - Show a themeable bullet to indicate the presence of events for a date.\n * * `'count'` - Show a themeable badge containing the event count for a date.\n * * '`dots'` - Show small event-coloured bullets (to a maximum of three) below the date.\n * @param {Boolean} [datePicker.collapsible] `true` to enable collapse into a header.\n * @param {String} [datePicker.title] The text to place in a header above the picker.\n * @param {Boolean} [datePicker.editMonth] `true` to enable setting the date using the controls\n * in the DatePicker header.\n */\n datePicker : {\n $config : {\n merge : 'objects'\n },\n value : {\n weight : 100,\n dayNameFormat : 'd1',\n editMonth : null,\n focusable : false,\n trapFocus : false\n }\n },\n /**\n * By default, the {@link #property-sidebar} expands and collapses taking width from the\n * calendar UI. Configure `overlaySidebar` as `true` to have it start collapsed, and then\n * **overlay** the calendar UI when the expand/collapse button is toggled.\n * @config {Boolean}\n * @default false\n */\n overlaySidebar : null,\n /**\n * The date which this Calendar encapsulates as its active date.\n *\n * This is usually selected by clicking in the {@link #property-sidebar}'s date picker\n * or by navigating the view forwards or backwards in time.\n *\n * This is also changed by clicking in day cells of the active view.\n *\n * This may be set programatically which will cause the currently active view to navigate to\n * encapsulate that date.\n * @member {Date} date\n */\n /**\n * The date which the Calendar, its {@link #property-sidebar}'s date picker, and\n * its active view should encapsulate upon creation.\n *\n * This defaults to current date unless {@link #state-saving state saving} has been\n * configured to save the date, in which case the calendar will start up showing the date\n * that was saved in state.\n * @config {Date}\n */\n date : {\n $config : {\n equal : 'date'\n },\n value : new Date()\n },\n /**\n * A {@link Core.helper.DateHelper} format string to use to create date output for\n * view descriptions.\n * @prp {String}\n */\n dateFormat : 'MMMM DD, YYYY',\n scrollManager : {\n $config : ['lazy', 'nullify'],\n value : {\n direction : 'vertical'\n }\n },\n viewUpdateDelay : 2000,\n /**\n * Get/set the calendar's read-only state. When set to `true`, any UIs for modifying data are disabled.\n * @member {Boolean} readOnly\n */\n /**\n * Configure as `true` to make the calendar read-only, by disabling any UIs for modifying data.\n *\n * __Note that checks MUST always also be applied at the server side.__\n * @config {Boolean}\n * @default false\n */\n readOnly : null,\n /**\n * Set to false if you don't want to allow events overlapping times for any one resource (defaults to true).\n * @config {Boolean}\n * @default\n */\n allowOverlap : true,\n testConfig : {\n viewUpdateDelay : 5,\n // Test environment must be prevented from clicking the UI very fast while network IO\n // is in flight. LoadOnDemand testing was susceptible to this.\n loadMask : {\n text : 'L{GridBase.loadMask}',\n showDelay : 0\n }\n },\n /**\n * Configure this as `true` to make picking a date in the {@link #config-sidebar}'s\n * date picker highlight the date cell in the active view.\n *\n * May also be specified as a function which will be passed the date cell element to enable\n * performing customized highlighting.\n *\n * @config {Boolean|Function}\n * @param {Date} date Cell date\n * @returns {Boolean} Returns `true` to make picking a date in a date picker\n */\n highlightDate : null,\n /**\n * If this config is set, then the `gesture` configured (which defaults to `dblclick`) creates a\n * new event at the mouse or touch event's time point.\n *\n * The exact time is rounded to the closest specified `step` value. This value is also used\n * for the {@link Core.widget.TimeField#property-step} value in the {@link Calendar.feature.EventEdit}'s\n * time input field.\n *\n * The duration of the created event is the specified `duration` value.\n *\n * If this is specified as `true`, the `gesture` becomes `dblclick`, and the other properties\n * are the default values listed below.\n *\n * If this is specified as a string, the string becomes the `gesture`, and the other properties\n * are the default values listed below.\n *\n * @property {String} [autoCreate.gesture='dblclick'] The event name which should trigger event creation at the event's position.\n * @property {String} [autoCreate.newName='New Event'] The name of an event created using `autoCreate` or a function to call which yields the name.\n * @property {String} [autoCreate.step='15 minutes'] The time unit by which to round the start click point of auto created events.\n * _Only for views which have a granularity of less than one day such as `WeekView` and `DayView'_.\n *\n * For views which show whole days, the start defaults to 8am.\n *\n * This is a string in the format required by {@link Core.helper.DateHelper#function-parseDuration-static}.\n *\n * This value is also used for the {@link Core.widget.TimeField#property-step} value in the\n * {@link Calendar.feature.EventEdit}'s time input field.\n *\n * @property {String} [autoCreate.duration='1 hour'] The default duration for auto created events.\n * @property {Number | String} [autoCreate.startHour=8] The default start hour for auto created events\n * in views where the time granularity is one day. In a DayView or WeekView where a mouse event position\n * will translate to a time of day, this is not used.\n *\n * This is the hour of the day to start the event at. It can be fractional or an HH:MM:SS time string.\n * @config {Object|String|Boolean}\n * @default\n */\n autoCreate : {\n gesture : 'dblclick',\n newName : 'L{Object.newEvent}',\n step : '15 minutes',\n duration : '1 hour',\n startHour : 8\n },\n focusable : false,\n // The common Navigator needs to know this\n eventCls : 'b-cal-event',\n /**\n * The week start day to be used throughout this Calendar, 0 meaning Sunday, 6 meaning Saturday.\n *\n * This propagates into all owned {@link #config-modes}.\n *\n * Defaults to {@link Core.helper.DateHelper#property-weekStartDay-static}. When the default value is used, changing locale\n * will dynamically change the week start day for the calendar and all {@link #config-modes}.\n *\n * __If__ this is configured in from the start, then locale values for the week start day\n * will __not__ apply.\n *\n * For example:\n * ```javascript\n * new Calendar({\n * // Apply to this Calendar only\n * weekStartDay : 1 // Week starts on Monday\n * //....\n * });\n * ```\n *\n * @config {Number} [weekStartDay]\n */\n weekStartDay : false,\n /**\n * Configure as `true` to hide {@link #config-nonWorkingDays} for each calendar view\n * @prp {Boolean}\n */\n hideNonWorkingDays : null,\n /**\n * Non-working days as an object where keys are day indices, 0-6 (Sunday-Saturday), and the value is `true`.\n *\n * This propagates into all owned {@link #config-modes}.\n *\n * Defaults to {@link Core.helper.DateHelper#property-nonWorkingDays-static}. When the default value is used, changing locale\n * will dynamically change the week start day for the calendar and all {@link #config-modes}.\n *\n * __If__ this is configured in from the start, then locale values for the week start day\n * will __not__ apply.\n *\n * Both header and event cells for non working days get the CSS class `b-nonworking-day` added.\n *\n * Note that this is independent of and in addition to weekend days. Cells for Saturday and\n * Sunday always get the CSS class `b-weekend` added.\n *\n * For example:\n * ```javascript\n * new Calendar({\n * // Apply to this Calendar only\n * nonWorkingDays : {\n * 0 : true // Only Sunday is non-working day\n * },\n * //....\n * });\n * ```\n *\n * @config {Object} [nonWorkingDays]\n */\n nonWorkingDays : false,\n coreHours : null,\n /**\n * Event which is used to show context menus via the context menu features\n * {@link Calendar.feature.EventMenu} and {@link Calendar.feature.ScheduleMenu}.\n * Available options are: 'contextmenu', 'click', 'dblclick'.\n * @config {'contextmenu'|'click'|'dblclick'}\n * @default\n * @category Misc\n */\n contextMenuTriggerEvent : 'contextmenu',\n /**\n * Set to true to listen for CTRL-Z (CMD-Z on Mac OS) keyboard event and trigger undo (redo when SHIFT is pressed).\n * Only applicable when using a {@link Core.data.stm.StateTrackingManager}.\n * @config {Boolean}\n * @default\n * @category Misc\n */\n enableUndoRedoKeys : true,\n /**\n * Path to load resource images from. Used by the resource headers in ResourceView and by\n * {@link Calendar.widget.mixin.CalendarMixin#config-showResourceAvatars} in event-displaying\n * modes.\n *\n * This is used to show resource avatars using the resource's\n * {@link Scheduler/model/ResourceModel#field-image} or\n * {@link Scheduler/model/ResourceModel#field-imageUrl} fields:\n *\n * * `image` represents image name inside the specified `resourceImagePath`,\n * * `imageUrl` represents fully qualified image URL.\n *\n * If an image is not specified for a resource, or the image is not found, the resource's\n * initials will be displayed.\n * @config {String}\n * @category Misc\n */\n resourceImagePath : null,\n /**\n * The minimum date to which the `startDate` of any child view may be navigated.\n * @member {Date} minDate\n */\n /**\n * The minimum date to which the `startDate` of any child view may be navigated.\n * @config {Date|String}\n */\n minDate : null,\n /**\n * The maximum date to which the `endDate` of any child view may be navigated.\n * @member {Date} maxDate\n */\n /**\n * The maximum date to which the `endDate` of any child view may be navigated.\n * @config {Date|String}\n */\n maxDate : null,\n /**\n * If this is set to `true`, then when determining which assigned resource of a multi assigned event\n * to use to create the event UI, the first resource which is still selected in the\n * {@link Calendar.widget.Sidebar#property-resourceFilter} is used.\n *\n * The default is to use the first resource in the assigned list.\n *\n * The resource's {@link Scheduler.model.ResourceModel#field-eventColor} is used as the colour for the\n * event unless the event has its own {@link Scheduler.model.EventModel#field-eventColor}.\n *\n * The resource's {@link Scheduler.model.ResourceModel#field-eventStyle} is used as the base of the style\n * for the event, and the event's {@link Scheduler.model.EventModel#field-style} is applied to it.\n * @config {Boolean}\n * @default false\n */\n filterEventResources : null,\n /**\n * An optional CSS class name to add to calendar date cells which encapsulate the calendar's\n * active {@link #property-date}.\n *\n * There is no theme rule connected to this date, so no built-in rendition of the active date.\n * The application may add view-specific CSS rules to provide visual indications.\n * @prp {String}\n */\n activeDateCls : null\n };\n }\n static get delayable() {\n return {\n refresh : {\n type : 'raf',\n cancelOutstanding : true\n },\n syncUIWithActiveView : {\n type : 'buffer',\n delay : 1,\n cancelOutstanding : true\n }\n };\n }\n //endregion\n compose() {\n const { includeWeekendsButton, navigatorPlacement } = this;\n return {\n class : {\n [`b-calendar-nav-${navigatorPlacement || 'toolbar'}`] : 1,\n 'b-calendar-include-weekends-button' : includeWeekendsButton\n }\n };\n }\n //region Overrides\n applyState() {\n // We want to inhibit multiple refreshes during the config changes that this will apply.\n // If we set the _hidden flag, views will queue any refreshes until we trigger the paint event.\n this._hidden = true;\n super.applyState(...arguments);\n this._hidden = false;\n this.triggerPaint();\n }\n onPaintOverride() {\n // Internal procedure used for paint method overrides\n // Not used in onInternalPaint() because it may be chained on instance and Override won't be applied\n }\n onInternalPaint() {\n if (this.onPaintOverride()) {\n return;\n }\n super.onInternalPaint();\n }\n onShowOverflowPopup({ overflowPopup }) {\n this.element.classList.add('b-overflow-popup-visible');\n overflowPopup.ion({\n hide : () => this.element.classList.remove('b-overflow-popup-visible'),\n once : true\n });\n }\n //endregion\n //region events\n /**\n * Fires before an event is removed. Can be triggered by user pressing [DELETE] or [BACKSPACE] or by the\n * event editor. Can for example be used to display a custom dialog to confirm deletion, in which case\n * records should be \"manually\" removed after confirmation:\n *\n * ```javascript\n * calendar.on({\n * beforeEventDelete({ eventRecords, context }) {\n * // Show custom confirmation dialog (pseudo code)\n * confirm.show({\n * listeners : {\n * onOk() {\n * // Remove the events on confirmation\n * context.finalize(true);\n * },\n * onCancel() {\n * // do not remove the events if \"Cancel\" clicked\n * context.finalize(false);\n * }\n * }\n * });\n *\n * // Prevent default behaviour\n * return false;\n * }\n * });\n * ```\n *\n * @event beforeEventDelete\n * @param {Calendar.view.Calendar} source The Calendar instance\n * @param {Scheduler.model.EventModel[]} eventRecords The records about to be deleted\n * @param {Object} context Additional removal context:\n * @param {Function} context.finalize Function to call to finalize the removal.\n * Used to asynchronously decide to remove the records or not. Provide `false` to the function to\n * prevent the removal.\n * @param {Boolean} [context.finalize.removeRecords = true] Provide `false` to the function to prevent\n * the removal.\n * @preventable\n */\n /**\n * Fires when a day spanning event is found, and the date to which its encapsulating event bar\n * extends has been calculated.\n *\n * The default result in the event's `propagateEndDate` property may be mutated by a listener.\n *\n * Note that this is an ending point in time, it does *not* refer to a 24 hour block. So setting\n * the `propagateEndDate` to `new Date(2022, 1, 10)` means that the event bar will occupy cells\n * up to and including February 9 2022 and no further.\n *\n * This is relayed from all modes, so a single listener may be used, for example:\n *\n * ```javascript\n * new Calendar({\n * listeners : {\n * eventPropagate(eventData) {\n * // If the event spills into the next day but not further\n * // then we do not want an extended event bar.\n * // An arrow will indicate that it continues rightwards.\n * if (eventData.eventEndDate < DateHelper.add(eventData.date, 2, 'd')) {\n * eventData.propagateEndDate = DateHelper.add(DateHelper.clearTime(eventData.eventRecord.startDate), 1, 'd');\n * }\n * }\n * }\n * });\n * ```\n *\n * The `eventEndDate` in the data block may also be changed to override the event's real end date.\n * This will mean that there will be no arrow indicating that the event continues:\n *\n * ```javascript\n * new Calendar({\n * listeners : {\n * eventPropagate(eventData) {\n * // If the event spills into the next day but not further\n * // then we do not want an extended event bar.\n * // Because we override the eventEndDate, no arrow will be present\n * // to indicate any continuation.\n * if (eventData.eventEndDate < DateHelper.add(eventData.date, 2, 'd')) {\n * eventData.propagateEndDate = eventData.eventEndDate = DateHelper.add(DateHelper.clearTime(eventData.eventRecord.startDate), 1, 'd');\n * }\n * }\n * }\n * });\n * ```\n *\n * @event eventPropagate\n * @param {Date} eventEndDate The end date for which to calculate the propagate end date.\n * @param {Date} propagateEndDate The system-calculated end point of the event bar.\n * @param {Boolean} isAllDay `true` if the event is an all day event, or spans multiple days.\n * @param {Boolean} isOverflow `true` if this is being called as part of further propagation.\n * @param {Boolean} overflows `true` if the event extends into future cells.\n * @param {Scheduler.model.EventModel} eventRecord The event record being propagated.\n * @param {Date} date The date from which the event is being propagated.\n */\n /**\n * Fires when an event bar is mouseovered in any view.\n * @event eventMouseOver\n * @param {Calendar.widget.mixin.CalendarMixin} source The view which triggered the event.\n * @typings source -> {typeof CalendarMixin}\n * @param {Event} domEvent The initiating DOM event.\n * @param {Date} date The date of the UI element which contains the event.\n * @param {HTMLElement} eventElement The UI element which represents the event.\n * @param {Scheduler.model.EventModel} eventRecord The event mouseovered.\n * @param {Scheduler.model.ResourceModel} resourceRecord The resource mouseovered if the UI includes a resource.\n * @param {Boolean} fromOverflowPopup `true` if the interaction was through the source view's\n * {@link Calendar.widget.mixin.DayCellRenderer#property-overflowPopup}.\n */\n /**\n * Fires when an event bar is mousedowned in any view.\n * @event eventMouseDown\n * @param {Calendar.widget.mixin.CalendarMixin} source The view which triggered the event.\n * @typings source -> {typeof CalendarMixin}\n * @param {Event} domEvent The initiating DOM event.\n * @param {Date} date The date of the UI element which contains the event.\n * @param {HTMLElement} eventElement The UI element which represents the event.\n * @param {Scheduler.model.EventModel} eventRecord The event mousedowned on.\n * @param {Scheduler.model.ResourceModel} resourceRecord The resource mousedowned on if the UI includes a resource.\n * @param {Boolean} fromOverflowPopup `true` if the interaction was through the source view's\n * {@link Calendar.widget.mixin.DayCellRenderer#property-overflowPopup}.\n */\n /**\n * Fires when an event bar is mouseupped in any view.\n * @event eventMouseUp\n * @param {Calendar.widget.mixin.CalendarMixin} source The view which triggered the event.\n * @typings source -> {typeof CalendarMixin}\n * @param {Event} domEvent The initiating DOM event.\n * @param {Date} date The date of the UI element which contains the event.\n * @param {HTMLElement} eventElement The UI element which represents the event.\n * @param {Scheduler.model.EventModel} eventRecord The event mouseupped.\n * @param {Scheduler.model.ResourceModel} resourceRecord The resource mouseupped if the UI includes a resource.\n * @param {Boolean} fromOverflowPopup `true` if the interaction was through the source view's\n * {@link Calendar.widget.mixin.DayCellRenderer#property-overflowPopup}.\n */\n /**\n * Fires when an event bar is clicked in any view.\n * @event eventClick\n * @param {Calendar.widget.mixin.CalendarMixin} source The view which triggered the event.\n * @typings source -> {typeof CalendarMixin}\n * @param {Event} domEvent The initiating DOM event.\n * @param {Date} date The date of the UI element which contains the event.\n * @param {HTMLElement} eventElement The UI element which represents the event.\n * @param {Scheduler.model.EventModel} eventRecord The event clicked on.\n * @param {Scheduler.model.ResourceModel} resourceRecord The resource clicked on if the UI includes a resource.\n * @param {Boolean} fromOverflowPopup `true` if the interaction was through the source view's\n * {@link Calendar.widget.mixin.DayCellRenderer#property-overflowPopup}.\n */\n /**\n * Fires when an event bar is double clicked in any view.\n * @event eventDblClick\n * @param {Calendar.widget.mixin.CalendarMixin} source The view which triggered the event.\n * @typings source -> {typeof CalendarMixin}\n * @param {Event} domEvent The initiating DOM event.\n * @param {Date} date The date of the UI element which contains the event.\n * @param {HTMLElement} eventElement The UI element which represents the event.\n * @param {Scheduler.model.EventModel} eventRecord The event double clicked on.\n * @param {Scheduler.model.ResourceModel} resourceRecord The resource double clicked on if the UI includes a resource.\n * @param {Boolean} fromOverflowPopup `true` if the interaction was through the source view's\n * {@link Calendar.widget.mixin.DayCellRenderer#property-overflowPopup}.\n */\n /**\n * Fires when an event bar is mouseouted in any view.\n * @event eventMouseOut\n * @param {Calendar.widget.mixin.CalendarMixin} source The view which triggered the event.\n * @typings source -> {typeof CalendarMixin}\n * @param {Event} domEvent The initiating DOM event.\n * @param {Date} date The date of the UI element which contains the event.\n * @param {HTMLElement} eventElement The UI element which represents the event.\n * @param {Scheduler.model.EventModel} eventRecord The event mouseouted.\n * @param {Scheduler.model.ResourceModel} resourceRecord The resource mouseouted if the UI includes a resource.\n * @param {Boolean} fromOverflowPopup `true` if the interaction was through the source view's\n * {@link Calendar.widget.mixin.DayCellRenderer#property-overflowPopup}.\n */\n /**\n * Fires when an event bar is right clicked in any view.\n * @event eventContextMenu\n * @param {Calendar.widget.mixin.CalendarMixin} source The view which triggered the event.\n * @typings source -> {typeof CalendarMixin}\n * @param {Event} domEvent The initiating DOM event.\n * @param {Date} date The date of the UI element which contains the event.\n * @param {HTMLElement} eventElement The UI element which represents the event.\n * @param {Scheduler.model.EventModel} eventRecord The event right clicked on.\n * @param {Scheduler.model.ResourceModel} resourceRecord The resource right clicked on if the UI includes a resource.\n * @param {Boolean} fromOverflowPopup `true` if the interaction was through the source view's\n * {@link Calendar.widget.mixin.DayCellRenderer#property-overflowPopup}.\n */\n /**\n * Fires when a day number is clicked in a view which shows day numbers. This will include\n * the cells of a {@link Calendar.widget.YearView YearView}, the cell header of cells\n * in a {@link Calendar.widget.MonthView MonthView}, and the day header in a\n * {@link Calendar.widget.DayView}.\n * @event dayNumberClick\n * @param {Calendar.widget.mixin.CalendarMixin} source The view which triggered the event.\n * @typings source -> {typeof CalendarMixin}\n * @param {Event} domEvent The initiating DOM event.\n * @param {Date} date The date clicked on.\n * @param {DayCell} cellData An object that contains data about the calendar cell for the date.\n * @param {Boolean} fromOverflowPopup `true` if the interaction was through the source view's\n * {@link Calendar.widget.mixin.DayCellRenderer#property-overflowPopup}.\n */\n /**\n * Fires when a week number is clicked. This will include the week number cells of a\n * {@link Calendar.widget.YearView YearView}, the week number in the first cell\n * in each row of a {@link Calendar.widget.MonthView MonthView}\n * @event weekNumberClick\n * @param {Calendar.widget.mixin.CalendarMixin} source The view which triggered the event.\n * @typings source -> {typeof CalendarMixin}\n * @param {Event} domEvent The initiating DOM event.\n * @param {Number[]} week The `[year, week]` clicked on.\n * @param {Date} date The date clicked on.\n */\n /**\n * Fires when a month name header in a {@link Calendar.widget.YearView YearView} is clicked on.\n * @event monthNameClick\n * @param {Calendar.widget.mixin.CalendarMixin} source The view which triggered the event.\n * @typings source -> {typeof CalendarMixin}\n * @param {Event} domEvent The initiating DOM event.\n * @param {Number} month The month index _(zero based)_ clicked on.\n * @param {Date} date The date of the first of the month clicked on.\n */\n /**\n * Fires when a cell overflow indicator is clicked in any view. This will include\n * the cells of a {@link Calendar.widget.YearView YearView} and the `+ n more` overflow\n * indicator of cells in a {@link Calendar.widget.MonthView MonthView}, and \"all day\" events section\n * of a {@link Calendar.widget.DayView}.\n * @event cellOverflowClick\n * @param {Calendar.widget.mixin.CalendarMixin} source The view which triggered the event.\n * @typings source -> {typeof CalendarMixin}\n * @param {Event} domEvent The initiating DOM event.\n * @param {Date} date The date clicked on.\n */\n /**\n * Fires when a mouseover made its way through to an empty part of any view.\n * @event scheduleMouseOver\n * @param {Calendar.widget.mixin.CalendarMixin} source The view which triggered the event.\n * @typings source -> {typeof CalendarMixin}\n * @param {Event} domEvent The initiating DOM event.\n * @param {Date} date The date mouseovered. _Note that in a {@link Calendar.widget.DayView},\n * this will include granular time information. For other views, this is the *start* of the date.\n */\n /**\n * Fires when a mousedown made its way through to an empty part of any view.\n * @event scheduleMouseDown\n * @param {Calendar.widget.mixin.CalendarMixin} source The view which triggered the event.\n * @typings source -> {typeof CalendarMixin}\n * @param {Event} domEvent The initiating DOM event.\n * @param {Date} date The date mousedowned on. _Note that in a {@link Calendar.widget.DayView},\n * this will include granular time information. For other views, this is the *start* of the date.\n */\n /**\n * Fires when a mouseup made its way through to an empty part of any view.\n * @event scheduleMouseUp\n * @param {Calendar.widget.mixin.CalendarMixin} source The view which triggered the event.\n * @typings source -> {typeof CalendarMixin}\n * @param {Event} domEvent The initiating DOM event.\n * @param {Date} date The date mouseupped on. _Note that in a {@link Calendar.widget.DayView},\n * this will include granular time information. For other views, this is the *start* of the date.\n */\n /**\n * Fires when a click made its way through to an empty part of any view.\n * @event scheduleClick\n * @param {Calendar.widget.mixin.CalendarMixin} source The view which triggered the event.\n * @typings source -> {typeof CalendarMixin}\n * @param {Event} domEvent The initiating DOM event.\n * @param {Date} date The date clicked on. _Note that in a {@link Calendar.widget.DayView},\n * this will include granular time information. For other views, this is the *start* of the date.\n */\n /**\n * Fires when a dblclick made its way through to an empty part of any view.\n * @event scheduleDblClick\n * @param {Calendar.widget.mixin.CalendarMixin} source The view which triggered the event.\n * @typings source -> {typeof CalendarMixin}\n * @param {Event} domEvent The initiating DOM event.\n * @param {Date} date The date double clicked on. _Note that in a {@link Calendar.widget.DayView},\n * this will include granular time information. For other views, this is the *start* of the date.\n */\n /**\n * Fires when a context menu made its way through to an empty part of any view.\n * @event scheduleContextMenu\n * @param {Calendar.widget.mixin.CalendarMixin} source The view which triggered the event.\n * @typings source -> {typeof CalendarMixin}\n * @param {Event} domEvent The initiating DOM event.\n * @param {Date} date The date clicked on. _Note that in a {@link Calendar.widget.DayView},\n * this will include granular time information. For other views, this is the *start* of the date.\n */\n /**\n * Fires when a mouseout made it's way through to an empty part of any view.\n * @event scheduleMouseOut\n * @param {Calendar.widget.mixin.CalendarMixin} source The view which triggered the event.\n * @typings source -> {typeof CalendarMixin}\n * @param {Event} domEvent The initiating DOM event.\n * @param {Date} date The date mouseouted. _Note that in a {@link Calendar.widget.DayView},\n * this will include granular time information. For other views, this is the *start* of the date.\n */\n /**\n * Fires when one of the views in this Calendar refreshes.\n * @event refresh\n * @param {Calendar.widget.mixin.CalendarMixin} source The view which refreshed.\n * @typings source -> {typeof CalendarMixin}\n */\n /**\n * Fired when an {@link Calendar.widget.mixin.CalendarMixin#config-autoCreate} gesture has\n * created a new event and added it to the event store.\n *\n * If the {@link Calendar.feature.EventEdit} feature is present, it listens for\n * this event and initiates an edit operation. Adding a high `prio` listener which\n * returns `false` can prevent this event from reaching the `eventEdit` processing.\n * @event eventAutoCreated\n * @param {Calendar.widget.mixin.CalendarMixin} source The child view on which the event was initiated.\n * @typings source -> {typeof CalendarMixin}\n * @param {Scheduler.model.EventModel} eventRecord The new event record.\n */\n /**\n * Fired when an empty cell content area is clicked on in a {@link Calendar.widget.MonthView} or a\n * {@link Calendar.widget.CalendarRow}.\n * @event emptyCellClick\n * @param {Event} domEvent The triggering DOM event.\n * @param {Date} date The date which has no visible events\n */\n /**\n * This event fires whenever a child view's {@link Calendar.widget.mixin.CalendarMixin#config-autoCreate\n * autoCreate gesture} is detected and also when a {@link Calendar.feature.CalendarDrag\n * drag-create} gesture is detected.\n *\n * This event is preventable and may be used to validate UI-initiated event creation.\n * @event beforeAutoCreate\n * @preventable\n * @param {Event} domEvent The DOM event which initiated the creation.\n * @param {Date} date The starting time of the event to be created.\n * @param {Scheduler.model.ResourceModel} resourceRecord The resource if the UI includes a resource.\n */\n //endregion\n static get featureable() {\n return {\n factory : CalendarFeature\n };\n }\n // Gets current date time, time zone converted if time zone is set\n get dateTimeNow() {\n if (this.timeZone != null) {\n return TimeZoneHelper.toTimeZone(new Date(), this.timeZone);\n }\n return new Date();\n }\n // Gets current date with day info only. Time zone converted if time zone is set\n get today() {\n const today = this.dateTimeNow;\n today.setHours(0, 0, 0, 0);\n return today;\n }\n finalizeInit() {\n super.finalizeInit();\n const\n me = this,\n hideNonWorkingDays = me.activeView?.hideNonWorkingDays;\n if (hideNonWorkingDays != null && me.hideNonWorkingDays == null) {\n me.hideNonWorkingDays = hideNonWorkingDays;\n }\n }\n toggleEmptyText() {\n const\n { crudManager } = this,\n { eventStore } = crudManager || this;\n DomHelper.toggleClasses(this.contentElement, 'b-calendar-empty', !(eventStore.count || (crudManager?.isLoading)));\n }\n /**\n * Schedules a refresh of the UI for the next animation frame. This is a useful method to call when\n * making multiple data changes, so that each change merely *schedules* a refresh for the next AF and\n * DOM churn is kept to a minimum.\n */\n refresh() {\n this.eachView(v => v.refresh?.());\n }\n /**\n * The {@link #property-modes} as an Array.\n * @property {Core.widget.Widget[]}\n */\n get views() {\n // Do not invoke the DynamicObject twice\n const { modes } = this;\n return modes ? Object.values(modes) : [];\n }\n /**\n * Returns the currently active mode as a {@link Core.widget.Widget} instance.\n *\n * Similar to the {@link #property-mode} property which is the active mode's name as a string.\n * @property {Core.widget.Widget}\n */\n get activeView() {\n return this.viewContainer.layout.activeItem;\n }\n /**\n * Returns the lowest level of active view in the mode container.\n *\n * For example, if a {@link Calendar.widget.ResourceView} is the active view, this would\n * return the sub view of that which is currently focused. Or the resourceView if none\n * of the sub views were focused.\n * @property {Core.widget.Widget}\n */\n get activeSubView() {\n const\n { activeView } = this,\n { items } = activeView,\n // If its a multi-CalendarWidget view (Such as a ResourceView), narrow down activeView\n // to the active subView which contains focus.\n activeSubView = items.filter(isFocusedCalendarMixin)?.[0];\n return activeSubView || activeView;\n }\n captureFocus() {\n return this.activeView.captureFocus();\n }\n /**\n * Returns the event record for a DOM element or DOM event.\n * @param {HTMLElement|Event} elementOrEvent The DOM node to lookup, or a DOM event whose target to lookup.\n * @returns {Scheduler.model.EventModel} The event record\n */\n getEventRecord(elementOrEvent) {\n return this.activeView.getEventRecord(elementOrEvent);\n }\n /**\n * Returns the event record for a DOM element or DOM event.\n * @param {HTMLElement|Event} elementOrEvent The DOM node to lookup, or a DOM event whose target to lookup.\n * @returns {Scheduler.model.EventModel} The event record\n */\n resolveEventRecord(elementOrEvent) {\n // this method is added for symmetry w/SchedulerInterface\n return this.getEventRecord(elementOrEvent);\n }\n onBeforeModeChange({\n prevActiveItem,\n activeItem\n }) {\n /**\n * Fired before a change of view is initiated.\n * @event beforeActiveItemChange\n * @param {Calendar.view.Calendar} source This Calendar instance.\n * @param {Core.widget.Widget} prevActiveItem The previously active view.\n * @param {Core.widget.Widget} activeItem The new active view.\n * @preventable\n */\n if (this.trigger('beforeActiveItemChange', arguments[0]) === false) {\n return false;\n }\n // Access the property name directly because this is a lazy config.\n // We do not want to cause ingestion and update here.\n // It might be still the initial config form, so might not have hide()\n prevActiveItem._overflowPopup?.hide?.();\n // In case some of the modes are not standard Calendar widgets which\n // all implement a date setter. Allow them to opt-out of syncing date.\n if (('date' in activeItem) && activeItem.syncViewDate !== false) {\n const date = this.date || prevActiveItem.date;\n // activeItem's config system will protect it from non-changes.\n if (date) {\n // Calendar views know to only update their UI when visible\n if (activeItem.isCalendarMixin) {\n activeItem.date = date;\n }\n // Other view types have to be protected\n else {\n activeItem.whenVisible(() => activeItem.date = date);\n }\n }\n }\n }\n onModeChange(event) {\n /**\n * Fired when a change of view has completed. By default, view changes are animated and this\n * event fires when the view is fully visible.\n * @event activeItemChange\n * @param {Calendar.view.Calendar} source This Calendar instance.\n * @param {Core.widget.Widget} prevActiveItem The previously active view.\n * @param {Core.widget.Widget} activeItem The new active view.\n */\n this.trigger('activeItemChange', event);\n }\n onToggleSidebarClick() {\n const\n { sidebar } = this,\n { collapsible } = sidebar;\n // If we are overlaying the sidebar, the button toggles between collapsed and revealed\n // state rather than expanded and collapsed.\n if (collapsible?.isPanelCollapserOverlay) {\n if (!collapsible.revealing) {\n collapsible.toggleReveal(!sidebar.revealed);\n }\n }\n else {\n sidebar.toggleCollapsed();\n }\n }\n /**\n * Navigates Calendar's {@link #property-activeView active view} to the current local date\n */\n shiftToNow() {\n const\n me = this,\n datePicker = me.sidebar?.widgetMap.datePicker,\n { dayTime } = me.activeView,\n now = new Date(),\n today = dayTime ? dayTime.startOfDay(now) : DateHelper.clearTime(now);\n // Reaction to this to change the activeView's date happens in onCalendarDateChange.\n // updateDate changes the sidebar date if there is a sidebar, else it calls\n // onCalendarDateChange directly.\n // Make sure we use the current view's conception of where a day begins\n me.date = today;\n // Our updateDate will only have done this if our current date is *not* today\n // The sidebar's date picker can be navigated around, but clicking the \"today\"\n // button must bring all views into line.\n datePicker && (datePicker.date = today);\n me.updateViewDescription();\n }\n /**\n * Navigates back in time in a step unit specific to the Calendar's {@link #property-activeView active view}\n */\n shiftPrevious() {\n const { activeItem } = this.viewContainer.layout;\n if (activeItem?.previous) {\n activeItem.previous();\n this.updateViewDescription(activeItem);\n if (activeItem.animateTimeShift) {\n DomHelper.slideIn(activeItem.contentElement, -1);\n }\n }\n }\n /**\n * Navigates forward in time in a step unit specific to the Calendar's {@link #property-activeView active view}\n */\n shiftNext() {\n const { activeItem } = this.viewContainer.layout;\n if (activeItem?.next) {\n activeItem.next();\n this.updateViewDescription(activeItem);\n if (activeItem.animateTimeShift) {\n DomHelper.slideIn(activeItem.contentElement, 1);\n }\n }\n }\n onCalendarSidebarToggle(event) {\n event.source = this;\n /**\n * Fired when the sidebar is collapsed either through the UI or programatically.\n * @event sidebarCollapse\n * @param {Calendar.view.Calendar} source This Calendar instance\n */\n /**\n * Fired when the sidebar is expanded either through the UI or programatically.\n * @event sidebarExpand\n * @param {Calendar.view.Calendar} source This Calendar instance\n */\n this.trigger(`sidebar${StringHelper.capitalize(event.type)}`, event);\n }\n async onCalendarDateChange({ date, oldDate, userAction }) {\n const\n me = this,\n { layout } = me.viewContainer,\n // If the card layout is changing, use the item it is changing *to*\n { activeItem } = layout.isChangingCard ? layout.animateDetacher.event : layout,\n {\n highlightDate\n } = me;\n // Allow calendar views to opt out of being in sync with Calendar's date\n if (activeItem && activeItem.syncViewDate !== false && ('date' in activeItem)) {\n const { getDayElement } = activeItem;\n // In case triggered from header click the overflow popup for an \"other month\" cell.\n // Use \"_overflowPopup\" so as not to call it into existence if it's not created.\n // It might be still the initial config form, so might not have hide()\n if (!DateHelper.betweenLesser(date, activeItem.startDate, activeItem.endDate)) {\n activeItem._overflowPopup?.hide?.();\n }\n activeItem.date = date;\n // We must match the active item's date.\n // If the date change caused a refresh, that will have happened, and this will be a no-op\n // If the active item already contained the date, this will not have happened.\n me.date = activeItem.date;\n // Highlight the date element if the date change was triggered by user interaction\n // with the date picker. If the date picker was updated from one of the modes\n // then highlighting will not be expected.\n if (userAction && highlightDate && getDayElement) {\n // Some views need to scroll to a date.\n // Agenda, Month (if constrained size), and CalendarRow\n if (activeItem.scrollTo) {\n await activeItem.scrollTo(date);\n // EventList might not contain the exact date. It will scroll to the\n // closest date. If it did that, the scrolledToDate property will be set.\n if (activeItem.scrolledToDate) {\n date = activeItem.scrolledToDate;\n }\n }\n // The date's element might not exist until after the scroll.\n const cell = activeItem.getDayElement?.(date);\n // AgendaView might not have a representation of the date\n if (cell) {\n // Not coercible to a number means its a function or name of a function\n if (isNaN(highlightDate)) {\n me.callback(highlightDate, me, [cell, me]);\n }\n // Otherwise, it's truthy or falsy\n else {\n DomHelper.highlight(Rectangle.from(cell));\n }\n }\n }\n }\n me.syncViewActiveDates(oldDate, date);\n /**\n * Fires when the calendar changes the date that it orientates its views around.\n *\n * The Calendar tracks which date the user interacts with so that on mode change,\n * the user is shown the view for the date being interacted with.\n *\n * This is updated on any interaction with the UI. Clicking in the\n * {@link #property-sidebar}'s date picker, clicking on an event, or clicking on a\n * day cell in any view updates the date which the Calendar is using as its orientating date.\n * @event dateChange\n * @param {Calendar.view.Calendar} source This Calendar.\n * @param {Date} oldDate The previous Calendar date.\n * @param {Date} date The new Calendar date.\n */\n me.trigger('dateChange', { oldDate, date });\n }\n updateActiveDateCls(activeDateCls, oldActiveDateCls) {\n this.syncViewActiveDates(this.date, this.date, oldActiveDateCls);\n }\n syncViewActiveDates(oldDate, date = this.date, oldActiveDateCls = this.activeDateCls) {\n const\n me = this,\n { activeDateCls } = me,\n { contentElement } = me.viewContainer;\n // Keep all view's active date synced\n if (oldActiveDateCls) {\n const oldDateCells = oldDate ? contentElement.querySelectorAll(`[data-date=\"${DateHelper.makeKey(oldDate)}\"],[data-header-date=\"${DateHelper.makeKey(oldDate)}\"]`) : emptyArray;\n for (let i = 0, { length } = oldDateCells; i < length; i++) {\n oldDateCells[i].classList.remove(oldActiveDateCls);\n }\n }\n if (activeDateCls) {\n const newDateCells = contentElement.querySelectorAll(`[data-date=\"${DateHelper.makeKey(date)}\"],[data-header-date=\"${DateHelper.makeKey(date)}\"]`);\n for (let i = 0, { length } = newDateCells; i < length; i++) {\n newDateCells[i].classList.add(activeDateCls);\n }\n }\n }\n updateViewDescription(activeView = this.activeView) {\n const\n me = this,\n { tbar, widgetMap } = me,\n { viewDescription } = widgetMap,\n description = `${activeView?.description || ''}`;\n // Allow the Calendar's active mode to be targeted by CSS selectors.\n // Use the activeView property because the passed view might not be a mode\n // it might be a child view of a resource view.\n me.element.dataset.mode = me.activeView.modeName;\n // Keep the sidebar's concept of date of interest in sync with current activeView\n if (activeView) {\n if (tbar && viewDescription) {\n // Even if tbar is present, our predefined tbar widgets may have been configured away.\n // Need the change check to avoid adding the changed class upon initialization.\n // Note that viewDescription?. cannot be used here because the result of\n // viewDescription?.description, if viewDescription is null will not be ===\n // description, so it will then attempt to set the content property. And\n // `viewDescription?.content = description` results in \"invalid assignment left-hand side\" error.\n if (viewDescription.content !== description) {\n viewDescription.content = description;\n }\n }\n const viewDate = activeView.date || activeView.startDate;\n if (viewDate) {\n // Reaction to this to change the activeView's date happens in onCalendarDateChange.\n // updateDate changes the sidebar date if there is a sidebar, else it calls\n // onCalendarDateChange directly.\n this.date = viewDate;\n }\n }\n }\n getStepUnitText(activeView = this.activeView) {\n // stepUnit is localized by views.\n // Views must normalize the returned property value for use in\n // \"Next ${stepUnit}\" button text, eg \"1 day\" to \"day\"\n return activeView.stepUnit;\n }\n syncUIWithActiveView(activeView = this.activeView) {\n const\n me = this,\n { tbar, sidebar, widgetMap } = me,\n { toggleSidebar } = widgetMap;\n // tbar may have been configured away\n if (tbar && activeView?.isVisible) {\n const\n {\n prevButton,\n nextButton,\n modeSelector\n } = widgetMap,\n stepUnitText = me.getStepUnitText(activeView);\n modeSelector?.syncActiveMode(activeView);\n if (sidebar) {\n sidebar.stepUnitText = stepUnitText;\n }\n me.updateViewDescription(activeView);\n // Each view localizes its own stepUnit\n // Also, any widget may be configured away, so must be truthy.\n if (prevButton) {\n prevButton.tooltip = stepUnitText ? me.L('L{previous}', stepUnitText) : '';\n prevButton.disabled = !stepUnitText;\n }\n if (nextButton) {\n nextButton.tooltip = stepUnitText ? me.L('L{next}', stepUnitText) : '';\n nextButton.disabled = !stepUnitText;\n }\n }\n if (!sidebar) {\n toggleSidebar?.hide();\n }\n }\n updateEventStore(eventStore) {\n this.detachListeners('eventStoreDateRange');\n // The loadOnDemand feature needs to be initialized as soon as we get our\n // event store so that it can hook *all* loadDateRange events.\n this.features.loadOnDemand;\n // Ensure the listeners are present\n this.processConfiguredListeners();\n eventStore.ion({\n loadDateRange : 'onEventStoreDateRangeRequested',\n name : 'eventStoreDateRange',\n thisObj : this\n });\n // This is all we have to do.\n // The ProjectConsumer mixin implements a changeEventStore which updates the Project\n // and our project which we configure into all our views will update any subscribers.\n if (this.sidebar) {\n this.sidebar.eventStore = eventStore;\n }\n }\n /**\n * Executes the passed function for each child calendar view in {@link #config-modes}\n * @param {Function} fn The function to call.\n * @param {Object[]} [args] The arguments to pass. Defaults to the view being called.\n * @param {Object} [thisObj] The `this` reference for the function. Defaults to the view being called.\n */\n eachView(fn, args, thisObj = null) {\n const passView = args == null;\n for (const view of this.views) {\n if (passView) {\n args = [view];\n }\n if (view.callback(fn, thisObj || view, args) === false) {\n return;\n }\n }\n }\n onEventStoreDateRangeRequested(event) {\n /**\n * Fired when the eventStore is queried for events by date range, and the date range\n * requested is different from the last time the store was queried.\n *\n * This may not be triggered when moving to a different view. If a `MonthView` has been\n * displayed, and the `WeekView` is then shown, the date range is already available.\n *\n * When moving a view through time, and into a time range which has not previously been\n * loaded, this will be triggered.\n * @event dateRangeChange\n * @param {Calendar.view.Calendar} source This Calendar instance.\n * @param {Object} old The old date range\n * @param {Date} old.startDate the old start date.\n * @param {Date} old.endDate the old end date.\n * @param {Object} new The new date range\n * @param {Date} new.startDate the new start date.\n * @param {Date} new.endDate the new end date.\n * @deprecated 6.0 Use {@link #event-dateRangeRequested} instead and interrogate its `changed` property.\n */\n if (event.changed) {\n this.trigger('dateRangeChange', event);\n }\n /**\n * Fired every time the eventStore is queried for events by date range.\n *\n * This will always be triggered when changing the active view or when navigating\n * the calendar backwards or forwards in time.\n * @event dateRangeRequested\n * @param {Calendar.view.Calendar} source This Calendar instance.\n * @param {Object} old The old date range\n * @param {Date} old.startDate the old start date.\n * @param {Date} old.endDate the old end date.\n * @param {Object} new The new date range\n * @param {Date} new.startDate the new start date.\n * @param {Date} new.endDate the new end date.\n * @param {Boolean} changed `true` if the date range is different from the last time a request was made.\n */\n this.trigger('dateRangeRequested', event);\n }\n async onModeSelectorToggle({ source : button, pressed }) {\n if (pressed) {\n const\n me = this,\n { layout } = me.viewContainer,\n { view } = button;\n // First await any ongoing mode switching\n await me.modeSelectionPromise;\n me.modeSelectionPromise = layout.setActiveItem(view).promise;\n }\n }\n /**\n * Sets and gets which of the configured {@link #property-modes} is the current active view.\n *\n * When read, this yields the string name of the currently active mode.\n *\n * When setting, this accepts either the name, or the actual widget instance:\n *\n * ```javascript\n * calendar.mode = 'week';\n * ```\n *\n * or\n *\n * ```javascript\n * calendar.mode = calendar.modes.agenda;\n * ```\n * @member {String} mode\n */\n updateMode(mode) {\n const\n me = this,\n configs = me.initialConfig || {};\n // If the user configured activeIndex or mode, ignore the (one-time) responsiveUpdate of mode\n if (!(me.isConfiguring || (me._responsiveUpdating && ('mode' in configs || 'activeIndex' in configs)))) {\n mode = typeof mode === 'string' ? me.modes[mode] : mode;\n if (mode && mode !== me.activeView) {\n // Do not animate the mode if we are updating responsive state\n me.viewContainer.layout.setActiveItem(mode, undefined, {\n animation : !me.isResponsiveUpdating\n });\n }\n }\n }\n // Handle eventStore load or full datachange.\n // It will have refreshed all our views, so keep the Calendar UI synced.\n onEventStoreRefresh() {\n if (!this.isConfiguring) {\n this.syncUIWithActiveView(this.viewContainer.layout.activeItem);\n }\n }\n handleViewPaint({ source : view }) {\n this.syncUIWithActiveView(view);\n // Keep the property in line with reality.\n this._mode = view.modeName;\n /**\n * Fires when one of the child views is painted. That is when it becomes visible.\n * Note that due to the slide-in animation, while the view is visible, it will not\n * yet be in its final position.\n * @event viewPaint\n * @param {Core.widget.Widget} source The widget being painted.\n * @param {Boolean} firstPaint `true` if this is the first paint.\n */\n this.trigger('viewPaint', { ...arguments[0] });\n }\n onViewRefresh({ source : view }) {\n super.onViewRefresh?.(...arguments);\n if (view.isVisible) {\n // The activeView refreshed\n if (view === this.activeView) {\n this.updateViewDescription(view);\n }\n // A child view of the current active view refreshed.\n else if (this.activeView.owns(view)) {\n this.syncUIWithActiveView(this.activeView);\n }\n }\n this.syncViewActiveDates();\n }\n updateEventCls(eventCls) {\n if (!this.initialConfig.eventInnerSelector) {\n this.eventInnerSelector = `.${eventCls}`;\n }\n if (!this.initialConfig.eventSelector) {\n this.eventSelector = `${this.eventInnerSelector}-wrap`;\n }\n }\n changeModes(modes, was) {\n const\n me = this,\n modeArray = [];\n // This will bring in any configured CrudManager which will give us our stores.\n me.getConfig('crudManager');\n me.getConfig('defaultCalendar');\n // Sort the modes into weight order if there are weights configured\n let modeConfig;\n for (const modeType in modes) {\n modeConfig = modes[modeType];\n if (modeConfig) {\n modeArray.push(ObjectHelper.assign({\n modeType,\n weight : modeConfig.weight ?? 0\n }, modeConfig));\n }\n }\n // Weights found, so sort and rebuild of modes object in requested order needed\n if (modeArray.some(hasWeight)) {\n modes = {};\n modeArray.sort(byWeight);\n for (let i = 0, { length } = modeArray; i < length; i++) {\n modeConfig = modeArray[i];\n modes[modeConfig.modeType] = modeConfig;\n }\n }\n const\n { tbar, element } = me,\n listeners = {\n thisObj : me,\n // When a mode has an internal change that requires the description shown in the tbar to be refreshed\n descriptionChange : 'onViewDescriptionChange',\n // These are for implementing drilling from higher to lower level views\n weekNumberClick : 'onViewWeekNumberClick',\n monthNameClick : 'onViewMonthNameClick',\n dayNumberClick : 'onViewDayNumberClick',\n // Handle a double click gesture inside a scheduler child mode\n beforeEventAdd : 'onViewBeforeEventAdd',\n // This is how the Calendar relays events from modes to the outside world\n // The Calendar listeners get first look at the events so that app code gets\n // a chance to intervene early.\n catchAll : {\n fn : 'onViewCatchAll',\n prio : 10000\n },\n paint : 'handleViewPaint',\n refresh : 'onViewRefresh'\n },\n manager = me.$modes || (me.$modes = new DynamicObject({\n factory : Modes,\n inferType : true, // the name of a mode is its default type (allow its config object to override it)\n owner : me,\n // All instances have this.calendar pointing to this\n ownerName : 'calendar',\n created(mode, name) {\n // Each one must know what mode it represents\n mode.modeName = name;\n // Attach our eventEdit feature to Schedulers\n if (mode.isScheduler) {\n const { eventEdit } = me.features;\n if (eventEdit) {\n eventEdit.applyPluginConfig(mode);\n mode.editEvent = me.editEvent.bind(me);\n }\n }\n // Allows selection by what views are present\n element.classList.add(`b-cal-${name}`);\n // We need to sync our UI when the view changes.\n mode.ion(listeners);\n // Give app code a shot at affecting the propagate end date for DayCellCollecters\n me.relayEvents(mode, ['eventPropagate']);\n if (!me.isConfiguring) {\n me.trigger('addMode', { mode });\n }\n // Allow tbar to be configured away.\n // Note that tbar may be configured away using tbar : null, so tbar?.widgetMap.modeSelector\n // won't work since it will interrogate the widgetMap of null in that case,\n const modeSelector = tbar?.widgetMap?.modeSelector;\n if (modeSelector) {\n modeSelector.calendar = me; // in case the up() traversal is needed too early\n modeSelector.addMode(name, mode);\n }\n },\n setup(config) {\n const\n { defaultCalendar, modeDefaults } = me,\n viewType = Modes.resolveType(config.type);\n if (modeDefaults) {\n config = ObjectHelper.merge({}, modeDefaults, config);\n }\n // Inhibit Scheduler features which our features override.\n if (viewType.isScheduler) {\n const features = config.features || (config.features = {});\n features.eventTooltip =\n features.eventMenu =\n features.eventEdit =\n features.scheduleMenu = false;\n }\n else {\n config.eventSelector = me.eventSelector;\n config.eventInnerSelector = me.eventInnerSelector;\n }\n if (!('date' in config)) {\n config.date = me.date;\n }\n config.rtl = me.rtl;\n config.project = me.project;\n config.readOnly = me.readOnly;\n config.allowOverlap = me.allowOverlap;\n config.hidden = true;\n config.weekStartDay = me.weekStartDay;\n config.nonWorkingDays = me.nonWorkingDays;\n config.timeZone = me.timeZone;\n // Only inject into the child view if our config overrode the default\n if ('autoCreate' in me.initialConfig) {\n config.autoCreate = me.autoCreate;\n }\n if (ObjectHelper.hasOwn(me, '_defaultCalendar')) {\n config.defaultCalendar = me._defaultCalendar;\n }\n else if (defaultCalendar != null) {\n config.defaultCalendar = defaultCalendar;\n }\n // Copy in configs which are propagated from the calendar into child views.\n // This does *not* override any existing configs.\n ObjectHelper.copyPropertiesIf(config, me, propagatedConfigs);\n return config;\n }\n }));\n manager.update(modes);\n if (!was) {\n // Only return the target once. Further calls are processed above so we need to return undefined to ensure\n // onConfigChange is called. By returning the same target on 2nd+ call, it passes the === test and won't\n // trigger onConfigChange.\n return manager.target;\n }\n }\n changeModeDefaults(modeDefaults) {\n const\n me = this,\n result = new Proxy(ObjectHelper.assign({}, modeDefaults), {\n set(target, prop, value) {\n const result = Reflect.set(...arguments);\n // Pass new property setting in to child views\n me.updateModeDefaults({\n [prop] : value\n });\n return result;\n },\n deleteProperty(target, prop) {\n const result = Reflect.deleteProperty(...arguments);\n // Pass new property setting in to child views\n me.updateModeDefaults({\n [prop] : null\n });\n return result;\n }\n });\n return result;\n }\n updateModeDefaults(modeDefaults) {\n if (!this.isConfiguring) {\n this.eachView(v => v.setConfig(modeDefaults));\n }\n }\n get collapsibleConfig() {\n const\n overlaySidebar = this.peekConfig('overlaySidebar'),\n config = {\n type : overlaySidebar ? 'overlay' : 'inline',\n tool : null\n };\n if (overlaySidebar) {\n config.recollapseTool = null;\n }\n return config;\n }\n updateOverlaySidebar(overlaySidebar) {\n const\n { sidebar, collapsibleConfig } = this,\n collapsible = sidebar?.collapsible;\n if (collapsible) {\n if (collapsible.type !== collapsibleConfig.type) {\n sidebar.collapsible = collapsibleConfig;\n }\n if (overlaySidebar) {\n if (!sidebar.collapsed) {\n sidebar.collapsed = true;\n sidebar.collapsedDueToOverlay = true;\n }\n }\n // If moving back to inline sidebar, then if it was\n // collapsed only due to being made overlayed, or it's been overlayed into visibility at this time\n // then expand it again.\n else if (sidebar.collapsedDueToOverlay || (sidebar.isVisible && collapsible.isPanelCollapserOverlay)) {\n sidebar.collapsed = false;\n sidebar.collapsedDueToOverlay = false;\n }\n }\n }\n changeSidebar(config, sidebar) {\n const\n me = this,\n { datePicker, statefulId : stateId } = me;\n if (config) {\n const\n sidebarItems = config.items || (config.items = {}),\n sidebarDatePicker = sidebarItems.datePicker;\n // If the developer nulled out the datePicker in her sidebar config\n // we cannot impose our default datePicker.\n if (datePicker) {\n if (sidebarDatePicker !== null && sidebarDatePicker !== false) {\n sidebarItems.datePicker = Calendar.mergeConfigs(sidebarItems.datePicker, datePicker);\n }\n }\n else {\n sidebarItems.datePicker = null;\n }\n }\n return Sidebar.reconfigure(sidebar, config, {\n owner : me,\n setup : (cfg, type) => me.setupWidgetConfig(cfg, type),\n // These are combined with \"config\" prior to calling our setup() above (so they are part of the \"cfg\"\n // parameter passed to setup():\n defaults : {\n stateId : stateId && `${stateId}:sidebar`,\n eventStore : me.eventStore,\n date : me.date,\n weight : (config?.side === 'right' || config?.side === 'end') ? 200 : -10,\n collapsible : me.collapsibleConfig,\n items : {\n datePicker : {\n weekStartDay : me.weekStartDay\n }\n }\n }\n });\n }\n changeTbar(tbar) {\n // Change legacy name to new, correctly cased name\n if (tbar?.toggleSideBar && !tbar.isWidget) {\n VersionHelper.deprecate('calendar', '7.0.0', 'toggleSideBar ref is deprecated in favor of toggleSidebar');\n tbar.toggleSidebar = tbar.toggleSideBar;\n delete tbar.toggleSideBar;\n }\n return super.changeTbar(...arguments);\n }\n changeDatePicker(config) {\n if (config) {\n return Object.assign(config, {\n eventStore : this.eventStore,\n date : this.date\n });\n }\n }\n /**\n * The {@link #config-datePicker} as an instance of {@link Calendar.widget.CalendarDatePicker}.\n * @member {Calendar.widget.CalendarDatePicker} datePicker\n * @readonly\n */\n get datePicker() {\n return this.isConfiguring ? this._datePicker : this.sidebar?.widgetMap?.datePicker;\n }\n changeItems(items) {\n const { modes, sidebar } = this;\n // Add our sidebar if it was not configured away.\n if (sidebar) {\n items.sidebar = sidebar;\n }\n // Add the configured viewContainer to our items\n items.viewContainer = this.viewContainer;\n // Add our modes.\n items.viewContainer.items = modes;\n items.viewContainer.activeIndex = Math.max(Object.keys(modes).indexOf(this.mode), 0);\n // Set the viewContainer layout's activeIndex to the requested mode's index\n if (this.activeModeIndex) {\n items.viewContainer.layout.activeIndex = this.activeModeIndex;\n }\n const result = super.changeItems(items);\n /**\n * @member {Core.widget.Container} viewContainer\n * A {@link Core.widget.Container} which contains the configured {@link #config-modes} and\n * manages the currently active mode through its {@link Core.widget.Container#property-layout}.\n * @readonly\n */\n this._viewContainer = this.widgetMap.viewContainer;\n return result;\n }\n onViewCatchAll(event) {\n const\n me = this,\n {\n fromOverflowPopup,\n type,\n source : view\n } = event;\n // Reject events which have bubbled up from other things than our views (MenuItem events bubble).\n // We are only forwarding events from our owned Calendar widgets.\n if (event.bubbles) {\n return;\n }\n let result, date, { domEvent } = event;\n // If the event was from another type of view, such as a Scheduler, they pass\n // DOM events as \"event\", so use that.\n if (!domEvent && DomHelper.isDOMEvent(event.event)) {\n domEvent = event.event;\n }\n /**\n * When a child calendar view is being interacted with, this property\n * yields a reference to the child being interacted with.\n * @member {Calendar.widget.mixin.CalendarMixin} eventSource\n * @typings {typeof CalendarMixin}\n * @readonly\n */\n me.eventSource = view;\n // Implement the interface which the inherited Feature structure requires.\n // Features hook into client element event handling methods\n if (!domEvent || me.handleEvent(domEvent) !== false) {\n const\n isEmptyCell = type.startsWith('emptycell'),\n // For EventLists, when we are using a startDate->endDate range as opposed to a fixed\n // range, the dates are *inclusive*, so pick the correct date containment function.\n dateContainmentFn = view.isEventList && !view.range ? 'betweenLesserEqual' : 'betweenLesser';\n // Only change date when click originates from a calendar view (not an embedded scheduler for example)\n if (type.endsWith('click') && !noDateChangeEvents[type] && me.activeView.isCalendarMixin && (date = (event.date || view.getDateFromDomEvent?.(domEvent)))) {\n // If it's a DayView, it could be a shifted day, so move it back to the day start.\n // If the day starts at 18:00, and the click is on 2020-06-17T06:00, the date must\n // be 2020-06-16T18:00 so that the Calendar's date is stable.\n if (view.isDayView && view.dayTime) {\n date = view.dayTime.startOfDay(date);\n }\n const\n isOverflowClick = fromOverflowPopup || type === 'celloverflowclick' || domEvent.target.closest('.b-cal-cell-overflow'),\n isOtherMonth = (view.getDayElement && !view.getDayElement(date, true)) || (view.isDateRangeOwner && !DateHelper[dateContainmentFn](date, view.startDate, view.endDate)),\n // Only move onto the clicked date if it's explicitly a dayNumber Click.\n // Any other kind of click must not change date. Mats, 07/07/2022\n changeDate = view.isCalendarRow || !(fromOverflowPopup && isOtherMonth) && !isEmptyCell && !(view.isDateRangeOwner && isOtherMonth) && (type === 'daynumberclick' || !(isOtherMonth && (isOverflowClick || type.startsWith('event') || type.startsWith('schedule'))));\n // Set our date to the event date if we contain it.\n // If the above fell back to startDate, and it starts before the\n // view start, this must not happen.\n // Note that custom model may not implement getDayElement.\n if (changeDate) {\n me.date = date;\n }\n }\n if (isEmptyCell || relayedEvents.test(type)) {\n event.view = view;\n result = me.trigger(event.eventName, event);\n }\n }\n me.eventSource = null;\n return result;\n }\n // A mode had an internal change that requires updating the description shown in the tbar\n onViewDescriptionChange() {\n this.updateViewDescription();\n }\n // Implement drilling down from a MonthView week number click to a WeekView\n // or a child view which encapsulates WeekViews via its view.type config.\n onViewWeekNumberClick({ date, week }) {\n const weekView = this.modes.week || this.viewContainer.query(isWeekView);\n if (weekView) {\n // Only change date if the date is not encapsulated in the destination WeekView\n if (!DateHelper.betweenLesser(date, weekView.startDate, weekView.endDate)) {\n this.date = date;\n }\n weekView.week = week;\n this.viewContainer.layout.activeItem = weekView;\n }\n }\n // Implement drilling down from a YearView month name click to the MonthView\n // or a child view which encapsulates MonthViews via its view.type config.\n onViewMonthNameClick({ date }) {\n // Activate the month mode, or\n const monthView = this.modes.month || this.viewContainer.query(isMonthView);\n if (monthView) {\n // Only change date if the date is not encapsulated in the destination MonthView\n if (!monthView.getDayElement(date, true)) {\n this.date = date;\n }\n this.viewContainer.layout.activeItem = monthView;\n }\n // monthNameClick is excluded from date tracking in onViewCatchAll, so if\n // we could not activate a MonthView, set the date.\n else {\n this.date = date;\n }\n }\n // Implement drilling down from a DayView's header day number click to the DayView\n // or a child view which encapsulates DayViews via its view.type config.\n onViewDayNumberClick({ source, date, cellData, fromOverflowPopup, domEvent }) {\n // For a year view, we are clear to go ahead and navigate to the day on click if the overflow popup\n // trigger is not click, or if the overflow popup has been configured away or if there are no\n // events for the date and there's no empty cell renderer which would show some UI about there\n // being no events. Or if the click was on an overflow popup header.\n const validYearViewNavigate = source.isYearView &&\n (source.overflowPopupTrigger !== 'click' || fromOverflowPopup || !source.overflowPopup || cellData.isOtherMonth || (!cellData.events?.length && !source.emptyCellRenderer));\n if (source.isCalendarRow || source.isMonthView || validYearViewNavigate || source.isAgendaView) {\n const\n { viewContainer } = this,\n dayView = this.modes.day || viewContainer.query(v => v.view?.type.toLowerCase() === 'dayview');\n if (dayView && source !== dayView.allDayEvents) {\n const\n { layout } = viewContainer,\n { activeItem : oldActiveItem } = layout,\n { syncViewDate } = oldActiveItem;\n // Don't sync the outgoing item with our date.\n // It will be synced on its way back in next time.\n oldActiveItem.syncViewDate = false;\n // Must update our date before we attempt the card change because\n // *before* changing card, the incoming card gets its date set.\n // See onBeforeModeChange. New card must be synced with us from the start.\n this.date = date;\n viewContainer.layout.activeItem = dayView;\n // Restore the outgoing item so that when it comes back in\n // onBeforeModeChange will sync it.\n oldActiveItem.syncViewDate = syncViewDate;\n return false;\n }\n }\n }\n onViewBeforeEventAdd({ eventRecord, assignmentRecords }) {\n const\n { eventEdit } = this.features,\n isCreating = eventEdit && !eventEdit.disabled;\n // If double-clicking in a Scheduler child view, it has its eventEdit feature off, so help it know that\n // the created records are being edited\n eventRecord.isCreating = isCreating;\n assignmentRecords?.forEach(assignmentRecord => assignmentRecord.isCreating = isCreating);\n }\n /**\n * Uses the current active mode to create an event on the specified date which conforms to that mode's\n * {@link Calendar.widget.mixin.CalendarMixin#config-autoCreate} setting.\n *\n * This method may be called programmatically by application code if the `autoCreate` setting\n * is `false`, in which case the default values for `autoCreate` will be used.\n *\n * If the {@link Calendar.feature.EventEdit EventEdit} feature is active, the new event\n * will be displayed in the event editor.\n *\n * This is a utility method to use as a shortcut to {@link Calendar.widget.mixin.CalendarMixin#function-createEvent}\n * @param {Date} [date] Optionally, the date to add the event at. Uses the Calendar's currently\n * active date, as set in the {@link #config-sidebar}'s date picker.\n *\n * If there's no time component, and the current active mode is a calendar view, the\n * {@link Calendar.widget.mixin.CalendarMixin#config-autoCreate}'s `startHour` will be used.\n */\n createEvent(date = this.date, resourceRecord) {\n this.doCreateEvent(date, resourceRecord);\n }\n // This is separate because its signature is fixed. Second parameter is an optional view to use\n // to do the creating. The createEvent method may be called by Features which pass extra parameters.\n doCreateEvent(date, resourceRecord, source = this.activeSubView) {\n const\n { modes } = this,\n // Yearview defers to other views present in its owning calendar to handle auto creating\n // events. This method finds a suitable host view to postprocess the creation.\n editingView = source.isYearView ? modes.week || modes.month || modes.day || source : source;\n // Ensure the view which is going to postprocess the new event (such as editing it) is active\n if (!this.activeView.owns(editingView)) {\n const\n { viewContainer } = this.widgetMap,\n { layout } = viewContainer;\n if (editingView) {\n // activeItemChange fires after the animation, so it will be fully ready.\n viewContainer.ion({\n activeItemChange : 'doCreateEvent',\n thisObj : source,\n once : true,\n args : [date, resourceRecord, editingView]\n });\n this.date = date;\n layout.activeItem = editingView;\n return false;\n }\n }\n else {\n // Calendar vs Scheduler\n source.doCreateEvent ? source.doCreateEvent(date, resourceRecord) : source.createEvent(date, resourceRecord);\n }\n }\n changeDate(date, oldDate) {\n date = typeof date === 'string' ? DateHelper.parse(date) : new Date(date);\n if (isNaN(date)) {\n throw new Error('Calendar widget date ingestion must be passed a Date, or a YYYY-MM-DD date string');\n }\n date = DateHelper.clearTime(date);\n // Protect the setter from processing a no-change.\n if (!oldDate || (date - oldDate)) {\n return date;\n }\n }\n updateAutoCreate() {\n if (!this.isConfiguring) {\n this.syncCommonConfig('autoCreate');\n }\n }\n updateDate(date, oldDate) {\n if (!this.isConfiguring) {\n const { sidebar } = this;\n if (sidebar) {\n // The sidebar's datechange event is listened by onCalendarDateChange\n sidebar.date = date;\n }\n else {\n this.onCalendarDateChange({ date, oldDate });\n }\n }\n }\n updateDateFormat() {\n if (!this.isConfiguring) {\n this.syncCommonConfig('dateFormat');\n }\n }\n changeIncludeWeekendsButton(value) {\n return (value === true) ? {} : value;\n }\n updateIncludeWeekendsButton(value) {\n // we don't pass null/false down because we only want to configure the button not destroy it\n if (!this.isConstructing && value && ObjectHelper.isObject(value)) {\n this.widgetMap.modeSelector.includeWeekendsButton = value;\n }\n }\n changeScrollManager(scrollManager, oldScrollManager) {\n oldScrollManager?.destroy();\n if (this.isDestroying) {\n return;\n }\n return new ScrollManager(Object.assign({\n element : this.element\n }, scrollManager));\n }\n updateDefaultCalendar() {\n if (!this.isConfiguring) {\n this.syncCommonConfig('defaultCalendar');\n }\n }\n changeWeekStartDay(weekStartDay) {\n // Apply the default from DateHelper which draws its value from the locale.\n if (weekStartDay === false) {\n weekStartDay = DateHelper.weekStartDay;\n }\n return weekStartDay;\n }\n updateReadOnly() {\n super.updateReadOnly(...arguments);\n if (!this.isConfiguring) {\n this.syncCommonConfig('readOnly');\n }\n }\n updateWeekStartDay(weekStartDay) {\n if (!this.isConfiguring) {\n this.syncCommonConfig('weekStartDay');\n if (this.sidebar?.widgetMap.datePicker) {\n this.sidebar.widgetMap.datePicker.weekStartDay = weekStartDay;\n }\n }\n }\n changeHideNonWorkingDays(hideNonWorkingDays) {\n // Falsy must be coerced to false so that non-changes do not propagate\n return Boolean(hideNonWorkingDays);\n }\n updateHideNonWorkingDays(hideNonWorkingDays, was) {\n if (!this.isConfiguring) {\n this.syncCommonConfig('hideNonWorkingDays');\n this.trigger('changeHideNonWorkingDays', {\n value : hideNonWorkingDays,\n was\n });\n }\n }\n changeNonWorkingDays(nonWorkingDays) {\n // Apply the default from DateHelper which draws its value from the locale.\n if (nonWorkingDays === false) {\n nonWorkingDays = ObjectHelper.assign({}, DateHelper.nonWorkingDays);\n }\n return nonWorkingDays;\n }\n updateNonWorkingDays() {\n if (!this.isConfiguring) {\n this.syncCommonConfig('nonWorkingDays');\n }\n }\n updateCoreHours() {\n if (!this.isConfiguring) {\n this.syncCommonConfig('coreHours');\n }\n }\n /**\n * Syncs configs which are passed down into child views when changed here.\n * @param {String} name The name of teh config to pass from this Calendar into every child view\n * @private\n */\n syncCommonConfig(name) {\n this.eachView(v => {\n v[name] = this[name];\n });\n }\n onCalendarStoreChange() {\n // Keep mixins informed.\n super.onCalendarStoreChange?.(...arguments);\n }\n updateSelected() {\n const eventEls = this.viewContainer.contentElement.querySelectorAll('.b-cal-event-wrap');\n for (let i = 0, { length } = eventEls; i < length; i++) {\n eventEls[i].classList.toggle(this.eventSelectedCls, this.isEventSelected(eventEls[i].dataset.eventId));\n }\n }\n getElementFromEventRecord(eventRecord, resourceRecord) {\n return this.activeView.getEventElement(eventRecord, undefined, resourceRecord);\n }\n getElementsFromEventRecord(eventRecord, resourceRecord) {\n return [this.getElementFromEventRecord(eventRecord, resourceRecord)];\n }\n updateLocalization() {\n const me = this;\n if (me.isPainted) {\n let refreshed = false;\n // Only go with locale's weekStartDay if we were not initially configured with a weekStartDay\n if (!('weekStartDay' in me.initialConfig) && me.weekStartDay !== DateHelper.weekStartDay) {\n me.weekStartDay = DateHelper.weekStartDay;\n // weekStartDay change will cause a refresh\n refreshed = true;\n }\n // Only go with locale's nonWorkingDays if we were not initially configured with nonWorkingDays\n if (!('nonWorkingDays' in me.initialConfig) && !ObjectHelper.isEqual(me.nonWorkingDays, DateHelper.nonWorkingDays)) {\n me.nonWorkingDays = DateHelper.nonWorkingDays;\n // nonWorkingDays change will cause a refresh\n refreshed = true;\n }\n if (!refreshed) {\n me.refresh();\n }\n me.syncUIWithActiveView();\n }\n super.updateLocalization();\n }\n}\nCalendar.initClass();\n// Views which we import may need to access Calendar at runtime. They do it through the bryntum global.\nif (globalThis.bryntum) {\n globalThis.bryntum.Calendar = Calendar;\n}\nclass Modes extends Base.mixin(Factoryable) {\n static get factoryable() {\n return {\n // Allow any widget type:\n extends : Widget\n };\n }\n}\nModes.register('agenda', AgendaView);\nModes.register('year', YearView);\nModes.register('month', MonthView);\nModes.register('week', WeekView);\nModes.register('day', DayView);\nModes.register('list', EventList);\nModes.register('resource', ResourceView);\nModes.register('dayresource', DayResourceView);\nCalendar.Modes = Modes;\nVersionHelper.setVersion('calendar', '5.6.6');\nCalendar._$name = 'Calendar';"], "mappings": "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A;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,MAyLA;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,MAiCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,eAAe,MAAM;AACjB,UACI,KAAK,MACL,IAAK,GAAG;AACZ,QAAI,GAAG,MAAM,UAAU,GAAG;AAItB,cAAQ,EAAE,KAAK;AAAA,IACnB;AAEA,OAAG,UAAU,GAAG,IAAI;AACpB,OAAG,eAAe;AAClB,OAAG,iBAAiB;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,OAAO,SAAS;AACnB,cAAU,QAAQ,OAAO,OAAK,CAAC;AAC/B,WAAO,IAAI,KAAK,QAAQ,SAAS,IAAI,KAAK,aAAa,GAAG,OAAO,IAAI,QAAQ,CAAC,CAAC;AAAA,EACnF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,aAAa,MAAM;AAEf,QAAI,KAAK,CAAC,MAAM,MAAM;AAClB,WAAK,UAAU,GAAG,IAAI;AAAA,IAC1B;AACA,SAAK,eAAe;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,OAAO,WAAW,MAAM;AACpB,UAAM,WAAW,YAAU;AACvB,UAAI,iCAAQ,SAAS;AACjB,eAAO,QAAQ;AAAA,MACnB,WACS,MAAM,QAAQ,MAAM,GAAG;AAC5B,eAAO,QAAQ,QAAQ;AAAA,MAC3B;AAAA,IACJ;AACA,aAAS,IAAI;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,UAAU;AACN,UACI,KAAK,MACL,EAAE,GAAG,IAAI;AAEb,OAAG,eAAe;AAElB,OAAG,UAAU;AACb,OAAG,UAAU;AACb,WAAO,eAAe,IAAI,IAAI;AAE9B,eAAW,OAAO,IAAI;AAClB,UAAI,QAAQ,aAAa,QAAQ,gBAAgB;AAC7C,eAAO,GAAG,GAAG;AAAA,MACjB;AAAA,IACJ;AACA,WAAO,GAAG,oBAAoB;AAE9B,OAAG,cAAc;AACjB,OAAG,KAAK;AAAA,EACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,uBAAuB,QAAQ;AAAA,EAAC;AAAA,EAChC,WAAW,SAAS;AAChB,WAAO,OAAO,MAAM,OAAO,KAAK,KAAK;AAAA,IAEjC,OAAO,MAAM,QAAQ,KAAK,KAAK,UAC/B,KAAK;AAAA,EACb;AAAA,EACA,IAAI,SAAS;AACT,WAAO,KAAK,YAAY;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,eAAe,QAAQ;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,gBAAgB,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,iBAAiB;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,iBAAiB;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,SAASC,KAAI,YAAY,OAAO,YAAY;AACxC,UAAM,EAAE,SAAS,QAAQ,IAAI,KAAK,gBAAgBA,KAAI,eAAe,SAAS,OAAO,UAAU,KAAKD;AACpG,WAAO,mCAAS,MAAM,SAAS;AAAA,EACnC;AAAA,EACA,gBAAgB,cAAc;AAC1B,QAAI,UAAU;AACd,WAAO,SAAS;AACZ,UAAI,MAAK,cAAc,SAAS,cAAc,IAAI,GAAG;AACjD,eAAO,QAAQ,QAAQ,SAAS,YAAY;AAAA,MAChD;AACA,gBAAU,QAAQ;AAAA,IACtB;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,gBAAgB,SAAS,UAAU,MAAM,qBAAqB,MAAM;AAEhE,QAAI,mCAAS,WAAW;AACpB,UAAI,QAAQ,SAAS,GAAG,GAAG;AACvB,6BAAqB;AACrB,kBAAU,QAAQ,UAAU,GAAG,QAAQ,SAAS,CAAC;AAAA,MACrD;AACA,UAAI,QAAQ,WAAW,KAAK,GAAG;AAC3B,kBAAU,QAAQ,UAAU,CAAC;AAE7B,aAAK,UAAU,KAAK,OAAO,WAAW,CAAC,QAAQ,OAAO,GAAG,UAAU,QAAQ;AAAM;AACjF,YAAI,CAAC,SAAS;AACV;AAAA,QACJ;AAAA,MACJ,WACS,QAAQ,WAAW,OAAO,GAAG;AAClC,kBAAU,QAAQ,UAAU,CAAC;AAC7B,kBAAU;AAAA,MACd;AACA,UAAI,CAAC,WAAW,EAAE,mBAAmB,SAAS;AAC1C;AAAA,MACJ;AACA,gBAAU,QAAQ,OAAO;AAAA,IAC7B;AAEA,QAAI,OAAO,YAAY,YAAY;AAC/B,aAAO,EAAE,SAAS,QAAQ;AAAA,IAC9B;AACA,QAAI,oBAAoB;AACpB,YAAM,IAAI,MAAM,mBAAmB,OAAO,OAAO,QAAQ,UAAU,gBAAgB,EAAE;AAAA,IACzF;AAAA,EACJ;AAAA,EACA,aAAa,WAAW,YAAY,MAAM;AACtC,QAAI,WAAW;AACX,YAAM,EAAE,SAAS,QAAQ,IAAI,KAAK,gBAAgB,WAAW,SAAS;AACtE,UAAI,SAAS;AACT,eAAO,QAAQ,KAAK,OAAO;AAAA,MAC/B;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAMC,KAAIC,QAAO,OAAOD,IAAG,QAAQA,KAAI;AAEnC,IAAAA,MAAK,KAAK,aAAaA,MAAKA,IAAG,KAAK,IAAI;AACxC,UAAM,UAAU,KAAK,aAAa,OAAO;AACzC,WAAO,QAAQ,OAAOC,WAAU,WAAW,eAAe,uBAAuB,EAAED,KAAIC,QAAO,IAAI;AAAA,EACtG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,YAAY;AACR,UACI,KAAK,MACL,EAAE,QAAQ,IAAI,GAAG;AACrB,QAAI,SAAS;AACT,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,EAAE,GAAG;AACrC,YAAI,GAAG,QAAQ,CAAC,EAAE,KAAK,KAAK,MAAM;AAC9B,aAAG,QAAQ,CAAC,EAAE,IAAI,IAAI;AAAA,QAC1B;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,qBAAqB,YAAY;AAtqBrC,QAAAN,KAAA;AAuqBQ,UAAM,KAAK;AACX,QAAI;AACJ,SAAK,OAAO,YAAY;AAGpB,UAAI,OAAO,OAAO,CAAC,GAAGE,kBAAiB,KAAK,CAAC,GAAGA,kBAAiB,EAAE,GAAG,IAAI;AACtE,eAAAF,MAAA,GAAG,GAAG,MAAN,gBAAAA,IAAS,YAAT,wBAAAA;AACA,eAAO,GAAG,GAAG;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,SAAS,CAAC,GAAG;AACnB,UACI,KAAsB,MACtB,OAAsB,GAAG,OACzB,EAAE,gBAAgB,IAAI,QACtB,UAAsB,KAAK,SAC3B,aAAsB,GAAG,wBAAwB;AACrD,QAAI,KAAK,KAAK;AACd,OAAG,gBAAgB;AAGnB,OAAG,gBAAgB;AAEnB,WAAO,OAAO,IAAI,GAAG,cAAc,CAAC;AAGpC,SAAK,OAAO,QAAQ;AAChB,cAAQ,OAAO,GAAG;AAClB,YAAQ,QAAQ,GAAG;AACnB,iBAAW,GAAG,IAAI,MAAM,IAAI,MAAM,OAAO,WAAW,GAAG,GAAG,MAAM,IAAI,IAAI;AAAA,IAC5E;AACA,QAAI,iBAAiB;AACjB,aAAO,WAAW;AAElB,sBAAgB,IAAI,UAAU;AAAA,IAClC;AAEA,OAAG,UAAU,GAAG,oBAAoB,IAAI,YAAY,IAAI;AACxD,OAAG,gBAAgB;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,UAAU,MAAM;AACZ,WAAO,KAAK,IAAI;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,UAAU,QAAQ,gBAAgB;AAlvBtC,QAAAA;AAmvBQ,UACI,KAAiB,MACjB,iBAAiB,GAAGE,kBAAiB,GACrC,aAAiB,iBAAiB,GAAG,aAAc,GAAG,aAAa,CAAC,GACpE,UAAiB,GAAG,MAAM,SAC1B,cAAiB,GAAG,iBAAiB;AACzC,QAAI,KAAK;AACT,OAAGC,yBAAwB,IAAI,CAAC;AAEhC,OAAGD,kBAAiB,IAAI,iBAAiB,OAAO,eAAe,OAAO,OAAO,CAAC,GAAG,MAAM,GAAG,cAAc,IAAI;AAI5G,SAAK,OAAO,QAAQ;AAIhB,UAAI,OAAO,GAAG,KAAK,QAAQ,OAAO,QAAQ,GAAG,GAAG;AAC5C,cAAM,QAAQ,GAAG,KAAK,OAAO,IAAI,GAAG;AACpC,YAAI,EAAC,2CAAa,IAAI,OAAM;AACxB,cAAI,cAAc,IAAI,OAAO,GAAG,CAAC;AAAA,QACrC;AACA,YAAI,CAAC,gBAAgB;AACjB,qBAAW,GAAG,IAAI;AAAA,QACtB;AAAA,MAOJ,OACK;AACD,mBAAW,GAAG,IAAI;AAAA,MACtB;AAAA,IACJ;AACA,QAAI,gBAAgB;AAChB,SAAG,eAAe,MAAM;AAAA,IAC5B;AAMA,SAAK,OAAO,QAAQ;AAIhB,UAAI,CAAC,WAAW,GAAG,KAAK,EAAE,oBAAkBF,MAAA,QAAQ,GAAG,MAAX,gBAAAA,IAAc,QAAO;AAC7D,WAAG,GAAG,IAAI,OAAO,GAAG;AAAA,MACxB;AAAA,IACJ;AACA,QAAI,gBAAgB;AAChB,SAAGE,kBAAiB,IAAI;AAAA,IAC5B,OACK;AACD,aAAO,GAAGA,kBAAiB;AAAA,IAC/B;AACA,QAAI,gBAAgB;AAChB,SAAG,gBAAgB,MAAM;AAAA,IAC7B;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,UAAU,MAAM;AA1zBpB,QAAAF;AA2zBQ,UACI,KAAS,MACT,SAAS,GAAGE,kBAAiB;AACjC,WAAO;AAAA,MACF,GAAG,MAAM,IAAI,KAAK;AAAA,QACnBF,MAAA,GAAG,iBAAiB,MAApB,gBAAAA,IAAuB,IAAI,UAAS;AAAA;AAAA,MAGhC,CAAC,GAAG,WAAW,IAAI,KACnB,WAAW,OAAO,IAAI,KAAK,QAAQ,OAAO,QAAQ,IAAI;AAAA,IAE9D;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,cAAc,QAAQ,MAAM;AAC/B,WAAO,KAAK,MAAM,GAAG,EAAE,MAAM,SAAO;AAh1B5C,UAAAA,KAAA;AAm1BY,YACI,UAAW,MAAAA,MAAA,iCAAQ,UAAR,gBAAAA,IAAe,YAAf,mBAAyB,MACpC,WAAW,UAAU,OAAO,WAAW,UAAQ,aAAQ,sBAAsB,QAAQ,GAAG,MAAzC,mBAA4C;AAG/F,UAAI,WAAW,OAAO,UAAU,GAAG,IAAK,OAAO,QAAS;AACpD,iBAAS,OAAO,GAAG;AACnB,eAAO,WAAW;AAAA,MACtB;AACA,aAAO;AAAA,IACX,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,WAAW,MAAM;AACb,UACI,KAAiB,MACjB,aAAiB,GAAG,iBAAiB,GACrC,SAAiB,GAAGE,kBAAiB;AAEzC,QAAI,yCAAY,IAAI,OAAO;AACvB,aAAO,WAAW,IAAI,IAAI;AAAA,IAC9B;AACA,QAAI,UAAW,QAAQ,QAAS;AAE5B,UAAI,GAAG,WAAW,IAAI,GAAG;AACrB,eAAO,GAAG,IAAI;AAAA,MAClB;AACA,UAAI,OAAO,IAAI,KAAK,QAAQ,OAAO,QAAQ,IAAI,GAAG;AAC9C,eAAO,OAAO,IAAI;AAAA,MACtB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,cAAc,MAAM;AAChB,UACI,KAAiB,MACjB,EAAE,WAAW,IAAI,IACjB,aAAiB,GAAG,iBAAiB,GACrC,SAAiB,GAAGA,kBAAiB,GACrC,aAAkB,yCAAY,IAAI,UAAU,WAAW,OAAO,IAAI,KAAK,QAAQ,OAAO,QAAQ,IAAI,KAC5F,CAAC,WAAW,IAAI,IAAI;AAC9B,QAAI,WAAW;AACX,SAAG,UAAU,IAAI;AAAA,IACrB;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,eAAe,OAAO;AAClB,UACI,KAAc,MACd,UAAc,GAAG,MAAM,SACvB,cAAc,GAAG,iBAAiB,GAClC,YAAc,cAAc,CAAC,GAAG,YAAY,KAAK,CAAC,EAAE,OAAO,OAAK,QAAQ,CAAC,EAAE,SAAS,KAAK,IAAI;AACjG,eAAW,OAAO,WAAW;AACzB,SAAG,cAAc,GAAG;AAAA,IACxB;AACA,WAAO,UAAU,SAAS,YAAY;AAAA,EAC1C;AAAA,EACA,iBAAiB;AAAA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBlB,IAAI,SAAS;AACT,UACI,SAAW,CAAC,GACZ,WAAW,KAAK,oBAAoB;AAIxC,eAAW,OAAO,UAAU;AACxB,aAAO,GAAG,IAAI,SAAS,GAAG;AAAA,IAC9B;AACA,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,OAAO,mBAAmB,cAAc,SAAS;AAC7C,QAAI,iBAAiB,YAAY;AAC7B,aAAO;AAAA,IACX,WACS,MAAM,QAAQ,YAAY,GAAG;AAClC,aAAO,aAAa,IAAI,OAAK,MAAK,mBAAmB,GAAG,OAAO,CAAC;AAAA,IACpE,WAES,wBAAwB,OAAM;AACnC,UAAI,QAAQ,QAAQ,IAAI,YAAY,GAAG;AACnC;AAAA,MACJ;AACA,aAAO,aAAa,iBAAiB,OAAO;AAAA,IAChD,WAES,wBAAwB,eAAe,wBAAwB,kBAAkB;AACtF,aAAO;AAAA,IACX,WAES,QAAQ,SAAS,YAAY,GAAG;AACrC,YAAM,SAAS,CAAC;AAChB,iBAAW,OAAO,cAAc;AAE5B,YAAI,QAAQ,SAAS;AACjB,iBAAO,GAAG,IAAI,MAAK,mBAAmB,aAAa,GAAG,GAAG,OAAO;AAAA,QACpE;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,eAAe,MAAM,SAAS;AAx+BlC,QAAAF;AAy+BQ,UACI,KAAK,MACL,cAAc,GAAG,iBAAiB;AAEtC,QAAI,GAACA,MAAA,GAAG,MAAM,QAAQ,IAAI,MAArB,gBAAAA,IAAwB,OAAM;AAC/B,aAAO,MAAK,mBAAmB,GAAG,IAAI,GAAG,OAAO;AAAA,IACpD;AAEA,QAAI,2CAAa,IAAI,OAAO;AACxB,aAAO,MAAK,mBAAmB,YAAY,IAAI,IAAI,GAAG,OAAO;AAAA,IACjE;AAAA,EACJ;AAAA;AAAA,EAEA,2BAA2B;AAAA,EAAC;AAAA;AAAA;AAAA,EAG5B,iBAAiB,UAAU,CAAE,GAAG;AAC5B,UACI,KAAU,MACV,UAAU,QAAQ,YAAY,QAAQ,GAAG,SAAS,QAAQ,MAAM,GAAG,aAAa,GAChF,OAAU,QAAQ,QAAQ,CAAE,GAC5B,UAAU,QAAQ,YAAY,QAAQ,UAAU,oBAAI,IAAI,IACxD,QAAU,QAAQ,UAAU,QAAQ,QAAQ,IAC5C,SAAU,CAAC;AACf,QAAI,QAAQ,IAAI,EAAE,GAAG;AACjB,aAAO;AAAA,IACX;AACA,YAAQ,IAAI,EAAE;AACd,SAAK,yBAAyB,OAAO;AACrC,eAAW,QAAQ,SAAS;AACxB,UAAI,KAAK,IAAI,GAAG;AACZ;AAAA,MACJ;AACA,YAAM,QAAQ,GAAG,eAAe,MAAM,EAAE,GAAG,SAAS,OAAQ,QAAQ,EAAE,CAAC;AACvE,UAAI,UAAU,QAAW;AACrB,eAAO,IAAI,IAAI;AAAA,MACnB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,gBAAgB,UAAU,CAAC,GAAG;AAC1B,WAAO,aAAa,mBAAmB,KAAK,iBAAiB,OAAO,CAAC;AAAA,EACzE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,UAAU,CAAC,GAAG;AAEtB,UAAM,UAAU,KAAK,UAAU,UAAU,KAAK,iBAAiB,iBAAiB,KAAK,aAAa,aAAa,KAAK,cAAc,cAAc,KAAK,SAAS,SAAS,KAAK,cAAc,cAAc;AACxM,QAAI,SAAS;AACT,YACI,UAAa,QAAQ,YAAY,GAEjC,aAAa,eAAe,OAAO;AACvC,UAAI,UAAU;AACd,UAAI,QAAQ,WAAW,UAAU;AAC7B,mBACI,4BAA4B,UAAU;AAE1C,oBAAY;AAAA,MAChB,OACK;AACD,mBAAW,WAAW,UAAU;AAAA;AAChC,oBAAY;AAAA,MAChB;AACA,YAAM,UAAU,cAAc,WAAW,OAAO;AAChD,UAAI,SAAS;AACT,oBAAY;AAAA,eAAkB,OAAO,IAAI,OAAO;AAAA;AAAA,MACpD;AAEA,aAAO,GAAG,QAAQ;AAAA,QAAiB,OAAO,UAAU,OAAO,IAAI,KAAK,gBAAgB,OAAO,CAAC;AAAA,EAAO,SAAS;AAAA,IAChH;AAAA,EAEJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,iBAAiB,UAAU,CAAC,GAAG;AAC3B,YAAQ,SAAS;AACjB,UAAM,MAAM,KAAK,YAAY,OAAO;AACpC,kBAAc,SAAS,UAAU,+CAA+C,OAAO,GAAG,CAAC;AAAA,EAC/F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,YAAY;AACf,WAAO,KAAK,MAAM;AAAA,EACtB;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,EA4BA,WAAW,QAAQ;AACf,QAAI,CAAC,OAAO,MAAM,UAAU,GAAG;AAC3B,YAAM,OAAO,KAAK,UAAU,IAAI,IAAI,UAAU;AAC9C,WAAK,QAAQ;AACb,WAAK,WAAW,IAAI;AACpB,aAAO;AAAA,IACX;AACA,WAAO,KAAK,UAAU;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,iBAAiB;AAAA,EAExB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,aAAa,eAAe,SAAS;AACxC,UACI,eAAe,KAAK,MAAM,SAC1B,SAAe,QAAQ,MAAM,UAAU,KAAK,CAAC;AACjD,QAAI,QAAQ,GAAG,KAAK;AACpB,SAAK,IAAI,GAAG,IAAI,QAAQ,QAAQ,EAAE,GAAG;AACjC,eAAS,QAAQ,CAAC;AAClB,UAAI,QAAQ;AACR,aAAK,OAAO,QAAQ;AAChB,kBAAQ,OAAO,GAAG;AAClB,cAAI,aAAa,GAAG,GAAG;AACnB,oBAAQ,aAAa,GAAG,EAAE,MAAM,OAAO,OAAO,GAAG,CAAC;AAAA,UACtD,WACS,OAAO,GAAG,KAAK,OAAO;AAC3B,oBAAQ,OAAO,MAAM,OAAO,OAAO,GAAG,CAAC;AAAA,UAC3C;AACA,iBAAO,GAAG,IAAI;AAAA,QAClB;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA,OAAO,SAAS,QAAQ;AAEpB,QAAI,IAAI,MACJ;AAEJ,SAAK,IAAI,GAAG,IAAI,OAAO,QAAQ,EAAE,GAAG;AAChC,YACIO,SAAQ,OAAO,CAAC,GAEhB,MAAQA,OAAM,cAAc,MAAMA,OAAM,cAAc,IAAI,OAAO,UAAU;AAC/E,UAAI,EAAE,GAAG,GAAG;AACR;AAAA,MACJ;AACA,UAASA,OAAM,CAAC;AAChB,QAAE,GAAG,IAAI;AACT,UAAI,OAAO,GAAG,gBAAgB,GAAG;AAC7B,UAAE,eAAe;AAAA,MACrB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,WAAW,MAAM;AAvsC5B,QAAAP;AAwsCQ,UACI,MAAQ,KAAK,OAEb,OAAQ,eAAe,GAAG,EAAE,OAC5B,OAAQ,IAAI,QACZ,QAAQ,KAAK,OACbQ,SAAQ,IAAI;AAChB,IAAAP,gBAAeO,QAAO,SAAS;AAAA,MAC3B,OAAQ;AAAA,IACZ,CAAC;AACD,WAAO,OAAO,MAAM;AAAA,MAChB,OAAc;AAAA,MACd,QAAc,OAAO,OAAO,KAAK,MAAM;AAAA,MACvC,SAAc,OAAO,OAAO,KAAK,OAAO;AAAA,MACxC,aAAc,KAAK;AAAA,MACnB,aAAc,KAAK;AAAA,MACnB,WAAc,OAAO,OAAO,CAAC,GAAG,KAAK,WAAW,GAAG,CAAC;AAAA,MACpD,OAAc,MAAM,SAAS,IAAI,IAAI,QAAQ,OAAO,OAAO,CAAC,GAAG,OAAO,IAAI,CAAC;AAAA,MAC3E,YAAc,KAAK;AAAA,MACnB,UAAcR,MAAA,KAAK,YAAL,gBAAAA,IAAc;AAAA,IAChC,CAAC;AACD,QAAI,UAAU,KAAK,OAAO;AACtB,YACI,SAAS,KAAK,IAAI,IAClB,mBAAmB,SAAO;AACtB,YAAI,CAAC,OAAO,KAAK,MAAM,GAAG;AACtB,UAAAC,gBAAe,KAAK,QAAS;AAAA,YACzB,MAAM;AACF,qBAAO;AAAA,YACX;AAAA,UACJ,CAAC;AAAA,QACL;AAAA,MACJ;AACJ,uBAAiBO,MAAK;AACtB,uBAAiB,GAAG;AAAA,IACxB;AAGA,aAAS,MAAM,WAAW,IAAI,GAAG,IAAI,KAAK,YAAY,QAAQ,EAAE,GAAG;AAC/D,aAAO,KAAK,YAAY,CAAC;AACzB,UAAI,OAAO,KAAK,IAAI,GAAG;AACnB,oBAAY,WAAW,IAAI,MAAM,WAAW,IAAI,IAAI,QAAQ,aAAa,WAAW,IAAI,CAAC;AACzF,YAAI,SAAS,EAAE,KAAK,IAAI;AAAA,MAC5B;AAAA,IACJ;AAAA,EAGJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,aAAa,MAAM,SAAS,QAAQ;AACvC,UACI,oBAAoB,KAAK,QACzB,eAAoB,KAAK,SACzB,MAAoB,KAAK,OACzB,YAAoB,KAAK;AAC7B,QAAI,EAAE,QAAQ,IAAI,MACd,KAAKC,eAAc,SAAS,YAAY,OAAO;AACnD,eAAW,QAAQ,SAAS;AACxB,cAAQ,QAAQ,IAAI;AACpB,UAAI,QAAQ;AAER,YAAI,EAAE,MAAM,aAAa,IAAI,IAAI;AAC7B,gBAAM,OAAO,IAAI,MAAM,oBAAoB;AAAA,QAC/C,OACK;AAGD,kBAAQ,IAAI,MAAM,OAAO,kBAAkB,IAAI,GAAG,MAAM,SAAS;AAAA,QACrE;AAAA,MAGJ,OACK;AAED,QAAAA,gBAAe,UAAU,aAAa;AACtC,YAAI,SAAS,OAAO,UAAU,YAAY,aAAa,OAAO;AAC1D,oBAAU,MAAM;AAChB,cAAI,WAAW,CAAC,QAAQ,SAAS,OAAO,GAAG;AACvC,sBAAU,QAAQ,iBAAiB,OAAO;AAAA,UAC9C;AACA,uBAAa,aAAa;AAC1B,UAAAA,gBAAe,aAAa,MAAM,UAAUA;AAC5C,kBAAQ,MAAM;AAAA,QAClB;AACA,YAAI,EAAE,MAAM,aAAa,IAAI,IAAI;AAC7B,gBAAM,OAAO,IAAI,MAAM,OAAO;AAC9B,cAAI,OAAO,IAAI,SAAS;AACxB,uBAAa,EAAE,IAAI,SAAS,IAAI;AAChC,uBAAa;AAAA,QACjB,OACK;AACD,uBAAa,IAAI;AACjB,cAAI,SAAS;AAET,kBAAM,IAAI,OAAO,OAAO;AAAA,UAG5B;AACA,kBAAQ,IAAI,MAAM,OAAO,kBAAkB,IAAI,GAAG,MAAM,SAAS;AAAA,QACrE;AACA,YAAI,YAAY;AACZ,cAAI,WAAW,KAAKA,aAAY;AAAA,QACpC;AACA,YAAI,IAAI,WAAW,CAAC,YAAY;AAC5B,WAAC,YAAY,UAAW,KAAK,YAAY,KAAK,UAAU,CAAC,KAAM,KAAK,GAAG;AAAA,QAC3E;AAAA,MACJ;AAGA,UAAI,UAAU,QAAQ,SAAS,KAAK,KAAK,MAAM,QAAQ,KAAK,MAAM,CAAC,OAAO,SAAS,KAAK,GAAG;AACvF,aAAK,cAAc;AAAA,MACvB;AACA,mBAAa,IAAI,IAAS;AAC1B,wBAAkB,IAAI,IAAI;AAAA,IAC9B;AAAA,EACJ;AAAA,EACA,OAAO,kBAAkB,KAAK,MAAM;AAChC,QAAI,aAAa,MAAM,IAAI,cAAc,KAAK;AAAA,EAClD;AAAA,EACA,OAAO,mBAAmB,KAAK,MAAM;AACjC,QAAI,aAAa,MAAM,IAAI,eAAe,IAAI;AAAA,EAClD;AAAA,EACA,OAAO,gBAAgB,KAAK,MAAM;AAC9B,UAAM,aAAa,IAAI;AACvB,QAAI,MAAM,KAAK,aACX,QAAQ;AACZ,SAAK,IAAI,GAAG,IAAI,WAAW,QAAQ,EAAE,GAAG;AACpC,UAAI,CAAC,IAAI,SAAS,WAAW,CAAC,CAAC,GAAG;AAC9B,YAAI,CAAC,QAAQ;AACT,eAAK,cAAc,SAAS,MAAM,IAAI,MAAM;AAAA,QAChD;AACA,YAAI,KAAK,WAAW,CAAC,CAAC;AAAA,MAC1B;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,OAAO,gBAAgB,KAAK,MAAM;AAC9B,SAAK,aAAa,KAAK,MAAM,WAAW,MAAM;AAC9C,SAAK,WAAW,KAAK,GAAG;AACxB,WAAO,OAAO,KAAK,UAAU;AAAA,EACjC;AAAA,EACA,OAAO,yBAAyB,KAAK;AACjC,WAAO,OAAO,IAAI,WAAW,IAAI,mBAAmB;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,0BAA0B;AACtB,WAAO,KAAK,YAAY,wBAAwB;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,0BAA0B;AAC7B,UACI,OAAS,KAAK,OACd,SAAS,KAAK,cAAc,MAAK,KAAK,KAAK,MAAM,IAAI,OAAO,OAAO,KAAK,MAAM;AAClF,QAAI,cAAc,aAAa,cAAc,gBACzC,OAAO,cAAc,WAAW,oBAAoB;AACpD,iBAAW,KAAK,OAAO,YAAY;AAC/B,eAAO,CAAC,IAAI,OAAO,WAAW,CAAC;AAAA,MACnC;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,OAAO,KAAK,KAAK;AACb,QAAI,MAAM,KACN,KAAK;AACT,QAAI,OAAO,QAAQ,SAAS,GAAG,KAAK,CAAC,OAAO,SAAS,GAAG,GAAG;AACvD,YAAM,OAAO,OAAO,GAAG;AACvB,WAAK,OAAO,KAAK;AACb,gBAAQ,IAAI,GAAG;AACf,YAAI,OAAO;AACP,cAAI,QAAQ,SAAS,KAAK,GAAG;AACzB,gBAAI,GAAG,IAAI,MAAK,KAAK,KAAK;AAAA,UAC9B,WACS,MAAM,QAAQ,KAAK,GAAG;AAC3B,gBAAI,GAAG,IAAI,MAAM,MAAM;AAAA,UAC3B;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBAAgB;AACZ,UAEI,YAAY,KAAK,MAAM,YACvB,SAAY,CAAC;AACjB,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAEvC,aAAO,OAAO,QAAQ,UAAU,CAAC,EAAE,UAAU;AAAA,IACjD;AACA,WAAO;AAAA,EACX;AAAA,EACA,WAAW,aAAa;AACpB,WAAO,eAAe,IAAI;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,eAAe,UAAU;AACrB,UACI,YAAY,KAAK,MAAM,WACvB,QAAY,WAAW,UAAU,QAAQ,QAAQ,IAAI;AACzD,WAAQ,QAAQ,IAAK,UAAU,MAAM,KAAK,IAAI;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,aAAa,MAAM;AACtB,WAAO,KAAK,MAAM,MAAM,SAAS,IAAI;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAgB,MAAM;AAClB,QAAI,YAAY,KAAK;AACrB,gBAAY,uCAAY;AACxB,QAAI,WAAW;AACX,aAAO,UAAU,QAAQ;AACrB,kBAAU,IAAI,EAAE;AAAA,MACpB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAc,MAAMC,WAAU;AAC1B,UACI,YAAY,KAAK,eAAe,KAAK,aAAa,CAAC,IACnD,SAAY,UAAU,IAAI,MAAM,UAAU,IAAI,IAAI,CAAC;AACvD,WAAO,KAAKA,SAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,iBAAiB,SAAS;AACtB,UAAM,YAAY,KAAK;AACvB,QAAI,WAAW;AACX,iBAAW,QAAQ,WAAW;AAC1B,cAAM,SAAS,UAAU,IAAI;AAC7B,iBAAS,IAAI,OAAO,QAAQ,MAAM,KAAgB;AAC9C,cAAI,OAAO,CAAC,EAAE,YAAY,SAAS;AAC/B,mBAAO,OAAO,GAAG,CAAC;AAAA,UACtB;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;AACA,IAAM,QAAQ,KAAK;AAEnB,MAAM,eAAe,UAAU,QAAQ,UAAU;AACjD,KAAK,UAAU,IAAI,MAAM,QAAQ,QAAQ;AAAA,EACrC,OAAc;AAAA,EACd,QAAc,OAAO,OAAO,CAAC,CAAC;AAAA,EAC9B,SAAc,uBAAO,OAAO,IAAI;AAAA,EAChC,aAAc,KAAK;AAAA,EACnB,aAAc;AAAA,EACd,WAAc,OAAO,OAAO,CAAC,IAAI,CAAC;AAAA,EAClC,OAAc,OAAO,OAAO,CAAC,MAAM,CAAC;AAAA,EACpC,SAAc;AAAA,EACd,YAAc,OAAO,OAAO,CAAC,CAAC;AAAA,EAC9B,OAAc;AAClB,CAAC;AAED,OAAO,OAAO,OAAO;AAAA,EACjB,YAAa;AAAA,EACb,gBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQjB,gBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYjB,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUd,cAAe;AACnB,CAAC;AACD,KAAK,UAAU;AACf,cAAc,WAAW,QAAQ,OAAO;AACxC,KAAK,SAAS;;;AC7hDd,IAAqB,cAArB,MAAqB,aAAY;AAAA,EAC7B,OAAO,MAAM,OAAO;AAChB,WAAO,MAAM,OAAO,CAAC,KAAK,SAAS;AAC/B,UAAI,SAAS,QAAQ,SAAS,UAAa,EAAE,MAAM,QAAQ,IAAI,KAAK,KAAK,WAAW,MAAM,SAAS;AAAI,YAAI,KAAK,IAAI;AACpH,aAAO;AAAA,IACX,GAAG,CAAC,CAAC;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAO,KAAK,UAAUC,SAAQC,MAAK;AAC/B,UAAM,QAAQ,CAAC;AACf,QAAI,UAAU;AACV,iBAAW,MAAM,UAAU;AACvB,YAAI,CAACD,WAAUA,QAAO,EAAE,GAAG;AACvB,gBAAM,KAAKC,OAAMA,KAAI,EAAE,IAAI,EAAE;AAAA,QACjC;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,OAAO,UAAUC,QAAO;AAC3B,QAAI,OACA,MACA,UAAU;AACd,IAAAA,SAAQA,OAAM,CAAC,aAAa,MAAM,CAAC,GAAGA,OAAM,CAAC,CAAC,IAAIA;AAClD,aAAS,IAAI,GAAG,IAAIA,OAAM,QAAQ,KAAK;AACnC,aAAOA,OAAM,CAAC;AACd,WAAK,QAAQ,MAAM,QAAQ,IAAI,OAAO,IAAI;AACtC,cAAM,OAAO,OAAO,CAAC;AACrB,kBAAU;AAAA,MACd;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,OAAO,mBAAmB,MAAM,OAAO,eAAe,KAAK,gBAAgB,OAAO;AAC9E,UAAM,MAAM,MAAM;AAClB,QAAI,aAAa;AACjB,QAAI,QAAQ,KAAK;AACb,oBAAc,QAAQ,IAAI,aAAa,MAAM,QAAQ,CAAC,GAAG,IAAI,IAAI;AACjE,mBAAa,QAAQ,MAAM,IAAI,aAAa,MAAM,MAAM,KAAK,CAAC,IAAI;AAClE,UAAI,cAAc,KAAK,aAAa,GAAG;AACnC,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO,KAAK,aAAa,OAAO,MAAM,YAAY;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,SAAS,OAAOC,KAAI,SAAS;AAChC,aAAS,EAAE,OAAO,IAAI,OAAO,IAAI,SAAS,GAAG,KAAK,GAAG,KAAK;AACtD,UAAIA,IAAG,KAAK,SAAS,MAAM,CAAC,GAAG,GAAG,KAAK,GAAG;AACtC,eAAO,MAAM,CAAC;AAAA,MAClB;AAAA,IACJ;AAAA,EACJ;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,EA8BA,OAAO,aAAa,OAAO,MAAM,QAAQ,GAAG,MAAM,MAAM,QAAQ,YAAY,KAAK,gBAAgB;AAC7F,UAAM,SAAS,MAAM;AACrB,QAAI,QAAQ;AACZ,QAAI,iBAAiB,UAAU;AAC3B,kBAAY;AACZ,cAAQ;AAAA,IACZ,WACS,eAAe,UAAU;AAC9B,kBAAY;AACZ,YAAM;AAAA,IACV;AACA,MAAE;AACF,WAAO,SAAS,KAAK;AACjB,eAAU,QAAQ,OAAQ;AAC1B,mBAAa,UAAU,MAAM,MAAM,MAAM,CAAC;AAC1C,UAAI,cAAc,GAAG;AACjB,gBAAQ,SAAS;AAAA,MACrB,WACS,aAAa,GAAG;AACrB,cAAM,SAAS;AAAA,MACnB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,iBAAiB,KAAK,KAAK;AACvB,WAAQ,MAAM,MAAO,KAAO,MAAM,MAAO,IAAI;AAAA,EACjD;AAAA,EACA,eAAe,KAAK,KAAK;AACrB,UAAM,OAAO,GAAG;AAChB,UAAM,OAAO,GAAG;AAChB,WAAQ,MAAM,MAAO,KAAO,MAAM,MAAO,IAAI;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,KAAK,OAAO,cAAc,CAAC,GAAGA,MAAK,MAAM;AAC5C,UACI,SAAS,CAAC,GACVD,SAAS,MAAM,QAAQ,WAAW,IAAI,cAAc,CAAC,WAAW;AACpE,aAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,iBAAW,QAAQA,QAAO;AAGtB,cAAM,gBAAgB,OAAO,OAAO,CAAC,GAAG,IAAI;AAC5C,YAAIC,KAAI;AACJ,UAAAA,IAAG,eAAe,CAAC;AAAA,QACvB;AACA,eAAO,KAAK,aAAa;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,SAAS,OAAOA,KAAI,WAAW,OAAO;AACzC,UAAMD,SAAQ,CAAC;AACf,aAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,MAAAA,OAAM,KAAKC,IAAG,KAAK,WAAW,IAAI,EAAE,CAAC;AAAA,IACzC;AACA,WAAOD;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,QAAQ,UAAUA,QAAO;AAC5B,eAAW,QAAQA,QAAO;AACtB,UAAI,CAAC,MAAM,SAAS,IAAI,GAAG;AACvB,cAAM,KAAK,IAAI;AAAA,MACnB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,OAAO,OAAO;AACjB,WAAO,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC;AAAA,EAC7B;AAAA;AAAA,EAEA,OAAO,cAAc,OAAO;AAExB,WAAO,IAAI,MAAM,OAAO;AAAA,MACpB,IAAI,QAAQ,MAAM,UAAU;AACxB,YAAI,OAAO,SAAS,UAAU;AAC1B,iBAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAAA,QAC7C;AACA,cAAM,QAAQ,OAAO,IAAI;AACzB,YAAI,OAAO,MAAM,KAAK,GAAG;AACrB,iBAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAAA,QAC7C;AACA,eAAO,OAAO,QAAQ,IAAI,OAAO,SAAS,QAAQ,KAAK;AAAA,MAC3D;AAAA,MACA,IAAI,QAAQ,MAAM,OAAO,UAAU;AAC/B,YAAI,OAAO,SAAS,UAAU;AAC1B,iBAAO,QAAQ,IAAI,QAAQ,MAAM,OAAO,QAAQ;AAAA,QACpD;AACA,cAAM,QAAQ,OAAO,IAAI;AACzB,YAAI,OAAO,MAAM,KAAK,GAAG;AACrB,iBAAO,QAAQ,IAAI,QAAQ,MAAM,OAAO,QAAQ;AAAA,QACpD;AACA,eAAO,QAAQ,IAAI,OAAO,SAAS,QAAQ,KAAK,IAAI;AACpD,eAAO;AAAA,MACX;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,OAAO,MAAM,GAAG,GAAG,oBAAoB,OAAO;AAO1C,QAAI,CAAC,GAAG;AACJ,aAAO,oBACD,EAAE,OAAQ,GAAG,UAAW,CAAC,GAAG,QAAS,CAAC,EAAE,IACxC,EAAE,SAAU,GAAG,SAAU,CAAC,GAAG,QAAS,CAAC,EAAE;AAAA,IACnD;AACA,UACI,UAAU,CAAC,GACX,UAAU,CAAC,GACX,SAAU,oBAAI,IAAI,GAClB,OAAU,IAAI,IAAI,CAAC;AACvB,aAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AAC/B,YAAM,OAAO,EAAE,CAAC;AAChB,UAAI,KAAK,IAAI,IAAI,GAAG;AAChB,eAAO,IAAI,IAAI;AAAA,MACnB,OACK;AACD,gBAAQ,KAAK,IAAI;AAAA,MACrB;AAAA,IACJ;AACA,aAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AAC/B,YAAM,OAAO,EAAE,CAAC;AAChB,UAAI,CAAC,OAAO,IAAI,IAAI,GAAG;AACnB,gBAAQ,KAAK,IAAI;AAAA,MACrB;AAAA,IACJ;AACA,QAAI,mBAAmB;AACnB,aAAO,EAAE,OAAQ,SAAS,UAAW,SAAS,QAAS,OAAO;AAAA,IAClE;AACA,WAAO,EAAE,SAAS,SAAS,QAAS,CAAC,GAAG,MAAM,EAAE;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,OAAO,QAAQ,eAAe;AAC1B,QAAI,iBAAiB,MAAM;AACvB,aAAO;AAAA,IACX;AACA,QAAI,yBAAyB,KAAK;AAC9B,aAAO,MAAM,KAAK,aAAa;AAAA,IACnC;AACA,WAAO,MAAM,QAAQ,aAAa,IAAI,gBAAgB,CAAC,aAAa;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,SAAS,GAAG;AACf,WAAO;AAAA,EACX;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,EA6BA,OAAO,MAAM,OAAO,WAAW,cAAc,aAAY,UAAU;AAC/D,UACI,SAAS,OAAO,cAAc,WAAW,OAAK,uBAAI,aAAa,WAC/D,WAAW,OAAO,gBAAgB,WAAW,OAAK,uBAAI,eAAe;AACzE,WAAO,MAAM,OAAO,CAAC,MAAM,SAAS;AAChC,WAAK,OAAO,IAAI,CAAC,IAAI,SAAS,IAAI;AAClC,aAAO;AAAA,IACX,GAAG,CAAC,CAAC;AAAA,EACT;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,EAwCA,OAAO,UAAU,QAAQ,iBAAiB,cAAc,mBAAmB,qBAAqB,CAAC,GAAG;AAChG,UACI,YAAe,OAAO,QACtB,eAAe,OAAO,CAAC,EAAE,QACzB,SAAe,CAAC;AAGpB,uBAAmB,cAAc;AACjC,uBAAmB,SAAS;AAC5B,aAAS,WAAW,GAAG,WAAW,cAAc,YAAY;AACxD,yBAAmB,aAAa;AAChC,aAAO,KAAK,kBAAkB,UAAU,kBAAkB,CAAC;AAAA,IAC/D;AAEA,aAAS,WAAW,GAAG,WAAW,WAAW,YAAY;AACrD,YAAM,MAAM,OAAO,QAAQ;AAC3B,yBAAmB,WAAW;AAC9B,eAAS,WAAW,GAAG,WAAW,cAAc,YAAY;AACxD,2BAAmB,aAAa;AAChC,cAAM,aAAa,gBAAgB,IAAI,QAAQ,GAAG,kBAAkB;AAEpE,eAAO,QAAQ,IAAI,aAAa,OAAO,QAAQ,GAAG,YAAY,UAAU,UAAU,kBAAkB;AAAA,MACxG;AAAA,IACJ;AACA,WAAO;AAAA,EACX;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,EAsCA,OAAO,QAAQ,OAAO,gBAAgB;AAClC,UAAM,SAAS,OAAO,mBAAmB,WAAW,OAAK,uBAAI,kBAAkB;AAC/E,WAAO,MAAM,OAAO,CAAC,SAAS,UAAU;AACpC,YAAM,MAAM,OAAO,KAAK;AACxB,OAAC,QAAQ,GAAG,IAAI,QAAQ,GAAG,KAAK,CAAC,GAAG,KAAK,KAAK;AAC9C,aAAO;AAAA,IACX,GAAG,CAAC,CAAC;AAAA,EACT;AACJ;AACA,YAAY,SAAS;;;AC9crB,IACI,aAAa;AADjB,IAEI,gBAAgB,OAAO,YAAY;AAFvC,IAII,QAAQ;AAJZ,IAMI,QAAQ;AANZ,IAQI,QAAQ;AARZ,IASI,EAAE,gBAAAE,gBAAe,IAAI,OAAO;AAKhC,IAAqB,iBAArB,MAAqB,gBAAe;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,EA+DhC,OAAO,MAAM,QAAQ,QAAQC,KAAI,SAAS,SAAS;AAC/C,UACI,QAAQ,OAAOA,QAAO,UACtB,cAAa,mCAAS,YAAW,OACjC,OAAO,IAAI,SAAS;AAChB,YAEI,aAAa,KAAK,UAAU,KAAK,QAAQ,GAAG,IAAI,GAChD,cAAa,mCAAS,eAAc,SAAa,aAC1C,QAAQ,QAAQA,GAAE,EAAE,YAAY,GAAG,IAAI,IAAIA,IAAG,KAAK,SAAS,YAAY,GAAG,IAAI,IAC/E,QAAQ,QAAQA,GAAE,EAAE,GAAG,IAAI,IAAIA,IAAG,KAAK,SAAS,GAAG,IAAI;AAElE,aAAQ,eAAe,SAAa,aAAa;AAAA,IACrD;AACJ,WAAO,gBAAe,WAAW,QAAQ,QAAQ,IAAI;AAAA,EACzD;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,EAuDA,OAAO,OAAO,QAAQ,QAAQA,KAAI,SAAS;AACvC,UACI,QAAQ,OAAOA,QAAO,UACtB,OAAO,IAAI,SAAS;AAChB,YAAM,OAAO,mCAAS,eAChB,IACC,QAAQ,QAAQA,GAAE,EAAE,GAAG,IAAI,IAAIA,IAAG,KAAK,SAAS,GAAG,IAAI;AAE9D,aAAQ,QAAQ,QAAS,MAAM,KAAK,UAAU,KAAK,QAAQ,GAAG,IAAI;AAAA,IACtE;AACJ,WAAO,gBAAe,WAAW,QAAQ,QAAQ,IAAI;AAAA,EACzD;AAAA,EACA,OAAO,MAAM,MAAM;AACf,WAAO,SAAS,WAAW,MAAM;AAC7B,UAAI,KAAK,UAAU,KAAK,QAAQ;AAC5B,eAAO,KAAK,MAAM,MAAM,IAAI;AAAA,MAChC,OACK;AACD,eAAO,YAAY,OAAO;AACtB,iBAAO,QAAQ,MAAM,MAAM,KAAK,OAAO,KAAK,CAAC;AAAA,QACjD;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,OAAO,QAAQ,KAAK;AAChB,eAAW,OAAO,KAAK;AACnB,UAAI,OAAO,IAAI,GAAG,MAAM,YAAY;AAChC,YAAI,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG;AAAA,MAChC;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,kBAAkB,UAAU,aAAa,SAAS;AACrD,WAAO,YAAY,MAAM;AACrB,YAAM,UAAU,WAAW;AAC3B,UAAI,YAAY,KAAK,SAAS,GAAG,IAAI,MAAM,OAAO;AAC9C,eAAO,SAAS,KAAK,SAAS,GAAG,IAAI;AAAA,MACzC;AACA,aAAO;AAAA,IACX;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,eAAe,UAAU,UAAU,SAAS;AAC/C,WAAO,IAAI,SAAS;AAChB,YAAM,aAAa,SAAS,KAAK,SAAS,GAAG,IAAI,GAC7C,iBAAiB,SAAS,KAAK,SAAS,GAAG,IAAI;AACnD,aAAQ,mBAAmB,SAAa,aAAa;AAAA,IACzD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,OAAO,gBAAgBA,KAAI,QAAQ,SAAS,WAAWC,MAAK;AACxD,QAAI,eAAe,CAAC,OAAO,WACvB,UACA;AACJ,UACI,SAAS,MAAM;AACX,gBAAU;AACV,qBAAe,YAAY,IAAI;AAC/B,eAAS,KAAK,MAAM,UAAU,SAAS;AACvC,MAAAD,IAAG,MAAM,SAAS,QAAQ;AAAA,IAC9B,GACA,SAAS,YAAY,MAAM;AACvB,YAAM,UAAU,YAAY,IAAI,IAAI;AACpC,iBAAW;AAEX,UAAI,WAAW,QAAQ;AACnB,qBAAa,OAAO;AACpB,eAAO;AAAA,MACX,OAEK;AACD,YAAI,CAAC,SAAS;AACV,oBAAU,WAAW,QAAQ,SAAS,OAAO;AAAA,QACjD;AACA,YAAIC,MAAK;AACL,mBAAS,KAAK,MAAM,UAAU,SAAS;AACvC,UAAAA,KAAI,MAAM,SAAS,QAAQ;AAAA,QAC/B;AAAA,MACJ;AAAA,IACJ;AACJ,WAAO,SAAS,MAAM,aAAa,OAAO;AAC1C,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAO,eAAeD,KAAI,QAAQ,SAAS,MAAM;AAC7C,QAAI,UACA;AACJ,UACI,SAAS,MAAM;AACX,gBAAU;AACV,aAAO,YAAY;AACnB,eAAS,KAAK,MAAM,UAAU,IAAI;AAClC,MAAAA,IAAG,MAAM,SAAS,QAAQ;AAAA,IAC9B,GACA,SAAS,YAAYE,OAAM;AACvB,iBAAWA;AAEX,UAAI,SAAS;AACT,qBAAa,OAAO;AAAA,MACxB;AACA,aAAO,YAAY;AACnB,gBAAU,WAAW,QAAQ,MAAM;AAAA,IACvC;AACJ,WAAO,SAAS,MAAM;AAClB,aAAO,YAAY;AACnB,mBAAa,OAAO;AAAA,IACxB;AACA,WAAO;AAAA,EACX;AAAA,EACA,OAAO,UAAUF,KAAI;AACjB,QAAI,EAAE,iBAAiBA,MAAK;AACxB,YAAM,OAAOA,IAAG,SAAS;AACzB,UAAI,IAAI,MAAM,KAAK,IAAI,GACnB,MAAM,MAAM,MAAM,YAAY;AAClC,UAAI,GAAG;AAGH,eAAO,CAAC,EAAE,CAAC,CAAC;AACZ,eAAO,EAAE,CAAC;AAAA,MACd,WACU,IAAqB,MAAM,KAAK,IAAI,GAAI;AAG9C,YAAI,EAAE,CAAC,EAAE,KAAK;AACd,eAAO,IAAI,EAAE,MAAM,UAAU,IAAI,CAAC;AAClC,eAAO,EAAE,CAAC;AAAA,MACd,WACU,IAAqB,MAAM,KAAK,IAAI,GAAI;AAG9C,eAAO,EAAE,CAAC;AACV,YAAI,EAAE,CAAC,EAAE,KAAK;AACd,eAAO,IAAI,EAAE,MAAM,UAAU,IAAI,CAAC;AAClC,eAAO,EAAE,CAAC;AAAA,MACd;AACA,aAAO,6BAAM;AACb,MAAAA,IAAG,aAAa,IAAI,aAAa,KAAK;AAAA,QAClC;AAAA,QACA,OAAQ,QAAQ,EAAE,CAAC,CAAC;AAAA,QACpB,OAAQ,6BAAM,WAAW,QAAO,KAAK,UAAU,GAAG,KAAK,SAAS,CAAC,EAAE,KAAK,IAAI;AAAA,MAChF;AACA,UAAI,MAAM;AACN,mBAAW,OAAO;AAAA,MACtB;AAAA,IACJ;AACA,WAAOA,IAAG,aAAa;AAAA,EAC3B;AAAA,EACA,OAAO,WAAW,QAAQ,QAAQ,MAAM;AACpC,SAAK,YAAY,OAAO,MAAM;AAC9B,WAAO,MAAM,IAAI;AACjB,WAAO,MAAM;AAvVrB,UAAAG;AAyVY,UAAIJ,gBAAe,KAAK,QAAQ,MAAM,GAAG;AACrC,YAAI,IAAI,OAAO,MAAM,GACjB;AACJ,YAAI,MAAM,MAAM;AAIZ,gBAAII,MAAA,OAAO,eAAe,MAAM,MAA5B,gBAAAA,IAAgC,aAAY,KAAK,WAAW;AAC5D,mBAAO,OAAO,MAAM;AAAA,UACxB,OACK;AACD,mBAAO,MAAM,IAAI,KAAK;AAAA,UAC1B;AAAA,QACJ,OACK;AAGD,iBAAQ,OAAO,uBAAG,WAAY,IAAI,MAAM;AACpC,gBAAI,SAAS,MAAM;AACf,gBAAE,YAAY,KAAK;AACnB;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,QAAQ,QAAQ,QAAQ,SAAS;AACpC,UAAMH,MAAK,OAAO,MAAM;AACxB,WAAO,MAAM,IAAI,IAAI,SAAS;AAC1B,UAAI;AACA,eAAOA,IAAG,MAAM,QAAQ,IAAI;AAAA,MAChC,SACO,GAAG;AACN,eAAO,mCAAU;AAAA,MACrB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,OAAO,aAAa;AAChB,WAAO;AAAA,EACX;AAAA,EACA,OAAO,QAAQ,UAAUA,KAAI,SAAS,SAAS,UAAU;AACrD,QAAI,SAAS;AACb,UAAM,SAAS,IAAI,QAAQ,aAAW;AAClC,YAAM,QAAQ,YAAY,IAAI,GAC1B,UAAU,MAAM;AACZ,cAAM,WAAW,KAAK,KAAK,YAAY,IAAI,IAAI,SAAS,UAAU,CAAC,GAC/D,YAAY,WAAW,QAAQ,aAAa,UAAU;AAC1D,YAAI,CAAC,QAAQ;AACT,cAAIA,IAAG,KAAK,SAAS,KAAK,gBAAgB,MAAM,EAAE,QAAQ,CAAC,MAAM,OAAO;AACpE,oBAAQ;AAAA,UACZ;AAAA,QACJ;AACA,YAAI,UAAU,aAAa,GAAG;AAG1B,oBAAU,sBAAsB,MAAM,QAAQ,CAAC;AAAA,QACnD,OACK;AACD,oBAAU,sBAAsB,OAAO;AAAA,QAC3C;AAAA,MACJ;AACJ,cAAQ;AAAA,IACZ,CAAC;AACD,WAAO,SAAS,MAAM;AAClB,eAAS;AACT,aAAO,YAAY;AACnB,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AACJ;AACA,IACI,OAAO;AADX,IAEI,KAAK;AAFT,IAGI,KAAK;AAHT,IAII,KAAK;AAJT,IAKI,KAAK,IAAI;AALb,IAMI,KAAK,OAAO;AANhB,IAOI,KAAK,IAAI;AAPb,IAQI,KAAK,MAAM;AARf,IASI,KAAK,MAAM;AATf,IAUI,KAAK,QAAQ;AAVjB,IAWI,MAAM;AAXV,IAYI,MAAM;AAZV,IAaI,MAAM;AAbV,IAcI,KAAK;AAdT,IAeI,KAAK;AACT,eAAe,kBAAkB;AAAA,EAC7B,QAAiB,OAAK;AAAA,EACtB,YAAiB,OAAK,KAAK,IAAI,GAAG,CAAC;AAAA,EACnC,aAAiB,OAAK,EAAE,KAAK,IAAK,IAAI,GAAI,CAAC,IAAI;AAAA,EAC/C,eAAiB,QAAM,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,KAAK,IAAI;AAAA,EACxF,aAAiB,OAAK,KAAK,IAAI,GAAG,CAAC;AAAA,EACnC,cAAiB,OAAK,KAAK,IAAK,IAAI,GAAI,CAAC,IAAI;AAAA,EAC7C,gBAAiB,QAAM,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,GAAG,CAAC,IAAI,QAAQ,KAAK,IAAK,IAAI,GAAI,CAAC,IAAI;AAAA,EAC/F,aAAiB,OAAK,KAAK,IAAI,GAAG,CAAC;AAAA,EACnC,cAAiB,OAAK,EAAE,KAAK,IAAK,IAAI,GAAI,CAAC,IAAI;AAAA,EAC/C,gBAAiB,QAAM,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI;AAAA,EACrG,aAAiB,OAAK,KAAK,IAAI,GAAG,CAAC;AAAA,EACnC,cAAiB,OAAM,KAAK,IAAK,IAAI,GAAI,CAAC,IAAI;AAAA,EAC9C,gBAAiB,QAAM,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,GAAG,CAAC,IAAI,QAAQ,KAAK,IAAK,IAAI,GAAI,CAAC,IAAI;AAAA,EAC/F,YAAiB,OAAK,CAAC,KAAK,IAAI,KAAK,KAAK,KAAK,EAAE,IAAI;AAAA,EACrD,aAAiB,OAAK,KAAK,IAAI,KAAK,KAAK,KAAK,EAAE;AAAA,EAChD,eAAiB,OAAK,CAAC,QAAQ,KAAK,IAAI,KAAK,KAAK,CAAC,IAAI;AAAA,EACvD,YAAiB,OAAK,MAAM,IAAI,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI,EAAE;AAAA,EAC5D,aAAiB,OAAK,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,GAAG,MAAM,CAAC,IAAI;AAAA,EAC5D,eAAiB,OAAM,MAAM,IAAK,IAAK,MAAM,IAAK,KAAM,KAAK,QAAQ,IAAK,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,EAAE,IAAI,QAAQ,CAAC,KAAK,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI;AAAA,EAC/I,YAAiB,OAAK,EAAE,KAAK,KAAK,IAAK,IAAI,CAAE,IAAI;AAAA,EACjD,aAAiB,OAAK,KAAK,KAAK,IAAI,KAAK,IAAK,IAAI,GAAI,CAAC,CAAC;AAAA,EACxD,eAAiB,QAAM,KAAK,QAAQ,IAAI,CAAC,QAAQ,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC,IAAI;AAAA,EACnH,eAAiB,OAAO,IAAK,KAAO,KAAK,IAAI,IAAM,IAAI,KAAO,MAAM,KAAK,MAAM,IAAI,MAAQ,IAAI,KAAO,MAAM,KAAK,MAAM,IAAI,MAAQ,MAAM,KAAK,MAAM,IAAI;AAAA,EACxJ,YAAiB,OAAM,IAAK,MAAM,KAAK,KAAK,IAAI;AAAA,EAChD,aAAiB,QAAM,IAAI,IAAI,KAAK,MAAM,KAAK,KAAK,IAAI,MAAM;AAAA,EAC9D,eAAiB,OAAK;AAClB,QAAI,KAAK;AACT,YAAS,KAAK,QAAQ,IAAK,QAAQ,IAAI,OAAO,MAAO,MAAO,KAAK,IAAI,OAAO,SAAS,KAAK,KAAK,OAAO,MAAO,MAAO,KAAK,IAAI,MAAM;AAAA,EACvI;AAAA,EACA,SAAc,OAAK,KAAK,KAAK,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,MAAM,CAAC,IAAI;AAAA,EAC1F,aAAc,OAAK;AACf,QAAI,KAAK;AACT,YAAS,KAAK,QAAQ,IAAK,QAAQ,IAAI,OAAO,MAAO,MAAO,KAAK,IAAI,OAAO,SAAS,KAAK,KAAK,OAAO,MAAO,MAAO,KAAK,IAAI,MAAM;AAAA,EACvI;AAAA,EACA,WAAa,OAAK,IAAI,MAAM,KAAK,KAAK,IAAI;AAAA,EAC1C,SAAa,QAAM,KAAK,KAAK,MAAM,KAAK,KAAK,IAAI,MAAM;AAAA,EACvD,QAAa,OAAM,IAAI,KAAO,KAAK,IAAI,IAAM,IAAI,KAAO,MAAM,KAAK,MAAM,IAAI,MAAQ,IAAI,KAAO,MAAM,KAAK,MAAM,IAAI,MAAQ,MAAM,KAAK,MAAM,IAAI;AAAA,EAClJ,YAAa,OAAM,IAAI,KAAO,KAAK,IAAI,IAAM,IAAI,KAAM,KAAK,MAAM,KAAK,MAAM,IAAI,OAAQ,IAAI,KAAM,KAAK,MAAM,KAAK,MAAM,IAAI,OAAO,KAAK,MAAM,KAAK,MAAM,IAAI;AAAA,EAC9J,YAAa,QAAM,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI;AAAA,EACjG,UAAa,OAAK,KAAK,IAAI,GAAG,CAAC;AAAA,EAC/B,QAAa,OAAK,KAAK,IAAI,GAAG,IAAI;AACtC;AACA,eAAe,SAAS;;;AC1cxB,IAKI,EAAE,QAAQ,IAAW;AALzB,IAMI,EAAE,gBAAAI,gBAAe,IAAI,OAAO;AANhC,IAQI,oBAAqB;AAAA,EACjB,SAAa;AAAA,EACb,YAAa;AAAA,EACb,MAAa;AAAA,EACb,UAAa;AAAA,EACb,MAAa;AAAA,EACb,MAAa;AAAA,EACb,SAAa;AAAA,EACb,QAAa;AAAA,EACb,UAAa;AAAA,EACb,MAAa;AAAA,EACb,WAAa;AACjB;AApBJ,IAqBI,qBAAqB,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE;AAwT9C,IAAO,iBAAQ,YAAU,MAAM,gBAAgB,UAAU,MAAM;AAAA,EAAtC;AAAA;AACrB,2CAAkB;AAAA;AAAA,EAClB,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,WAAW,aAAa;AACpB,WAAO;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,MA2BH;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,OAAO,sBAAsB,KAAK,MAAM;AACpC,UACI,MAAM,KAAK,aAAa,kBAAkB,GAC1C,MAAM,IAAI;AACd,eAAW,aAAa,KAAK;AAEzB,UAAI,UAAU,YAAY,CAAC,IAAI,IAAI,SAAS,IAAI,IAAI,SAAS;AAAA,IACjE;AAAA,EACJ;AAAA;AAAA,EAEA,WAAW,eAAe;AACtB,WAAO;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,MA6FH,WAAY;AAAA,QACR,OAAQ;AAAA,QACR,SAAU;AAAA,UACN,MAAM,UAAU,cAAc;AAC1B,gBAAI,aAAa,MAAM;AACnB,kBAAI,CAAC,UAAU;AACX,uBAAO;AAAA,cACX;AACA,kBAAI,cAAc;AACd,2BAAW,WAAW,CAAC,QAAQ,IAAI,CAAC;AACpC,yBAAS,KAAK,QAAQ,YAAY,IAAI,UAAU,MAAM,EAAE,UAAU,YAAY;AAAA,cAClF;AAAA,YACJ;AACA,mBAAO;AAAA,UACX;AAAA,QACJ;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,mBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAsBpB,cAAe;AAAA,IACnB;AAAA,EACJ;AAAA,EACA,UAAU;AACN,SAAK,QAAQ,eAAe;AAC5B,UAAM,QAAQ;AAAA,EAClB;AAAA;AAAA;AAAA,EAGA,UAAU,WAAW,MAAM;AAEvB,QAAK,KAAK,sBAAuC,iCAAQ,WAAY;AAEjE,eAAS,QAAQ,OAAO,CAAC,GAAG,MAAM;AAClC,aAAO,OAAO;AAAA,IAClB;AACA,UAAM,UAAU,QAAQ,GAAG,IAAI;AAI/B,SAAK,2BAA2B;AAAA,EACpC;AAAA,EACA,6BAA6B;AAEzB,QAAI,KAAK,qBAAqB;AAC1B,YACI,KAAoB,MACpB,EAAE,cAAc,IAAI;AAGxB,SAAG,gBAAgB;AACnB,SAAG,YAAY,GAAG;AAClB,SAAG,sBAAsB;AACzB,SAAG,gBAAgB;AAAA,IACvB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY;AACR,SAAK,QAAQ,SAAS;AACtB,SAAK,mBAAmB,KAAK;AAC7B,UAAM,UAAU;AAAA,EACpB;AAAA,EACA,OAAO,WAAW,MAAM;AACpB,UAAM,WAAW,IAAI;AACrB,WAAO,UAAU,SAAS,UAAU;AACpC,WAAO,UAAU,WAAW,UAAU;AAAA,EAC1C;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,EA0CA,YAAY,QAAQ,SAAS,YAAY;AA9oB7C,QAAAC;AA+oBQ,QAAI,QAAQ,MAAM,GAAG;AACjB,eAAS,IAAI,GAAG,EAAE,OAAO,IAAI,QAAQ,IAAI,QAAQ,KAAK;AAClD,aAAK,YAAY,OAAO,CAAC,GAAG,OAAO;AAAA,MACvC;AACA;AAAA,IACJ;AACA,UACI,KAAmB,MACnB,mBAAmB,GAAG,MAAM,aAAa,kBAAkB;AAC/D,QAAI,OAAO,WAAW,UAAU;AAG5B,aAAO,GAAG,YAAY;AAAA,QAClB,CAAC,MAAM,GAAM;AAAA,QACb,YAAa,QAAQ,eAAe;AAAA,QACpC,SAAa;AAAA,MACjB,CAAC;AAAA,IACL,OACK;AAED,gBAAU,OAAO,UAAU,OAAO,YAAY,SAAY,OAAO,UAAU;AAC3E,iBAAW,OAAO,QAAQ;AAEtB,YAAI,CAAC,kBAAkB,GAAG,KAAK,OAAO,GAAG,KAAK,MAAM;AAChD,gBAEI,YAAkB,IAAI,YAAY,GAClC,kBAAkB,qDAAmB,YACrC,SAAkB,GAAG,mBAAmB,GAAG,iBAAiB,CAAC,IAE7D,QAAkB,YAAY,QAAQ,OAAO,GAAG,CAAC;AACrD,cAAI,iBAAiB;AACjB,kBAAM,EAAE,SAAS,oBAAoB,QAAQ,IAAI;AACjD,0BAAc,UAAU,SAAS,oBAAoB,OAAO;AAAA,UAChE;AACA,qBAAW,gBAAgB,OAAO;AAC9B,kBACI,UAAW,aAAa,WAAW,OAAO,SAC1C,WAAW;AAAA,cACP,IAAY,OAAO,iBAAiB,WAAW,aAAa,KAAK;AAAA,cACjE,SAAY,aAAa,YAAY,SAAY,aAAa,UAAU;AAAA,cACxE,MAAY,aAAa,QAAQ,OAAO;AAAA,cACxC,MAAY,aAAa,SAAS,SAAY,aAAa,OAAO,OAAO,SAAS,SAAY,OAAO,OAAO;AAAA,cAC5G,MAAY,aAAa,SAAS,SAAY,aAAa,OAAO,OAAO,SAAS,SAAY,OAAO,OAAO;AAAA,cAC5G,QAAY,aAAa,UAAU,OAAO;AAAA,cAC1C,UAAY,aAAa,YAAY,OAAO;AAAA,cAC5C,WAAY,OAAO;AAAA,cACnB,UAAY,QAAQ;AAAA,YACxB;AACJ,gBAAI,SAAS;AAET,oBACI,EAAE,KAAAC,KAAI,IAAI,SACVC,SAAUD,OAAM,QAAQ,QAAQ,SAChCE,QAAU,OAAO,QAAQ,KACzBC,MAAU,MAAM;AACZ,mBAAG,GAAG,WAAW,QAAQ;AAEzB,oBAAIH,QAAO,CAAC,SAAS,QAAQ;AACzB,qBAAG,SAASA,MAAK,OAAO;AAAA,gBAC5B;AAAA,cACJ;AACJ,kBAAI,GAAG,aAAa;AAChB,mBAAG,WAAW;AAAA,kBACV,IAAAG;AAAA,kBACA,MAAAD;AAAA,kBACA,mBAAoB;AAAA,kBACpB,OAAAD;AAAA,gBACJ,CAAC;AAAA,cACL,OACK;AACD,2BAAW,WAAWE,KAAIF,MAAK;AAAA,cACnC;AAAA,YACJ;AACA,gBAAI,YAAY,OAAO,SAAS,MAAM,OAAO,SAAS,IAAI,CAAC;AAC3D,gBAAI,UAAU,SAAS;AACnB,qBAAO,SAAS,IAAI,YAAY,UAAU,MAAM;AAAA,YACpD;AAEA,sBAAU;AAAA,cACN,YAAY,mBAAmB,UAAU,WAAW,oBAAoB,UAAU,MAAM;AAAA,cACxF;AAAA,cAAG;AAAA,YAAQ;AACf,gBAAI,CAAC,GAAG,SAAS,WAAW,UAAU,SAAS,GAAG;AAC9C,iBAAG,SAAS,SAAS;AAAA,YACzB;AAEA,aAAAF,MAAA,GAAG,qBAAH,gBAAAA,IAAA,SAAsB,WAAW;AAAA,UACrC;AAAA,QACJ;AAAA,MACJ;AACA,UAAI,OAAO,UAAU;AACjB,WAAG,SAAS,OAAO,QAAQ;AAAA,MAC/B;AAGA,UAAI,WAAW,YAAY,IAAI;AAC3B,WAAG,mBAAmB,QAAQ,OAAO;AAAA,MACzC;AACA,YACI,aAAa,OAAO,eAAe,OACnC,OAAa,OAAO,MACpB,UAAc,OAAO,WAAW,cAAc,OAAQ,MAAM;AAExD,YAAI,CAAC,GAAG,aAAa;AACjB,aAAG,eAAe,QAAQ,OAAO;AAAA,QACrC;AAAA,MACJ,IAAI;AACR,UAAI,SAAS;AACT,gBAAQ,UAAU;AAClB,gBAAQ,eAAe;AACvB,YAAI,SAAQ,mCAAS,gBAAe;AAChC,kBAAQ,cAAc,MAAM,OAAO;AAAA,QACvC;AACA,YAAI,OAAO,SAAS;AAEhB,aAAG,MAAM,SAAS,MAAM,OAAO,OAAO,IAAI,OAAO,QAAQ,QAAQ,OAAO,SAAS,IAAI;AAAA,QACzF;AACA,YAAI,YAAY;AACZ,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;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,EAwCA,GAAG,QAAQ,SAAS,YAAY;AAC5B,WAAO,KAAK,YAAY,QAAQ,SAAS,UAAU;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,QAAQ;AACR,WAAO,YAAY;AACnB,WAAO,KAAK,GAAG,MAAM;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,MAAM;AACR,SAAK,eAAe,GAAG,IAAI;AAAA,EAC/B;AAAA,EACA,wBAAwB,mBAAmB,sBAAsB;AAC7D,iEAAsB;AACtB,QAAI,mBAAmB;AACnB,wBAAkB,SAAS,KAAK,IAAI,iBAAiB;AAAA,IACzD;AAAA,EACJ;AAAA,EACA,IAAI,YAAY;AACZ,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,gBAAgB,WAAW;AAGvB,QAAI,KAAK,eAAe;AAEpB,WAAK,UAAU,mBAAmB;AAClC,UAAI,WAAW;AACX,aAAK,GAAG,WAAW,IAAI;AAAA,MAC3B;AAAA,IACJ,OAIK;AAQD,UAAI,MAAM,QAAQ,SAAS,GAAG;AAC1B,iBAAS,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,EAAE,OAAO,IAAI,WAAW,IAAI,QAAQ,IAAI,UAAU,EAAE,CAAC,GAAG;AACtF,cAAI,EAAE,aAAa,IAAI;AACnB,sBAAU,CAAC,IAAI,QAAQ,OAAO,EAAE,SAAU,KAAK,GAAG,CAAC;AAAA,UACvD;AAAA,QACJ;AAAA,MACJ,WACS,aAAa,EAAE,aAAa,YAAY;AAC7C,oBAAY,QAAQ,OAAO,EAAE,SAAU,KAAK,GAAG,SAAS;AAAA,MAC5D;AACA,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EACA,gBAAgB,WAAW,cAAc;AAErC,oBAAgB,KAAK,GAAG,YAAY;AACpC,iBAAa,KAAK,GAAG,SAAS;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAe,QAAQ,UAAU,OAAO,SAAS,YAAY;AACzD,UAAM,KAAK;AACX,QAAI,OAAO,WAAW,UAAU;AAC5B,aAAO,GAAG,eAAe,EAAE,CAAC,MAAM,GAAI,QAAQ,GAAG,UAAU;AAAA,IAC/D;AACA,WAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,WAAW,gBAAgB,MAAM;AAn4B1E,UAAAA;AAo4BY,UAAI,CAAC,kBAAkB,SAAS,KAAK,oBAAoB,MAAM;AAC3D,oBAAY,UAAU,YAAY;AAClC,cACI,EAAE,eAAe,IAAI,IACrB,QAAQ,GAAG,aAAa,WAAW,kBAAkB,OAAO;AAChE,YAAI,SAAS,GAAG;AACZ,cAAI,YAAY,eAAe,SAAS;AAExC,WAAAA,MAAA,GAAG,wBAAH,gBAAAA,IAAA,SAAyB,WAAW,UAAU,KAAK;AACnD,cAAI,UAAU,SAAS,GAAG;AACtB,gBAAI,UAAU,SAAS;AACnB,6BAAe,SAAS,IAAI,YAAY,UAAU,MAAM;AAAA,YAC5D;AAGA,sBAAU,OAAO,OAAO,CAAC;AAAA,UAC7B,OACK;AACD,mBAAO,eAAe,SAAS;AAC/B,gBAAI,CAAC,GAAG,WAAW,SAAS;AACxB,iBAAG,WAAW,SAAS;AAAA,YAC3B;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,QAAI,OAAO,WAAW,CAAC,OAAO,QAAQ,aAAa;AAC/C,SAAG,mBAAmB,MAAM;AAAA,IAChC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAa,WAAW,gBAAgB,gBAAgB;AA16B5D,QAAAA;AA26BQ,UACI,kBAAiBA,MAAA,KAAK,mBAAL,gBAAAA,IAAsB,YACvCI,MAAiB,eAAe,MAAM,gBACtC,UAAiB,eAAe,WAAW;AAC/C,QAAI,gBAAgB;AAChB,eAAS,eAAe,IAAI,GAAG,EAAE,OAAO,IAAI,gBAAgB,IAAI,QAAQ,KAAK;AACzE,wBAAgB,eAAe,CAAC;AAChC,YAAI,cAAc,OAAOA,OAAM,cAAc,YAAY,SAAS;AAC9D,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,WAAW;AA/7B3B,QAAAJ;AAg8BQ,WAAO,SAAQA,MAAA,KAAK,mBAAL,gBAAAA,IAAsB,uCAAW,cAAc;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,SAAS,SAAS,QAAQ,gBAAgB,MAAM;AAC5C,QAAI,CAAC,KAAK,iBAAiB;AACvB,WAAK,kBAAkB,CAAC;AAAA,IAC5B;AACA,UAAM,EAAE,gBAAgB,IAAI;AAC5B,YAAQ,IAAI;AAAA,MACR,eAAgB,CAAC,EAAE,OAAO,MAAM;AAC5B,YAAI,WAAW,SAAS;AACpB,gBAAM,UAAU,gBAAgB,OAAO,OAAK,EAAE,YAAY,OAAO;AACjE,kBAAQ,QAAQ,YAAU,YAAY,OAAO,iBAAiB,MAAM,CAAC;AAAA,QACzE;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,oBAAgB,KAAK,EAAE,SAAS,QAAQ,cAAc,CAAC;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA,EAIA,mBAAmB,mBAAmB,MAAM;AAn+BhD,QAAAA;AAo+BQ,UAAM,YAAY,KAAK;AACvB,QAAI,GAAG;AACP,eAAW,SAAS,WAAW;AAC3B,YAAM,SAAS,UAAU,KAAK;AAG9B,WAAK,IAAI,OAAO,QAAQ,MAAM,KAAgB;AAC1C,cAAM,MAAM,OAAO,CAAC;AACpB,YAAI,CAAC,IAAI,aAAa,CAAC,kBAAkB;AACrC,eAAK,eAAe,OAAO,GAAG;AAC9B,oBAAU,IAAI;AACd,WAAAA,MAAA,mCAAS,qBAAT,gBAAAA,IAAA,cAA4B;AAAA,QAChC;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,YAAY,QAAQ,YAAY,SAAS,IAAI;AACzC,UAAM,iBAAiB,EAAE,YAAa,MAAM,SAAU,KAAK;AAC3D,eAAW,QAAQ,eAAa;AAC5B,qBAAe,SAAS,IAAI,CAAC,UAAU,WAAW;AAC9C,eAAO,KAAK,QAAQ,SAAS,WAAW,OAAO,GAAG,MAAM;AAAA,MAC5D;AAAA,IACJ,CAAC;AACD,WAAO,OAAO,GAAG,cAAc;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW;AAAA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMZ,aAAa;AAAA,EAAC;AAAA,EACd,wBAAwB;AACpB,UAAM,EAAE,eAAe,QAAQ,cAAc,IAAI;AAIjD,aAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC3C,YAAM,EAAE,YAAY,OAAO,IAAI,cAAc,CAAC;AAC9C,UAAI,CAAC,WAAW,aAAa;AACzB,mBAAW,eAAe,QAAQ,MAAM;AAAA,MAC5C;AAAA,IACJ;AACA,kBAAc,KAAK,MAAM;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB,QAAQ,SAAS;AAChC,UACI,SAAiB,OAAO,WAAW,SAEnC,iBAAkB,eAAe,SAAU,cAAc;AAC7D,QAAI,kBAAkB,QAAQ;AAC1B,UAAI,EAAE,eAAe,IAAI;AACzB,UAAI,CAAC,gBAAgB;AACjB,eAAO,iBAAiB,iBAAiB,CAAC;AAAA,MAC9C;AACA,UAAI,CAAC,OAAO,gBAAgB;AACxB,eAAO,iBAAiB,OAAO,cAAc;AAG7C,eAAO,cAAc,IAAI,KAAK,sBAAsB,KAAK;AAAA,UACrD,eAAgB;AAAA,UAChB,eAAgB,OAAO;AAAA,UACvB;AAAA,QACJ,CAAC;AAAA,MACL;AACA,qBAAe,KAAK,EAAE,QAAQ,YAAa,KAAK,CAAC;AAAA,IACrD,OACK;AACD,aAAO,cAAc,IAAI,MAAM;AAC3B,aAAK,eAAe,MAAM;AAAA,MAC9B;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB,QAAQ;AACvB,UAAM,SAAS,OAAO;AAItB,QAAI,OAAO,kBAAkB,CAAC,OAAO,cAAc;AAC/C,kBAAY;AAAA,QACR,OAAO;AAAA,QACP,OAAO,eAAe,KAAK,CAAAK,cAAYA,UAAS,WAAW,UAAUA,UAAS,eAAe,IAAI;AAAA,MACrG;AACA,UAAI,CAAC,OAAO,eAAe,QAAQ;AAC/B,eAAO,eAAe,SAAS,cAAc,SAAS,IAAI,OAAO;AACjE,eAAO,iBAAiB;AAAA,MAC5B;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,WAAW,UAAU;AACtB,WAAO,KAAK,GAAG;AAAA,MACX,CAAC,SAAS,GAAI,MAAM,KAAK,SAAS,QAAQ;AAAA,MAC1C,MAAc;AAAA,IAClB,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,WAAW,UAAU,EAAE,UAAW,MAAM,UAAW,MAAM,MAAO,KAAK,GAAG;AAC1E,UAAM,KAAK;AACX,QAAI,YAAY,OAAO;AACnB,gBAAU,EAAE,UAAW,MAAM;AAAA,IACjC;AACA,UAAM,EAAE,KAAK,IAAI;AACjB,WAAO,IAAI,QAAQ,aAAW;AA7lCtC,UAAAL;AA+lCY,UAAI,QAAQ,cAAYA,MAAA,GAAG,eAAH,gBAAAA,IAAgB,aAAY;AAEhD,gBAAQ;AAER,YAAI,QAAQ,UAAU;AAClB,aAAG,SAAS,SAAS;AAAA,QACzB;AAAA,MACJ;AAEA,UAAI,MAAM;AACN,cAAMK,YAAW,GAAG,GAAG;AAAA,UACnB,CAAC,SAAS,GAAI,IAAI,WAAW;AAEzB,kBAAM,SAAS,OAAO,SAAS,aAAa,KAAK,GAAG,MAAM,IAAI,OAAO,KAAK,IAAI,EAAE,MAAM,SAAO;AACzF,qBAAO,OAAO,OAAO,CAAC,KAAK,OAAO,CAAC,EAAE,GAAG,MAAM,KAAK,GAAG;AAAA,YAC1D,CAAC;AACD,gBAAI,QAAQ;AAER,sBAAQ,GAAG,MAAM;AAEjB,kBAAI,QAAQ,UAAU;AAClB,mBAAG,SAAS,SAAS;AAAA,cACzB;AACA,cAAAA,UAAS;AAAA,YACb;AAAA,UACJ;AAAA,UACA,MAAO;AAAA;AAAA,QACX,CAAC;AAAA,MACL,OACK;AACD,WAAG,GAAG;AAAA,UACF,CAAC,SAAS,GAAI,IAAI,WAAW;AAEzB,oBAAQ,GAAG,MAAM;AAEjB,gBAAI,QAAQ,UAAU;AAClB,iBAAG,SAAS,SAAS;AAAA,YACzB;AAAA,UACJ;AAAA,UACA,MAAO;AAAA;AAAA,UACP,MAAO;AAAA;AAAA,QACX,CAAC;AAAA,MACL;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,SAAS,WAAW;AAChB,QAAI,KAAK,YAAY;AACjB,UAAI,WAAW;AACX,eAAO,KAAK,WAAW,SAAS;AAAA,MACpC,OACK;AACD,aAAK,aAAa,CAAC;AAAA,MACvB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,QAAQ,WAAW,OAAO;AArqC9B,QAAAL,KAAA;AAsqCQ,UACI,KAAO,MACP,OAAO,UAAU,YAAY,GAC7B;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAM;AACV,QAAI,aAAYA,MAAA,GAAG,mBAAH,gBAAAA,IAAoB,OAChC;AAEJ,QAAI,CAAC,GAAG,YAAY;AAChB,SAAG,aAAa,CAAC;AAAA,IACrB;AACA,OAAG,WAAW,SAAS,IAAI;AAC3B,QAAI,iBAAiB;AACjB,UAAI,gBAAgB,aAAa;AAC7B,wBAAgB,MAAM,KAAK,SAAS;AAAA,MACxC;AACA,aAAO;AAAA,IACX;AAGA,SAAI,QAAG,mBAAH,mBAAmB,UAAU;AAC7B,OAAC,YAAa,YAAY,UAAU,MAAM,IAAI,CAAC,GAAI,KAAK,GAAG,GAAG,eAAe,QAAQ;AAErF,gBAAU,KAAK,kBAAkB;AAAA,IACrC;AACA,QAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,iBAAiB;AACpD,aAAO;AAAA,IACX;AAEA,QAAI,OAAO;AACP,UAAI,EAAE,YAAY,QAAQ;AACtB,YAAI,OAAO,aAAa,KAAK,GAAG;AAC5B,gBAAM,SAAS;AAAA,QACnB,OACK;AACD,kBAAQ,OAAO,eAAe;AAAA,YAC1B,QAAS;AAAA,UACb,GAAG,KAAK;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ,OACK;AACD,cAAQ;AAAA,QACJ,QAAS;AAAA,MACb;AAAA,IACJ;AAEA,QAAI,MAAM,SAAS,MAAM;AAErB,UAAI,MAAM,gBAAgB,QAAQ;AAC9B,gBAAQ,eAAe,OAAO,QAAQ,EAAE,KAAM,MAAM,KAAK,CAAC;AAAA,MAC9D,OACK;AACD,cAAM,OAAO;AAAA,MACjB;AAAA,IACJ;AACA,UAAM,YAAY;AAElB,QAAI,EAAE,aAAa,YAAU,QAAG,iBAAH,mBAAkB,aAAY;AACvD,YAAM,UAAU,GAAG,aAAa,SAAS;AAAA,IAC7C;AACA,QAAI,iBAAiB;AACjB,YAAM,SAAS,OAAO,aAAa,WAAW,SAAS;AACvD,UAAI,UAAU,IAAI;AAEd,cAAM,SAAS,GAAG,MAAM,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI;AACnE,YAAI;AACJ,YAAI,QAAQ,UAAU,MAAM,GAAG;AAC3B,WAAC,oBAAoB,kBAAkB,CAAC,IAAI,KAAK,MAAM;AAAA,QAC3D,OACK;AACD,oBAAU,WAAW,SAAS;AAAA,QAClC;AAMA,YAAI,CAAC,GAAG,eAAeD,gBAAe,KAAK,IAAI,MAAM,KAAK,GAAC,QAAG,wBAAH,mBAAyB,UAAS;AACzF,gBAAM,UAAU,OAAO,eAAe,EAAE;AACxC,cAAI,UAAU,SAAS;AACnB,kBAAMO,UAAS,QAAQ,MAAM,EAAE,KAAK,IAAI,KAAK;AAC7C,gBAAI,QAAQ,UAAUA,OAAM,GAAG;AAC3B,eAAC,oBAAoB,kBAAkB,CAAC,IAAI,KAAKA,OAAM;AAAA,YAC3D,OACK;AACD,wBAAUA,YAAW,SAAS;AAAA,YAClC;AAEA,gBAAI,GAAG,aAAa;AAChB;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAEA,YAAI,SAAS;AACT,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AACA,QAAI;AACJ,QAAI,WAAW;AACX,UAAI,IAAI,GAAG,gBAAgB;AAG3B,gBAAU,UAAU;AAEpB,WAAK,GAAG,IAAI,UAAU,UAAU,CAAC,GAAG,eAAe,CAAC,eAAe,KAAK;AACpE,cAAM,WAAW,UAAU,CAAC;AAG5B,YAAI,QAAQ,SAAS,CAAC,SAAS,WAAW;AACtC;AAAA,QACJ;AACA,YAAI,SACA,UAAU,SAAS;AAGvB,YAAI,CAAC,WAAW,CAAC,QAAQ,aAAa;AAElC,mBAAS,SAAS;AAClB,cAAI,SAAS,MAAM;AACf,eAAG,eAAe,MAAM,QAAQ;AAAA,UACpC;AAEA,cAAI,OAAO,SAAS,OAAO,UAAU;AACjC,gBAAI,SAAS;AACT,wBAAU,QAAQ,SAAS,EAAE;AAAA,YACjC;AAEA,gBAAI,CAAC,SAAS;AACV,oBAAMA,UAAS,GAAG,gBAAgB,SAAS,EAAE;AAC7C,wBAAUA,QAAO;AACjB,wBAAUA,QAAO;AAAA,YACrB;AAAA,UACJ,OACK;AACD,sBAAU,SAAS;AAAA,UACvB;AAGA,cAAI,SAAS,QAAQ;AACjB,gBAAI,CAAC,SAAS,UAAU;AACpB,oBAAM,SAAS,OAAO,SAAS,MAAM;AACrC,kBAAI,OAAO,WAAW,YAAY,MAAM,MAAM,GAAG;AAC7C,sBAAM,IAAI,MAAM,mCAAmC,MAAM,uBAAuB;AAAA,cACpF;AACA,uBAAS,WAAW,eAAe,eAAe,SAAS,QAAQ,SAAS,SAAS,IAAI;AAAA,YAC7F;AACA,sBAAU,SAAS;AAAA,UACvB;AAGA,cAAI,SAAS,UAAU;AACnB,kBAAM,WAAW,OAAO,SAAS,QAAQ;AACzC,gBAAI,OAAO,aAAa,YAAY,MAAM,QAAQ,GAAG;AACjD,oBAAM,IAAI,MAAM,qCAAqC,QAAQ,uBAAuB;AAAA,YACxF;AACA,gBAAI,CAAC,SAAS,aAAa;AACvB,uBAAS,cAAc,eAAe,gBAAgB,SAAS,UAAU,SAAS,SAAS,IAAI;AAAA,YACnG;AACA,sBAAU,SAAS;AAAA,UACvB;AACA,gBAAM,SAAS,QAAQ,KAAK,WAAW,IAAI,GAAI,SAAS,QAAQ,CAAC,GAAI,KAAK;AAG1E,cAAI,QAAQ,OAAO;AACf,kBAAM;AAAA,UACV;AACA,cAAI,SAAS,aAAa,WAAW,OAAO;AACxC,4BAAgB;AAAA,UACpB;AACA,cAAI,QAAQ,UAAU,MAAM,GAAG;AAC3B,mBAAO,YAAY,SAAS;AAK5B,aAAC,oBAAoB,kBAAkB,CAAC,IAAI,KAAK,MAAM;AAAA,UAC3D;AAAA,QACJ;AAAA,MACJ;AACA,gBAAU,UAAU;AAEpB,UAAI,eAAe;AACf,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,uDAAiB,QAAQ,YAAU;AAC/B,UAAIH,QAAO;AACX,UAAI,OAAO,eAAe;AACtB,QAAAA,QAAO,aAAa,WAAWA,KAAI;AAAA,MACvC;AACA,UAAI,OAAO,QAAQ;AACf,QAAAA,QAAO,OAAO,SAASA;AAAA,MAC3B;AACA,UAAI,OAAO,QAAQ,QAAQA,OAAM,KAAK,MAAM,OAAO;AAC/C,eAAO;AAAA,MACX;AAAA,IACJ;AAKA,QAAI,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,MAAM,aAAa;AACpD,aAAO,GAAG,MAAM,QAAQ,WAAW,KAAK;AAAA,IAC5C;AAEA,sBAAkB,mDAAiB,OAAO,OAAK,QAAQ,SAAS,EAAE;AAGlE,QAAI,mDAAiB,QAAQ;AACzB,aAAO,IAAI,QAAQ,aAAW;AAC1B,gBAAQ,IAAI,eAAe,EAAE,KAAK,oBAAkB;AAChD,gBAAM,cAAc,CAAC,eAAe,KAAK,YAAU,WAAW,KAAK;AACnE,kBAAQ,WAAW;AAAA,QACvB,CAAC;AAAA,MACL,CAAC;AAAA,IACL;AACA,WAAO,QAAQ;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAc,QAAQ,OAAO;AACzB,UAAM,kBAAkB,KAAK,oBAAoB,KAAK,kBAAkB,EAAE,aAAc,OAAO,OAAQ,CAAC,GAAG,OAAQ,EAAE;AACrH,oBAAgB;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAe;AACX,UAAM,YAAY,KAAK;AACvB,QAAI,WAAW;AACX,UAAI,EAAE,UAAU,UAAU,GAAG;AACzB,aAAK,kBAAkB;AACvB,YAAI,UAAU,aAAa;AACvB,qBAAW,UAAU,UAAU,OAAO;AAClC,iBAAK,QAAQ,GAAG,MAAM;AAAA,UAC1B;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,CAAC,QAAQ,KAAK,eAAe;AAAA,EACxC;AAAA;AAEJ;;;AC/5CA,IAAqB,cAArB,MAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAY7B,OAAO,iBAAiB;AACpB,WAAO,IAAI,QAAQ,aAAW;AAC1B,4BAAsB,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,OAAO,MAAM,QAAQ;AACjB,WAAO,IAAI,QAAQ,aAAW;AAC1B,iBAAW,MAAM;AACb,gBAAQ;AAAA,MACZ,GAAG,MAAM;AAAA,IACb,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,OAAO,QAAQ;AACX,WAAO,QAAQ,QAAQ;AAAA,EAC3B;AACJ;AACA,YAAY,SAAS;;;AChBrB,IACI,mBAAmB;AADvB,IAEI,cAAmB,SAAS,aAAa;AACrC,QACI,SAAS,CAAC,GACV,SAAS,YAAY,MAAM,GAAG;AAGlC,aAAW,iBAAiB,QAAQ;AAChC,UACI,CAAC,OAAO,MAAM,KAAK,IAAI,iBAAiB,KAAK,aAAa,GAC1D,cAAuB,mBAAmB,IAAI,GAC9C,eAAuB,mBAAmB,KAAK;AACnD,QAAI,OAAO;AACP,UAAI,aAAa,OAAO,WAAW;AACnC,UAAI,YAAY;AACZ,YAAI,CAAC,MAAM,QAAQ,UAAU,GAAG;AAC5B,uBAAa,OAAO,WAAW,IAAI,CAAC,UAAU;AAAA,QAClD;AACA,mBAAW,KAAK,YAAY;AAAA,MAChC,OACK;AACD,eAAO,WAAW,IAAI;AAAA,MAC1B;AAAA,IACJ;AAAA,EACJ;AACA,SAAO;AACX;AAsBJ,IAAqB,cAArB,MAAqB,YAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyB5B,OAAO,IAAI,KAAK,SAAS;AACrB,WAAO,KAAK,MAAM,KAAK,OAAO;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,KAAK,KAAK,SAAS,UAAU,CAAC,GAAG;AACpC,QAAI,EAAE,mBAAmB,aAAa,EAAE,OAAO,YAAY,WAAW;AAClE,gBAAU,KAAK,UAAU,OAAO;AAChC,cAAQ,UAAU,QAAQ,WAAW,CAAC;AACtC,cAAQ,QAAQ,cAAc,IAAI,QAAQ,QAAQ,cAAc,KAAK;AAAA,IACzE;AACA,WAAO,KAAK,MAAM,KAAK,OAAO,OAAO;AAAA,MACjC,QAAS;AAAA,MACT,MAAS;AAAA,IACb,GAAG,OAAO,CAAC;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,MAAM,KAAK,SAAS;AACvB,QAAI;AAEJ,cAAU,QAAQ,MAAM,CAAC,GAAG,YAAW,uBAAuB,OAAO;AAGrE,QAAI,OAAO,oBAAoB,aAAa;AACxC,mBAAa,QAAQ,kBAAkB,IAAI,gBAAgB;AAC3D,cAAQ,SAAS,WAAW;AAAA,IAChC;AACA,QAAI,EAAE,iBAAiB,UAAU;AAC7B,cAAQ,cAAc;AAAA,IAC1B;AACA,QAAI,QAAQ,aAAa;AACrB,YAAM,SAAS,OAAO,QAAQ,QAAQ,WAAW;AACjD,UAAI,OAAO,QAAQ;AACf,YAAI,cAAc;AAElB,YAAI,QAAQ,WAAW,QAAQ,yBAAyB,MAAM;AAC1D,gBAAM,cAAc,IAAI,QAAQ,QAAQ,OAAO,EAAE,IAAI,cAAc;AACnE,cAAI;AACJ,kBAAQ,aAAa;AAAA,YACjB,KAAK;AACD,0BAAY;AACZ;AAAA,YACJ,KAAK;AACD,0BAAY;AACZ;AAAA,UACR;AAEA,cAAI,WAAW;AACX,kBAAM,OAAO,QAAQ,SAAS,QAAQ,OAAO,IAAI,UAAU;AAE3D,gBAAI,gBAAgB,WAAW;AAC3B,qBAAO,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM,KAAK,IAAI,KAAK,KAAK,CAAC;AAErD,4BAAc;AAAA,YAClB;AAAA,UACJ;AAAA,QACJ;AAEA,YAAI,CAAC,aAAa;AACd,kBAAQ,IAAI,SAAS,GAAG,IAAI,MAAM,OAAO,OAAO;AAAA,YAAI,CAAC,CAAC,OAAO,KAAK,MAC9D,GAAG,KAAK,IAAI,mBAAmB,KAAK,CAAC;AAAA,UACzC,EAAE,KAAK,GAAG;AAAA,QACd;AAAA,MACJ;AAAA,IACJ;AAEA,UAAM,UAAU,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC7C,YAAM,KAAK,OAAO,EAAE;AAAA,QAChB,cAAY;AACR,cAAI,QAAQ,WAAW;AACnB,qBAAS,KAAK,EAAE,KAAK,UAAQ;AACzB,uBAAS,aAAa;AACtB,sBAAQ,QAAQ;AAAA,YACpB,CAAC,EAAE,MAAM,WAAS;AACd,uBAAS,aAAa;AACtB,uBAAS,QAAQ;AACjB,qBAAO,QAAQ;AAAA,YACnB,CAAC;AAAA,UACL,OACK;AACD,oBAAQ,QAAQ;AAAA,UACpB;AAAA,QACJ;AAAA,MACJ,EAAE,MAAM,WAAS;AACb,cAAM,QAAQ,QAAQ;AACtB,eAAO,KAAK;AAAA,MAChB,CAAC;AAAA,IACL,CAAC;AACD,YAAQ,QAAQ,IAAI,MAAM,EAAE;AAC5B,YAAQ,QAAQ,WAAW;AACvB,+CAAY;AAAA,IAChB;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,OAAO,QAAQ,KAAK,UAAU;AAC1B,UAAM,KAAK;AACX,KAAC,GAAG,gBAAgB,GAAG,cAAc,CAAC,IAAI,GAAG,IAAI;AAEjD,QAAI,CAAC,YAAW,eAAe;AAC3B,kBAAW,gBAAgB,YAAW;AACtC,kBAAW,QAAQ,GAAG,cAAc,KAAK,EAAE;AAAA,IAC/C;AAAA,EACJ;AAAA,EACA,aAAa,cAAc,KAAK,SAAS;AACrC,UAAM,eAAe,IAAI,MAAM,GAAG;AAClC,QAAI,SAAa,KAAK,YAAY,aAAa,CAAC,CAAC,GAC7C,aAAa;AACjB,QAAI,QAAQ;AACR,UAAI,OAAO,WAAW,YAAY;AAC9B,iBAAS,MAAM,OAAO,aAAa,CAAC,GAAG,aAAa,CAAC,KAAK,YAAY,aAAa,CAAC,CAAC,GAAG,OAAO;AAAA,MACnG;AACA,UAAI;AACA,sBAAa,mCAAS,cAAa,KAAK,MAAM,OAAO,YAAY;AAAA,MACrE,SACO,OAAO;AACV,qBAAe;AACf,eAAO,QAAQ;AAAA,MACnB;AACA,eAAS,OAAO,OAAO;AAAA,QACnB,QAAa;AAAA,QACb,IAAa;AAAA,QACb,SAAa,IAAI,QAAQ;AAAA,QACzB,YAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA,MAAa,MAAM,IAAI,QAAQ,CAAC,YAAY;AACxC,kBAAQ,OAAO,YAAY;AAAA,QAC/B,CAAC;AAAA,QACD,MAAO,MAAM,IAAI,QAAQ,CAAC,YAAY;AAClC,kBAAQ,UAAU;AAAA,QACtB,CAAC;AAAA,MACL,GAAG,MAAM;AACT,aAAO,IAAI,QAAQ,SAAS,SAAS,QAAQ;AACzC,YAAI,OAAO,aAAa;AACpB,kBAAQ,MAAM;AAAA,QAClB,OACK;AACD,qBAAW,WAAW;AAClB,oBAAQ,MAAM;AAAA,UAClB,GAAI,WAAW,SAAS,OAAO,QAAQ,GAAI;AAAA,QAC/C;AAAA,MACJ,CAAC;AAAA,IACL,OACK;AACD,aAAO,YAAW,cAAc,KAAK,OAAO;AAAA,IAChD;AAAA,EACJ;AACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlLI,cAjBiB,aAiBV,yBAAwB,CAAC;AAjBpC,IAAqB,aAArB;AAoMA,WAAW,SAAS;;;ACnOpB,IAAM,SAAS,OAAO,SAAS,cACzB,OACA,OAAO,eAAe,cAClB,aACA;AA6BV,IAAqB,gBAArB,MAAqB,cAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS9B,OAAO,gBAAgB,SAAS;AAC5B,UAAM,SAAS,CAAC;AAChB,YAAQ,QAAQ,CAAAI,YAAU;AACtB,aAAO,KAAKA,OAAM,EAAE,QAAQ,SAAO;AAC/B,YAAI,OAAOA,QAAO,GAAG,MAAM,UAAU;AACjC,iBAAO,GAAG,IAAI,EAAE,GAAG,OAAO,GAAG,GAAG,GAAGA,QAAO,GAAG,EAAE;AAAA,QACnD,OACK;AACD,iBAAO,GAAG,IAAIA,QAAO,GAAG;AAAA,QAC5B;AAAA,MACJ,CAAC;AAAA,IACL,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,WAAWA,SAAQ,QAAQ;AAC9B,UAAM,SAAS,CAAC,KAAK,WAAW;AAC5B,UAAIA,QAAO,GAAG,GAAG;AACb,YAAI,QAAQ;AACR,cAAIA,QAAO,GAAG,EAAE,MAAM,GAAG;AACrB,mBAAOA,QAAO,GAAG,EAAE,MAAM;AAAA,UAC7B;AAAA,QACJ,OACK;AACD,iBAAOA,QAAO,GAAG;AAAA,QACrB;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,KAAK,MAAM,EAAE,QAAQ,SAAO;AAC/B,UAAI,OAAO,KAAK,OAAO,GAAG,CAAC,EAAE,SAAS,GAAG;AACrC,eAAO,KAAK,OAAO,GAAG,CAAC,EAAE,QAAQ,YAAU,OAAO,KAAK,MAAM,CAAC;AAAA,MAClE,OACK;AACD,eAAO,GAAG;AAAA,MACd;AAAA,IACJ,CAAC;AAAA,EACL;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,EAgCA,OAAO,gBAAgB,cAAc,QAAQ;AACzC,QAAI,CAAC,cAAc;AACf,YAAM,IAAI,MAAM,2CAA2C;AAAA,IAC/D;AACA,QAAI,OAAO,iBAAiB,UAAU;AAClC,UAAI,CAAC,QAAQ;AACT,cAAM,IAAI,MAAM,qCAAqC;AAAA,MACzD;AACA,UAAI,OAAO,QAAQ;AAEf,eAAO,OAAO,gBAAgB,OAAO;AAAA,MACzC,OACK;AACD,eAAO,aAAa;AAAA,MACxB;AAAA,IACJ,OACK;AACD,eAAS;AAAA,IACb;AACA,QAAIA,UAAS,CAAC;AACd,QAAI,OAAO,QAAQ,OAAO,QAAQ;AAE9B,MAAAA,UAAS,OAAO,OAAO;AAAA,QACnB,YAAa,OAAO;AAAA,MACxB,GAAG,OAAO,MAAM;AAChB,aAAO,SAASA,QAAO,aAAa,OAAO;AAC3C,aAAO,SAASA,QAAO,aAAa,OAAO;AAC3C,aAAO,SAASA,QAAO,aAAa,OAAO;AAAA,IAC/C,OACK;AACD,UAAI,CAAC,OAAO,YAAY;AACpB,cAAM,IAAI,MAAM,uDAAuD;AAAA,MAC3E;AAEA,MAAAA,UAAS,OAAO,OAAO,CAAC,GAAG,MAAM;AAAA,IACrC;AAEA,eAAW,OAAO,CAAC,QAAQ,QAAQ,QAAQ,MAAM,GAAG;AAChD,UAAIA,QAAO,GAAG,GAAG;AACb,eAAOA,QAAO,GAAG;AAAA,MACrB;AAAA,IACJ;AACA,QAAI,CAACA,QAAO,YAAY;AACpB,YAAM,IAAI,MAAM,8BAA8B;AAAA,IAClD;AACA,WAAOA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,WAAW,UAAU;AACjB,WAAO,OAAO,QAAQ,WAAW,CAAC;AAAA,EACtC;AAAA,EACA,WAAW,QAAQ,SAAS;AACxB,WAAO,QAAQ,UAAU;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,aAAa;AACpB,WAAO,OAAO,QAAQ,UAAU;AAAA,EACpC;AAAA,EACA,WAAW,WAAW,YAAY;AAC9B,WAAO,QAAQ,SAAS,cAAc,cAAa;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,WAAW,SAAS;AAChB,WAAO,cAAa,cAAc,KAAK,QAAQ,cAAa,UAAU,KAAK,KAAK,QAAQ,MAAM,OAAO,OAAO,KAAK,OAAO,EAAE,CAAC,KAAK,EAAE,YAAa,IAAI,YAAa,IAAI,aAAc,GAAG;AAAA,EACzL;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,EAiDA,OAAO,cAAc,cAAc,QAAQ;AACvC,UACI,EAAE,QAAQ,IAAO,OAAO,SACxBA,UAAiB,cAAa,gBAAgB,cAAc,MAAM,GAClE,EAAE,WAAW,IAAIA;AACrB,QAAI,CAAC,QAAQ,UAAU,KAAK,WAAW,MAAM;AACzC,cAAQ,UAAU,IAAIA;AAAA,IAC1B,OACK;AACD,cAAQ,UAAU,IAAI,KAAK,aAAa,QAAQ,UAAU,KAAK,CAAC,GAAGA,WAAU,CAAC,CAAC;AAAA,IACnF;AACA,WAAO,QAAQ,UAAU;AAAA,EAC7B;AACJ;AAzOI,cADiB,eACV,4BAA2B;AADtC,IAAqB,eAArB;AA2OA,OAAO,UAAU,OAAO,WAAW,CAAC;AACpC,OAAO,QAAQ,UAAU,OAAO,QAAQ,WAAW,CAAC;AACpD,aAAa,SAAS;;;AC/TtB,IAAM,gBAAN,cAA4B,eAAO,IAAI,EAAE;AAAA,EACrC,WAAW,gBAAgB;AACvB,WAAO;AAAA;AAAA,MAEH,sBAAuB,cAAc;AAAA,IACzC;AAAA,EACJ;AAAA,EACA,aAAa,MAAM;AAjBvB,QAAAC;AAkBQ,UAAM,KAAK;AACX,UAAM,UAAU,GAAG,IAAI;AACvB,QAAI,cAAc,cAAc;AAE5B,YAAM,YAAY,SAAS,cAAc,6BAA6B;AACtE,UAAI,WAAW;AACX,WAAG,YAAY,UAAU,QAAQ,aAAa;AAAA,MAClD,YACSA,MAAA,GAAG,WAAH,gBAAAA,IAAW,YAAY;AAC5B,WAAG,YAAY,GAAG,OAAO,UAAU;AAAA,MACvC;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,UAAU;AACV,WAAO,aAAa;AAAA,EACxB;AAAA,EACA,IAAI,QAAQ,SAAS;AACjB,iBAAa,UAAU;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,OAAO,cAAc;AACrB,SAAK,YAAY,YAAY;AAAA,EACjC;AAAA,EACA,IAAI,SAAS;AACT,WAAO,aAAa;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,eAAe,cAAc,QAAQ;AACjC,kBAAc,UAAU,QAAQ,SAAS,iFAAiF;AAC1H,iBAAa,cAAc,cAAc,MAAM;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,aAAa,MAAM,QAAQ;AACvB,kBAAc,UAAU,QAAQ,SAAS,8EAA8E;AACvH,UAAMC,UAAS,aAAa,cAAc,MAAM,MAAM;AACtD,WAAO,KAAK,YAAYA,SAAQ,IAAI;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,YAAY,cAAc,QAAQ,cAAc,OAAO;AACnD,UAAM,KAAK;AACX,QAAI;AACJ,QAAI,OAAO,iBAAiB,UAAU;AAClC,UAAI,OAAO,WAAW,UAAU;AAC5B,uBAAe,GAAG,QAAQ,YAAY;AACtC,YAAI,CAAC,cAAc;AACf,cAAI,aAAa;AACb,mBAAO;AAAA,UACX;AACA,gBAAM,IAAI,MAAM,WAAW,YAAY,gFAAgF;AAAA,QAC3H;AAAA,MACJ,OACK;AACD,uBAAe,aAAa,cAAc,cAAc,MAAM;AAAA,MAClE;AAAA,IACJ,OACK;AACD,qBAAe,aAAa,cAAc,YAAY;AAAA,IAC1D;AACA,QAAI,GAAG,OAAO,cAAc,GAAG,OAAO,eAAe,aAAa,cAAc,WAAW,MAAM;AAE7F,aAAO,GAAG;AAAA,IACd;AAEA,iBAAa,aAAa,aAAa;AACvC,UAAM,qBAAqB,MAAM;AAQ7B,SAAG,QAAQ,UAAU,YAAY;AAAA,IACrC;AACA,QAAI,aAAa,YAAY;AACzB,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACpC,WAAG,WAAW,aAAa,UAAU,EAAE,KAAK,cAAY;AACpD,mBAAS,KAAK,EAAE,KAAK,UAAQ;AACzB,kBAAM,cAAc,IAAI,SAAS,IAAI;AACrC,wBAAY;AACZ,gBAAI,cAAc,cAAc;AAC5B,6BAAe,GAAG,QAAQ,aAAa,UAAU;AAEjD,kBAAI,cAAc;AACd,uBAAO,aAAa;AAAA,cACxB;AAAA,YACJ;AACA,+BAAmB;AACnB,oBAAQ,YAAY;AAAA,UACxB,CAAC;AAAA,QACL,CAAC,EAAE,MAAM,cAAY,OAAO,QAAQ,CAAC;AAAA,MACzC,CAAC;AAAA,IACL;AACA,uBAAmB;AACnB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,MAAM;AACb,WAAO,WAAW,IAAI,IAAI;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,qBAAqB,OAAO;AAC5B,SAAK,wBAAwB;AAAA,EACjC;AAAA,EACA,IAAI,uBAAuB;AACvB,WAAO,KAAK;AAAA,EAChB;AACJ;AACA,IAAM,yBAAyB,IAAI,cAAc;AA0CjD,IAAO,wBAAQ;;;ACjNf,IACI,cAAkB,OAAO,eAAe,MAAM;AADlD,IAEI,WAAkB;AAFtB,IAGI,kBAAkB;AAHtB,IAII,eAAkB;AAJtB,IAKIC,UAAkB,CAAC,QAAQ,IAAI,QAAQ,aAAa,QAAQ;AALhE,IAMI,WAAkB,CAAC,QAAQ,IAAI,QAAQ,iBAAiB,MAAM;AANlE,IAOIC,eAAkB,OAAO,OAAO,uBAAO,OAAO,IAAI,CAAC;AAYvD,IAAO,sBAAQ,YAAU,MAAM,qBAAqB,UAAU,MAAM;AAAA,EAChE,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EACA,WAAW,eAAe;AACtB,WAAO;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,MAiDH,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQd,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAwBd,uBAAwB;AAAA,QACpB,OAAQ,CAAC;AAAA,QACT,SAAU;AAAA,UACN,OAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,OAAO,QAAQ,KAAK;AAxHxB,QAAAC,KAAA;AAyHQ,WAAO,OAAO,QAAQ,WAAW,MAAM,QAAQ,cAAc,WAAW,IAAI,UAAU,IAAI,UAAQA,MAAA,IAAI,cAAJ,gBAAAA,IAAe,aAAU,SAAI,cAAJ,mBAAe;AAAA,EAC9I;AAAA,EACA,OAAO,kBAAkB,MAAM;AAC3B,UAAM,UAAU,CAAC;AACjB,QAAI;AAEJ,QAAI,6BAAM,SAAS,OAAO;AAEtB,aAAOF,QAAO,IAAI;AAClB,sBAAgB,YAAY;AAC5B,cAAQ,IAAI,gBAAgB,KAAK,IAAI,MAAM,MAAM;AAC7C,qBAAa,YAAY;AAEzB,cAAM,aAAa,aAAa,KAAK,EAAE,CAAC,CAAC;AACzC,gBAAQ,KAAK;AAAA,UACT,OAAc,SAAS,EAAE,CAAC,CAAC;AAAA,UAC3B,WAAc,SAAS,WAAW,CAAC,CAAC;AAAA,UACpC,aAAc,WAAW,CAAC;AAAA,QAC9B,CAAC;AAAA,MACL;AAAA,IACJ;AACA,WAAO,QAAQ,SAAS,IAClB,UACA,CAAC;AAAA,MACC,OAAc;AAAA,MACd,WAAc;AAAA,MACd,aAAc;AAAA,IAClB,CAAC;AAAA,EACT;AAAA,EACA,UAAU,SAAS,CAAC,MAAM,MAAM;AAE5B,UAAM,UAAU,QAAQ,GAAG,IAAI;AAC/B,0BAAc,IAAI,EAAE,QAAS,sBAAsB,SAAU,KAAK,CAAC;AACnE,SAAK,mBAAmB;AAAA,EAC5B;AAAA,EACA,IAAI,cAAc;AACd,WAAO,KAAK,gBAAgB;AAAA,EAChC;AAAA,EACA,iBAAiB,UAAU;AA/J/B,QAAAE,KAAA;AAgKQ,UACI,KAAe,MACf,eAAe,QAAQ,QAAQ,IAAI,QAAQ,GAE3C,cAAeA,MAAA,GAAG,MAAM,QAAQ,QAAQ,MAAzB,gBAAAA,IAA4B,gBAAa,cAAG,aAAH,mBAAc,cAAd,mBAAyB;AACrF,QAAI;AAEJ,QAAI,WAAW;AACX,uBAAiB,YAAY,SAAS,WAAW,IAAI,GAAG,eAAe,EAAE;AAEzE,UAAI,kBAAkB,EAAE,aAAa,GAAG,iBAAiBD,gBAAe;AACpE,gBAAQ,QAAQ,GAAG,WAAW,GAAG,OAAO,IAAI,UAAU,cAAc;AAAA,MACxE;AAAA,IACJ,WACS,OAAO,iBAAiB,UAAU;AACvC,SAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAC5C,uBAAiB,QAAQ,QAAQ,GAAG,iBAAiB,QAAQ;AAE7D,UAAI,mBAAmB,QAAW;AAC9B,gBAAQ,QAAQ,GAAG,iBAAiB,UAAU,YAAY;AAC1D,yBAAiB;AAAA,MACrB;AAEA,UAAI,gBAAgB;AAChB,gBAAQ,QAAQ,IAAI,UAAU,iBAAiB,GAAG,UAAU,gBAAgB,EAAE,CAAC;AAAA,MACnF;AAAA,IACJ;AACA,WAAO,kBAAkB;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,qBAAqB;AAtMzB,QAAAC,KAAA;AAuMQ,QAAI,KAAK,gBAAgB,OAAO;AAC5B,OAAAA,MAAA,KAAK,0BAAL,gBAAAA,IAA4B,QAAQ,KAAK,kBAAkB;AAC3D,iBAAK,YAAL,8BAAe;AAAA,IACnB;AAAA,EACJ;AAAA,EACA,OAAO,eAAe,MAAM,cAAc,WAAW;AACjD,UAAMC,UAAS,sBAAc;AAC7B,QAAI,SAAS,MACT,SACA;AACJ,QAAIA,SAAQ;AAER,iBAAW,EAAE,OAAO,WAAW,YAAY,KAAK,KAAK,kBAAkB,IAAI,GAAG;AAC1E,cAAM,YAAY,CAACC,aAAY;AApN/C,cAAAF;AAqNoB,gBAAM,eAAcA,MAAAC,QAAOC,QAAO,MAAd,gBAAAF,IAAkB;AACtC,cAAI,aAAa;AACb,gBAAI,OAAO,gBAAgB,YAAY;AACnC,uBAAS,gBAAgB,OAAO,YAAY,YAAY,IAAI;AAAA,YAChE,WACS,OAAO,gBAAgB,YAAY,SAAS,OAAO;AACxD,uBAAS;AAAA,YACb,OAEK;AACD,wBAAU,UAAU,MAAM,QAAQ,OAAO,WAAW;AAAA,YACxD;AAEA,gBAAI,OAAO,gBAAgB,YAAY,YAAY,SAAS,IAAI,GAAG;AAC/D,uBAAS,KAAK,eAAe,aAAa,cAAc,SAAS;AAAA,YACrE;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AAKA,YAAIG,WAAU;AACd,aAAK,MAAM,WAAW,QAAQ,UAAU,YAAY,QAAQ,GAAG,IAAI,MAAM,OAAO,eAAe,GAAG,GAAG;AACjG,cAAKA,WAAU,UAAU,OAAO,GAAI;AAChC;AAAA,UACJ,WACS,OAAO,QAAQ,UAAU;AAC9B;AAAA,UACJ;AAAA,QACJ;AACA,YAAI,CAACA,YAAW,aAAa;AACzB,oBAAU,WAAW;AAAA,QACzB;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,SAAS,MAAM,eAAe,WAAc,eAAe;AAG9D,SAAI,+CAAe,YAAW,GAAG;AAC7B,sBAAgB,CAAC,IAAI;AAAA,IACzB;AACA,QAAI,cAAc;AAClB,kBAAc,KAAK,SAAO;AACtB,oBAAc,YAAY,eAAe,MAAM,cAAc,GAAG;AAChE,aAAO,eAAe;AAAA,IAC1B,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,OAAO,EAAE,MAAM,eAAe,WAAc,eAAe;AAGvD,SAAI,+CAAe,YAAW,GAAG;AAC7B,sBAAgB,CAAC,IAAI;AAAA,IACzB;AACA,UAAM,cAAc,KAAK,SAAS,MAAM,cAAc,GAAG,aAAa;AAEtE,QACI,eAAe,QACf,sBAAc,wBACd,KAAK,SAAS,IAAI,GACpB;AACE,YAAM,IAAI,MAAM,kCAAkC,IAAI,SAAS,cAAc,IAAI,SAAO,YAAY,QAAQ,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,sBAAc,OAAO,aAAa,YAAY,sBAAc,OAAO,UAAU,KAAK,EAAE,EAAE;AAAA,IAC5N;AACA,WAAO,oCAAe;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,EAAE,MAAM,cAAc;AAClB,UAAM,EAAE,aAAa,YAAY,IAAI;AAGrC,QAAI,eAAe,YAAY,QAAQ,WAAW,MAAM,YAAY,QAAQ,WAAW,GAAG;AACtF,aAAO,YAAY,EAAE,MAAM,cAAc,aAAa,WAAW;AAAA,IACrE,OACK;AACD,aAAO,YAAY,EAAE,MAAM,cAAc,WAAW;AAAA,IACxD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,OAAO,UAAU,MAAM,eAAe,WAAc,eAAe;AAC/D,UAAM,cAAc,sBAAc;AAClC,0BAAc,uBAAuB,eAAe,SAAS,KAAK,IAAI;AAGtE,SAAI,+CAAe,YAAW,GAAG;AAC7B,sBAAgB,CAAC,IAAI;AAAA,IACzB;AACA,UAAM,SAAS,YAAY,EAAE,MAAM,cAAc,GAAG,aAAa;AACjE,0BAAc,uBAAuB;AACrC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,UAAU,MAAM,eAAe,MAAM,eAAe,OAAO;AACvD,UAAM,cAAc,sBAAc;AAElC,0BAAc,uBAAuB,eAAe,SAAS,KAAK,IAAI,KAAK,CAAC;AAC5E,UAAM,SAAS,KAAK,EAAE,MAAM,YAAY;AACxC,0BAAc,uBAAuB;AACrC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,gBAAgB;AAChB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,eAAe;AACf,WAAO;AAAA,EACX;AACJ;;;AC7YA,IAAM,SAAS;AAAA,EACX,YAAa;AAAA,EACb,YAAa;AAAA,EACb,YAAa;AAAA,EACb,QAAS;AAAA,IACL,KAAS;AAAA,IACT,IAAS;AAAA,IACT,QAAS;AAAA,IACT,IAAS;AAAA,IACT,MAAS;AAAA,IACT,MAAS;AAAA,EACb;AAAA,EACA,aAAc;AAAA,IACV,SAAU;AAAA,EACd;AAAA,EACA,OAAQ;AAAA,IACJ,WAAqB;AAAA,IACrB,oBAAqB;AAAA,IACrB,aAAqB,WAAS,OAAO,KAAK;AAAA,EAC9C;AAAA,EACA,YAAa;AAAA,IACT,MAAO;AAAA,EACX;AAAA,EACA,OAAQ;AAAA,IACJ,UAAwB;AAAA,IACxB,iBAAwB;AAAA,IACxB,eAAwB,WAAS,uCAAuC,MAAM,GAAG;AAAA,IACjF,gBAAwB,WAAS,0CAA0C,MAAM,GAAG;AAAA,IACpF,cAAwB;AAAA,IACxB,SAAwB;AAAA,IACxB,UAAwB;AAAA,IACxB,cAAwB;AAAA,IACxB,cAAwB;AAAA,IACxB,cAAwB;AAAA,IACxB,uBAAwB;AAAA,IACxB,uBAAwB;AAAA,IACxB,eAAwB;AAAA,IACxB,gBAAwB;AAAA,EAC5B;AAAA,EACA,WAAY;AAAA,IACR,aAAc;AAAA,EAClB;AAAA,EACA,YAAa;AAAA,IACT,cAAgB;AAAA,IAChB,eAAgB;AAAA,IAChB,eAAgB;AAAA,IAChB,cAAgB;AAAA,EACpB;AAAA,EACA,cAAe;AAAA,IACX,QAAW;AAAA,IACX,UAAW;AAAA,EACf;AAAA,EACA,eAAgB;AAAA,IACZ,aAAc;AAAA,EAClB;AAAA,EACA,WAAY;AAAA,IACR,aAAc;AAAA,EAClB;AAAA,EACA,YAAa;AAAA,IACT,MAAS;AAAA,IACT,QAAS;AAAA,IACT,QAAS;AAAA,EACb;AAAA,EACA,MAAO;AAAA,IACH,SAAY;AAAA,IACZ,WAAY;AAAA,EAChB;AAAA,EACA,UAAW;AAAA,IACP,UAAW;AAAA,IACX,UAAW;AAAA,EACf;AAAA,EACA,eAAgB;AAAA,IACZ,WAAoB;AAAA,IACpB,UAAoB;AAAA,IACpB,MAAoB;AAAA,IACpB,UAAoB;AAAA,IACpB,UAAoB;AAAA,IACpB,QAAoB;AAAA,IACpB,WAAoB;AAAA,IACpB,mBAAoB,UAAQ,MAAM,KAAK,QAAQ;AAAA,IAC/C,iBAAoB,UAAQ,sBAAsB,KAAK,KAAK,MAAM,KAAK,GAAG,OAAO,KAAK,QAAQ;AAAA,EAClG;AAAA,EACA,gBAAiB;AAAA,IACb,UAAW;AAAA,IACX,QAAW;AAAA,EACf;AAAA,EACA,OAAQ;AAAA,IACJ,OAAQ;AAAA,EACZ;AAAA,EACA,UAAW;AAAA,IACP,MAAiB;AAAA,IACjB,MAAiB;AAAA,IACjB,gBAAiB;AAAA,IACjB,gBAAiB;AAAA,IACjB,WAAiB;AAAA,EACrB;AAAA,EACA,mBAAoB;AAAA,IAChB,QAAyB;AAAA,IACzB,cAAyB;AAAA,IACzB,SAAyB;AAAA,IACzB,YAAyB;AAAA,IACzB,UAAyB;AAAA,IACzB,gBAAyB;AAAA,IACzB,YAAyB;AAAA,IACzB,UAAyB;AAAA,IACzB,SAAyB;AAAA,IACzB,YAAyB;AAAA,IACzB,eAAyB;AAAA,IACzB,YAAyB;AAAA,IACzB,wBAAyB;AAAA,IACzB,qBAAyB;AAAA,IACzB,WAAyB;AAAA,IACzB,cAAyB;AAAA,IACzB,UAAyB;AAAA,IACzB,SAAyB;AAAA,IACzB,SAAyB;AAAA,IACzB,YAAyB;AAAA,IACzB,aAAyB;AAAA,IACzB,YAAyB;AAAA,IACzB,YAAyB;AAAA,IACzB,YAAyB;AAAA,IACzB,aAAyB;AAAA,IACzB,aAAyB;AAAA,IACzB,aAAyB;AAAA,IACzB,YAAyB;AAAA,IACzB,YAAyB;AAAA,IACzB,YAAyB;AAAA,IACzB,cAAyB;AAAA,IACzB,QAAyB;AAAA,IACzB,SAAyB;AAAA,IACzB,iBAAyB;AAAA,IACzB,kBAAyB;AAAA,IACzB,eAAyB;AAAA,IACzB,KAAyB;AAAA,IACzB,YAAyB;AAAA,IACzB,aAAyB;AAAA,IACzB,uBAAyB;AAAA,IACzB,aAAyB;AAAA,IACzB,cAAyB;AAAA,IACzB,aAAyB;AAAA,IACzB,aAAyB;AAAA,EAC7B;AAAA,EACA,wBAAyB;AAAA,IACrB,WAAY;AAAA,EAChB;AAAA,EACA,YAAa;AAAA,IACT,QAAiB;AAAA,IACjB,cAAiB;AAAA,IACjB,gBAAiB;AAAA,MACb,GAAI;AAAA,MACJ,GAAI;AAAA,IACR;AAAA,IACA,UAAW;AAAA,MACP,GAAI;AAAA,MACJ,GAAI;AAAA,IACR;AAAA,IACA,WAAY;AAAA,MACR,EAAE,QAAS,eAAe,QAAS,MAAM,QAAS,KAAK;AAAA,MACvD,EAAE,QAAS,UAAU,QAAS,WAAW,QAAS,IAAI;AAAA,MACtD,EAAE,QAAS,UAAU,QAAS,WAAW,QAAS,MAAM;AAAA,MACxD,EAAE,QAAS,QAAQ,QAAS,SAAS,QAAS,IAAI;AAAA,MAClD,EAAE,QAAS,OAAO,QAAS,QAAQ,QAAS,IAAI;AAAA,MAChD,EAAE,QAAS,QAAQ,QAAS,SAAS,QAAS,IAAI;AAAA,MAClD,EAAE,QAAS,SAAS,QAAS,UAAU,QAAS,MAAM;AAAA,MACtD,EAAE,QAAS,WAAW,QAAS,YAAY,QAAS,IAAI;AAAA,MACxD,EAAE,QAAS,QAAQ,QAAS,SAAS,QAAS,KAAK;AAAA,MACnD,EAAE,QAAS,UAAU,QAAS,WAAW,QAAS,MAAM;AAAA,IAC5D;AAAA,IACA,mBAAoB;AAAA,MAChB,CAAC,KAAK;AAAA,MACN,CAAC,KAAK,KAAK;AAAA,MACX,CAAC,KAAK,KAAK;AAAA,MACX,CAAC,KAAK,IAAI;AAAA,MACV,CAAC,GAAG;AAAA,MACJ,CAAC,KAAK,IAAI;AAAA,MACV,CAAC,MAAM,OAAO,KAAK;AAAA,MACnB,CAAC,KAAK,QAAQ,KAAK;AAAA,MACnB,CAAC,KAAK,IAAI;AAAA,MACV,CAAC,KAAK;AAAA,IACV;AAAA,IACA,SAAU;AAAA,MACN,GAAM;AAAA,MACN,IAAM;AAAA,MACN,KAAM;AAAA,IACV;AAAA,IACA,eAAgB,YAAU;AACtB,YAAM,iBAAiB,CAAC,MAAM,MAAM,IAAI,EAAE,KAAK,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AACxE,UAAI,SAAS;AACb,UAAI,CAAC,gBAAgB;AACjB,cAAM,YAAY,OAAO,OAAO,SAAS,CAAC;AAC1C,iBAAS,EAAE,GAAI,MAAM,GAAI,MAAM,GAAI,KAAK,EAAE,SAAS,KAAK;AAAA,MAC5D;AACA,aAAO,SAAS;AAAA,IACpB;AAAA,EACJ;AACJ;AACA,IAAO,aAAQ,aAAa,cAAc,MAAM;;;AChMhD,IACI,EAAE,UAAAC,UAAS,IAAW,OAAO;AADjC,IAEIC,aAAsBD,UAAS,KAAK,oBAAI,KAAK,CAAC;AAFlD,IAGI,WAAsB,oBAAI,KAAK;AAHnC,IAII,cAAsB,MAAO,KAAK;AAJtC,IAKI,eAAsB,CAAC,OAAO,aAAa,MAAM,KAAK,KAAK,SAAS,OAAO,WAAW;AAL1F,IAMI,oBAAsB;AAN1B,IAOI,kBAAsB,YAAU;AAC5B,QAAM,iBAAiB,CAAC,MAAM,MAAM,IAAI,EAAE,KAAK,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AACxE,MAAI,SAAS;AACb,MAAI,CAAC,gBAAgB;AACjB,UAAM,YAAY,OAAO,OAAO,SAAS,CAAC;AAC1C,aAAkB,EAAE,GAAI,MAAM,GAAI,MAAM,GAAI,KAAK,EAAE,SAAS,KAAK;AAAA,EACrE;AACA,SAAO,SAAS;AACpB;AAfJ,IAgBI,gBAAsB,CAAC,MAAM,SAASE,UAAS;AAC3C,QAAM,YAAY,mBAAmB,IAAI,MAAM,mBAAmB,IAAI,IAAI,IAAI,KAAK,eAAeC,SAAQ,OAAO;AACjH,SAAO,UAAU,OAAOD,KAAI;AAChC;AAnBJ,IAoBI,aAAsB,CAAC,MAAM,SAASA,OAAM,UAAU,UAAU;AAC5D,MAAI,UAAU,cAAc,MAAM,SAASA,KAAI;AAE/C,MAAI,SAAS,KAAK,OAAO,GAAG;AAExB,cAAU,QAAQ,QAAQ,MAAM,EAAE;AAElC,QAAI,SAAS;AACT,gBAAU,QAAQ,QAAQ,OAAO,EAAE;AAAA,IACvC;AAAA,EACJ;AACA,SAAO;AACX;AAhCJ,IAiCI,aAAe,CAAC,KAAK,UAAU,KAAK,OAAO,IAAI,QAAQ,IAAI,MAAM,QAAQ,KACpE,IAAI,kBAAkB,IAAI,MAAM,kBAAkB,KAAK,iBAAiB,OAAO,eAAe,iBAAiB,IAAI,WAAW,IAAI;AAlC3I,IAmCI,eAAe,CAAAE,SAAOA,QAAO,IAAIA,OAAMA,OAAM;AAnCjD,IAoCI,WAAe;AApCnB,IAqCI,aAAe,CAAC,OAAO,OAAO,KAAK;AArCvC,IAsCI,cAAe;AAEnB,IAAID,UAAqB;AAAzB,IACI,gBAAqB;AADzB,IAGI,cAAqB,CAAC;AAH1B,IAII,kBAAqB,CAAC;AAJ1B,IAKI,qBAAqB,CAAC;AAL1B,IAMI,cAAqB,CAAC;AAC1B,IAAM,iBAAiB,CAACE,YAAW;AAC/B,QAAM,aAAa,kBAAkBA,OAAM;AAC3C,MAAI,CAAC,YAAY;AACb,UAAM,IAAI,MAAM,gDAAgD;AAAA,EACpE;AACA,MAAI,gBAAgBA,OAAM,MAAM,QAAW;AACvC,WAAO,gBAAgBA,OAAM;AAAA,EACjC;AACA,QACI,OAAO,IAAI,KAAK,eAAeF,SAAQ,UAAU,GACjD,MAAM,KAAK,cAAc,IAAI,KAAK,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,UAAQ;AACnE,UACI,OAAO,KAAK,MACZ,UAAU,WAAW,IAAI;AAC7B,QAAI,SAAS,WAAW;AAEpB,aAAO,KAAK,MAAM,QAAQ,MAAM,EAAE;AAAA,IACtC,WACS,SAAS,OAAO;AACrB,aAAO,YAAY,YAAY,MAAM;AAAA,IACzC,WACS,SAAS,SAAS;AACvB,aAAO,YAAY,UACb,QACA,YAAY,SACR,SACA,YAAY,YACR,MACA;AAAA,IAClB,WACS,SAAS,QAAQ;AAItB,aAAO,YAAY,YAAY,SAAS;AAAA,IAC5C;AAAA,EACJ,CAAC,EAAE,KAAK,EAAE;AACd,SAAO,gBAAgBE,OAAM,IAAI;AACrC;AACA,IACI,eAA6B;AADjC,IAEI,gBAA6B;AAFjC,IAGI,cAA6B;AAHjC,IAII,oBAA6B;AAAA,EACzB,GAAK,EAAE,MAAO,WAAW,OAAQ,WAAW,KAAM,UAAU;AAAA,EAC5D,IAAK,EAAE,MAAO,WAAW,OAAQ,SAAS,KAAM,UAAU;AAC9D;AAPJ,IAQI,UAA6B;AAAA;AAAA,EAEzB,GAAO,CAAAH,UAAQA,MAAK,SAAS,IAAI;AAAA;AAAA;AAAA,EAEjC,IAAO,CAAAA,UAAQ,cAAc,QAAQ,EAAEA,KAAI,EAAE,SAAS,CAAC;AAAA;AAAA,EAEvD,IAAO,CAAAA,WAASA,MAAK,SAAS,IAAI,GAAG,SAAS,EAAE,SAAS,GAAG,GAAG;AAAA;AAAA;AAAA,EAE/D,KAAO,CAAAA,UAAQ,cAAc,OAAO,EAAE,OAAQ,QAAQ,GAAGA,KAAI;AAAA;AAAA,EAE7D,MAAO,CAAAA,UAAQ,cAAc,QAAQ,EAAE,OAAQ,OAAO,GAAGA,KAAI;AAAA;AAAA,EAE7D,GAAK,CAAAA,UAAQ,KAAK,MAAMA,MAAK,SAAS,IAAI,KAAK,CAAC;AAAA;AAAA,EAEhD,IAAK,CAAAA,UAAQ,cAAc,QAAQ,EAAEA,KAAI,EAAE,SAAS,CAAC;AAAA;AAAA,EAErD,GAAK,CAAAA,UAAQA,MAAK,QAAQ;AAAA;AAAA;AAAA,EAE1B,IAAK,CAAAA,UAAQ,cAAc,QAAQ,EAAEA,KAAI,EAAE,SAAS,CAAC;AAAA;AAAA,EAErD,IAAK,CAAAA,UAAQA,MAAK,QAAQ,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG;AAAA;AAAA;AAAA,EAEtD,KAAM,CAAAA,UAAQ,KAAK;AAAA,KAEX,IAAI,KAAKA,MAAK,YAAY,GAAGA,MAAK,SAAS,GAAGA,MAAK,QAAQ,GAAG,IAAI,GAAG,CAAC,IACtE,IAAI,KAAKA,MAAK,YAAY,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,KAC3C,iBAAiB,IAAI;AAAA,EAAW;AAAA;AAAA,EAExC,MAAO,CAAAA,UAAQ,cAAc,QAAQ,IAAIA,KAAI,EAAE,SAAS,CAAC;AAAA;AAAA,EAEzD,MAAO,CAAAA,UAAQ,QAAQ,IAAIA,KAAI,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG;AAAA;AAAA,EAE3D,GAAO,CAAAA,UAAQA,MAAK,OAAO;AAAA;AAAA,EAE3B,IAAO,CAAAA,UAAQ,cAAcA,MAAK,OAAO,EAAE,SAAS,CAAC;AAAA;AAAA,EAErD,IAAO,CAAAA,UAAQ,cAAc,MAAM,EAAE,SAAU,SAAS,GAAGA,KAAI,EAAE,OAAO,GAAG,CAAC;AAAA;AAAA,EAE5E,IAAO,CAAAA,UAAQ,QAAQ,IAAIA,KAAI,EAAE,UAAU,GAAG,CAAC;AAAA;AAAA,EAE/C,KAAO,CAAAA,UAAQ,cAAc,OAAO,EAAE,SAAU,QAAQ,GAAGA,KAAI;AAAA;AAAA,EAE/D,MAAO,CAAAA,UAAQ,cAAc,QAAQ,EAAE,SAAU,OAAO,GAAGA,KAAI;AAAA,EAC/D,GAAI,CAAAA,UAAQ;AACR,UACI,YAAY,mBAAmB,MAAM,mBAAmB,IAAI,IAAI,KAAK,eAAe,SAAS;AAAA,MACzF,UAAW;AAAA,MACX,MAAW;AAAA,MACX,OAAW;AAAA,MACX,KAAW;AAAA,IACf,CAAC,IACD,QAAQ,UAAU,cAAcA,KAAI;AACxC,WAAO,GAAG,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,EAAE,KAAK;AAAA,EAC9D;AAAA,EACA,IAAK,CAAAA,UAAQ;AACT,UACI,YAAY,mBAAmB,OAAO,mBAAmB,KAAK,IAAI,KAAK,eAAe,SAAS;AAAA,MAC3F,UAAW;AAAA,MACX,QAAW;AAAA,MACX,MAAW;AAAA,MACX,OAAW;AAAA,MACX,KAAW;AAAA,MACX,MAAW;AAAA,MACX,QAAW;AAAA,MACX,QAAW;AAAA,IACf,CAAC,IACD,QAAQ,UAAU,cAAcA,KAAI;AACxC,WAAO,GAAG,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,EAAE,KAAK,IAAI,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,EAAE,KAAK;AAAA,EACnH;AAAA,EACA,GAAI,CAAAA,UAAQA,MAAK,OAAO;AAAA,EACxB,GAAI,CAAAA,UAAQA,MAAK,OAAO,IAAI;AAAA;AAAA,EAE5B,GAAK,CAAAA,UAAQ,WAAW,cAAcA,KAAI,EAAE,CAAC;AAAA,EAC7C,IAAK,CAAAA,UAAQ,cAAc,QAAQ,EAAEA,KAAI,EAAE,SAAS,CAAC;AAAA,EACrD,IAAK,CAAAA,UAAQ,QAAQ,EAAEA,KAAI,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG;AAAA;AAAA,EAEvD,IAAO,CAAAA,UAAQ,GAAG,WAAW,SAAS,SAAS,CAAC,IAAI,QAAQ,EAAEA,KAAI,CAAC;AAAA,EACnE,KAAO,CAAAA,UAAQ,GAAG,WAAW,SAAS,SAAS,CAAC,IAAI,QAAQ,GAAGA,KAAI,CAAC;AAAA,EACpE,KAAO,CAAAA,UAAQ,GAAG,WAAW,SAAS,SAAS,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAEA,KAAI,CAAC;AAAA,EACrE,MAAO,CAAAA,UAAQ,GAAG,WAAW,SAAS,SAAS,EAAE,CAAC,CAAC,GAAG,QAAQ,GAAGA,KAAI,CAAC;AAAA;AAAA,EAEtE,GAAO,CAAAA,UAAQA,MAAK,YAAY;AAAA;AAAA;AAAA,EAEhC,IAAO,CAAAA,WAASA,MAAK,YAAY,IAAI,KAAK,SAAS,EAAE,SAAS,GAAG,GAAG;AAAA;AAAA;AAAA,EAEpE,MAAO,CAAAA,UAAQA,MAAK,YAAY;AAAA;AAAA;AAAA,EAEhC,GAAI,CAAAA,UAAQA,MAAK,SAAS,IAAI,KAAK,OAAO;AAAA,EAC1C,GAAI,CAAAA,UAAQA,MAAK,SAAS,IAAI,KAAK,OAAO;AAAA;AAAA,EAE1C,GAAK,CAAAA,UAAQA,MAAK,SAAS;AAAA;AAAA,EAE3B,IAAK,CAAAA,UAAQA,MAAK,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG;AAAA;AAAA,EAEvD,GAAK,CAAAA,UAASA,MAAK,SAAS,IAAI,MAAO;AAAA;AAAA,EAEvC,IAAK,CAAAA,UAAQ,QAAQ,EAAEA,KAAI,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG;AAAA;AAAA,EAEvD,GAAK,CAAAA,UAAQA,MAAK,SAAS,KAAK;AAAA;AAAA,EAEhC,IAAK,CAAAA,UAAQ,QAAQ,EAAEA,KAAI,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG;AAAA;AAAA,EAEvD,GAAK,CAAAA,UAAQ,WAAW,KAAK,EAAE,MAAO,UAAU,GAAGA,KAAI;AAAA;AAAA,EAEvD,IAAK,CAAAA,UAAQ,WAAW,MAAM,EAAE,MAAO,UAAU,GAAGA,KAAI;AAAA;AAAA,EAExD,GAAK,CAAAA,UAAQA,MAAK,WAAW;AAAA;AAAA;AAAA,EAE7B,IAAK,CAAAA,UAAQ,QAAQ,EAAEA,KAAI,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG;AAAA;AAAA,EAEvD,GAAK,CAAAA,UAAQA,MAAK,WAAW;AAAA;AAAA;AAAA,EAE7B,IAAK,CAAAA,UAAQ,QAAQ,EAAEA,KAAI,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG;AAAA;AAAA,EAEvD,GAAM,CAAAA,UAAQ,KAAK,MAAMA,MAAK,gBAAgB,IAAI,GAAG,EAAE,SAAS;AAAA;AAAA,EAEhE,IAAM,CAAAA,UAAQ,KAAK,MAAMA,MAAK,gBAAgB,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG;AAAA;AAAA,EAEhF,KAAM,CAAAA,UAAQA,MAAK,gBAAgB,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG;AAAA,EAC/D,GAAK,CAAAA,UAAQ,cAAc,KAAK,EAAE,cAAe,QAAQ,GAAGA,KAAI;AAAA,EAChE,IAAK,CAAAA,UAAQ,cAAc,MAAM,EAAE,cAAe,OAAO,GAAGA,KAAI;AAAA,EAChE,GAAK,CAAAA,UAAQ,GAAG,aAAaA,KAAI;AAAA,EACjC,IAAM,CAAAA,UAAQ,WAAW,MAAM,EAAE,MAAO,WAAW,QAAS,UAAU,GAAGA,KAAI;AAAA;AAAA,EAE7E,KAAM,CAAAA,UAAQ,WAAW,OAAO,EAAE,MAAO,WAAW,QAAS,UAAU,GAAGA,OAAM,IAAI;AAAA,EACpF,KAAM,CAAAA,UAAQ,WAAW,OAAO,EAAE,MAAO,WAAW,QAAS,WAAW,QAAS,UAAU,GAAGA,KAAI;AAAA,EAClG,GAAM,CAAAA,UAAQ,cAAc,KAAK,EAAE,MAAO,WAAW,OAAQ,WAAW,KAAM,UAAU,GAAGA,KAAI;AAAA,EAC/F,GAAM,CAAAA,UAAQ,cAAc,KAAK,kBAAkB,GAAGA,KAAI;AAAA,EAC1D,IAAM,CAAAA,UAAQ,cAAc,MAAM,EAAE,MAAO,WAAW,OAAQ,QAAQ,KAAM,UAAU,GAAGA,KAAI;AAAA,EAC7F,IAAM,CAAAA,UAAQ,cAAc,MAAM,kBAAkB,IAAIA,KAAI;AAAA,EAC5D,KAAM,CAAAA,UAAQ,cAAc,OAAO;AAAA,IAC/B,MAAS;AAAA,IACT,OAAS;AAAA,IACT,KAAS;AAAA,IACT,MAAS;AAAA,IACT,QAAS;AAAA,EACb,GAAGA,KAAI;AAAA,EACP,KAAM,CAAAA,UAAQ,cAAc,OAAO;AAAA,IAC/B,MAAS;AAAA,IACT,OAAS;AAAA,IACT,KAAS;AAAA,IACT,MAAS;AAAA,IACT,QAAS;AAAA,EACb,GAAGA,KAAI;AAAA,EACP,MAAO,CAAAA,UAAQ,cAAc,QAAQ;AAAA,IACjC,MAAU;AAAA,IACV,OAAU;AAAA,IACV,KAAU;AAAA,IACV,MAAU;AAAA,IACV,QAAU;AAAA,IACV,SAAU;AAAA,EACd,GAAGA,KAAI;AAAA,EACP,MAAO,CAAAA,UAAQ,cAAc,QAAQ;AAAA,IACjC,MAAU;AAAA,IACV,OAAU;AAAA,IACV,KAAU;AAAA,IACV,MAAU;AAAA,IACV,QAAU;AAAA,IACV,SAAU;AAAA,EACd,GAAGA,KAAI;AACX;AAxKJ,IA0KI,aAA6B,OAAO,KAAK,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM;AA1KxF,IA2KI,eAA6B,OAAO,WAAW,KAAK,GAAG,CAAC;AA3K5D,IA6KII,WAA6B,OAAO,CAAC;AA7KzC,IA8KI,WAA6B,CAAC,QAAQ,YAAY,KAAK,GAAG;AA9K9D,IA+KI,oBAA6B,CAAC,QAAQ,SAAS,GAAG,KAAK,EAAE,cAAe,SAAS,IAAI,OAAO,GAAG,GAAG,EAAE,UAAU,GAAG,CAAC,CAAC,EAAE;AA/KzH,IAgLI,UAA6B;AAAA,EACzB,MAAO,SAAO;AACV,UAAM,OAAO,SAAS,GAAG;AACzB,WAAO,EAAE,MAAO,QAAQ,OAAQ,QAAQ,OAAO,OAAO,IAAI;AAAA,EAC9D;AAAA,EACA,GAAK,UAAQ,EAAE,MAAO,SAAS,GAAG,EAAE;AAAA,EACpC,IAAK,SAAO;AACR,UAAM,OAAO,SAAS,GAAG;AACzB,WAAO,EAAE,MAAO,QAAQ,OAAO,OAAO,OAAO,KAAM;AAAA,EACvD;AAAA,EACA,GAAM,UAAQ,EAAE,OAAQ,SAAS,GAAG,IAAI,EAAE;AAAA,EAC1C,IAAM,UAAQ,EAAE,OAAQ,SAAS,GAAG,IAAI,EAAE;AAAA,EAC1C,IAAM,UAAQ,EAAE,OAAQ,SAAS,GAAG,IAAI,EAAE;AAAA,EAC1C,KAAM,SAAO;AACT,UAAMC,UAAS,OAAO,IAAI,YAAY;AACtC,eAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,WAAW,qBAAqB,GAAG;AAC1E,UAAIA,OAAM,WAAW,IAAI,GAAG;AACxB,eAAO,EAAE,OAAQ,MAAM,MAAM;AAAA,MACjC;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,MAAO,SAAO;AACV,UAAMA,UAAS,OAAO,IAAI,YAAY;AACtC,eAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,WAAW,gBAAgB,GAAG;AACrE,UAAIA,OAAM,WAAW,IAAI,GAAG;AACxB,eAAO,EAAE,OAAQ,MAAM,MAAM;AAAA,MACjC;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,IAAO,UAAQ,EAAE,MAAO,SAAS,GAAG,EAAE;AAAA,EACtC,GAAO,UAAQ,EAAE,MAAO,SAAS,GAAG,EAAE;AAAA,EACtC,IAAO,UAAQ,EAAE,MAAO,SAAS,GAAG,EAAE;AAAA,EACtC,KAAOD;AAAA,EACP,MAAOA;AAAA,EACP,MAAOA;AAAA,EACP,GAAOA;AAAA,EACP,IAAOA;AAAA,EACP,IAAOA;AAAA,EACP,IAAOA;AAAA,EACP,KAAOA;AAAA,EACP,MAAOA;AAAA,EACP,GAAOA;AAAA,EACP,IAAOA;AAAA,EACP,GAAOA;AAAA,EACP,IAAOA;AAAA,EACP,IAAOA;AAAA,EACP,GAAOA;AAAA,EACP,GAAOA;AAAA,EACP,IAAO,UAAQ,EAAE,OAAQ,SAAS,GAAG,EAAE;AAAA,EACvC,IAAO,UAAQ,EAAE,OAAQ,SAAS,GAAG,EAAE;AAAA,EACvC,IAAO,UAAQ,EAAE,SAAU,SAAS,GAAG,EAAE;AAAA,EACzC,GAAO,UAAQ,EAAE,OAAQ,SAAS,GAAG,EAAE;AAAA,EACvC,GAAO,UAAQ,EAAE,SAAU,SAAS,GAAG,EAAE;AAAA,EACzC,IAAO,UAAQ,EAAE,SAAU,SAAS,GAAG,EAAE;AAAA,EACzC,GAAO,UAAQ,EAAE,SAAU,SAAS,GAAG,EAAE;AAAA,EACzC,GAAO;AAAA,EACP,IAAO;AAAA,EACP,KAAO;AAAA,EACP,GAAI,UAAQ,EAAE,MAAO,IAAI,YAAY,EAAE;AAAA,EACvC,GAAI,UAAQ,EAAE,MAAO,IAAI,YAAY,EAAE;AAAA,EACvC,GAAM;AAAA,EACN,IAAM;AAAA,EACN,KAAM;AAAA,EACN,GAAK,EAAE,MAAO,WAAW,QAAS,MAAM,eAAe,GAAG,EAAE;AAAA,EAC5D,IAAK,EAAE,MAAO,WAAW,QAAS,MAAM,eAAe,IAAI,EAAE;AAAA;AAAA,EAE7D,GAAI,SAAO;AACP,QAAI,CAAC,OAAQ,CAAC,cAAc,KAAK,GAAG,KAAK,QAAQ,KAAM;AACnD,aAAO;AAAA,IACX;AACA,QAAI,WAAW;AAGf,QAAI,QAAQ,KAAK;AACb,YAAM,UAAU,cAAc,KAAK,GAAG;AAEtC,UAAI,SAAS;AACT,cACI,OAAU,QAAQ,CAAC,MAAM,MAAM,IAAI,IACnC,QAAU,SAAS,QAAQ,CAAC,CAAC,KAAK,GAClC,UAAU,SAAS,QAAQ,CAAC,CAAC,KAAK;AACtC,mBAAW,QAAQ,QAAQ,KAAK;AAAA,MACpC,OAEK;AACD,mBAAW,MAAK,oBAAI,KAAK,GAAE,kBAAkB;AAAA,MACjD;AAAA,IACJ;AACA,WAAO,EAAE,SAAS;AAAA,EACtB;AACJ;AA1QJ,IA2QI,aAA6B,OAAO,KAAK,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM;AA3QxF,IA4QI,eAA6B,IAAI,OAAO,IAAI,WAAW,KAAK,GAAG,CAAC,GAAG;AA5QvE,IAiRI,kBAA6B,IAAI,OAAO,0BAA0B;AAjRtE,IAoRI,mBAA6B;AAAA;AAAA;AAAA;AAAA;AAAA,EAKzB,QAAS;AAAA,IACL,QAAc;AAAA,IACd,MAAc;AAAA,IACd,SAAc;AAAA,IACd,OAAc;AAAA,IACd,MAAc;AAAA,IACd,KAAc;AAAA,IACd,MAAc,KAAK;AAAA,IACnB,QAAc,OAAO;AAAA,IACrB,QAAc,QAAQ;AAAA,IACtB,aAAc,QAAW;AAAA,EAC7B;AAAA,EACA,MAAO;AAAA,IACH,QAAc;AAAA,IACd,MAAc;AAAA,IACd,SAAc;AAAA,IACd,OAAc;AAAA,IACd,MAAc;AAAA,IACd,KAAc;AAAA,IACd,MAAc,KAAK;AAAA,IACnB,QAAc,OAAO;AAAA,IACrB,QAAc,QAAQ;AAAA,IACtB,aAAc,QAAW;AAAA,EAC7B;AAAA,EACA,SAAU;AAAA,IACN,QAAc,IAAI;AAAA,IAClB,MAAc,IAAI;AAAA,IAClB,SAAc;AAAA,IACd,OAAc;AAAA,IACd,MAAc;AAAA,IACd,KAAc;AAAA,IACd,MAAc,KAAK;AAAA,IACnB,QAAc,OAAO;AAAA,IACrB,QAAc,QAAQ;AAAA,IACtB,aAAc,QAAW;AAAA,EAC7B;AAAA,EACA,OAAQ;AAAA,IACJ,QAAc,IAAI;AAAA,IAClB,MAAc,IAAI;AAAA,IAClB,SAAc,IAAI;AAAA,IAClB,OAAc;AAAA,IACd,MAAc;AAAA,IACd,KAAc;AAAA,IACd,MAAc,MAAM;AAAA,IACpB,QAAc,QAAQ;AAAA,IACtB,QAAc,SAAS;AAAA,IACvB,aAAc,SAAY;AAAA,EAC9B;AAAA,EACA,MAAO;AAAA,IACH,QAAc,KAAK;AAAA,IACnB,MAAc,KAAK;AAAA,IACnB,SAAc,KAAK;AAAA,IACnB,OAAc,KAAK;AAAA,IACnB,KAAc;AAAA,IACd,MAAc;AAAA,IACd,QAAc;AAAA,IACd,QAAc;AAAA,IACd,aAAc;AAAA,EAClB;AAAA,EACA,KAAM;AAAA,IACF,QAAc,KAAK;AAAA,IACnB,MAAc,KAAK;AAAA,IACnB,SAAc,KAAK;AAAA,IACnB,OAAc,KAAK;AAAA,IACnB,MAAc,IAAI;AAAA,IAClB,MAAc;AAAA,IACd,QAAc;AAAA,IACd,QAAc;AAAA,IACd,aAAc;AAAA,EAClB;AAAA,EACA,MAAO;AAAA,IACH,QAAc,MAAM,OAAO;AAAA,IAC3B,MAAc,MAAM,MAAM;AAAA,IAC1B,SAAc,MAAM,KAAK;AAAA,IACzB,OAAc,MAAM,KAAK;AAAA,IACzB,MAAc,IAAI;AAAA,IAClB,KAAc,IAAI;AAAA,IAClB,QAAc;AAAA,IACd,QAAc;AAAA,IACd,aAAc;AAAA,EAClB;AAAA,EACA,QAAS;AAAA,IACL,QAAc,MAAM,OAAO;AAAA,IAC3B,MAAc,MAAM,MAAM;AAAA,IAC1B,SAAc,MAAM,KAAK;AAAA,IACzB,OAAc,MAAM,KAAK;AAAA,IACzB,MAAc,IAAI;AAAA,IAClB,KAAc,IAAI;AAAA,IAClB,MAAc,IAAI;AAAA,IAClB,QAAc;AAAA,IACd,aAAc;AAAA,EAClB;AAAA,EACA,QAAS;AAAA,IACL,QAAc,MAAM,OAAO;AAAA,IAC3B,MAAc,MAAM,MAAM;AAAA,IAC1B,SAAc,MAAM,KAAK;AAAA,IACzB,OAAc,MAAM,KAAK;AAAA,IACzB,MAAc,IAAI;AAAA,IAClB,KAAc,IAAI;AAAA,IAClB,MAAc,IAAI;AAAA,IAClB,QAAc,IAAI;AAAA,IAClB,aAAc;AAAA,EAClB;AAAA,EACA,aAAc;AAAA,IACV,QAAU,MAAM,OAAO;AAAA,IACvB,MAAU,MAAM,MAAM;AAAA,IACtB,SAAU,MAAM,KAAK;AAAA,IACrB,OAAU,MAAM,KAAK;AAAA,IACrB,MAAU,IAAI;AAAA,IACd,KAAU,IAAI;AAAA,IACd,MAAU,IAAI;AAAA,IACd,QAAU,IAAI;AAAA,IACd,QAAU,IAAI;AAAA,EAClB;AACJ;AA3YJ,IA4YI,kBAA6B;AAAA,EACzB,IAAe;AAAA,EACf,cAAe;AAAA,EACf,GAAe;AAAA,EACf,SAAe;AAAA,EACf,GAAe;AAAA,EACf,IAAe;AAAA,EACf,KAAe;AAAA,EACf,SAAe;AAAA,EACf,GAAe;AAAA,EACf,OAAe;AAAA,EACf,GAAe;AAAA,EACf,MAAe;AAAA,EACf,GAAe;AAAA,EACf,OAAe;AAAA,EACf,GAAe;AAAA,EACf,IAAe;AAAA,EACf,KAAe;AAAA,EACf,QAAe;AAAA,EACf,GAAe;AAAA,EACf,UAAe;AAAA,EACf,GAAe;AAAA,EACf,OAAe;AAAA,EACf,KAAe;AAAA,EACf,SAAe;AACnB;AAraJ,IAsaI,4BAA6B;AAtajC,IAuaI,0BAA6B;AAvajC,IAwaI,qBAA6B;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAnbJ,IAobI,6BAA6B;AAAA,EACzB,CAAC,KAAK;AAAA,EACN,CAAC,KAAK,KAAK;AAAA,EACX,CAAC,KAAK,KAAK;AAAA,EACX,CAAC,KAAK,IAAI;AAAA,EACV,CAAC,GAAG;AAAA,EACJ,CAAC,KAAK,IAAI;AAAA,EACV,CAAC,MAAM,OAAO,KAAK;AAAA,EACnB,CAAC,KAAK,QAAQ,KAAK;AAAA,EACnB,CAAC,KAAK,IAAI;AAAA,EACV,CAAC,KAAK;AACV;AA/bJ,IAgcI,aAA6B;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AA1cJ,IA4cI,iBAA6B;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AApdJ,IAqdI,cAA6B,CAAC,MAAM;AAChC,QAAM,SAAS,WAAW,CAAC;AAC3B,SAAO,MAAM,MAAM,IAAI,OAAO;AAClC;AAxdJ,IAydI,cAA6B;AAzdjC,IA0dI,gBAA6B;AA1djC,IA2dI,iBAA6B;AAAA,EACzB,aAAc;AAAA,EACd,QAAc;AAAA,EACd,QAAc;AAAA,EACd,MAAc;AAAA,EACd,KAAc;AAAA,EACd,MAAc;AAAA,EACd,OAAc;AAAA,EACd,SAAc;AAAA,EACd,MAAc;AAAA,EACd,QAAc;AAClB;AAteJ,IAueI,UAAU;AAAA,EACN,MAAM,QAAQ,OAAO,GAAG;AACpB,WAAO,KAAK,MAAM,SAAS,IAAI,IAAI;AAAA,EACvC;AAAA,EACA,MAAM,QAAQ,OAAO,GAAG;AACpB,WAAO,KAAK,MAAM,SAAS,IAAI,IAAI;AAAA,EACvC;AAAA,EACA,KAAK,QAAQ,OAAO,GAAG;AACnB,WAAO,KAAK,KAAK,SAAS,IAAI,IAAI;AAAA,EACtC;AACJ;AAjfJ,IAkfI,WAAW,CAAC;AAgLhB,IAAqB,cAArB,MAAqB,oBAAmB,oBAAY,EAAE;AAAA,EAElD,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,cAAcE,SAAQ;AAC7B,OAAG,iBAAiBA;AAAA,EACxB;AAAA,EACA,WAAW,gBAAgB;AACvB,WAAO,GAAG,kBAAkB;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,mBAAmB,aAAa;AACvC,SAAK,sBAAsB;AAAA,EAC/B;AAAA,EACA,WAAW,qBAAqB;AAC5B,WAAO,KAAK,uBAAuB,KAAK,kBAAkB;AAAA,EAC9D;AAAA,EACA,OAAO,YAAYA,SAAQ;AAUvB,UACI,QAASA,QAAO,MAAM,YAAY,GAClC,SAAS,CAAC;AAId,QAAI,MAAM,WAAW,KAAK,gBAAgB,KAAKA,OAAM,GAAG;AACpD,aAAO,CAAC;AAAA,IACZ,OACK;AACD,YAAM,OAAO,CAAC,MAAM,MAAM,OAAO,UAAU;AAEvC,YAAI,UAAU,KAAK,SAAS,IAAI;AAE5B,cAAI,aAAa,KAAK,IAAI,GAAG;AACzB,kBACI,gBAAgB,KAAK,SAAS,YAAY,KAAK,CAAC,GAChDC,MAAgB,cAAc,IAAI,KAAK,QAAQ,IAAI;AAIvD,gBAAI,SAAS,OAAO,QAAQ,MAAM,SAAS,GAAG;AAC1C,oBAAM,IAAI,MAAM,kBAAkBD,OAAM,kCAAkC;AAAA,YAC9E;AACA,kBAAM,YAAa,OAAOC,QAAO,cAAgB,OAAOA,QAAO,WACzDA,MACAA,IAAG,OAAO;AAGhB,gBAAI,OAAO,cAAc,UAAU;AAI/B,oBACI,gBAAgB,GAAG,YAAY,SAAS,GACxC,WAAgB,cAAc,IAAI;AACtC,qBAAO,SAAS;AAEhB,qBAAO,KAAK,GAAG,aAAa;AAC5B,qBAAO;AAAA,YACX,OACK;AACD,mBAAK,UAAU;AACf,mBAAK,KAAK;AAAA,YACd;AAAA,UACJ,OAEK;AACD,iBAAK,WAAW;AAChB,mBAAO,KAAK,IAAI;AAChB,mBAAO,CAAC;AAAA,UACZ;AAAA,QACJ,WACS,OAAO,UAAU,eAAe,KAAK,MAAM,SAAS,GAAG;AAC5D,iBAAO,KAAK,IAAI;AAAA,QACpB;AACA,eAAO;AAAA,MACX,GAAG,CAAC,CAAC;AAAA,IACT;AACA,WAAO,OAAO,SAAS,CAAC,EAAE,OAAO;AACjC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,QAAQ,IAAI;AAEf,QAAI,GAAG,WAAW,IAAI;AAClB,aAAO;AAAA,IACX;AAEA,QAAI,GAAG,SAAS;AACZ,WAAK,GAAG,QAAQ;AAAA,IACpB;AAEA,UAAM,SAAS,SAAS,KAAK,MAAM,KAAK,WAAW,CAAC;AACpD,QAAI,QAAQ;AACR,aAAO;AAAA,IACX;AACA,aAAS,QAAQ,EAAE;AACnB,UACIC,SAAQ,SAAS,SAAS,IAAI,GAC9BC,QAAQ,SAAS,QAAQ;AAE7B,WAAO,SAAS,KAAK,MAAM,KAAK,WAAW,CAAC,IAAI,GAAG,SAAS,YAAY,CAAC,IAAID,SAAQ,KAAK,MAAMA,SAAQA,MAAK,IAAIC,QAAO,KAAK,MAAMA,QAAOA,KAAI;AAAA,EAClJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,SAAS,KAAK;AACjB,WAAO,GAAG,MAAM,KAAK,YAAY;AAAA,EACrC;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,EAkCA,OAAO,MAAM,YAAYH,UAAS,GAAG,oBAAoB,SAAS,OAAO;AACrE,QAAI,sBAAsB,MAAM;AAC5B,aAAO;AAAA,IACX;AACA,QAAI,OAAO,eAAe,YAAY,CAAC,YAAY;AAC/C,aAAO;AAAA,IACX;AAQA,UAAM,SAAS;AAAA,MACX,MAAe;AAAA,MACf,OAAe;AAAA,MACf,MAAe;AAAA,MACf,OAAe;AAAA,MACf,SAAe;AAAA,MACf,SAAe;AAAA,MACf,cAAe;AAAA,IACnB;AAIA,IAAAA,UAASA,QAAO,QAAQ,UAAU,UAAU;AAC5C,QACI,SAAS,YAAYA,OAAM,GAC3B;AACJ,QAAI,CAAC,QAAQ;AACT,eAAS,YAAYA,OAAM,IAAI,GAAG,YAAYA,OAAM;AAAA,IACxD;AAIA,QAAI,WAAW,SAAS,QAAQ,GAAG;AAC/B,mBAAa,WAAW,QAAQ,OAAO,GAAG;AAAA,IAC9C;AAIA,WAAO,OAAO,CAACI,aAAYC,YAAW;AAj9B9C,UAAAC;AAk9BY,UAAID,QAAO,MAAM;AACb,eAAO,OAAO,QAAQA,QAAO,GAAGD,WAAU,CAAC;AAAA,MAC/C,OACK;AACD,YAAI;AAEJ,YAAIC,QAAO,aAAa,OAAOD,YAAW,QAAQ,GAAG,MAAM,IAAI;AAC3D,oBAAUA,YAAW,QAAQ,GAAG;AAAA,QACpC,OACK;AACD,gBAAM,gBAAgBA,YAAW,QAAQ,GAAG;AAC5C,cAAI,EAAE,SAAS,IAAIC;AAEnB,cAAI,CAAC,UAAU,YAAY,KAAK,QAAQ,GAAG;AACvC,uBAAW;AAAA,UACf;AAEA,oBAAUA,QAAO,aAAa,KAAKD,YAAW,OAAO,OAAO,aAAa,WAAW,aAAa,aAAa,QAAQ,IAAI,QAAQ,MAAIE,MAAAD,QAAO,YAAP,gBAAAC,IAAgB,WAAU;AAEhK,cAAI,gBAAgB,MAAM,UAAU,eAAe;AAC/C,sBAAU;AAAA,UACd;AAAA,QACJ;AACA,YAAI,MAAM;AAKV,YAAI,YAAY,MAAQD,QAAO,YAAY,SAAUD,YAAW,MAAM,QAAQ,GAAI;AAI9E,gBAAM,SAASA,YAAW,MAAM,UAAU;AAU1C,cAAI,OAAO,WAAW,GAAG;AACrB,mBAAOA;AACP,mBAAO;AAAA,UACX,OACK;AACD,mBAAO,OAAO,CAAC;AACf,mBAAO,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;AAAA,UACnC;AAAA,QACJ,OACK;AACD,iBAAOA,YAAW,UAAU,GAAG,OAAO,KAAKA;AAC3C,iBAAOA,YAAW,UAAU,UAAUC,QAAO,SAAS,MAAM;AAAA,QAChE;AACA,YAAIA,QAAO,IAAI;AAEX,gBAAM,MAAMA,QAAO,GAAG,IAAI;AAC1B,cAAI,KAAK;AACL,mBAAO,OAAO,QAAQ,GAAG;AAAA,UAC7B,OACK;AACD,mBAAO,OAAO;AAAA,UAClB;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AAAA,IACJ,GAAG,UAAU;AAEb,QAAI,OAAO,QAAQ,CAAC,OAAO,MAAM;AAC7B,aAAO,OAAO;AAAA,IAClB;AACA,QAAI,OAAO,OAAO,MAAM,OAAO,QAAQ,IAAI;AACvC,aAAO;AAAA,IACX;AACA,UAAMF,QAAO,GAAG,OAAO,QAAQ,MAAM;AACrC,QAAIA,OAAM;AACN,eAASA;AAAA,IACb,WACS,CAAC,QAAQ;AAEd,eAAS,IAAI,KAAK,UAAU;AAAA,IAChC;AACA,WAAO;AAAA,EACX;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,EAyBA,OAAO,OAAO,YAAY,SAAS,OAAO;AAEtC,UAAM,MAAM,EAAE,GAAG,WAAW;AAC5B,QAAI,UAAU,MAAM,IAAI,IAAI,KAAM,WAAW,MAAM,IAAI,KAAK,KAAK,MAAM,IAAI,IAAI,IAC3E,SAAU;AAEd,QAAI,CAAC,SAAS;AACV,UAAI,UAAU;AACd,qBAAe,QAAQ,cAAY;AAC/B,YAAI,EAAE,YAAY,QAAQ,MAAM,IAAI,QAAQ,CAAC,GAAG;AAC5C,cAAI,QAAQ,IAAI;AAAA,QACpB;AACA,kBAAU,WAAW,IAAI,QAAQ,MAAM;AAAA,MAC3C,CAAC;AACD,gBAAU;AAAA,IACd;AACA,QAAI,SAAS;AACT,aAAO;AAAA,IACX;AACA,QAAI,IAAI,SAAS,MAAM;AACnB,UAAI,QAAQ,IAAI,QAAQ;AAAA,IAC5B,WACS,IAAI,SAAS,MAAM;AACxB,UAAI,QAAS,IAAI,QAAQ,KAAM;AAAA,IACnC;AACA,QAAI,cAAc,KAAK;AACnB,eAAS;AACT,UAAI,WAAW,IAAI;AAAA,IACvB;AACA,QAAI,WAAW,IAAI,QAAQ,QAAQ,IAAI,SAAS,QAAQ,IAAI,QAAQ,OAAO;AACvE,aAAO;AAAA,IACX;AACA,UACI,OAAO;AAAA,MACH,aAAa,IAAI,MAAM,YAAY;AAAA,MACnC,aAAa,IAAI,OAAO,aAAa;AAAA,MACrC,aAAa,IAAI,MAAM,WAAW;AAAA,MAClC,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACR;AACJ,WAAO,SAAS,IAAI,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,IAAI;AAAA,EAClE;AAAA,EACA,OAAO,MAAMA,OAAM;AACf,WAAO,IAAI,KAAK,KAAK;AAAA,MACjBA,MAAK,eAAe;AAAA,MACpBA,MAAK,YAAY;AAAA,MACjBA,MAAK,WAAW;AAAA,MAChBA,MAAK,YAAY;AAAA,MACjBA,MAAK,cAAc;AAAA,MACnBA,MAAK,cAAc;AAAA,MACnBA,MAAK,mBAAmB;AAAA,IAC5B,CAAC;AAAA,EACL;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,EAsFA,OAAO,OAAOA,OAAMH,UAAS,GAAG,eAAe;AAE3C,QAAI,CAACG,SAAQ,MAAMA,KAAI,GAAG;AACtB,aAAO;AAAA,IACX;AACA,QAAI,YAAY,YAAYH,OAAM,GAC9B,SAAY;AAChB,QAAI,CAAC,WAAW;AACZ,kBAAY,YAAYA,OAAM,IAAI,CAAC;AAEnC,eAAS,IAAI,GAAG,IAAIA,QAAO,QAAQ,KAAK;AAEpC,cACI,cAAcA,QAAO,MAAM,CAAC,EAAE,MAAM,YAAY,GAChD,aAAc,2CAAc;AAChC,YAAI,YAAY;AACZ,gBACI,gBAAgB,KAAK,SAAS,YAAY,KAAK,CAAC,GAChDC,MAAgB,cAAc,UAAU,KAAK,QAAQ,UAAU;AACnE,oBAAU,KAAKA,GAAE;AACjB,eAAK,WAAW,SAAS;AAAA,QAC7B,WAESD,QAAO,CAAC,MAAM,KAAK;AAExB,gBAAM,QAAQA,QAAO,QAAQ,KAAK,IAAI,CAAC;AAEvC,cAAI,UAAU,IAAI;AACd,sBAAU,KAAKA,QAAO,OAAO,IAAI,CAAC,CAAC;AACnC,gBAAIA,QAAO;AAAA,UACf,OAEK;AACD,sBAAU,KAAKA,QAAO,UAAU,IAAI,GAAG,KAAK,CAAC;AAE7C,gBAAI;AAAA,UACR;AAAA,QACJ,OAEK;AACD,oBAAU,KAAKA,QAAO,CAAC,CAAC;AAAA,QAC5B;AAAA,MACJ;AAAA,IACJ;AACA,cAAU,QAAQ,UAAQ;AACtB,UAAI,OAAO,SAAS,UAAU;AAC1B,kBAAU;AAAA,MACd,OACK;AACD,kBAAU,KAAKG,KAAI;AAAA,MACvB;AAAA,IACJ,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,OAAO,YAAY,OAAOH,SAAQ;AAC9B,WAAOA,QAAO;AAAA,MAAQ;AAAA,MAClB,CAAC,GAAG,OAAO,QAAQ,YAAW,OAAO,MAAO,UAAU,MAAO,IAAI,CAAC,GAAG,GAAG;AAAA,IAAC;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,OAAO,eAAe,QAAQ,OAAO,MAAM;AACvC,QAAI,OAAO,WAAW,UAAU;AAC5B,aAAO;AACP,eAAS;AAAA,IACb;AACA,WAAO,GAAG,GAAG,eAAe,QAAQ,IAAI;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,SAAS,MAAM;AAClB,UACI,cAAc,GAAG,GAAG,MAAM,GAAG,YAAY,IAAI,GAAG,KAAK,GACrD,YAAY,KAAK,QAAQ,IAAI,GAAG,QAAQ,MAAM,OAAO,EAAE,QAAQ,KAAK;AACxE,WAAO,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,IAAI;AAAA,EACnD;AAAA,EACA,OAAO,aAAa,QAAQ;AACxB,UACI,YAAY,KAAK,MAAM,MAAM,GAC7B,WAAW,SAAS,WACpB,SAAS,IAAI,KAAK,GAAG,SAAS,GAC9B,YAAY,GAAG,GAAG,MAAM,GAAG,YAAY,MAAM,GAAG,MAAM;AAC1D,WAAO,QAAQ,OAAO,QAAQ,IAAI,WAAW,SAAS;AACtD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,OAAO,YAAY,OAAO,SAAS;AAC/B,QAAI,QAAQ;AACZ,QAAI,OAAO,YAAY,WAAW;AAC9B,eAAS;AAAA,IACb,WACS,SAAS;AACd,eAAY,QAAQ;AAAA,IACxB;AACA,UACI,WAAW,KAAK,SAAS,OAAO,OAAO,GACvC,SAAW,CAAC,GACZ,OAAW,mCAAS,eAAc,SAAS,KAAK;AACpD,SAAK,YAAY,UAAU;AACvB,aAAO,KAAK,GAAG,SAAS,QAAQ,CAAC,GAAG,GAAG,GAAG,QAAQ,EAAE;AAAA,IACxD;AACA,YAAO,mCAAS,cAAa,QAAQ,SAAS,OAAO,KAAK,IAAI;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,OAAO,SAAS,OAAO,SAAS;AAC5B,QAAI,QAAQ,GAAG,MAAM,WAAW,UAAU,SAAS;AACnD,QAAI,OAAO,YAAY,WAAW;AAC9B,eAAS;AAAA,IACb,WACS,SAAS;AACd,eAAS,QAAQ;AACjB,kBAAY,GAAG,cAAc,QAAQ,SAAS;AAC9C,gBAAU,QAAQ;AAClB,qBAAe,CAAC,UAAU,QAAQ;AAAA,IACtC;AACA,UACI,SAAU,CAAC,GACX,UAAU,SAAS,GAAG,qBAAqB,GAAG;AAClD,UAAM,QAAQ,UAAU,WAAW,MAAM,WAAW,QAAQ,OAAO,CAAC,IAAI;AAExE,SAAK,YAAY,OAAO;AACpB,UAAI,GAAG,GAAG,UAAU,KAAK;AACzB,aAAO,cAAc;AACrB,UAAI,KAAK,OAAO,UAAU,OAAO,EAAE,CAAC;AAGpC,UAAI,KAAM,QAAQ,CAAC,OAAO,QAAS;AAC/B,eAAO,eAAe,WAAW,QAAQ,KAAK,IAAI,UAAU,MAAM,CAAC,CAAC,IAAI;AACxE,iBAAS,GAAG,GAAG,MAAM,GAAG,QAAQ;AAAA,MACpC;AACA,UAAI,QAAQ,CAAC,OAAO;AAChB;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,GAAG,QAAQ,QAAQ,WAAW,MAAM;AAEvC,QAAI,OAAO,WAAW,UAAU;AAC5B,eAAS,GAAG,cAAc,MAAM;AAAA,IACpC;AAEA,QAAI,OAAO,WAAW,UAAU;AAC5B,iBAAW,OAAO;AAClB,eAAS,OAAO;AAAA,IACpB;AACA,QAAI,WAAW,UAAU;AACrB,aAAO;AAAA,IACX;AACA,aAAS,GAAG,cAAc,MAAM;AAChC,eAAW,GAAG,cAAc,QAAQ;AACpC,QAAI,WAAW,UAAU;AACrB,aAAO;AAAA,IACX,WAES,eAAe,QAAQ,IAAI,eAAe,MAAM,GAAG;AACxD,aAAO,SAAS,KAAK,IAAI,iBAAiB,QAAQ,EAAE,MAAM,CAAC;AAAA,IAC/D,OACK;AACD,aAAO,SAAS,KAAK,IAAI,iBAAiB,MAAM,EAAE,QAAQ,CAAC;AAAA,IAC/D;AAAA,EACJ;AAAA,EACA,OAAO,uBAAuBA,SAAQ;AAClC,UACI,gBAAgB,UAChB,aAAgB;AACpB,WAAO,WAAW,KAAKA,QAAO,QAAQ,eAAe,EAAE,CAAC;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,eAAeA,SAAQ;AAC1B,WAAO,GAAG,OAAO,GAAG,QAAQ,IAAI,GAAG,CAAC,GAAGA,OAAM,EAAE,SAAS,IAAI;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,OAAO,IAAIG,OAAM,QAAQ,OAAO,MAAM,QAAQ,MAAM;AAChD,QAAI;AACJ,QAAI,OAAOA,UAAS,UAAU;AAC1B,UAAI,GAAG,MAAMA,KAAI;AAAA,IACrB,WACS,OAAO;AACZ,UAAI,IAAI,KAAKA,MAAK,QAAQ,CAAC;AAAA,IAC/B,OACK;AACD,UAAIA;AAAA,IACR;AACA,QAAI,OAAO,WAAW,UAAU;AAC5B,YAAM,WAAW,YAAW,cAAc,MAAM;AAChD,eAAS,SAAS;AAClB,aAAS,SAAS;AAAA,IACtB,WACS,UAAU,OAAO,WAAW,UAAU;AAC3C,aAAO,OAAO;AACd,eAAS,OAAO;AAAA,IACpB;AACA,QAAI,CAAC,QAAQ,WAAW,GAAG;AACvB,aAAO;AAAA,IACX;AACA,WAAO,GAAG,cAAc,IAAI;AAC5B,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,UAAE,QAAQ,EAAE,QAAQ,IAAI,MAAM;AAC9B;AAAA,MACJ,KAAK;AACD,UAAE,QAAQ,EAAE,QAAQ,IAAK,SAAS,GAAK;AACvC;AAAA,MACJ,KAAK;AACD,UAAE,QAAQ,EAAE,QAAQ,IAAK,SAAS,GAAM;AACxC;AAAA,MACJ,KAAK;AACD,UAAE,QAAQ,EAAE,QAAQ,IAAK,SAAS,IAAQ;AAC1C;AAAA,MACJ,KAAK;AAED,YAAI,SAAS,MAAM,GAAG;AAClB,YAAE,QAAQ,EAAE,QAAQ,IAAI,MAAM;AAE9B,cAAI,EAAE,SAAS,MAAM,MAAMA,MAAK,SAAS,MAAM,GAAG;AAC9C,cAAE,SAAS,EAAE,SAAS,IAAI,CAAC;AAAA,UAC/B;AAAA,QACJ,OAEK;AACD,YAAE,QAAQ,EAAE,QAAQ,IAAK,SAAS,KAAS;AAAA,QAC/C;AACA;AAAA,MACJ,KAAK;AACD,UAAE,QAAQ,EAAE,QAAQ,IAAI,SAAS,CAAC;AAClC;AAAA,MACJ,KAAK,SAAS;AACV,YAAII,OAAM,EAAE,QAAQ;AACpB,YAAIA,OAAM,IAAI;AACV,UAAAA,OAAM,KAAK,IAAIA,MAAK,GAAG,mBAAmB,GAAG,IAAI,GAAG,oBAAoB,CAAC,GAAG,QAAQ,OAAO,CAAC,EAAE,QAAQ,CAAC;AAAA,QAC3G;AACA,UAAE,QAAQA,IAAG;AACb,UAAE,SAAS,EAAE,SAAS,IAAI,MAAM;AAChC;AAAA,MACJ;AAAA,MACA,KAAK;AACD,WAAG,IAAI,GAAG,SAAS,GAAG,SAAS,KAAK;AACpC;AAAA,MACJ,KAAK;AACD,UAAE,YAAY,EAAE,YAAY,IAAI,MAAM;AACtC;AAAA,MACJ,KAAK;AACD,UAAE,YAAY,EAAE,YAAY,IAAI,SAAS,EAAE;AAC3C;AAAA,IACR;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,KAAK,OAAO,KAAK,OAAO,MAAM,aAAa,MAAM;AACpD,WAAO,GAAG,cAAc,IAAI;AAC5B,QAAI,CAAC,SAAS,CAAC;AAAK,aAAO;AAC3B,QAAI;AACJ,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,iBAAS,GAAG,KAAK,OAAO,KAAK,OAAO,IAAI;AACxC;AAAA,MACJ,KAAK;AACD,iBAAS,GAAG,KAAK,OAAO,KAAK,OAAO,IAAI;AACxC;AAAA,MACJ,KAAK;AACD,kBAAW,IAAI,YAAY,IAAI,MAAM,YAAY,KAAK,MAAO,IAAI,SAAS,IAAI,MAAM,SAAS;AAC7F,YAAI,WAAW,KAAK,YAAY;AAC5B,mBAAS,GAAG,KAAK,OAAO,KAAK,OAAO,UAAU,IAAI,GAAG,YAAY,KAAK;AAAA,QAC1E;AACA;AAAA,MACJ,KAAK;AACD,iBAAS,GAAG,KAAK,OAAO,KAAK,KAAK,IAAI;AACtC;AAAA,MACJ,KAAK,OAAO;AACR,cAAM,UAAU,MAAM,kBAAkB,IAAI,IAAI,kBAAkB;AAClE,kBAAU,MAAM,QAAQ,UAAU,KAAK,OAAQ;AAC/C;AAAA,MACJ;AAAA,MACA,KAAK;AACD,kBAAU,MAAM,SAAS;AACzB;AAAA,MACJ,KAAK;AACD,kBAAU,MAAM,SAAS;AACzB;AAAA,MACJ,KAAK;AACD,kBAAU,MAAM,SAAS;AACzB;AAAA,MACJ,KAAK;AACD,iBAAU,MAAM;AAChB;AAAA,IACR;AACA,WAAO,aAAa,SAAS,KAAK,MAAM,MAAM;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,QAAQJ,OAAM,OAAO,OAAO,QAAQ,MAAM,eAAe,GAAG,cAAc;AAC7E,QAAI,CAACA,OAAM;AACP,aAAO;AAAA,IACX;AACA,WAAO,GAAG,cAAc,IAAI;AAC5B,QAAI,OAAO;AACP,MAAAA,QAAO,GAAG,MAAMA,KAAI;AAAA,IACxB;AACA,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,QAAAA,MAAK,SAAS,GAAG,CAAC;AAClB,QAAAA,MAAK,SAAS,GAAG,GAAG,GAAG,CAAC;AACxB,eAAOA;AAAA,MACX,KAAK;AACD,QAAAA,MAAK,UAAU,GAAG,IAAIA,OAAM,SAAS,IAAI,KAAK,GAAG,CAAC;AAClD,QAAAA,MAAK,SAAS,GAAG,GAAG,GAAG,CAAC;AACxB,eAAOA;AAAA,MACX,KAAK;AACD,QAAAA,MAAK,QAAQ,CAAC;AACd,QAAAA,MAAK,SAAS,GAAG,GAAG,GAAG,CAAC;AACxB,eAAOA;AAAA,MACX,KAAK,QAAQ;AACT,cAAM,QAAQA,MAAK,OAAO,IAAI;AAC9B,QAAAA,MAAK,QAAQA,MAAK,QAAQ,IAAI,KAAK;AACnC,QAAAA,MAAK,SAAS,GAAG,GAAG,GAAG,CAAC;AACxB,eAAOA;AAAA,MACX;AAAA,MACA,KAAK;AACD,QAAAA,MAAK,SAAS,GAAG,GAAG,GAAG,CAAC;AACxB,eAAOA;AAAA,MAEX,KAAK;AACD,QAAAA,MAAK,WAAW,IAAI,KAAKA,MAAK,WAAW,CAAC;AAAA,MAE9C,KAAK;AACD,QAAAA,MAAK,WAAW,IAAI,KAAKA,MAAK,WAAW,CAAC;AAAA,MAE9C,KAAK;AACD,QAAAA,MAAK,gBAAgB,IAAI,KAAKA,MAAK,gBAAgB,CAAC;AAAA,MAExD,KAAK;AACD,eAAOA;AAAA,IACf;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,MAAMA,OAAM;AACf,WAAO,IAAI,KAAKA,MAAK,YAAY,GAAGA,MAAK,SAAS,GAAGA,MAAK,QAAQ,IAAI,CAAC;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,MAAMA,OAAM;AACf,WAAO,IAAI,KAAKA,MAAK,QAAQ,CAAC;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,UAAUA,OAAM,QAAQ,MAAM;AACjC,QAAI,CAACA,OAAM;AACP,aAAO;AAAA,IACX;AACA,QAAI,OAAO;AACP,MAAAA,QAAO,IAAI,KAAKA,MAAK,QAAQ,CAAC;AAAA,IAClC;AACA,IAAAA,MAAK,SAAS,GAAG,GAAG,GAAG,CAAC;AACxB,WAAOA;AAAA,EACX;AAAA,EACA,OAAO,SAASA,OAAM,WAAW;AAC7B,QAAI,MAAM,GAAG,UAAUA,KAAI;AAC3B,QAAI,aAAa,MAAMA,OAAM;AACzB,YAAM,GAAG,IAAI,KAAK,GAAG,GAAG;AAAA,IAC5B;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,aAAaA,OAAM,OAAO,MAAM;AACnC,UAAM,IAAKA,MAAK,SAAS,IAAI,iBAAiB,KAAK,cAC9CA,MAAK,WAAW,IAAI,iBAAiB,OAAO,cAC5CA,MAAK,WAAW,IAAI,iBAAiB,OAAO,cAC7CA,MAAK,gBAAgB;AACzB,WAAQ,SAAS,OAAQ,IAAI,GAAG,GAAG,MAAM,GAAG,IAAI;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,IAAIA,OAAM,MAAM,QAAQ;AAC3B,QAAI,CAAC,MAAM;AACP,aAAOA;AAAA,IACX;AACA,QAAI,OAAO,SAAS,UAAU;AAC1B,cAAQ,GAAG,cAAc,IAAI,GAAG;AAAA,QAC5B,KAAK;AAED,cAAI,WAAW,KAAKA,MAAK,gBAAgB,IAAI,GAAG;AAC5C,YAAAA,MAAK,gBAAgB,MAAM;AAAA,UAC/B;AACA;AAAA,QACJ,KAAK;AAED,cAAI,WAAW,KAAKA,MAAK,WAAW,IAAI,GAAG;AACvC,YAAAA,MAAK,WAAW,MAAM;AAAA,UAC1B;AACA;AAAA,QACJ,KAAK;AAED,cAAI,WAAW,KAAKA,MAAK,WAAW,IAAI,GAAG;AACvC,YAAAA,MAAK,WAAW,MAAM;AAAA,UAC1B;AACA;AAAA,QACJ,KAAK;AACD,UAAAA,MAAK,SAAS,MAAM;AACpB;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AACD,UAAAA,MAAK,QAAQ,MAAM;AACnB;AAAA,QACJ,KAAK;AACD,gBAAM,IAAI,MAAM,sBAAsB;AAAA,QAC1C,KAAK;AACD,UAAAA,MAAK,SAAS,MAAM;AACpB;AAAA,QACJ,KAAK;AAED,UAAAA,MAAK,QAAQ,CAAC;AACd,UAAAA,MAAK,UAAU,SAAS,KAAK,CAAC;AAC9B;AAAA,QACJ,KAAK;AACD,UAAAA,MAAK,YAAY,MAAM;AACvB;AAAA,MACR;AAAA,IACJ,OACK;AACD,aAAO,QAAQ,IAAI,EAEd,KAAK,CAAC,GAAG,MAAM,eAAe,EAAE,CAAC,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC,CAAC,EAC1D,QAAQ,CAAC,CAACK,OAAMC,OAAM,MAAM;AACzB,WAAG,IAAIN,OAAMK,OAAMC,OAAM;AAAA,MAC7B,CAAC;AAAA,IACT;AACA,WAAON;AAAA,EACX;AAAA,EACA,OAAO,gBAAgBA,OAAM,QAAQ,MAAM;AACvC,WAAO,GAAG,IAAI,GAAG,UAAUA,OAAM,KAAK,GAAG,QAAQ,EAAE;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,UAAUA,OAAMO,MAAK,KAAK;AAC7B,QAAIA,QAAO,MAAM;AACb,MAAAP,QAAO,GAAG,IAAIA,OAAMO,IAAG;AAAA,IAC3B;AACA,WAAO,OAAO,OAAOP,QAAO,GAAG,IAAIA,OAAM,GAAG;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,QAAQ,OAAO,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG;AACpD,QAAI,iBAAiB,MAAM;AACvB,WAAK,MAAM,gBAAgB;AAC3B,gBAAU,MAAM,WAAW;AAC3B,gBAAU,MAAM,WAAW;AAC3B,cAAQ,MAAM,SAAS;AAAA,IAC3B;AACA,WAAO,IAAI,KAAK,cAAc,eAAe,aAAa,OAAO,SAAS,SAAS,EAAE;AAAA,EACzF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,eAAe,YAAY,YAAY;AAC1C,eAAW,SAAS,WAAW,SAAS,CAAC;AACzC,eAAW,WAAW,WAAW,WAAW,CAAC;AAC7C,eAAW,WAAW,WAAW,WAAW,CAAC;AAC7C,eAAW,gBAAgB,WAAW,gBAAgB,CAAC;AACvD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA,EAGA,WAAW,eAAe;AACtB,UACI,QAAO,oBAAI,KAAK,GAAE,YAAY,GAC9B,MAAO,IAAI,KAAK,MAAM,GAAG,CAAC,GAC1B,MAAO,IAAI,KAAK,MAAM,GAAG,CAAC;AAC9B,WAAO,IAAI,kBAAkB,MAAM,IAAI,kBAAkB;AAAA,EAC7D;AAAA,EACA,OAAO,MAAMA,OAAM;AACf,UACI,OAAOA,MAAK,YAAY,GACxB,MAAO,IAAI,KAAK,MAAM,GAAG,CAAC,GAC1B,MAAO,IAAI,KAAK,MAAM,GAAG,CAAC;AAC9B,WAAOA,MAAK,kBAAkB,IAAI,KAAK,IAAI,IAAI,kBAAkB,GAAG,IAAI,kBAAkB,CAAC;AAAA,EAC/F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,SAAS,OAAO,QAAQ;AAC3B,WAAO,QAAQ;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,QAAQ,OAAO,QAAQ;AAC1B,WAAO,QAAQ;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,QAAQ,OAAO,QAAQ,OAAO,MAAM;AACvC,QAAI,SAAS,MAAM;AAGf,aAAO,SAAS,UAAU,MAAM,QAAQ,MAAM,OAAO,QAAQ;AAAA,IACjE;AACA,WAAO,GAAG,QAAQ,OAAO,IAAI,IAAI,GAAG,QAAQ,QAAQ,IAAI,MAAM;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,QAAQ,OAAO,QAAQ,OAAO,MAAM;AAEvC,QAAI,MAAM;AACN,cAAQ,GAAG,QAAQ,OAAO,IAAI;AAC9B,eAAS,GAAG,QAAQ,QAAQ,IAAI;AAAA,IACpC;AAEA,QAAI,QAAQ;AAAQ,aAAO;AAC3B,QAAI,QAAQ;AAAQ,aAAO;AAC3B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,MAAMA,OAAMO,MAAK,KAAK;AACzB,QAAI,CAAC,MAAMP,KAAI,GAAG;AACd,UAAIO,QAAO,MAAM;AACb,QAAAP,QAAO,KAAK,IAAIA,OAAMO,IAAG;AAAA,MAC7B;AACA,UAAI,OAAO,MAAM;AACb,QAAAP,QAAO,KAAK,IAAIA,OAAM,GAAG;AAAA,MAC7B;AACA,aAAO,IAAI,KAAKA,KAAI;AAAA,IACxB;AAAA,EACJ;AAAA,EACA,OAAO,WAAW,OAAO,QAAQ;AAC7B,WAAO,GAAG,QAAQ,OAAO,QAAQ,GAAG,MAAM;AAAA,EAC9C;AAAA,EACA,OAAO,WAAW,OAAO,QAAQ;AAC7B,WAAO,MAAM,SAAS,MAAM,OAAO,SAAS,KACxC,MAAM,WAAW,MAAM,OAAO,WAAW,KACzC,MAAM,WAAW,MAAM,OAAO,WAAW,KACzC,MAAM,gBAAgB,MAAM,OAAO,gBAAgB;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,UAAUA,OAAM,MAAM;AACzB,WAAO,GAAG,QAAQA,OAAM,GAAG,QAAQA,OAAM,IAAI,CAAC;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,cAAcA,OAAM,OAAO,KAAK;AAEnC,WAAO,MAAM,QAAQ,KAAKA,MAAK,QAAQ,KAAKA,MAAK,QAAQ,IAAI,IAAI,QAAQ;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,mBAAmBA,OAAM,OAAO,KAAK;AACxC,WAAO,MAAM,QAAQ,KAAKA,MAAK,QAAQ,KAAKA,MAAK,QAAQ,KAAK,IAAI,QAAQ;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,eAAe,YAAY,UAAU,YAAY,UAAU;AAC9D,WAAO,GAAG,cAAc,YAAY,YAAY,QAAQ,KACpD,GAAG,cAAc,YAAY,YAAY,QAAQ;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,aAAa,OAAO,OAAO;AAC9B,WAAO,KAAK,KAAK,eAAe,GAAG,cAAc,KAAK,CAAC,IAAI,eAAe,GAAG,cAAc,KAAK,CAAC,CAAC;AAAA,EACtG;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,EA0BA,OAAO,iBAAiB,WAAW,SAAS,gBAAgB,cAAc;AACtE,WAAQ,iBAAiB,aAAc,KAAM,UAAU,gBAAiB;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,WAAW,eAAe;AAEtB,QAAI,GAAG,iBAAiB,MAAM;AAE1B,SAAG,gBAAgB,KAAK,SAAS,iBAAiB,KAAK;AAAA,IAC3D;AACA,WAAO,GAAG;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,WAAW,iBAAiB;AACxB,WAAO,EAAE,GAAG,KAAK,SAAS,mBAAmB,EAAE;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,WAAW,wBAAwB;AAE/B,WAAO,OAAO,KAAK,KAAK,cAAc,EAAE,IAAI,MAAM;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,WAAW,WAAW;AAClB,WAAO,EAAE,GAAG,KAAK,SAAS,aAAa,EAAE;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,IAAIA,OAAM,MAAM;AACnB,YAAQ,GAAG,cAAc,IAAI,GAAG;AAAA,MAC5B,KAAK;AACD,eAAOA,MAAK,gBAAgB;AAAA,MAChC,KAAK;AACD,eAAOA,MAAK,WAAW;AAAA,MAC3B,KAAK;AACD,eAAOA,MAAK,WAAW;AAAA,MAC3B,KAAK;AACD,eAAOA,MAAK,SAAS;AAAA,MACzB,KAAK;AAAA,MACL,KAAK;AACD,eAAOA,MAAK,QAAQ;AAAA,MACxB,KAAK;AACD,eAAO,QAAQ,EAAEA,KAAI;AAAA,MACzB,KAAK;AACD,eAAOA,MAAK,SAAS;AAAA,MACzB,KAAK;AACD,eAAO,KAAK,MAAMA,MAAK,SAAS,IAAI,CAAC,IAAI;AAAA,MAC7C,KAAK;AACD,eAAOA,MAAK,YAAY;AAAA,IAChC;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,WAAWA,OAAM;AACpB,UACI,WAAWA,MAAK,YAAY,GAC5B,WAAW,IAAI,KAAK,WAAW,GAAG,GAAG,CAAC,IAAI,IAAI,KAAK,UAAU,GAAG,CAAC;AACrE,WAAO,KAAK,GAAG,OAAO,QAAQ;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,YAAYA,OAAM;AACrB,WAAO,KAAK,IAAI,KAAKA,MAAK,YAAY,GAAGA,MAAK,SAAS,GAAG,EAAE,EAAE,QAAQ;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,WAAWA,OAAM;AACpB,UACI,WAAWA,MAAK,YAAY,GAC5BD,SAAWC,MAAK,SAAS,GACzBI,OAAWJ,MAAK,QAAQ,GACxB,WAAW,IAAI,KAAK,UAAUD,QAAOK,OAAM,CAAC,IAAI,IAAI,KAAK,UAAUL,QAAOK,IAAG;AACjF,WAAO,KAAK,GAAG,QAAQ,QAAQ;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,0BAA0BJ,OAAM,MAAM;AACzC,QAAI;AACJ,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,iBAAS,GAAG,eAAe,GAAG,YAAYA,KAAI,GAAG,KAAK;AACtD;AAAA,MACJ,KAAK;AACD,iBAAS,GAAG,eAAe,GAAG,WAAWA,KAAI,GAAG,KAAK;AACrD;AAAA,MACJ,KAAK;AACD,iBAAS,GAAG,eAAe,GAAG,WAAWA,KAAI,GAAG,MAAM;AACtD;AAAA,MACJ;AACI,iBAAS,GAAG,eAAe,IAAI;AAAA,IACvC;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,oBAAoBA,OAAM;AAC7B,WAAO,IAAI,KAAKA,MAAK,YAAY,GAAGA,MAAK,SAAS,GAAG,CAAC;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,mBAAmBA,OAAM;AAC5B,WAAO,IAAI,KAAKA,MAAK,YAAY,GAAGA,MAAK,SAAS,IAAI,GAAG,CAAC;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,IAAI,OAAO,QAAQ;AACtB,WAAO,MAAM,QAAQ,IAAI,OAAO,QAAQ,IAAI,QAAQ;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,IAAI,OAAO,QAAQ;AACtB,WAAO,MAAM,QAAQ,IAAI,OAAO,QAAQ,IAAI,QAAQ;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,QAAQA,OAAM,MAAM,YAAY,GAAG,eAAe,GAAG,cAAc;AACtE,QAAI,SAAS,QAAQ;AACjB,YACI,KAAM,GAAG,MAAMA,KAAI,GACnBI,OAAM,GAAG,OAAO;AACpB,SAAG,QAAQ,IAAI,OAAO,KAAK;AAC3B,SAAG,IAAI,IAAI,eAAeA,OAAM,KAAK,aAAa,gBAAgBA,OAAM,IAAI,KAAK,OAAO,KAAK;AAE7F,UAAI,GAAG,OAAO,MAAM,cAAc;AAC9B,WAAG,IAAI,IAAI,GAAG,MAAM;AAAA,MACxB;AACA,aAAO;AAAA,IACX;AACA,WAAO,GAAG,QAAQ,GAAG,IAAIJ,OAAM,WAAW,IAAI,GAAG,MAAM,KAAK;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,OAAO,YAAYA,OAAM;AACrB,WAAO,GAAG,OAAOA,KAAI,KAAK,CAAC,MAAMA,KAAI;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,OAAO,OAAO;AAEjB,WAAO,SAASQ,UAAS,KAAK,KAAK,MAAMC;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,kBAAkBT,OAAM,QAAQ,OAAO,oBAAoB,OAAO;AACrE,QAAI,UAAU,GAAG,IAAI,oBAAoBA,QAAO,GAAG,UAAUA,OAAM,KAAK,GAAG,GAAG,KAAK;AAEnF,QAAI,QAAQ,QAAQ,MAAMA,MAAK,QAAQ,GAAG;AACtC,YACI,gBAAgB,GAAG,IAAI,GAAG,UAAUA,OAAM,KAAK,GAAG,GAAG,KAAK,EAAE,kBAAkB,GAC9E,aAAgBA,MAAK,kBAAkB;AAC3C,gBAAU,GAAG,IAAI,SAAS,aAAa,eAAe,QAAQ;AAAA,IAClE;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,oBAAoBA,OAAM,oBAAoB,OAAO;AACxD,UAAM,WAAW,oBAAoBA,QAAO,GAAG,UAAUA,OAAM,IAAI;AAEnE,QAAI,WAAWA,OAAM;AACjB,aAAO;AAAA,IACX,OACK;AACD,aAAO,GAAG,IAAI,UAAU,IAAI,KAAK;AAAA,IACrC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,mBAAmB,WAAW,UAAU,WAAW;AACtD,UACI,YAAa,UAAU,SAAS,MAAM,QAAQ,SAAS,IACjD,YAAW,OAAO,WAAW,MAAM,IACnC,GAAG,YAAW,OAAO,WAAW,KAAK,CAAC,MAAM,YAAW,OAAO,SAAS,KAAK,CAAC,IACnF,OAAO,YAAW,cAAc,SAAS;AAC7C,WAAO,GAAG,KAAK,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,cAAcA,OAAM,eAAe,YAAW,cAAc;AAC/D,UACI,QAAY,IAAI,KAAKA,MAAK,YAAY,GAAG,GAAG,CAAC,GAC7C,QAAY,IAAI,KAAKA,MAAK,YAAY,GAAG,IAAI,EAAE,GAC/C,WAAY,aAAa,MAAM,OAAO,IAAI,YAAY,GACtD,UAAY,aAAa,MAAM,OAAO,IAAI,YAAY,GACtD,YAAY,WAAWA,OAAM,KAAK;AACtC,QAAI;AAEJ,QAAI,WAAW,GAAG;AACd,mBAAa,KAAK,OAAO,YAAY,WAAW,KAAK,CAAC,IAAI;AAAA,IAC9D,OACK;AACD,mBAAa,KAAK,OAAO,YAAY,WAAW,KAAK,CAAC;AAAA,IAC1D;AACA,QAAI,YAAY;AACZ,UAAI,OAAOA,MAAK,YAAY;AAE5B,UAAI,eAAe,MAAM,UAAU,GAAG;AAClC;AACA,qBAAa;AAAA,MACjB;AACA,aAAO,CAAC,MAAM,UAAU;AAAA,IAC5B;AAGA,UAAM,qBAAqB,YAAW,cAAc,IAAI,KAAKA,MAAK,YAAY,IAAI,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/F,WAAO,CAACA,MAAK,YAAY,IAAI,GAAG,kBAAkB;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,YAAY,OAAO,MAAM;AAC5B,WAAO,GAAG,cAAc,IAAI;AAC5B,QAAI,UAAU;AAAG,cAAQ;AACzB,WAAO,QAAQ,MAAM;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,uBAAuB,UAAU,MAAM,iBAAiB,OAAO;AAClE,eAAW,GAAG,cAAc,QAAQ;AACpC,WAAO,GAAG,cAAc,IAAI;AAC5B,QAAI,aAAa;AAAM,aAAO;AAG9B,QAAI,iBAAiB,QAAQ,KAAK,iBAAiB,QAAQ,EAAE,IAAI,MAAM,kBAAkB,iBAAiB,QAAQ,EAAE,IAAI,IAAI,IAAI;AAC5H,aAAO,IAAI,GAAG,GAAG,MAAM,GAAG,QAAQ;AAAA,IACtC;AACA,QAAI,iBAAiB,IAAI,KAAK,iBAAiB,IAAI,EAAE,QAAQ,MAAM,kBAAkB,iBAAiB,IAAI,EAAE,QAAQ,IAAI,IAAI;AACxH,aAAO,GAAG,GAAG,UAAU,GAAG,IAAI;AAAA,IAClC;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,mBAAmB,MAAM;AAG5B,WAAO,GAAG,cAAc,IAAI;AAE5B,WAAO,GAAG,WAAW,IAAI,EAAE;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAO,uBAAuB,MAAM,SAAS,OAAO;AAChD,UAAM,aAAa,KAAK,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,EAAE,YAAY;AAEjE,WAAO,GAAG,cAAc,IAAI;AAG5B,WAAO,GAAG,cAAc,IAAI;AAG5B,WAAO,GAAG,WAAW,IAAI,EAAE,SAAS,WAAW,QAAQ;AAEvD,QAAI,YAAY;AACZ,aAAO,aAAa,WAAW,IAAI;AAAA,IACvC;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,cAAc,MAAM;AACvB,QAAI,CAAC,MAAM;AACP,aAAO;AAAA,IACX;AACA,UAAM,YAAY,KAAK,YAAY;AACnC,QAAI,cAAc,QAAQ;AACtB,aAAO;AAAA,IACX;AACA,WAAO,mBAAmB,SAAS,SAAS,IAEtC,YAEA,gBAAgB,IAAI,KAAK,gBAAgB,SAAS;AAAA,EAC5D;AAAA,EACA,OAAO,cAAc,MAAM;AAEvB,WAAO,GAAG,cAAc,IAAI,KAAK,GAAG,cAAc,GAAG,cAAc,IAAI,CAAC;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,kBAAkB,OAAO,KAAK,MAAM,YAAY;AACnD,WAAO,GAAG,KAAK,OAAO,KAAK,MAAM,UAAU;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,eAAe,WAAW,WAAW;AACxC,WAAO,EAAE,cAAc,aAAa,cAAc;AAAA,EACtD;AAAA,EACA,OAAO,eAAe,MAAM;AACxB,WAAO,mBAAmB,eAAe,GAAG,cAAc,IAAI,CAAC,IAAI,CAAC,KAAK;AAAA,EAC7E;AAAA,EACA,OAAO,cAAc,MAAM;AACvB,WAAO,mBAAmB,eAAe,GAAG,cAAc,IAAI,CAAC,IAAI,CAAC,KAAK;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,OAAO,MAAM,MAAM,WAAW,MAAM,cAAc;AAC9C,WAAO,GAAG,KAAK,SAAS,MAAM,WAAW,MAAM,YAAY;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,OAAO,MAAM,MAAM,WAAW,MAAM,cAAc;AAC9C,WAAO,GAAG,KAAK,SAAS,MAAM,WAAW,MAAM,YAAY;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,OAAO,KAAK,MAAM,WAAW,MAAM,cAAc;AAC7C,WAAO,GAAG,KAAK,QAAQ,MAAM,WAAW,MAAM,YAAY;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,KAAK,WAAW,MAAM,WAAW,MAAM,eAAe,GAAG,cAAc;AAC1E,UAAM,SAAS,QAAQ,SAAS;AAChC,QAAI,OAAO,cAAc,UAAU;AAC/B,kBAAY,GAAG,cAAc,SAAS;AAAA,IAC1C;AACA,QAAI,QAAQ,SAAS,SAAS,GAAG;AAI7B,YAAM,YAAY,UAAU,aAAa,UAAU;AAGnD,cAAQ,UAAU,MAAM;AAAA,QACpB,KAAK,QACL;AACI,cAAI,CAAC,MAAM;AACP,kBAAM,UAAU,KAAK,OAAO;AAG5B,mBAAO,GAAG;AAAA,cACN,GAAG,UAAU,IAAI;AAAA,cACjB,WAAW,eAAe,eAAe,UAAU,EAAE,UAAU,eAAe;AAAA,cAC9E;AAAA,YACJ;AAAA,UACJ;AACA,iBAAO,GAAG,SAAS,EAAE,MAAM,GAAG,YAAY,CAAC,SAAS,IAAI;AAAA,QAC5D;AAAA,QACA,KAAK,SACL;AAGI,iBAAO,GAAG,SAAS,IAAI;AACvB,cAAI;AAEJ,cAAI,MAAM;AACN,mBAAO,GAAG,SAAS,IAAI;AACvB,2BAAe,OAAO,OAAO,OAAO,MAAM,SAAS;AAAA,UACvD,OACK;AACD,2BAAe,OAAO,MAAM,SAAS;AAAA,UACzC;AAEA,iBAAO,GAAG,aAAa,YAAY;AAAA,QACvC;AAAA,QACA,KAAK;AACD,iBAAO,GAAG,SAAS,EAAE,MAAM,GAAG,YAAY,CAAC,WAAW,IAAI;AAAA,QAC9D,KAAK;AACD,iBAAO,GAAG,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE,WAAW,IAAI;AAAA,QAC/D,KAAK;AAED,iBAAO,GAAG,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE,UAAU,IAAI;AAAA,MAClE;AAEA,kBAAY,GAAG,GAAG,MAAM,WAAW,UAAU,IAAI;AAAA,IACrD;AACA,UAAM,gBAAgB,KAAK,kBAAkB,IAAI,MAAO;AAExD,QAAI,MAAM;AACN,YACI,gBAAgB,KAAK,kBAAkB,IAAI,MAAO,IAIlD,OAAiB,OAAO,OAAQ,gBAAgB,eAChD,cAAgB,IAAI,KAAK,KAAK,QAAQ,IAAI,OAAO,MAAM,SAAS,CAAC,GACjE,YAAgB,gBAAiB,YAAY,kBAAkB,IAAI,MAAO;AAI9E,UAAI,WAAW;AACX,WAAG,IAAI,aAAa,CAAC,WAAW,MAAM,KAAK;AAAA,MAC/C;AACA,aAAO,IAAI,KAAK,WAAW;AAAA,IAC/B,OACK;AAMD,aAAO,IAAI,KAAK,OAAO,KAAK,QAAQ,IAAI,eAAe,SAAS,IAAI,aAAa;AAAA,IACrF;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,OAAO,cAAc,OAAO,gBAAgB,MAAM,aAAa;AAtnFnE,QAAAG;AAunFQ,UACI,gBAAgB,gBAAgB,4BAA4B,yBAC5D,QAAgB,cAAc,KAAK,KAAK;AAC5C,QAAI,SAAS,QAAQ,CAAC,OAAO;AACzB,aAAO;AAAA,IACX;AACA,UACI,YAAY,aAAYA,MAAA,MAAM,CAAC,MAAP,gBAAAA,IAAU,QAAQ,KAAK,IAAI,GACnD,OAAY,GAAG,cAAc,MAAM,CAAC,CAAC,KAAK;AAC9C,QAAI,CAAC,MAAM;AACP,aAAO;AAAA,IACX;AACA,WAAO;AAAA,MACH;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,cAAc,UAAU;AAG3B,UAAM,YAAY,YAAY,OAAO,OAAO,GAAG,cAAc,KAAK,SAAS,YAAY,CAAC;AACxF,QAAI,CAAC,WAAW;AACZ,aAAO;AAAA,IACX;AAEA,aAAS,cAAc,GAAG,cAAc,mBAAmB,QAAQ,eAAe;AAC9E,UAAI,UAAU,cAAc,CAAC,GAAG;AAC5B,eAAO,mBAAmB,WAAW;AAAA,MACzC;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,OAAO,aAAaH,QAAO,oBAAI,KAAK,GAAG;AACnC,QAAI,CAACA,OAAM;AACP;AAAA,IACJ;AACA,UAAM,kBAAkBA,MAAK,kBAAkB;AAE/C,QAAI,CAAC;AAAiB,aAAO;AAC7B,YAAQ,kBAAkB,IAAI,MAAM,OAChC,KAAK,IAAI,KAAK,MAAM,kBAAkB,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,IACrE,MACA,KAAK,IAAI,kBAAkB,EAAE,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG;AAAA,EACjE;AAAA,EACA,OAAO,eAAe;AAClB,UACIU,YAAgB,oBAAI,KAAK,qBAAqB,GAC9C,WAAgB,GAAG,aAAa,CAAC,GACjC,gBAAgB,GAAG,kBAAkB,CAAC;AAC1C,aAAS,SAAS;AAClB,kBAAc,SAAS;AACvB,aAASN,OAAM,GAAGA,OAAM,GAAGA,QAAO;AAC9B,MAAAM,UAAS,QAAQN,IAAG;AACpB,eAAS,KAAK,GAAG,OAAOM,WAAU,MAAM,CAAC;AACzC,oBAAc,KAAK,GAAG,OAAOA,WAAU,KAAK,CAAC;AAAA,IACjD;AACA,OAAG,YAAY;AACf,OAAG,iBAAiB;AAAA,EACxB;AAAA,EACA,OAAO,cAAc;AACjB,WAAO,GAAG;AAAA,EACd;AAAA,EACA,OAAO,WAAWN,MAAK;AACnB,WAAO,GAAG,UAAUA,IAAG;AAAA,EAC3B;AAAA,EACA,OAAO,mBAAmB;AACtB,WAAO,GAAG;AAAA,EACd;AAAA,EACA,OAAO,gBAAgBA,MAAK;AACxB,WAAO,GAAG,eAAeA,IAAG;AAAA,EAChC;AAAA,EACA,OAAO,iBAAiB;AACpB,UACIM,YAAkB,oBAAI,KAAK,qBAAqB,GAChD,aAAkB,GAAG,eAAe,CAAC,GACrC,kBAAkB,GAAG,oBAAoB,CAAC,GAC1C,kBAAkB,CAAC,GACnB,uBAAuB,CAAC;AAC5B,eAAW,SAAS;AACpB,oBAAgB,SAAS;AACzB,aAASX,SAAQ,GAAGA,SAAQ,IAAIA,UAAS;AACrC,MAAAW,UAAS,SAASX,MAAK;AACvB,YAAM,YAAY,GAAG,OAAOW,WAAU,MAAM;AAC5C,iBAAW,KAAK,SAAS;AACzB,YAAM,iBAAiB,GAAG,OAAOA,WAAU,KAAK;AAChD,sBAAgB,KAAK,cAAc;AACnC,sBAAgB,UAAU,YAAY,CAAC,IAAI,EAAE,MAAO,WAAW,OAAQX,OAAM;AAC7E,2BAAqB,eAAe,YAAY,CAAC,IAAI,EAAE,MAAO,gBAAgB,OAAQA,OAAM;AAAA,IAChG;AACA,OAAG,cAAc;AACjB,OAAG,mBAAmB;AACtB,OAAG,mBAAmB;AACtB,OAAG,wBAAwB;AAAA,EAC/B;AAAA,EACA,OAAO,qBAAqB;AACxB,WAAO,GAAG;AAAA,EACd;AAAA,EACA,OAAO,kBAAkBA,QAAO;AAC5B,WAAO,GAAG,iBAAiBA,MAAK;AAAA,EACpC;AAAA,EACA,OAAO,gBAAgB;AACnB,WAAO,GAAG;AAAA,EACd;AAAA,EACA,OAAO,aAAaA,QAAO;AACvB,WAAO,GAAG,YAAYA,MAAK;AAAA,EAC/B;AAAA,EACA,WAAW,OAAO,MAAM;AACpB,IAAAY,UAAS;AACT,yBAAqB,CAAC;AACtB,kBAAc,CAAC;AACf,sBAAkB,CAAC;AAAA,EACvB;AAAA,EACA,WAAW,SAAS;AAChB,WAAOA;AAAA,EACX;AAAA,EACA,OAAO,mBAAmB,YAAY,CAAC,GAAG,oBAAoB,CAAC,GAAG;AAC9D,UACI,KAAa,MACb,aAAa,CAAC;AAClB,QAAI,gBAAgB;AACpB,aAAS,IAAI,GAAG,IAAI,kBAAkB,QAAQ,KAAK;AAC/C,YAEI,gBAAgB,kBAAkB,CAAC,GAEnC,eAAgB,UAAU,CAAC;AAC/B,mBAAa,oBAAoB,mBAAmB,CAAC;AAIrD,iBAAW,aAAa,MAAM,IAC1B,WAAW,aAAa,OAAO,YAAY,CAAC,IACxC,WAAW,aAAa,iBAAiB,IACrC,WAAW,aAAa,kBAAkB,YAAY,CAAC,IAAI;AACvE,uBAAiB,GAAG,IAAI,MAAM,EAAE;AAChC,eAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC3C,yBAAiB,GAAG,cAAc,CAAC,CAAC;AAAA,MACxC;AACA,MAAAA,UAAS,GAAG,SAAS,WAAW,KAAK;AACrC,UAAIA,YAAW,SAAS;AAEpB,cAAM,yBAAyB,2BAA2B,CAAC;AAC3D,iBAAS,IAAI,GAAG,IAAI,uBAAuB,QAAQ,KAAK;AACpD,2BAAiB,GAAG,uBAAuB,CAAC,CAAC;AAAA,QACjD;AAAA,MACJ;AACA,uBAAiB,GAAG,aAAa,MAAM,IAAI,aAAa,MAAM,IAAI,aAAa,iBAAiB,IAAI,aAAa,iBAAiB;AAAA,IACtI;AACA,OAAG,aAAa;AAChB,OAAG,gBAAgB,IAAI,OAAO,OAAO,aAAa,IAAI;AAAA,EAC1D;AAAA,EACA,OAAO,cAAc;AACjB,UACI,KAAoB,MACpB,oBAAoB,GAAG,SAAS,sBAAsB,KAAK,CAAC,GAC5D,YAAoB,GAAG,YAAY,GAAG,SAAS,cAAc;AAGjE,QAAI,cAAc,aAAa;AAC3B;AAAA,IACJ;AACA,IAAAA,UAAS,GAAG,SAAS,WAAW,KAAK;AACrC,QAAIA,YAAW,SAAS;AACpB,sBAAgB;AAAA,IACpB,OACK;AACD,sBAAgB,GAAG,SAAS,kBAAkB,KAAK;AAAA,IACvD;AACA,kBAAc,CAAC;AACf,sBAAkB,CAAC;AACnB,kBAAc,CAAC;AACf,yBAAqB,CAAC;AACtB,OAAG,gBAAgB;AACnB,OAAG,mBAAmB,WAAW,iBAAiB;AAElD,OAAG,aAAa;AAChB,OAAG,eAAe;AAAA,EACtB;AAAA;AAEJ;AApjEI,cADiB,aACV,cAAa,cAAc;AADtC,IAAqB,aAArB;AAsjEA,IAAM,KAAK;AACX,GAAG,gBAAgB;AAEnB,sBAAc,IAAI;AAAA,EACd,QAAU;AAAA,EACV,MAAU;AAAA,EACV,SAAU;AACd,CAAC;AAED,IAAI,sBAAc,QAAQ;AACtB,KAAG,YAAY;AACnB;AACA,WAAW,SAAS;;;ACvzFpB,IACI,EAAE,QAAAC,QAAO,IAAI;AADjB,IAEI,aAAc,MAAO,QAAQ,CAAC,MAAM,SAAS,OAAO,SAAS,QAAQ,gBAAgB;AACjF,QACIC,SAAQ,OAAO,SAAS,EAAE,MAAM,GAAG,GACnC,YAAY,EAAE,CAACA,OAAM,CAAC,IAAIA,OAAM,CAAC,IAAIA,OAAM,KAAK,GAAG,IAAI;AAC3D,SAAO,OAAO,QAAQ,KAAK,WAAW,cAAc;AACxD;AAIJ,IAAqB,eAArB,MAAqB,sBAAqB,QAAQ;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,EAuL9C,OAAO,4BAA4B,cAAc,OAAO,OAAO;AAC3D,UAAM,aAAa,CAAC;AACpB,iBAAa,QAAQ,CAAC,MAAM,UAAU;AAClC,YAEI,MAAO,KAAK,IAAI,KAAK,QAAQ,KAAK,IAAI,EAAE,SAAS,EAAE,SAAU,KAAK,IAAI,IAAI;AAC9E,iBAAW,GAAG,IAAI;AAAA,IACtB,CAAC;AACD,WAAO;AAAA,EACX;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,EAmCA,OAAO,4BAA4B,YAAY,OAAO,OAAO;AACzD,WAAO,OAAO,KAAK,UAAU,EAAE,OAAO,SAAO,WAAW,GAAG,CAAC,EAAE,IAAI,SAAO;AACrE,YAAM,OAAO,WAAW,GAAG;AAC3B,WAAK,IAAI,IAAI;AACb,aAAO;AAAA,IACX,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAAQ,GAAG,GAAG,cAAc,OAAO;AAEtC,QACK,MAAM,QAAQ,MAAM,QACpB,MAAM,UAAa,MAAM,UACzB,MAAM,QAAQ,MAAM,QACpB,MAAM,UAAa,MAAM,QAC5B;AACE,aAAO;AAAA,IACX;AAEA,QAAI,KAAK,QAAQ,KAAK,MAAM;AACxB,aAAO;AAAA,IACX;AAEA,QAAI,MAAM,GAAG;AACT,aAAO;AAAA,IACX;AACA,UACI,QAAQ,OAAO,GACf,QAAQ,OAAO;AACnB,QAAI,UAAU,OAAO;AACjB,cAAQ,OAAO;AAAA,QACX,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACD,iBAAO,MAAM;AAAA,MACrB;AACA,cAAQ,MAAM;AAAA,QACV,MAAK,aAAa,QAAQ,aAAa;AAGnC,iBAAO,EAAE,QAAQ,MAAM,EAAE,QAAQ;AAAA,QACrC,MAAK,MAAM,QAAQ,CAAC,KAAK,MAAM,QAAQ,CAAC;AACpC,iBAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,QAAQ,GAAG,QAAQ,GAAG,EAAE,GAAG,GAAG,WAAW,CAAC,IAAI;AAAA,QAC7F,MAAK,UAAU,YAAY,EAAE,YAAY,cAAc,EAAE,YAAY;AACjE,iBAAO,cAAc,GAAG,cAAc,GAAG,GAAG,WAAW,IAAI,aAAa,kBAAkB,GAAG,UAAU,MAAM,aAAa,kBAAkB,GAAG,UAAU;AAAA,MACjK;AAAA,IACJ;AACA,WAAO,OAAO,CAAC,MAAM,OAAO,CAAC;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,OAAO,cAAc,GAAG,GAAG,UAAU,CAAC,GAAG;AAErC,QAAI,MAAM,GAAG;AACT,aAAO;AAAA,IACX;AAEA,QAAI,CAAC,KAAK,CAAC,GAAG;AACV,aAAO;AAAA,IACX;AAEA,UACI,QAAQ,GAAG,KAAK,GAAG,QAAQ,MAAM,GACjC,QAAQ,GAAG,KAAK,GAAG,QAAQ,MAAM;AAErC,QAAI,MAAM,WAAW,MAAM,QAAQ;AAC/B,aAAO;AAAA,IACX;AACA,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,YACI,OAAO,MAAM,CAAC,GACd,OAAO,MAAM,CAAC;AAElB,UAAI,SAAS,MAAM;AACf,eAAO;AAAA,MACX;AACA,YACI,OAAO,EAAE,IAAI,GACb,OAAO,EAAE,IAAI;AAEjB,UAAI,QAAQ,gBAAgB;AACxB,YAAI,QAAQ;AAAA,UACR;AAAA,UACA;AAAA,YACI,OAAS;AAAA,YACT,QAAS;AAAA,UACb;AAAA,UAAG;AAAA,YACC,OAAS;AAAA,YACT,QAAS;AAAA,UACb;AAAA,QACJ,MAAM,OAAO;AACT;AAAA,QACJ;AAAA,MACJ;AAEA,UAAI,QAAQ,UAAU;AAClB,cAAM,SAAS,QAAQ,SAAS,MAAM;AAAA,UAClC,OAAS;AAAA,UACT,QAAS;AAAA,QACb,GAAG;AAAA,UACC,OAAS;AAAA,UACT,QAAS;AAAA,QACb,CAAC;AAED,YAAI,WAAW,OAAO;AAClB,iBAAO;AAAA,QACX;AAEA,YAAI,WAAW,MAAM;AACjB;AAAA,QACJ;AAAA,MACJ;AAEA,UAAI,CAAC,GAAG,QAAQ,MAAM,MAAM,OAAO,GAAG;AAClC,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,UAAU,GAAG,GAAG;AACnB,QAAI,OAAO,CAAC,EAAE,YAAY;AAC1B,QAAI,OAAO,CAAC,EAAE,YAAY;AAC1B,WAAO,EAAE,QAAQ,CAAC,MAAM;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,WAAW,GAAG,GAAG;AACpB,QAAI,aAAa,QAAQ,aAAa,MAAM;AACxC,aAAO,WAAW,SAAS,GAAG,CAAC;AAAA,IACnC;AACA,WAAO,IAAI;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,WAAW,GAAG,GAAG;AACpB,QAAI,aAAa,QAAQ,aAAa,MAAM;AACxC,aAAO,WAAW,QAAQ,GAAG,CAAC;AAAA,IAClC;AACA,WAAO,IAAI;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,KAAK,KAAK;AACb,QAAI,KAAK,KAAK;AACd,QAAI,OAAO,IAAI,gBAAgB,QAAQ;AACnC,YAAM,OAAO,eAAe,CAAC,GAAG,GAAG;AACnC,WAAK,OAAO,KAAK;AACb,gBAAQ,IAAI,GAAG;AACf,YAAI,OAAO;AACP,cAAI,MAAM,gBAAgB,QAAQ;AAC9B,gBAAI,GAAG,IAAI,GAAG,KAAK,KAAK;AAAA,UAC5B,WACS,iBAAiB,OAAO;AAC7B,gBAAI,GAAG,IAAI,MAAM,MAAM;AAAA,UAC3B;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,OACK;AACD,YAAM;AAAA,IACV;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,eAAe,MAAM,QAAQ,OAAO;AACvC,QAAI,MAAM;AACV,SAAK,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAC/B,aAAO,MAAM,CAAC;AACd,UAAI,QAAQ,QAAQ;AAChB,aAAK,IAAI,IAAI,OAAO,IAAI;AAAA,MAC5B;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,iBAAiB,MAAM,QAAQ,OAAO;AACzC,QAAI,QAAQ;AACR,iBAAW,QAAQ,OAAO;AACtB,YAAI,EAAE,QAAQ,SAAS,QAAQ,QAAQ;AACnC,eAAK,IAAI,IAAI,OAAO,IAAI;AAAA,QAC5B;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,QAAQ,QAAQ,QAAQ;AAC3B,UACI,SAAS,CAAC,GACV,OAAO,OAAO,WAAW;AAC7B,QAAI,QAAQ;AACR,iBAAW,KAAK,QAAQ;AACpB,YAAI,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,IAAI,EAAC,iCAAS,KAAI;AAC7C,iBAAO,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AAAA,QAC9B;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,YAAY,SAAS,QAAQ;AAChC,aAAS,UAAU,CAAC;AACpB,QAAI,SAAS;AACT,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,EAAE,GAAG;AACrC,eAAO,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC;AAAA,MACxC;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,OAAO,KAAK,QAAQ,QAAQ,QAAQ;AAChC,UACI,SAAS,CAAC,GACV,OAAO,OAAO,WAAW;AAC7B,QAAI,QAAQ;AACR,UAAI,QAAQ;AACZ,iBAAW,KAAK,QAAQ;AACpB,YAAI,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,IAAI,EAAC,iCAAS,KAAI;AAC7C,iBAAO,KAAK,SAAS,OAAO,GAAG,KAAK,IAAI,CAAC;AACzC,YAAE;AAAA,QACN;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,OAAO,OAAO,QAAQ,QAAQ,QAAQ;AAClC,UACI,SAAS,CAAC,GACV,OAAO,OAAO,WAAW;AAC7B,QAAI,QAAQ;AACR,UAAI,QAAQ;AACZ,iBAAW,KAAK,QAAQ;AACpB,YAAI,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,IAAI,EAAC,iCAAS,KAAI;AAC7C,iBAAO,KAAK,SAAS,OAAO,OAAO,CAAC,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC;AACzD,YAAE;AAAA,QACN;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,WAAW,QAAQ,MAAM;AAC5B,UAAM,aAAa,KAAK,MAAM,GAAG;AACjC,WAAO,WAAW,MAAM,cAAY;AAChC,UAAI,CAAC,UAAU,EAAE,YAAY,SAAS;AAClC,eAAO;AAAA,MACX;AACA,eAAS,OAAO,QAAQ;AACxB,aAAO;AAAA,IACX,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,OAAO,YAAY,QAAQ,oBAAoB;AAC3C,UAAM,SAAS,CAAC;AAChB,eAAW,OAAO,QAAQ;AACtB,UAAID,QAAO,QAAQ,GAAG,GAAG;AACrB,cAAM,QAAQ,yDAAqB;AAEnC,cAAM,gBAAe,+BAAO,UAAS,aAAY,+BAAO,mBAAkB,CAAC,QAAQ,kBAAkB;AACrG,YAAI,gBAAgB,MAAM,QAAQ,OAAO,GAAG,CAAC,GAAG;AAC5C,iBAAO,GAAG,IAAI,OAAO,GAAG,EAAE,MAAM;AAAA,QACpC,WACS,gBAAgB,OAAO,GAAG,aAAa,QAAQ;AACpD,gBAAM,QAAQ,KAAK,YAAY,OAAO,GAAG,CAAC;AAC1C,qBAAW,QAAQ,OAAO;AACtB,mBAAO,GAAG,GAAG,IAAI,IAAI,EAAE,IAAI,MAAM,IAAI;AAAA,UACzC;AAAA,QACJ,OACK;AACD,iBAAO,GAAG,IAAI,OAAO,GAAG;AAAA,QAC5B;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,WAAW,QAAQ,MAAM;AAC5B,SAAK,MAAM,GAAG,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,UAAU;AAClD,UAAI,UAAU,MAAM;AAChB,eAAO;AAAA,MACX;AACA,UAAIA,QAAO,QAAQ,GAAG,GAAG;AACrB,YAAI,UAAU,MAAM,SAAS,GAAG;AAC5B,iBAAO,OAAO,GAAG;AAAA,QACrB,OACK;AACD,iBAAO,OAAO,GAAG;AAAA,QACrB;AAAA,MACJ;AAAA,IACJ,GAAG,MAAM;AAAA,EACb;AAAA;AAAA,EAEA,OAAO,OAAO,MAAM,IAAI;AACpB,UAAM,WAAW,QAAQ,OAAO,IAAI,GAChC,SAAS,QAAQ,OAAO,EAAE,GAC1B,WAAW,OAAO,SAAS;AAC/B,QAAI,aAAa,QAAQ;AACrB,cAAQ,QAAQ;AAAA,QACZ,KAAK;AACD,iBAAO,OAAO,IAAI;AAAA,QACtB,KAAK;AACD,iBAAO,OAAO,IAAI;AAAA,QACtB,KAAK;AAGD,iBAAO,aAAa,CAAC,QAAQ,SAAS,WAAW,SAAS,OAAO,QAAQ,QAAQ,IAAI;AAAA,QACzF,KAAK;AACD,iBAAO,aAAa,CAAC,QAAQ,SAAS,UAAU,OAAO;AAAA,QAC3D,KAAK;AACD,iBAAO,aAAa,CAAC,QAAQ,SAAS,eAAe,SAAY;AAAA,QACrE,KAAK;AACD,iBAAO,YAAY,MAAM,IAAI,IAAI,WAAW,MAAM,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC;AAAA,MACnF;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,OAAO,aAAa,QAAQ,cAAc,WAAW,WAAW,OAAO,MAAM;AACzE,UAAM,cAAc,CAAC;AACrB,QAAIE,SAAQ,OAAO,eAAe,MAAM,GACpC,mBAAmB,OAAO,yBAAyBA,QAAO,YAAY;AAC1E,WAAO,CAAC,oBAAoBA,UAAS,MAAM;AACvC,MAAAA,SAAQ,OAAO,eAAeA,MAAK;AACnC,UAAIA,QAAO;AACP,2BAAmB,OAAO,yBAAyBA,QAAO,YAAY;AAAA,MAC1E;AAAA,IACJ;AACA,QAAI,kBAAkB;AAClB,UAAI,iBAAiB,KAAK;AACtB,oBAAY,MAAM,OAAK;AACnB,2BAAiB,IAAI,KAAK,QAAQ,CAAC;AAEnC,uBAAa,UAAU,KAAK,QAAQ,iBAAiB,IAAI,KAAK,MAAM,CAAC;AAAA,QACzE;AAAA,MACJ,OACK;AACD,oBAAY,MAAM;AAAA,MACtB;AACA,UAAI,iBAAiB,KAAK;AACtB,oBAAY,MAAM,MAAM;AACpB,cAAI,SAAS,iBAAiB,IAAI,KAAK,MAAM;AAC7C,cAAI,WAAW;AACX,qBAAS,UAAU,KAAK,QAAQ,MAAM;AAAA,UAC1C;AACA,iBAAO;AAAA,QACX;AAAA,MACJ,OACK;AACD,oBAAY,MAAM;AAAA,MACtB;AAAA,IACJ,OACK;AACD,kBAAY,MAAM,OAAK;AACnB,eAAO,IAAI,YAAY,EAAE,IAAI;AAC7B,qBAAa,UAAU,KAAK,QAAQ,CAAC;AAAA,MACzC;AACA,kBAAY,MAAM,MAAM;AACpB,YAAI,SAAS,OAAO,IAAI,YAAY,EAAE;AACtC,YAAI,WAAW;AACX,mBAAS,UAAU,KAAK,QAAQ,MAAM;AAAA,QAC1C;AACA,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO,eAAe,QAAQ,cAAc,WAAW;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,OAAO,aAAa,QAAQ,UAAU,MAAM;AACxC,UACI,OAAO,cAAa,sBAAsB,KAAK,WAAW,OAAO,GACjE,eAAe,cAAa,sBAAsB,QAAQ,QAAQ,GAClE,YAAY,IAAI,QAAQ,IACxB,OAAO,MAAM;AAAA,MACT,IAAI,QAAQ;AACR,eAAO,eAAe,aAAa,IAAI,KAAK,IAAI,IAAI,KAAK,SAAS;AAAA,MACtE;AAAA,MACA,IAAI,MAAM,GAAG;AACT,YAAI,cAAc;AACd,uBAAa,IAAI,KAAK,MAAM,CAAC;AAAA,QACjC,OACK;AACD,eAAK,SAAS,IAAI;AAAA,QACtB;AAAA,MACJ;AAAA,IACJ,GACA,WAAW,cAAa,sBAAsB,KAAK,WAAW,OAAO;AACzE,WAAO,eAAe,KAAK,WAAW,KAAK,SAAS;AACpD,WAAO,eAAe,QAAQ,UAAU;AAAA,MACpC,cAAe;AAAA,MACf,KAAM,KAAK,OAAO,SAAS;AAAA,MAC3B,KAAM,KAAK,OAAO,SAAS;AAAA,IAC/B,CAAC;AACD,WAAO,MAAM,OAAO,OAAO,QAAQ;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,kBAAkB,QAAQ,WAAW,OAAO;AAC/C,WAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC7C,UAAI,UAAU;AACV,kBAAU,UAAa,OAAO,OAAO,GAAG;AAAA,MAC5C,OACK;AACD,iBAAS,QAAQ,OAAO,OAAO,GAAG;AAAA,MACtC;AAAA,IACJ,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,oBAAoB,KAAK;AAC5B,WAAO,KAAK,GAAG,EAAE,QAAQ,SAAO,OAAO,IAAI,GAAG,CAAC;AAC/C,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,WAAW,OAAO,MAAM,MAAM;AACjC,UAAM,YAAY,QAAQ,OAAO,KAAK;AACtC,QAAI,SAAS,QAAQ,cAAc,MAAM;AACrC,YAAM,IAAI,MAAM,mBAAmB,SAAS,SAAS,IAAI,eAAe,IAAI,GAAG;AAAA,IACnF;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,aAAa,OAAO,MAAM;AAC7B,OAAG,WAAW,OAAO,UAAU,IAAI;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,eAAe,OAAO,MAAM;AAC/B,OAAG,WAAW,OAAO,YAAY,IAAI;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,YAAY,OAAO,MAAM;AAC5B,OAAG,WAAW,OAAO,SAAS,IAAI;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,eAAe,OAAO,MAAM;AAC/B,QAAI,OAAO,UAAU,cAAc,MAAM,UAAU,MAAM,QAAQ;AAC7D,YAAM,IAAI,MAAM,sBAAsB,IAAI,UAAU,KAAK,yBAAyB;AAAA,IACtF;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,aAAa,OAAO,MAAM;AAC7B,UAAM,WAAW,OAAO,KAAK;AAC7B,QAAI,OAAO,UAAU,YAAY,MAAM,QAAQ,GAAG;AAC9C,YAAM,IAAI,MAAM,sBAAsB,IAAI,UAAU,KAAK,uBAAuB;AAAA,IACpF;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,cAAc,OAAO,MAAM;AAC9B,OAAG,WAAW,OAAO,WAAW,IAAI;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,aAAa,OAAO,MAAM;AAC7B,OAAG,WAAW,OAAO,UAAU,IAAI;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,YAAY,OAAO,MAAM;AAC5B,OAAG,WAAW,OAAO,SAAS,IAAI;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,QAAQ,QAAQ,QAAQ;AAC3B,QAAI,YAAY;AACZ,aAAO,WAAW,QAAQ,MAAM;AAAA,IACpC;AACA,WAAO,OAAO,QAAQ,MAAM;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAAQ,QAAQ,OAAO,GAAG;AAC7B,WAAO,KAAK,MAAM,SAAS,IAAI,IAAI;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,MAAM,QAAQ,QAAQ;AAEzB,QAAI,UAAU,MAAM;AAChB,aAAO;AAAA,IACX;AACA,UAAM,SAAS,MAAM;AACrB,WAAO,KAAK,MAAM,SAAS,MAAM,IAAI;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,WAAWC,MAAK,MAAMC,eAAc;AACvC,UACI,UAAY,MAAM,QAAQ,IAAI,IAAI,OAAO,OAAO,SAAS,WAAW,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,GAC3F,YAAY,QAAQ,WAAW,GAC/B,SAAY,QAAQ,CAAC,GACrB,WAAYD,KAAI,IAAI,MAAM,IAAIA,KAAI,IAAI,MAAM,IAAIA,KAAI,IAAI,QAAQ,YAAYC,gBAAe,CAAC,CAAC,EAAE,IAAI,MAAM;AAE7G,QAAI,WAAW;AACX,aAAO;AAAA,IACX;AAEA,WAAO,GAAG,eAAe,UAAU,QAAQ,MAAM,CAAC,GAAGA,aAAY;AAAA,EACrE;AACJ;AACA,IAAM,KAAK;AACX,aAAa,SAAS;;;ACv6BtB,IAAI;AACJ,IACI,aAAoB,CAAC,oBAAoB,sBAAsB,uBAAuB,mBAAmB;AAD7G,IAEI,aAAoB,CAAC,cAAc,gBAAgB,iBAAiB,aAAa;AAFrF,IAGI,cAAoB,CAAC,eAAe,iBAAiB,kBAAkB,cAAc;AAHzF,IAII,cAAoB;AAAA,EAChB,GAAI;AAAA,EACJ,GAAI;AAAA,EACJ,GAAI;AAAA,EACJ,GAAI;AACR;AATJ,IAUI,eAAoB;AAAA,EAChB,GAAI;AAAA,EACJ,GAAI;AAAA,EACJ,GAAI;AAAA,EACJ,GAAI;AACR;AAfJ,IAgBI,cAAoB;AAhBxB,IAiBI,eAAoB;AAjBxB,IAkBI,YAAoB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAvBJ,IAwBI,cAAoB;AAAA,EAChB,GAAI;AAAA,EACJ,GAAI;AAAA,EACJ,GAAI;AAAA,EACJ,GAAI;AACR;AA7BJ,IA8BI,oBAAoB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAnCJ,IAoCI,gBAAoB;AAAA,EAChB,IAAK;AAAA,EACL,IAAK;AAAA,EACL,IAAK;AAAA,EACL,IAAK;AACT;AAzCJ,IA0CIC,cAAoB,OAAO,OAAO,CAAC,CAAC;AA1CxC,IA2CI,cAAoB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;AA3C5C,IA4CI,kBAAoB,CAAC,SAAS,QAAQ;AA5C1C,IA6CI,aAAoB,CAAC,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO;AAAA;AAAA,EAExD,MAAM,QAAQ,GAAG,IAAI,WAAW,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,OAAO,QAAQ,IAAI;AAAA;AA/CpF,IAgDI,YAAoB,CAAC,KAAK,OAAO,QAAQ,SACrC,MAAM,QAAQ,GAAG,IACX,WAAW,MAAM,MAAM,GAAG,IAEzB,OAAO,IAAI,QAAQ,WAAY,CAAC,IAAI,KAAK,IAAI,OAAO,IAAI,QAAQ,IAAI,IAAI,IAAI,CAAC,KAAK,OAAO,QAAQ,IAAI;AApDpH,IAwDI,aAAoB,CAAC,WAAW,QAAQ;AACpC,QAAM,QAAe,YAAY,KAAK,SAAS,GAC3C,SAAe,MAAM,CAAC,GACtB,aAAe,MAAM,CAAC,GACtB,KAAe,SAAS,MAAM,CAAC,KAAK,EAAE,GACtC,KAAe,SAAS,MAAM,CAAC,KAAK,EAAE,GACtC,WAAe,OAAO,EAAE,YAAY,MAAM,IAAI,KAAK,MAAM,KAAK,IAC9D,eAAe,OAAO,EAAE,YAAY,UAAU,IAAI,KAAK,MAAM,KAAK,IAClE,cAAe,cAAc,SAAS,UAAU;AAEpD,SAAO;AAAA,IACH,kBAAuB,SAAS;AAAA;AAAA,IAChC;AAAA;AAAA,IACA;AAAA;AAAA,IACA,sBAAuB,aAAa;AAAA;AAAA,IACpC;AAAA;AAAA,IACA;AAAA;AAAA,IACA,WAAuB,YAAY,UAAU;AAAA;AAAA,IAC7C;AAAA;AAAA,EACJ;AACJ;AA5EJ,IA8EI,YAAoB,WAChB,GAAG,WAAW,YAAY,MAAM,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,QAAQ,IACjE,WAAW,YAAY,MAAM,UAAU,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,YAAY;AAhFtF,IAiFI,gBAAoB,YAAU;AAC1B,MAAI,UAAU,MAAM;AAChB,WAAO;AAAA,EACX,WACS,OAAO,WAAW,UAAU;AACjC,WAAO,CAAC,QAAQ,MAAM;AAAA,EAC1B;AACA,SAAO;AACX;AAOJ,IAAqB,YAArB,MAAqB,WAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkQ3B,YAAY,GAAG,GAAG,OAAO,QAAQ;AAhQjC;AAAA,uCAAc;AAiQV,iBAAa,aAAa,GAAG,aAAa;AAC1C,iBAAa,aAAa,GAAG,aAAa;AAC1C,iBAAa,aAAa,OAAO,iBAAiB;AAClD,iBAAa,aAAa,QAAQ,kBAAkB;AACpD,UAAM,KAAK;AAEX,QAAI,QAAQ,GAAG;AACX,WAAK;AACL,cAAQ,CAAC;AAAA,IACb;AACA,QAAI,SAAS,GAAG;AACZ,WAAK;AACL,eAAS,CAAC;AAAA,IACd;AACA,OAAG,KAAU;AACb,OAAG,KAAU;AACb,OAAG,SAAU;AACb,OAAG,UAAU;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAvQA,OAAO,KAAK,SAAS,YAAY,kBAAkB;AAE/C,QAAI,OAAO,YAAY,UAAU;AAC7B,gBAAU,SAAS,cAAc,OAAO;AAAA,IAC5C,YAES,mCAAS,cAAa,KAAK,wBAAwB;AACxD,gBAAU,QAAQ,QAAQ,QAAQ;AAAA,IACtC;AACA,QAAI,OAAO,eAAe,UAAU;AAChC,mBAAa,SAAS,cAAc,UAAU;AAAA,IAClD;AACA,QAAI,WAAW,QAAQ,QAAQ,aAAa;AACxC,aAAO;AAAA,IACX;AACA,cAAU,QAAQ,WAAW;AAC7B,QAAI,qBAAqB,UAAa,OAAO,eAAe,WAAW;AACnE,yBAAmB;AACnB,mBAAmB;AAAA,IACvB;AACA,QAAI,EAAC,yCAAY,cAAa;AAC1B,UAAI,YAAY;AACZ,YAAI,EAAE,YAAY,UAAU,IAAI;AAChC,YAAI,cAAc,YAAY,eAAe,SAAS,MAAM;AACxD,uBAAa,YAAY;AAAA,QAC7B;AACA,qBAAa,WAAU,KAAK,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,SAAS;AAAA,MAC7E,OACK;AACD,YAAI,CAAC,WAAW;AACZ,sBAAY,IAAI,WAAU,GAAG,GAAG,GAAG,CAAC;AAAA,QACxC;AACA,qBAAa;AAAA,MACjB;AAAA,IACJ;AAGA,UAEI,aAAe,YAAY,YAAY,YAAY,YACnD,eAAe,YAAY,SAAS,QAAQ,SAAS,KAAK,iBAAiB,GAC3E,WAAe,gBAAgB,QAAQ,sBAAsB,GAC7D,WAAe,eAGT,IAAI,WAAU,SAAS,MAAM,SAAS,KAAK,SAAS,OAAO,SAAS,KAAK,cAAc,YAAY,IACnG,aACI,IAAI,WAAU,GAAG,GAAG,WAAW,YAAY,WAAW,WAAW,IACjE,QAAQ,sBAAsB,GACxC,eAAgB,oBAAoB,aAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,aAAa,WAAW,WAAW;AAC9G,WAAO,IAAI;AAAA,MACP,SAAS,OAAO,aAAa,CAAC,IAAI,WAAW;AAAA,MAC7C,SAAS,MAAM,aAAa,CAAC,IAAI,WAAW;AAAA,MAC5C,SAAS;AAAA,MACT,SAAS;AAAA,IACb;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,WAAW,SAAS,YAAY;AACnC,WAAO,WAAU;AAAA,MAAK;AAAA,MAAS;AAAA;AAAA,MAAqC;AAAA,IAAI;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,MAAM,SAAS,YAAY,mBAAmB,OAAO;AACxD,UAAM,SAAS,KAAK,KAAK,SAAS,YAAY,gBAAgB;AAE9D,QAAI,SAAS,KAAK,SAAS,OAAO,GAAG;AACjC,YAAM,UAAU,UAAU,cAAc,SAAS,UAAU;AAC3D,aAAO,KAAK,WAAW,QAAQ,YAAY,CAAC,CAAC;AAC7C,aAAO,KAAK,WAAW,QAAQ,YAAY,CAAC,CAAC;AAC7C,aAAO,SAAS,WAAW,QAAQ,YAAY,CAAC,CAAC;AACjD,aAAO,UAAU,WAAW,QAAQ,YAAY,CAAC,CAAC;AAAA,IACtD;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,QAAQ,SAAS,YAAY,mBAAmB,OAAO;AAC1D,UAAM,SAAS,KAAK,KAAK,SAAS,YAAY,gBAAgB;AAE9D,QAAI,SAAS,KAAK,SAAS,OAAO,GAAG;AACjC,YAAM,UAAU,UAAU,cAAc,SAAS,UAAU,GACvD,UAAU,UAAU,cAAc,SAAS,WAAW;AAC1D,aAAO,KAAK,WAAW,QAAQ,YAAY,CAAC,CAAC,IAAI,WAAW,QAAQ,aAAa,CAAC,CAAC;AACnF,aAAO,KAAK,WAAW,QAAQ,YAAY,CAAC,CAAC,IAAI,WAAW,QAAQ,aAAa,CAAC,CAAC;AACnF,aAAO,SAAS,WAAW,QAAQ,YAAY,CAAC,CAAC,IAAI,WAAW,QAAQ,aAAa,CAAC,CAAC;AACvF,aAAO,UAAU,WAAW,QAAQ,YAAY,CAAC,CAAC,IAAI,WAAW,QAAQ,aAAa,CAAC,CAAC;AAAA,IAC5F;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,OAAO,SAAS,YAAY,mBAAmB,OAAO,cAAc,UAAU;AACjF,UACI,SAAiB,KAAK,QAAQ,SAAS,YAAY,gBAAgB,GACnE,iBAAiB,UAAU;AAC/B,QAAI,SACA,WAAW,eAAe,CAAC,GAAG,QAAQ,QAAQ,EAAE,OAAO,OAAK,UAAU,cAAc,GAAG,UAAU,MAAM,QAAQ,IAAIC;AAEvH,QAAI,UAAU;AACV,iBAAW,SAAS,OAAO,OAAK,CAAC,EAAE,SAAS,QAAQ,CAAC;AAAA,IACzD;AAEA,QAAI,kBAAkB,CAAC,QAAQ,UAAU,SAAS,eAAe,GAAG;AAGhE,UAAI,QAAQ,eAAe,QAAQ,gBAAgB,UAAU,cAAc,SAAS,YAAY,MAAM,UAAU;AAC5G,kBAAU,WAAW,UAAU,cAAc,SAAS,eAAe,CAAC;AACtE,eAAO,SAAS,UAAU,KAAK,IAAI,SAAS,cAAc;AAAA,MAC9D;AAGA,UAAI,QAAQ,cAAc,QAAQ,eAAe,UAAU,cAAc,SAAS,YAAY,MAAM,UAAU;AAC1G,kBAAU,WAAW,UAAU,cAAc,SAAS,gBAAgB,CAAC;AACvE,eAAO,UAAU,UAAU,KAAK,IAAI,SAAS,cAAc;AAAA,MAC/D;AAAA,IACJ;AAEA,aAAS,IAAI,GAAG,EAAE,OAAO,IAAI,UAAU,IAAI,QAAQ,KAAK;AACpD,YACI,IAAI,SAAS,CAAC,GACd,IAAI,KAAK,WAAW,CAAC;AACzB,UAAI,WAAW,UAAU,cAAc,GAAG,MAAM,CAAC,MAAM,GAAG;AACtD,eAAO,KAAK,EAAE;AAAA,MAClB,WACS,WAAW,UAAU,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG;AAC5D,eAAO,SAAS,EAAE;AAAA,MACtB,WACS,WAAW,UAAU,cAAc,GAAG,KAAK,CAAC,MAAM,GAAG;AAC1D,eAAO,KAAK,EAAE;AAAA,MAClB,WACS,WAAW,UAAU,cAAc,GAAG,QAAQ,CAAC,MAAM,GAAG;AAC7D,eAAO,UAAU,EAAE;AAAA,MACvB;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,MAAM,SAAS,YAAY,mBAAmB,OAAO;AACxD,UAAM,SAAS,KAAK,KAAK,SAAS,YAAY,gBAAgB;AAE9D,QAAI,SAAS,KAAK,SAAS,OAAO,GAAG;AACjC,YAAM,SAAS,UAAU,cAAc,SAAS,UAAU;AAC1D,aAAO,KAAK,WAAW,OAAO,aAAa,CAAC;AAC5C,aAAO,KAAK,WAAW,OAAO,YAAY,CAAC;AAC3C,aAAO,SAAS,WAAW,OAAO,cAAc,CAAC;AACjD,aAAO,UAAU,WAAW,OAAO,eAAe,CAAC;AAAA,IACvD;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,SAAS,YAAY;AACxB,QAAI,EAAE,GAAG,GAAG,OAAO,OAAO,IAAI,WAAW,CAAC,GACtC;AACJ,QAAI,WAAW,SAAS,GAAG;AACvB,eAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AACxC,kBAAU,WAAW,CAAC;AACtB,YAAI,QAAQ,IAAI,GAAG;AACf,cAAI,QAAQ;AAAA,QAChB;AACA,YAAI,QAAQ,IAAI,GAAG;AACf,cAAI,QAAQ;AAAA,QAChB;AACA,YAAI,QAAQ,QAAQ,OAAO;AACvB,kBAAQ,QAAQ;AAAA,QACpB;AACA,YAAI,QAAQ,SAAS,QAAQ;AACzB,mBAAS,QAAQ;AAAA,QACrB;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,IAAI,WAAU,GAAG,GAAG,QAAQ,GAAG,SAAS,CAAC;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ,mBAAmB,WAAW,oBAAoB,GAAG;AACzD,UACI,KAAK;AACT,OAAG,KAAU,UAAU,QAAQ,GAAG,IAAI,gBAAgB;AACtD,OAAG,KAAU,UAAU,QAAQ,GAAG,IAAI,gBAAgB;AACtD,OAAG,SAAU,UAAU,QAAQ,GAAG,QAAQ,gBAAgB;AAC1D,OAAG,UAAU,UAAU,QAAQ,GAAG,SAAS,gBAAgB;AAC3D,WAAO;AAAA,EACX;AAAA;AAAA;AAAA,EAGA,WAAW,SAAS;AAChB,WAAO,eAAe,KAAK,MAAM,OAAO,KAAK,KAAK;AAAA,IAE9C,eAAe,KAAK,MAAM,QAAQ,KAAK,KAAK,UAC5C,KAAK;AAAA,EACb;AAAA,EACA,IAAI,SAAS;AACT,WAAO,KAAK,YAAY;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EA+BA,QAAQ;AACJ,UACI,KAAS,MACT,SAAS,IAAI,WAAU,GAAG,GAAG,GAAG,GAAG,GAAG,OAAO,GAAG,MAAM;AAC1D,WAAO,mBAAmB,GAAG;AAC7B,WAAO,YAAmB,GAAG;AAC7B,WAAO,WAAmB,GAAG;AAC7B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAS,OAAO;AACZ,UAAM,KAAK;AACX,QAAI,MAAM,aAAa;AACnB,aAAO,MAAM,MAAM,GAAG,MAClB,MAAM,MAAM,GAAG,MACf,MAAM,SAAS,GAAG,SAClB,MAAM,UAAU,GAAG;AAAA,IAC3B,OACK;AACD,aAAO;AAAA,IACX;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU,OAAO,aAAa,OAAO,sBAAsB,OAAO;AAC9D,UACI,KAAY,MACZ,IAAY,KAAK,IAAI,GAAG,GAAG,MAAM,CAAC,GAClC,IAAY,KAAK,IAAI,GAAG,OAAO,MAAM,KAAK,GAC1C,IAAY,KAAK,IAAI,GAAG,QAAQ,MAAM,MAAM,GAC5C,IAAY,KAAK,IAAI,GAAG,GAAG,MAAM,CAAC,GAClC,YAAY,sBAAuB,KAAK,KAAK,KAAK,IAAM,IAAI,KAAK,IAAI;AACzE,QAAI,WAAW;AACX,aAAO,aAAa,OAAO,IAAI,WAAU,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAAA,IAC/D,OACK;AACD,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EACA,OAAO,OAAOC,SAAQ,OAAO;AACzB,UAAM,YAAYA,SAAQ,OAAK,KAAK,MAAM,CAAC,IAAI,OAAK;AACpD,WAAO,MAAM,eACT,UAAU,MAAM,CAAC,MAAM,UAAU,KAAK,CAAC,KACvC,UAAU,MAAM,CAAC,MAAM,UAAU,KAAK,CAAC,KACvC,UAAU,MAAM,KAAK,MAAM,UAAU,KAAK,KAAK,KAC/C,UAAU,MAAM,MAAM,MAAM,UAAU,KAAK,MAAM;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,GAAG,GAAG;AACZ,SAAK,MAAM,KAAK;AAChB,SAAK,MAAM,KAAK;AAChB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,GAAG,GAAG;AACT,QAAI,KAAK,MAAM;AACX,WAAK,KAAK;AAAA,IACd;AACA,QAAI,KAAK,MAAM;AACX,WAAK,KAAK;AAAA,IACd;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,OAAO;AACZ,WAAO,CAAC,MAAM,IAAI,KAAK,GAAG,MAAM,IAAI,KAAK,CAAC;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,SAAS;AACT,UAAM,SAAU,IAAI,MAAM,KAAK,IAAI,KAAK,QAAQ,GAAG,KAAK,IAAI,KAAK,SAAS,GAAG,GAAG,CAAC;AACjF,WAAO,SAAS,KAAK;AACrB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,EAAE,GAAG;AACL,UAAM,SAAS,IAAI,KAAK;AACxB,SAAK,KAAK;AACV,SAAK,UAAU;AAAA,EACnB;AAAA,EACA,IAAI,IAAI;AACJ,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,KAAK,GAAG;AACR,SAAK,IAAI;AAAA,EACb;AAAA,EACA,IAAI,OAAO;AACP,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,IAAI,GAAG;AACP,SAAK,IAAI;AAAA,EACb;AAAA,EACA,IAAI,MAAM;AACN,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,EAAE,GAAG;AACL,UAAM,SAAS,IAAI,KAAK;AACxB,SAAK,KAAK;AACV,SAAK,WAAW;AAAA,EACpB;AAAA,EACA,IAAI,IAAI;AACJ,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,MAAM,OAAO;AACb,SAAK,SAAS;AAAA,EAClB;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAO,QAAQ;AACf,SAAK,UAAU;AAAA,EACnB;AAAA,EACA,IAAI,SAAS;AACT,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,MAAM,OAAO;AACb,SAAK,SAAS,QAAQ,KAAK;AAAA,EAC/B;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAK,KAAK,KAAK;AAAA,EAC1B;AAAA,EACA,IAAI,MAAM;AACN,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,OAAO,QAAQ;AACf,SAAK,UAAU,SAAS,KAAK;AAAA,EACjC;AAAA,EACA,IAAI,SAAS;AACT,WAAO,KAAK,KAAK,KAAK;AAAA,EAC1B;AAAA,EACA,SAAS,KAAK,aAAa,MAAM;AAC7B,QAAI,YAAY;AACZ,aAAO,MAAM,KAAK,QAAQ,KAAK;AAAA,IACnC;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,OAAO,KAAK,aAAa,MAAM;AAC3B,QAAI,YAAY;AACZ,aAAO,MAAM,KAAK,OAAO,KAAK;AAAA,IAClC;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,OAAO;AACP,WAAO,KAAK,QAAQ,KAAK;AAAA,EAC7B;AAAA,EACA,IAAI,SAAS,UAAU;AACnB,UACI,KAAK;AACT,QAAI,MAAM,QAAQ,GAAG;AACjB,SAAG,YAAY;AAAA,IACnB,OACK;AACD,SAAG,YAAY,OAAO,QAAQ;AAI9B,UAAI,CAAC,GAAG,kBAAkB;AACtB,WAAG,QAAQ,KAAK,IAAI,GAAG,OAAO,GAAG,SAAS;AAAA,MAC9C;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,IAAI,WAAW;AACX,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,UAAU,WAAW;AACrB,UACI,KAAK;AACT,QAAI,MAAM,SAAS,GAAG;AAClB,SAAG,aAAa;AAAA,IACpB,OACK;AACD,SAAG,aAAa,OAAO,SAAS;AAIhC,UAAI,CAAC,GAAG,kBAAkB;AACtB,WAAG,SAAS,KAAK,IAAI,GAAG,QAAQ,GAAG,UAAU;AAAA,MACjD;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,IAAI,YAAY;AACZ,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,GAAG,GAAG,OAAO,QAAQ;AACxB,UAAM,KAAK;AACX,OAAG,KAAK;AACR,OAAG,KAAK;AACR,OAAG,SAAS;AACZ,OAAG,UAAU;AACb,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,QAAQ,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,OAAO;AAClD,KAAC,KAAK,OAAO,QAAQ,IAAI,IAAI,UAAU,KAAK,OAAO,QAAQ,IAAI;AAC/D,WAAO,KAAK,OAAO,CAAC,MAAM,CAAC,KAAK,OAAO,MAAM;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,QAAQ,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,OAAO;AAClD,KAAC,KAAK,OAAO,QAAQ,IAAI,IAAI,UAAU,KAAK,OAAO,QAAQ,IAAI;AAC/D,WAAO,KAAK,OAAO,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,YAAY,aAAa,QAAQ;AAC7B,UACI,KAAiB,MACjB,iBAAiB,GAAG,QACpB,YAAiB,GAAG,GACpB,WAAiB,GAAG,YAAY,GAAG,OACnC,YAAiB,GAAG,aAAa,GAAG;AACxC,QAAI,GAAG,UAAU,YAAY,QAAQ;AAEjC,UAAI,UAAU,YAAY,YAAY,QAAQ;AAC1C,eAAO;AAAA,MACX;AAEA,SAAG,KAAS,YAAY;AACxB,SAAG,SAAS,YAAY;AAAA,IAC5B;AACA,QAAI,GAAG,SAAS,YAAY,OAAO;AAE/B,UAAI,UAAU,WAAW,YAAY,OAAO;AAExC,WAAG,IAAS;AACZ,WAAG,SAAS;AACZ,eAAO;AAAA,MACX;AAEA,SAAG,KAAQ,YAAY;AACvB,SAAG,QAAQ,YAAY;AAAA,IAC3B;AAEA,OAAG,UAAU,MAAM,IAAI,GAAG,kBAAkB;AAAA,MACxC,KAAK,IAAI,YAAY,QAAQ,GAAG,OAAO,CAAC;AAAA,MACxC,KAAK,IAAI,YAAY,SAAS,GAAG,QAAQ,CAAC;AAAA,IAC9C,CAAC;AAGD,OAAG,UAAU,KAAK,IAAI,YAAY,IAAI,GAAG,GAAG,CAAC,GAAG,KAAK,IAAI,YAAY,IAAI,GAAG,GAAG,CAAC,CAAC;AACjF,WAAO;AAAA,EACX;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,EAgDA,QAAQ,MAAM;AAGV,QAAI,SAAS,KAAK,MAAM,GACpB;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAS,MACT,0BAA0B,MAAM,YAAY;AAChD,QAAI,UAAU,CAAC,OAAO,aAAa;AAC/B,eAAS,WAAU,KAAK,OAAO,UAAU,OAAO,UAAU,MAAM;AAAA,IACpE;AACA,QAAI,aAAa;AACb,UAAI,CAAC,YAAY,aAAa;AAG1B,iCAAyB,gBAAgB,cAAc,gBAAgB;AAGvE,cAAM,mBAAmB,sBAAsB,OAAO,KAAK,mBAAmB,CAAC;AAC/E,sBAAc,WAAU,KAAK,YAAY,UAAU,YAAY,UAAU,aAAa,MAAM,gBAAgB;AAAA,MAChH;AAEA,UAAI,kBAAkB;AAGlB,2BAAmB,WAAW,gBAAgB;AAI9C,yBAAiB,CAAC,IAAI,KAAK,IAAI,iBAAiB,CAAC,GAAG,OAAO,GAAG;AAC9D,yBAAiB,CAAC,IAAI,KAAK,IAAI,iBAAiB,CAAC,GAAG,YAAY,QAAQ,OAAO,KAAK;AACpF,yBAAiB,CAAC,IAAI,KAAK,IAAI,iBAAiB,CAAC,GAAG,YAAY,SAAS,OAAO,MAAM;AACtF,yBAAiB,CAAC,IAAI,KAAK,IAAI,iBAAiB,CAAC,GAAG,OAAO,IAAI;AAE/D,sBAAsB,YAAY,QAAQ,MAAM,YAAY,MAAM,GAAG,gBAAgB;AAAA,MACzF;AAAA,IACJ;AACA,UAAM,KAAsB,MACxB,gBAAsB,cAAc,KAAK,MAAM,GAC/C;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAsB,MACtB,UAAsB,WAAW,OAAO,QAAQ,KAAK,OAAO,SAAS,IACrE,YAAsB,WAAW,OAAO,GAAG,GAC3C,sBAAsB,eAAe,YAAY,MAAM,GACvD,kBAAsB,CAAC,GACvB,YAAsB,CAAC;AAAA,MACnB,MAAO,OAAO,UAAU;AAAA,MACxB;AAAA,IACJ,CAAC,GACD,iBAAsB,aAAa,gBAAgB,UAAU,YAAY,CAAC,GAC1E,eAAsB,GAAG,cAAc;AAE3C,QAAI,kBAAkB,UAAU;AAC5B,aAAO,cAAc,IAAI,OAAO,cAAc;AAAA,IAClD,WAES,CAAC,UAAU,eAAe,WAAW;AAC1C,aAAO,QAAS,OAAO;AACvB,aAAO,SAAS,OAAO;AAAA,IAC3B;AAEA,QAAI,aAAa;AACb,aAAO,YAAY,WAAW;AAAA,IAClC;AAEA,QAAI,eAAe,UAAU,aAAa,MAAM;AAM5C,UAAI,UAAU;AAIV,kBAAU,KAAK;AAAA,UACX,MAAQ,QAAQ,OAAO,KAAK;AAAA,UAC5B,OAAQ,UAAU,SAAS;AAAA,QAC/B,CAAC;AAED,YAAI,aAAa,YAAY;AACzB,oBAAU,KAAK;AAAA,YACX,MAAQ,QAAQ,UAAU,YAAY,KAAK;AAAA,YAC3C,OAAQ,kBAAkB,IAAI;AAAA,UAClC,CAAC;AACD,oBAAU,KAAK;AAAA,YACX,MAAQ,QAAQ,OAAO,KAAK;AAAA,YAC5B,OAAQ,kBAAkB,IAAI;AAAA,UAClC,CAAC;AAAA,QACL;AAAA,MACJ,OAIK;AACD,iBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,oBAAU,KAAK;AAAA,YACX,MAAQ,QAAQ,OAAO,KAAK;AAAA,YAC5B,OAAQ,kBAAkB,IAAI;AAAA,UAClC,CAAC;AAAA,QACL;AAAA,MACJ;AAAA,IACJ;AAGA,QAAI,gBAAgB;AAChB,YAAM,MAAO,UAAU,YAAY,IAAK,MAAM;AAC9C,iCAA2B;AAAA,QACvB,CAAC,GAAG,GAAI,eAAe,GAAG;AAAA,QAC1B,MAAQ,WAAW,UAAU,YAAY,KAAK,CAAC;AAAA,MACnD;AAAA,IACJ;AAEA,QAAI,uBAAuB,QAAQ;AAC/B,0BAAoB,OAAO,CAAC,OAAO,OAAO,CAAC,OAAO,QAAQ,OAAO,OAAO,OAAO,MAAM;AACrF,aAAO,YAAY,mBAAmB;AAAA,IAC1C;AAEA,WAAO,WAAY,GAAG;AACtB,WAAO,YAAY,GAAG;AAEtB,QAAI,UAAU;AACV,aAAO,OAAO,SAAS,GAAG,SAAS,CAAC;AACpC,aAAO,UAAU,MAAM,QAAQ,aAAa;AAC5C,UAAI,aAAa;AACb,eAAO,YAAY,WAAW;AAAA,MAClC;AAAA,IACJ,OAyCK;AAGD,YACI,gBAAgB,UAAU,WAAW,OAAO,UAAU,eAAe,KACrE,UAAgB,cAAc,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,cAAc,CAAC,GAAG,WAAW,CAAC,IAAI,cAAc,CAAC,CAAC,IAAI;AAC1H,UAAI,kBAAkB,OAAO,kBAAkB,UAAU,oBAAoB,GACzE,cAAkB,OAAO,kBAAkB,UAAU,sBAAsB,OAAO,GAClF,UAAkB,OAAO,kBAAkB,UAAU,gBAAgB,GAIrE,UAAkB,CAAC,WAAW,OAAO,MAAM,EAAE,UAAU,gBAAgB,CAAC,IAAI,QAAQ,CAAC,GAAG,gBAAgB,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,UAAU,QAAQ,IAAI;AACnJ,aAAO,UAAU,YAAY,CAAC,IAAI,QAAQ,CAAC,GAAG,YAAY,CAAC,IAAI,QAAQ,CAAC,CAAC;AAGzE,UAAI,SAAS;AAUT,eAAO,UAAU,EAAE,YAAY,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,QAAQ,CAAC,EAAE;AAE/E,eAAO,UAAU,gBAAgB,CAAC,IAAI,QAAQ,CAAC,GAAG,gBAAgB,CAAC,IAAI,QAAQ,CAAC,CAAC;AACjF,eAAO,UAAU,GAAG,OAAO;AAC3B,YAAI,aAAa;AACb,iBAAO,YAAY,WAAW;AAAA,QAClC;AACA,qBAAa,UAAU;AAAA,MAC3B,WAES,eAAe,CAAC,YAAY,SAAS,MAAM,GAAG;AACnD,cACI,kBAAkB,OAAO,MAAM,GAC/B,YAAkB,CAAC;AACvB,YAAIC,OAAM;AAIV,mCAA2B;AAG3B,wBAAgB,CAAC,IAAIA,QAAO,YAAY,MAAM;AAC9C,QAAAA,MAAK,SAAgB,OAAO,IAAI,QAAQ,CAAC;AAEzC,wBAAgB,CAAC,IAAIA,QAAO,YAAY,MAAM;AAC9C,QAAAA,MAAK,IAAgB,OAAO,QAAQ,QAAQ,CAAC;AAE7C,wBAAgB,CAAC,IAAIA,QAAO,YAAY,MAAM;AAC9C,QAAAA,MAAK,IAAgB,OAAO,SAAS,QAAQ,CAAC;AAE9C,wBAAgB,CAAC,IAAIA,QAAO,YAAY,MAAM;AAC9C,QAAAA,MAAK,QAAgB,OAAO,IAAI,QAAQ,CAAC;AAEzC,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAEvC,cAAI,kBAAkB,MAAM,GAAG;AAC3B,mBAAO,cAAc,IAAI;AAAA,UAC7B;AACA,UAAAA,QAAO,gBAAgB,aAAa,UAAU,CAAC,EAAE,IAAI;AAErD,mBAAS,OAAO,QAAQ;AAAA,YACpB;AAAA,YACA;AAAA,YACA,OAAQ,UAAU,CAAC,EAAE;AAAA,UACzB,CAAC;AAGD,cAAI,OAAO,YAAYA,OAAM,IAAI,GAAG;AAChC,sBAAU,KAAK;AAAA,cACX;AAAA,cACA,MAAO;AAAA,YACX,CAAC;AAID,gBAAI,CAAC,eAAe,OAAO,QAAQ,GAAG,SAAS,OAAO,SAAS,GAAG,QAAQ;AACtE,qBAAO,QAAQ,UAAU,CAAC,EAAE;AAC5B;AAAA,YACJ;AAAA,UACJ;AAEA,cAAI,CAAC,eAAeA,MAAK,OAAO,YAAY,MAAM;AAC9C,kBAAM,IAAI,OAAO,MAAM;AAEvB,oBAAQ,YAAY;AAAA,cAEhB,KAAK;AACD,kBAAE,OAAO,MAAMA,MAAK,SAAS,EAAE,MAAM;AACrC;AAAA,cAEJ,KAAK;AACD,kBAAE,OAAOA,MAAK,IAAI;AAClB;AAAA,cAEJ,KAAK;AACD,kBAAE,OAAO,MAAMA,MAAK,GAAG;AACvB;AAAA,cAEJ,KAAK;AACD,kBAAE,OAAOA,MAAK,QAAQ,EAAE,KAAK;AAC7B;AAAA,YACR;AACA,0BAAc;AAAA,cACV,MAASA,MAAK;AAAA,cACd,QAAS;AAAA,cACT,MAAS;AAAA,YACb;AAAA,UACJ;AAAA,QACJ;AAEA,YAAI,UAAU,QAAQ;AAGlB,cAAI,UAAU,SAAS,KAAK,CAAC,UAAU;AACnC,sBAAU,KAAK,CAACC,KAAIC,QAAO;AACvB,oBACI,wBAAwB,KAAK,MAAM,gBAAgB,IAAID,IAAG,OAAO,MAAM,KAAK,gBAAgB,IAAIA,IAAG,OAAO,MAAM,CAAC,GACjH,wBAAwB,KAAK,MAAM,gBAAgB,IAAIC,IAAG,OAAO,MAAM,KAAK,gBAAgB,IAAIA,IAAG,OAAO,MAAM,CAAC;AACrH,qBAAO,wBAAwB;AAAA,YACnC,CAAC;AAAA,UACL;AAEA,mBAAa,UAAU,CAAC,EAAE;AAC1B,uBAAa,UAAU,CAAC,EAAE;AAAA,QAC9B,OAEK;AACD,mBAAa,YAAY;AACzB,uBAAa,YAAY;AAGzB,cAAI,wBAAwB;AACxB,mBAAO,YAAY,WAAW;AAAA,UAClC;AAAA,QACJ;AAAA,MACJ,OACK;AACD,qBAAa,UAAU;AAAA,MAC3B;AAIA,UAAI,SAAS;AACT,eAAO,UAAU,UAAU;AAAA,MAC/B,OACK;AACD,eAAO,UAAU,UAAU,OAAO,UAAU,QAAQ,IAAI;AAAA,MAC5D;AACA,aAAO,OAAO;AAEd,UAAI,cAAc,CAAC,SAAS;AAIxB,YAAI,CAAC,0BAA0B;AAC3B,gBACI,gBAAgB,aAAa,GAC7B,QAAgB,gBAAgB,MAAM,KACtC,MAAgB,gBAAgB,WAAW,SAC3C,aAAgB,KAAK,IAAI,OAAO,KAAK,GAAG,OAAO,KAAK,CAAC,GACrD,WAAgB,KAAK,IAAI,OAAO,GAAG,GAAG,OAAO,GAAG,CAAC;AACrD,cAAI,cAAiB,cAAc,WAAW,cAAc,IAAI,WAAW,CAAC,IAAI;AAChF,gBAAM,YAAc,cAAc,WAAW,CAAC;AAC9C,cAAI,YAAY,OAAO,GAAG,GAAG;AACzB,2BAAgB,YAAY,OAAO,GAAG;AAAA,UAC1C;AACA,cAAI,cAAc,OAAO,KAAK,GAAG;AAC7B,2BAAgB,OAAO,KAAK,IAAI;AAAA,UACpC;AAGA,qCAA2B;AAAA,YACvB,CAAC,KAAK,GAAI,cAAc,OAAO,KAAK;AAAA,YACpC,MAAU,WAAW,aAAa,KAAK,CAAC;AAAA,UAC5C;AAAA,QACJ;AACA,eAAO,SAAS;AAAA,MACpB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,kBAAkB,gBAAgB,UAAU,aAAa;AACrD,qBAAiB,OAAO,cAAc;AACtC,UACI,KAAa,MACb,QAAa,aAAa,KAAK,cAAc,KAAK,YAAY,KAAK,cAAc,GACjF,OAAa,SAAS,MAAM,CAAC,EAAE,YAAY,GAC3C,aAAa,SAAS,KAAK,IAAI,KAAK,IAAI,SAAS,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,IAAI;AACjF,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,eAAO,CAAC,GAAG,IAAI,GAAG,QAAQ,YAAY,GAAG,IAAI,QAAQ,CAAC,CAAC;AAAA,MAC3D,KAAK;AACD,eAAO,CAAC,GAAG,QAAQ,QAAQ,CAAC,GAAG,GAAG,IAAI,GAAG,SAAS,UAAU;AAAA,MAChE,KAAK;AACD,eAAO,CAAC,GAAG,IAAI,GAAG,QAAQ,YAAY,GAAG,SAAS,QAAQ,CAAC,CAAC;AAAA,MAChE,KAAK;AACD,eAAO,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,GAAG,IAAI,GAAG,SAAS,UAAU;AAAA,MAC5D,KAAK,KAAK;AACN,eAAO,CAAC,GAAG,IAAI,GAAG,QAAQ,GAAG,GAAG,IAAI,GAAG,SAAS,CAAC;AAAA,MACrD;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY;AACR,UACI,KAAmB,MACnB,mBAAmB,UAAU,cAAc;AAAA,MACvC,QAAS,SAAS;AAAA,MAClB,OAAS;AAAA,mCACU,GAAG,CAAC,UAAU,GAAG,CAAC,YAAY,GAAG,KAAK,aAAa,GAAG,MAAM;AAAA,IACnF,CAAC;AACL,WAAO,UAAU,UAAU,gBAAgB,EAAE,KAAK,MAAM,iBAAiB,OAAO,CAAC;AAAA,EACrF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,QAAQ,aAAa;AAC3B,UACI,KAAY,MACZ,YAAY,aAAa,MAAM;AAAA,MAC3B,OAAQ;AAAA,QACJ,MAAgB,GAAG,GAAG,CAAC;AAAA,QACvB,KAAgB,GAAG,GAAG,CAAC;AAAA,QACvB,OAAgB,GAAG,GAAG,KAAK;AAAA,QAC3B,QAAgB,GAAG,GAAG,MAAM;AAAA,QAC5B,eAAgB;AAAA;AAAA,QAEhB,GAAI,OAAO,QAAQ,CAAC,IAAI,EAAE,UAAW,YAAY,WAAY,QAAQ;AAAA,MACzE;AAAA,IACJ,GAAG,MAAM;AACb,WAAO,cAAc,YAAY,UAAU,cAAc,SAAS;AAAA,EACtE;AAAA,EACA,SAAS,YAAY,KAAK;AACtB,WAAO,CAAC,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,KAAK,MAAM,GAAG,KAAK,MAAM,MAAM,GAAG,KAAK,IAAI,IAAI,EAAE,KAAK,SAAS;AAAA,EACpG;AACJ;AAaO,IAAM,QAAN,cAAoB,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOjC,OAAO,KAAK,OAAO,iBAAiB,cAAc,aAAa,QAAQ,OAAO,IAAI,GAAG;AACjF,UACI,WAAW,iBAAiB,WAAW;AAC3C,QAAI,MAAM,gBAAgB;AACtB,cAAQ,MAAM,eAAe,CAAC;AAAA,IAClC;AACA,UACI,IAAI,MAAM,GAAG,QAAQ,GAAG,GACxB,IAAI,MAAM,GAAG,QAAQ,GAAG;AAC5B,WAAO,IAAI,KAAK,GAAG,CAAC;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,GAAG,GAAG;AACd,UAAM,GAAG,GAAG,GAAG,CAAC;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,MAAM;AACZ,SAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC;AAC1D,SAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC;AAC3D,WAAO;AAAA,EACX;AAAA,EACA,UAAU;AACN,WAAO,CAAC,KAAK,GAAG,KAAK,CAAC;AAAA,EAC1B;AACJ;AACA,UAAU,SAAS;;;ACnwCnB,IAGI,cAAgB,OAAO,OAAO;AAHlC,IAII,eAAgB,OAAO,QAAQ;AAiBnC,IAAqB,eAArB,MAAqB,cAAa;AAAA,EAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,KAAK,UAAU;AAC3C,aAAS,cAAa,UAAU,QAAQ,QAAQ;AAChD,UAAM,QAAQ,cAAa,UAAU,KAAK,OAAO,EAAE,OAAO,OAAK,CAAC,OAAO,CAAC,CAAC;AACzE,QAAI,KAAK;AACL,YAAM,cAAa,UAAU,KAAK,OAAO;AACzC,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,EAAE,GAAG;AACjC,YAAI,CAAC,MAAM,SAAS,IAAI,CAAC,CAAC,GAAG;AACzB,gBAAM,KAAK,IAAI,CAAC,CAAC;AAAA,QACrB;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,cAAa,UAAU,OAAO,EAAE;AAAA,EAC3C;AAAA,EACA,OAAO,KAAK,SAAS,aAAa;AAC9B,QAAI,SAAS;AACT,UAAI,QAAQ,gBAAgB;AACxB,sBAAc,oCAAe;AAAA,MACjC,OACK;AACD,sBAAc,oCAAgB,QAAQ,SAAS,OAAO,KAAK,CAAC,QAAQ,QAAQ,OAAO;AACnF,kBAAU,IAAI,cAAa,OAAO;AAAA,MACtC;AACA,UAAI,CAAC,QAAQ,SAAS,CAAC,aAAa;AAChC,kBAAU;AAAA,MACd;AAAA,IACJ;AACA,WAAO,YAAY,cAAc,IAAI,cAAa,IAAI;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,UAAU,KAAK,KAAK,UAAU;AACjC,UAAM,OAAO;AACb,UACI,OAAO,OAAO,KACd,UAAU,OAAO,SACjB,WAAW,OAAO,UAClB,WAAW,CAAC,WAAW,CAAC;AAC5B,QAAI,WAAW,SAAS,UACpB,GAAG,GAAG;AACV,QAAI,SAAS,UAAU;AACnB,UAAI,IAAI,aAAa,QAAQ,gBAAgB,OAAO,IAAI,iBAAiB,YAAY;AACjF,cAAM,IAAI,aAAa,OAAO,KAAK;AACnC,mBAAW;AAAA,MACf,WACS,2BAAK,gBAAgB;AAC1B,cAAM,IAAI;AAAA,MACd,WACS,eAAe,cAAc;AAClC,cAAM,MAAM,KAAK,GAAG;AAAA,MACxB,WACS,eAAe,KAAK;AACzB,cAAM,MAAM,KAAK,IAAI,KAAK,CAAC,EAAE,OAAO,OAAK,IAAI,IAAI,CAAC,CAAC;AAAA,MACvD,WACS,eAAe,KAAK;AACzB,cAAM,MAAM,KAAK,GAAG;AAAA,MACxB,WACS,CAAC,MAAM,QAAQ,GAAG,GAAG;AAC1B,cAAM,QAAQ,cAAc,GAAG;AAAA,MACnC;AAAA,IACJ;AACA,QAAI,UAAU;AAEV,YAAM,CAAC,GAAG,IAAI,IAAI,aAAa,MAAM,GAAG,CAAC,CAAC;AAAA,IAC9C;AAEA,SAAK,IAAI,IAAI,QAAQ,MAAM,KAAgB;AACvC,UAAI,IAAI,CAAC;AACT,UAAI,CAAC,EAAE,QAAQ;AACX,YAAI,OAAO,GAAG,CAAC;AAAA,MACnB,WACS,EAAE,SAAS,GAAG,GAAG;AACtB,YAAI,OAAO,GAAG,GAAG,GAAG,aAAa,MAAM,CAAC,CAAC;AAAA,MAC7C;AAAA,IACJ;AACA,QAAI,SAAS;AACT,YAAM;AAAA,IACV,WACS,UAAU;AACf,YAAM,IAAI,KAAK,GAAG;AAAA,IACtB,OACK;AACD,YAAM,uBAAO,OAAO,IAAI;AACxB,WAAK,IAAI,GAAG,IAAI,IAAI,QAAQ,EAAE,GAAG;AAC7B,YAAI,IAAI,CAAC,CAAC,IAAI;AAAA,MAClB;AAAA,IACJ;AACA,WAAQ;AAAA,EACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAe,SAAS;AACpB,SAAK,QAAQ,GAAG,OAAO;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ;AAEJ,eAAW,OAAO,MAAM;AACpB,WAAK,GAAG,IAAI;AAAA,IAChB;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,SAAS;AACZ,WAAO,KAAK,MAAM,EAAE,QAAQ,GAAG,OAAO;AAAA,EAC1C;AAAA;AAAA,EAEA,IAAI,iBAAiB;AACjB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ;AACJ,WAAO,IAAI,cAAa,IAAI;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS,WAAW;AAChB,QAAI,OAAO,cAAc,YAAY,WAAW;AAC5C,aAAO,QAAQ,KAAK,SAAS,CAAC;AAAA,IAClC;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA,EAGA,WAAW;AAEP,WAAO,KAAK,SAAS,GAAG,KAAK,KAAK,MAAM;AAAA,EAC5C;AAAA,EACA,SAAS;AACL,WAAO,KAAK,SAAS;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO;AACH,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,QAAQ,OAAO;AACX,UACI,eAAe,cAAa,UAAU,OAAO,OAAO,GACpD,MAAM,aAAa;AACvB,QAAI,KAAK,WAAW,KAAK;AACrB,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC1B,YAAI,CAAC,KAAK,aAAa,CAAC,CAAC,GAAG;AACxB,iBAAO;AAAA,QACX;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,QAAQ;AACR,QAAI,QAAQ,KAAK,WAAW,GACxB;AACJ,QAAI,SAAS,MAAM;AACf,aAAO,QAAQ,cAAc,IAAI;AACjC,WAAK,YAAY,IAAI,KAAK;AAC1B,WAAK,WAAW,IAAI,QAAQ,KAAK,KAAK,GAAG;AAAA,IAC7C;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,MAAM,OAAO;AACb,UACI,KAAK,MACL,OAAO,OAAO,KAAK,EAAE,GACrB,MAAM,KAAK;AACf,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC1B,aAAO,GAAG,KAAK,CAAC,CAAC;AAAA,IACrB;AACA,QAAI,OAAO;AACP,SAAG,QAAQ,GAAG,CAAC,KAAK,CAAC;AAAA,IACzB,OACK;AAED,aAAO,GAAG,WAAW;AAAA,IACzB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,SAAS;AACT,WAAO,QAAQ,cAAc,IAAI;AAAA,EACrC;AAAA,EACA,IAAI,SAAS;AAGT,WAAO,KAAK,QAAQ,KAAK,YAAY,IAAI;AAAA,EAC7C;AAAA,EACA,QAAQ,OAAO,SAAS;AACpB,aAAS,KAAK,GAAG,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AAC7C,UAAI,QAAQ,CAAC,GAAG;AACZ,cAAM,QAAQ,CAAC;AACf,YAAI,IAAI,kBAAkB,QAAQ,SAAS,GAAG,GAAG;AAE7C,eAAK,KAAK,KAAK;AACX,iBAAK,CAAC,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,UACrC;AAAA,QACJ,OACK;AACD,gBAAM,cAAa,UAAU,QAAQ,CAAC,GAAG,OAAO;AAChD,eAAK,IAAI,GAAG,IAAI,IAAI,QAAQ,EAAE,GAAG;AAC7B,iBAAK,IAAI,CAAC,CAAC,IAAI;AAAA,UACnB;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO,KAAK,WAAW;AACvB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,WAAW;AACd,eAAW,OAAO,WAAW;AACzB,UAAI,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,GAAG,GAAG;AAChC,aAAK,GAAG,IAAI,UAAU,GAAG;AAEzB,eAAO,KAAK,WAAW;AAAA,MAC3B;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAS,SAAS;AACd,UACI,YAAY,QAAQ,aAAa,QAAQ,eAAe,QAAQ,YAAY,SAC5E,OAAY,cAAa,KAAK,SAAS;AAC3C,SAAK,IAAI,IAAI;AACb,cAAU,QAAQ,KAAK;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,SAAS;AACZ,WAAO,KAAK,QAAQ,GAAG,OAAO;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU,SAAS;AACf,WAAO,KAAK,QAAQ,GAAG,OAAO;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,OAAO,WAAW,OAAO,QAAQ,CAAC,KAAK,SAAS,CAAC,GAAG;AAChD,WAAO,QAAQ,IAAI;AAEnB,QAAI,QAAQ,KAAK,SAAS,CAAC,MAAM,MAAM;AACnC,WAAK,SAAS,IAAI;AAElB,aAAO,KAAK,WAAW;AACvB,aAAO;AAAA,IACX;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ;AACJ,WAAO,QAAQ,cAAc,IAAI;AAAA,EACrC;AAAA,EACA,QAAQC,KAAI;AACR,WAAO,QAAQ,cAAc,IAAI,EAAE,QAAQA,GAAE;AAAA,EACjD;AACJ;AAGA,aAAa,UAAU,WAAW,IAAI;AACtC,aAAa,SAAS;;;ACpVtB,IACI,kBAAkB;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AARJ,IASI,WAAW;AAAA,EACP,SAAa;AAAA,EACb,SAAa;AAAA,EACb,MAAa;AAAA,EACb,UAAa;AAAA,EACb,OAAa;AAAA,EACb,SAAa;AAAA,EACb,SAAa;AAAA,EACb,WAAa;AAAA,EACb,YAAa;AAAA,EACb,SAAa;AAAA,EACb,OAAa;AACjB;AArBJ,IAsBI,eAAe;AAtBnB,IAuBI,iBAAiB;AAAA,EACb;AAAA,EACA,OAAQ;AACZ;AA1BJ,IA2BI,qBAAqB;AAAA,EACjB,UAAW;AAAA,EACX,KAAW;AAAA,EACX,KAAW;AAAA,EACX,MAAW;AAAA,EACX,IAAW;AAAA,EACX,OAAW;AAAA,EACX,MAAW;AACf;AAnCJ,IAqCI,cAAc;AAAA,EACV,SAAU;AAAA,EACV,KAAU;AAAA,EACV,OAAU;AACd;AAzCJ,IA0CI,eAAyB;AA1C7B,IA2CI,aAAyB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAIJ,IAAqB,eAArB,MAAqB,aAAY;AAAA,EAoB7B,OAAO,eAAe,OAAO;AACzB,WAAO,aAAa,iBAAiB,OAAO,MAAM,eAAe,CAAC,KAAK,MAAM,QAAQ,CAAC,GAAG,eAAe;AAAA,EAC5G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,UAAU,MAAM,OAAO;AAC1B,WAAO,aAAa,eAAe,MAAM,OAAO,UAAU;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,MAAM,OAAO;AAChB,QAAI,MAAM,SAAS;AACf,cAAQ,MAAM,QAAQ,CAAC;AAAA,IAC3B;AACA,WAAO,CAAC,MAAM,SAAS,MAAM,OAAO;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,mBAAmB,QAAQ,QAAQ;AACtC,UACI,MAAM,GAAG,MAAM,MAAM,GACrB,MAAM,GAAG,MAAM,MAAM;AAEzB,WAAO,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,aAAa,OAAO;AACvB,WAAO,IAAI,MAAM,MAAM,OAAO,MAAM,KAAK;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,eAAe,OAAO;AACzB,WAAO,IAAI,MAAM,MAAM,SAAS,MAAM,OAAO;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,OAAO,YAAY,SAAS,WAAW,SAAS,SAAS;AACrD,QAAI,QAAQ,UAAU;AAElB,UAAI,OAAO,cAAc,UAAU;AAC/B,kBAAU,OAAO,OAAO;AAAA,UACpB;AAAA,UACA,CAAC,SAAS,GAAI;AAAA,QAClB,GAAG,OAAO;AAAA,MACd,OAEK;AACD,kBAAU,OAAO,OAAO;AAAA,UACpB;AAAA,QACJ,GAAG,SAAS;AAAA,MAChB;AAAA,IACJ,OAEK;AACD,gBAAU;AAAA,IACd;AACA,WAAO,GAAG,GAAG,OAAO;AAAA,EACxB;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,EAgDA,OAAO,GAAG,SAAS;AACf,UACI,UAAiB,QAAQ,SACzB,UAAiB,QAAQ,SACzB,iBAAiB,CAAC;AACtB,eAAW,aAAa,SAAS;AAE7B,UAAI,CAAC,SAAS,SAAS,GAAG;AACtB,YAAI,cAAc,QAAQ,SAAS;AACnC,YAAI,OAAO,gBAAgB,UAAU;AACjC,wBAAc;AAAA,YACV,SAAU;AAAA,UACd;AAAA,QACJ;AACA,cAAM,gBAAgB,YAAY,WAAW;AAG7C,uBAAe,KAAK,GAAG,mBAAmB,eAAe,WAAW,aAAa,OAAO,CAAC;AAAA,MAC7F;AAAA,IACJ;AACA,UAAMC,YAAW,MAAM;AACnB,eAAS,aAAa,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;AACzD,sBAAc,eAAe,CAAC;AAC9B,WAAG,oBAAoB,YAAY,CAAC,GAAG,YAAY,CAAC,GAAG,YAAY,CAAC,CAAC;AAAA,MACzE;AACA,qBAAe,SAAS;AAAA,IAC5B;AAEA,QAAI,WAAW,QAAQ,eAAe,OAAO;AACzC,cAAQ,YAAY,eAAe,kBAAkB,QAAQ,WAAWA,WAAU,OAAO;AAAA,IAC7F;AACA,WAAOA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAO,mBAAmB,SAAS,WAAW,aAAa,UAAU;AACjE,UACI,UAAW,GAAG,cAAc,SAAS,WAAW,aAAa,QAAQ,GACrE,EAAE,KAAK,IAAI,SACX,UAAW,YAAY,WAAW,SAAS,SAC3C,UAAW,KAAK,WAAW,QAAQ,KAAK,WAAW,OAAO;AAAA,MACtD,SAAU,KAAK;AAAA,MACf,SAAU,KAAK;AAAA,IACnB,IAAI;AACR,YAAQ,iBAAiB,WAAW,SAAS,OAAO;AACpD,QAAI,SAAS;AAET,YACI,UAAY,YAAY,WAAW,SAAS,SAC5C,aAAY,mCAAS,eAAc,UAAU,YAC7C,EAAE,KAAAC,KAAI,IAAM,SACZC,SAAYD,OAAM,QAAQ,QAAQ,SAClC,EAAE,MAAAE,MAAK,IAAK;AAEhB,MAAAA,MAAK,UAAU;AACf,MAAAA,MAAK,UAAU,UAAU,OAAOD,WAAU,WAAW,eAAe,uBAAuB,EAAE,MAAM;AAC/F,QAAAC,MAAK,UAAU;AACf,WAAG,oBAAoB,SAAS,WAAW,OAAO;AAElD,YAAIF,QAAO,CAAC,QAAQ,QAAQ;AACxB,WAAC,OAAOA,SAAQ,WAAW,QAAQA,IAAG,IAAIA,MAAK,KAAK,OAAO;AAAA,QAC/D;AAAA,MACJ,GAAGC,QAAO,kBAAkB,YAAY,IAAI,CAAC,EAAE;AAAA,IACnD;AACA,WAAO,CAAC,SAAS,WAAW,SAAS,OAAO;AAAA,EAChD;AAAA;AAAA;AAAA,EAGA,OAAO,sBAAsB,OAAO;AAChC,WAAO,MAAM,aAAa,EAAE,CAAC,KAAK,MAAM,KAAK,CAAC;AAAA,EAClD;AAAA,EACA,OAAO,SAAS,OAAO;AA1U3B,QAAAE,KAAA;AA2UQ,QAAI,MAAM,OAAO;AACb,aAAO;AAAA,IACX;AACA,UAAM,EAAE,MAAM,OAAO,IAAI;AAIzB,UAAK,iCAAQ,iBAAc,MAAAA,MAAA,iCAAQ,gBAAR,gBAAAA,IAAA,oCAAyB,UAAS,MAAM,cAAc;AAC7E,YACI,gBAAiB,KAAK,sBAAsB,KAAK,GACjD,iBAAiB;AAErB,aAAO,eAAe,OAAO,UAAU;AAAA,QACnC,OAAQ;AAAA,QACR;AAAA,MACJ,CAAC;AAED,aAAO,eAAe,OAAO,kBAAkB;AAAA,QAC3C,OAAQ;AAAA,QACR;AAAA,MACJ,CAAC;AAAA,IACL;AAEA,WAAO,eAAe,OAAO,SAAS,cAAc;AAEpD,QAAI,KAAK,WAAW,KAAK,GAAG;AACxB,YAAM,oBAAoB,mBAAmB,MAAM,GAAG;AACtD,UAAI,mBAAmB;AACnB,eAAO,eAAe,OAAO,OAAO;AAAA,UAChC,OAAQ;AAAA,UACR;AAAA,QACJ,CAAC;AAAA,MACL;AAEA,UAAI,MAAM,QAAQ,OAAO,CAAC,MAAM,MAAM;AAClC,eAAO,eAAe,OAAO,QAAQ;AAAA,UACjC,OAAQ;AAAA,UACR;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,IACJ;AAGA,QAAI,MAAM,WAAW,CAAC,MAAM,SAAS;AACjC,aAAO,eAAe,OAAO,WAAW,cAAc;AAAA,IAC1D;AAkBA,QAAI,UAAU,aAAa,OAAO;AAE9B,UAAI,CAAC,OAAO,yBAAyB,OAAO,eAAe,GAAG;AAC1D,eAAO,eAAe,OAAO,iBAAiB;AAAA,UAC1C,KAAM,MAAM;AACR,mBAAO,MAAM,WAAW,cAAc,WAAW,IAAI,SAAS,OAAO,cAAc,YAAY,iBAAiB,MAAM,EAAE,iBAAiB,mBAAmB,CAAC;AAAA,UACjK;AAAA,QACJ,CAAC;AAAA,MACL;AACA,UAAI,CAAC,OAAO,yBAAyB,OAAO,eAAe,GAAG;AAC1D,eAAO,eAAe,OAAO,iBAAiB;AAAA,UAC1C,KAAM,MAAM;AACR,mBAAO,MAAM,WAAW,cAAc,WAAW,IAAI,SAAS,OAAO,cAAc,YAAY,iBAAiB,MAAM,EAAE,iBAAiB,kBAAkB,CAAC;AAAA,UAChK;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,IACJ;AAEA,SAAI,iCAAQ,cAAa,QAAQ,iBAAiB,aAAa,OAAO;AAClE,YAAM,gBAAgB,UAAU,iBAAiB,MAAM,SAAS,MAAM,OAAO;AAC7E,aAAO,eAAe,OAAO,UAAU;AAAA,QACnC,OAAQ;AAAA,QACR;AAAA,MACJ,CAAC;AAAA,IACL;AAGA,SAAI,iCAAQ,cAAa,QAAQ,WAAW;AACxC,YAAM,gBAAgB,MAAM,OAAO;AACnC,aAAO,eAAe,OAAO,UAAU;AAAA,QACnC,OAAQ;AAAA,QACR;AAAA,MACJ,CAAC;AAAA,IACL;AACA,UAAI,WAAM,kBAAN,mBAAqB,cAAa,QAAQ,WAAW;AACrD,YAAM,uBAAuB,MAAM,OAAO;AAC1C,aAAO,eAAe,OAAO,iBAAiB;AAAA,QAC1C,OAAQ;AAAA,QACR;AAAA,MACJ,CAAC;AAAA,IACL;AAGA,QAAI,KAAK,WAAW,OAAO,KAAK,MAAM,QAAQ,QAAQ;AAClD,WAAK,eAAe,KAAK;AAAA,IAC7B;AACA,WAAO;AAAA,EACX;AAAA,EACA,OAAO,cAAc,SAAS,WAAW,aAAa,UAAU;AAC5D,UACIF,SAA0B,YAAY,SAAS,SAAS,OACxD,YAA0B,YAAY,aAAa,SAAS,WAC5D,QAA0B,YAAY,SAAS,SAAS,OACxD,OAA2B,UAAc,cAAe,YAAY,OAAW,SAAS,MACxF,UAA2B,aAAc,cAAe,YAAY,UAAW,SAAS,SACxF,UAA2B,aAAc,cAAe,YAAY,UAAW,SAAS,SACxF,WAA2B,cAAc,cAAe,YAAY,WAAW,SAAS,UACxF,YAA0B,YAAY,SACtC,UAA0B,YAAY,SACtC,UAA0B,YAAY,WAAW,SAAS,SAC1D,EAAE,YAAY,QAAQ,IAAI,WAAW,CAAC;AAK1C,QAAI,UAAU,CAAC,UAAU,SAAS;AAE9B,UAAI,GAAG,eAAe,MAAM,WAAW;AACnC;AAAA,MACJ;AAGA,UAAI,mCAAS,aAAa;AACtB;AAAA,MACJ;AAEA,cAAQ,GAAG,SAAS,OAAO,uCAAW,GAAG;AAEzC,cAAQ,SAAS;AACjB,OAAC,OAAO,cAAc,WAAW,QAAQ,SAAS,IAAI,WAAW,KAAK,SAAS,OAAO,GAAG,IAAI;AAG7F,aAAO,MAAM;AACb,aAAO,MAAM;AACb,aAAO,MAAM;AACb,aAAO,MAAM;AACb,aAAO,MAAM;AACb,aAAO,MAAM;AACb,aAAO,MAAM;AAAA,IACjB;AAEA,QAAI,OAAO;AACP,YAAMG,aAAY;AAClB,UAAI,cAAc;AAClB,gBAAU,CAAC,MAAM,SAAS;AACtB,cAAMC,OAAM,YAAY,IAAI;AAC5B,YAAI,CAAC,gBAAgB,EAAE,WAAW,cAAcA,OAAM,eAAe,OAAO;AACxE,uBAAa,EAAE;AACf,yBAAeA;AACf,UAAAD,WAAU,GAAG,GAAG,IAAI;AAAA,QACxB;AAAA,MACJ;AAAA,IACJ;AAGA,QAAIH,UAAS,MAAM;AACf,YACIG,aAAY,SACZ,aAAY,mCAAS,cAAa,UAAU;AAChD,gBAAU,IAAI,SAAS;AACnB,kBAAU,WAAW,MAAM;AACvB,UAAAA,WAAU,GAAG,IAAI;AAAA,QACrB,GAAGH,MAAK;AAAA,MACZ;AAAA,IACJ;AAIA,QAAI,aAAa,MAAM;AACnB,UAAID,MAAK,SAAS;AAClB,UAAI,UAAU,QAAQ;AAClB,QAAAA,OAAM,OAAK;AACP,iBAAO,UAAU,IAAI,KAAK,IAAI,GAAG,SAAS,GAAG,uCAAW,GAAG,CAAC;AAAA,QAChE;AACA,iBAAS,UAAU;AAAA,MACvB;AACA,UAAI,mCAAS,aAAa;AACtB,kBAAU,QAAQ,SAAS,SAAS;AAAA,UAChC,OAAY;AAAA,UACZ,WAAYA;AAAA,QAChB,CAAC;AAAA,MACL,OACK;AACD,kBAAU,eAAe,gBAAgB,SAAS,QAAQ,SAAS,MAAMA,IAAG;AAAA,MAChF;AAAA,IACJ;AAIA,QAAI,MAAM;AACN,YAAMI,aAAY;AAClB,gBAAU,IAAI,SAAS;AACnB,WAAG,oBAAoB,SAAS,WAAW,OAAO;AAClD,QAAAA,WAAU,GAAG,IAAI;AAAA,MACrB;AAAA,IACJ;AAGA,QAAI,UAAU;AACV,YAAMA,aAAY;AAClB,gBAAU,CAAC,UAAU,SAAS;AAhiB1C,YAAAD;AAiiBgB,gBAAQ,GAAG,SAAS,OAAO,uCAAW,GAAG;AAIzC,cAAM,oBAAkBA,MAAA,MAAM,OAAO,YAAb,gBAAAA,IAAsB,SAAQ,MAAM,OAAO,QAAQ,QAAQ;AACnF,YAAI,CAAC,iBAAiB;AAClB;AAAA,QACJ;AAGA,eAAO,eAAe,OAAO,iBAAiB;AAAA,UAC1C,KAAe,MAAM;AAAA,UACrB,cAAe;AAAA,QACnB,CAAC;AACD,QAAAC,WAAU,OAAO,GAAG,IAAI;AAAA,MAC5B;AAAA,IACJ;AAGA,QAAI,YAAY,WAAW,YAAY,eAAe,OAAO;AACzD,cAAQ,YAAY,eAAe,kBAAkB,QAAQ,WAAW,MAAM,GAAG,oBAAoB,SAAS,WAAW,OAAO,GAAG,OAAO;AAAA,IAC9I;AACA,YAAQ,OAAO;AAAA,MACX,OAAAH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,OAAO,oBAAoB,SAAS,WAAW,SAAS;AACpD,UAAM,EAAE,SAAS,SAAS,SAAS,QAAQ,IAAI,QAAQ;AAEvD,SAAI,mCAAS,QAAO,SAAS;AACzB,YAAM,aAAY,mCAAS,eAAc,UAAU;AACnD,gBAAU,OAAO,QAAQ,UAAU,WAAW,iBAAiB,sBAAsB,EAAE,OAAO;AAAA,IAClG;AACA,YAAQ,oBAAoB,WAAW,SAAS,OAAO;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,OAAO,gBAAgB;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAW,gBAAgB,cAAc;AAAA,IACzC,WAAW,UAAU,MAAM,SAAS,eAAe,aAAa,EAAE,GAAG,aAAa,WAAW,IAAI,CAAC,UAAU,EAAE,SAAS,QAAQ;AAAA,IAC/H,UAAW;AAAA,IACX,OAAW,CAAC;AAAA,IACZ;AAAA,IACA;AAAA,EACJ,GAAG;AACC,QAAI;AACJ,kBAAc,gBAAgB,QAAQ,cAAc,UAAU;AAC9D,UACI,eAAe,CAAC,SAAS,UAAU,GAAG,IAAI,GAC1C,aAAc,MAAM;AAChB,MAAAF,UAAS;AACT,UAAI,CAAC,QAAQ,aAAa;AACtB,YAAI,QAAQ,UAAU;AAClB,kBAAQ,SAAS,SAAS,SAAS,YAAY;AAAA,QACnD,OACK;AACD,kBAAQ,MAAM,SAAS,YAAY;AAAA,QACvC;AAAA,MACJ;AAAA,IACJ,GACAA,YAAc,GAAG,GAAG;AAAA,MAChB;AAAA,MACA,CAAC,GAAG,IAAI,KAAK,EAAE,EAAE,eAAgB,gBAAiB,cAAc,OAAO,GAAG;AA3nB1F,YAAAI;AA4nBoB,YAAI,WAAW,SAAS;AACpB,cAAI,iBAAiB,aAAY,iDAAgB,MAAM,iBAAgB;AACnE,gBAAI,SAAS;AACT,eAAAA,MAAA,YAAY,iBAAZ,gBAAAA,IAAA,kBAA2B;AAC3B,wBAAU;AAAA,YACd;AACA,uBAAW;AAAA,UACf;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,CAAC;AAGL,QAAI,YAAY,MAAM;AAClB,gBAAU,YAAY,WAAW,YAAY,WAAW,IAAI,mBAAmB,YAAY;AAAA,IAC/F;AACA,WAAOJ;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,aAAa,qBAAqB,QAAQ;AACtC,WAAO,IAAI,QAAQ,aAAW;AAC1B,aAAO,UAAU;AACjB,mBAAY,gBAAgB,MAAM;AAAA,IACtC,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,sBAAsB,SAAS,SAAS,SAAS;AACpD,QAAI,SAAS,wBAAwB;AACrC,WAAO,MAAM;AACT,UAAI,CAAC,wBAAwB;AACzB,iCAAyB,GAAG,GAAG;AAAA,UAC3B;AAAA;AAAA,UAEA,YAAa,iBAAe;AACxB,sBAAU,YAAY,eAAe,CAAC,EAAE;AAExC,wBAAY,eAAe;AAAA,UAC/B;AAAA,UACA,UAAW,iBAAe;AACtB,gBAAI,YAAY,eAAe,CAAC,EAAE,eAAe,SAAS;AACtD,0BAAY,eAAe;AAC3B,2BAAa,YAAY;AACzB,wBAAU,yBAAyB;AACnC,oBACI,aAAsB,UAAU,KAAK,YAAY,eAAe,CAAC,EAAE,QAAQ,MAAM,IAAI,GACrF,UAAsB,YAAY,eAAe,CAAC,EAAE,QAAQ,WAAW,GACvE,UAAsB,YAAY,eAAe,CAAC,EAAE,QAAQ,WAAW,GACvE,sBAAsB,OAAO,OAAO;AAAA,gBAChC,cAAe;AAAA,cACnB,GAAG,WAAW,GACd,gBAAsB,IAAI,WAAW,YAAY,mBAAmB;AACxE,qBAAO,iBAAiB,eAAe;AAAA,gBACnC,QAAU,EAAE,OAAQ,YAAY,OAAO;AAAA,gBACvC,SAAU,EAAE,OAAQ,QAAQ;AAAA,gBAC5B,SAAU,EAAE,OAAQ,QAAQ;AAAA,cAChC,CAAC;AACD,kBAAI,OAAO,YAAY,UAAU;AAC7B,0BAAU,QAAQ,OAAO;AAAA,cAC7B;AAEA,sBAAQ,KAAK,SAAS,aAAa;AAAA,YACvC;AAAA,UACJ;AAAA,UACA,MAAO;AAAA,QACX,CAAC;AAED,uBAAe,WAAW,MAAM;AAC5B,iCAAuB;AACvB,oBAAU,yBAAyB;AAAA,QACvC,GAAG,GAAG,YAAY;AAAA,MACtB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,OAAO,aAAa,OAAOO,gBAAe,cAAc,QAAQ,YAAY,WAAW;AACnF,QAAI,SAAS;AACb,QAAI,UAAU,MAAM;AAChB,eAASA;AAAA,IACb,WACS,OAAO,UAAU,UAAU;AAChC,cAAQ,MAAM,YAAY;AAC1B,UAAI,MAAM,MAAM,YAAY,GAAG;AAC3B,iBAAS,GAAG,KAAK;AAAA,MACrB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,uBAAuB,MAAM;AAChC,WAAO,YAAY,IAAI,KAAK;AAAA,EAChC;AACJ;AAAA;AAAA;AAAA;AAAA;AAnqBI,cALiB,cAKV,gBAAe;AAAA,EAClB,WAAc;AAAA,EACd,SAAc;AAAA,EACd,OAAc;AAAA,EACd,UAAc;AAAA,EACd,aAAc;AAAA,EACd,YAAc;AAAA,EACd,YAAc;AAAA,EACd,WAAc;AAAA,EACd,WAAc;AAAA,EACd,UAAc;AAAA,EACd,OAAc;AAAA,EACd,SAAc;AAAA,EACd,UAAc;AAClB;AAnBJ,IAAqB,cAArB;AAyqBA,IAAM,KAAK;AAOX,GAAG,gBAAgB;AAOnB,GAAG,eAAe;AAMlB,IAAI,cAAc,eAAe;AAC7B,KAAG,GAAG;AAAA,IACF,SAAY;AAAA,IACZ,WAAY,WAAS;AAEjB,UAAI,MAAM,OAAO,QAAQ,aAAa,GAAG;AACrC,cAAM,eAAe;AAAA,MACzB;AAAA,IACJ;AAAA,IACA,SAAU;AAAA,IACV,SAAU;AAAA,EACd,CAAC;AACL;AACA,YAAY,SAAS;;;AC3xBrB,IACI,oBAAoB;AADxB,IAEI,OAAoB,EAAE,OAAQ,QAAQ;AAF1C,IAGI,eAAoB,KAAK;AAH7B,IAII,YAAoB,KAAK;AAJ7B,IAKI,EAAE,SAAS,IAAS;AALxB,IAcI,WAAsB;AAd1B,IAeI,cAAsB,SAAS;AAfnC,IAgBI,sBAAsB,IAAI,OAAO,eAAe,WAAW,YAAY,WAAW,YAAY,WAAW,YAAY,WAAW,UAAU,WAAW,UAAU,WAAW,GAAG;AAhBjL,IAiBI,sBAAsB,IAAI,OAAO,sNAAsN;AAjB3P,IAkBI,oBAAsB,IAAI,OAAO,MAAM,oBAAoB,MAAM,QAAQ,oBAAoB,MAAM,GAAG;AAlB1G,IAmBI,kBAAsB,IAAI,OAAO,uBAAuB,WAAW,eAAe,WAAW,OAAO;AAnBxG,IAoBI,kBAAsB,IAAI,OAAO,uBAAuB,WAAW,eAAe,WAAW,OAAO;AApBxG,IAqBIC,gBAAsB;AArB1B,IAsBI,cAAsB;AAtB1B,IAuBI,UAAsB;AAvB1B,IAwBI,WAAsB;AAxB1B,IAyBI,iBAAsB;AAzB1B,IA4BI,wBAAwB;AAAA,EACpB,aAAgB;AAAA,EAChB,KAAgB;AAAA,EAChB,eAAgB;AACpB;AAhCJ,IAmCI,0BAA2B;AAAA;AAAA;AAAA;AAAA,EAIvB,KAAe;AAAA,EACf,MAAe;AAAA,EACf,MAAe;AAAA,EACf,UAAe;AAAA,EACf,SAAe;AAAA,EACf,OAAe;AAAA,EACf,SAAe;AAAA,EACf,QAAe;AAAA,EACf,aAAe;AAAA,EACf,IAAe;AAAA,EACf,WAAe;AAAA,EACf,OAAe;AAAA,EACf,WAAe;AAAA,EACf,WAAe;AAAA;AAAA,EACf,cAAe;AAAA;AAAA,EACf,WAAe;AAAA;AAAA,EACf,aAAe;AAAA;AAAA,EACf,aAAe;AAAA;AAAA,EACf,cAAe;AAAA;AACnB;AA1DJ,IA2DI,wBAA2B;AAAA,EACvB,QAAa;AAAA,EACb,YAAa;AAAA,EACb,OAAa;AACjB;AA/DJ,IAgEI,qBAAqB;AAAA,EACjB,OAAW;AAAA,EACX,UAAW;AACf;AAnEJ,IAoEI,sBAAsB;AAAA,EAClB,QAAW;AAAA,EACX,QAAW;AAAA,EACX,OAAW;AAAA,EACX,OAAW;AAAA,EACX,QAAW;AAAA,EACX,QAAW;AAAA,EACX,UAAW;AAAA,EACX,MAAW;AACf;AA7EJ,IA8EI,MAAmB;AA9EvB,IA+EI,MAAmB;AA/EvB,IAgFIC,eAAmB,OAAO,OAAO,CAAC,CAAC;AAhFvC,IAiFI,aAAmB,MAAM,UAAU;AAjFvC,IAkFI,mBAAmB,QAAQ,QAAQ;AAlFvC,IAmFI,YAAmB;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAhGJ,IAiGI,iBAAiB,OAAK,EAAE;AAjG5B,IAkGI,gBAAiB,CAAC,MAAM,KAAK,YAAY;AACrC,MAAI,QAAQ,QAAQ,YAAY;AAG5B,WAAO,aAAa,WAAW,MAAM,KAAK,OAAO;AAAA,EACrD;AACA,SAAO,aAAa,MAAM,MAAM,KAAK,OAAO;AAChD;AAzGJ,IA0GI,YAAY,OAAK;AAEb,MAAI,EAAE,aAAa;AACf,UAAM,QAAQ,EAAE,cAAc,YAAY,iBAAiB,CAAC;AAC5D,WAAO,MAAM,iBAAiB,SAAS,MAAM,UAAU,MAAM,iBAAiB,YAAY,MAAM;AAAA,EACpG;AACJ;AAhHJ,IAoHI,YAAY,QAAM,OAAO,OAAO,IAAI,QAAQ,QAAQ,GAAG,YAAY,MAAM,GAAG,cAAc,gBAAgB,kBAAkB,MAAM,UAAU,cAAc,IAAI,UAAU,MAAM,WAAW,GAAG,eAAe,UAAU,GAAG,UAAU;AApHtO,IAqHI,2BAA2B,qBAAmB;AAC1C,MAAI,2BAA2B,MAAM;AACjC,WAAO;AAAA,EACX;AACA,MAAI,OAAO,oBAAoB,UAAU;AACrC,WAAOC,IAAG,0BAA0B,eAAe;AAAA,EACvD;AACA,SAAOA,IAAG,cAAc,eAAe;AAC3C;AA7HJ,IA8HI,kBAAkB,uBAAO,OAAO,IAAI;AA9HxC,IA+HI,oBAAoB,CAAC,MAAM,YAAY;AACnC,QAAM,QAAQ,gBAAgB,IAAI,KAAK,CAAC,aAAa,UAAU,IAAI,GAAG,OAAO;AAC7E,MAAI,CAAC,gBAAgB,IAAI,GAAG;AACxB,oBAAgB,MAAM,CAAC,CAAC,IAAI,gBAAgB,IAAI,IAAI;AAAA,EACxD;AACA,SAAO;AACX;AArIJ,IAsII,uBAAuB;AAtI3B,IAuII,eAAe;AAAA,EACX,MAAS;AAAA,EACT,QAAS;AACb;AA1IJ,IA2II,YAAY,UAAQ;AAEhB,QAAM,SAAS,KAAK,kBAAkB,KAAK,gBAAgB,aAAc,KAAK,cAAc,KAAK;AAEjG,UAAO,iCAAQ,cAAa,KAAK,yBAAyB,OAAO,OAAO;AAC5E;AAhJJ,IAiJI,YAAY,WAAQ,6BAAM,cAAa,KAAK;AAGhD;AAAA,EACI;AAAA,EAAO;AAAA,EAAS;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAU;AAAA,EAAY;AAAA,EAAa;AAAA,EAAY;AAAA,EAC1F;AAAA,EAAiB;AAAA,EAAe;AAAA,EAAkB;AAAA,EAAoB;AAAA,EAAqB;AAAA,EAC3F;AAAA,EAAa;AAAA,EAAe;AAAA,EAAgB;AAAA,EAC5C;AAAA,EAAc;AAAA,EAAgB;AAAA,EAAiB;AAAA,EAC/C;AAAA,EAAY;AAAA,EAAiB;AAAA,EAAc;AAAA,EAAgB;AAAA,EAAc;AAC7E,EAAE,QAAQ,UAAQ,kBAAkB,MAAM,IAAI,CAAC;AAE/C,IAAI,iBAAiB;AAArB,IACI,YAAiB;AADrB,IAEI,YAAiB;AAFrB,IAGI;AAHJ,IAGqB;AAHrB,IAGiC;AAyDjC,IAAqB,YAArB,MAAqB,WAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqB3B,aAAa,QAAQ,SAAS,YAAY,GAAG;AACzC,UACI,MAAM,cAAc,YAAY,IAAI,SAAS,UAAU,IACvD;AAAA,MACI;AAAA,MACA,YAAa,EAAE,WAAY,WAAW;AAAA,IAC1C,IAAM;AAEV,eAAW,IAAI,0BAA0B;AACzC,cAAU,IAAI,GAAG;AACjB,UAAM,YAAY,qBAAqB;AAAA,MACnC;AAAA,MACA,eAAgB;AAAA,IACpB,CAAC;AACD,cAAU,OAAO,GAAG;AACpB,eAAW,OAAO,0BAA0B;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,YAAY,SAAS,yBAAyB,OAAO;AACxD,QAAI,CAAC,wBAAwB;AAEzB,UAAI,CAACC,IAAG,UAAU,OAAO,KAAKA,IAAG,OAAO,YAAY,SAAS,cAAc,GAAG;AAC1E,eAAO;AAAA,MACX;AAAA,IACJ;AACA,UAAM,WAAW,QAAQ;AAQzB,WAAO,oBAAoB,QAAQ,MAC7B,aAAa,OAAO,aAAa,WAAW,CAAC,CAAC,QAAQ,QACxD,QAAQ,aAAa,UAAU,KAAK,QACpC,QAAQ,oBAAoB;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAW,SAAS;AACvB,YAAQ,QAAQ,qBAAqB,mBAAmB,QAAQ,QAAQ,MAAM,EAAE,QAAQ,YAAY,QAAQ,YAAY,QAAQ,QAAQ,SAAS;AAAA,EACrJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,SAAS,QAAQ,QAAQ,OAAO,QAAQ;AAE3C,QAAI,CAAC,UAAU,UAAU,OAAO,MAAM,IAAI,OAAO,SAAS,MAAM,GAAG;AAC/D,aAAO;AAAA,IACX;AACA,UACI,cAAoB,iCAAQ,eAAc,WAAU,cAAc,OAAO,SAAS,UAAU,MAAM,SAClG,UAAoB,UAAU,KAAK,UAAU,GAC7C,SAAoB,QAAQ,aAAa,aACzC,MAAoB,cAAc,OAAO,QAAQ,cACjD,OAAoB,cAAc,UAAU,KAAK,GAAG;AAExD,YAAQ,SAAS,IAAI,iBAAiB;AAEtC,QAAI,WAAW,IAAI,MAAM;AACrB,aAAO;AAAA,IACX;AACA,UAAM,SAAS,KAAK,wBAAwB,QAAQ,SAAS,MAAM;AAEnE,QAAI,UAAU,YAAY;AACtB,aAAO,UAAU,IAAI,iBAAiB,YAAY,IAAI,iBAAiB,SAAS;AAAA,IACpF;AAEA,WAAO,cAAc,SAAS,OAAO,UAAU,CAAC,KAAK,IAAI,IAAI,YAAY,CAAC,KAAK,IAAI,IAAI,SAAS,IAAI;AAAA,EACxG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,wBAAwB,QAAQ,SAAS,QAAQ;AAjV5D,QAAAC;AAkVQ,UACI,cAAe,UAAU,OAAO,MAAM,IAAI,OAAO,SAAS,MAC1D,eAAe,WAAU,mBAAmB,UAAU,MAAM,GAAG,SAAS,eAAe,MAAM,GAC7F,aAAe,UAAU,KAAK,eAAe,QAAQ,MAAM,IAAI;AAEnE,QAAI,aAAa;AACb,iBAAW,UAAU,OAAO,UAAU,GAAG,OAAO,UAAU,CAAC;AAC3D,iBAAW,SAAS,WAAW,QAAQ;AAAA,IAC3C;AACA,YAAOA,MAAA,6CAAe,YAAf,gBAAAA,IAAA,mBAAyB,YAAY,OAAO;AAAA,EACvD;AAAA,EACA,OAAO,mBAAmB,cAAc,SAAS,UAAU;AACvD,UAAM,YAAY,CAAC;AACnB,QAAI,SAAS;AACb,aAAS,WAAW,cAAc,YAAY,aAAa,IAAI,MAAM,WAAW,UAAU,QAAQ,GAAG;AACjG,YAAM,QAAQ,SAAS,cAAc,YAAY,iBAAiB,QAAQ;AAE1E,WAAK,aAAa,MAAM,SAAS,KAAK,aAAa,MAAM,SAAS,MAAM,MAAM,YAAY,YAAY;AAClG,kBAAU,QAAQ,UAAU,OAAO,UAAU,MAAM,MAAM,MAAM,QAAQ,CAAC;AAAA,MAC5E;AAAA,IACJ;AAEA,aAAS,IAAI,GAAG,EAAE,OAAO,IAAI,WAAW,UAAU,IAAI,QAAQ,KAAK;AAC/D,eAAS,OAAO,UAAU,UAAU,CAAC,CAAC;AAAA,IAC1C;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,UAAU,SAAS;AACtB,UAAMC,YAAW,QAAQ;AAGzB,WAAO,SAAS,UAAU,UAAU,OAAO,GAAG;AAE1C,UAAI,YAAYA,WAAU;AACtB,eAAO;AAAA,MACX;AAEA,UAAI,UAAU,OAAO,KAAK,CAAC,UAAU,OAAO,GAAG;AAC3C,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,WAAW,OAAO;AACrB,WAAO,iBAAiB;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,MAAM,SAAS,SAAS;AAC3B,WAAO,aAAa,MAAM,MAAM,SAAS,EAAE,OAAQ,cAAc,CAAC;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,kBAAkB,WAAW,eAAe,YAAY;AAjanE,QAAAD;AAkaQ,QAAI,WAAW,uCAAW,UACtB,OAAO,GAAG,MAAM,MAAM;AAE1B,SAAIA,MAAA,uCAAW,gBAAX,gBAAAA,IAAwB,YAAY;AACpC,mBAAa;AAAA,IACjB;AACA,QAAI,YAAY,EAAE,qBAAqB,OAAO;AAC1C,UAAI,MAAM,QAAQ,QAAQ,GAAG;AACzB,aAAK,IAAI,GAAG,IAAI,SAAS,QAAQ,EAAE,GAAG;AAClC,UAAAD,IAAG,kBAAkB,SAAS,CAAC,GAAG,eAAe,UAAU;AAAA,QAC/D;AAAA,MACJ,OACK;AACD,eAAO;AACP,kBAAU,WAAW,WAAW,CAAC;AACjC,aAAK,QAAQ,MAAM;AACf,kBAAQ,KAAK,IAAI;AACjB,cAAI,+BAAO,UAAU;AACjB,oBAAQ,MAAM;AAAA,UAClB;AAEA,gBAAM,CAAC,KAAK,WAAW,GAAG,KAAK,CAACA,IAAG,UAAU,KAAK;AAClD,kBAAO;AAAA,YAAgB;AAAA;AAAA,YAAmB,CAAC;AAAA;AAC3C,cAAI,OAAO;AACP,gBAAI,EAAE,iBAAiB,OAAO;AAC1B,kBAAI,MAAM,cAAc,OAAO;AAC3B,uBAAO,MAAM;AAAA,cACjB,WACS,OAAO,OAAO,UAAU,UAAU;AACvC,sBAAM,YAAY;AAAA,cACtB;AACA,cAAAA,IAAG,kBAAkB,OAAO,eAAe,UAAU;AAAA,YACzD;AACA,qBAAS,KAAK,KAAK;AAAA,UACvB;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,OAAO,QAAQ,IAAI,mBAAmB,WAAW,oBAAoB,GAAG;AACpE,UAAM,aAAa,IAAI;AACvB,WAAO,KAAK,MAAM,KAAK,UAAU,IAAI;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,QAAQ,IAAI,mBAAmB,WAAW,oBAAoB,GAAG;AACpE,UAAM,aAAa,IAAI;AACvB,WAAO,KAAK,MAAM,KAAK,UAAU,IAAI;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,gBAAgB,SAAS;AAC5B,WAAO,QAAQ,mCAAS,UAAU;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,iBAAiB,GAAG,GAAG;AAC1B,QAAI,KAAK,SAAS,iBAAiB,GAAG,CAAC;AAEvC,QAAIA,IAAG,gBAAgB,EAAE,GAAG;AACxB,WAAK,GAAG,WAAW,iBAAiB,GAAG,CAAC,KAAK;AAAA,IACjD;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,eAAe,IAAI,GAAG,GAAkB,SAAS,IAAI;AACxD,UAAM,IAAI,KAAK,OAAO,IAAI,IAAI,UAAU,GAAG,GAAG,GAAG,CAAC;AAClD,QAAI,SAAS;AACb,UAAM,KAAK,GAAG,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAAG,QAAM;AACzC,UAAI,UAAU,KAAKA,KAAI,MAAM,EAAE,SAAS,CAAC,GAAG;AAGxC,iBAAUA,IAAG,SAAS,UAAWH,IAAG,eAAeG,KAAI,GAAG,MAAM,MAAM,KAAKA;AAC3E,eAAO;AAAA,MACX;AAAA,IACJ,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,OAAO,QAAQ,MAAM,OAAO,cAAc,MAAM;AAC5C,UAAM,CAAC,UAAU,QAAQ,IAAI,kBAAkB,IAAI;AACnD,QAAI,SAAS,MAAM;AACf,cAAQ,OAAO,KAAK;AACpB,cAAS,YAAY,SAAS,KAAK,KAAK,IAAK,QAAQ,cAAc;AAAA,IACvE;AACA,WAAO,CAAC,UAAU,KAAK;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,gBAAgB;AACvB,QAAI,KAAK,SAAS;AAClB,WAAO,GAAG,YAAY;AAClB,WAAK,GAAG,WAAW;AAAA,IACvB;AACA,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,OAAO,iBAAiB,SAAS;AAC7B,QAAI,mCAAS,UAAU;AACnB,gBAAU,QAAQ;AAAA,IACtB;AAEA,QAAI,OAAM,mCAAS,kBAAiB,UAAU;AAC9C,WAAO,yBAAI,YAAY;AACnB,WAAK,GAAG,WAAW;AAAA,IACvB;AACA,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,OAAO,eAAe,SAAS;AApjBnC,QAAAF;AAqjBQ,UACI,QAAeA,MAAA,QAAQ,gBAAR,gBAAAA,IAAA,eACf,EAAE,SAAS,IAAI;AAInB,WAAO,aAAa,KAAK,gBAAgB,KAAK,OAAO,aAAa,KAAK,yBAAyB,OAAQ,QAAQ,cAAc,SAAS,OAAO,IAAI,QAAQ,cAAc,OAAO;AAAA,EACnL;AAAA;AAAA,EAEA,OAAO,oBAAoB,SAAS;AA9jBxC,QAAAA;AA+jBQ,UAAM,QAAOA,MAAA,QAAQ,gBAAR,gBAAAA,IAAA;AACb,QAAI,6BAAM,MAAM;AACZ,aAAO,6BAAM;AAAA,IACjB;AAGA,WAAO,QAAQ,eAAe,QAAQ,QAAQ,YAAY;AACtD,gBAAU,QAAQ;AAAA,IACtB;AACA,WAAO;AAAA,EACX;AAAA,EACA,OAAO,uBAAuB,SAAS;AA1kB3C,QAAAA;AA4kBQ,aAAOA,MAAA,QAAQ,YAAR,gBAAAA,IAAiB,mBAAkB;AAAA,IAEtC,QAAQ,YAAY,EAAE,aAAa,KAAK;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAM,SAAS;AAClB,WAAO,QAAQ,OAAO,QAAQ,KAAK,eAAgB,EAAE;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,kBAAkB,MAAM,IAAI;AA9lBvC,QAAAA,KAAA;AA+lBQ,QAAI,SAAS,IAAI;AACb,aAAO;AAAA,IACX;AACA,WAAO,QAAQ,IAAEA,MAAA,KAAK,KAAK,WAAW,SAAS,gBAA9B,gBAAAA,IAAA,WAA4C,QAAO,SAAS,KAAK;AAG9E,eAAO,UAAK,UAAL,mBAAY,aAAY,KAAK,UAAU,OAAO,KAAK,QAAQ,KAAK;AAAA,IAC3E;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,WAAW,mBAAmB;AAEjC,QAAI,6BAA6B,SAAS;AACtC,aAAO;AAAA,IACX;AACA,WAAO,IAAI,cAAc,iBAAiB;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,cAAc,mBAAmB,YAAY;AAChD,UAAM,UAAUD,IAAG,WAAW,iBAAiB;AAC/C,QAAI,WAAW,YAAY;AACvB,iBAAW,OAAO,YAAY;AAC1B,YAAI,WAAW,GAAG,KAAK,MAAM;AACzB,kBAAQ,gBAAgB,GAAG;AAAA,QAC/B,OACK;AACD,kBAAQ,aAAa,KAAK,WAAW,GAAG,CAAC;AAAA,QAC7C;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,UAAU,SAAS,OAAO,OAAO;AACpC,QAAI,UAAU,WAAW,GAAG;AACxB,cAAQ,OAAO,YAAY,WAAW,GAAG,OAAO,OAAO,4BAAW;AAAA,IACtE,OACK;AACD,gBAAUA,IAAG,WAAW,OAAO;AAC/B,cAAQ,QAAQ,MAAM,KAAK,IAAI,OAAO,UAAU,WAAW,GAAG,KAAK,OAAO,wBAAS;AAAA,IACvF;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,WAAW,OAAO,SAAS,GAAG;AACjC,UAAM,OAAO,KAAK,IAAI,IAAI,MAAM;AAChC,WAAO,SAAS,QAAQ,UAAU,MAAM,MAAM,KAAK,IAAI,KAAK,GAAG,KAAK,MAAM,QAAQ,IAAI,IAAI,IAAI;AAAA,EAClG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,SAAS,SAAS,UAAU;AAC/B,WAAO,QAAQ,cAAc,YAAY,QAAQ;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,SAAS,SAAS,UAAU;AAC/B,WAAOA,IAAG,SAAS,SAAS,QAAQ,KAAK;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA,OAAO,SAAS,SAAS,UAAU;AAE/B,QAAI,SAAS,CAAC,MAAM,OAAO,SAAS,WAAW,IAAI,GAAG;AAClD,UAAI,SAAS,CAAC,MAAM,KAAK;AACrB,mBAAW,SAAS,OAAO,CAAC;AAAA,MAChC;AACA,iBAAW,YAAY;AAAA,IAC3B;AACA,WAAO,MAAM,KAAK,QAAQ,iBAAiB,QAAQ,CAAC;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,qBAAqB,SAAS;AACjC,WAAO,QAAQ;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,KAAK,SAAS,UAAU;AA5uBnC,QAAAC;AA6uBQ,QAAI,CAAC,SAAS;AACV,aAAO;AAAA,IACX;AACA,SAAIA,MAAA,QAAQ,YAAR,gBAAAA,IAAA,cAAkB,WAAW;AAC7B,aAAO;AAAA,IACX;AACA,eAAW,YAAY;AACvB,WAAO,QAAQ,cAAc,QAAQ;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,aAAa,eAAe,cAAc;AAC7C,UACI,aAAaD,IAAG,eAAe,aAAa,GAC5C,YAAYA,IAAG,eAAe,YAAY;AAC9C,QAAI,aAAa,eAAe,aAAa,UAAU,MAAM;AACzD,aAAOA,IAAG,aAAa,YAAY,UAAU,IAAI;AAAA,IACrD;AACA,WAAO,cAAc,SAAS,YAAY;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,gBAAgB,OAAO,cAAc,UAAU;AAClD,WAAQ,CAAC,SAASA,IAAG,UAAU,KAAK,IAAK,QAAQ,MAAM,WAAW;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,UAAU,OAAO;AACpB,YAAO,+BAAO,cAAa,SAAS,gBAAgBA,IAAG,OAAO,KAAK;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,OAAO,eAAe,SAAS;AAC3B,YAAO,mCAAS,cAAa,OAAO,IAAI,eAAe;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,OAAO,OAAO;AAGjB,WAAO,QAAQ,KAAK,KAAK,OAAO,MAAM,aAAa,YAAY,CAAC,SAAS,KAAK;AAAA,EAClF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,gBAAgB,SAAS,UAAUI,KAAI;AAC1C,QAAI,OAAO,YAAY,UAAU;AAE7B,YAAM,IAAI,MAAM,0FAA0F;AAAA,IAC9G;AACA,IAAAJ,IAAG,SAAS,SAAS,QAAQ,EAAE,QAAQI,GAAE;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,aAAa,SAASA,KAAI;AAC7B,UAAM,KAAK,QAAQ,QAAQ,EAAE,QAAQA,GAAE;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,mBAAmB,SAAS,UAAU;AACzC,IAAAJ,IAAG,gBAAgB,SAAS,UAAU,WAAS,MAAM,OAAO,CAAC;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,kBAAkB,YAAY,SAAS;AAC1C,YAAQ,QAAQ,SAAOA,IAAG,gBAAgB,SAAS,MAAM,KAAK,WAAS,MAAM,UAAU,OAAO,GAAG,CAAC,CAAC;AAAA,EACvG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,GAAG,SAAS,UAAU;AACzB,kBAAc,UAAU,QAAQ,SAAS,mEAAmE;AAC5G,WAAO,QAAQ,QAAQ,QAAQ;AAAA,EACnC;AAAA,EACA,OAAO,YAAY,SAAS,yBAAyB,eAAe,MAAM;AACtE,QAAI,QAAS,OACT,UACA,SAAS;AACb,8BAA0B,YAAY,QAAQ,uBAAuB;AACrE,WAAQ,SAAS,OAAO,eAAgB;AACpC,UAAI,wBAAwB,SAAS,MAAM,GAAG;AAC1C,gBAAQ;AACR;AAAA,MACJ;AACA,UAAI,gBAAgB,WAAW;AAAc;AAC7C,iBAAW;AAAA,IACf;AACA,QAAI,CAAC;AAAO,aAAO;AACnB,WAAO,YAAY;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,WAAW,SAAS;AACvB,UAAM,UAAU,CAAC;AACjB,WAAO,QAAQ,eAAe;AAC1B,cAAQ,KAAK,QAAQ,aAAa;AAClC,gBAAU,QAAQ;AAAA,IACtB;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,YAAY,IAAI,eAAe,IAAI;AACtC,WAAO,aAAa,eAAe,IAAI,YAAY;AAAA,EACvD;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,EA6BA,OAAO,cAAc,SAAS,CAAC,GAAG,SAAS;AAh7B/C,QAAAC,KAAA;AAi7BQ,QAAI,YAAY,SACZ,SAAS,GAAG,iBAAiB,iBAAiB,YAAY,KAAK,MAAM,OAAO,UAAU,MAAM;AAChG,QAAI,OAAO,cAAc,WAAW;AAChC,YAAM,IAAI,MAAM,UAAU;AAAA,IAC9B,WACS,SAAS;AACd,mBAAa,QAAQ;AACrB,iBAAW,QAAQ;AACnB,aAAO,QAAQ;AACf,kBAAY,QAAQ;AACpB,oBAAc,QAAQ;AACtB,UAAI,YAAY;AACZ,0BAAkB;AAClB,qBAAa,eAAe;AAAA,MAChC;AAAA,IACJ;AACA,QAAI,OAAO,OAAO,WAAW,UAAU;AACnC,aAAO,SAAS,SAAS,eAAe,OAAO,MAAM;AAAA,IACzD;AAEA,UACI,SAAS,OAAO,UAAW,OAAO,eAAe,OAAO,YAAY,YACpE,EAAE,SAAS,MAAM,WAAW,aAAa,KAAK,IAAI;AACtD,QAAI,aAAa;AACb,oBAAc,YAAY,eAAe;AACzC,wBAAkB,YAAY;AAC9B,UAAI,iBAAiB;AACjB,0BAAkB;AAClB,qBAAa,oBAAoB;AACjC,kBAAU;AAAA,UACN,GAAG;AAAA,UACH,YAAa;AAAA,QACjB;AAAA,MACJ;AAAA,IACJ;AACA,QAAI,YAAY;AACZ,iBAAW;AAAA,IACf;AACA,QAAI,OAAO,IAAI;AACX,gBAAU,IAAI,gBAAgB,OAAO,IAAI,OAAO,OAAO,KAAK;AAAA,IAChE,OACK;AACD,gBAAU,IAAI,cAAc,OAAO,OAAO,KAAK;AAAA,IACnD;AACA,QAAI,QAAQ,MAAM;AACd,MAAAD,IAAG,aAAa,SAAS,IAAI;AAAA,IACjC,WACS,QAAQ,MAAM;AACnB,UAAI,gBAAgB,kBAAkB;AAClC,gBAAQ,YAAY,IAAI;AAAA,MAC5B,OACK;AACD,gBAAQ,YAAY;AAAA,MACxB;AAAA,IACJ;AACA,QAAI,OAAO,SAAS;AAChB,MAAAA,IAAG,OAAO,cAAc,SAAS,OAAO,OAAO;AAAA,IACnD;AACA,QAAI,OAAO,OAAO;AACd,MAAAA,IAAG,WAAW,SAAS,OAAO,KAAK;AAAA,IACvC;AACA,QAAI,SAAS;AACT,WAAK,QAAQ,SAAS;AAClB,gBAAQ,QAAQ,IAAI;AACpB,YAAI,SAAS,MAAM;AACf,kBAAQ,QAAQ,IAAI,IAAI;AAAA,QAC5B;AAAA,MACJ;AAAA,IACJ;AACA,QAAI,QAAQ;AACR,WAAK,SAAS,QAAQ,SAAS,OAAO,WAAW;AAAA,IACrD;AACA,QAAI,UAAU;AAEV,cAAQ,cAAc,SAAS;AAAA,IACnC;AACA,QAAI,aAAa,CAAC,YAAY;AAG1B,UAAI,UAAU;AACV,gBAAQ,aAAa;AACrB,iBAAS,UAAU,WAAW,SAAS,MAAM;AAAA,MACjD,OACK;AACD,YAAI,CAAC,MAAM;AACP,oBAAU,OAAO,OAAO,CAAC,GAAG,OAAO;AACnC,kBAAQ,OAAO,OAAO,CAAC;AAAA,QAC3B;AACA,aAAK,SAAS,IAAI;AAClB,gBAAQ,aAAa,kBAAkB,SAAS;AAAA,MACpD;AAAA,IACJ;AACA,UACI,YAAY,OAAO,aAAa,OAAO,OACvC,OAAO,OAAO,KAAK,MAAM;AAC7B,QAAI,WAAW;AACX,cAAQ,aAAa,SAAS,aAAa,UAAU,SAAS,CAAC;AAAA,IACnE;AACA,SAAK,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AAC9B,aAAO,KAAK,CAAC;AACb,cAAQ,OAAO,IAAI;AAGnB,WAAK,MAAM,sBAAsB,IAAI,MAAM,MAAM;AAC7C,gBAAQ,OAAO,IAAI,IAAI;AAAA,MAC3B,WACS,CAAC,wBAAwB,IAAI,KAAK,QAAQ,SAAS,MAAM;AAO9D,gBAAQ,aAAa,MAAM,KAAK;AAAA,MACpC;AAAA,IACJ;AAGA,QAAI,CAAC,OAAO,aAAa,KAAK,CAAC,OAAO,QAAQ,CAAC,OAAO,YAAY,CAAC,WAAU,YAAY,SAAS,IAAI,KAAK,CAAC,QAAQ,SAAS;AACzH,cAAQ,aAAa,QAAQ,cAAc;AAAA,IAC/C;AAGA,6CAAS,aAAT,iCAAoB;AAAA,MAChB,QAAgB;AAAA,MAChB,WAAgB;AAAA,MAChB,eAAgB;AAAA,MAChB,QAAgB,WAAW,YAAa,QAAQ,iBAAeC,MAAA,OAAO,YAAP,gBAAAA,IAAiB,QAAQ;AAAA,IAC5F;AAEA,QAAI,cAAc,MAAM;AACpB,cAAQ,YAAY,YAAY,CAAC,OAAO;AAAA,IAC5C,WAES,MAAM,QAAQ,SAAS,GAAG;AAC/B,gBAAU,KAAK,OAAO;AAAA,IAC1B;AACA,QAAI,OAAO,UAAU;AACjB,UAAI,aAAa;AAEb,gBAAQ,YAAY,CAAC;AAAA,MACzB;AACA,aAAO,SAAS,QAAQ,WAAS;AA/jC7C,YAAAA,KAAAI,KAAA;AAikCgB,YAAI,OAAO;AAEP,cAAI,OAAO,UAAU,UAAU;AAC3B,kBAAM,WAAW,SAAS,eAAe,KAAK;AAC9C,gBAAI,UAAU;AACV,uBAAS,cAAc,SAAS;AAAA,YACpC;AACA,oBAAQ,YAAY,QAAQ;AAAA,UAChC,WAES,MAAM,MAAM,QAAQ,GAAG;AAC5B,kBAAM,SAAS;AACf,gBAAI,CAAC,MAAM,MAAM,OAAO,IAAI;AACxB,oBAAM,KAAK,OAAO;AAAA,YACtB;AACA,kBACI,eAAeL,IAAG,cAAc,OAAO;AAAA,cACnC,GAAG;AAAA,cACH,aAAaK,OAAAJ,MAAA,OAAO,gBAAP,gBAAAA,IAAoB,cAApB,OAAAI,MAAiC;AAAA,YAClD,CAAC,GACD,UAAS,WAAM,YAAN,mBAAgB;AAE7B,gBAAI,UAAU,MAAM;AAChB,sBAAQ,UAAU,MAAM,IAAI;AAAA,YAChC;AAEA,mBAAO,MAAM;AAAA,UACjB,OACK;AACD,oBAAQ,YAAY,KAAK;AAAA,UAC7B;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL;AAEA,YAAQ,gBAAgB;AACxB,UAAM,SAAS,QAAQ,aAAa;AACpC,QAAI,OAAO,gBAAgB;AACvB,aAAO,eAAe,YAAY,MAAM;AAAA,IAC5C;AAIA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,OAAO,0BAA0B,UAAU,UAAUC,cAAa;AAC9D,UAAM,EAAE,OAAO,KAAK,SAAS,IAAI;AACjC,QAAI;AAGJ,QAAIN,IAAG,kBAAkB;AACrB,OAAC,oBAAoB,kBAAkB,IAAI,cAAc,UAAU,IAAI,YAAY;AACnF,eAAS,gBAAgB;AACzB,UAAI,UAAU;AAGV,eAAO,OAAO,UAAU,IAAI;AAAA,MAChC;AAAA,IACJ,OACK;AACD,gBAAU,eAAe,aAAa,IAAI,UAAU,IAAI,gBAAgB,UAAU,WAAW,EAAE;AAG/F,UAAI,UAAU;AACV,cAAM,QAAQ,OAAO;AACrB,iBAAS,SAAS,uBAAuB;AACzC,eAAO,MAAM,QAAQ;AACjB,iBAAO,YAAY,MAAM,CAAC,CAAC;AAAA,QAC/B;AACA,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,QAAI,KAAK;AACL,eAAS,OAAO;AAAA,IACpB,OAEK;AACD,eAAS,OAAO;AAAA,IACpB;AACA,WAAO,OAAO,WAAW,KAAK,CAAC,QAAQ,OAAO,CAAC,IAAI,WAAW,KAAK,MAAM;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,kBAAkB,eAAe,OAAO,eAAe;AAC1D,UACI,WAAmB,KAAK,SAAS,aAAa,GAC9C,aAAmB,YAAY,UAAU,KAAK,aAAa,GAC3D,cAAmB,WAAW,QAC9B,mBAAmB,IAAI,WAAW,MAAM;AAAA,MACpC,SAAU,YAAY;AAAA,MACtB,SAAU,YAAY;AAAA,MACtB,SAAU,SAAS,QAAQ;AAAA,MAC3B,SAAU,SAAS,SAAS;AAAA,MAC5B,SAAU;AAAA,IACd,CAAC;AACL,kBAAc,cAAc,gBAAgB;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,YAAY,MAAM,SAAS;AAC9B,QAAI,WAAW,QAAQ,aAAa,gBAAgB,QAAQ,KAAK;AAC7D,gBAAUA,IAAG,cAAc,OAAO;AAAA,IACtC;AACA,WAAO,KAAK,aAAa,SAAS,KAAK,iBAAiB;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,aAAa,MAAM,SAAS,eAAe;AAC9C,QAAI,WAAW,QAAQ,aAAa,gBAAgB,QAAQ,KAAK;AAC7D,gBAAUA,IAAG,cAAc,OAAO;AAAA,IACtC;AACA,WAAO,gBAAgB,KAAK,aAAa,SAAS,aAAa,IAAIA,IAAG,YAAY,MAAM,OAAO;AAAA,EACnG;AAAA,EACA,OAAO,SAAS,eAAe,YAAY,OAAO;AAC9C,UAAM,WAAW,MAAM,KAAK,cAAc,QAAQ;AAClD,QAAI,SAAS,SAAS,QAAQ;AAC1B,aAAOA,IAAG,OAAO,eAAe,UAAU;AAAA,IAC9C;AACA,UAAM,gBAAgB,SAAS,KAAK;AACpC,WAAOA,IAAG,aAAa,eAAe,YAAY,aAAa;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,OAAO,eAAe,iBAAiB;AAC1C,QAAI,gBAAgB,SAAS;AAGzB,UAAI,MAAM,QAAQ,eAAe,GAAG;AAChC,0BAAkB,gBAAgB,IAAI,CAAAO,qBAAmB,yBAAyBA,gBAAe,CAAC;AAAA,MACtG;AACA,UAAI,cAAc,QAAQ;AACtB,sBAAc,OAAO,GAAG,eAAe;AAAA,MAC3C,OACK;AACD,cAAM,UAAU,SAAS,uBAAuB;AAChD,wBAAgB,QAAQ,SAAS,OAAO;AACpC,kBAAQ,YAAY,KAAK;AAAA,QAC7B,CAAC;AACD,sBAAc,YAAY,OAAO;AAAA,MACrC;AACA,aAAO;AAAA,IACX,OACK;AACD,aAAO,cAAc,YAAY,yBAAyB,eAAe,CAAC;AAAA,IAC9E;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,cAAc,SAAS;AAC1B,UAAM,iBAAiB,QAAQ,MAAM;AACrC,QAAI,UAAU,gBAAgB,KAAK,cAAc;AAEjD,QAAI,SAAS;AACT,aAAO,WAAW,QAAQ,CAAC,CAAC;AAAA,IAChC,OACK;AAED,gBACI,kBAAkB,KAAK,cAAc,KACrC,kBAAkB,KAAKP,IAAG,cAAc,SAAS,WAAW,CAAC;AACjE,aAAO,UAAU,WAAW,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI;AAAA,IAC5D;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,cAAc,SAAS;AAC1B,UAAM,iBAAiB,QAAQ,MAAM;AACrC,QAAI,UAAU,gBAAgB,KAAK,cAAc;AAEjD,QAAI,SAAS;AAET,YAAM,IAAI,WAAW,QAAQ,QAAQ,CAAC,MAAM,MAAM,IAAI,CAAC,CAAC;AAExD,aAAO,MAAM,CAAC,IAAI,IAAI;AAAA,IAC1B,OACK;AAED,gBACI,kBAAkB,KAAK,cAAc,KACrC,kBAAkB,KAAKA,IAAG,cAAc,SAAS,WAAW,CAAC;AACjE,aAAO,UAAU,WAAW,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI;AAAA,IAC5D;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,eAAe,SAAS;AAC3B,WAAO,CAACA,IAAG,cAAc,OAAO,GAAGA,IAAG,cAAc,OAAO,CAAC;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,WAAW,SAAS,YAAY,MAAM;AACzC,WAAO,YAAY,QAAQ,sBAAsB,EAAE,OAAO,UAAU,sBAAsB,EAAE,OAAO,QAAQ;AAAA,EAC/G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,WAAW,SAAS,YAAY,MAAM;AACzC,WAAO,YAAY,QAAQ,sBAAsB,EAAE,MAAM,UAAU,sBAAsB,EAAE,MAAM,QAAQ;AAAA,EAC7G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,YAAY,SAAS,YAAY,MAAM;AAC1C,WAAO,CAACA,IAAG,WAAW,SAAS,SAAS,GAAGA,IAAG,WAAW,SAAS,SAAS,CAAC;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,sBAAsB,SAAS;AAClC,kBAAc,UAAU,QAAQ,SAAS,iHAAiH;AAC1J,YAAQ,MAAM,EAAE,eAAgB,KAAK,CAAC;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,SAAS,SAAS;AACrB,WAAO,QAAQ,sBAAsB,EAAE,OAAO,IAAI;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,SAAS,SAAS;AACrB,WAAO,QAAQ,sBAAsB,EAAE,MAAM,IAAI;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,kBAAkB,SAAS,OAAO;AACrC,UACI,OAAU,aAAa,UAAU,KAAK,GACtC,UAAU,KAAK,MAAM,GAAG,EAAE,CAAC;AAC/B,QAAI,QAAUA,IAAG,cAAc,SAAS,IAAI;AAC5C,QAAI,IAAI,KAAK,KAAK,GAAG;AAEjB,UAAI,QAAQ,eAAe;AACvB,gBAAQ,SAASA,IAAG,cAAc,QAAQ,eAAe,OAAO,GAAG,EAAE;AAAA,MACzE,OACK;AACD,gBAAQ;AAAA,MACZ;AAAA,IACJ,OACK;AACD,cAAQ,SAAS,OAAO,EAAE;AAAA,IAC9B;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,OAAO,SAAS,SAAS,QAAQ,SAAS,QAAQ;AAC9C,UAAM,IAAIA,IAAG,cAAc,SAAS,WAAW,EAAE,MAAM,MAAM;AAC7D,QAAI,EAAE,SAAS,GAAG;AACd,UAAI,EAAE,CAAC,EAAE,WAAW,UAAU,GAAG;AAC7B,UAAE,CAAC,IAAI,YAAY,MAAM;AACzB,UAAE,CAAC,IAAI;AAAA,MACX,OACK;AACD,UAAE,CAAC,IAAI,UAAU,MAAM;AACvB,UAAE,CAAC,IAAI;AAAA,MACX;AACA,cAAQ,MAAM,YAAY,EAAE,KAAK,GAAG;AAAA,IACxC,OACK;AACD,cAAQ,MAAM,YAAY,SAAS,MAAM,KAAK,MAAM;AAAA,IACxD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,cAAc,SAAS,GAAG;AAC7B,UAAM,IAAIA,IAAG,cAAc,SAAS,WAAW,EAAE,MAAM,MAAM;AAE7D,QAAIA,IAAG,QAAQ,CAAC;AAChB,QAAI,EAAE,SAAS,GAAG;AACd,QAAE,EAAE,CAAC,EAAE,WAAW,UAAU,IAAI,KAAK,CAAC,IAAI;AAC1C,cAAQ,MAAM,YAAY,EAAE,KAAK,GAAG;AAAA,IACxC,OACK;AACD,cAAQ,MAAM,YAAY,cAAc,CAAC;AAAA,IAC7C;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,cAAc,SAAS,GAAG;AAC7B,UAAM,IAAIA,IAAG,cAAc,SAAS,WAAW,EAAE,MAAM,MAAM;AAE7D,QAAIA,IAAG,QAAQ,CAAC;AAChB,QAAI,EAAE,SAAS,GAAG;AACd,QAAE,EAAE,CAAC,EAAE,WAAW,UAAU,IAAI,KAAK,CAAC,IAAI;AAC1C,cAAQ,MAAM,YAAY,EAAE,KAAK,GAAG,IAAI;AAAA,IAC5C,OACK;AACD,cAAQ,MAAM,YAAY,cAAc,CAAC;AAAA,IAC7C;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,OAAO,SAAS,GAAG;AACtB,IAAAA,IAAG,UAAU,SAAS,OAAO,CAAC;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAAQ,SAAS,GAAG;AACvB,IAAAA,IAAG,UAAU,SAAS,QAAQ,CAAC;AAAA,EACnC;AAAA,EACA,OAAO,WAAW,SAAS,GAAG,GAAG;AAC7B,IAAAA,IAAG,UAAU,SAAS,OAAO,CAAC;AAC9B,IAAAA,IAAG,UAAU,SAAS,QAAQ,CAAC;AAAA,EACnC;AAAA,EACA,OAAO,QAAQ,SAAS,EAAE,GAAG,GAAG,OAAO,OAAO,GAAG;AAC7C,IAAAA,IAAG,WAAW,SAAS,GAAG,CAAC;AAC3B,IAAAA,IAAG,UAAU,SAAS,SAAS,KAAK;AACpC,IAAAA,IAAG,UAAU,SAAS,UAAU,MAAM;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,eAAe,SAAS,GAAG,GAAG;AACjC,QAAI,KAAK,MAAM;AACX,aAAOA,IAAG,cAAc,SAAS,CAAC;AAAA,IACtC;AACA,QAAI,KAAK,MAAM;AACX,aAAOA,IAAG,cAAc,SAAS,CAAC;AAAA,IACtC;AAEA,QAAIA,IAAG,QAAQ,CAAC;AAChB,QAAIA,IAAG,QAAQ,CAAC;AAChB,UACI,IAAOA,IAAG,cAAc,SAAS,WAAW,EAAE,MAAM,MAAM,GAC1D,OAAO,EAAE,CAAC,EAAE,WAAW,UAAU;AACrC,QAAI,EAAE,SAAS,GAAG;AACd,QAAE,OAAO,KAAK,CAAC,IAAI;AACnB,QAAE,OAAO,KAAK,CAAC,IAAI;AACnB,cAAQ,MAAM,YAAY,EAAE,KAAK,GAAG,IAAI;AAAA,IAC5C,OACK;AACD,cAAQ,MAAM,YAAY,aAAa,CAAC,OAAO,CAAC;AAAA,IACpD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,cAAc,SAAS,GAAG;AAC7B,IAAAA,IAAG,cAAc,SAASA,IAAG,cAAc,OAAO,IAAI,CAAC;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,cAAc,SAAS,GAAG;AAC7B,IAAAA,IAAG,cAAc,SAASA,IAAG,cAAc,OAAO,IAAI,CAAC;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAAQ,SAAS,GAAG;AACvB,IAAAA,IAAG,QAAQ,SAASA,IAAG,WAAW,OAAO,IAAI,CAAC;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,OAAO,SAAS,GAAG;AACtB,IAAAA,IAAG,OAAO,SAASA,IAAG,WAAW,OAAO,IAAI,CAAC;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,QAAQ,SAAS,QAAQ,YAAY,MAAMQ,QAAO;AACrD,aAAU,kBAAkB,YAAa,SAAS,UAAU,KAAK,QAAQ,IAAI;AAC7E,UACI,OAAaR,IAAG,eAAe,OAAO,GACtC,SAAa,UAAU,KAAK,SAAS,IAAI;AAC7C,QAAIQ,QAAO;AACP,aAAO,QAAQ;AACf,aAAO,QAAQ;AAAA,IACnB;AACA,UAAM,aAAa,OAAO,QAAQ,OAAO,OAAO,WAAW;AAAA,MACvD;AAAA,IACJ,CAAC,CAAC;AACF,IAAAR,IAAG,eAAe,SAAS,KAAK,CAAC,IAAI,WAAW,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,WAAW,IAAI,OAAO,CAAC;AAAA,EACnG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,OAAO,cAAc,SAAS,UAAU,QAAQ,QAAQ;AACpD,UAAM,SAAS,SAAS,QAAQ,QAAQ,QAAQ,cAAc,YAAY,iBAAiB,SAAS,MAAM;AAC1G,QAAI,MAAM,QAAQ,QAAQ,GAAG;AACzB,YAAM,SAAS,CAAC;AAChB,iBAAW,QAAQ,UAAU;AACzB,eAAO,IAAI,IAAI,OAAO,iBAAiB,aAAa,UAAU,IAAI,CAAC;AAAA,MACvE;AACA,aAAO;AAAA,IACX;AAIA,WAAO,OAAO,iBAAiB,aAAa,UAAU,QAAQ,CAAC;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,OAAO,YAAY,SAAS,WAAW,OAAO;AAC1C,UACI,SAAU,cAAc,WAAY,WAAW,IAC/C,MAAM;AAAA,MACF,KAAM,CAAC;AAAA,IACX;AACJ,eAAW,QAAQ,CAAC,OAAO,SAAS,UAAU,MAAM,GAAG;AACnD,UAAI,CAAC,SAAS,MAAM,SAAS,KAAK,CAAC,CAAC,GAAG;AAGnC,YAAI,IAAI,IAAI;AAAA,UACR,IAAI,IAAI,IAAI,IAAIA,IAAG,cAAc,SAAS,GAAG,SAAS,IAAI,IAAI,GAAG,MAAM,EAAE;AAAA,QAC7E;AAAA,MACJ;AAAA,IACJ;AAIA,QAAI,SAAS,IAAI,QAAQ,MAAM,IAAI,SAAS;AAC5C,QAAI,UAAU,IAAI,OAAO,MAAM,IAAI,UAAU;AAC7C,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,OAAO,WAAW,OAAO;AACrB,QAAI,OAAO,UAAU,UAAU;AAC3B,YAAM,SAAS,MAAM,MAAM,WAAW;AACtC,cAAQ,CAAC;AACT,eAAS,IAAI,GAAG,EAAE,OAAO,IAAI,QAAQ,IAAI,QAAQ,KAAK;AAClD,cAAM,UAAU,OAAO,CAAC,EAAE,MAAM,OAAO;AACvC,cAAM,QAAQ,CAAC,CAAC,IAAI,QAAQ,CAAC;AAAA,MACjC;AAAA,IACJ;AACA,WAAO,SAAS,CAAC;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,WAAW,SAAS,OAAO,YAAY,OAAO;AACjD,QAAI,OAAO,UAAU,UAAU;AAC3B,UAAI,WAAW;AAEX,YAAI,MAAM,UAAU,QAAQ,MAAM,QAAQ,QAAQ;AAC9C,kBAAQ,MAAM,UAAU;AAAA,QAC5B;AAAA,MACJ,OACK;AAGD,gBAAQ,MAAM,WAAW;AAAA,MAC7B;AAAA,IACJ,WACS,OAAO;AACZ,UAAI,WAAW;AACX,gBAAQ,MAAM,UAAU;AAAA,MAE5B;AAEA,UAAI,MAAM,SAAS,OAAO,MAAM,UAAU,UAAU;AAChD,gBAAQ,aAAa,OAAO,CAAC,GAAG,OAAO,MAAM,KAAK;AAAA,MACtD;AACA,UAAI,KAAK;AAET,WAAK,OAAO,OAAO;AAIf,YAAI,CAAC,sBAAsB,GAAG,GAAG;AAC7B,WAAC,KAAK,KAAK,IAAIA,IAAG,QAAQ,KAAK,MAAM,GAAG,CAAC;AAEzC,cAAI,SAAS,MAAM;AACf,oBAAQ,MAAM,eAAe,GAAG;AAAA,UACpC,OACK;AACD,oBAAQ,MAAM,YAAY,KAAK,KAAK;AAAA,UACxC;AAAA,QACJ;AAAA,MACJ;AAEA,UAAI,OAAO,MAAM,UAAU,UAAU;AACjC,gBAAQ,MAAM,WAAW,MAAM;AAAA,MACnC;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,OAAO,WAAW,OAAO;AACrB,QAAI,OAAO,UAAU,UAAU;AAC3B,aAAO;AAAA,IACX;AACA,QAAI,UAAU;AACd,eAAW,OAAO,OAAO;AAGrB,UAAI,CAAC,sBAAsB,GAAG,GAAG;AAC7B,mBAAW,GAAG,aAAa,UAAU,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC;AAAA,MAC3D;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,WAAW,SAAS,SAAS;AAChC,kBAAc,UAAU,QAAQ,SAAS,iEAAiE;AAC1G,YAAQ,UAAU,IAAI,GAAG,OAAO;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,cAAc,SAAS,SAAS;AACnC,kBAAc,UAAU,QAAQ,SAAS,uEAAuE;AAChH,YAAQ,UAAU,OAAO,GAAG,OAAO;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,cAAc,SAAS,SAAS,QAAQ,MAAM;AACjD,cAAU,YAAY,QAAQ,OAAO;AACrC,QAAI,UAAU,MAAM;AAChB,cAAQ,UAAU,IAAI,GAAG,OAAO;AAAA,IACpC,WACS,UAAU,OAAO;AACtB,cAAQ,UAAU,OAAO,GAAG,OAAO;AAAA,IACvC,OACK;AACD,cAAQ,QAAQ,SAAO,QAAQ,UAAU,OAAO,GAAG,CAAC;AAAA,IACxD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,kBAAkB,SAAS,KAAK,UAAU,YAAY,YAAY,OAAO,KAAK;AACjF,QAAI,WAAW,GAAG;AACd,cAAQ,UAAU,IAAI,GAAG;AACzB,gBAAU,WAAW;AAAA,QACjB,IAAoB,CAAAS,SAAO,QAAQ,UAAU,OAAOA,IAAG;AAAA,QACvD,OAAoB;AAAA,QACpB;AAAA,QACA,MAAoB,CAAC,GAAG;AAAA,QACxB,mBAAoB;AAAA,MACxB,CAAC;AAAA,IACL;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,8BAA8B,SAAS,UAAU;AACpD,UACI,QAAa,WAAW,iBAAiB,OAAO,GAChD,aAAa,MAAM,mBAAmB,MAAM,IAAI,GAChD,YAAa,MAAM,mBAAmB,MAAM,IAAI,GAChD,QAAa,WAAW,QAAQ,aAAa,UAAU,QAAQ,CAAC;AACpE,QAAI;AACJ,QAAI,UAAU,IAAI;AAEd,eAAS,WAAW,UAAU,KAAK,CAAC,IAAI;AAAA,IAC5C;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,qBAAqB,SAAS;AACjC,WAAO,WAAWT,IAAG,cAAc,SAAS,oBAAoB,CAAC,IAAI;AAAA,EACzE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,OAAO,UAAU,SAAS,YAAY,YAAY;AAC9C,QAAI,mBAAmB,WAAW;AAC9B,aAAO,QAAQ,UAAU;AAAA,IAC7B;AACA,WAAO,IAAI,QAAQ,aAAW;AAC1B,gBAAU,WAAW,MAAM;AACvB,gBAAQ,UAAU,IAAI,gBAAgB;AACtC,kBAAU,WAAW,MAAM;AACvB,kBAAQ,UAAU,OAAO,gBAAgB;AACzC,kBAAQ;AAAA,QACZ,GAAG,GAAI;AAAA,MACX,GAAG,CAAC;AAAA,IACR,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW,iBAAiB;AAIxB,QAAI,mBAAmB,MAAM;AACzB,YAAM,UAAU,4BAA4B,0BAA0BA,IAAG,cAAc;AAAA,QACnF,QAAY,IAAI;AAAA,QAChB,WAAY;AAAA,QACZ,OAAY;AAAA,MAChB,CAAC;AACD,UAAI,QAAQ,eAAe,IAAI,iBAAiB;AAC5C,YAAI,gBAAgB,YAAY,OAAO;AAAA,MAC3C;AACA,uBAAiB,QAAQ;AAAA,IAC7B;AACA,WAAO;AAAA,EACX;AAAA,EACA,WAAW,sBAAsB;AAC7B,WAAO;AAAA,MACH,WAAY;AAAA,MACZ,UAAY,CAAC;AAAA,QACT,WAAY;AAAA,MAChB,CAAC;AAAA,IACL;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,sBAAsB;AACzB,qBAAiB;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,YAAY,MAAM,eAAe,UAAU,OAAO,gBAAgB,QAAW;AAChF,UAAM,eAAeA,IAAG,kBAAkB,eAAe,aAAa;AACtE,iBAAa,UAAU,cAAc,WAAW,IAAI;AACpD,UAAM,SAAS,aAAa;AAC5B,iBAAa,YAAY;AACzB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,YAAY,MAAM,eAAeQ,SAAQ,MAAM;AAt4D1D,QAAAP;AAu4DQ,QAAI,CAAC,MAAM;AACP,aAAO;AAAA,IACX;AACA,QAAI,OAAO,SAAS,UAAU;AAC1B,aAAO;AAAA,IACX;AACA,QAAI,CAAC,KAAK,QAAQ;AACd,aAAO;AAAA,IACX;AACA,QAAI,aAAa,KAAK,IAAI,GAAG;AACzB,aAAO,SAAS,IAAI;AAAA,IACxB;AACA,QAAI,eAAe;AACf,YACI,WAAoBA,MAAA,KAAK,aAAL,gBAAAA,IAAA,WAAgB,MACpC,eAAoBD,IAAG,kBAAkB,eAAe,UAAU,cAAc,aAAa,MAAS,GACtG,EAAE,cAAc,IAAI;AACxB,mBAAa,YAAY;AAGzB,kBAAY,cAAc,MAAM,UAAU;AAC1C,mBAAa,MAAM,WAAW,aAAa,MAAM,WAAWA,IAAG,UAAU,IAAI;AAC7E,YAAM,SAASQ,SAAQ,aAAa,cAAc,aAAa,sBAAsB,EAAE;AACvF,oBAAc,MAAM,UAAU;AAC9B,mBAAa,MAAM,WAAW,aAAa,MAAM,WAAW,aAAa,YAAY;AACrF,aAAO;AAAA,IACX;AACA,QAAI,UAAU,KAAK,IAAI,GAAG;AACtB,aAAO,SAAS,IAAI,IAAI;AAAA,IAC5B;AACA,WAAO,MAAM,IAAI,IAAI,IAAI,SAAS,IAAI;AAAA,EAC1C;AAAA;AAAA,EAEA,OAAO,kBAAkB,eAAe,eAAe;AACnD,oBAAgB,iBAAiB,IAAI;AACrC,UACI,qBAAqB,IAAI,iBAAiB,aAAa,GACvD,eAAqB,cAAc,eAAe,cAAc,gBAAgBR,IAAG,cAAc;AAAA,MAC7F,QAAY;AAAA,MACZ,OAAY;AAAA,MACZ,WAAY;AAAA,MACZ,UAAY,CAAC;AAAA,QACT,OAAQ;AAAA,MACZ,CAAC;AAAA,IACL,GAAG,EAAE,WAAY,KAAK,CAAC,EAAE,CAAC;AAC9B,cAAU,QAAQ,UAAQ;AACtB,UAAI,aAAa,MAAM,IAAI,MAAM,mBAAmB,IAAI,GAAG;AACvD,qBAAa,MAAM,IAAI,IAAI,mBAAmB,IAAI;AAAA,MACtD;AAAA,IACJ,CAAC;AACD,iBAAa,YAAY,cAAc;AAEvC,QAAI,aAAa,cAAc,kBAAkB,eAAe;AAC5D,oBAAc,YAAY,aAAa,aAAa;AAAA,IACxD;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,OAAO,UAAU,YAAY;AACzB,UAGI,SAASA,IAAG,eAAeA,IAAG,aAAa,IAAI,UAAU,IACzDU,OAAM,OAAO,gBAAgB,YAAY,WAAW;AACxD,WAAOA,KAAI,KAAK;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,OAAO,KAAK,eAAe,eAAe;AACtC,QAAI,OAAO,kBAAkB,UAAU;AACnC,UAAI,kBAAkB,IAAI;AACtB,sBAAc,YAAY;AAC1B;AAAA,MACJ,OACK;AACD,wBAAgBV,IAAG,0BAA0B,aAAa;AAAA,MAC9D;AAAA,IACJ;AACA,IAAAA,IAAG,YAAY,eAAe,aAAa;AAC3C,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,OAAO,YAAY,eAAe,eAAe;AAE7C,QAAI,cAAc,cAAc,cAAc,WAAW;AACrD,MAAAA,IAAG,eAAe,eAAe,aAAa;AAC9C,MAAAA,IAAG,YAAY,eAAe,aAAa;AAC3C,MAAAA,IAAG,aAAa,eAAe,aAAa;AAC5C,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,OAAO,kBAAkB,SAAS;AAC9B,UACI,aAAa,CAAC,GAEd,QAAa,CAAC;AAElB,aAAS,IAAI,GAAG,IAAI,QAAQ,WAAW,QAAQ,KAAK;AAChD,YAAM,OAAO,QAAQ,WAAW,CAAC;AACjC,UAAI,KAAK,WAAW;AAChB,cAAM,OAAO,KAAK,KAAK,YAAY;AACnC,mBAAW,IAAI,IAAI,KAAK;AACxB,cAAM,KAAK,IAAI;AAAA,MACnB;AAAA,IACJ;AACA,WAAO,EAAE,YAAY,MAAM;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,eAAe,eAAe,eAAe;AAChD,UAEI;AAAA,MACI,YAAa;AAAA,MACb,OAAa;AAAA,IACjB,IAAaA,IAAG,kBAAkB,aAAa,GAC/C;AAAA,MACI,YAAa;AAAA,MACb,OAAa;AAAA,IACjB,IAAaA,IAAG,kBAAkB,aAAa,GAE/C,aAAa,YAAY,SAAS,SAAS,GAE3C,QAAa,YAAY,OAAO,UAAQ,CAAC,YAAY,SAAS,IAAI,CAAC,GACnE,WAAa,YAAY,OAAO,UAAQ,CAAC,YAAY,SAAS,IAAI,MAAM,CAAC,cAAc,CAAC,KAAK,WAAW,OAAO,EAAE,GACjH,SAAa,YAAY,OAAO,UAAQ,YAAY,SAAS,IAAI,CAAC;AACtE,QAAI,MAAM,SAAS,GAAG;AAClB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,cAAM,OAAO,MAAM,CAAC;AAEpB,YAAI,SAAS,SAAS;AAClB,UAAAA,IAAG,WAAW,eAAe,iBAAiB,OAAO,IAAI;AAAA,QAC7D,WAES,SAAS,WAAW;AACzB,iBAAO,OAAO,cAAc,SAAS,iBAAiB,OAAO;AAAA,QACjE,OAEK;AACD,wBAAc,aAAa,MAAM,iBAAiB,IAAI,CAAC;AAAA,QAC3D;AAAA,MACJ;AAAA,IACJ;AACA,QAAI,SAAS,SAAS,GAAG;AACrB,eAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACtC,sBAAc,gBAAgB,SAAS,CAAC,CAAC;AAAA,MAC7C;AAAA,IACJ;AACA,QAAI,OAAO,SAAS,GAAG;AACnB,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,cAAM,OAAO,OAAO,CAAC;AAErB,YAAI,SAAS,SAAS;AAClB,UAAAA,IAAG,WAAW,eAAe,iBAAiB,OAAO,IAAI;AAAA,QAC7D,WAES,SAAS,WAAW;AACzB,iBAAO,OAAO,cAAc,SAAS,iBAAiB,OAAO;AAAA,QACjE,WAES,SAAS,YAAY,iBAAiB,MAAM,kBAAkB,OAAO,iBAAiB,UAAU,WAAW;AAChH,cAAI;AACJ,cAAI,iBAAiB,MAAM,gBAAgB;AACvC,wBAAY,iBAAiB;AAAA,UACjC,OACK;AACD,wBAAY,IAAI,aAAa,iBAAiB,KAAK;AAAA,UACvD;AACA,cAAI,CAAC,UAAU,QAAQ,iBAAiB,KAAK,GAAG;AAC5C,0BAAc,aAAa,SAAS,SAAS;AAAA,UACjD;AAAA,QACJ,WACS,iBAAiB,IAAI,MAAM,iBAAiB,IAAI,GAAG;AACxD,wBAAc,aAAa,MAAM,iBAAiB,IAAI,CAAC;AAAA,QAC3D;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,YAAY,eAAe,eAAe;AAC7C,QAAIA,IAAG,qBAAqB,aAAa,MAAM,GAAG;AAC9C,oBAAc,YAAY,cAAc;AAAA,IAC5C;AAAA,EACJ;AAAA,EACA,OAAO,aAAa,eAAe,MAAM;AAGrC,UAAM,EAAE,WAAW,IAAI;AACvB,SAAI,yCAAY,cAAa,QAAQ,WAAW;AAC5C,iBAAW,OAAO;AAAA,IACtB,OACK;AAED,oBAAc,cAAc;AAAA,IAChC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,aAAa,eAAe,eAAe;AAC9C,UACI,KAAc,MACd,cAAc,WAAW,KAAK,cAAc,UAAU,GACtD,cAAc,WAAW,KAAK,cAAc,UAAU;AAC1D,WAAO,YAAY,QAAQ;AACvB,YACI,aAAa,YAAY,MAAM,GAC/B,aAAa,YAAY,MAAM;AAEnC,UAAI,cAAc,WAAW,aAAa,aAAa,WAAW,aAAa,cAAc;AACzF,cAAM,IAAI,MAAM,oBAAoB,WAAW,QAAQ,oCAAoC;AAAA,MAC/F;AACA,UAAI,cAAc,WAAW,aAAa,aAAa,WAAW,aAAa,cAAc;AACzF,cAAM,IAAI,MAAM,oBAAoB,WAAW,QAAQ,oCAAoC;AAAA,MAC/F;AACA,UAAI,CAAC,YAAY;AAEb,sBAAc,YAAY,UAAU;AAAA,MACxC,OACK;AAED,YAAI,WAAW,aAAa,WAAW,UAAU;AAE7C,cAAI,WAAW,aAAa,WAAW;AAEnC,uBAAW,OAAO,WAAW;AAAA,UACjC,OACK;AACD,gBAAI,WAAW,YAAY,WAAW,SAAS;AAC3C,iBAAG,YAAY,YAAY,UAAU;AAAA,YACzC,OACK;AAED,4BAAc,aAAa,YAAY,UAAU;AACjD,yBAAW,OAAO;AAAA,YACtB;AAAA,UACJ;AAAA,QACJ,WAGS,WAAW,aAAa,aAAa,WAAW,aAAa,cAAc;AAChF,wBAAc,YAAY,WAAW,KAAK,KAAK;AAAA,QACnD,OACK;AACD,gBAAM,aAAa,WAAW,iBAAiB;AAC/C,gBAAM,IAAI,MAAM;AAAA,EAAoD,WAAW,SAAS,EAAE;AAAA,QAC9F;AAAA,MACJ;AAAA,IACJ;AAEA,gBAAY,QAAQ,gBAAc;AAC9B,iBAAW,OAAO;AAAA,IACtB,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,OAAO,cAAc,SAAS,YAAY;AACtC,UACI,EAAE,UAAU,IAAI,SAChB,WAAgB,OAAO,eAAe,UACtC,cAAgB,WAAW,WAAW,MAAMW,aAAY,IAAI,aAAa,UAAU,YAAY,OAAO,GACtG,aAAgB,YAAY;AAChC,QAAI,UAAU,UAAU,WAAW,YAC/B;AAKJ,SAAK,IAAI,GAAG,CAAC,WAAW,IAAI,YAAY,KAAK;AACzC,gBAAU,CAAC,UAAU,SAAS,YAAY,CAAC,CAAC;AAAA,IAChD;AACA,QAAI,SAAS;AACT,cAAQ,YAAY,WAAW,aAAa,YAAY,KAAK,GAAG;AAAA,IACpE;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,OAAO,gBAAgB,SAAS,SAAS;AACrC,UAAM,EAAE,UAAU,IAAI;AACtB,QAAI,KAAK,KAAK,UAAU;AACxB,SAAK,OAAO,SAAS;AACjB,YAAM,QAAQ,QAAQ,GAAG,CAAC;AAC1B,UAAI,UAAU,SAAS,GAAG,MAAM,KAAK;AACjC,kBAAU,MAAM,QAAQ,QAAQ,EAAE,GAAG;AACrC,kBAAU;AAAA,MACd;AAAA,IACJ;AACA,WAAO;AAAA,EACX;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,EAkCA,OAAO,SAAS,cAAc,cAAc;AACxC,mBAAe,aAAa,YAAY;AACxC,UACI,EAAE,KAAK,IAAQ,UACf,eAAeX,IAAG,aAAa,YAAY,EAAE,KAAK,YAAY;AAClE,QAAI,gBAAgB,KAAK,iBAAiB,0CAA0C,GAChF,SAAS;AACb,QAAI,iBAAiB,cAAc;AAC/B,aAAO;AAAA,IACX;AAEA,IAAAA,IAAG,mBAAmB,MAAM,qEAAqE;AACjG,UAAM,aAAa;AAAA,MACf,OAAQ;AAAA,MACR,MAAQ;AAAA,IACZ;AACA,aAAS,aAAa,cAAc,SAAS,QAAQ;AACjD,YAAM,eAAe,WAAU,cAAc;AAAA,QACzC,KAAU;AAAA,QACV,KAAU;AAAA,QACV,SAAU;AAAA,UACN,SAAe;AAAA,UACf,cAAe;AAAA,QACnB;AAAA,QACA,MAAc,aAAa,KAAK,QAAQ,cAAc,YAAY;AAAA,QAClE,aAAc;AAAA,MAClB,CAAC;AACD,mBAAa,iBAAiB,QAAQ,MAAM;AACxC,eAAO,aAAa,QAAQ;AAC5B,oBAAY;AAEZ,YAAI,EAAE,WAAW,cAAc,QAAQ;AACnC,wBAAc,QAAQ,UAAQ,KAAK,OAAO,CAAC;AAC3C,+BAAa,QAAQ,SAAS,UAAU;AACxC,kBAAQ,UAAU;AAAA,QACtB;AAAA,MACJ,CAAC;AACD,mBAAa,iBAAiB,SAAS,CAAC,MAAM;AAC1C,eAAO,aAAa,QAAQ;AAC5B,eAAO,CAAC;AAAA,MACZ,CAAC;AAAA,IACL;AACA,QAAI,cAAc,QAAQ;AACtB,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACpC,sBAAc,QAAQ,CAAC,cAAc,MAAM;AACvC,uBAAa,cAAc,SAAS,QAAQ,MAAM,cAAc,SAAS,CAAC;AAAA,QAC9E,CAAC;AAAA,MACL,CAAC;AAAA,IACL,OACK;AACD,YAAM,eACI,KAAK,cAAc,oCAAoC,KACvD,KAAK,cAAc,WAAW,YAAY,4BAA4B;AAEhF,UAAI,EAAC,6CAAc,KAAK,SAAS,GAAG,YAAY,UAAS;AACrD,cAAM,IAAI,MAAM,kBAAkB,YAAY,YAAY;AAAA,MAC9D;AACA,sBAAgB,CAAC,YAAY;AAC7B,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW,aAAa,cAAc,SAAS,MAAM,CAAC;AAAA,IACvF;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,WAAW,YAAY;AACnB,WAAO,WAAU,aAAa;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAO,aAAa,cAAc;AAC9B,QAAI,CAAC,WAAW;AACZ,YAQI,UAAYA,IAAG,cAAc;AAAA,QACzB,QAAY,SAAS;AAAA,QACrB,WAAY;AAAA,MAChB,CAAC,GAED,YAAYA,IAAG,cAAc,SAAS,WAAW,OAAO,SAAS;AACrE,UAAI,WAAW;AAEX,YAAI;AACA,sBAAY,KAAK,MAAM,UAAU,QAAQ,mBAAmB,EAAE,CAAC;AAAA,QACnE,SACO,GAAG;AACN,sBAAY;AAAA,QAChB;AAAA,MACJ;AAEA,kBAAY,cAAc,eAAe,EAAE,MAAO,aAAa,IAAI;AACnE,cAAQ,OAAO;AAAA,IACnB;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA,EAGA,aAAa,WAAW;AAAA,IACpB,SAAU;AAAA,IACV,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,gBAAgB,CAAC;AAAA,IACjB,mBAAmB,CAAC;AAAA,EACxB,GAAG;AACC,UACI,YAAY,oBAAI,IAAI,GACpB,iBAAiB,MAAM,KAAK,aAAa,iBAAiB,QAAQ,CAAC,GACnE,YAAiB,IAAI,IAAI,eAAe,IAAI,aAAW;AACnD,UAAI,QAAQ,GACR,SAAS,QAAQ;AACrB,aAAO,UAAU,WAAW,cAAc;AACtC;AACA,iBAAS,OAAO;AAAA,MACpB;AACA,cAAQ,SAAS;AAEjB,UAAI,QAAQ,eAAe,QAAQ,gBAAgB,iBAAiB,OAAO,EAAE,aAAa,QAAQ;AAC9F,gBAAQ,aAAa,QAAQ;AAC7B,kBAAU,IAAI,OAAO;AAAA,MACzB;AAEA,YACI,EAAE,cAAc,IAAI,SACpB,eAAoB,UAAU,KAAK,SAAS,YAAY,GACxD,cAAoB,UAAU,KAAK,SAAS,aAAa,GACzD,QAAoB,iBAAiB,aAAa,GAClD,kBAAoB,WAAW,MAAM,eAAe;AACxD,UAAI,iBAAiB;AACjB,qBAAa,QAAQ;AACrB,oBAAY,QAAQ;AAAA,MACxB;AACA,aAAO;AAAA,QACH,QAAQ;AAAA,QACR,EAAE,SAAS,cAAc,aAAa,OAAO,cAAc;AAAA,MAC/D;AAAA,IACJ,CAAC,CAAC;AACN,WAAO,KAAK,OAAO;AACnB,UACI,gBAAgB,MAAM,KAAK,aAAa,iBAAiB,QAAQ,CAAC,GAClE,WAAgB,IAAI,IAAI,cAAc,IAAI,aAAW;AACjD,YACI,eAAkB,UAAU,KAAK,SAAS,YAAY,GACtD,cAAkB,UAAU,KAAK,SAAS,QAAQ,aAAa,GAC/D,QAAkB,WAAW,iBAAiB,QAAQ,aAAa,GACnE,kBAAkB,WAAW,MAAM,eAAe;AACtD,UAAI,iBAAiB;AACjB,qBAAa,QAAQ;AACrB,oBAAY,QAAQ;AAAA,MACxB;AACA,aAAO;AAAA,QACH,QAAQ;AAAA,QACR,EAAE,SAAS,cAAc,YAAY;AAAA,MACzC;AAAA,IACJ,CAAC,CAAC,GACF,aAAgB,CAAC,YAAY,OAAO,QAAQ,SAAS,UAAU,WAAW,UAAU,UAAU,YAAY,aAAa,WAAW,UAAU;AAEhJ,eAAW,CAAC,IAAI,MAAM,KAAK,WAAW;AAIlC,YAAM,QAAQ,SAAS,IAAI,EAAE;AAC7B,UAAI,OAAO;AACP,cACI,EAAE,QAAQ,IAAiB,OAC3B,EAAE,OAAO,cAAc,IAAI,SAE3B,SAA2B,SAASA,IAAG,cAAc,SAAS,QAAQ,CAAC,GACvE;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA,eAAgB;AAAA,QACpB,IAA2B,QAC3B,gBAA2B,iBAAiB;AAEhD,qBAAa,eAAe,QAAQ,WAAW,EAAE,cAAc,GAAG,OAAO,UAAU;AAGnF,YAAI;AAGJ,YAAI,eAAe;AACf,gBAAM,SAAS,MAAM;AACrB,mBAAS;AACT,uBAAa,YAAY,OAAO;AAAA,QACpC,OAGK;AACD,gBAAM,SAAS,MAAM;AACrB,mBAAS;AACT,uBAAa,YAAY,OAAO;AAAA,QACpC;AACA,YAAI,WAAW;AACf,YAAI,UAAU,IAAI,OAAO,GAAG;AACxB,kBAAQ,qBAAqBA,IAAG,cAAc;AAAA,YAC1C,QAAS;AAAA,YACT,OAAS;AAAA,cACL,QAAS,QAAQ;AAAA,YACrB;AAAA,UACJ,CAAC;AACD,qBAAW;AAAA,QACf;AACA,cAAM,cAAc;AAAA,UAChB,UAAY;AAAA,UACZ,KAAY,GAAG,OAAO,GAAG;AAAA,UACzB,MAAY,GAAG,OAAO,IAAI;AAAA,UAC1B,OAAY,GAAG,OAAO,KAAK;AAAA,UAC3B,QAAY,GAAG,OAAO,MAAM;AAAA,UAC5B,UAAY;AAAA,UACZ,WAAY;AAAA,UACZ,QAAY;AAAA,UACZ,QAAY,SAAS,UAAU;AAAA,UAC/B;AAAA,QACJ;AACA,YAAI,QAAQ,QAAQ,kBAAkB,oBAAoB;AACtD,sBAAY,UAAU;AAAA,QAC1B;AAEA,eAAO,OAAO,OAAO,WAAW;AAChC,cAAM,YAAY;AAAA,MACtB,OAEK;AACD,cACI,EAAE,SAAS,aAAc,QAAQ,OAAO,cAAc,IAAI;AAC9D,gBAAQ,WAAW,EAAE,SAAU,KAAK;AACpC,eAAO,OAAO,QAAQ,OAAO;AAAA,UACzB,UAAY;AAAA,UACZ,KAAY,GAAG,OAAO,GAAG;AAAA,UACzB,MAAY,GAAG,OAAO,IAAI;AAAA,UAC1B,OAAY,GAAG,OAAO,KAAK;AAAA,UAC3B,QAAY,GAAG,OAAO,MAAM;AAAA,UAC5B,UAAY;AAAA,UACZ,WAAY;AAAA,UACZ,SAAY;AAAA,UACZ,QAAY;AAAA,UACZ,QAAY;AAAA,UACZ,UAAY;AAAA;AAAA,QAChB,CAAC;AACD,sBAAc,YAAY,OAAO;AAEjC,iBAAS,IAAI,IAAI,EAAE,SAAS,QAAQ,SAAU,MAAM,WAAY,KAAK,CAAC;AACtE,sBAAc,KAAK,OAAO;AAAA,MAC9B;AAAA,IACJ;AAEA,eAAW,CAAC,EAAE,KAAK,KAAK,UAAU;AAC9B,UAAI,CAAC,MAAM,WAAW;AAClB,cACI,EAAE,QAAQ,IAAiB,OAC3B,EAAE,OAAO,cAAc,IAAI,SAC3B,SAA2B,MAAM,SAAS,MAAM;AACpD,gBAAQ,UAAU,IAAI,yBAAyB;AAC/C,qBAAa,eAAe,QAAQ,WAAW,EAAE,cAAc,GAAG,OAAO,UAAU;AAEnF,eAAO,OAAO,OAAO;AAAA,UACjB,UAAW;AAAA,UACX,KAAW,cAAc,MAAM,IAAI,GAAG,OAAO,GAAG;AAAA,UAChD,MAAW,cAAc,OAAO,IAAI,GAAG,OAAO,IAAI;AAAA,UAClD,OAAW,cAAc,QAAQ,IAAI,GAAG,OAAO,KAAK;AAAA,UACpD,QAAW,cAAc,SAAS,IAAI,GAAG,OAAO,MAAM;AAAA,UACtD,SAAW,cAAc,UAAU,IAAI;AAAA,UACvC,QAAW,cAAc,SAAS;AAAA,UAClC,UAAW;AAAA;AAAA,QACf,CAAC;AAAA,MACL;AAAA,IACJ;AAEA,eAAW,WAAW,WAAW;AAC7B,cAAQ,YAAY,QAAQ;AAAA,IAChC;AAEA,iBAAa,UAAU,IAAI,kBAAkB;AAE7C,iBAAa,kBAAkB;AAE/B,eAAW,CAAC,EAAE,EAAE,SAAS,QAAS,aAAa,QAAQ,CAAC,KAAK,UAAU;AACnE,UAAI,SAAS;AACT,eAAO,OAAO,QAAQ,OAAO;AAAA,UACzB,KAAU,iBAAiB,MAAM,IAAI,GAAG,YAAY,GAAG;AAAA,UACvD,MAAU,iBAAiB,OAAO,IAAI,GAAG,YAAY,IAAI;AAAA,UACzD,OAAU,iBAAiB,QAAQ,IAAI,GAAG,YAAY,KAAK;AAAA,UAC3D,QAAU,iBAAiB,SAAS,IAAI,GAAG,YAAY,MAAM;AAAA,UAC7D,SAAU,iBAAiB,UAAU,IAAI,QAAQ,SAAS;AAAA,QAC9D,CAAC;AAAA,MACL,OACK;AACD,eAAO,OAAO,QAAQ,OAAO;AAAA,UACzB,KAAU,GAAG,YAAY,GAAG;AAAA,UAC5B,MAAU,GAAG,YAAY,IAAI;AAAA,UAC7B,OAAU,GAAG,YAAY,KAAK;AAAA,UAC9B,QAAU,GAAG,YAAY,MAAM;AAAA,UAC/B,SAAU,QAAQ,SAAS;AAAA,QAC/B,CAAC;AAAA,MACL;AAAA,IACJ;AAEA,UAAM,YAAY,MAAM,QAAQ;AAChC,iBAAa,UAAU,OAAO,kBAAkB;AAEhD,eAAW,WAAW,eAAe;AACjC,UAAI,QAAQ,UAAU;AAClB,YAAI,QAAQ,SAAS,SAAS;AAC1B,kBAAQ,OAAO;AAAA,QACnB,OACK;AACD,uBAAa,eAAe,QAAQ,OAAO,QAAQ,UAAU,UAAU;AACvE,cAAI,QAAQ,oBAAoB;AAC5B,oBAAQ,mBAAmB,OAAO;AAClC,mBAAO,QAAQ;AAAA,UACnB;AACA,kBAAQ,UAAU,OAAO,yBAAyB;AAClD,kBAAQ,SAAS,cAAc,YAAY,OAAO;AAAA,QACtD;AAAA,MACJ;AAAA,IACJ;AAEA,eAAW,WAAW,WAAW;AAC7B,cAAQ,YAAY,QAAQ;AAC5B,aAAO,QAAQ;AAAA,IACnB;AAAA,EACJ;AAAA;AAAA,EAEA,aAAa,WAAW,KAAK;AACzB,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACpC,YAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,aAAO,MAAM;AACb,aAAO,SAAS;AAChB,aAAO,UAAU;AACjB,eAAS,KAAK,YAAY,MAAM;AAAA,IACpC,CAAC;AAAA,EACL;AAAA,EACA,OAAO,aAAa,OAAO;AACvB,WAAO,SAAS,CAAC,uCAAuC,KAAK,KAAK;AAAA,EACtE;AAAA,EACA,OAAO,iBAAiB,OAAO;AAC3B,YAAO,+BAAO,UAAU,KAAK,aAAa,KAAK,IAAI,mBAAmB,KAAK,MAAM,QAAS;AAAA,EAC9F;AAAA;AAAA;AAAA,EAGA,WAAW,aAAa;AACpB,WAAO;AAAA,EACX;AAAA,EACA,OAAO,SAAS,QAAQ,OAAO,SAAS;AACpC,WAAO,aAAa,OAAO,OAAO;AAAA,EACtC;AAAA,EACA,OAAO,0BAA0B,YAAY,gBAAgB;AACzD,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACpC,UAAI,gBAAgB;AAEhB,mBAAW,iBAAiB,+BAA+B,EAAE,QAAQ,QAAM,GAAG,OAAO,CAAC;AAAA,MAC1F;AAEA,YACI,QAAY,SAAS,iBAAiB,wBAAwB;AAClE,UAAI,YAAY;AAChB,YAAM,QAAQ,UAAQ;AAClB,cAAM,QAAQ,KAAK,UAAU;AAC7B,cAAM,iBAAiB,QAAQ,MAAM;AACjC,uBAAa;AACb,cAAI,cAAc,MAAM,QAAQ;AAC5B,oBAAQ;AAAA,UACZ;AAAA,QACJ,CAAC;AACD,cAAM,iBAAiB,SAAS,CAAC,MAAM;AACnC,iBAAO,MAAM,IAAI;AAAA,QACrB,CAAC;AACD,mBAAW,YAAY,KAAK;AAAA,MAChC,CAAC;AAED,eAAS,iBAAiB,OAAO,EAAE,QAAQ,UAAQ;AAC/C,cAAM,QAAQ,KAAK,UAAU;AAC7B,cAAM,YAAY,KAAK;AACvB,mBAAW,YAAY,KAAK;AAAA,MAChC,CAAC;AACD,UAAI,CAAC,MAAM,QAAQ;AACf,gBAAQ;AAAA,MACZ;AAAA,IACJ,CAAC;AAAA,EACL;AAAA;AAEJ;AACA,IAAMA,MAAK;AACX,IAAI;AACJ,IACI,kBAAkB,MAAMA,IAAG,eAAe;AAD9C,IAEI,gBAAkB,MAAM;AACpB,EAAAA,IAAG,eAAe;AAElB,eAAa,eAAe;AAC5B,oBAAkB,WAAW,iBAAiB,GAAG;AACrD;AAGJ,IAAI,iBAAiB,cAAc,eAAe,IAAI;AACtD,IAAI,iBAAiB,YAAY,eAAe,IAAI;AACpDA,IAAG,kBAAkB;AACrBA,IAAG,mBAAmB,aAAa,IAAI,cAAc,UAAU;AAC/DA,IAAG,iBAAiB;AACpBA,IAAG,WAAW;AAEd,IAAI,EAAE,cAAc,KAAK,YAAY;AACjC,QAAM,gBAAgB;AACtB,SAAO,eAAe,KAAK,WAAW,YAAY;AAAA,IAC9C,KAAM,WAAW;AACb,aAAO,MAAM,UAAU,OAAO,KAAK,KAAK,YAAY,aAAa;AAAA,IACrE;AAAA,EACJ,CAAC;AACL;AACA,IAAI,CAAC,QAAQ,UAAU,SAAS;AAC5B,UAAQ,UAAU,UACd,QAAQ,UAAU,mBAClB,QAAQ,UAAU,sBAClB,QAAQ,UAAU,qBAClB,QAAQ,UAAU,oBAClB,QAAQ,UAAU,yBAClB,SAAS,GAAG;AACR,UAAM,WAAW,KAAK,YAAY,KAAK,eAAe,iBAAiB,CAAC;AACxE,QAAI,IAAI,QAAQ;AAChB,WAAO,EAAE,KAAK,KAAK,QAAQ,KAAK,CAAC,MAAM,MAAM;AAAA,IAAc;AAC3D,WAAO,IAAI;AAAA,EACf;AACR;AACA,IAAI,IAAI,WAAW,CAAC,QAAQ,UAAU,SAAS;AAC3C,OAAK,UAAU,UAAU,QAAQ,UAAU,UAAU,SAAS,GAAG;AAC7D,QAAI,KAAK;AACT,QAAI,CAAC,IAAI,gBAAgB,SAAS,EAAE;AAAG,aAAO;AAC9C,OAAG;AACC,UAAI,GAAG,QAAQ,CAAC;AAAG,eAAO;AAC1B,WAAK,GAAG,iBAAiB,GAAG;AAAA,IAChC,SAAS,OAAO,QAAQ,GAAG,aAAa,GAAG;AAC3C,WAAO;AAAA,EACX;AACJ,OACK;AAGD,OAAK,UAAU,UAAU,SAAS,UAAU;AAvtFhD,QAAAC;AAwtFQ,YAAOA,MAAA,KAAK,eAAL,gBAAAA,IAAiB,QAAQ;AAAA,EACpC;AACJ;AAAA,CAEC,SAAS,KAAK;AACX,MAAI,QAAQ,SAAS,MAAM;AACvB,QAAI,OAAO,UAAU,eAAe,KAAK,MAAM,QAAQ,GAAG;AACtD;AAAA,IACJ;AACA,WAAO,eAAe,MAAM,UAAU;AAAA,MAClC,cAAe;AAAA,MACf,YAAe;AAAA,MACf,UAAe;AAAA,MACf,OAAe,SAAS,SAAS;AAC7B,aAAK,cAAc,KAAK,WAAW,YAAY,IAAI;AAAA,MACvD;AAAA,IACJ,CAAC;AAAA,EACL,CAAC;AACL,GAAG,CAAC,QAAQ,WAAW,cAAc,WAAW,aAAa,SAAS,CAAC;AAIvE,WAAW,iBAAiB,UAAU,MAAM,iBAAiB,IAAI;AACjE,UAAU,SAAS;;;ACxuFnB,IAEI,yBAAyB;AAF7B,IAGI,mBAAyB,OAAK,EAAE;AAHpC,IAII,wBAAyB;AAAA,EACrB,UAAY;AAAA,EACZ,WAAY;AAChB;AAPJ,IAQI,qBAAyB;AAAA,EACrB,MAAU;AAAA,EACV,SAAU;AAAA,EACV,KAAU;AACd;AAZJ,IAaI,eAAe,IAAK,MAAM,4BAA4B,KAAK,MAAM,cAAM,EAAE;AAAA,EACrE,qBAAqB;AACjB,2BAAuB;AAAA,EAC3B;AAAA,EACA,oBAAoB;AAChB,2BAAuB;AAAA,EAC3B;AAAA,EACA,wBAAwB,aAAaW,cAAa;AAC9C,QAAI,eAAe,CAAC,aAAa,iBAAiB,IAAI,WAAW,GAAG;AAChE,mBAAa,oBAAoB,aAAaA,YAAW;AACzD,mBAAa,iBAAiB,IAAI,WAAW;AAAA,IACjD;AAAA,EACJ;AAAA,EACA,qBAAqB,aAAa;AAC9B,QAAI,YAAY,uBAAuB;AACnC,kBAAY,sBAAsB;AAClC,kBAAY,wBAAwB;AACpC,mBAAa,iBAAiB,OAAO,WAAW;AAAA,IACpD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB,UAAU,UAAUA,cAAa,SAAS,OAAO;AACjE,QAAI,cAAc,aAAa;AAC/B,UAAM,YAAY;AAAA,MACd;AAAA,MACA,WAAW,YAAY;AACnB,cAAM,EAAE,SAAU,GAAG,IAAI;AACzB,YAAI,GAAG,WAAW,GAAG;AAKjB,yBAAe,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAC5B,wBAAe;AAAA,aACV,aAAa,CAAC,EAAE,UAAU,aAAa,CAAC,EAAE,WAAW;AAAA,aACrD,aAAa,CAAC,EAAE,UAAU,aAAa,CAAC,EAAE,WAAW;AAAA,UAC1D;AACA,wBAAe,SAAS,iBAAiB,YAAY,CAAC,GAAG,YAAY,CAAC,CAAC;AACvE;AAAA,QACJ;AACA,YAAI,CAAC,oBAAoB,WAAW,eAAe,WAAW,GAAG;AAC7D,6BAAmB,WAAW,eAAe,CAAC;AAC9C,cAAI,CAAC,cAAc,WAAW;AAG1B,kBAGI,oBAAoB,CAAC;AAAA,cACjB;AAAA,cACA;AAAA,cACA;AAAA,YACJ,MAAM;AACF,kBAAI,sBAAsB,IAAI,KAAK,KAAK,IAAI,KAAK,IAAI,UAAU,iBAAiB,OAAO,GAAG,KAAK,IAAI,UAAU,iBAAiB,OAAO,CAAC,IAAI,wBAAwB;AAC9J,qCAAqB;AACrB,iCAAiB;AACjB,6BAAa,YAAY;AAAA,cAC7B;AAAA,YACJ,GAEA,mBAAmBA,aAAY,GAAG;AAAA,cAC9B,SAAc;AAAA,cACd,WAAc;AAAA,cACd,UAAc;AAAA,cACd,aAAc;AAAA,cACd,WAAc;AAAA,cACd,SAAc;AAAA,YAClB,CAAC,GACD,eAAe,WAAW,MAAM;AAG5B,mCAAqB,iBAAiB;AAEtC,+BAAiB;AACjB,yBAAW,OAAO,cAAc,IAAI,WAAW,eAAeA,aAAY,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AAAA,YACxG,GAAGA,aAAY,aAAa;AAAA,UACpC;AAAA,QACJ,OACK;AACD,6BAAmB;AAAA,QACvB;AAAA,MACJ;AAAA,MACA,WAAY;AAAA,QACR,SAAU,CAAC,cAAe;AACtB,gBAAM,EAAE,SAAU,GAAG,IAAI;AAIzB,cAAI,GAAG,WAAW,KAAK,cAAc;AACjC,sBAAU,eAAe;AACzB,sBAAU,yBAAyB;AACnC,kBACI,WAAW,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GACxB,QAAWA,aAAY,mBAAmB,aAAa,CAAC,GAAG,aAAa,CAAC,CAAC,IAAIA,aAAY,mBAAmB,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC,GACrI,SAAW,KAAK,IAAI,aAAa,CAAC,EAAE,UAAU,aAAa,CAAC,EAAE,OAAO,IAAI,KAAK,IAAI,SAAS,CAAC,EAAE,UAAU,SAAS,CAAC,EAAE,OAAO,GAC3H,SAAW,KAAK,IAAI,aAAa,CAAC,EAAE,UAAU,aAAa,CAAC,EAAE,OAAO,IAAI,KAAK,IAAI,SAAS,CAAC,EAAE,UAAU,SAAS,CAAC,EAAE,OAAO;AAC/H,gBAAI,KAAK,IAAI,KAAK,IAAI,GAAG;AACrB,oBAAM,IAAI,IAAI,WAAW,SAAS;AAAA,gBAC9B,SAAU,YAAY,CAAC;AAAA,gBACvB,SAAU,YAAY,CAAC;AAAA,gBACvB,SAAU;AAAA,gBACV,SAAU;AAAA,cACd,CAAC;AACD,gBAAE,SAAS;AACX,gBAAE,SAAS;AACX,0BAAY,cAAc,CAAC;AAAA,YAC/B;AACA,2BAAe;AAAA,UACnB;AAAA,QACJ;AAAA,QACA,SAAU;AAAA,MACd;AAAA;AAAA;AAAA;AAAA,MAIA,UAAW;AAAA,QACP,SAAU,WAAS;AAEf,cAAI,MAAM,QAAQ,WAAW,GAAG;AAC5B,2BAAe;AAAA,UACnB;AACA,cAAI,kBAAkB;AAIlB,gBAAI,MAAM,eAAe,CAAC,EAAE,eAAe,oBAAoB;AAC3D,oBAAM,yBAAyB;AAC/B,kBAAI,MAAM,eAAe,OAAO;AAC5B,sBAAM,eAAe;AAAA,cACzB;AAAA,YACJ,WACS,MAAM,eAAe,WAAW,KAAK,MAAM,eAAe,CAAC,EAAE,eAAe,iBAAiB,YAAY;AAC9G,2BAAa,QAAQ,aAAa,EAAE,MAAM,CAAC;AAAA,YAC/C;AACA,+BAAmB;AAAA,UACvB;AAAA,QACJ;AAAA,QACA,SAAU;AAAA,MACd;AAAA,MACA,WAAY;AAAA,QACR,SAAU,WAAS;AACf,gCAAsB;AACtB,cAAI,CAAC,kBAAkB;AACnB,yBAAa,QAAQ,aAAa,EAAE,MAAM,CAAC;AAAA,UAC/C;AACA,6BAAmB;AAEnB,gBAAM,iBAAiB,MAAM,WAAW,MAAM,UAAU,MAAM,YAAY,MAAM;AAChF,cAAI,CAAC,kBAAkB,gBAAgB;AACnC,6BAAiB,IAAI,cAAc,WAAW;AAAA,cAC1C,KAAM,MAAM,UAAU,YACf,MAAM,WAAW,UACb,MAAM,SAAS,QAAQ;AAAA,cAClC,SAAW,MAAM;AAAA,cACjB,QAAW,MAAM;AAAA,cACjB,UAAW,MAAM;AAAA,cACjB,SAAW,MAAM;AAAA,YACrB,CAAC;AAAA,UACL,WACS,kBAAkB,CAAC,gBAAgB;AACxC,6BAAiB;AAAA,UACrB;AAAA,QACJ;AAAA,QACA,SAAU;AAAA,MACd;AAAA,MACA,UAAU;AACN,2BAAmB;AAAA,MACvB;AAAA,MACA,aAAc;AAAA,QACV,SAAU;AAAA,QACV,SAAU,WAAS;AAjMvC,cAAAC;AAkMwB,+BAAqB;AAGrB,oBAAU,gBAAgB;AAC1B,WAAAA,MAAA,QAAQ,cAAR,gBAAAA,IAAmB,OAAO;AAE1B,cAAI,QAAQ,aAAa,KAAK,wBAAwB;AAClD,sBAAU,kBAAkB,SAAS,kBAAkB;AAAA,UAC3D;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,WAAY;AAAA,QACR,SAAU;AAAA,QACV,SAAU,WAAS;AACf,eAAI,yDAAoB,eAAc,MAAM,WAAW;AACnD,iCAAqB;AAAA,UACzB;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,QAAQ,IAAI;AACR,8BAAsB;AACtB,yBAAiB;AACjB,6BAAqB,GAAG;AAGxB,YAAI,CAAC,mBAAmB,GAAG,GAAG,GAAG;AAC7B,oBAAU,gBAAgB;AAE1B,cAAI,QAAQ,aAAa,KAAK,wBAAwB;AAClD,uBAAW,QAAQ,QAAQ,UAAU;AACjC,kBAAI,KAAK,QAAQ,UAAU,GAAG;AAC1B,qBAAK,UAAU,IAAI,kBAAkB;AAAA,cACzC;AAAA,YACJ;AAAA,UACJ,OACK;AACD,oBAAQ,UAAU,IAAI,kBAAkB;AAAA,UAC5C;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,WAAW,IAAI;AACX,6BAAqB,GAAG;AAAA,MAC5B;AAAA,MACA,WAAW;AACP,8BAAsB;AAAA,MAC1B;AAAA,MACA,QAAQ;AACJ,yBAAiB;AAAA,MACrB;AAAA,MACA,QAAQ,SAAS;AAnPjC,YAAAA,KAAA;AAoPoB,cAAM,EAAE,QAAAC,QAAO,IAAI;AAEnB,cAAID,MAAA,QAAQ,WAAR,gBAAAA,IAAgB,iBAAc,aAAQ,WAAR,mBAAgB,cAAa;AAC3D;AAAA,QACJ;AACA,QAAAC,QAAO,qBAAqB;AAC5B,YAAI,sBAAsB;AACtB;AAAA,QACJ;AACA,cACI,cAAkB,CAAC,QAAQ,gBACrB,OACC,QAAQ,yBAAyB,cAAc,QAAQ,gBAAgB,SAAS,MACvF,YAAkB,QAAQ,UAAU,SAAS,MAC7C,aAAkBA,QAAO,YAAY,WAAW,GAChD,WAAkBA,QAAO,YAAY,SAAS,GAC9C,iBAAkB,UAAU,kBAAkB,YAAY,QAAQ,GAElE,YAAkB,CAAC,EAAE,eAAgB,UAAU,wBAAwB,WAAW,IAAI,IACtF,kBAAkBA,QAAO,MAAM,iBAAiB;AACpD,YAAI,eAAe;AACnB,YAAI,aAAa,cAAc,SAAS,MAAM;AAC1C,yBAAe,UAAU,iBAAiB,SAAS;AAAA,QACvD,OACK;AACD,yBAAe,UAAU,iBAAiB,QAAQ;AAAA,QACtD;AAOA,YAAI,mBAAmB,CAAC,gBAAgB,mBAAmB;AACvD,cAAI,CAAC,YAAa,CAAC,gBAAgB,KAAK,QAAQ,KAAK,EAAE,gBAAgB,QAAQ,wBAAwB,SAAS,OAAO,IAAI,KAAK,SAAS,GAAG,gBAAgB,IAAK;AAC7J,mBAAO,gBAAgB,MAAM;AAAA,UACjC;AAAA,QACJ;AACA,YAAI,QAAQ,kBAAkB,YAAY,aAAa,QAAQ,QAAQ,YAAY,UAAU,SAAS;AAEtG,iBAAS,SAAS,YAAY,OAAO,UAAU,WAAW,gBAAgB,SAAS,OAAO;AAEtF,kBAAQ,OAAO;AACf,cAAI,CAAC,OAAO,gBAAgB,OAAO,YAAY;AAC3C,mBAAO,WAAW,KAAK;AAIvB,gBAAI,QAAQ,UAAU,iBAAiB,UAAU,iBAAiB,QAAQ,MAAM,GAAG;AAG/E;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAGA,YAAI,kBAAkB,QAAQ,WAAW,eAAe,SAAS;AAI7D,cAAI,CAAC,eAAe,gBAAgB,UAAU,iBAAiB,cAAc,MAAM,aAAa,eAAe,gBAAgB,eAAe,iBAAiB,eAAe,SAAS;AAEnL,gBAAI,CAAC,eAAe,QAAQ,SAAS,YAAY,KAAK,eAAe,iBAAiB;AAElF,6BAAe,WAAW,MAAG;AArT7D,oBAAAD;AAqTgE,wBAAAA,MAAA,eAAe,UAAf,gBAAAA,IAAA;AAAA,iBAA0B,CAAC;AAAA,YAC/D;AAAA,UACJ;AAAA,QACJ,OAGK;AACD,kBAAQ,kBAAkB,WAAW,WAAW,aAAa,YAAY,UAAU,SAAS;AAC5F,mBAAS,SAAS,UAAU,UAAU,WAAW,gBAAgB,SAAS,OAAO,OAAO;AACpF,gBAAI,CAAC,OAAO,cAAc;AACtB,2BAAO,cAAP,gCAAmB;AAAA,YACvB;AAAA,UACJ;AAAA,QACJ;AAEA,cAAM,mBAAmB,UAAU,mBAAkB,2CAAa,cAAa,QAAQ,eAAe,cAAc,MAAM,SAAS,KAAK,UAAU;AAGlJ,YAAI,kBAAkB;AAClB,kBAAQ,kBAAkB,aAAa,WAAW,aAAa,YAAY,UAAU,WAAW,EAAE,SAAU,KAAK,CAAC;AAClH,2BAAiB,cAAc,KAAK;AAAA,QACxC;AAAA,MACJ;AAAA,MACA,SAAS,UAAU;AACf,YAAI,sBAAsB;AACtB;AAAA,QACJ;AACA,YAAI,CAAC,SAAS,iBAAiB,CAAC,aAAa,OAAO,YAAY,SAAS,aAAa,GAAG;AAGrF,gBAAM,SAAS,SAAS,iBAAiB,SAAS,yBAAyB,cAAc,SAAS,gBAAgB;AAClH,oBAAU,QAAQ;AAAA,YACd;AAAA,YACA,eAAgB,SAAS;AAAA,UAC7B,CAAC;AACD,2BAAiB,mBAAmB;AAAA,QACxC;AAAA,MACJ;AAAA;AAAA,MAEA,MAAO;AAAA,QACH,SAAU;AAAA,QACV,QAAQ,OAAO;AACX,cAAI,MAAM,WAAW,YAAY;AAC7B,6BAAiB;AACjB,+BAAmB;AAAA,UACvB;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,SAAU;AAAA,MACV,SAAU;AAAA,IACd;AAEA,eAAU;AACV,eAAW,KAAK,eAAe,QAAQ,wBAAwBD,aAAY,GAAG,SAAS;AAAA,EAC3F;AAAA,EACA,IAAI,sBAAsB;AACtB,WAAO;AAAA,EACX;AAAA,EACA,IAAI,eAAe;AACf,WAAO,iDAAgB;AAAA,EAC3B;AAAA,EACA,IAAI,cAAc;AACd,YAAO,iDAAgB,aAAW,iDAAgB;AAAA,EACtD;AAAA,EACA,IAAI,aAAa;AACb,WAAO,iDAAgB;AAAA,EAC3B;AAAA,EACA,IAAI,qBAAqB;AACrB,WAAO;AAAA,EACX;AAAA,EACA,UAAU,KAAK;AACX,WAAO,CAAC,MAAM,QAAQ,cAAc,KAAK,iDAAgB,SAAQ,OAAO,gBAAe,2BAAK,iBAAgB,KAAK,MAAM;AAAA,EAC3H;AAAA,EACA,YAAY,SAAS,GAAG;AACpB,YAAO,qDAAkB,YAAW;AAAA,EACxC;AAAA,EACA,IAAI,mBAAmB;AACnB,WAAO;AAAA,EACX;AAAA,EACA,IAAI,qBAAqB;AACrB,WAAO;AAAA,EACX;AAAA,EACA,IAAI,eAAe;AACf,WAAO;AAAA,EACX;AAAA,EACA,IAAI,iBAAiB;AACjB,WAAO;AAAA,EACX;AACJ,EAAG;AAtYP,IAuYI,oBAAoB,OAAK,EAAE,aAAa,EAAE;AAC9C,aAAa,mBAAmB,oBAAI,IAAI;AAQxC,IAAI;AAAJ,IACI;AADJ,IAEI,uBAAuB;AAF3B,IAGI;AAHJ,IAII;AAJJ,IAKI;AALJ,IAMI;AANJ,IAOI;AAPJ,IAQI;AACJ,SAAS,kBAAkB,WAAW,QAAQ,eAAe,YAAY,UAAU,WAAW,SAAS;AACnG,QAAM,SAAS,IAAI,YAAY,WAAW,OAAO;AAGjD,SAAO,eAAe,QAAQ,WAAW;AAAA,IACrC,MAAM;AACF,aAAO;AAAA,IACX;AAAA,EACJ,CAAC;AACD,SAAO,eAAe,QAAQ,iBAAiB;AAAA,IAC3C,MAAM;AACF,aAAO;AAAA,IACX;AAAA,EACJ,CAAC;AACD,SAAO,aAAa;AACpB,SAAO,WAAW;AAClB,SAAO,YAAY;AACnB,SAAO;AACX;AAgBA,IAAO,uBAAQ;;;AC1bf,SAAS,cAAc,IAAI,QAAQ;AAC/B,QAAM,WAAW,aAAa,sBAAsB,IAAI,MAAM;AAC9D,SAAQ,aAAa,SAAS,OAAO,SAAS,OAAQ,WAAW;AACrE;AAmCA,IAAqB,iBAArB,cAA4C,KAAK,MAAM,gBAAQ,mBAAW,EAAE;AAAA;AAAA,EAGxE,WAAW,eAAe;AACtB,WAAO;AAAA,MACH,iBAAkB;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,MA+ClB,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeX,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcT,QAAS;AAAA,IACb;AAAA,EACJ;AAAA;AAAA,EAEA,aAAa,QAAQ;AAEjB,QAAI,CAAC,KAAK,OAAO;AACb,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,QAAQ;AACjB,UAAM,EAAE,OAAO,IAAI;AACnB,WAAO,SAAS,OAAO,aAAa,OAAO,QAAQ,QAAQ,aAAa,aAAa,KAAK,YAAY,KAAK,CAAC;AAAA,EAChH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,OAAO,YAAY,aAAa,SAAS;AACrC,UAAM,WAAW,SAAS,YAAY,SAAS,UAAU,CAAC;AAC1D,eAAW,eAAe,SAAS;AAC/B,eAAS,YAAY,MAAM,IAAI,IAAI,YAAY,QAAQ;AAAA,IAC3D;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAI,UAAU;AACV,WAAO,CAAC,KAAK;AAAA,EACjB;AAAA;AAAA,EAEA,uBAAuB;AAhL3B,QAAAG;AAiLQ,YAAOA,MAAA,KAAK,WAAL,gBAAAA,IAAa;AAAA,EACxB;AAAA,EACA,aAAa,MAAM;AACf,UAAM,KAAK;AACX,QAAI,CAAC,UAAU,MAAM,IAAI,MACrB;AAEJ,QAAI,KAAK,WAAW,GAAG;AACnB,UAAI,aAAa,SAAS,QAAQ,GAAG;AACjC,iBAAS;AACT,mBAAW,OAAO;AAAA,MACtB;AAAA,IACJ,OAEK;AACD,eAAS,aAAa,OAAO,CAAC,GAAG,MAAM;AACvC,aAAO,OAAO;AAAA,IAClB;AACA,OAAG,SAAS;AACZ,UAAM,UAAU,MAAM;AACtB,OAAG,kBAAkB,QAAQ;AAC7B,gBAAY,GAAG;AACf,QAAI,WAAW;AACX,kBAAY,aAAa,OAAO,CAAC,GAAG,SAAS;AAC7C,gBAAU,UAAU;AAEpB,eAAS,IAAI,SAAS;AAAA,IAC1B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAkB,UAAU;AACxB,UACI,KAAS,MACT,SAAS,GAAG,gBAAgB,GAAG,YAAY;AAC/C,QAAI,QAAQ;AACR,YAAM,EAAE,QAAAC,SAAQ,OAAO,OAAO,QAAQ,SAAS,IAAI;AACnD,MAAAA,WAAU,GAAG,YAAY,UAAUA,OAAM;AACzC,OAAC,SAAS,UAAU,GAAG,WAAW,UAAU,SAAS,KAAK;AAC1D,gBAAU,GAAG,WAAW,UAAU,QAAQ,KAAK;AAC/C,kBAAY,GAAG,cAAc,UAAU,QAAQ;AAAA,IACnD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,UAAU,SAAS;AAC3B,YAAQ,QAAQ,YAAU,KAAK,OAAO,UAAU,MAAM,CAAC;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW,UAAU,WAAW,QAAQ,MAAM;AAC1C,QAAI,MAAM,QAAQ,SAAS,GAAG;AAC1B,iBAAW,UAAU,WAAW;AAC5B,aAAK,MAAM,UAAU,QAAQ,QAAQ,KAAK;AAAA,MAC9C;AAAA,IACJ,OACK;AACD,iBAAW,YAAY,WAAW;AAC9B,aAAK,MAAM,UAAU,UAAU,UAAU,QAAQ,GAAG,KAAK;AAAA,MAC7D;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAc,UAAU,SAAS;AAC7B,UAAM,KAAK;AACX,QAAI,CAAC,GAAG,YAAY;AAChB,SAAG,aAAa,CAAC;AAAA,IACrB;AACA,YAAQ,QAAQ,YAAU;AACtB,UAAI,CAAC,GAAG,MAAM,GAAG;AACb,cAAM,IAAI,MAAM,sBAAsB,SAAS,MAAM,IAAI,MAAM,mBAAmB,GAAG,MAAM,IAAI,MAAM,iBAAiB;AAAA,MAC1H;AAEA,UAAI,OAAO,SAAS,MAAM,MAAM,YAAY;AACxC,WAAG,WAAW,MAAM,IAAI,SAAS,MAAM,EAAE,KAAK,QAAQ;AAAA,MAC1D;AACA,eAAS,MAAM,IAAI,GAAG,MAAM,EAAE,KAAK,EAAE;AAAA,IACzC,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,UAAU,QAAQ;AACrB,UACI,KAAW,MACX,WAAW,cAAc,IAAI,MAAM;AACvC,QAAI,UAAU;AAEV,aAAO,eAAe,UAAU,QAAQ;AAAA,QACpC,cAAe;AAAA,QACf,YAAe;AAAA,QACf,KAAe,SAAS,OAAO,SAAS,IAAI,KAAK,EAAE;AAAA,QACnD,KAAe,SAAS,OAAO,SAAS,IAAI,KAAK,EAAE;AAAA,MACvD,CAAC;AAAA,IACL,OACK;AACD,eAAS,MAAM,IAAI,GAAG,MAAM,EAAE,KAAK,EAAE;AAAA,IACzC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,UAAU,UAAU,UAAU,QAAQ,MAAM;AAE9C,QAAI,OAAO;AACX,QAAI,OAAO,aAAa,UAAU;AAC9B,iBAAW,SAAS;AAAA,IACxB;AAEA,QAAI,OAAO,aAAa,UAAU;AAE9B,aAAW,SAAS,QAAQ;AAC5B,iBAAW,SAAS;AAAA,IACxB;AACA,UACI,KAAQ,MACR,SAAS,SAAS,wBAAwB,SAAS,sBAAsB,CAAC,IAC1E,SACI,GAAG,QAAQ,KAAK,GAAG,QAAQ,EAAE,KAAK,EAAE,GAGxC,sBAAsB,GAAG;AAC7B,QAAI,CAAC,QAAQ;AACT,YAAM,IAAI,MAAM,sBAAsB,SAAS,MAAM,IAAI,QAAQ,mBAAmB,GAAG,MAAM,IAAI,QAAQ,iBAAiB;AAAA,IAC9H;AACA,QAAI,CAAC,OAAO,QAAQ,GAAG;AACnB,UAAI,SAAS,SAAS,QAAQ;AAC9B,UAAI,QAAQ;AACR,iBAAS,OAAO,KAAK,QAAQ;AAC7B,eAAO,QAAQ;AAEf,eAAO,QAAQ;AAAA,MACnB;AACA,aAAO,QAAQ,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC;AACxC,eAAS,QAAQ,IAAI,IAAI,WAAW,oBAAoB,OAAO,QAAQ,GAAG,MAAM;AAAA,IACpF;AACA,WAAO,QAAQ;AACf,WAAO,QAAQ;AACf,WAAO,QAAQ,EAAE,QAAQ,SAAS,SAAS,EAAE,MAAM;AACnD,WAAO,QAAQ,EAAE,UAAU;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,oBAAoB,OAAO,QAAQ;AAI/B,QAAIC,KAAI,GAAG;AAEX,QAAI,CAAC,MAAM,SAAS;AAChB,YAAM,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AACtC,YAAM,UAAU;AAAA,IACpB;AACA,SAAK,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAC/B,MAAAA,MAAK,MAAM,CAAC;AAIZ,UAAI,CAACA,IAAG,MAAM,aAAa;AACvB,sBAAcA,IAAG,GAAG,MAAM;AAC1B,YAAI,gBAAgB,OAAO;AACvB;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,UAAU,SAAS;AAnYvB,QAAAF,KAAA;AAoYQ,UACI,KAAK,MACL,EAAE,YAAY,IAAI,IAClB,MAAM,kBAAkB,cAAc,YAAY,eAAe,KAAK,YAAY,OAAO,YAAY,CAAC,IACtG,MAAM,aAAa,aAAa,YAAY,MAAM;AAEtD,QAAI,KAAK;AAEL,aAAAA,MAAA,GAAG,WAAH,gBAAAA,IAAW,aAAX,mBAAqB,UAAU,UAAU,WAAW,OAAO;AAAA,IAC/D;AACA,QAAI,CAAC,GAAG,eAAe;AACnB,UAAI,SAAS;AAMT,WAAG,QAAQ,SAAS;AAAA,MACxB,OACK;AAMD,WAAG,QAAQ,QAAQ;AAAA,MACvB;AAEA,qBAAG,QAAO,eAAV,4BAAuB,WAAS;AAE5B,cAAM,eAAe,MAAM,SAAS,GAAG;AACvC,YAAI,cAAc;AACd,uBAAa,WAAW;AAAA,QAC5B;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,eAAe,UAAU;AACrB,SAAK,UAAU,QAAQ;AAAA,EAC3B;AAAA,EACA,uBAAuB,MAAM;AACzB,UAAM,IAAI,MAAM,yBAAyB,KAAK,YAAY,IAAI,KAAK,MAAM,mBAAmB,KAAK,UAAU,IAAI,KAAK,MAAM,iBAAiB;AAAA,EAC/I;AAAA;AAAA,EAEA,IAAI,cAAc;AACd,WAAO,KAAK,OAAO;AAAA,EACvB;AACJ;AApYI,cADiB,gBACV,SAAQ;AAqYnB,eAAe,SAAS;;;AClaxB,IAAO,oBAAQ,YAAU,MAAM,mBAAmB,UAAU,MAAM;AAAA,EAC9D,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,IAAI,UAAU;AACV,QAAI,CAAC,KAAK,UAAU;AAChB,WAAK,WAAW,CAAC;AAAA,IACrB;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,QAAQ,SAAS;AACjB,QAAI,SAAS;AACT,UAAI,CAAC,MAAM,QAAQ,OAAO;AAAG,kBAAU,CAAC,OAAO;AAC/C,qBAAe,YAAY,MAAM,GAAG,OAAO;AAAA,IAC/C;AACA,SAAK,YAAY;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAc,SAAS;AACnB,mBAAe,YAAY,MAAM,GAAG,OAAO;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU,mBAAmB;AACzB,WAAO,KAAK,UAAU,iBAAiB,KAAK;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU,mBAAmB;AAjFjC,QAAAG;AAkFQ,QAAI,OAAO,sBAAsB,YAAY;AACzC,0BAAoB,kBAAkB;AAAA,IAC1C;AACA,YAAOA,MAAA,KAAK,YAAL,gBAAAA,IAAe;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,cAAc;AAAA,EAAC;AACvB;;;ACxFA,IAAM,EAAE,gBAAAC,gBAAe,IAAI;AAC3B,IAAIC;AACJ,IAAI,cAAc,cAAc;AAC5B,EAAAA,eAAc,WAAW;AAC7B,OACK;AACD,EAAAA,eAAc;AAAA,IACV,MAAM;AACF,cAAO,oBAAI,KAAK,GAAE,QAAQ;AAAA,IAC9B;AAAA,EACJ;AACJ;AAKA,IAAI,eAAe;AACnB,IAAI,cAAc,WAAW;AACzB,QAAMC,WAAU,WAAW,YAAY,WAAW,UAAU,CAAC;AAC7D,iBAAeA,SAAQ,eAAe;AAAA,IAClC,UAAkB,oBAAI,IAAI;AAAA,IAC1B,WAAkB,oBAAI,IAAI;AAAA,IAC1B,iBAAkB,oBAAI,IAAI;AAAA,IAC1B,eAAkB,oBAAI,IAAI;AAAA,IAC1B,QAAQ,mBAAmB,OAAO;AAC9B,aAAO,aAAa,SAAS,OAAO,aAAa,gBAAgB,OAAO,aAAa,cAAc,QAAQ,mBAAmB,aAAa,UAAU,OAAO,OAAO;AAAA,IACvK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,YAAY,EAAE,iBAAiB,CAAC,GAAG,WAAW,KAAM,mBAAmB,MAAM,GAAG;AAC5E,YACI,SAAS,CAAC,GACV,SAAS,CAAC,YAAY,mBAAmB,eAAe;AAC5D,UAAI,kBAAkB;AAClB,eAAO,KAAK,WAAW;AAAA,MAC3B;AAEA,iBAAW,SAAS,QAAQ;AACxB,cAAMC,OAAM,aAAa,KAAK;AAC9B,mBAAW,CAAC,EAAE,KAAK,KAAKA,KAAI,QAAQ,GAAG;AACnC,cAAI,CAAC,eAAe,SAAS,MAAM,IAAI,MAAM,CAAC,OAAO,UAAU,MAAM,KAAK,KAAK,MAAM,QAAQ,WAAW;AACpG,mBAAO,KAAK,KAAK;AAAA,UACrB;AAAA,QACJ;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAAA,EACJ;AACJ;AACA,IACI,cAAiB,QAAQ,QAAQ;AADrC,IAEIC,cAAiB,OAAO,OAAO,CAAC,CAAC;AAFrC,IAGIC,WAAiB,MAAM;AAAC;AAH5B,IAIIC,eAAiB,OAAO,OAAO,CAAC,CAAC;AAJrC,IAKI,iBAAiB,WAAW;AALhC,IAkBI,cAAc,CAAC,IAAIC,KAAI,QAAQ,YAAY;AACvC,QACI,QAAa,OAAOA,QAAO,UAC3B,cAAa,mCAAS,eAAcH,aAIpC,UAAa,MAAM;AACf,WAAO,UAAU;AACjB,WAAO,eAAeH,aAAY,IAAI;AAEtC,UAAM,OAAO,OAAO;AACpB,WAAO,OAAO;AACd,QAAI,OAAO;AACP,SAAGM,GAAE,EAAE,GAAG,MAAM,GAAG,UAAU;AAAA,IACjC,OACK;AACD,MAAAA,IAAG,KAAK,IAAI,GAAG,MAAM,GAAG,UAAU;AAAA,IACtC;AACA,WAAO,SAAS;AAChB,MAAE,OAAO;AAAA,EACb;AACJ,MAAI,SAAS;AACT,SAAK,QAAQ,WAAW;AAAA,EAC5B;AAGA,SAAO,eAAe;AACtB,SAAO,QAAQ;AACf,SAAO,UAAU;AACjB,UAAQ,SAAS;AACjB,SAAO;AACX;AAlDJ,IA8DI,iBAAiB,CAAC,IAAI,QAAQ,WAAW,mBAAmB;AACxD,SAAO,SAAS,MAAM;AAClB,QAAI,OAAO,WAAW;AAClB,SAAG,QAAQ,EAAE,OAAO,OAAO;AAE3B,aAAO,OAAO,OAAO,UAAU;AAAA,IACnC;AAAA,EACJ;AACA,SAAO,QAAQ,MAAM;AACjB,QAAI,OAAO,WAAW;AAClB,SAAG,QAAQ,EAAE,OAAO,OAAO;AAC3B,aAAO,UAAU;AAEjB,aAAO,QAAQ;AAAA,IACnB;AAAA,EACJ;AACA,SAAO,MAAM,IAAI,SAAS;AACtB,WAAO,OAAO;AACd,WAAO,OAAO;AACd,WAAO,QAAQ;AAAA,EACnB;AACA,SAAO,SAAS,SAAO;AACnB,UAAM,IAAI,OAAO;AACjB,WAAO,YAAa,OAAO,IAAI,IAAK,IAAK,IAAI;AAAA,EACjD;AACA,SAAO,UAAU,MAAM;AACnB,MAAE,OAAO;AAAA,EACb;AACA,SAAO,YAAY;AACnB,SAAO,YAAY;AACnB,SAAO,UAAU;AACjB,EAAAP,gBAAe,QAAQ,aAAa;AAAA,IAChC,MAAM;AACF,aAAO,OAAO,YAAY;AAAA,IAC9B;AAAA,EACJ,CAAC;AACD,SAAO;AACX;AA0BJ,IAAO,oBAAQ,YAAU,MAAM,mBAAmB,UAAU,MAAM;AAAA,EAC9D,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EACA,WAAW,aAAa;AACpB,WAAO;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,MA0GH;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,YAAY;AAGR,UAAM,UAAU;AAChB,SAAK,gBAAgB;AAAA,EACzB;AAAA,EACA,kBAAkB;AACd,UACI,KAAK,MACL,CAAC,iBAAiB,mBAAmB,aAAa,YAAY,YAAY,iBAAiB,IAAI;AAAA,MAC3F,GAAG;AAAA,MAAiB,GAAG;AAAA,MAAmB,GAAG;AAAA,MAAa,GAAG;AAAA,MAAY,GAAG;AAAA,MAAY,GAAG;AAAA,IAAiB;AACpH,OAAG,kBAAkB,GAAG,oBAAoB,GAAG,cAAc,GAAG,aAAa,GAAG,aAC5E,GAAG,oBAAoB;AAC3B,6CAAY,QAAQ,CAACO,KAAI,OAAO;AAC5B,UAAI,OAAOA,QAAO,YAAY;AAC1B,QAAAA,IAAG;AAAA,MACP;AACA,mBAAa,EAAE;AACf,mDAAc,SAAS,OAAO;AAAA,IAClC;AACA,6CAAY,QAAQ,CAAC,MAAM,OAAO,aAAa,EAAE;AACjD,+CAAa,QAAQ,QAAM;AACvB,oBAAc,EAAE;AAChB,mDAAc,UAAU,OAAO;AAAA,IACnC;AACA,2DAAmB,QAAQ,QAAM;AAC7B,2BAAqB,EAAE;AACvB,mDAAc,gBAAgB,OAAO;AAAA,IACzC;AACA,uDAAiB,QAAQ,QAAM;AAC3B,yBAAmB,EAAE;AACrB,mDAAc,cAAc,OAAO;AAAA,IACvC;AACA,2DAAmB,QAAQ,aAAW,QAAQ,OAAO;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,MAAM;AAlVrB,QAAAC;AAmVQ,WAAO,SAAQA,MAAA,KAAK,eAAL,gBAAAA,IAAiB,IAAI,KAAK;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,KAAKD,KAAI,SAAS;AASd,UACI,KAAK,MACL,aAAa,IAAI,WAAW;AACxB,UAAI,CAAC,WAAW,WAAW;AACvB,mBAAW,SAAS;AACpB,mBAAW,OAAO;AAClB,YAAI,WAAW,WAAW;AACtB,kBAAQ;AAAA,QACZ,WACS,CAAC,WAAW,WAAW;AAC5B,qBAAW,UAAU,GAAG,eAAe,OAAO;AAAA,QAClD;AAAA,MACJ;AAAA,IACJ,GACA,UAAU,YAAY,IAAIA,KAAI,YAAY,OAAO;AACrD,WAAO,eAAe,IAAI,YAAY,iBAAiB;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,eAAeA,KAAI,MAAM,SAAS;AAC9B,QAAI,KAAK;AACT,QAAI,CAAC,WAAW,QAAQ,CAAC,MAAM,QAAQ,IAAI,GAAG;AAC1C,gBAAU;AACV,aAAO;AAAA,IACX;AACA,cAAU,WAAWD;AACrB,WAAU,QAAQ,QAAQ,QAAQF;AAClC,UACI,KAAU,MACVK,UAAU,OAAOF,QAAO,UACxB,OAAUE,UAASF,MAAKA,IAAG,MAC3B,UAAU,GAAG,sBAAsB,GAAG,oBAAoB,oBAAI,IAAI,IAClE,SAAU,MAAM,QAAQ,OAAO,GAAG,GAClC,SAAU,MAAM;AACZ,UAAI,YAAY,QAAQ,IAAI,GAAG,GAAG;AAC9B,gBAAQ,OAAO,GAAG;AAClB,YAAIE,SAAQ;AACR,WAAC,GAAG,eAAe,GAAGF,GAAE,EAAE,GAAG,IAAI;AAAA,QACrC,OACK;AACD,UAAAA,IAAG,MAAM,IAAI,IAAI;AAAA,QACrB;AAAA,MACJ;AAAA,IACJ;AACJ,QAAI,GAAG,gBAAgB,CAAC,QAAQ,cAAc;AAC1C,aAAOF;AAAA,IACX;AACA,UAAU,QAAQ,oBAAoB,QAAQE,MAAK;AACnD,cAAU,EAAE,KAAK,MAAM,IAAAA,KAAI,MAAM,SAAS,QAAQ,OAAO;AACzD,WAAO,UAAU;AACjB,qBAAiB,eAAe,MAAM,IAAI,YAAY,KAAK,MAAM;AACjE,YAAQ,IAAI,KAAK,OAAO;AACxB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBAAgB,MAAM;AAClB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,WAAW,EAAE,IAAAA,KAAI,OAAAG,QAAO,MAAM,cAAc,mBAAmB,KAAK,GAAG;AACnE,QAAI,UAAU,SAAS,KAAK,OAAO,UAAU,CAAC,MAAM,YAAY;AAC5D,OAACH,KAAIG,QAAO,MAAM,YAAY,IAAI;AAAA,IACtC;AACA,QAAI,OAAOH,QAAO,UAAU;AACxB,aAAOA;AAAA,IACX,WACS,CAAC,MAAM;AACZ,aAAOA,IAAG,QAAQA;AAAA,IACtB;AACA,QAAI,mBAAmB;AACnB,WAAK,aAAa,IAAI;AAAA,IAC1B;AACA,UACI,KAAa,MACb,aAAa,GAAG,eAAe,GAAG,aAAa,oBAAI,IAAI,IACvD,aAAa,GAAG,eAAe,GAAG,aAAa,oBAAI,IAAI,IACvD,YAAa,WAAW,MAAM;AAC1B,UAAI,OAAOA,QAAO,UAAU;AACxB,QAAAA,MAAK,GAAG,IAAI;AAAA,MAChB;AAEA,+CAAY,OAAO;AACnB,+CAAY,OAAO;AACnB,mDAAc,SAAS,OAAO;AAC9B,MAAAA,IAAG,MAAM,IAAI,IAAI;AAAA,IACrB,GAAGG,MAAK;AACZ,eAAW,IAAI,WAAW,eAAeH,MAAK,IAAI;AAElD,iDAAc,SAAS,IAAI,WAAW;AAAA,MAAE,IAAAA;AAAA,MAAI,OAAAG;AAAA,MAAO;AAAA;AAAA,IAAoC;AACvF,QAAI,MAAM;AACN,iBAAW,IAAI,MAAM,SAAS;AAAA,IAClC;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAa,UAAU;AAhf3B,QAAAF;AAifQ,QAAI,KAAK;AACT,QAAI,OAAO,OAAO,UAAU;AACxB,UAAI,KAAK,YAAY;AACjB,aAAK,KAAK,WAAW,IAAI,QAAQ;AACjC,aAAK,WAAW,OAAO,QAAQ;AAAA,MACnC,OACK;AACD;AAAA,MACJ;AAAA,IACJ;AACA,iBAAa,EAAE;AACf,KAAAA,MAAA,KAAK,eAAL,gBAAAA,IAAiB,OAAO;AACxB,iDAAc,SAAS,OAAO;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc,IAAI;AApgBtB,QAAAA;AAqgBQ,kBAAc,EAAE;AAChB,KAAAA,MAAA,KAAK,gBAAL,gBAAAA,IAAkB,OAAO;AACzB,iDAAc,UAAU,OAAO;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAYD,KAAIG,QAAO,MAAM;AACzB,UAAM,aAAa,YAAYH,KAAIG,MAAK;AACxC,KAAC,KAAK,gBAAgB,KAAK,cAAc,oBAAI,IAAI,IAAI,IAAI,UAAU;AACnE,iDAAc,UAAU,IAAI,YAAY,EAAE,IAAAH,KAAI,OAAAG,QAAO,KAAK;AAC1D,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,sBAAsBH,KAAI,YAAY,CAAC,GAAG,UAAU,MAAM;AACtD,UACI,oBAAoB,KAAK,sBAAsB,KAAK,oBAAoB,oBAAI,IAAI,IAChF,UAAoB,sBAAsB,MAAM;AAC5C,mDAAc,gBAAgB,OAAO;AAIrC,wBAAkB,OAAO,OAAO,KAAKA,IAAG,MAAM,SAAS,SAAS;AAAA,IACpE,CAAC;AACL,sBAAkB,IAAI,OAAO;AAC7B,iDAAc,gBAAgB,IAAI,SAAS,EAAE,IAAAA,KAAI,WAAW,QAAQ;AACpE,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,oBAAoBA,KAAI,YAAY,CAAC,GAAG,UAAU,MAAM;AACpD,UACI,kBAAkB,KAAK,oBAAoB,KAAK,kBAAkB,oBAAI,IAAI,IAC1E,UAAoB,oBAAoB,MAAM;AAC1C,mDAAc,cAAc,OAAO;AAGnC,sBAAgB,OAAO,OAAO,KAAKA,IAAG,MAAM,SAAS,SAAS;AAAA,IAClE,CAAC;AACL,oBAAgB,IAAI,OAAO;AAC3B,iDAAc,cAAc,IAAI,SAAS,EAAE,IAAAA,KAAI,WAAW,QAAQ;AAClE,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,cAAcA,KAAI,OAAO,CAAC,GAAG,UAAU,MAAM,mBAAmB;AAC5D,QAAI;AACJ,UAAM,SAAS,IAAI,aAAa;AAE5B,UAAI,SAAS,QAAQ,mBAAmB;AACpC,aAAK,qBAAqB,KAAK;AAC/B,gBAAQ;AAAA,MACZ;AACA,UAAI,SAAS,MAAM;AACf,gBAAQ,KAAK,sBAAsB,MAAM;AACrC,cAAI,OAAOA,QAAO,UAAU;AACxB,YAAAA,MAAK,QAAQA,GAAE;AAAA,UACnB;AACA,kBAAQ;AACR,mBAAS,KAAK,GAAG,IAAI;AACrB,UAAAA,IAAG,MAAM,SAAS,QAAQ;AAAA,QAC9B,CAAC;AAAA,MACL;AAAA,IACJ;AACA,WAAO,SAAS,MAAM,KAAK,qBAAqB,KAAK;AACrD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,qBAAqB,QAAQ;AAtmBjC,QAAAC;AAumBQ,yBAAqB,MAAM;AAC3B,KAAAA,MAAA,KAAK,sBAAL,gBAAAA,IAAwB,OAAO;AAC/B,iDAAc,gBAAgB,OAAO;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,mBAAmB,QAAQ;AAhnB/B,QAAAA;AAinBQ,uBAAmB,MAAM;AACzB,KAAAA,MAAA,KAAK,oBAAL,gBAAAA,IAAsB,OAAO;AAC7B,iDAAc,cAAc,OAAO;AAAA,EACvC;AAAA,EACA,MAAM,qBAAqB;AACvB,WAAO,IAAI,QAAQ,aAAW,KAAK,sBAAsB,OAAO,CAAC;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,OAAOD,KAAI,SAAS;AAChB,QAAIG,SAAQ;AACZ,QAAI,WAAW,OAAO,YAAY,UAAU;AACxC,MAAAA,SAAQ,QAAQ;AAAA,IACpB,OACK;AACD,gBAAU;AAAA,IACd;AACA,UACI,eAAe,IAAI,WAAW;AAC1B,UAAI,aAAa,WAAW;AACxB;AAAA,MACJ;AACA,YAAM,EAAE,OAAAA,OAAM,IAAI;AAClB,mBAAa,OAAO;AACpB,mBAAa,SAAS;AACtB,mBAAa,OAAO;AAEpB,UAAI,aAAa,aAAa,CAACA,QAAO;AAClC,gBAAQ;AAAA,MACZ,OACK;AACD,qBAAa,UAAU,KAAK,WAAW,SAASA,MAAK;AAAA,MACzD;AAAA,IACJ,GACA,UAAU,YAAY,MAAMH,KAAI,cAAc,OAAO;AACzD,iBAAa,QAAQG;AACrB,WAAO,eAAe,MAAM,YAAY;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,IAAIH,KAAI,SAAS;AAWb,QAAI,oBAAoB;AACxB,QAAI,WAAW,OAAO,YAAY,WAAW;AACzC,0BAAoB,QAAQ;AAAA,IAChC,OACK;AACD,gBAAU;AAAA,IACd;AACA,UACI,YAAY,IAAI,WAAW;AACvB,UAAI,UAAU,WAAW;AACrB;AAAA,MACJ;AAEA,UAAI,UAAU,mBAAmB;AAC7B,kBAAU,OAAO;AAAA,MACrB;AACA,gBAAU,SAAS;AACnB,gBAAU,OAAO;AACjB,UAAI,UAAU,WAAW;AACrB,gBAAQ;AAAA,MACZ,WACS,CAAC,UAAU,WAAW;AAC3B,kBAAU,UAAU,KAAK,sBAAsB,OAAO;AAAA,MAC1D;AAAA,IACJ,GACA,UAAU,YAAY,MAAMA,KAAI,WAAW,OAAO;AACtD,cAAU,oBAAoB;AAC9B,WAAO,eAAe,MAAM,WAAW,sBAAsB;AAAA,EACjE;AAAA,EACA,KAAKA,KAAI,SAAS;AACd,QAAI,oBAAoB;AACxB,QAAI,WAAW,OAAO,YAAY,WAAW;AACzC,0BAAoB,QAAQ;AAAA,IAChC,OACK;AACD,gBAAU;AAAA,IACd;AACA,UACI,aAAa,IAAI,WAAW;AACxB,UAAI,WAAW,WAAW;AACtB;AAAA,MACJ;AAEA,UAAI,WAAW,mBAAmB;AAC9B,mBAAW,OAAO;AAAA,MACtB;AACA,iBAAW,SAAS;AACpB,iBAAW,OAAO;AAClB,UAAI,WAAW,WAAW;AACtB,gBAAQ;AAAA,MACZ,WACS,CAAC,WAAW,WAAW;AAC5B,mBAAW,UAAU,KAAK,oBAAoB,OAAO;AAAA,MACzD;AAAA,IACJ,GACA,UAAU,YAAY,MAAMA,KAAI,YAAY,OAAO;AACvD,eAAW,oBAAoB;AAE/B,SAAK,WAAW,MAAM,KAAK,gBAAgB,OAAO,WAAW,OAAO,KAAK,WAAW,IAAI,GAAG,GAAG;AAC9F,WAAO,eAAe,MAAM,YAAY,oBAAoB;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,SAASA,KAAI,SAAS;AAClB,QAAIG,SAAQ,SACR;AACJ,QAAI,WAAW,OAAO,YAAY,UAAU;AACxC,MAAAA,SAAQ,QAAQ;AAChB,kBAAY,QAAQ;AAAA,IACxB,OACK;AACD,gBAAU;AAAA,IACd;AACA,UACI,KAAK,MACL,iBAAiB,IAAI,SAAS;AAC1B,UAAI,eAAe,WAAW;AAC1B;AAAA,MACJ;AACA,YACI,EAAE,OAAAA,OAAM,IAAI,gBACZ,UAAUT,aAAY,IAAI,IAAI,eAAe;AACjD,qBAAe,OAAO;AAGtB,UAAI,eAAe,aAAa,WAAWS,QAAO;AAC9C,WAAG,aAAa,eAAe,OAAO;AACtC,gBAAQ;AAAA,MACZ,OACK;AAED,YAAI,CAAC,eAAe,WAAW;AAC3B,yBAAe,UAAU,GAAG,WAAW,SAASA,SAAQ,OAAO;AAC/D,yBAAe,SAAS;AAAA,QAC5B;AACA,YAAI,WAAW;AAEX,oBAAU,OAAO,OAAO;AACxB,oBAAU;AAAA,QACd;AAAA,MACJ;AAAA,IACJ,GACA,UAAU,YAAY,IAAIH,KAAI,gBAAgB,OAAO;AACzD,mBAAe,QAAQG;AACvB,QAAI,WAAW;AAEX,kBAAY,YAAY,IAAI,WAAW,MAAM;AAAA,MAAC,GAAG,OAAO;AAAA,IAC5D;AACA,WAAO,eAAe,IAAI,cAAc;AAAA,EAC5C;AAAA,EACA,OAAO,eAAe,KAAK;AACvB,QAAI,sBAAsB,IAAI,SAAS;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,sBAAsB,WAAW,MAAM,MAAM;AAChD,UACI,KAAK,MACL,UAAU,UAAU,QACpB,SAAS,OAAO,GAAG;AACvB,QAAI,SAAS;AACT,aAAO,UAAU;AAAA,IACrB;AACA,eAAW,QAAQ,WAAW;AAC1B,UAAI,UAAU,UAAU,IAAI;AAC5B,YACI,WAAW,OAAO,OAClB,OAAO,OAAO;AAClB,UAAI,CAAC,OAAO,QAAQ,GAAG;AAEnB,eAAO,QAAQ,IAAI,OAAO,IAAI;AAAA,MAClC;AACA,UAAI,SAAS,UAAU;AACnB,kBAAU;AAAA,UACN,MAAQ;AAAA,UACR,OAAQ;AAAA,QACZ;AAAA,MACJ,WACS,SAAS,UAAU;AACxB,kBAAU;AAAA,UACN,MAAO;AAAA,QACX;AAAA,MACJ;AAIA,MAAAV,gBAAe,QAAQ,MAAM;AAAA,QACzB,MAAM;AACF,gBAAM,QAAQ,KAAK,QAAQ,IAAI,EAAE,IAAI,WAAW;AAC5C,iBAAK,QAAQ,EAAE,GAAG,MAAM;AAAA,UAC5B,GAAG,OAAO;AACV,UAAAA,gBAAe,MAAM,MAAM,EAAE,MAAM,CAAC;AACpC,iBAAO;AAAA,QACX;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,cAAc;AAAA,EAAC;AACvB;;;ACv2BA,IAAqB,eAArB,MAAkC;AAAA;AAAA;AAAA;AAAA;AAAA,EAK9B,IAAI,OAAO;AACP,WAAO,uBAAO,OAAO,IAAI;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAO;AACP,WAAO,CAAC;AAAA,EACZ;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQ;AAAA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMT,QAAQ,KAAK;AACT,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,KAAK;AAAA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMjB,QAAQ,KAAK,OAAO;AAAA,EAAC;AACzB;AACA,aAAa,SAAS;;;ACxCtB,IAAM,QAAN,cAAoB,aAAa;AAAA,EAC7B,YAAY,eAAe;AACvB,UAAM;AACN,SAAK,SAAS,cAAc,UAAU;AAAA,EAC1C;AAAA,EACA,IAAI,UAAU;AACV,WAAO;AAAA,EACX;AAAA,EACA,IAAI,OAAO;AACP,UACI,OAAO,MAAM,GACb,OAAO,KAAK;AAChB,eAAW,OAAO,MAAM;AACpB,WAAK,GAAG,IAAI,KAAK,QAAQ,GAAG;AAAA,IAChC;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,OAAO;AACP,WAAO,QAAQ,KAAK,QAAQ,KAAK,OAAO,MAAM;AAAA,EAClD;AAAA,EACA,QAAQ;AAGJ,UAAM,OAAO,QAAQ,KAAK,MAAM;AAChC,eAAW,OAAO,MAAM;AACpB,mBAAa,WAAW,GAAG;AAAA,IAC/B;AAAA,EACJ;AAAA,EACA,QAAQ,KAAK;AACT,UAAM,QAAQ,aAAa,QAAQ,KAAK,SAAS,GAAG;AAGpD,WAAQ,UAAU,OAAQ,QAAQ,KAAK,MAAM,KAAK;AAAA,EACtD;AAAA,EACA,WAAW,KAAK;AACZ,WAAO,aAAa,WAAW,KAAK,SAAS,GAAG;AAAA,EACpD;AAAA,EACA,QAAQ,KAAK,OAAO;AAChB,WAAO,aAAa,QAAQ,KAAK,SAAS,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,EACxE;AACJ;AACA,IAAM,SAAN,cAAqB,aAAa;AAAA,EAC9B,cAAc;AACV,UAAM;AACN,SAAK,MAAM;AAAA,EACf;AAAA,EACA,IAAI,WAAW;AACX,WAAO;AAAA,EACX;AAAA,EACA,IAAI,OAAO;AACP,WAAO,aAAa,MAAM,KAAK,KAAK;AAAA,EACxC;AAAA,EACA,IAAI,OAAO;AACP,WAAO,OAAO,KAAK,KAAK,KAAK;AAAA,EACjC;AAAA,EACA,QAAQ;AACJ,SAAK,QAAQ,MAAM;AAAA,EACvB;AAAA,EACA,QAAQ,KAAK;AACT,WAAQ,OAAO,KAAK,QAAS,KAAK,MAAM,GAAG,IAAI;AAAA,EACnD;AAAA,EACA,WAAW,KAAK;AACZ,WAAO,KAAK,MAAM,GAAG;AAAA,EACzB;AAAA,EACA,QAAQ,KAAK,OAAO;AAChB,SAAK,MAAM,GAAG,IAAI;AAAA,EACtB;AACJ;AACA,IACI,QAAQ,MAAM,uBAAO,OAAO,IAAI;AADpC,IAEI,UAAU,CAAC,QAAQ,MAAM,MAAM;AAC3B,QACI,OAAO,CAAC,GACR,QAAQ,aAAa;AACzB,WAAS,KAAK,IAAI,GAAG,IAAI,OAAO,EAAE,GAAG;AACjC,UAAM,aAAa,IAAI,CAAC;AACxB,QAAI,WAAW,MAAM,KAAK,KAAK,KAAK,IAAI,MAAM,GAAG,CAAC;AAAA,EACtD;AACA,SAAO;AACX;AAXJ,IAYI,cAAc,IAAI,aAAa;AAZnC,IAaI,eAAe;AAAA,EACX,OAAS;AAAA,EACT,QAAS;AACb;AAmEJ,IAAqB,gBAArB,MAAqB,uBAAsB,KAAK,MAAM,mBAAW,cAAM,EAAE;AAAA,EACrE,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EACA,WAAW,eAAe;AACtB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMH,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAaT,SAAU;AAAA,IACd;AAAA,EACJ;AAAA,EACA,WAAW,YAAY;AAuCnB,WAAO;AAAA,MACH,gBAAiB;AAAA,IACrB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,WAAW;AAClB,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,WAAW,SAAS,MAAM;AACtB,QAAI,QAAQ,MAAM;AACd,aAAO;AAAA,IACX,OACK;AACD,UAAI,OAAO,SAAS,YAAY,aAAa,QAAQ,IAAI,KAAM,gBAAgB,cAAe;AAC1F,eAAO;AAAA,UACH,SAAU;AAAA,QACd;AAAA,MACJ;AACA,UAAI,aAAa,SAAS,IAAI,GAAG;AAC7B,eAAO,IAAI,eAAc,IAAI;AAAA,MACjC;AAAA,IACJ;AACA,SAAK,YAAY;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,OAAO,MAAM,MAAM;AACf,SAAK,WAAW;AAChB,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,YAAY;AACR,SAAK,eAAe,MAAM;AAC1B,UAAM,UAAU;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,OAAO;AACP,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EACA,IAAI,KAAK,MAAM;AACX,QAAI,CAAC,MAAM;AACP,WAAK,MAAM;AAAA,IACf,OACK;AACD,iBAAW,OAAO,MAAM;AACpB,aAAK,SAAS,KAAK,KAAK,GAAG,CAAC;AAAA,MAChC;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ;AACJ,SAAK,QAAQ,MAAM;AACnB,WAAO;AAAA,EACX;AAAA,EACA,cAAc,SAAS;AACnB,QAAI,WAAW,MAAM;AACjB,gBAAU;AAAA,IACd,OACK;AACD,UAAI,OAAO,YAAY,UAAU;AAC7B,YAAI,CAAC,aAAa,OAAO,GAAG;AACxB,gBAAM,IAAI,MAAM,yBAAyB,OAAO,wBAC5C,OAAO,KAAK,YAAY,EAAE,KAAK,MAAM,CAAC,IAAI;AAAA,QAClD;AACA,kBAAU,aAAa,OAAO;AAAA,MAClC;AACA,UAAI,aAAa,QAAQ,OAAO,GAAG;AAC/B,kBAAU,IAAI,QAAQ,IAAI;AAAA,MAC9B;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAa,UAAU,SAAS;AAC5B,KAAC,KAAK,iBAAiB,KAAK,eAAe,CAAC,IAAI,KAAK,CAAC,UAAU,OAAO,CAAC;AACxE,SAAK,eAAe;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB;AACb,UACI,KAAK,MACL,EAAE,aAAa,IAAI,IACnB,IAAI,6CAAc,QAClB,WAAW,CAAC,GACZ,QAAQ,CAAC;AACb,OAAG,eAAe;AAClB,QAAI,GAAG;AACH,eAAS,SAAS,UAAU,SAAS,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AACpD,SAAC,UAAU,OAAO,IAAI,aAAa,CAAC;AACpC,YAAI,CAAC,SAAS,gBAAgB,SAAS,oBAAoB;AACvD,oBAAU,SAAS,UAAU;AAAA,YACzB,GAAG;AAAA,YACH,WAAY;AAAA,UAChB,CAAC;AACD,cAAI,SAAS;AACT,qBAAS,KAAK,OAAO;AACrB,kBAAM,KAAK,QAAQ;AAAA,UACvB;AAAA,QACJ;AAAA,MACJ;AACA,UAAI,SAAS,QAAQ;AA6CjB,WAAG,QAAQ,QAAQ;AAAA,UACf;AAAA,UACA;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS,KAAK;AACV,SAAK,eAAe,MAAM;AAC1B,WAAO,KAAK,QAAQ,QAAQ,GAAG;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,KAAK,OAAO;AACjB,UACI,KAAK,MACL,EAAE,QAAQ,IAAI,IACd,MAAM,GAAG,SAAS,GAAG;AACzB,QAAI,SAAS,MAAM;AACf,cAAQ,QAAQ,KAAK,KAAK;AAS1B,SAAG,QAAQ,OAAO,EAAE,KAAK,OAAO,IAAI,CAAC;AAAA,IACzC,WACS,QAAQ,MAAM;AACnB,cAAQ,WAAW,GAAG;AAQtB,SAAG,QAAQ,UAAU,EAAE,KAAK,IAAI,CAAC;AAAA,IACrC;AACA,WAAO;AAAA,EACX;AACJ;AACA,IAAM,eAAe,IAAI,cAAc;AAAA,EACnC,SAAU;AACd,CAAC;AACD,cAAc,YAAY;AAC1B,cAAc,SAAS;;;ACncvB,IAAM,cAAc;AA0HpB,IAAO,gBAAQ,YAAO;AAnItB,MAAAW;AAmIyB,SAAAA,MAAA,eAAqB,UAAU,MAAM;AAAA,IA8F1D,iBAAiB;AACb,YAAM,eAAe;AACrB,WAAK,UAAU;AAAA,IACnB;AAAA,IACA,eAAe;AAEX,WAAK,UAAU;AACf,YAAM,aAAa;AAAA,IACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,IAAI,aAAa;AACb,aAAO;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,IAAI,mBAAmB;AAMnB,aAAO,CAAC,KAAK,qBAAqB,CAAC,KAAK,uBAAuB,CAAC,KAAK;AAAA,IACzE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,IAAI,QAAQ;AACR,aAAO,KAAK,SAAS,KAAK,SAAS;AAAA,IACvC;AAAA,IACA,IAAI,MAAM,OAAO;AACb,WAAK,SAAS;AACd,UAAI,OAAO;AACP,aAAK,WAAW,KAAK;AAAA,MACzB;AAAA,IACJ;AAAA;AAAA,IAEA,qBAAqB,QAAQ;AAjRjC,UAAAA;AAkRQ,YACI,KAAY,MACZ,YAAY;AAAA,QACR,MAAU;AAAA,QACV,SAAU;AAAA,MACd;AACJ,SAAG,gBAAgB,UAAU,IAAI;AACjC,UAAI,QAAQ;AACR,YAAI,OAAO,WAAW,UAAU;AAC5B,mBAAS,aAAa,MAAM,MAAM;AAAA,QACtC,WACS,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC7B,mBAAS,aAAa,cAAc,MAAM;AAAA,QAC9C;AACA,YAAI,OAAO,QAAQ;AACf,qBAAW,SAAS,QAAQ;AACxB,sBAAU,KAAK,IAAI;AAAA,UACvB;AACA,WAAAA,MAAA,GAAG,QAAH,gBAAAA,IAAA,SAAS;AAAA,QACb;AAAA,MACJ;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,IAAI,aAAa;AACb,YACI,KAAK,MACL,EAAE,gBAAgB,IAAI;AAC1B,UAAI,aAAa,GAAG;AACpB,UAAI,cAAc,QAAQ,GAAG,mBAAmB,SAAS,GAAG,aAAa,OAAO;AAC5E,qBAAa,GAAG;AAAA,MACpB;AACA,UAAI,cAAc,iBAAiB;AAC/B,qBAAa,GAAG,UAAU,IAAI,eAAe;AAAA,MACjD;AACA,aAAO;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,IAAI,eAAe;AACf,YAAM,EAAE,SAAS,IAAI;AACrB,aAAO,MAAM,QAAQ,QAAQ,IAAI,aAAa,iBAAiB,QAAQ,IAAI;AAAA,IAC/E;AAAA;AAAA,IAEA,IAAI,gBAAgB;AAChB,aAAO,KAAK,kBAAkB,cAAc;AAAA,IAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAiBA,WAAW,OAAO;AACd,cAAQ,KAAK,WAAW,KAAK;AAC7B,UAAI,OAAO;AACP,aAAK,UAAU,KAAK;AAAA,MACxB;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAeA,WAAW;AACP,YACI,KAAc,MACd;AAAA,QACI;AAAA,QACA;AAAA,QACA,gBAAiB;AAAA,MACrB,IAAc,IACd,EAAE,QAAQ,IAAI,GAAG,OAGjB,SAAc,eAAe,OAAO,eAAe,eAAe,GAAG,MAAM,MAAM,IAAI;AACzF,UAAI,QAAQ,MACR,KAAK;AACT,UAAI,cAAc;AACd,gBAAQ,CAAC;AACT,aAAK,OAAO,cAAc;AACtB,cAAI,aAAa,GAAG,GAAG;AACnB,oBAAQ,OAAO,GAAG;AAClB,gBAAI,+BAAO,YAAY;AACnB,sBAAQ,MAAM;AAAA,YAClB,WACS,CAAC,cAAc;AAGpB,kBAAI,aAAa,OAAO,KAAK,GAAG;AAC5B,wBAAQ,WAAW,OAAO,OAAO,sBAAsB;AAAA,cAC3D;AAEA,kBAAI,QAAQ,GAAG,EAAE,MAAM,OAAO,+CAAgB,IAAI,KAAK,CAAC,YAAY,KAAK,OAAO,KAAK,GAAG;AACpF;AAAA,cACJ;AAAA,YACJ;AACA,kBAAM,GAAG,IAAI;AAAA,UACjB;AAAA,QACJ;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBA,UAAU,SAAS,QAAQ;AACvB,UAAI,OAAO,YAAY,WAAW;AAC9B,iBAAS;AACT,kBAAU;AAAA,MACd;AACA,YACI,KAAK,MACL,EAAE,eAAe,IAAI;AACzB,UAAI,GAAG,qBAAqB,UAAU,CAAC,iBAAiB;AACpD,cAAM,QAAQ,GAAG,iBAAiB,YAAY,UAAU,GAAG,WAAW;AACtE,YAAI,CAAC,kBAAkB,SAAS;AAI5B,aAAG,eAAe,GAAG;AACrB,aAAG,iBAAiB;AAAA,QACxB;AACA,YAAI,OAAO;AACP,aAAG,QAAQ;AAAA,QACf;AAAA,MACJ;AAAA,IACJ;AAAA,IACA,iBAAiB,SAAS;AA7b9B,UAAAA;AA8bQ,gBAAU,KAAK,mBAAmB,WAAW,KAAK,aAAa;AAC/D,aAAO,aAAWA,MAAA,KAAK,kBAAL,gBAAAA,IAAoB,SAAS;AAAA,IACnD;AAAA,IACA,oBAAoB;AAChB,UAAI,KAAK,cAAc;AACnB,aAAK,QAAQ,KAAK;AAAA,MACtB;AAAA,IACJ;AAAA,IACA,eAAe,OAAO,OAAO;AACzB,WAAK,oBAAoB,OAAO,IAAI,KAAK,IAAI,KAAK,oBAAoB,GAAG,CAAC;AAAA,IAC9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBA,UAAU,SAAS;AACf,UAAI,OAAO,YAAY,UAAU;AAC7B,kBAAU;AAAA,UACN,IAAK;AAAA,QACT;AAAA,MACJ,OACK;AACD,kBAAU,WAAW,CAAC;AAAA,MAC1B;AACA,YACI,KAAoB,MACpB,EAAE,cAAc,IAAI,IACpB,aAAoB,QAAQ,MAAO,GAAG,oBAAoB,GAAG;AACjE,UAAI,cAAc,eAAe;AAC7B,YAAI,QAAQ,WAAW;AACnB,aAAG,qBAAqB;AACxB,wBAAc,SAAS,YAAY,GAAG,KAAK;AAAA,QAC/C,WACS,CAAC,GAAG,oBAAoB;AAC7B,aAAG,qBAAqB;AACxB,wBAAc,aAAa,IAAI,OAAO;AAAA,QAC1C;AACA,eAAO;AAAA,MACX;AAAA,IACJ;AAAA,IACA,kBAAkB;AACd,QAAE,KAAK;AAAA,IACX;AAAA;AAAA;AAAA,IAGA,eAAe,EAAE,MAAM,OAAO,KAAK,OAAO,GAAG;AACzC,YAAM,eAAe,EAAE,MAAM,OAAO,KAAK,OAAO,CAAC;AACjD,UAAI,CAAC,KAAK,kBAAkB,KAAK,oBAAoB,KAAK,YAAY;AAClE,cAAM,EAAE,SAAS,IAAI;AACrB,YAAI,MAAM,QAAQ,QAAQ,IAAI,SAAS,SAAS,IAAI,IAAI,qCAAW,OAAO;AACtE,eAAK,UAAU;AAAA,QACnB;AAAA,MACJ;AAAA,IACJ;AAAA,IACA,kBAAkB;AACd,UAAI,CAAC,KAAK,gBAAgB;AACtB,aAAK,UAAU;AAAA,MACnB;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,WAAW,OAAO;AACd,YAAM,EAAE,aAAa,IAAI;AACzB,UAAI,cAAc;AACd,cAAM,SAAS,CAAC;AAChB,mBAAW,OAAO,OAAO;AACrB,cAAI,aAAa,GAAG,GAAG;AACnB,mBAAO,GAAG,IAAI,MAAM,GAAG;AAAA,UAC3B;AAAA,QACJ;AACA,gBAAQ;AAAA,MACZ;AACA,aAAO;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,cAAc;AAAA,IAAC;AAAA,EACvB,GA1ZI,cADqBA,KACd,SAAQ,UACf,cAFqBA,KAEd,gBAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsBlB,UAAW;AAAA,MACP,OAAU;AAAA,MACV,SAAU;AAAA,QACN,OAAQ;AAAA,MACZ;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAwBA,gBAAiB;AAAA,MACb,SAAU;AAAA,QACN,OAAQ;AAAA,MACZ;AAAA,MACA,OAAQ,CAAC,aAAa;AAAA,IAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAiBA,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAaV,eAAgB;AAAA,EACpB,IACA,cA1FqBA,KA0Fd,uBAAsB;AAAA,IACzB,gBAAiB;AAAA,IACjB,mBAAoB;AAAA,EACxB,IA7FqBA;AAAA;;;AC9HzB,IAEI,WAAe,aAAa,eAAe,YAAY,oBAAoB,uBAAO,OAAO,IAAI,CAAC;AAFlG,IAGI,UAAe;AAAA,EACX,QAAS;AAAA,EACT,QAAS;AACb;AAQJ,IAAO,uBAAQ,YAAU,MAAM,sBAAsB,UAAU,MAAM;AAAA,EACjE,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EACA,WAAW,aAAa;AACpB,WAAO;AAAA,MACH;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,WAAW,eAAe;AACtB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWH,IAAK;AAAA,IACT;AAAA,EACJ;AAAA,EACA,OAAO,kBAAkB,KAAK,MAAM;AAChC,UAAM,EAAE,aAAa,IAAI;AACzB,iBAAa,QAAQ,uBAAO,OAAO,IAAI;AACvC,YAAQ,eAAe,KAAK,gBAAgB;AAAA,MACxC,MAAM;AACF,eAAO;AAAA,MACX;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,YAAY;AACR,SAAK,YAAY,mBAAmB,IAAI;AACxC,UAAM,UAAU;AAAA,EACpB;AAAA,EACA,SAAS,IAAI;AACT,YAAS,KAAK,iBAAkC,CAAC,MAAO,KAAK,eAAe,IAAI;AAAA,EACpF;AAAA,EACA,SAAS,IAAI,OAAO;AAChB,UACI,KAAK,MACL,IAAI,GAAG;AACX,aAAS,EAAE,mBAAmB,IAAI,KAAK;AACvC,QAAI,CAAC,GAAG,kBAAkB,EAAE,aAAa,wBAAwB,OAAO;AACpE,QAAE,iBAAiB,IAAI,EAAE;AAAA,IAC7B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,iBAAiB;AACb,WAAO,KAAK,YAAY,WAAW,KAAK,KAAK,OAAO,YAAY,CAAC,GAAG;AAAA,EACxE;AAAA,EACA,WAAW,MAAM;AAEb,WAAO,OAAO,OAAO,KAAK,aAAa,KAAK;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,WAAW,SAAS,eAAe;AAGtC,WAAO,UAAU,SAAS,MAAM,KAAK,SAAS,MAAM,KAAK,KAAK;AAAA,EAClE;AAAA,EACA,OAAO,iBAAiB,UAAU,aAAa,SAAS,IAAI;AACxD,UAAM,EAAE,MAAM,IAAI,KAAK;AAEvB,QAAI,cAAc,SAAS,CAAC,KAAK,cAAc;AAC3C,YAAM,IAAI,MAAM,QAAQ,aAAa,iBAAiB;AAAA,IAC1D;AACA,UAAM,UAAU,IAAI;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,mBAAmB,UAAU,KAAK,SAAS,IAAI;AAClD,UAAM,EAAE,MAAM,IAAI,KAAK;AAEvB,QAAI,QAAQ,OAAO,QAAQ,GAAG;AAC1B,aAAO,MAAM,QAAQ;AAAA,IACzB,WAGS,MAAM,EAAE,MAAM,UAAU;AAC7B,aAAO,MAAM,EAAE;AAAA,IACnB;AAAA,EACJ;AAAA,EACA,OAAO,QAAQ,IAAI;AACf,UAAM,QAAQ,KAAK,aAAa;AAChC,QAAI,OAAO;AACP,aAAO,MAAM,EAAE;AAAA,IACnB;AAAA,EACJ;AAAA,EACA,WAAW,sBAAsB;AAC7B,UAAM,QAAQ,KAAK,aAAa;AAChC,WAAO,QAAQ,OAAO,OAAO,KAAK,IAAI,CAAC;AAAA,EAC3C;AACJ;;;ACzHA,IACI,WAAmB,OAAO,UAAU;AADxC,IAEI,mBAAmB;AAAA;AAAA;AAAA,EAGf,aAAc;AAAA;AAAA;AAAA,EAGd,oBAAqB;AACzB;AAMJ,IAAO,mBAAQ,YAAU,MAAM,kBAAkB,UAAU,MAAM;AAAA,EAC7D,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EACA,WAAW,gBAAgB;AACvB,WAAO;AAAA,MACH,KAAM;AAAA,IACV;AAAA,EACJ;AAAA,EACA,UAAU,OAAO;AAGb,QAAI,CAAC,KAAK,KAAK;AACX,WAAK,MAAM,MAAM;AAAA,IACrB;AAAA,EACJ;AAAA,EACA,YAAY,OAAO,cAAc,OAAO;AAnC5C,QAAAC;AAoCQ,QAAI,KAAK,QAAQ,MAAM,KAAK;AACxB,WAAK,MAAM;AAAA,IACf;AACA,KAAAA,MAAA,MAAM,gBAAN,gBAAAA,IAAA,WAAoB,OAAO;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,MAAM;AACN,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EACA,IAAI,IAAI,KAAK;AACT,SAAK,QAAQ,IAAI;AAAA,EACrB;AAAA;AAAA;AAAA,EAGA,qBAAqB,WAAW,OAAO;AAtD3C,QAAAA;AAuDQ,UAAM,KAAK;AACX,QAAI,CAAC,GAAG,eAAaA,MAAA,GAAG,QAAH,gBAAAA,IAAQ,YAAW,CAAC,iBAAiB,SAAS,KAAK,CAAC,GAAG,YAAY,qBAAqB,SAAS,GAAG;AAErH,UAAI,GAAG,mBAAmB,SAAS,GAAG;AAClC,eAAO,EAAE,CAAC,SAAS,GAAI,EAAE,OAAO,UAAW,GAAG,SAAS,EAAE,EAAE;AAAA,MAC/D;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA,EAGA,oBAAoB,WAAW,OAAO,QAAQ;AAC1C,cAAU,KAAK,SAAS,WAAW,OAAO,OAAO,OAAO,QAAQ,IAAI;AAAA,EACxE;AAAA,EACA,wBAAwB,WAAW,UAAU,UAAU;AACnD,UAAM,QAAQ,KAAK;AAOnB,WAAO,EACH,KAAK,YAAY,qBAAqB,SAAS,KAC9C,YAAY,QAAQ,YAAY,QAChC,aAAa,YACZ,oBAAoB,QAAU,oBAAoB,QAAS,SAAS,QAAQ,MAAM,SAAS,QAAQ,KACrG,cAAc,QACd,cAAc,gBACb,cAAc,cAAc,SAAS,MAAM,SAAS,QAAQ,MAAM,MAAM,QAAQ,QAAQ;AAAA,EAEjG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,SAAS,OAAO,OAAO,QAAQ,oBAAoB,QAAQ,kBAAkB;AACzE,UACI,EAAE,IAAI,IAAiB,MACvB,uBAAuB,KAAK,YAAY;AAC5C,SAAI,2BAAK,WAAU,IAAI,WAAW,CAAC,iBAAiB,KAAK,KAAK,CAAC,qBAAqB,KAAK,GAAG;AACxF,UAAI,QAAQ;AACR,YAAI;AACJ,cAAM,CAAC,SAAS,OAAO,IAAI,OAAO,KAAK,MAAM,EAAE;AAAA,UAC3C,CAAC,MAAM,cAAc;AACjB,kBAAM,EAAE,OAAAC,QAAO,SAAS,IAAI,OAAO,SAAS;AAC5C,gBAAI,KAAK,wBAAwB,WAAW,UAAUA,MAAK,GAAG;AAC1D,6BAAqB;AACrB,mBAAK,CAAC,EAAE,SAAS,IAAIA;AACrB,mBAAK,CAAC,EAAE,SAAS,IAAI;AAAA,YACzB;AACA,mBAAO;AAAA,UACX;AAAA,UACA,CAAC,CAAC,GAAG,CAAC,CAAC;AAAA,QACX;AACA,YAAI,cAAc;AACd,cAAI,cAAc,MAAM,SAAS,SAAS,gBAAgB;AAAA,QAC9D;AAAA,MACJ;AAAA,IACJ;AAAA,EAGJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,kBAAkB,cAAc;AAtIpC,QAAAD;AAuIQ,UACI,cAAYA,MAAA,MAAM,sBAAN,gBAAAA,IAAA,WAA0B,kBAAiB,CAAC,GACxD,EAAE,IAAI,IAAM;AAChB,QAAI,2BAAK,SAAS;AACd,gBAAU;AAAA,QACN,aAAa,OAAO,CAAC,QAAQ,gBAAgB;AAKzC,cAAI,YAAY,SAAS,KAAK,MAAM;AAChC,mBAAO,IAAI,aAAa;AAAA,cACpB,QAAS,YAAY;AAAA,cACrB,OAAS,YAAY,SAAS,YAAY,cAAc;AAAA,YAC5D,CAAC;AAAA,UACL;AACA,iBAAO;AAAA,QACX,GAAG,oBAAI,IAAI,CAAC;AAAA,MAChB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,iBAAiB,OAAO,cAAc,cAAc,UAAU,mBAAmB;AApKrF,QAAAA;AAqKQ,UAAM,EAAE,IAAI,IAAI;AAChB,QAAI,2BAAK,SAAS;AACd,YAAM,UAAU,aAAa,IAAI;AACjC,UAAI,UAAU;AACV,YAAI,mBAAmB,MAAM,OAAO,UAAU,SAAS,iBAAiB;AAAA,MAC5E;AAAA,IACJ;AACA,KAAAA,MAAA,MAAM,qBAAN,gBAAAA,IAAA,WAAyB,OAAO,cAAc,cAAc;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,kBAAkB,cAAc,QAAQ;AACpC,UACI,YAAY,MAAM,oBAAoB,MAAM,kBAAkB,cAAc,MAAM,IAAI,CAAC,GACvF,EAAE,IAAI,IAAM;AAEhB,SAAI,2BAAK,YAAW,CAAC,QAAQ;AAKzB,gBAAU;AAAA,QACN,aAAa,OAAO,CAAC,QAAQ,gBAAgB;AACzC,iBAAO,IAAI,aAAa,EAAE,aAAc,YAAY,aAAa,oBAAqB,YAAY,mBAAmB,CAAC;AACtH,iBAAO;AAAA,QACX,GAAG,oBAAI,IAAI,CAAC;AAAA,MAChB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,iBAAiB,cAAc,cAAc,QAAQ;AArNzD,QAAAA;AAsNQ,UAAM,EAAE,IAAI,IAAI;AAEhB,SAAI,2BAAK,YAAW,CAAC,QAAQ;AACzB,YAAM,UAAU,aAAa,IAAI;AACjC,UAAI,gBAAgB,aAAa,QAAQ;AACrC,YAAI,mBAAmB,MAAM,cAAc,OAAO;AAAA,MACtD;AAAA,IACJ;AACA,KAAAA,MAAA,MAAM,qBAAN,gBAAAA,IAAA,WAAyB,cAAc,cAAc;AAAA,EACzD;AACJ;;;AC3NA,IACI,yBAAyB;AAAA,EACrB,2BAA4B;AAChC;AAHJ,IAII,qBAAyB,aAAW;AAChC,YAAU,WAAW;AACrB,MAAI,OAAO,YAAY,WAAW;AAC9B,cAAU;AAAA,MACN,2BAA4B;AAAA,IAChC;AAAA,EACJ;AACA,SAAO,WAAW;AACtB;AAmBJ,IAAO,mBAAQ,YAAU,MAAM,kBAAkB,UAAU,MAAM;AAAA,EAC7D,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;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,EA0BA,WAAW,yBAAyB,OAAO;AACvC,QAAI,UAAU,MAAM;AAChB,cAAQ;AAAA,QACJ,QAAW;AAAA,QACX,UAAW;AAAA,MACf;AAAA,IACJ,WACS,UAAU,OAAO;AACtB,cAAQ;AAAA,QACJ,QAAW;AAAA,QACX,UAAW;AAAA,MACf;AAAA,IACJ;AACA,SAAK,4BAA4B;AAAA,EACrC;AAAA,EACA,eAAe,MAAM;AACjB,UAAM,GAAG,IAAI;AACb,QAAI,KAAK,UAAU;AACf,WAAK,kBAAkB,KAAK,mBAAmB,CAAC;AAAA,IACpD;AAAA,EACJ;AAAA,EACA,WAAW,2BAA2B;AAClC,WAAO,KAAK,6BAA6B,EAAE,QAAS,OAAO,UAAW,MAAM;AAAA,EAChF;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,EAiCA,eAAe,aAAaE,UAAS,KAAK,QAAQ;AAC9C,UACI,EAAE,mBAAmB,aAAc,QAAQ,IAAI,MAC/C,QAA+CA,WAAA,gBAAAA,QAAS;AAC5D,QAAI,gBAAgB,MAAM;AACtB,UAAI,mBAAmB;AACnB,eAAO;AAAA,MACX;AACA,aAAO,CAAC;AAAA,IACZ;AACA,QAAI,aAAa;AACb,oBAAc,YAAY,QAAQ,WAAW;AAC7C,YACI,MAAS,YAAY,QACrB,SAAS,CAAC;AACd,eAAS,IAAI,GAAG,OAAO,IAAI,KAAK,KAAK;AACjC,gBAAQ,YAAY,CAAC;AACrB,gBAAQ,MAAM,UAAU,QAAS,QAAQ,MAAM,aAAa,OAAO,OAAO,IAAI,IAAI,IAAI,QAAQ,OAAO,MAAM,MAAM,IAAI;AACrH,gBAAQ,QAAQ,MAAM,cAAc,KAAK,IAAI;AAC7C,eAAO,KAAK,KAAK;AAAA,MACrB;AACA,UAAI,KAAK,aAAa,QAAQ,OAAO;AACjC,cAAM,SAAS,MAAM,eAAe,MAAM,OAAO;AACjD,eAAO,KAAK,MAAM;AAAA,MACtB;AACA,aAAO;AAAA,IACX;AAAA,EACJ;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,EA8BA,gBAAgBA,UAAS,KAAK,QAAQ;AAClC,UACI,KAAW,MACX,EAAE,KAAK,IAAI;AACf,OAAG,oBAAoB;AACvB,UAAM,WAAW,GAAG,eAAe,GAAG,KAAK,GAAG,YAAY,aAAa,GAAGA,OAAM;AAChF,QAAI,UAAU;AACV,YACI,EAAE,yBAAyB,IAAI,GAAG,aAClC,gBAA+B,6BAA6B,QAAQ,yBAAyB;AACjG,UAAI,gBAAgB,SAAS,SAAS,MAAM,QAAQ,QAAQ,GAAG;AAC3D,aAAK,SAAS;AAEd,YAAI,GAAG,aAAa,MAAM;AACtB,aAAG,WAAW,CAAC;AAAA,QACnB,WACS,SAAS,WAAW,GAAG;AAC5B,aAAG,WAAW;AACd;AAAA,QACJ;AACA,WAAG,YAAY,QAAQ;AAAA,MAC3B,WAES,aAAa,MAAM;AACxB,aAAK,SAAS;AACd,WAAG,WAAW;AAAA,MAClB,WAES,CAAC,GAAG,QAAQ;AACjB,aAAK,SAAS,GAAG,YAAY,yBAAyB;AAAA,MAC1D;AAAA,IACJ;AACA,OAAG,oBAAoB;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,kBAAkB,QAAQ,KAAK,YAAY;AACvC,UAAM,EAAE,OAAO,IAAI;AACnB,WAAO,CAAC,UAAW,OAAO,WAAW,KAAK,KAAK,OAAO,kBAAkB,KAAK;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,QAAQ,KAAK,YAAY;AAChC,UAAM,UAAU,KAAK,aAAa,MAAM,EAAE;AAG1C,QAAI,CAAC,OAAO,UAAU,eAAe,KAAK,SAAS,WAAW,GAAG;AAC7D,cAAQ,YAAY,CAAC,KAAK;AAAA,IAC9B;AACA,WAAO,CAAC,QAAQ;AAAA,EACpB;AAAA;AAAA;AAAA,EAGA,IAAI,WAAW;AACX,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,aAAa;AACb,QAAI,OAAO,MACP,MAAO;AACX,WAAO,QAAQ,CAAC,KAAK,QAAQ;AACzB,QAAE;AACF,aAAO,KAAK;AAAA,IAChB;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,SAAS;AACT,WAAO,KAAK,KAAK,WAAW,SAAS,CAAC,KAAK;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,IAAI,WAAW;AACX,WAAO,CAAC,KAAK;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,WAAW;AACX,WAAO,KAAK,YAAY,MAAM,QAAQ,KAAK,QAAQ;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,kBAAkB;AAClB,WAAO,KAAK,mBAAmB;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,yBAAyB;AACzB,WAAO,KAAK,mBAAmB,IAAI;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,mBAAmB,cAAc,OAAO,QAAQ,KAAK,YAAY;AAC7D,UAAM,EAAE,SAAS,IAAI;AACrB,QAAI,CAAC,YAAY,CAAC,MAAM,QAAQ,QAAQ,KAAM,eAAe,CAAC,KAAK,WAAW,KAAK,GAAI;AACnF,aAAO;AAAA,IACX;AACA,WAAO,SAAS,OAAO,CAAC,OAAO,UAAU,QAAQ,MAAM,mBAAmB,WAAW,GAAG,SAAS,MAAM;AAAA,EAC3G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,cAAc;AACd,WAAO,KAAK,eAAe,KAAK;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,wBAAwB;AACxB,WAAO,KAAK,eAAe,IAAI;AAAA,EACnC;AAAA,EACA,eAAe,aAAa,OAAO;AAC/B,UAAM,EAAE,CAAC,aAAa,uBAAuB,UAAU,GAAG,SAAS,IAAI;AACvE,QAAI,CAAC,YAAY,aAAa,MAAM;AAChC,aAAO,CAAC;AAAA,IACZ;AACA,WAAO,SAAS,OAAO,CAAC,KAAK,UAAU;AACnC,UAAI,KAAK,KAAK;AAGd,UAAI,KAAK,MAAM,KAAK,aAAa,MAAM,wBAAwB,MAAM,WAAW;AAChF,aAAO;AAAA,IACX,GAAG,CAAC,CAAC;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,aAAa;AACb,UAAM,EAAE,SAAS,IAAI;AACrB,YAAQ,qCAAU,WAAU,SAAS,CAAC,KAAM;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,YAAY;AACZ,UAAM,EAAE,SAAS,IAAI;AACrB,YAAQ,qCAAU,WAAU,SAAS,SAAS,SAAS,CAAC,KAAM;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,IAAI,6BAA6B;AAC7B,QAAI,OAAQ,KAAK,iBACb,QAAQ,KAAK;AACjB,WAAO,MAAM;AACT,eAAS,KAAK;AACd,aAAO,KAAK;AAAA,IAChB;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,yBAAyB;AAtZjC,QAAAC,KAAA;AAuZQ,YAAO,MAAAA,MAAA,KAAK,WAAL,gBAAAA,IAAa,gBAAgB,KAAK,qBAAqB,OAAvD,YAA6D;AAAA,EACxE;AAAA,EACA,IAAI,qBAAqB;AAzZ7B,QAAAA,KAAA;AA0ZQ,YAAO,MAAAA,MAAA,KAAK,WAAL,gBAAAA,IAAa,gBAAgB,KAAK,qBAAqB,OAAvD,YAA6D;AAAA,EACxE;AAAA,EACA,IAAI,OAAO;AA5Zf,QAAAA;AA6ZQ,aAAOA,MAAA,KAAK,WAAL,gBAAAA,IAAa,SAAQ;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,IAAI,WAAW;AACX,WAAO,KAAK,UAAU,CAAC,KAAK,OAAO,aAAa,KAAK,OAAO,KAAK;AAAA,EACrE;AAAA,EACA,IAAI,SAAS,UAAU;AACnB,UACI,KAAa,MACb,EAAE,OAAO,IAAI,IACb,YAAa,aAAa,OAAO,GAAG,WAAW,WAAW,GAAG,WAAW,QAAQ,QAAQ;AAG5F,QAAI,EAAE,cAAc,UAAW,CAAC,UAAU,CAAC,YAAa;AAGpD,UAAI,GAAG,iBAAiB;AACpB,WAAG,KAAK,aAAa,WAAW;AAAA,MACpC,OACK;AACD,YAAI,WAAW;AACX,oBAAU,YAAY,EAAE;AAAA,QAC5B,OACK;AACD,aAAG,OAAO,YAAY,EAAE;AAAA,QAC5B;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,WAAW,cAAc,eAAe;AAIpC,SAAK,iBAAiB;AACtB,WAAO,eAAe,KAAK,WAAW,eAAe;AAAA,MACjD,KAAM,SAAS,UAAU;AAGrB,aAAK,WAAW;AAAA,MACpB;AAAA,MACA,KAAM,WAAW;AAGb,eAAO,KAAK;AAAA,MAChB;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,WAAW,gBAAgB;AACvB,WAAO,KAAK,kBAAkB;AAAA,EAClC;AAAA,EACA,YAAY,SAAS;AACjB,QAAI;AACJ,QAAI,QAAQ,2BAA2B;AACnC,eAAS,KAAK,sBAAsB,KAAK;AAAA,IAC7C,WACS,QAAQ,gBAAgB;AAC7B,eAAS,KAAK;AAAA,IAClB,OACK;AACD,eAAS,KAAK;AAAA,IAClB;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,SAASC,KAAI,UAAU,SAAS;AAC5B,cAAU,mBAAmB,OAAO;AACpC,UACI,KAAW,MACX,WAAW,GAAG,YAAY,OAAO;AACrC,QAAI,CAAC,UAAU;AACX,MAAAA,IAAG,KAAK,IAAI,EAAE;AAAA,IAClB;AAGA,aAAS,IAAI,GAAG,IAAI,qCAAU,QAAQ,IAAI,GAAG,KAAK;AAC9C,eAAS,CAAC,EAAE,SAASA,KAAI,OAAO,OAAO;AAAA,IAC3C;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,eAAeA,KAAI,UAAU,SAAS;AAClC,cAAU,mBAAmB,OAAO;AACpC,UACI,KAAW,MACX,WAAW,GAAG,YAAY,OAAO;AAGrC,aAAS,IAAI,GAAG,IAAI,qCAAU,QAAQ,IAAI,GAAG,KAAK;AAC9C,eAAS,CAAC,EAAE,SAASA,KAAI,OAAO,OAAO;AAAA,IAC3C;AACA,QAAI,CAAC,UAAU;AACX,MAAAA,IAAG,KAAK,IAAI,EAAE;AAAA,IAClB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,cAAcA,KAAI,UAAU,SAAS;AACjC,cAAU,mBAAmB,OAAO;AACpC,UAAM,KAAK;AACX,QAAI,OAAO,YAAYA,IAAG,KAAK,IAAI,EAAE,MAAM;AAC3C,QAAI,MAAM;AACN,YAAM,WAAW,GAAG,YAAY,OAAO;AAGvC,UAAI,qCAAU,QAAQ;AAClB,eAAO,SAAS,MAAM,WAAS,MAAM,cAAcA,KAAI,OAAO,OAAO,CAAC;AAAA,MAC1E;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAOA,KAAI,WAAW,OAAO;AACzB,QAAI,KAAK;AACT,QAAI,CAAC,UAAU;AACX,MAAAA,IAAG,KAAK,IAAI,EAAE;AAAA,IAClB;AACA,WAAO,GAAG,QAAQ;AACd,WAAK,GAAG;AACR,MAAAA,IAAG,KAAK,IAAI,EAAE;AAAA,IAClB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,YAAYA,KAAI,WAAW,OAAO;AAC9B,QAAI,KAAO,MACP,OAAO;AACX,QAAI,CAAC,UAAU;AACX,aAAOA,IAAG,KAAK,IAAI,EAAE;AAAA,IACzB;AACA,WAAO,QAAQ,GAAG,QAAQ;AACtB,WAAO,GAAG;AACV,aAAOA,IAAG,KAAK,IAAI,EAAE;AAAA,IACzB;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,SAAS,WAAW,WAAW,OAAO;AAClC,QAAI,aAAa,OAAO,cAAc,UAAU;AAC5C,kBAAY,UAAU;AAAA,IAC1B;AACA,WAAO,CAAC,KAAK,cAAc,UAAQ,KAAK,MAAM,WAAW,QAAQ;AAAA,EACrE;AAAA,EACA,aAAa,KAAK;AACd,QAAI;AACJ,QAAI,KAAK;AACL,eAAS,CAAC;AACV,WAAK,YAAY,CAAC,MAAM;AACpB,eAAO,KAAK,CAAC;AACb,eAAO,EAAE,UAAU,CAAC,EAAE,OAAO;AAAA,MACjC,CAAC;AAAA,IACL,OACK;AACD,eAAS;AACT,WAAK,YAAY,CAAC,MAAM;AACpB,iBAAS;AACT,eAAO,EAAE,UAAU,CAAC,EAAE,OAAO;AAAA,MACjC,CAAC;AAAA,IACL;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAY,aAAa,SAAS,OAAO,UAAU,CAAC,GAAG;AACnD,WAAO,KAAK,YAAY,aAAa,MAAM,QAAQ,OAAO;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,YAAY,aAAa,SAAS,MAAM,SAAS,OAAO,UAAU,CAAC,GAAG;AA1oB1E,QAAAD,KAAA;AA2oBQ,UACI,KAAc,MACd,cAAc,MAAM,QAAQ,WAAW;AAC3C,kBAAc,YAAY,QAAQ,WAAW;AAC7C,QAAI,OAAO,WAAW,UAAU;AAC5B,gBAAS,MAAAA,MAAA,GAAG,aAAH,gBAAAA,IAAc,YAAd,YAAyB;AAAA,IACtC;AACA,QAAI,CAAC,YAAU,QAAG,WAAH,mBAAW,MAAM,OAAK,EAAE,QAAQ,aAAa;AAAA,MACxD,SAAU;AAAA,MAAa,QAAS;AAAA,IACpC,CAAC,MAAM,YAAW,OAAO;AACrB,aAAO;AAAA,IACX;AAEA,kBAAc,GAAG,eAAe,WAAW;AAE3C,UACI,SAAY,4CAAQ,gBAAR,aAAuB,QAAG,aAAH,mBAAa,WAApC,YAA8C,GAC1D,aAAY,QAAG,sBAAH,4BAAuB,cACnC,WAAY,GAAG,qBAAqB,aAAa,QAAQ,QAAQ,OAAO;AAE5E,QAAI,SAAS,QAAQ;AACjB,SAAG,gBAAgB,MAAM;AAAA,IAC7B;AACA,aAAG,qBAAH,4BAAsB,OAAO,aAAa,WAAW,UAAU,QAAQ;AACvE,WAAQ,eAAe,CAAC,WAAY,WAAW,SAAS,CAAC;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAgB,SAAS,OAAO;AAC5B,UACI,KAAU,MACV,UAAU,GAAG;AACjB,OAAG,KAAK,SAAS;AACjB,QAAI,CAAC,GAAG,UAAU;AACd,SAAG,WAAW,CAAC;AAAA,IACnB;AAGA,QAAI,WAAW,CAAC,GAAG,KAAK,aAAa,CAAC,QAAQ;AAC1C,SAAG,kBAAkB;AAAA,QACjB,QAAS;AAAA,UACL,OAAW;AAAA,UACX,UAAW;AAAA,QACf;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EACA,kBAAkB,SAASD,UAAS,KAAK,QAAQ;AAC7C,IAAAA,WAAA,gBAAAA,QAAQ,QAAQ,OAAK;AACjB,QAAE,QAAQ,UAAU,EAAE,QAAS,MAAM,SAAU,CAAC,IAAI,GAAG,QAAQ,CAAC;AAChE,QAAE,QAAQ,UAAU,EAAE,QAAS,UAAU,QAAS,MAAM,SAAU,CAAC,IAAI,GAAG,QAAQ,CAAC;AAAA,IACvF;AAAA,EACJ;AAAA,EACA,iBAAiB;AACb,WAAO,KAAK,YAAY,GAAG,SAAS;AAAA,EACxC;AAAA,EACA,qBAAqB,iBAAiB,cAAc,QAAQ,SAAS;AACjE,UACI,KAA6B,MAC7B,EAAE,QAAAA,SAAQ,MAAM,SAAS,IAAI,IAC7B,EAAE,YAAa,UAAU,IAAI,MAC7B,EAAE,cAAc,IAAa,GAAG,aAChC,WAA6B,GAAG;AACpC,QAAI,QAAQ,OAAO,GAAG,kBAAkB,kBAAkB;AAC1D,QAAI,CAAC,KAAK,aAAa,WAAW;AAE9B,eAAS,CAAC;AACV,yBAAmB,CAAC;AACpB,WAAK,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK;AACzC,cAAM,YAAY,gBAAgB,CAAC;AAGnC,eAAO,UAAU,EAAE,IAAI,UAAU,SAAS;AAC1C,yBAAiB,CAAC,IAAK,UAAU;AAAA,MACrC;AAAA,IACJ;AAEA,QAAI,gBAAgB,aAAa,WAAW,IAAI;AAC5C,qBAAe;AAAA,IACnB;AAGA,QAAI,UAAU;AACV,YAAM,WAAW,eAAe,aAAa,cAAc,SAAS;AACpE,UAAI,SAAS,QAAQ,QAAQ,MAAM,gBAAgB,CAAC,KAAK,SAAS,QAAQ,WAAW,CAAC,MAAM,gBAAgB,CAAC,GAAG;AAC5G,aAAK,SAAS,MAAM,IAAI,GAAG,UAAU,IAAI,gBAAgB,QAAQ,KAAK;AAClE,cAAI,gBAAgB,CAAC,MAAM,SAAS,QAAQ,CAAC,GAAG;AAC5C,qBAAS;AAAA,UACb;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAGA,QAAI,QAAQ;AACR,aAAO;AAAA,IACX;AAEA,SAAK,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK;AACzC,YACI,YAAY,gBAAgB,CAAC,GAC7B,YAAY,UAAU;AAE1B,UAAI,aAAa,CAAC,KAAK,WAAW;AAC9B,kBAAU,SAAS,OAAK;AACpB,cAAI,EAAE,SAAS,MAAM;AACjB,mBAAO,EAAE,EAAE,IAAI;AAAA,UACnB;AAAA,QACJ,CAAC;AAAA,MACL;AACA,YACI,uBAAuB,QAAQ,iCAAS,UAAU,GAAG,GACrD,oBAAuB,cAAc,MAAM;AAK/C,WAAI,uCAAW,YAAY,WAAW,sBAAsB,QAAQ;AAAA,QAChE,aAAkB;AAAA;AAAA;AAAA,QAGlB,iBAAkB;AAAA,QAClB,GAAG;AAAA,MACP,QAAO,OAAO;AACV,YAAI,CAAC,kBAAkB;AACnB,4BAAmB,gBAAgB,MAAM;AACzC,6BAAmB;AAAA,QACvB;AACA,wBAAgB,OAAO,KAAK,CAAC;AAAA,MACjC,OACK;AACD,kBAAU,SAAS;AAEnB,kBAAU,KAAK,aAAa,IAAI;AAChC,cAAM,EAAE,KAAK,IAAI;AAMjB,YAAI,KAAK,SAAS,aAAa,MAAM,YAAY,CAAC,WAAW;AACzD,eAAK,cAAc;AAAA,QACvB;AACA,YAAI,WAAW;AACX,eAAK,cAAc,UAAU;AAAA,QACjC;AAAA,MACJ;AAAA,IACJ;AAEA,QAAI,gBAAgB,QAAQ;AACxB,UAAI,CAAC,MAAM,QAAQ,QAAQ,GAAG;AAC1B,WAAG,WAAW,CAAC;AAAA,MACnB;AACA,UAAI,CAAC,MAAM,QAAQ,GAAG,eAAe,GAAG;AACpC,WAAG,kBAAkB,CAAC;AAAA,MAC1B;AAEA,YAAM,WAAW,GAAG,cAAc,cAAc,iBAAiB,OAAO;AACxE,MAAAA,WAAA,gBAAAA,QAAQ,QAAQ,WAAS;AAErB,YAAI,CAAC,MAAM,WAAW;AAClB,0BAAgB;AAAA,YAAQ;AAAA;AAAA,cAEpB,OAAO,UAAU,KAAK;AAAA;AAAA,UAC1B;AAEA,gBAAM,eAAe,IAAI,iBAAiB,UAAU,QAAQ,MAAM;AAClE,0BAAgB,QAAQ,CAAC,QAAQG,OAAM;AAInC,gBAAI,OAAO,KAAK,eAAe,QAAQ,EAAE,GAAG,qBAAqB,GAAG,YAAY;AAC5E,oBACI,QAA4B;AAAA,gBACxB,CAAC,aAAa,GAAsB;AAAA,gBACpC,CAAC,GAAG,cAAc,aAAa,CAAC,GAAI,OAAO;AAAA,cAC/C,GACA,SAA4B,CAAC,GAC7B,EAAE,UAAU,YAAY,IAAI,OAAO,MACnC,iBAA4B,iBAAiBA,EAAC;AAClD,qBAAO,OAAO,KAAK;AACnB,kBAAI,GAAG,OAAO,aAAa;AACvB,uBAAO,aAAa,IAAI;AAAA,kBACpB,OAAW;AAAA,kBACX,UAAW;AAAA,gBACf;AAAA,cACJ;AACA,kBAAI,OAAO,gBAAgB,gBAAgB;AACvC,uBAAO,cAAc;AAAA,kBACjB,OAAW,OAAO;AAAA,kBAClB,UAAW;AAAA,gBACf;AAAA,cACJ;AAEA,kBAAI,SAAS,aAAa,MAAM,GAAG,IAAI;AACnC,wBAAQ,eAAe,UAAU,aAAa;AAAA,cAClD,WAES,EAAE,iBAAiB,WAAW;AACnC,yBAAS,aAAa,IAAI;AAAA,cAC9B;AACA,kBAAI,OAAO,OAAO,EAAE,GAAG;AACnB,sBAAM,YAAY,MAAM,QAAQ,WAAW;AAG3C,oBAAI,UAAU,UAAU,CAAC,QAAQ;AAC7B,4BAAU,kBAAkB;AAAA,oBACxB,QAAS;AAAA,sBACL,OAAW;AAAA,sBACX,UAAW;AAAA,oBACf;AAAA,kBACJ,GAAG,CAAC,KAAK,CAAC;AAAA,gBACd;AAAA,cACJ;AACA,qBAAO,YAAY,OAAO,MAAM;AAAA,YACpC;AAEA,mBAAO,SAAS,UAAQ;AACpB,kBAAI,CAAC,KAAK,aAAa,CAAC,KAAK,UAAU;AACnC,sBAAM,2BAA2B,IAAI;AAAA,cACzC;AAAA,YACJ,CAAC;AAAA,UACL,CAAC;AAAA,QACL;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,YAAY,cAAc,SAAS,OAAO,SAAS,OAAO,UAAU,CAAC,GAAG;AA73B5E,QAAAF,KAAA;AA83BQ,UACI,KAAoB,MACpB,oBAAoB,CAAC,GACrB,UAAoB,GAAG,QACvB;AAAA,MACI;AAAA,MACA,QAAAD;AAAA,IACJ,IAAoB;AACxB,mBAAe,YAAY,QAAQ,YAAY;AAC/C,mBAAe,aAAa,OAAO,OAAK,EAAE,WAAW,EAAE;AACvD,QAAI,CAAC,UAAUA,SAAQ;AAEnB,iBAAW,SAASA,SAAQ;AACxB,YAAI,CAAC,MAAM,aAAa,MAAM,QAAQ,gBAAgB;AAAA,UAClD,QAAS;AAAA,UAAI,SAAU;AAAA,UAAc;AAAA,QACzC,CAAC,MAAM,OAAO;AACV,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AACA,UAAM,aAAYC,MAAA,GAAG,sBAAH,gBAAAA,IAAA,SAAuB,cAAc;AACvD,eAAW,eAAe,cAAc;AACpC,YACI,EAAE,cAAc,IAAI,YAAY,aAChC,EAAE,SAAS,IAAS,YAAY,MAChC,cAAoB,YAAY,SAAS,YAAY,OAAO,KAAK;AAErE,UAAI,EAAE,iBAAiB,aAAa,CAAC,YAAY,UAAU;AACvD,iBAAS,aAAa,IAAI;AAAA,MAC9B;AACA,YAAM,QAAQ,GAAG,mBAAmB,aAAa,OAAO;AACxD,MAAAD,WAAA,gBAAAA,QAAQ,QAAQ,WAAS;AACrB,YAAI,CAAC,MAAM,WAAW;AAClB,gBAAM,EAAE,WAAW,IAAI;AAEvB,gBAAM,aAAa;AACnB,4BAAkB,KAAK,GAAG,MAAM,kBAAkB,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,QAAQ,OAAO,CAAC,CAAC;AAE/F,gBAAM,aAAa;AAAA,QACvB;AAAA,MACJ;AAEA,UAAI,CAAC,QAAQ;AACT,oBAAY,SAAS,YAAY,cAAc,YAAY,kBAAkB,YAAY,cAAc,YAAY,kBAAkB;AAErI,oBAAY,KAAK,aAAa,IAAI;AAAA,MACtC;AAAA,IACJ;AAEA,SAAK,GAAG,sBAAsB,UAAU,WAAW,KAAK,GAAG,YAAY,yBAAyB,YAAY,CAAC,GAAG,QAAQ;AACpH,SAAG,KAAK,SAAS;AAAA,IACrB;AAGA,QAAI,GAAG,WAAW,WAAW,CAAC,UAAU,CAAC,QAAQ;AAC7C,SAAG,kBAAkB;AAAA,QACjB,QAAS;AAAA,UACL,OAAW;AAAA,UACX,UAAW;AAAA,QACf;AAAA,MACJ,CAAC;AAAA,IACL;AACA,aAAG,qBAAH,4BAAsB,cAAc,WAAW;AAC/C,WAAO;AAAA,EACX;AAAA,EACA,gBAAgB;AACZ,UAAM,KAAK;AACX,YAAQ,eAAe,GAAG,MAAM,GAAG,aAAa;AAChD,YAAQ,eAAe,GAAG,cAAc,GAAG,aAAa;AACxD,QAAI,GAAG,KAAK,UAAU;AAClB,cAAQ,eAAe,GAAG,KAAK,UAAU,GAAG,aAAa;AAAA,IAC7D;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAgB,aAAa;AACzB,SAAK,cAAc;AACnB,SAAK,KAAK,KAAK,YAAY,aAAa,IAAI;AAC5C,SAAK,gBAAgB;AACrB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAc,SAAS,OAAO;AAC1B,UACI,KAAa,MACb,EAAE,QAAAA,QAAO,IAAI,IACb,WAAa,GAAG,sBAAsB,GAAG;AAC7C,OAAG,WAAkB,CAAC;AACtB,OAAG,kBAAkB,CAAC;AACtB,QAAI,YAAY,aAAa,MAAM;AAC/B,MAAAA,QAAO,QAAQ,WAAS;AACpB,YAAI,CAAC,MAAM,WAAW;AAElB,gBAAM,kBAAkB,IAAI,UAAU,GAAG,EAAE,YAAa,MAAM,OAAO,CAAC;AAAA,QAC1E;AAAA,MACJ,CAAC;AAED,UAAI,GAAG,oBAAoB;AACvB,WAAG,qBAAqB,CAAC;AAAA,MAC7B;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ;AAj/BZ,QAAAC;AAk/BQ,UACI,KAAa,MACb,EAAE,QAAAD,QAAO,IAAI,IACb,YAAcC,MAAA,GAAG,sBAAsB,GAAG,aAA5B,gBAAAA,IAAuC;AAEzD,QAAI,CAAC,GAAG,UAAU,CAAC,UAAU;AACzB;AAAA,IACJ;AACA,eAAW,SAASD,SAAQ;AACxB,UAAI,CAAC,MAAM,WAAW;AAClB,YAAI,MAAM,QAAQ,gBAAgB;AAAA,UAC9B,QAAS;AAAA,UAAI,SAAU;AAAA,UAAU,QAAS;AAAA,UAAO,aAAc;AAAA,QACnE,CAAC,MAAM,OAAO;AACV,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AACA,OAAG,SAAS,SAAS,GAAG,gBAAgB,SAAS;AACjD,QAAI,GAAG,oBAAoB;AACvB,SAAG,mBAAmB,SAAS;AAAA,IACnC;AACA,IAAAA,QAAO,QAAQ,WAAS;AACpB,eAAS,QAAQ,WAAS;AACtB,YAAI,MAAM,OAAO,SAAS,KAAK,GAAG;AAE9B,gBAAM,YAAY,KAAK;AAAA,QAC3B;AACA,cAAM,SAAS,MAAM,cAAc,MAAM,cAAc,MAAM,kBAAkB;AAAA,MACnF,CAAC;AACD,YAAM,QAAQ,cAAc;AAC5B,YAAM,QAAQ,MAAM;AACpB,YAAM,QAAQ,aAAa;AAC3B,YAAM,MAAM,MAAM;AAClB,YAAM,SAAS,MAAM;AACrB,YAAM,QAAQ,WAAW;AACzB,YAAM,QAAQ,UAAU,EAAE,QAAS,YAAY,CAAC;AAAA,IACpD,CAAC;AAAA,EACL;AAAA,EACA,sBAAsB,UAAU,WAAW,SAAS,OAAO;AACvD,QAAI,kBAAkB;AACtB,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACtC,YACI,QAAW,SAAS,CAAC,GACrB,WAAW,MAAM,SAAS;AAC9B,UAAI,cAAc,iBAAiB,cAAc,sBAAsB;AAEnE,YAAI,aAAa,UAAa,QAAQ;AAClC,gBAAM,QAAQ,WAAW,CAAC;AAAA,QAC9B,WAES,aAAa,GAAG;AAErB,gBAAM,IAAI,WAAW,GAAG,IAAI;AAAA,QAChC;AAAA,MACJ,OACK;AACD,cAAM,SAAS,IAAI;AAAA,MACvB;AACA,UAAI,cAAc,eAAe;AAC7B,cAAM,kBAAkB;AACxB,YAAI,iBAAiB;AACjB,0BAAgB,cAAc;AAAA,QAClC;AAEA,YAAI,MAAM,SAAS,SAAS,GAAG;AAC3B,gBAAM,cAAc;AAAA,QACxB;AACA,0BAAkB;AAAA,MACtB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,cAAc,cAAc,YAAY,UAAU,CAAC,GAAG;AAzjC1D,QAAAC;AA6jCQ,UACI,KAAU,MACV,UAAU;AAAA,MACN,CAAC,GAAG,UAAU,eAAe,YAAY;AAAA,MACzC,CAAC,GAAG,oBAAoB,mBAAmB,YAAY;AAAA,MACvD;AAAA,QACI,GAAG;AAAA,QACH;AAAA;AAAA,SAEA,mCAAS,uBAAsB,UAC3B,mCAAS,wBAAuB,SAC1B,GAAG,gBAAgB,mCAAS,kBAAkB,IAC9C,eACN,mCAAS;AAAA,MACjB;AAAA,IACJ;AACJ,eAAW,UAAU,SAAS;AAC1B,YAAM,CAAC,UAAU,WAAWG,aAAY,IAAI;AAC5C,UAAI,UAAU;AAIV,YAAI;AACJ,YAAIA,eAAc;AACd,kBAAQ,SAAS,QAAQA,aAAY;AACrC,cAAI,UAAU,IAAI;AACd,oBAAQ,SAAS;AAAA,UACrB;AAAA,QACJ,OACK;AACD,kBAAQ,SAAS;AAAA,QACrB;AACA,eAAO,KAAK,KAAK;AACjB,iBAAS,OAAO,OAAO,GAAG,GAAG,UAAU;AACvC,YAAI,GAAE,mCAAS,sBAAmBH,MAAA,mCAAU,eAAV,gBAAAA,IAAsB,QAAO;AAC3D,aAAG,sBAAsB,UAAU,SAAS;AAAA,QAChD;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO,QAAQ,CAAC,EAAE,CAAC;AAAA,EACvB;AAAA,EACA,mBAAmB,aAAa,SAAS;AAvmC7C,QAAAA;AAwmCQ,UAAM,UAAU;AAAA,MACZ,CAAC,KAAK,UAAU,aAAa;AAAA,MAC7B,CAAC,KAAK,oBAAoB,iBAAiB;AAAA,MAC3C,CAAC,KAAK,iBAAiB,oBAAoB;AAAA,IAC/C;AACA,eAAW,UAAU,SAAS;AAC1B,YAAM,CAAC,UAAU,SAAS,IAAI;AAC9B,UAAI,UAAU;AAIV,cAAM,QAAQ,SAAS,QAAQ,WAAW;AAC1C,eAAO,KAAK,KAAK;AACjB,YAAI,QAAQ,IAAI;AACZ,mBAAS,OAAO,OAAO,CAAC;AACxB,cAAI,GAAE,mCAAS,sBAAmBA,MAAA,mCAAU,eAAV,gBAAAA,IAAsB,QAAO;AAC3D,iBAAK,sBAAsB,UAAU,SAAS;AAAA,UAClD;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO,QAAQ,CAAC,EAAE,CAAC;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,oBAAoB,OAAO,MAAM,mBAAmB,OAAO;AAEvD,UAAM,aAAa,CAAC;AACpB,QAAI,CAAC,KAAK,QAAQ;AACd,WAAK,gBAAgB,KAAK,CAAC,GAAG,MAAM;AA7oChD,YAAAA,KAAA;AA8oCgB,YAAI,kBAAkB;AAClB,gBACI,cAAaA,MAAA,EAAE,KAAK,SAAS,uBAAhB,OAAAA,MAAsC,EAAE,oBACrD,cAAa,OAAE,KAAK,SAAS,uBAAhB,YAAsC,EAAE,oBACrD,SAAa,aAAa;AAC9B,cAAI,WAAW,GAAG;AACd,uBAAW,KAAK,CAAC;AACjB,uBAAW,KAAK,CAAC;AAAA,UACrB;AACA,iBAAO;AAAA,QACX,OACK;AACD,iBAAO,EAAE,qBAAqB,EAAE;AAAA,QACpC;AAAA,MACJ,CAAC;AACD,UAAI,MAAM;AACN,aAAK,gBAAgB,QAAQ,WAAS;AAClC,qBAAW,KAAK,GAAG,MAAM,oBAAoB,MAAM,gBAAgB,CAAC;AAAA,QACxE,CAAC;AAAA,MACL;AACA,WAAK,sBAAsB,KAAK,iBAAiB,sBAAsB,IAAI;AAAA,IAC/E;AACA,WAAO,IAAI,IAAI,UAAU;AAAA,EAC7B;AAAA,EACA,oBAAoB,OAAO,MAAM,UAAU;AACvC,UAAM,KAAK;AACX,QAAI,CAAC,GAAG,QAAQ;AACZ,SAAG,SAAS,KAAK,QAAQ;AACzB,UAAI,MAAM;AACN,WAAG,gBAAgB,QAAQ,WAAS,MAAM,oBAAoB,MAAM,QAAQ,CAAC;AAAA,MACjF;AACA,SAAG,sBAAsB,GAAG,UAAU,eAAe,IAAI;AAAA,IAC7D;AAAA,EACJ;AAAA,EACA,uBAAuB,OAAO,MAAM,UAAU;AAC1C,UAAM,KAAK;AACX,QAAI,CAAC,GAAG,UAAU,GAAG,oBAAoB;AACrC,SAAG,mBAAmB,KAAK,QAAQ;AACnC,UAAI,MAAM;AACN,WAAG,gBAAgB,QAAQ,WAAS,MAAM,uBAAuB,MAAM,QAAQ,CAAC;AAAA,MACpF;AACA,SAAG,sBAAsB,GAAG,oBAAoB,mBAAmB,IAAI;AAAA,IAC3E;AAAA,EACJ;AAAA,EACA,YAAY,OAAO,cAAc,OAAO;AA1rC5C,QAAAA;AA2rCQ,UAAM,KAAK;AAEX,QAAI,GAAG,oBAAoB;AACvB,SAAG,WAAW,GAAG,mBAAmB,MAAM;AAC1C,SAAG,qBAAqB;AAAA,IAC5B;AACA,KAAAA,MAAA,MAAM,gBAAN,gBAAAA,IAAA,WAAoB,OAAO;AAAA,EAC/B;AACJ;;;AC7rCA,IAEI,oBAAoB;AAAA,EAChB,IAAkB;AAAA,EAClB,QAAkB;AAAA,EAClB,aAAkB;AAAA,EAClB,QAAkB;AAAA,EAClB,iBAAkB;AAAA,EAClB,aAAkB;AAAA,EAClB,iBAAkB;AACtB;AAVJ,IAWI,cAAc;AAAA,EACV,IAAI,QAAQ,MAAM;AAEd,QAAI,SAAS,aAAa;AACtB,aAAO,KAAK;AAAA,IAChB;AAGA,QAAI,SAAS,eAAe;AACxB,aAAO,OAAO;AAAA,IAClB;AAEA,QAAI,SAAS,WAAW;AACpB,aAAO,KAAK;AAAA,IAChB;AACA,QAAI,SAAS,OAAO;AAChB,aAAO,KAAK;AAAA,IAChB;AAEA,QAAI,kBAAkB,IAAI,GAAG;AACzB,aAAO,KAAK,UAAU,KAAK,IAAI;AAAA,IACnC;AAEA,WAAO,QAAQ,IAAI,QAAQ,MAAM,KAAK,WAAW;AAAA,EACrD;AAAA,EACA,IAAI,QAAQ,MAAM,OAAO;AAErB,QAAI,kBAAkB,IAAI,GAAG;AACzB,WAAK,UAAU,KAAK,IAAI,IAAI;AAAA,IAChC,OAEK;AACD,aAAO,IAAI,IAAI;AAAA,IACnB;AACA,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,gBAAgB,OAAO,OAAO;AAC1B,QAAI,UAAU,eAAe;AACzB,WAAK,UAAU,KAAK,cAAc;AAAA,IACtC,OACK;AACD,WAAK,UAAU,eAAe,QAAQ,OAAO,KAAK;AAAA,IACtD;AAAA,EACJ;AAAA,EACA,YAAY,OAAO,UAAU,MAAM;AAC/B,QAAI,UAAU,eAAe;AACzB,WAAK,UAAU,KAAK,cAAc;AAAA,IACtC,OACK;AACD,WAAK,UAAU,eAAe,IAAI,OAAO,OAAO,GAAG,IAAI;AAAA,IAC3D;AAAA,EACJ;AACJ;AASJ,IAAO,oBAAQ,YAAO;AA/EtB,MAAAI;AA+EyB,SAAAA,MAAA,eAAyB,UAAU,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAuB9D,OAAO;AAEH,UAAI,KAAK,UAAU;AACf,eAAO,KAAK,UAAU,KAAK;AAAA,MAC/B;AACA,YACI,KAAe,MACf,YAAgB;AAAA,QACZ,GAAG;AAAA;AAAA,QAEH,WAAY;AAAA,UACR,gBAAiB;AAAA,UACjB,MAAiB;AAAA,YACb,IAAS,GAAG,GAAG,EAAE,SAAS,aAAa,aAAa,CAAC;AAAA,YACrD,QAAS,CAAC;AAAA,UACd;AAAA,QACJ;AAAA,MACJ,GACA,cAAc,IAAI,MAAM,IAAI,SAAS;AACzC,gBAAU,cAAc;AAExB,OAAC,GAAG,KAAK,kBAAkB,GAAG,KAAK,gBAAgB,CAAC,IAAI,KAAK,WAAW;AACxE,aAAO;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,IAAI,WAAW;AApInB,UAAAA;AAqIQ,aAAO,SAAQA,MAAA,KAAK,cAAL,gBAAAA,IAAgB,cAAc;AAAA,IACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,IAAI,WAAW;AACX,aAAO,QAAQ,CAAC,KAAK,aAAa,KAAK,OAAO,MAAM;AAAA,IACxD;AAAA;AAAA,IAEA,WAAW,MAAM,UAAU,MAAM,SAAS,OAAO;AAE7C,UAAI,KAAK,UAAU;AACf,mBAAW,UAAU,KAAK,OAAO,MAAM,GAAG;AAEtC,cAAI,SAAS;AACT,wBAAY,QAAQ,SAAS,MAAM;AAAA,UACvC,OAEK;AACD,mBAAO,OAAO,MAAM;AAAA,UACxB;AAAA,QACJ;AAAA,MACJ,WAES,KAAK,UAAU;AACpB,oBAAY,OAAO,KAAK,UAAU,QAAQ,IAAI;AAAA,MAClD;AAAA,IACJ;AAAA;AAAA,IAEA,aAAa,SAAS;AAClB,WAAK,WAAW,MAAM,OAAO;AAAA,IACjC;AAAA;AAAA;AAAA,IAGA,YAAY,cAAc,QAAQ,QAAQ,SAAS;AAC/C,UAAI,EAAC,mCAAS,cAAa;AACvB,uBAAe,YAAY,QAAQ,YAAY;AAC/C,mBAAW,SAAS,cAAc;AAC9B,eAAK,WAAW,OAAO,MAAM,MAAM;AAAA,QACvC;AAAA,MACJ;AACA,aAAO,MAAM,YAAY,cAAc,QAAQ,QAAQ,OAAO;AAAA,IAClE;AAAA;AAAA,IAEA,IAAI,cAAc;AACd,aAAO,KAAK,UAAU;AAAA,IAC1B;AAAA;AAAA,IAEA,IAAI,SAAS;AAxLjB,UAAAA;AAyLQ,cAAOA,MAAA,KAAK,KAAK,kBAAV,OAAAA,MAA2B,CAAC;AAAA,IACvC;AAAA,EACJ,GA3GI,cADqBA,KACd,SAAQ,cACf,cAFqBA,KAEd,WAAU,OAFIA;AAAA;;;ACzEzB,IACI,EAAE,gBAAAC,gBAAe,IAAI;AADzB,IAEI,cAAqB,OAAO,OAAO;AAFvC,IAGI,cAAqB;AAwDzB,IAAO,sBAAQ,YAAU,MAAM,qBAAqB,UAAU,MAAM;AAAA,EAChE,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EACA,WAAW,aAAa;AACpB,WAAO;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,MA6BH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,SAAS,MAAM,KAAK,UAAU,WAAW,mBAAmB;AAG/D,UACI,EAAE,YAAY,IAAW,KAAK,UAAU,GACxC,EAAE,UAAU,UAAAC,UAAS,IAAI,aACzB,QAAyB,aAAa,MAAM,MAAM,WAAW;AACjE,aAAS,OAAO,MAAM,IAAI,GAAG,IAAI,MAAM,QAAQ,EAAE,GAAG;AAChD,aAAO,MAAM,CAAC;AACd,cAAQ,WAAW,KAAK,YAAY,IAAI;AACxC,UAAI,CAAC,WAAW,SAASA,WAAU;AAC/B,cAAM,IAAI,MAAM,SAAS,IAAI,6BAA6B,YAAY,MAAM,IAAI,UAAU;AAAA,MAC9F;AAEA,MAAAA,UAAS,IAAI,IAAIA,UAAS,KAAK,IAAI,IAAI,UAAU;AAAA,IACrD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,IAAI,UAAU,MAAM;AACvB,WAAO,KAAK,OAAO,UAAU,MAAM,IAAI;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,OAAO,UAAU,MAAM,MAAM;AAChC,UACI,EAAE,YAAY,IAAW,MACzB,EAAE,UAAU,UAAAA,UAAS,IAAI,aACzB,UAAyBA,UAAS,WAAW,KAAK,YAAY,IAAI,IAAI;AAE1E,QAAI,SAAS;AACT,UAAI,MAAM;AACN,eAAO,oBAAoB;AAAA,MAC/B;AACA,aAAO,SAAS,gBAAgB;AAAA,IACpC;AACA,WAAO;AAAA,EACX;AAAA,EACA,OAAO,WAAW,KAAK;AACnB,QAAI,SAAS,IAAI,OAAO,GAAG;AAAA,EAC/B;AAAA,EACA,OAAO,iBAAiB,KAAK,MAAM;AAC/B,UAAM,aAAa,KAAK,MAAM;AAC9B,QAAI,EAAE,YAAY,IAAI;AACtB,kBAAc;AAAA,MACV,UAAc;AAAA,MACd,aAAc;AAAA,MACd,SAAc,WAAW,cAAc,CAAC,UAAU,IAAI;AAAA,MACtD,SAAc;AAAA,MACd,GAAG;AAAA,IACP;AACA,gBAAY,QAAQ;AACpB,gBAAY,WAAW,uBAAO,OAAO,IAAI;AACzC,QAAI,YAAY,WAAW,CAAC,MAAM,QAAQ,YAAY,OAAO,GAAG;AAC5D,kBAAY,UAAU,CAAC,YAAY,OAAO;AAAA,IAC9C;AAEA,IAAAD,gBAAe,KAAK,eAAe;AAAA,MAC/B,MAAM;AACF,eAAO;AAAA,MACX;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,OAAO,UAAU,KAAK,MAAM;AACxB,UAAM,EAAE,KAAK,IAAI;AACjB,QAAI,SAAS,MAAM,KAAK,KAAK,WAAW;AAExC,IAAAA,gBAAe,IAAI,WAAW,QAAQ;AAAA,MAClC,OAAQ;AAAA,IACZ,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,OAAO,QAAQ,SAAS;AAC3B,WAAO,KAAK,YAAY,MAAM,QAAQ,OAAO;AAAA,EACjD;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,EA8CA,OAAO,YAAY,kBAAkB,QAAQ,SAAS;AAClD,UACI,KAAkB,MAClB,EAAE,YAAY,IAAI,IAClB,EAAE,QAAQ,IAAQ;AACtB,QAAI,cAAc,SACd,SAAS,UAAU,WAAW,OAAO,UAAU,OAAO,GAAG,WAAW;AAExE,QAAI,WAAW,CAAC,aAAa,QAAQ,OAAO,GAAG;AAC3C,oBAAc;AACd,UAAI,OAAO;AACX,UAAI,MAAM,YAAY;AAClB,gBAAQ;AAAA,MACZ,WACS,MAAM,UAAU;AACrB,sBAAc;AAAA,MAClB,WACS,aAAa,SAAS,OAAO,GAAG;AACrC,kBAAc,QAAQ;AACtB,mBAAc,QAAQ;AACtB,gBAAc,QAAQ;AACtB,gBAAc,QAAQ;AACtB,sBAAc,QAAQ;AACtB,oBAAc,QAAQ;AAAA,MAC1B,OACK;AACD,gBAAQ;AAAA,MACZ;AAAA,IACJ;AACA,QAAI,WAAW;AACX,eAAU,OAAO,cAAc,WAAY,MAAM,SAAS,EAAE,MAAM,IAAI,UAAU,MAAM;AAAA,IAC1F;AACA,WAAO;AAEP,QAAI,OAAO,SAAS,UAAU;AAC1B,eAAS,CAAC;AAAA,IACd,WACS,QAAQ;AACb,UAAI,WAAW,MAAM;AACjB,iBAAS,CAAC;AAAA,MACd;AACA,UAAI,CAAC,aAAa,SAAS,MAAM,GAAG;AAEhC,YAAI,SAAS,WAAW,qBAAoB,qDAAmB,kBAAiB,OAAO;AACnF,UAAC,OAAO,YAAY,WAAY,MAAM,OAAO,EAAE,gBAAgB,IAAI,mCAAU;AAC7E,2BAAiB,QAAQ;AAAA,QAC7B;AACA,eAAO;AAAA,MACX;AACA,aAAO,OAAO,OAAO;AAAA,IACzB;AACA,WAAO,QAAQ,GAAG,YAAY,IAAI;AAElC,QAAI,kBAAkB;AAGlB,UAAI,WAAW,CAAC,QAAQ,iBAAiB,gBAAgB,OAAO;AAC5D,YAAI,WAAW,QAAQ;AACnB,mBAAS,aAAa,OAAO,CAAC,GAAG,MAAM;AACvC,iBAAO,OAAO,OAAO;AAAA,QACzB;AACA,yBAAiB,UAAU,MAAM;AACjC,eAAO;AAAA,MACX;AACA,UAAI,SAAS,iBAAiB,WAAW,MAAM,OAAO;AAClD,QAAC,OAAO,YAAY,WAAY,MAAM,OAAO,EAAE,gBAAgB,IAAI,mCAAU;AAC7E,yBAAiB,QAAQ;AAAA,MAC7B;AAAA,IACJ;AACA,QAAI,QAAQ;AACR,UAAI,UAAU;AACV,YAAI,EAAE,YAAY,OAAO;AACrB,cAAI,EAAE,YAAY,SAAS,OAAO,KAAK,eAAe,YAAY,cAAc;AAC5E,kBAAM,IAAI,MAAM,oCAAoC,YAAY,MAAM,IAAI,UAAU;AAAA,UACxF;AACA,sBAAY,GAAG,YAAY,SAAS;AAAA,QACxC;AACA,YAAI,WAAW;AAEX,mBAAS,UAAU,aAAa,UAAU,MAAM;AAAA,QACpD;AAAA,MACJ;AACA,UAAI,OAAO;AACP,mBAAY,OAAO,UAAU,WAAY,MAAM,KAAK,EAAE,QAAQ,MAAM,QAAQ,IAAI,MAAM,QAAQ,MAAM,QAAQ;AAC5G,YAAI,aAAa,MAAM;AACnB,iBAAO;AAAA,QACX;AACA,iBAAS,YAAY;AAAA,MACzB;AACA,UAAI,CAAC,MAAM;AAEP,YAAI,EAAE,OAAO,OAAO,OAAO,KAAK,eAAe,YAAY,cAAc;AACrE,gBAAM,IAAI,MAAM,+BAA+B,YAAY,MAAM,IAAI,UAAU;AAAA,QACnF;AACA,eAAO,GAAG,YAAY,IAAI;AAAA,MAC9B;AACA,UAAI,YAAY,CAAC,WAAW;AACxB,iBAAS,KAAK,aAAa,UAAU,MAAM;AAAA,MAC/C;AACA,UAAI,WAAW,QAAQ;AACnB,iBAAS,aAAa,OAAO,CAAC,GAAG,MAAM;AACvC,eAAO,OAAO,OAAO;AAAA,MACzB;AACA,eAAS,IAAI,KAAK,MAAM;AACxB,UAAI,OAAO;AACP,eAAO,WAAW,IAAI;AAAA,MAC1B;AAAA,IACJ;AACA,WAAO,UAAU;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,YAAY,MAAM,UAAU;AAC/B,QAAI,OAAO,SAAS,UAAU;AAC1B,aAAO;AAAA,IACX;AACA,UACI,EAAE,YAAY,IAAI,MAClB,QAAkB,YAAY;AAClC,QAAI,SAAS,YAAY,SAAS,YAAY,WAAW,KAAK,YAAY,IAAI,IAAI,GAC9E;AACJ,SAAK,IAAI,GAAG,CAAC,UAAU,SAAS,IAAI,MAAM,QAAQ,EAAE,GAAG;AAEnD,eAAS,MAAM,CAAC,EAAE;AAAA,QAAY;AAAA;AAAA,QAAsB;AAAA,MAAI;AAAA,IAC5D;AACA,QAAI,CAAC,UAAU,CAAC,UAAU;AACtB,YAAM,IAAI,MAAM,sBAAsB,IAAI,eAAe,YAAY,MAAM,IAAI,UAAU;AAAA,IAC7F;AACA,WAAO;AAAA,EACX;AACJ;;;ACzYA,IAAM,EAAE,0BAAAE,0BAAyB,IAAI;AAuBrC,IAAqB,YAArB,cAAuC,KAAK,MAAM,mBAAW,EAAE;AAAA,EAC3D,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EACA,WAAW,OAAO;AACd,WAAO;AAAA,EACX;AAAA,EACA,WAAW,cAAc;AACrB,WAAO;AAAA,MACH,aAAc;AAAA,IAClB;AAAA,EACJ;AAAA,EACA,WAAW,sBAAsB;AAC7B,WAAO;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,MAsDH,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWV,cAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMf,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWb,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMd,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMX,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMX,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMZ,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMV,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUX,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOX,YAAa;AAAA,MACb,SAAU;AAAA,IACd;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,UAAU,QAAQ;AACd,UAAM,KAAK;AACX,QAAI,QAAQ;AACR,SAAG,OAAO,OAAO;AACjB,aAAO,OAAO,IAAI,MAAM;AAAA,IAC5B;AACA,QAAI,GAAG,SAAS;AAEZ,SAAG,eAAe,CAAC,OAAO,UAAU,GAAG,QAAQ,+BAAQ,GAAG,OAAO,+BAAQ,GAAG,KAAK;AAAA,IACrF;AAAA,EACJ;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,EAsDA,eAAe,QAAQ,OAAO;AAC1B,UAAM,EAAE,MAAM,WAAW,IAAI;AAE7B,QACI,CAAC,SACD,QAAQ,UACR,OAAO,MAAM,UAAU,KAAK,aAAQ;AApQhD,UAAAC;AAoQmD,eAAAA,MAAAD,0BAAyB,QAAQ,WAAW,IAAI,MAAhD,gBAAAC,IAAmD,gBAAe;AAAA,KAAK,GAChH;AACE;AAAA,IACJ;AACA,YAAQ,eAAe,QAAQ,MAAM;AAAA,MACjC,cAAe;AAAA;AAAA,MACf,YAAe;AAAA;AAAA,MAEf,KAAM,KAAK,iBACL,WAAW;AACT,eAAO,KAAK,WAAW,MAAM,UAAU;AAAA,MAC3C,IACE,WAAW;AAGT,YAAI,KAAK,YAAY,QAAQ,KAAK,KAAK,cAAc;AACjD,iBAAO,KAAK,KAAK,aAAa,IAAI;AAAA,QACtC;AACA,eAAO,KAAK,KAAK,UAAU;AAAA,MAC/B;AAAA;AAAA,MAEJ,IAAI,OAAO;AAGP,cAAM,QAAQ,KAAK,MAAM,OAAO,IAAI,IAAI;AAExC,YAAI,EAAE,SAAS,MAAM,WAAW;AAC5B,eAAK,IAAI,MAAM,KAAK;AAAA,QACxB;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,OAAO,QAAQ;AACnB,WAAO,aAAa,QAAQ,OAAO,MAAM;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAAO;AACT,WAAQ,SAAS,OAAQ,KAAK,WAAW,KAAK,WAAW,KAAK;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,OAAO;AACd,WAAO,OAAO,KAAK;AAAA,EACvB;AACJ;AACA,UAAU,SAAS;;;AC7PnB,IAAqB,iBAArB,cAA4C,UAAU;AAAA,EAGlD,QAAQ,GAAG,GAAG;AACV,WAAO,MAAM;AAAA,EACjB;AAAA,EACA,MAAM,QAAQ,OAAO;AACjB,WAAO,OAAO,IAAI,KAAK,IAAI,EAAE,KAAK;AAAA,EACtC;AACJ;AARI,cADiB,gBACV,SAAQ;AACf,cAFiB,gBAEV,QAAO;AAQlB,eAAe,UAAU;AACzB,eAAe,SAAS;;;ACpDxB,IAAqB,mBAArB,cAA8C,UAAU;AAAA,EAIpD,WAAW,sBAAsB;AAC7B,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMH,WAAY;AAAA,IAChB;AAAA,EACJ;AAAA,EACA,QAAQ,OAAO,QAAQ;AACnB,QAAI,SAAS,QAAQ,UAAU,MAAM;AACjC,aAAO;AAAA,IACX;AACA,WAAO,MAAM,QAAQ,OAAO,MAAM;AAAA,EACtC;AAAA,EACA,QAAQ,OAAO;AA9CnB,QAAAC;AA+CQ,QAAI,SAAS,MAAM;AACf,aAAO,KAAK,WAAW,QAAQ,KAAK;AAAA,IACxC;AAEA,UAAIA,MAAA,MAAM,gBAAN,gBAAAA,IAAA,iBAA0B,SAAS;AACnC,aAAO;AAAA,IACX;AACA,WAAO,QAAQ,KAAK;AAAA,EACxB;AACJ;AA7BI,cADiB,kBACV,SAAQ;AACf,cAFiB,kBAEV,QAAO;AACd,cAHiB,kBAGV,SAAQ;AA4BnB,iBAAiB,UAAU;AAC3B,iBAAiB,SAAS;;;AC7B1B,IAAqB,gBAArB,cAA2C,UAAU;AAAA,EACjD,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EACA,WAAW,OAAO;AACd,WAAO;AAAA,EACX;AAAA,EACA,WAAW,sBAAsB;AAC7B,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQH,QAAS;AAAA,IACb;AAAA,EACJ;AAAA,EACA,QAAQ,OAAO;AACX,QAAI,SAAS,MAAM;AACf,UAAI,CAAC,KAAK,UAAU;AAChB,gBAAQ,KAAK;AAAA,MACjB;AAAA,IACJ,WACS,UAAU,OAAO;AACtB,cAAQ,oBAAI,KAAK;AAAA,IACrB,WACS,EAAE,iBAAiB,OAAO;AAE/B,cAAQ,WAAW,MAAM,OAAO,KAAK,UAAU,WAAW,kBAAkB;AAG5E,UAAI,CAAC,SAAS,MAAM,KAAK,GAAG;AACxB,gBAAQ;AAAA,MACZ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,UAAU,OAAO;AACb,QAAI,iBAAiB,MAAM;AAEvB,cAAQ,WAAW,OAAO,OAAO,KAAK,UAAU,WAAW,aAAa;AAAA,IAC5E;AACA,WAAO;AAAA,EACX;AAAA,EACA,WAAW,OAAO;AACd,WAAO,WAAW,OAAO,OAAO,KAAK,UAAU,WAAW,aAAa;AAAA,EAC3E;AACJ;AACA,cAAc,UAAU;AACxB,cAAc,SAAS;;;ACxDvB,IAAqB,kBAArB,cAA6C,UAAU;AAAA,EACnD,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EACA,WAAW,OAAO;AACd,WAAO;AAAA,EACX;AAAA,EACA,WAAW,sBAAsB;AAC7B,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMH,WAAY;AAAA,IAChB;AAAA,EACJ;AAAA,EACA,QAAQ,OAAO;AACX,WAAQ,SAAS,OAAS,KAAK,WAAW,QAAQ,KAAK,YAAa,OAAO,KAAK;AAAA,EACpF;AACJ;AACA,gBAAgB,UAAU;AAC1B,gBAAgB,SAAS;;;ACxBzB,IAAqB,wBAArB,cAAmD,gBAAgB;AAAA,EAC/D,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EACA,WAAW,OAAO;AACd,WAAO;AAAA,EACX;AAAA,EACA,QAAQ,OAAO,QAAQ;AACnB,WAAO,WAAW,aAAa,OAAO,MAAM,MAAM;AAAA,EACtD;AACJ;AACA,sBAAsB,UAAU;AAChC,sBAAsB,SAAS;;;ACP/B,IAAqB,mBAArB,cAA8C,UAAU;AAAA,EAIpD,WAAW,sBAAsB;AAC7B,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMH,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMZ,UAAW;AAAA,IACf;AAAA,EACJ;AAAA,EACA,QAAQ,OAAO;AACX,WAAQ,SAAS,OAAS,KAAK,WAAW,QAAQ,KAAK,YAAa,KAAK,KAAK,QAAQ,EAAE,OAAO,KAAK,CAAC;AAAA,EACzG;AACJ;AAtBI,cADiB,kBACV,SAAQ;AACf,cAFiB,kBAEV,QAAO;AACd,cAHiB,kBAGV,SAAQ;AAqBnB,iBAAiB,UAAU;AAC3B,iBAAiB,SAAS;;;AC7B1B,IAAqB,iBAArB,cAA4C,UAAU;AAAA,EAClD,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EACA,WAAW,OAAO;AACd,WAAO;AAAA,EACX;AAAA,EAaA,WAAW,sBAAsB;AAC7B,WAAO;AAAA,MACH,gBAAiB;AAAA,IACrB;AAAA,EACJ;AAAA,EACA,QAAQ,OAAO,QAAQ;AAEnB,WAAQ,SAAS,UAAY,kBAAkB,MAAM,eAAgB,OAAO,MAAM,MAAM;AAAA,EAC5F;AACJ;AArBI,cAPiB,gBAOV,gBAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUlB,YAAa;AACjB;AAWJ,eAAe,UAAU;AACzB,eAAe,SAAS;;;AC3BxB,IAAqB,kBAArB,cAA6C,UAAU;AAAA,EAInD,WAAW,sBAAsB;AAC7B,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMH,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOZ,WAAY;AAAA,IAChB;AAAA,EACJ;AAAA,EACA,QAAQ,OAAO,QAAQ;AAGnB,WAAQ,MAAM,OAAO,KAAK,CAAC,KAAK,MAAM,OAAO,MAAM,CAAC,KAAM,MAAM,QAAQ,OAAO,MAAM;AAAA,EACzF;AAAA,EACA,QAAQ,OAAO;AACX,QAAI,SAAS,MAAM;AACf,aAAO,KAAK,WAAW,QAAQ,KAAK;AAAA,IACxC;AACA,YAAQ,OAAO,KAAK;AAEpB,QAAI,MAAM,KAAK,GAAG;AACd;AAAA,IACJ;AACA,QAAI,QAAQ,KAAK;AACjB,QAAI,OAAO;AACP,cAAQ,MAAM;AACd,cAAQ,KAAK,MAAM,QAAQ,KAAK,IAAI;AAAA,IACxC,WACS,UAAU,GAAG;AAClB,cAAQ,KAAK,MAAM,KAAK;AAAA,IAC5B;AACA,WAAO;AAAA,EACX;AACJ;AA5CI,cADiB,iBACV,SAAQ;AACf,cAFiB,iBAEV,QAAO;AACd,cAHiB,iBAGV,SAAQ;AA2CnB,gBAAgB,UAAU;AAC1B,gBAAgB,SAAS;;;ACnBzB,IAAqB,kBAArB,cAA6C,UAAU;AAAA,EACnD,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EACA,WAAW,OAAO;AACd,WAAO;AAAA,EACX;AAAA,EACA,WAAW,sBAAsB;AAC7B,WAAO;AAAA,MACH,gBAAiB;AAAA,IACrB;AAAA,EACJ;AACJ;AACA,gBAAgB,UAAU;AAC1B,gBAAgB,SAAS;;;AC9DzB,IAAM,oBAAoB,QAAM,OAAO,OAAO,YAAY,GAAG,WAAW,YAAY;AA4DpF,IAAqB,iBAArB,cAA4C,UAAU;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,EA6DlD,KAAK,MAAM,QAAQ;AA/HvB,QAAAC;AAgIQ,UACI,KAAY,MACZ,YAAY,GAAG,GAAG,IAAI,SACtB,SAAY,EAAE,WAAY,MAAM,gBAAiB,KAAK;AAC1D,QAAI,GAAG,OAAO;AACV,mBAAa,OAAO,QAAQ,GAAG,KAAK;AAAA,IACxC;AAEA,QAAI,GAAG,YAAY;AACf,aAAO,aAAa,GAAG;AAAA,IAC3B;AAGA,KAAAA,MAAA,OAAO,OAAO,aAAa,WAAW,SAAS,CAAC,QAAhD,gBAAAA,IAAA,aAAsD;AACtD,QAAI,CAAC,OAAO,cAAc,CAAC,GAAG,YAAY;AACtC,YAAM,IAAI,MAAM,UAAU,GAAG,IAAI,uDAAuD;AAAA,IAC5F;AAEA,UAAM,QAAQ,OAAO,KAAK,SAAS,IAAI,KAAK,OAAO,cAAc,GAAG,YAAY,MAAM;AACtF,QAAI,GAAG,gBAAgB;AACnB,mBAAa,QAAQ,MAAM,GAAG,YAAY,KAAK;AAAA,IACnD,OACK;AACD,WAAK,GAAG,UAAU,IAAI;AAAA,IAC1B;AAEA,UAAM,uBAAuB;AAE7B,UAAM,SAAS,CAAC,MAAM,SAAS,CAAC,MAAM,MAAM,CAAAC,YAAUA,QAAO,cAAc;AAE3E,UAAM,gBAAgB,GAAG,SAAS,KAAK;AAGvC,UAAM,IAAI;AAAA,MACN,QAAS,CAAC,EAAE,OAAO,MAAM;AACrB,cAAM,QAAQ,GAAG,SAAS,KAAK;AAC/B,YAAI,CAAC,MAAM,0BAA0B;AACjC,gBAAM,4BAA4B,MAAM;AACxC,gBAAM,0BAA0B,GAAG,aAC/B,WAAW,YAAY,WAAW,YAAY,WAAW;AAE7D,aAAG,oBAAoB;AACvB,iBAAO,IAAI,GAAG,MAAM,KAAK;AACzB,aAAG,oBAAoB;AACvB,gBAAM,0BAA0B;AAAA,QACpC;AAEA,cAAM,gBAAgB;AAAA,MAC1B;AAAA,IACJ,CAAC;AAAA,EACL;AAAA;AAAA,EAEA,IAAI,OAAO,MAAM,QAAQ;AApL7B,QAAAD,KAAA;AAqLQ,UACI,KAAY,MACZ,YAAY,GAAG,GAAG,IAAI,SACtB,EAAE,CAAC,SAAS,GAAI,MAAM,IAAI,OAAO;AAGrC,QAAI,CAAC,OAAO;AAGR,aAAO,KAAK,eAAe,IAAI,IAAI,KAAK;AACxC,aAAO;AAAA,IACX;AAEA,QAAI,MAAM,0BAA0B;AAChC;AAAA,IACJ;AACA,UAAM,2BAA2B;AAGjC,aAAQ,MAAAA,MAAA,OAAO,UAAU,aAAa,WAAW,SAAS,CAAC,YAAnD,gBAAAA,IAAA,aAA6D,OAAO,YAApE,YAA+E;AAEvF,QAAI,CAAC,MAAM,yBAAyB;AAChC,YAAM,OAAO;AAAA,IACjB;AACA,UAAM,2BAA2B;AAEjC,UAAM,SAAS,CAAC,MAAM,SAAS,CAAC,MAAM,MAAM,CAAAC,YAAUA,QAAO,cAAc;AAAA,EAC/E;AAAA,EACA,UAAU,OAAO,QAAQ;AACrB,UAAM,QAAQ,OAAO,KAAK,GAAG,KAAK,IAAI,OAAO;AAC7C,WAAO,KAAK,oBAAoB,KAAK,SAAS,KAAK,IAAI,MAAM;AAAA,EACjE;AAAA;AAAA,EAEA,SAAS,OAAO;AACZ,WAAO,MAAM,WAAW,IAAI,OAAK;AAC7B,YAAM,OAAO,EAAE;AACf,UAAI,CAAC,MAAM,QAAQ;AACf,eAAO,KAAK;AAAA,MAChB;AACA,aAAO;AAAA,IACX,CAAC;AAAA,EACL;AAAA,EACA,QAAQ,GAAG,GAAG;AACV,QAAI,KAAK,QAAQ,KAAK,MAAM;AACxB,aAAO;AAAA,IACX,WACS,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,MAAM;AACvD,aAAO;AAAA,IACX,OAEK;AACD,UAAI,EAAE,WAAW,EAAE,SAAS;AACxB,eAAO,aAAa,cAAc,EAAE,eAAe,EAAE,aAAa;AAAA,MACtE,WACS,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,SAAS;AACzD,eAAO,aAAa,QAAQ,GAAG,GAAG,IAAI;AAAA,MAC1C,OACK;AAED,cACI,QAAQ,EAAE,UAAU,IAAI,GACxB,aAAa,MAAM,YACnB,SAAS,WAAW,MAAM,OAAO,MACjC,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAC/C,eAAe,EAAE,UAAU,IAAI;AACnC,YAAI,aAAa,WAAW,aAAa,QAAQ;AAC7C,iBAAO;AAAA,QACX,OACK;AACD,mBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,kBAAM,QAAQ,OAAO,CAAC;AACtB,gBAAI,CAAC,MAAM,SAAS;AAChB;AAAA,YACJ;AACA,qBAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC1C,oBAAM,aAAa,aAAa,CAAC,EAAE,MAAM,UAAU;AACnD,oBAAM,aAAa,aAAa,CAAC,EAAE,MAAM,UAAU;AAEnD,kBAAI,eAAe,UAAa,eAAe,QAAW;AAEtD,oBAAI,MAAM,eAAe,WAAW,WAAW,kBAAkB,UAAU,GAAG;AAC1E;AAAA,gBACJ;AAIA,oBAAI,MAAM,iBAAiB,UAAa,aAAa,QAAQ,MAAM,cAAc,YAAY,IAAI,GAAG;AAChG;AAAA,gBACJ;AAAA,cACJ;AACA,kBAAI,CAAC,aAAa,QAAQ,YAAY,YAAY,IAAI,GAAG;AACrD,uBAAO;AAAA,cACX;AAAA,YACJ;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA,EAEA,YAAY,QAAQ;AAChB,UAAM,QAAQ,OAAO,KAAK,GAAG,KAAK,IAAI,OAAO;AAC7C,WAAO,QAAQ,aAAa,MAAM,MAAM,aAAa,IAAI;AAAA,EAC7D;AAAA,EACA,MAAM,QAAQ,OAAO;AACjB,UAAM,QAAQ,OAAO,KAAK,GAAG,KAAK,IAAI,OAAO;AAC7C,WAAO,+BAAO,MAAM;AAAA,EACxB;AACJ;AA/NI,cADiB,gBACV,SAAQ;AACf,cAFiB,gBAEV,QAAO;AA+NlB,eAAe,UAAU;AACzB,eAAe,SAAS;;;AC9QxB,IACI,WAAW,IAAI,OAAO,cAAc;AADxC,IAEI,UAAW;AAgCf,IACI,EAAE,gBAAAC,gBAAe,IAAI;AADzB,IAEI,EAAE,QAAAC,QAAO,IAAY;AAFzB,IAGI,aAAqB;AAHzB,IAII,gBAAqB;AAAA,EACjB,UAAW;AAAA,EACX,MAAW;AAAA,EACX,MAAW;AACf;AARJ,IASI,qBAAqB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAfJ,IAgBI,iBAAiB;AAAA,EACb,SAAU;AAAA,EACV,QAAU;AAAA,EACV,MAAU;AAAA,EACV,QAAU;AACd;AArBJ,IAsBI,cAAc;AAAA,EACV,UAAa;AAAA,EACb,YAAa;AAAA,EACb,IAAa;AACjB;AA2ZJ,IAAqB,SAArB,MAAqB,eAAc,KAAK,MAAM,kBAAU,kBAAU,iBAAS,EAAE;AAAA,EACzE,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EACA,WAAW,aAAa;AACpB,WAAO;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,MAoCH;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,WAAW,SAAS;AAChB,WAAO;AAAA;AAAA,MAEH;AAAA,QACI,MAAW;AAAA,QACX,MAAW;AAAA,QACX,SAAW;AAAA,QACX,UAAW;AAAA,MACf;AAAA;AAAA,MAEA;AAAA,QACI,MAAW;AAAA,QACX,MAAW;AAAA,QACX,SAAW;AAAA,QACX,UAAW;AAAA,MACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA;AAAA,QACI,MAAO;AAAA,QACP,MAAO;AAAA,MACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA;AAAA,QACI,MAAW;AAAA,QACX,UAAW;AAAA,MACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA;AAAA,QACI,MAAW;AAAA,QACX,SAAW;AAAA,QACX,UAAW;AAAA,MACf;AAAA,IACJ;AAAA,EACJ;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,EAsGA,WAAW,QAAQ,SAAS;AACxB,SAAK,mBAAmB;AACxB,SAAK,WAAW;AAAA,EACpB;AAAA,EACA,WAAW,UAAU;AACjB,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,KAAK;AA3rBb,QAAAC;AA6rBQ,YAAOA,MAAA,KAAK,QAAL,OAAAA,MAAY,KAAK,QAAQ,IAAI;AAAA,EACxC;AAAA,EACA,IAAI,GAAG,IAAI;AACP,SAAK,IAAI,MAAM,EAAE;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,WAAW,cAAc,eAAe;AACpC,SAAK,iBAAiB;AAAA,EAC1B;AAAA,EACA,WAAW,gBAAgB;AACvB,QAAI,CAAC,KAAK,gBAAgB;AACtB,YAAM,YAAY,KAAK,SAAS;AAChC,WAAK,kBAAiB,uCAAW,eAAc;AAAA,IACnD;AACA,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,YAAY;AACZ,UAAM,UAAU,CAAC;AACjB,QAAI,OAAO,MACP,QAAQ,KAAK;AACjB,SAAK,OAAO,MAAM,QAAQ,CAAC,KAAK,QAAQ,OAAO,KAAK,QAAQ;AACxD,cAAQ,OAAO,IAAI,KAAK,cAAc;AAAA,IAC1C;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,UAAU,SAAS,CAAC,GAAG,QAAQ,MAAM,OAAO,MAAM,aAAa,OAAO,cAAc,OAAO,UAAU,OAAO;AAhwBhH,QAAAA,KAAA;AAiwBQ,UACI,KAA4B,MAC5B,EAAE,aAAa,SAAS,IAAI;AAChC,OAAG,OAAO;AAAA,MACN,UAAW,CAAC;AAAA,MACZ,GAAG,YAAY;AAAA,MACf,GAAG;AAAA,IACP;AAEA,QAAI,YAAY,cAAc;AAC1B,YAAM,UAAU,CAAC;AACjB,UAAI,CAAC,GAAG,cAAc,CAAC,GAAG,WAAW,SAAS;AAE1C,iBAAS,EAAE,GAAG,OAAO;AAAA,MACzB;AACA,YAAM,gBAAgB,GAAG,wBAAwB;AAUjD,UAAI,YAAY,kBAAkB;AAE9B,mBAAW,OAAO,eAAe;AAE7B,cAAI,OAAO,QAAQ;AAEf,gBAAI,OAAO,GAAG,MAAM,QAAW;AAE3B,sBAAQ,GAAG,IAAI,OAAO,GAAG;AAAA,YAC7B;AAEA,mBAAO,OAAO,GAAG;AAAA,UACrB;AAAA,QACJ;AAAA,MACJ,OACK;AACD,mBAAW,OAAO,QAAQ;AACtB,cAAI,EAAE,OAAO,YAAY,WAAW;AAChC,gBAAI,OAAO,GAAG,MAAM,QAAW;AAK3B,sBAAQ,GAAG,IAAI,cAAc,GAAG;AAAA,YACpC,OACK;AACD,sBAAQ,GAAG,IAAI,OAAO,GAAG;AAAA,YAC7B;AACA,mBAAO,OAAO,GAAG;AAAA,UACrB;AAAA,QACJ;AAAA,MACJ;AACA,YAAM,UAAU,OAAO;AAAA,IAC3B,OACK;AAED,YAAM,UAAU,IAAI;AAAA,IACxB;AAEA,QAAI,CAAC,YAAY;AACb,kBAAY,iBAAiB,QAAQ,OAAO;AAAA,IAChD;AAEA,QAAI,CAACD,QAAO,aAAa,kBAAkB,GAAG;AAG1C,UAAI,oBAAoB,GAAG,KAAK;AAChC,UAAI,CAAC,mBAAmB;AAEpB,YAAI,YAAY,kBAAkB;AAC9B,8BAAoB,YAAY;AAAA,QACpC,WACS,OAAO;AACZ,8BAAoB,MAAM;AAAA,QAC9B;AAAA,MACJ;AAEA,UAAI,qBAAqB,sBAAsB,SAAS,GAAG,YAAY;AACnE,oBAAY,SAAS;AAAA,UACjB,MAAa;AAAA,UACb,YAAa;AAAA,UACb,UAAa;AAAA,QACjB,CAAC;AAAA,MACL;AAEA,kBAAY,WAAW,SAAS,GAAG;AACnC,kBAAY,mBAAmB;AAAA,IACnC;AAEA,OAAG,cAAc,OAAM;AAEvB,QAAI,CAAC,GAAG,cAAc;AAClB,SAAG,eAAe;AAAA,IACtB;AACA,OAAG,OAAO,YAAY,YAAY,QAAQ,OAAO,OAAO,IAAI,WAAW;AAEvE,OAAG,MAAM,SAAS,GAAG,iBAAiB,aAAa,QAAQ,GAAG,MAAM,YAAY,QAAQ,IAAI,GAAG,KAAK,YAAY,QAAQ;AAExH,MAAAC,MAAA,GAAG,KAAK,mBAAR,gBAAAA,IAAwB,SAAQ,GAAG,gBAAgB;AAEnD,QAAI,GAAG,OAAO,MAAM;AAEhB,SAAG,QAAQ,MAAM,GAAG,WAAW,KAAK,CAAC;AAAA,IACzC;AACA,QAAI,GAAG,KAAK,YAAY,aAAa,GAAG;AACpC,SAAG,iBAAgB,iBAAY,QAAQ,KAAK,MAAzB,YAA8B,CAAC,CAAC;AAAA,IACvD;AACA,OAAG,aAAa;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,IAAI,WAAW,YAAY;AA/3B/B,QAAAA;AAg4BQ,UAAM,KAAK;AAEX,QAAI,QAAQ,GAAG,KAAK,UAAU,MAAM,YAAY;AAG5C,SAAG,KAAK,aAAa;AAErB,OAAAA,MAAA,GAAG,WAAH,gBAAAA,IAAW,QAAQ,OAAK,EAAE,mBAAmB,IAAI,UAAU;AAAA,IAC/D;AAAA,EACJ;AAAA,EACA,IAAI,aAAa;AACb,WAAO,QAAQ,KAAK,KAAK,UAAU;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,OAAO;AACV,QAAI,iBAAiB,KAAK,aAAa;AACnC,eAAS,SAAS,KAAK,MAAM,OAAO,MAAM,IAAI,GAAG,EAAE,OAAO,IAAI,QAAQ,IAAI,QAAQ,KAAK;AACnF,cACI,QAAW,OAAO,CAAC,GACnB,EAAE,KAAK,IAAI;AACf,YAAI,SAAS,QAAQ,CAAC,MAAM,QAAQ,KAAK,SAAS,IAAI,GAAG,MAAM,SAAS,IAAI,CAAC,GAAG;AAC5E,iBAAO;AAAA,QACX;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,WAAW;AACX,WAAO,IAAI,KAAK,YAAY,OAAO,eAAe;AAAA,MAC9C,IAAK;AAAA,IACT,GAAG,KAAK,IAAI,GAAG,KAAK,OAAO,CAAC,GAAG,MAAM,IAAI;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,YAAY,MAAM,iBAAiB,OAAO,OAAO,QAAQ,aAAa;AACzE,UACI,EAAE,UAAU,oBAAoB,cAAc,IAAI,MAClD,EAAE,aAAa,EAAE,SAAU,MAAM,EAAE,IAAI,SAAS,CAAE,GAIlD,YAAa,eAAe,WAAW,UAAW,OAAO,aAAa,MAAM,IAAI;AACpF,QAAI;AACJ,qBAAiB,kBAAkB,WAAW,uBAAuB;AACrE,QAAI,CAAC,gBAAgB;AACjB,WAAK,aAAa,eAAe;AAC7B,cAAM,QAAQ,mBAAmB,SAAS;AAC1C,YAAIC,gBAAe,cAAc,SAAS;AAE1C,YAAI,MAAM,QAAQA,aAAY,GAAG;AAC7B,UAAAA,gBAAeA,cAAa,MAAM;AAAA,QACtC;AACA,YAAI,+BAAO,gBAAgB;AACvB,cAAI,aAAa,QAAQ,WAAW,SAAS,MAAM,YAAY;AAC3D,yBAAa,QAAQ,WAAW,WAAWA,aAAY;AAAA,UAC3D;AAAA,QACJ,WACS,UAAU,SAAS,MAAM,YAAY;AAC1C,oBAAU,SAAS,IAAIA;AAAA,QAC3B;AAAA,MACJ;AAAA,IACJ;AACA,QAAI,CAAC,WAAW,yBAAyB,CAAC,aAAa;AAEnD,WAAK,aAAa,UAAU;AACxB,cACI,QAAuB,SAAS,SAAS,GACzC,EAAE,MAAM,WAAW,IAAI,OAIvB,YAAuB,eAAe,MACtC,UAAuB,MAAM,gBAC7B,eAAuB,cAAc,UAC/B,aAAa,WAAW,MAAM,UAAU,IACxC,cAAc,OACpB,kBAAwB,QAAQ,SAAU,CAAC,aAAa,CAAC,eACzD,UAAuB,CAAC,WAAW,yBAAyB,MAAM;AAEtE,YAAI,mBAAmB,SAAS;AAE5B,cAAI,CAAC,kBAAkB,mBAAmB,cAAc;AACpD,kBACI,QAAY,kBACN,UAAU,IAAI,IACd,UACI,aAAa,QAAQ,WAAW,UAAU,IAC1C,UAAU,UAAU,GAC9B,YAAY,UAAU,MAAM,QAAQ,OAAO,MAAM,MAAM,IAAI;AAC/D,gBAAI,SAAS;AACT,2BAAa,QAAQ,WAAW,YAAY,SAAS;AAAA,YACzD,OACK;AACD,wBAAU,UAAU,IAAI;AAAA,YAC5B;AAEA,gBAAI,WAAW;AACX,qBAAO,UAAU,IAAI;AAAA,YACzB;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAEA,SAAK,MAAM,OAAO,SAAS,UAAU,KAAK,cAAc,QAAQ,SAAS;AACzE,WAAO;AAAA,EACX;AAAA,EACA,OAAO,WAAW,MAAM;AACpB,UAAM,WAAW,IAAI;AACrB,QAAI,CAAC,KAAK,QAAQ;AAEd,WAAK,YAAY,MAAM,IAAI;AAAA,IAC/B;AAAA,EACJ;AAAA,EACA,OAAO,YAAY,KAAK,MAAM;AA//BlC,QAAAD,KAAA;AAggCQ,UACI,cAAcD,QAAO,KAAK,QAAQ,KAAK,IAAI,QAC3C,OAAc,KAAK,MAAM,QACzB,aAAc,KAAK,SAAS;AAAA,MACxB,OAAOC,MAAA,6BAAM,KAAK,YAAX,OAAAA,MAAsB,CAAC;AAAA;AAAA,MAE9B,aAAc;AAAA;AAAA,MAEd,UAAW,OAAO,EAAE,GAAG,KAAK,SAAS,IAAI,CAAC;AAAA;AAAA,MAC1C,SAAW,OAAO,QAAO,kCAAM,YAAN,YAAkB,IAAI;AAAA;AAAA,MAC/C,UAAW,OAAO,QAAO,kCAAM,aAAN,YAAkB,IAAI;AAAA;AAAA,MAC/C,KAAW,OAAO,QAAO,kCAAM,QAAN,YAAkB,IAAI;AAAA;AAAA,MAC/C,SAAW,OAAO,QAAO,kCAAM,YAAN,YAAkB,IAAI;AAAA;AAAA,IACnD;AAMJ,QAAID,QAAO,KAAK,UAAU,GAAG;AACzB,aAAO,OAAO,WAAW,UAAU,IAAI,QAAQ;AAAA,IACnD;AAIA,QAAIA,QAAO,KAAK,SAAS,GAAG;AACxB,UAAI,SAAS;AAAA,QACT,MAAa;AAAA,QACb,YAAa,IAAI;AAAA,QACjB,UAAa;AAAA,MACjB,CAAC;AACD,iBAAW,QAAQ,IAAI,OAAO,IAAI;AAAA,IACtC;AAEA,QAAI,2CAAa,QAAQ;AACrB,kBAAY,IAAI,IAAI,UAAU,GAAG;AAAA,IACrC;AAEA,eAAW,WAAW,WAAW,KAAK,OAAO,WAAS,MAAM,IAAI;AAChE,QAAI,gBAAgB;AAAA,EACxB;AAAA,EACA,WAAW,gBAAgB;AACvB,WAAO,KAAK,MAAM,OAAO;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,WAAW,YAAY;AACnB,WAAO,KAAK,MAAM,OAAO;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,YAAY;AACZ,WAAO,KAAK,MAAM,OAAO;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,WAAW,WAAW;AAClB,WAAO,KAAK,MAAM,OAAO;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,WAAW;AACX,WAAO,KAAK,MAAM,OAAO;AAAA,EAC7B;AAAA,EACA,WAAW,qBAAqB;AAC5B,WAAO,KAAK,MAAM,OAAO;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,iBAAiB,MAAM,MAAM,MAAM;AACtC,UACI,KAAmB,MACnB,aAAmB,GAAG,MAAM,QAK5B,mBAAmB,MAAM,YAAY;AAGzC,QAAI,QAAQ,GAAG,oBAAoB,CAAC,WAAW,aAAa;AACxD,UAAI,cAAc,UAAU;AAC5B,WAAK,gBAAgB,MAAM;AAGvB,YAAI,CAAC,WAAW,gBAAgB,EAAE,YAAY,KAAK,iBAAiB,GAAG,eAAe;AAClF,iBAAO,aAAa,OAAO,KAAK,YAAY,CAAC;AAE7C,qBAAW;AAAA,YACP,MAAa;AAAA,YACb,YAAa;AAAA,YACb,UAAa;AAAA,UACjB;AACA,cAAI,eAAe,IAAI,GAAG;AACtB,qBAAS,OAAO;AAAA,UACpB;AACA,aAAG,SAAS,QAAQ;AAAA,QACxB;AAAA,MACJ;AACA,iBAAW,cAAc;AAAA,IAC7B;AACA,OAAG,gBAAgB;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,SAAS,UAAU;AACtB,QAAI,YAAY,MAAM;AAClB;AAAA,IACJ;AACA,QAAI,OAAO,aAAa,UAAU;AAC9B,iBAAW;AAAA,QACP,MAAO;AAAA,MACX;AAAA,IACJ;AACA,UACI,KAAoB,KAAK,UAAU,GACnC,aAAoB,GAAG,MAAM,QAC7B,EAAE,SAAS,IAAS,YACpB,oBAAoB,WAAW,SAC/B,EAAE,KAAK,IAAa,UACpB,WAAoB,WAAW,IAAI,IAAI,GACvC,aAAoB,SAAS,eAAe,SAAS,aAAa;AACtE,QAAI,OAAO;AACX,QAAI,CAAC,YAAa,SAAS,QAAQ,SAAS,SAAS,SAAS,MAAO;AACjE,cAAQ,UAAU,OAAO,QAAQ;AACjC,YAAM,YAAY,WAAW,SAAS,YAAY;AAClD,YAAM,UAAU,WAAW,SAAS,UAAW,SAAS,IAAI,IAAI,WAAW,KAAK;AAAA,IACpF,OACK;AACD,cAAQ,OAAO,OAAO,QAAQ;AAC9B,WAAK,OAAO,UAAU;AAClB,YAAI,QAAQ,QAAQ;AAChB,gBAAM,GAAG,IAAI,SAAS,GAAG;AAAA,QAC7B;AAAA,MACJ;AAAA,IACJ;AACA,UAAM,QAAQ;AACd,eAAW,KAAK,MAAM,OAAO,IAAI;AACjC,eAAW,IAAI,IAAI,IAAI;AACvB,QAAI,CAAC,WAAW,QAAQ,UAAU,GAAG;AACjC,iBAAW,QAAQ,UAAU,IAAI;AAAA,IACrC;AAEA,QAAI,WAAW,SAAS,GAAG,GAAG;AAC1B,YAAM,iBAAiB;AAAA,IAC3B;AACA,QAAI,MAAM,gBAAgB;AACtB,wBAAkB,WAAW,MAAM,GAAG,EAAE,CAAC,CAAC,IAAI;AAAA,IAClD,OACK;AAGD,wBAAkB,UAAU,IAAI;AAAA,IACpC;AAEA,QAAI,kBAAkB,OAAO;AACzB,iBAAW,SAAS,UAAU,IAAI,MAAM;AAAA,IAC5C;AAGA,QAAI,CAAC,cAAc,IAAI,GAAG;AAEtB,YAAM,eAAe,GAAG,SAAS;AAAA,IACrC;AACA,OAAG,wBAAwB;AAC3B,OAAG,qBAAqB;AACxB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,YAAY,WAAW;AAC1B,UACI,KAAK,KAAK,UAAU,GACpB,aAAa,GAAG,MAAM,QACtB,aAAa,WAAW,IAAI,SAAS,GACrC,EAAE,SAAS,IAAI,YACf,QAAQ,SAAS,SAAS;AAC9B,QAAI,YAAY;AACZ,iBAAW,KAAK,OAAO,OAAO,CAAC;AAC/B,aAAO,SAAS,SAAS;AACzB,aAAO,WAAW,SAAS,SAAS;AACpC,aAAO,WAAW,QAAQ,SAAS;AACnC,aAAO,WAAW,IAAI,SAAS;AAC/B,aAAO,WAAW,QAAQ,WAAW,UAAU;AAC/C,iBAAW,QAAQ,UAAU;AACzB,YAAI,SAAS,IAAI,IAAI,OAAO;AACxB,YAAE,SAAS,IAAI;AAAA,QACnB;AAAA,MACJ;AAEA,aAAO,GAAG,UAAU,SAAS;AAAA,IACjC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,kBAAkB;AACrB,UAAM,KAAK;AACX,QAAIA,QAAO,IAAI,kBAAkB,GAAG;AAChC;AAAA,IACJ;AACA,QAAI,GAAG,WAAW;AACd,SAAG,mBAAmB,CAAC;AACvB,iBAAW,gBAAgB,GAAG,WAAW;AACrC,cAAM,WAAW,GAAG,UAAU,YAAY;AAC1C,iBAAS,eAAe;AACxB,WAAG,iBAAiB,KAAK,QAAQ;AAEjC,YAAI,CAAC,QAAQ,QAAQ,GAAG,SAAS,EAAE,SAAS,YAAY,GAAG;AACvD,UAAAD,gBAAe,GAAG,WAAW,cAAc;AAAA,YACvC,YAAa;AAAA,YACb,KAAa,WAAW;AAEpB,qBAAO,KAAK,WAAW,YAAY;AAAA,YACvC;AAAA,YACA,KAAM,SAAS,OAAO;AAElB,mBAAK,WAAW,cAAc,OAAO,QAAQ;AAAA,YACjD;AAAA,UACJ,CAAC;AAAA,QACL;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,cAAc,QAAQ,eAAe;AACxC,UAAM,cAAc,OAAO,KAAK,iBAAiB,oBAAI,IAAI;AAEzD,eAAW,SAAS,KAAK,MAAM,OAAO,UAAU;AAE5C,YAAM,QAAQ,aAAa,QAAQ,eAAe,MAAM,UAAU;AAClE,gBAAU,UAAa,YAAY,IAAI,OAAO,KAAK;AAEnD,OAAC,MAAM,QAAQ,MAAM,KAAK,eAAe,MAAM;AAAA,IACnD;AAAA,EACJ;AAAA;AAAA,EAEA,kBAAkB;AACd,UAAM,EAAE,eAAe,IAAI,KAAK;AAChC,eAAW,CAAC,OAAO,KAAK,KAAK,gBAAgB;AACzC,UAAI,MAAM,IAAI,OAAO,KAAK,MAAM,IAAI,MAAM,OAAO;AAC7C,uBAAe,OAAO,KAAK;AAAA,MAC/B;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,WAAW,mBAAmB;AAC1B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,YAAY,GAAG,GAAG;AACrB,YAAQ,YAAY,CAAC,KAAK,QAAQ,YAAY,CAAC,KAAK;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,SAAS;AACT,WAAO,KAAK,MAAM,OAAO;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,mBAAmB,WAAW;AAC1B,WAAO,KAAK,YAAY,mBAAmB,SAAS;AAAA,EACxD;AAAA,EACA,iCAAiC,YAAY;AACzC,WAAO,KAAK,MAAM,OAAO,QAAQ,UAAU;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,aAAa;AACb,WAAO,OAAO,KAAK,KAAK,IAAI;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,mBAAmB,WAAW;AA71CzC,QAAAE;AA81CQ,UAAM,QAAQ,KAAK,SAAS,SAAS;AACrC,QAAI,CAAC,OAAO;AACR,UAAI,UAAU,SAAS,GAAG,GAAG;AACzB,cAEI,CAAC,EAAE,gBAAgB,EAAE,IAAI,IAAI,UAAU,MAAM,OAAO,GACpD,aAAa,eAAe,SAAS,GAAG,IAClC,KAAK,mBAAmB,cAAc,IACtC,KAAK,SAAS,cAAc;AACtC,YAAI,yCAAY,kBAAkB;AAC9B,kBAAOA,MAAA,WAAW,eAAX,gBAAAA,IAAuB,mBAAmB;AAAA,QACrD;AAAA,MACJ,WACS,UAAU,SAAS,GAAG,GAAG;AAC9B,cAEI,CAAC,gBAAgB,IAAI,IAAI,UAAU,MAAM,KAAK,CAAC,GAC/C,aAAa,KAAK,SAAS,cAAc;AAC7C,aAAI,yCAAY,qBAAoB,WAAW,YAAY;AACvD,iBAAO,WAAW,WAAW,mBAAmB,IAAI;AAAA,QACxD;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,mBAAmB,WAAW;AA73CzC,QAAAA;AA83CQ,aAAOA,MAAA,KAAK,mBAAmB,SAAS,MAAjC,gBAAAA,IAAoC,eAAc;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAc,WAAW;AACrB,UAAM,MAAM,KAAK,YAAY,mBAAmB,SAAS;AACzD,YAAO,2BAAK,gBAAc,2BAAK;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,aAAa,WAAW,OAAO,QAAQ;AAC1C,UAAM,QAAQ,KAAK,SAAS,SAAS;AACrC,YAAO,+BAAO,WAAU,MAAM,QAAQ,OAAO,KAAK,MAAM,MAAM,IAAI;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBAAgB;AACZ,UACI,KAAY,MACZ,YAAY,GAAG,YAAY;AAC/B,QAAI,CAAC,WAAW;AACZ;AAAA,IACJ;AACA,OAAG,OAAO,QAAQ,WAAS;AAn6CnC,UAAAA;AAo6CY,UAAI,CAAC,MAAM,gBAAgB;AACvB,cAAM,cAAc;AAAA,MACxB;AACA,YAAM,iBAAiB,CAAC;AACxB,OAAAA,MAAA,MAAM,mBAAN,gBAAAA,IAAsB,QAAQ,YAAU;AACpC,uBAAe,KAAK,EAAE,SAAU,GAAG,aAAa,MAAM,GAAG,OAAO,CAAC;AAAA,MACrE;AACA,YAAM,0BAA0B,IAAI,cAAc;AAAA,IACtD,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAa,QAAQ;AACjB,UACI,KAAgB,MAChB,YAAgB,GAAG,IAAI,OAAO,UAAU,GACxC,UAAgB,cAAc,cAAc,OAAO,OAAO,iBAAiB,YAAY,OAAO,aAAa,QAAQ,SAAS,GAC5H,gBAAgB,GAAG,KAAK,kBAAkB,GAAG,KAAK,gBAAgB,CAAC;AAEvE,kBAAc,OAAO,YAAY,IAAI,YAAY,aAAa,OAAO,EAAE,IAAK,WAAW,aAAc,KAAK,IAAI;AAC9G,WAAO;AAAA,EACX;AAAA,EACA,eAAe,QAAQ;AACnB,UAAM,EAAE,cAAc,YAAY,kBAAkB,IAAI;AAExD,QAAI,KAAK,KAAK,cAAc,YAAY,GAAG;AACvC,aAAO,KAAK,KAAK,cAAc,YAAY;AAC3C,UAAI,mBAAmB;AAEnB,aAAK,QAAQ,YAAY,IAAI;AAAA,MACjC;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,WAAW,MAAM;AA18CrB,QAAAA;AA28CQ,YAAOA,MAAA,KAAK,KAAK,kBAAV,gBAAAA,IAA0B;AAAA,EACrC;AAAA,EACA,WAAW,MAAM,OAAO,QAAQ;AAC5B,UAAM,KAAK,OAAM,KAAK,KAAK;AAC3B,WAAO,KAAK,IAAI,OAAO,YAAY,EAAE;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,kBAAkB,MAAM;AAx9C5B,QAAAA,KAAA;AA29CQ,YAAO,MAAAA,MAAA,KAAK,eAAL,gBAAAA,IAAiB,mBAAjB,mBAAiC,KAAK,OAAK,EAAE,eAAe;AAAA,EACvE;AAAA;AAAA;AAAA,EAGA,QAAQ,WAAW,YAAY;AAG3B,QAAI,KAAK,YAAY,aAAa,KAAK,KAAK,cAAc;AACtD,aAAO,KAAK,KAAK,aAAa,SAAS;AAAA,IAC3C;AACA,WAAO,KAAK,KAAK,UAAU;AAAA,EAC/B;AAAA,EACA,WAAW,WAAW,YAAY;AAE9B,QAAI,KAAK,YAAY,aAAa,KAAK,KAAK,cAAc;AACtD,aAAO,KAAK,KAAK,aAAa,SAAS;AAAA,IAC3C;AACA,WAAO,aAAa,QAAQ,KAAK,MAAM,UAAU;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,WAAW;AAt/CnB,QAAAA;AAu/CQ,QAAI,CAAC,WAAW;AACZ;AAAA,IACJ;AACA,UACI,KAAe,MACf,EAAE,SAAS,IAAI,IACf,QAAe,SAAS,SAAS;AACrC,QAAI,CAAC,OAAO;AAER,UAAI,UAAU,SAAS,GAAG,GAAG;AACzB,cAAM,CAAC,EAAE,gBAAgB,OAAO,IAAI,IAAI,UAAU,MAAM,OAAO;AAE/D,cAAM,aAAa,SAAS,cAAc;AAC1C,YAAI,yCAAY,OAAO;AAEnB,aAAG,uBAAuB,GAAG,cAAc,CAAC;AAE5C,gBAAM,YAAY,WAAW,MAAM,IAAI,KAAK;AAE5C,cAAI,aAAa,MAAM;AACnB,gBAAI,UAAU,SAAS;AACnB,qBAAO,UAAU,SAAS,IAAI;AAAA,YAClC;AACA,mBAAO,UAAU,IAAI;AAAA,UACzB;AACA,iBAAO;AAAA,QACX;AACA,eAAO;AAAA,MACX;AACA,UAAI,UAAU,SAAS,GAAG,GAAG;AACzB,cACI,CAAC,gBAAgB,eAAe,IAAI,UAAU,MAAM,KAAK,CAAC,GAC1D,aAAoC,SAAS,cAAc;AAE/D,YAAI,yCAAY,kBAAkB;AAC9B,kBAAOA,MAAA,GAAG,cAAc,MAAjB,gBAAAA,IAAoB,kBAAkB;AAAA,QACjD,WAES,CAAC,aAAa,QAAQ,GAAG,MAAM,SAAS,GAAG;AAChD,iBAAO,aAAa,QAAQ,IAAI,SAAS;AAAA,QAC7C;AAEA,eAAO,GAAG,WAAW,WAAW,SAAS;AAAA,MAC7C;AAAA,IACJ;AACA,QAAI,+BAAO,gBAAgB;AACvB,aAAO,GAAG,WAAW,WAAW,MAAM,UAAU;AAAA,IACpD;AACA,WAAO,GAAG,QAAQ,YAAW,+BAAO,eAAc,SAAS;AAAA,EAC/D;AAAA;AAAA,EAEA,SAAS,WAAW;AAChB,QAAI,CAAC,WAAW;AACZ;AAAA,IACJ;AAEA,QAAI,aAAa,QAAQ,CAAC,UAAU,SAAS,GAAG,GAAG;AAC/C,aAAO,KAAK,SAAS;AAAA,IACzB;AAEA,WAAO,KAAK,IAAI,SAAS;AAAA,EAC7B;AAAA;AAAA,EAEA,SAAS,WAAW,OAAO;AACvB,QAAI,aAAa,MAAM;AACnB,WAAK,SAAS,IAAI;AAAA,IACtB,OACK;AACD,WAAK,IAAI,WAAW,KAAK;AAAA,IAC7B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,QAAQ,OAAO,OAAO;AAllD1B,QAAAA,KAAA;AAmlDQ,UAAM,EAAE,MAAM,SAAS,IAAI;AAG3B,QAAI,OAAO,UAAU,UAAU;AAC3B,YACI,QAAa,SAAS,KAAK,GAC3B,cAAaA,MAAA,+BAAO,eAAP,OAAAA,MAAqB;AACtC,UAAI,+BAAO,KAAK;AACZ,cAAM,IAAI,OAAO,KAAK,MAAM,IAAI;AAAA,MACpC,WACS,+BAAO,gBAAgB;AAC5B,qBAAa,QAAQ,MAAM,YAAY,KAAK;AAAA,MAChD,OACK;AACD,aAAK,UAAU,IAAI;AAAA,MACvB;AAEA,UAAI,UAAU,MAAM;AAChB,aAAK,MAAM;AAAA,MACf;AAAA,IACJ,OAEK;AACD,YAAM,OAAO,OAAO,KAAK,KAAK;AAC9B,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,cACI,YAAa,KAAK,CAAC,GACnB,QAAa,SAAS,SAAS,GAC/B,cAAa,oCAAO,eAAP,YAAqB;AACtC,YAAI,+BAAO,KAAK;AACZ,gBAAM,IAAI,OAAO,KAAK,MAAM,IAAI;AAAA,QACpC,WACS,YAAY;AACjB,cAAI,+BAAO,gBAAgB;AACvB,yBAAa,QAAQ,MAAM,YAAY,MAAM,SAAS,CAAC;AAAA,UAC3D,OACK;AACD,iBAAK,UAAU,IAAI,MAAM,SAAS;AAAA,UACtC;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,WAAW;AApoDvB,QAAAA;AAqoDQ,UACI,QAAa,KAAK,SAAS,SAAS,GACpC,cAAaA,MAAA,+BAAO,eAAP,OAAAA,MAAqB;AACtC,QAAI,YAAY;AACZ,UAAI,+BAAO,gBAAgB;AACvB,eAAO,aAAa,QAAQ,KAAK,MAAM,UAAU;AAAA,MACrD;AACA,aAAO,KAAK,KAAK,UAAU;AAAA,IAC/B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,OAAO;AACV,UAAM,WAAW,KAAK;AACtB,QAAI,aAAa,OAAO;AACpB,WAAK,MAAM;AACX,WAAK,QAAQ,MAAM,KAAK;AACxB,YAAM,OAAO,EAAE,IAAK,EAAE,OAAO,SAAS,EAAE;AACxC,WAAK,YAAY,MAAM,IAAI;AAAA,IAC/B;AAAA,EACJ;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,EA6BA,IAAI,OAAO,OAAO,SAAS,OAAO,qBAAqB,OAAO,gBAAgB,OAAO,YAAY,OAAO,sBAAsB,MAAM;AA1rDxI,QAAAA;AA2rDQ,UAAM,KAAK;AACX,QAAI,GAAG,iBAAiB;AACpB,SAAG,WAAW,OAAO,OAAO,UAAU,GAAG,aAAa;AACtD,aAAO;AAAA,IACX,OACK;AAID,YAAM,SAAS,GAAG,MAAM,OAAO,OAAO,QAAQ,oBAAoB,eAAe,WAAW,mBAAmB;AAC/G,OAAAA,MAAA,GAAG,aAAH,gBAAAA,IAAA,SAAc,OAAO,OAAO,QAAQ,oBAAoB;AACxD,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EACA,YAAY,OAAO,OAAO;AACtB,QAAI,OAAO,UAAU,UAAU;AAE3B,aAAO,aAAa,OAAO,CAAC,GAAG,KAAK;AAAA,IACxC;AACA,WAAO;AAAA,MACH,CAAC,KAAK,GAAI;AAAA,IACd;AAAA,EACJ;AAAA,EACA,WAAW,OAAO,OAAO,QAAQ;AAltDrC,QAAAA;AAmtDQ,UACI,KAAS,MACT;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAS,IACT,SAAS,CAAC;AACd,QAAI,KAAK,UAAU;AACnB,QAAI,OAAO,UAAU,UAAU;AAC3B,aAAO,KAAK,GAAG,YAAY,OAAO,KAAK,CAAC,EAAE,QAAQ,SAAO;AACrD,cAAM,SAAS,GAAG,KAAK;AACvB,gBAAQ,YAAY,aAAa,KAAK,MAAM,GAAG,GAAG,EAAE;AAEpD,YAAI,CAAC,IAAI,QAAQ,KAAK,aAAa,GAAG,GAAG,KAAK,GAAG;AAC7C,iBAAO,GAAG,IAAI;AAAA,YACV;AAAA,YACA,UAAW,GAAG,IAAI,GAAG;AAAA,UACzB;AACA,eAAK,aAAa,GAAG,IAAI;AACzB,oBAAU;AAAA,QACd;AAAA,MACJ,CAAC;AAAA,IACL,OACK;AACD,YAAM,SAAS,KAAK,KAAK;AAEzB,UAAI,CAAC,IAAI,QAAQ,KAAK,aAAa,KAAK,GAAG,KAAK,GAAG;AAC/C,eAAO,KAAK,IAAI;AAAA,UACZ;AAAA,UACA,UAAW,GAAG,IAAI,KAAK;AAAA,QAC3B;AACA,aAAK,aAAa,KAAK,IAAI;AAC3B,kBAAU;AAAA,MACd;AAAA,IACJ;AAEA,QAAI,SAAS;AACT,SAAG;AACH,UAAI,CAAC,QAAQ;AAIT,cAAM,QAAQ;AAAA,UACV,QAAU;AAAA,UACV,QAAU;AAAA,UACV,SAAU,CAAC,EAAE;AAAA,UACb,SAAU;AAAA,QACd;AACA,SAAAA,MAAA,GAAG,WAAH,gBAAAA,IAAW;AAAA,UAAQ,WACf,MAAM,QAAQ,iBAAiB,EAAE,GAAG,MAAM,CAAC;AAAA;AAG/C,WAAG;AAAA,UAAc,CAAC,OAAO,WACrB,MAAM,QAAQ,iBAAiB,EAAE,GAAG,OAAO,QAAQ,SAAU,CAAC,MAAM,EAAE,CAAC;AAAA,QAC3E;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,MAAM,mBAAmB,OAAO,QAAQ,oBAAoB,gBAAgB,OAAO,YAAY,OAAO,sBAAsB,MAAM;AA9wDtI,QAAAA,KAAA;AA+wDQ,UACI,KAAW,MACX;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAW,IACX;AAAA,MACI,WAAY;AAAA,MACZ;AAAA,MACA;AAAA,IACJ,IAAW,aACX,SAAW,CAAC,GACZ,QAAW,GAAG,YAAY,mBAAmB,KAAK,GAGlD,OAAW,OAAO,KAAK,KAAK,EAAE,KAAK,YAAY,WAAW;AAC9D,QACI,UAAW;AAEf,QAAI,CAAC,UAAU,uBAAuB,CAAC,GAAG,oBAAoB,KAAK,GAAG;AAClE,aAAO;AAAA,IACX;AACA,OAAG,YAAY;AACf,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,YAAM,MAAM,KAAK,CAAC;AAElB,UAAI,QAAQ,eAAe;AACvB;AAAA,MACJ;AAEA,UAAI,IAAI,SAAS,GAAG,GAAG;AACnB,cACI,CAAC,EAAE,gBAAgB,OAAO,IAAI,IAAI,IAAI,MAAM,OAAO,GACnDE,SAAkC,GAAG,SAAS,cAAc;AAChE,YAAIA,UAAA,gBAAAA,OAAO,OAAO;AACd,gBAAM,aAAY,KAAAA,OAAM,MAAM,IAAI,KAAK,MAArB,aAA0BF,MAAAE,OAAM,4BAAN,gBAAAF,IAAA,KAAAE,QAAgC,IAAI;AAChF,cAAI,aAAa,MAAM;AACnB,kBAAM,IAAI,MAAM,oBAAoB,cAAc,wCAAwC,KAAK,yBAAyB;AAAA,UAC5H;AACA,cAAI,UAAU,SAAS;AACnB,sBAAU,IAAI,MAAM,MAAM,GAAG,CAAC;AAAA,UAClC,OACK;AACD,yBAAa,QAAQ,WAAW,MAAM,MAAM,GAAG,CAAC;AAAA,UACpD;AACA;AAAA,QACJ;AAAA,MACJ;AACA,YAAM,aAAa,IAAI,SAAS,GAAG;AAEnC,UAAI,aAAa,YAAY;AACzB,cAAM,CAAC,EAAE,cAAc,IAAI,IAAI,IAAI,MAAM,QAAQ;AACjD,YAAI,UAAU,YAAY,GAAG;AACzB,aAAG,YAAY,EAAE,IAAI,MAAM,MAAM,GAAG,CAAC;AACrC;AAAA,QACJ;AAAA,MACJ;AACA,YACI,QAAW,SAAS,GAAG,GACvB,MAAW,SAAS,cACpB,WAAW,+BAAO,UAClB,WAAW,oCAAO,eAAP,YAAqB,KAChC,UAAY,CAAC,iBAAiB,CAAC,SAAS,OAAO,YAAY,+BAAO,UAClE,WAAW,UAAU,GAAG,OAAO,KAAI,+BAAO,mBAAkB,aAAa,aAAa,QAAQ,MAAM,OAAO,IAAI,KAAK,OAAO,GAC3HC,SAAW,YAAY,aAAa,KAAK,MAAM,GAAG,GAAG,EAAE,GACvD,MAAW,MAAM,GAAG,IAAI,EAAE,OAAAA,OAAM,GAChC,WAAW,GAAG,kBAAkB,GAAG,GACnCC,WAAW,CAAC,IAAI,OAAO,IAAI,QAAQ,IAAI,EAAE,KAAM,MAAM,QAAQ,MAAM;AACvE,UAAI,CAAC,YAAY,CAACA,SAAQ,UAAUD,MAAK,MAAM,CAAC,aAAaA,WAAU,SAAY;AAE/E,WAAG;AAEH,YAAI,YAAW,0CAAO,gBAAP,+BAAqB,QAArB,YAA4B;AAC3C,kBAAU;AAEV,YAAI,OAAO,KAAK,YAAYC,SAAQ,KAAK,SAAS,GAAG,GAAGD,MAAK,GAAG;AAE5D,kBAAQ,eAAe,KAAK,UAAU,GAAG;AAGzC,cAAI,GAAG,aAAa;AAChB,eAAG,KAAK,OAAO,IAAIA;AAAA,UACvB;AAAA,QACJ,WACS,CAAC,GAAG,WAAW;AAEpB,cAAI,EAAE,OAAO,KAAK,WAAW;AACzB,eAAG,iBAAiB,KAAK,QAAQ;AAAA,UACrC;AACA,cAAI,IAAI,aAAa,YAAY;AAC7B,oBAAQ,eAAe,KAAK,UAAU;AAAA,UAC1C;AAAA,QACJ;AAEA,eAAO,GAAG,IAAI;AACd,WAAG,WAAW,SAAS,SAASA,QAAO,eAAe,KAAK;AAE3D,YAAI,YAAY,CAAC,oBAAoB;AACjC,aAAG,aAAa,QAAQ;AACxB,aAAG,OAAO,QAAQ,WAAS,MAAM,mBAAmB,IAAIA,QAAO,SAAS,cAAc,IAAI,QAAQ,CAAC;AAAA,QACvG;AAAA,MACJ;AAAA,IACJ;AACA,QAAI,SAAS;AACT,SAAG,YAAY,OAAO,QAAQ,QAAQ,oBAAoB,aAAa;AAAA,IAC3E;AACA,OAAG,YAAY;AACf,WAAO,UAAU,SAAS;AAAA,EAC9B;AAAA;AAAA,EAEA,WAAW,SAAS,KAAK,OAAO,eAAe,OAAO;AA/3D1D,QAAAH;AAg4DQ,UAAM,KAAK;AAGX,UAAK,+BAAO,eAAc,SAAS,GAAG,YAAY,SAAS;AACvD,SAAG,aAAa;AAEhB,SAAG,MAAM;AAAA,IACb;AAEA,UAAK,+BAAO,eAAc,SAAS,GAAG,YAAY,eAAe;AAG7D,UAAI,IAAEA,MAAA,GAAG,WAAH,gBAAAA,IAAW,YAAW,SAAS,QAAQ,CAAC,GAAG,WAAW,QAAQ,KAAK,KAAK;AAE1E,SAAC,GAAG,WAAW,QAAQ,KAAK,KAAK,GAAG,WAAW,UAAU,YAAY,IAAI,MAAM,OAAO;AAAA,UAClF,oBAAqB,EAAE,MAAO,KAAK;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,IACJ,WAGS,SAAS;AAEd,UAAG,+BAAO,SAAQ,GAAG,IAAI;AAAA,IAC7B,WACS,+BAAO,KAAK;AACjB,YAAM,IAAI,OAAO,GAAG,MAAM,EAAE;AAAA,IAChC,OACK;AACD,UAAI,iBAAiB,+BAAO;AAE5B,UAAI,CAAC,SAAS,IAAI,SAAS,GAAG,GAAG;AAC7B,cAAM,aAAa,IAAI,MAAM,GAAG,EAAE,CAAC;AACnC,gBAAQ,GAAG,YAAY,SAAS,UAAU;AAG1C,0BAAiB,+BAAO,oBAAkB,+BAAO,UAAS;AAAA,MAC9D;AAEA,UAAI,gBAAgB;AAChB,qBAAa,QAAQ,GAAG,MAAM,KAAK,KAAK;AAAA,MAC5C,OAEK;AACD,WAAG,KAAK,GAAG,IAAI;AAAA,MACnB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA,EAEA,YAAY,OAAO,QAAQ,QAAQ,oBAAoB,eAAe;AAClE,QAAI,KAAK,QAAQ;AACb,iBAAW,SAAS,KAAK,QAAQ;AAC7B,cAAM,cAAc,MAAM,OAAO,QAAQ,QAAQ,oBAAoB,aAAa;AAAA,MACtF;AAAA,IACJ;AAEA,SAAK;AAAA,MAAc,CAAC,OAAO,WACvB,MAAM,cAAc,QAAQ,OAAO,QAAQ,QAAQ,oBAAoB,aAAa;AAAA,IACxF;AAAA,EACJ;AAAA;AAAA,EAEA,cAAcK,KAAI;AACd,eAAW,UAAU,KAAK,QAAQ;AAC9B,iBAAW,SAAS,OAAO,QAAQ;AAC/B,QAAAA,IAAG,OAAO,MAAM;AAAA,MACpB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,gBAAgB;AAMhB,WAAO,CAAC,KAAK,mBAAmB,CAAC,KAAK;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,aAAa;AACb,WAAO,QAAQ,KAAK,KAAK,YAAY,OAAO,KAAK,KAAK,KAAK,QAAQ,EAAE,SAAS,CAAC;AAAA,EACnF;AAAA,EACA,IAAI,wBAAwB;AACxB,WAAO,KAAK,iBAAiB,CAAC,aAAa,QAAQ,KAAK,mBAAmB;AAAA,EAC/E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAgB,WAAW;AACvB,WAAO,KAAK,cAAc,aAAa,KAAK,KAAK;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,wBAAwB,aAAa;AACjC,UACI,QAAQ,OAAO,gBAAgB,WAAW,KAAK,mBAAmB,WAAW,IAAI,aACjF,QAAQ,+BAAO,SAAQ;AAC3B,QAAI;AACJ,QAAI,CAAC,SAAS,MAAM,SAAS;AACzB,eAAS,KAAK,SAAS,IAAI;AAE3B,UAAI,+BAAO,WAAW;AAClB,iBAAS,MAAM,UAAU,QAAQ,IAAI;AAAA,MACzC;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,gBAAgB;AAChB,UAAM,OAAO,KAAK;AAClB,QAAI,QAAQ,OAAO,KAAK,IAAI,EAAE,QAAQ;AAClC,WAAK,KAAK,YAAY,OAAO,IAAI,KAAK;AAAA,IAC1C;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,mBAAmB;AACnB,UACI,KAAK,MACL,OAAO,CAAC;AACZ,QAAI,CAAC,GAAG,YAAY;AAChB,aAAO;AAAA,IACX;AACA,QAAI,SAAS;AACb,WAAO,KAAK,GAAG,KAAK,QAAQ,EAAE,QAAQ,SAAO;AACzC,YAAM,QAAQ,GAAG,wBAAwB,GAAG;AAC5C,UAAI,UAAU,YAAY;AACtB,aAAK,GAAG,IAAI;AACZ,iBAAS;AAAA,MACb;AAAA,IACJ,CAAC;AACD,WAAO,SAAS,OAAO;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,mBAAmB;AACnB,UAAM,OAAO,KAAK;AAElB,QAAI,QAAQ,OAAO,KAAK,IAAI,EAAE,QAAQ;AAClC,mBAAa,QAAQ,MAAM,KAAK,YAAY,SAAS,KAAK,EAAE;AAAA,IAChE;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,sBAAsB;AACtB,UACI,KAAK,MACL,EAAE,SAAS,IAAI,GAAG,aAClB,OAAO,CAAC;AACZ,QAAI,CAAC,GAAG,YAAY;AAChB,aAAO;AAAA,IACX;AACA,QAAI,SAAS;AACb,WAAO,KAAK,GAAG,KAAK,QAAQ,EAAE,QAAQ,eAAa;AAC/C,UACI,QAAa,SAAS,SAAS,GAC/B,aAAa,+BAAO;AAExB,UAAI,UAAU,SAAS,GAAG,GAAG;AACzB,cAAM,oBAAoB,UAAU,MAAM,QAAQ,EAAE,CAAC;AACrD,gBAAQ,SAAS,iBAAiB;AAClC,qBAAa;AAAA,MACjB;AAEA,UAAI,+BAAO,SAAS;AAChB,cAAM,QAAQ,GAAG,wBAAwB,SAAS;AAClD,YAAI,UAAU,YAAY;AACtB,uBAAa,QAAQ,MAAM,YAAY,KAAK;AAC5C,mBAAS;AAAA,QACb;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,WAAO,SAAS,OAAO;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,0BAA0B;AAC1B,UACI,oBAAoB,KAAK,YAAY,mBACrC,aAAoB,KAAK;AAC7B,sBAAkB,QAAQ,eAAa;AACnC,iBAAW,KAAK,mBAAmB,SAAS,EAAE,UAAU,IAAI,KAAK,wBAAwB,SAAS;AAAA,IACtG,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,kBAAkB;AAClB,UACI,KAAO,MACP,OAAO,CAAC;AACZ,OAAG,OAAO,QAAQ,WAAS;AACvB,YAAM,QAAQ,GAAG,wBAAwB,KAAK;AAC9C,UAAI,UAAU,YAAY;AACtB,YAAI,+BAAO,gBAAgB;AACvB,uBAAa,QAAQ,MAAM,MAAM,YAAY,KAAK;AAAA,QACtD,OACK;AACD,eAAK,MAAM,UAAU,IAAI;AAAA,QAC7B;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,WAAO;AAAA,EACX;AAAA,EACA,IAAI,kBAAkB;AAClB,UAAM,EAAE,KAAK,IAAI;AACjB,WAAO,KAAK,OAAO,OAAO,CAAC,QAAQ,UAAU;AACzC,UAAI,aAAa,QAAQ,MAAM,MAAM,UAAU,GAAG;AAC9C,eAAO,MAAM,IAAI,IAAI,KAAK,MAAM,UAAU;AAAA,MAC9C;AACA,aAAO;AAAA,IACX,GAAG,CAAC,CAAC;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,eAAe;AACf,WAAO,QAAQ,KAAK,KAAK,UAAU;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAa,qBAAqB,MAAM,yBAAyB,MAAM,UAAU,MAAM;AAhpE3F,QAAAL;AAipEQ,UACI,KAAK,MACL,EAAE,KAAK,IAAI;AAEf,QAAI,SAAS;AACT,iBAAW,OAAO,SAAS;AACvB,eAAO,KAAK,SAAS,GAAG;AAAA,MAC5B;AAAA,IACJ,OACK;AACD,WAAK,WAAW,CAAC;AAAA,IACrB;AAEA,UAAM,YAAY,aAAa,QAAQ,KAAK,QAAQ;AACpD,SAAK,aAAa;AAClB,QAAI,wBAAwB;AACxB,OAAAA,MAAA,GAAG,WAAH,gBAAAA,IAAW,QAAQ,WAAS;AACxB,qBAAa,MAAM,SAAS,OAAO,EAAE;AACrC,cAAM,MAAM,OAAO,EAAE;AACrB,YAAI,oBAAoB;AACpB,gBAAM,cAAc,MAAM,mBAAmB,EAAE,EAAE;AACjD,gBAAM,MAAM,OAAO,WAAW;AAC9B,uBAAa,MAAM,SAAS,OAAO,WAAW;AAAA,QAClD;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,iBAAiB,KAAK,UAAU;AAC5B,SAAK,KAAK,SAAS,GAAG,IAAI;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc,SAAS,OAAO;AAE1B,SAAK,cAAc;AACnB,SAAK,IAAI,KAAK,KAAK,UAAU,YAAY,MAAM;AAC/C,SAAK,cAAc;AAAA,EACvB;AAAA,EACA,gBAAgB,YAAY;AA1rEhC,QAAAA;AA2rEQ,UACI,KAAyB,MACzB;AAAA,MACI;AAAA,IACJ,IAAI,GAAG,aACP,wBAAyB,aAAa,YAAY,YAAY,kBAAkB,GAChF,UAAyB,CAAC;AAE9B,eAAW,cAAc,uBAAuB;AAC5C,YACI,QAAW,mBAAmB,UAAU,GACxC,YAAWA,MAAA,+BAAO,SAAP,OAAAA,MAAe;AAC9B,cAAQ,QAAQ,IAAI,sBAAsB,UAAU;AAAA,IACxD;AACA,WAAO,GAAG,IAAI,OAAO;AAAA,EACzB;AAAA,EACA,eAAe,YAAY,iBAAiB,cAAc,SAAS,MAAM;AA3sE7E,QAAAA;AA4sEQ,UACI,KAAyB,MACzB,aAAyB,GAAG,aAC5B;AAAA,MACI;AAAA,MACA;AAAA,IACJ,IAAI,YAGJ,wBAAyB,aAAa,YAAY,YAAY,kBAAkB,GAChF,wBAAyB,aAAa,YAAY,GAAG,gBAAgB,GACrE,UAAyB,CAAC,GAG1B,YAAyB,kBAAkB,cAAc,EAAE,WAAW;AAC1E,QAAI,CAAC,aAAa,kBAAkB,uBAAuB;AACvD,aAAO,sBAAsB,cAAc;AAAA,IAC/C;AAEA,eAAW,cAAc,uBAAuB;AAC5C,YACI,QAAW,mBAAmB,UAAU,GACxC,YAAWA,MAAA,+BAAO,SAAP,OAAAA,MAAe;AAO9B,UACI,YAEI,+BAAO,UAAS,UACV,YACC,sBAAsB,UAAU,MAAM,sBAAsB,UAAU,IAEnF;AACE,gBAAQ,QAAQ,IAAI,sBAAsB,UAAU;AAAA,MACxD;AAAA,IACJ;AAEA,UAAM,SAAS,GAAG,IAAI,OAAO;AAC7B,OAAG,aAAa,OAAO,MAAM,SAAS,OAAO,OAAO;AAEpD,WAAO,SAAS,OAAO,QAAQ,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,MAAM,MAAM;AACvE,aAAO,KAAK,IAAI,OAAO;AACvB,aAAO;AAAA,IACX,GAAG,CAAC,CAAC,IAAI,CAAC;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,aAAa;AACb,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,YAAY;AACZ,WAAO,KAAK,OAAO,MAAM,KAAK,MAAM,QAAQ,KAAK,kBAAkB,QAAQ,KAAK,UAAU;AAAA,EAC9F;AAAA,EACA,IAAI,UAAU;AACV,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAI,iBAAiB;AACjB,WAAO,OAAO,KAAK,OAAO,YAAY,KAAK,GAAG,WAAW,YAAY;AAAA,EACzE;AAAA,EACA,OAAO,WAAW,OAAO,KAAK,QAAQ;AAClC,WAAO,aAAa,IAAI,IAAI,aAAa,aAAa,CAAC;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAa;AACT,WAAO,KAAK,YAAY,WAAW;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,KAAK,OAAO;AACf,YAAO,+BAAO,WAAU,MAAM,KAAK,aAAa,SAAS,KAAK,IAAI,MAAM,KAAK,SAAS,GAAG,UAAU,IAAI;AAAA,EAC3G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,IAAI,OAAO;AACP,WAAO,aAAa,kBAAkB,IAAI;AAAA,EAC9C;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,EAmCA,SAAS;AACL,UACI,EAAE,UAAU,mBAAmB,IAAI,MACnC,WAAmC,KAAK;AAC5C,QAAI,sBAAsB,UAAU;AAChC,eAAS,KAAK,YAAY,aAAa,KAAK,sBAAsB,UAAU,IAAI,OAAK,EAAE,OAAO,CAAC;AAAA,IACnG;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,WAAW;AACP,UACI,KAAY,MACZ,YAAY,mBAAmB,KAAK,WAAS,SAAS,GAAG,YAAY,QAAQ,GAC7E,OAAY,YAAY,EAAE,CAAC,GAAG,YAAY,OAAO,GAAI,GAAG,IAAI,CAAC,SAAS,GAAI,GAAG,SAAS,EAAE,IAAI,GAAG;AACnG,WAAO,aAAa,kBAAkB,IAAI;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,kBAAkB;AAClB,WAAO,QAAQ,KAAK,QAAQ;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAiB,WAAW;AA95EhC,QAAAA,KAAA;AA+5EQ,YAAO,MAAAA,MAAA,KAAK,SAAL,gBAAAA,IAAW,iBAAX,mBAA0B;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA,WAAW,gBAAgB,OAAO;AAC9B,UAAM,KAAK;AACX,QAAI,CAAC,GAAG,UAAU;AACd,SAAG,WAAW;AACd,SAAG,KAAK,eAAe,CAAC;AAAA,IAC5B;AACA,QAAI,eAAe;AACf,SAAG,iBAAiB,GAAG,iBAAiB,KAAK;AAAA,IACjD;AACA,OAAG;AAAA,EACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAS,SAAS,OAAO,gBAAgB,OAAO,sBAAsB,MAAM;AACxE,UACI,KAAoB,MACpB,EAAE,cAAc,IAAI,GAAG;AAC3B,QAAI,CAAC,GAAG,UAAU;AACd;AAAA,IACJ;AACA,OAAG;AAIH,OAAG,iBAAiB,GAAG;AACvB,QAAI,GAAG,WAAW,GAAG;AACjB;AAAA,IACJ;AAEA,QAAI,CAAC,aAAa,QAAQ,GAAG,KAAK,YAAY,GAAG;AAC7C,UAAI,EAAE,aAAa,IAAI,GAAG;AAC1B,SAAG,KAAK,eAAe;AAEvB,UAAI,aAAa,aAAa,GAAG;AAC7B,uBAAe,EAAE,GAAG,aAAa;AACjC,WAAG,WAAW,aAAa,aAAa;AACxC,eAAO,aAAa,aAAa;AAAA,MACrC;AACA,SAAG,IAAI,cAAc,YAAY,QAAQ,OAAO,eAAe,QAAW,mBAAmB;AAAA,IACjG;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc;AA1+ElB,QAAAA;AA2+EQ,QAAI,KAAK,UAAU;AACf,YACI,KAAmB,MACnB,EAAE,aAAa,IAAI,GAAG,MACtB,SAAmB,CAAC;AACxB,SAAG,WAAW;AACd,SAAG,KAAK,eAAe;AACvB,SAAG;AACH,UAAI,CAAC,GAAG,eAAe;AAEnB,eAAO,QAAQ,YAAY,EAAE,QAAQ,CAAC,CAAC,KAAK,QAAQ,MAAM;AACtD,iBAAO,GAAG,IAAI;AAAA,YACV;AAAA,YACA,OAAQ,GAAG,GAAG;AAAA,UAClB;AAAA,QACJ,CAAC;AAID,cAAM,QAAQ;AAAA,UACV,QAAU;AAAA,UACV,QAAU;AAAA,UACV,SAAU,CAAC,EAAE;AAAA,UACb,SAAU;AAAA,QACd;AACA,SAAAA,MAAA,GAAG,WAAH,gBAAAA,IAAW;AAAA,UAAQ;AAAA;AAAA;AAAA,YAGf,MAAM,QAAQ,iBAAiB,EAAE,GAAG,MAAM,CAAC;AAAA;AAAA;AAG/C,WAAG;AAAA,UAAc,CAAC,OAAO,WACrB,MAAM,QAAQ,iBAAiB,EAAE,GAAG,OAAO,QAAQ,SAAU,CAAC,MAAM,EAAE,CAAC;AAAA,QAC3E;AAAA,MACJ;AACA,SAAG,iBAAiB,GAAG;AAAA,IAC3B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,oBAAoB,SAAS;AAzhFjC,QAAAA;AA0hFQ,WAAO,GAACA,MAAA,KAAK,WAAL,gBAAAA,IAAa,KAAK,OAAK,EAAE,QAAQ,gBAAgB,EAAE,QAAS,MAAM,QAAQ,CAAC,MAAM;AAAA,EAC7F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,KAAK,QAAQ,MAAM,MAAM;AACrB,UACI,KAAU,MACV,OAAU,aAAa,MAAM,GAAG,IAAI,GACpC,UAAU,GAAG,YAAY,SAGzB,UAAU,aAAa,SAAS,IAAI,IAAK,KAAK,OAAO;AACzD,QAAI;AACJ,QAAI,SAAS,OAAO,UAAU,UAAU;AACpC,WAAK,MAAM,OAAO;AAClB,aAAO,OAAO,MAAM,KAAK;AAAA,IAC7B,OACK;AACD,WAAK;AAAA,IACT;AAIA,QAAI,WAAW,GAAG,UAAU;AACxB,WAAK,WAAW,GAAG,SAAS,IAAI,WAAS,MAAM,KAAK,QAAW,IAAI,CAAC;AAAA,IACxE,OACK;AACD,aAAO,KAAK;AACZ,aAAO,KAAK;AAAA,IAChB;AACA,QAAI,GAAG,MAAM,OAAO,SAAS,SAAS,GAAG;AACrC,YAAM,OAAU,GAAG,OAAO;AAC1B,iBAAW,SAAS,GAAG,MAAM,OAAO,UAAU;AAC1C,aAAK,MAAM,IAAI,IAAI,KAAK,MAAM,IAAI;AAAA,MACtC;AAAA,IACJ;AACA,QAAI,UAAU,OAAO;AAEjB,WAAK,OAAO,IAAI,MAAM,GAAG,WAAW,GAAG,UAAU;AAAA,IACrD;AAEA,UAAM,OAAO,IAAI,GAAG,YAAY,MAAM,MAAM,MAAM,OAAO,IAAI;AAE7D,SAAK,qBAAqB,GAAG;AAC7B,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,SAAS,YAAY,KAAK,QAAQ;AAC9B,UAAM,sBAAsB,CAAC;AAC7B,eAAW,UAAU,QAAQ,CAAC,EAAE,MAAO,UAAU,MAAM;AACnD,UAAI,cAAc,WAAW,YAAY,SAAS;AAC9C,4BAAoB,SAAS,IAAI,MAAM,WAAW,IAAI,SAAS,IAAI,WAAW,SAAS,SAAS;AAAA,MACpG;AAAA,IACJ,CAAC;AACD,SAAK,IAAI,qBAAqB,MAAM,MAAM;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,SAAS,OAAO;AACnB,UACI,KAAqB,MACrB,EAAE,QAAQ,QAAAM,QAAO,IAAI;AAGzB,QAAI,QAAQ;AACR,aAAO,YAAY,EAAE;AAAA,IACzB,YAGSA,WAAA,gBAAAA,QAAQ,WAAU,CAAC,GAAG,cAAc;AAEzC,YAAM,aAAaA,QAAO,MAAM;AAChC,iBAAW,QAAQ,OAAK,EAAE,OAAO,IAAI,QAAQ,OAAO,IAAI,CAAC;AAAA,IAC7D;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,aAAaA,SAAQ,SAAS;AAC1B,WAAO,MAAM,aAAaA,SAAQ,OAAO;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,UAAU;AACV,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,aAAa;AA7oFrB,QAAAN;AA8oFQ,YAAOA,MAAA,KAAK,WAAL,gBAAAA,IAAc;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,OAAO;AAtpFrB,QAAAA,KAAA;AAupFQ,UAAM,KAAK;AACX,QAAI,CAAC,GAAG,UAAU,CAAC,GAAG,OAAO,SAAS,KAAK,GAAG;AAC1C,YAAM,UAAU,KAAK;AACrB,YAAM,SAAS,EAAE;AACjB,UAAI,CAAC,GAAG,QAAQ;AACZ,WAAG,SAAS,CAAC,KAAK;AAAA,MACtB,OACK;AACD,WAAG,OAAO,KAAK,KAAK;AAAA,MACxB;AACA,UAAI,GAAG,kBAAkB,GAAG,eAAe,SAAS,KAAK,GAAG;AACxD,WAAG,eAAe,OAAO,GAAG,eAAe,QAAQ,KAAK,GAAG,CAAC;AAAA,MAChE;AACA,QAAAA,MAAA,GAAG,aAAH,gBAAAA,IAAa,WAAU,GAAG,SAAS,QAAQ,WAAS,MAAM,UAAU,KAAK,CAAC;AAC1E,SAAG,YAAY,oBAAoB,GAAG,cAAc;AAEpD,UAAI,MAAM,QAAQ,CAAC,GAAG,UAAU,GAAC,WAAM,QAAN,mBAAW,cAAa;AACrD,WAAG,aAAa,MAAM,EAAE,EAAE,YAAY,CAAC,GAAG;AAAA,MAC9C;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,OAAO,cAAc,OAAO;AAnrF5C,QAAAA,KAAA;AAorFQ,UACI,KAAK,MACL,EAAE,QAAAM,QAAO,IAAI;AACjB,QAAIA,WAAA,gBAAAA,QAAQ,SAAS,QAAQ;AACzB,UAAI,CAAC,MAAM,cAAc;AACrB,cAAM,WAAW,EAAE;AAEnB,YAAI,CAAC,GAAG,gBAAgB;AACpB,aAAG,iBAAiB,CAAC,KAAK;AAAA,QAC9B,OACK;AACD,aAAG,eAAe,KAAK,KAAK;AAAA,QAChC;AAAA,MACJ;AAGA,OAAC,MAAAN,MAAA,GAAG,sBAAsB,GAAG,aAA5B,gBAAAA,IAAuC,YAAvC,wBAAAA,KAAiD,WAAS,MAAM,YAAY,OAAO,WAAW;AAC/F,MAAAM,QAAO,OAAOA,QAAO,QAAQ,KAAK,GAAG,CAAC;AAEtC,kBAAM,gBAAN,8BAAoB,OAAO;AAE3B,YAAM,qBAAqB,EAAE;AAAA,IACjC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,OAAO;AAntFzB,QAAAN;AAotFQ,QAAI,OAAO;AACP,aAAO,MAAM,SAAS,IAAI;AAAA,IAC9B;AACA,aAAOA,MAAA,KAAK,WAAL,gBAAAA,IAAa,UAAS;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,YAAY;AACZ,WAAO,CAAC,KAAK,cAAc;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,aAAa,cAAc;AA3uF/B,QAAAA;AA4uFQ,UACI,EAAE,KAAK,IAAI,MACX,KAAW,aAAa,MAAM;AAClC,aAAOA,MAAA,KAAK,QAAL,gBAAAA,IAAW,QAAO,KAAK,gBAAgB,IAAI,CAAC,CAAC;AAAA,EACxD;AAAA,EACA,gBAAgB,cAAc,OAAO;AACjC,UACI,EAAE,KAAK,IAAI,MACX,KAAW,aAAa,MAAM;AAClC,QAAI,CAAC,KAAK,KAAK;AACX,WAAK,MAAM,CAAC;AAAA,IAChB;AACA,WAAO,KAAK,IAAI,EAAE,IAAI;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,IAAI,gBAAgB;AAChB,WAAO,iBAAiB,KAAK;AAAA,EACjC;AAAA,EACA,IAAI,gBAAgB;AAChB,WAAO,oBAAoB,KAAK;AAAA,EACpC;AAAA,EACA,IAAI,eAAe;AA5wFvB,QAAAA;AA6wFQ,WAAO,SAAQA,MAAA,KAAK,SAAL,gBAAAA,IAAW,UAAU;AAAA,EACxC;AAAA,EACA,IAAI,YAAY;AACZ,WAAO,KAAK,WAAW,KAAK,UAAU,iBAAiB;AAAA,EAC3D;AAAA;AAAA,EAEA,WAAW,uBAAuB;AAC9B,UAAM,KAAK;AACX,QAAI,CAAC,GAAG,uBAAuB;AAC3B,SAAG,wBAAwB,CAAC;AAC5B,SAAG,UAAU,QAAQ,WAAS;AAC1B,YAAI,CAAC,MAAM,WAAW,MAAM,YAAY;AACpC,aAAG,sBAAsB,MAAM,IAAI,IAAI;AAAA,QAC3C;AAAA,MACJ,CAAC;AAAA,IACL;AACA,WAAO,GAAG;AAAA,EACd;AAAA,EACA,WAAW,oBAAoB;AAC3B,UAAM,KAAK;AACX,QAAI,CAAC,GAAG,oBAAoB;AACxB,SAAG,qBAAqB,CAAC;AACzB,SAAG,UAAU,QAAQ,WAAS;AAC1B,YAAI,MAAM,aAAa;AACnB,aAAG,mBAAmB,KAAK,MAAM,IAAI;AAAA,QACzC;AAAA,MACJ,CAAC;AAAA,IACL;AACA,WAAO,GAAG;AAAA,EACd;AAAA;AAAA,EAEA,IAAI,QAAQ;AACR,WAAO,OAAO,KAAK,OAAO,WAAW,KAAK,GAAG,QAAQ,SAAS,GAAG,IAAI,KAAK;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,kBAAkB,SAAS;AAE9B,UACI,EAAE,MAAM,IAAI,KAAK,OACjB,YAAY,MAAM,MAAM,SAAS,CAAC,GAClC,YAAa,MAAM,MAAM,SAAS,CAAC;AACvC,WAAO,SAAS,SAAS,YAAY,SAAS,sBAAsB,aAAa,kBAAkB,KAAK,QAAQ,OAAO,CAAC;AAAA,EAC5H;AAAA;AAAA,EAEA,iBAAiB,SAAS;AACtB,UACI,EAAE,MAAM,SAAS,IAAiB,MAClC,EAAE,eAAe,aAAa,IAAI,KAAK,aACvC,SAAkC,eAAe,MAAM,iBAAiB,OAAO,IAAI,CAAC;AACxF,QAAI,QAAQ;AACR,iBAAW,SAAS,KAAK,QAAQ;AAC7B,YAAI,MAAM,SAAS;AACf,gBAAM,QAAQ,aAAa,QAAQ,MAAM,MAAM,UAAU;AACzD,cAAI,SAAS,QAAQ,CAAC,MAAM,QAAQ,OAAO,cAAc,MAAM,IAAI,CAAC,GAAG;AACnE,yBAAa,QAAQ,QAAQ,MAAM,YAAY,KAAK,mBAAmB,OAAO,OAAO,CAAC;AAAA,UAC1F;AAAA,QACJ;AAAA,MACJ;AAEA,UAAI,UAAU;AAEV,YAAI,MAAM,QAAQ,QAAQ,GAAG;AACzB,iBAAO,WAAW,CAAC;AACnB,qBAAW,SAAS,UAAU;AAC1B,mBAAO,SAAS,KAAK,MAAM,iBAAiB,OAAO,CAAC;AAAA,UACxD;AAAA,QACJ,OAEK;AACD,iBAAO,WAAW;AAAA,QACtB;AAAA,MACJ;AACA,UAAI,KAAK,gBAAgB;AACrB,eAAO,OAAO;AAAA,MAClB;AACA,aAAO,OAAO;AACd,aAAO,OAAO;AAAA,IAClB;AACA,WAAO;AAAA,EACX;AAAA;AAEJ;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;AAhtEI,cAnKiB,QAmKV,aAAY;AAnKvB,IAAqB,QAArB;AAo3EA,MAAM,WAAW;AACjB,MAAM,qBAAqB;AAC3B,MAAM,mBAAmB;AACzB,MAAM,iBAAiB;AACvB,MAAM,SAAS;;;ACr2Ff,IAAMO,UAAS,OAAO,WAAW,CAAC,KAAK,QAAQ,OAAO,UAAU,eAAe,KAAK,KAAK,GAAG;AAC5F,IAAI,WAAW;AACf,SAAS,UAAU,IAAI,QAAQ;AAC3B,SAAO,eAAe,IAAI,UAAU;AAAA,IAChC,OAAQ;AAAA,EACZ,CAAC;AACD,SAAO;AACX;AACA,IAAM,UAAN,MAAc;AAAA,EACV,YAAY,WAAW;AACnB,SAAK,YAAY;AAAA,EACrB;AAAA,EACA,OAAO,OAAO;AACV,WAAO,KAAK,UAAU,cAAc,KAAK;AAAA,EAC7C;AAAA,EACA,MAAM,OAAO,QAAQ;AACjB,WAAO,KAAK,UAAU,aAAa,OAAO,MAAM;AAAA,EACpD;AAAA,EACA,kBAAkB;AACd,WAAO;AAAA,EACX;AACJ;AAQA,IAAqB,YAArB,MAA+B;AAAA,EAE3B,OAAO,IAAIC,SAAQ;AACf,QAAIA,WAAU,MAAM;AAChB,aAAO,KAAK;AAAA,IAChB;AACA,QAAIA,mBAAkB,MAAM;AACxB,aAAOA;AAAA,IACX;AACA,UACI,MAAO,OAAOA,YAAW,WAAYA,UAAS,KAAK,UAAUA,OAAM,GACnE,QAAQ,KAAK;AACjB,QAAI,MAAM,MAAM,IAAI,GAAG;AACvB,QAAI,CAAC,KAAK;AACN,iBAAW;AACX,YAAM,IAAI,KAAKA,OAAM;AACrB,YAAM,IAAI,KAAK,GAAG;AAAA,IACtB;AACA,WAAO;AAAA,EACX;AAAA,EACA,WAAW,QAAQ;AACf,WAAQD,QAAO,MAAM,QAAQ,KAAK,KAAK,WAAY,KAAK,SAAS,oBAAI,IAAI;AAAA,EAC7E;AAAA,EACA,WAAW,OAAO;AACd,WAAOA,QAAO,MAAM,OAAO,IAAI,KAAK,QAAS,KAAK,QAAQ,IAAI,KAAK,IAAI;AAAA,EAC3E;AAAA,EACA,YAAY,QAAQ;AAChB,UACI,KAAK,MACL,EAAE,gBAAgB,IAAI,GAAG;AAI7B,OAAG,WAAW;AACd,eAAW;AACX,OAAG,WAAW;AACd,QAAI,WAAW,MAAM;AACjB,SAAG,YAAY,IAAI,QAAQ,EAAE;AAAA,IACjC,OACK;AACD,SAAG,UAAU,MAAM;AAEnB,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAAG,gBAAgB,CAAC,GAAG;AAM7D,YAAI,SAAS,QAAQ,gBAAgB,SAAS,GAAG,GAAG;AAChD,aAAG,GAAG,IAAI;AAAA,QACd;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,IAAI,SAAS;AAET,WAAO,UAAU,MAAM,IAAI,KAAK,YAAY,OAAO,IAAI,CAAC;AAAA,EAC5D;AAAA,EACA,cAAc,OAAO;AACjB,WAAQ,SAAS,OAAQ,QAAQ,OAAO,KAAK;AAAA,EACjD;AAAA,EACA,aAAa,OAAO;AAChB,WAAO;AAAA,EACX;AAAA,EACA,OAAO,OAAO;AACV,WAAQ,SAAS,OAAQ,QAAQ,KAAK,UAAU,OAAO,KAAK;AAAA,EAChE;AAAA,EACA,MAAM,OAAO,QAAQ;AACjB,WAAQ,SAAS,OAAQ,QAAQ,KAAK,OAAO,MAAM,OAAO,MAAM;AAAA,EACpE;AAAA,EACA,YAAY,OAAO;AACf,WAAO,KAAK,MAAM,OAAO,IAAI;AAAA,EACjC;AAAA,EACA,kBAAkB;AACd,WAAO,KAAK,UAAU,gBAAgB;AAAA,EAC1C;AACJ;AA3EI,cADiB,WACV,mBAAkB,OAAO,OAAO,CAAC,CAAC;AA4E7C,UAAU,SAAS;;;ACnGnB,IACI,eAAe,aAAa;AADhC,IAEIE,YAAW;AAFf,IAII,eAAe,CAACC,SAAQ,WAAW,IAAI,KAAK,aAAaA,WAAU,QAAW,MAAM;AAJxF,IAKI,cAAc;AALlB,IAMI,eAAe;AACnB,IAAM,eAAN,MAAmB;AAAA,EACf,YAAY,WAAW;AACnB,UACI,KAAK,MACLA,UAAS,UAAU,QAEnB,SAAS,aAAaA,SAAQ;AAAA,MAC1B,uBAAwB;AAAA,IAC5B,CAAC,GACD,WAAW,UAAU,GAAG,WAAW,GAAG,aAAaA,SAAQ;AAAA,MACvD,OAAkB;AAAA,MAClB,UAAkB,UAAU;AAAA,MAC5B,iBAAkB,UAAU;AAAA,IAChC,CAAC,IAAI,MACL,UAAU,UAAU,GAAG,UAAU,GAAG,aAAaA,SAAQ;AAAA,MACrD,OAAQ;AAAA,IACZ,CAAC,IAAI,MACL,UAAU,OAAO,OAAO,GAAG,EAAE,QAAQD,WAAU,EAAE,EAAE,CAAC,GACpD,UAAU,OAAO,OAAO,GAAG,EAAE,QAAQA,WAAU,EAAE,EAAE,CAAC,KAAK;AAC7D,WAAO,OAAO,IAAI,EAAE,UAAU,SAAS,WAAW,SAAS,QAAQ,CAAC;AACpE,OAAG,UAAU;AACb,OAAG,YAAY,aAAa,SAAS,GAAG;AACxC,OAAG,UAAU;AAEb,OAAG,UAAU,IAAI;AAAA,MACb,WAAW,aAAa,OAAO,CAAC,OAC/B,WAAW,OAAO,aAAa,SAAS,IAAI,CAAC,MAAM,OACnD,UAAU,OAAO,aAAa,QAAQ,IAAI,CAAC,MAAM;AAAA,MAClD;AAAA,IAAG;AAAA,EACX;AAAA,EACA,cAAc,OAAO;AACjB,YAAQ,MAAM,QAAQ,KAAK,SAAS,EAAE;AACtC,UAAM,MAAM,MAAM,QAAQ,KAAK,OAAO,IAAI;AAC1C,WAAO,OAAQ,MAAM,SAAS;AAAA,EAClC;AAAA,EACA,MAAM,OAAO,QAAQ;AACjB,QAAI,OAAO,UAAU,UAAU;AAC3B,cAAQ,MAAM,QAAQ,KAAK,SAAS,EAAE,EAAE,QAAQ,KAAK,WAAW,GAAG,EAAE,QAAQ,cAAc,GAAG;AAC9F,cAAQ,SAAS,OAAO,KAAK,IAAI,WAAW,KAAK;AACjD,UAAI,KAAK,UAAU,GAAG,SAAS;AAC3B,iBAAS;AAAA,MACb;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA,EACA,aAAaC,SAAQ,QAAQ;AACzB,UACI,MAAM,aAAaA,SAAQ,MAAM,GACjC,SAAS,aAAaA,SAAQ,OAAO;AAAA,MACjC,IAAI,gBAAgB;AAAA,MACpB,EAAE,OAAQ,UAAU;AAAA,IACxB,CAAC,GACD,OAAO,IAAI,OAAO,CAAC,GACnB,UAAU,OAAO,OAAO,CAAC;AAC7B,WAAO;AAAA,MACH,QAAS,KAAK,WAAW,OAAO;AAAA,MAChC,MAAS,KAAK,QAAQ,SAAS,EAAE,EAAE,KAAK;AAAA,IAC5C;AAAA,EACJ;AACJ;AAoDA,IAAqB,gBAArB,MAAqB,sBAAqB,UAAU;AAAA,EAChD,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EAiBA,aAAa;AACT,SAAK,MAAM;AAAA;AAAA,IAEX;AACA,SAAK,KAAK;AAAA,MACN,SAAW;AAAA,MACX,UAAW;AAAA,MACX,SAAW;AAAA,MACX,MAAW;AAAA,MACX,MAAW;AAAA,IACf;AAAA,EACJ;AAAA,EACA,IAAI,YAAY;AACZ,UACI,QAAS,KAAK,uBACd,SAAS,KAAK,IAAI,IAAI,QAAQ,CAAC;AACnC,WAAQ,SAAS,OACX,OACA,KAAK,GAAG,EAAE,OAAQ,WAAW,uBAAwB,QAAQ,uBAAwB,OAAO,GAAG,WAAW;AAAA,EACpH;AAAA,EACA,UAAU,SAAS;AACf,QAAI,OAAO,YAAY,UAAU;AAC7B,aAAO,OAAO,MAAM,OAAO;AAAA,IAC/B,OACK;AACD,WAAK,WAAW;AAAA,IACpB;AACA,UACI,KAAsB,MACtB,SAAsB,CAAC,GACvB,MAAsB,GAAG,SAAS,sBAAc,QAAQ,GAAG,MAAM,IAAI,sBAAc,QACnF,iBAAsB,2BAAK,cAC3B,EAAE,SAAS,IAAW,IACtB,EAAE,gBAAgB,IAAI,GAAG;AAC7B,QAAI,gBAAgB;AAChB,iBAAW,OAAO,gBAAgB;AAC9B,YAAI,GAAG,GAAG,KAAK,QAAQ,OAAO,eAAe,GAAG,MAAM,YAAY;AAC9D,aAAG,GAAG,IAAI,eAAe,GAAG;AAAA,QAChC;AAAA,MACJ;AAAA,IACJ;AACA,QAAI,UAAU;AACV,YACI,QAAQ,YAAY,KAAK,QAAQ,GACjC,KAAK,MAAM,CAAC,GACZ,KAAK,MAAM,CAAC;AAChB,SAAG,cAAc,CAAC,CAAC,MAAM,CAAC;AAC1B,SAAG,QAAQ,MAAM,CAAC,IAAI,aAAc,MAAM,CAAC,IAAI,YAAY;AAC3D,UAAI,IAAI;AACJ,WAAG,UAAU,CAAC;AAAA,MAClB;AACA,UAAI,OAAO,KAAK;AACZ,WAAG,WAAW,CAAC,GAAG,EAAE;AAAA,MACxB,WACS,MAAM,MAAM;AACjB,WAAG,WAAW,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM;AAAA,MAC7C;AAAA,IACJ;AACA,OAAG,QAAQ,YAAY,MAAM,IAAI;AACjC,OAAG,QAAQ,WAAW,MAAM,KAAK;AACjC,OAAG,QAAQ,eAAe,OAAO,IAAI;AACrC,eAAW,OAAO,iBAAiB;AAC/B,UAAI,GAAG,GAAG,KAAK,MAAM;AACjB,eAAO,GAAG,IAAI,GAAG,GAAG;AAAA,MACxB;AAAA,IACJ;AACA,OAAG,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK;AAChC,OAAG,GAAG,GAAG,KAAK,IAAI,EAAE,GAAG,GAAG,OAAO;AACjC,OAAG,YAAY,aAAa,GAAG,QAAQ,MAAM;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,GAAG,QAAQ,UAAU,MAAM;AACvB,UACI,SAAS,KAAK,gBAAgB,KAAK,EAAE,UAAW,MAAM,GACtD,QAAQ,KAAK;AACjB,QAAI,MAAM,WAAW,MAAM,OAAO;AAClC,QAAI,CAAC,KAAK;AACN,UAAI,OAAO,WAAW,UAAU;AAC5B,eAAO,QAAQ;AAAA,MACnB,OACK;AACD,eAAO,OAAO,QAAQ,MAAM;AAAA,MAChC;AACA,aAAO,OAAO;AACd,YAAM,IAAI,cAAa,MAAM;AAAA,IACjC;AACA,QAAI,SAAS;AACT,YAAM,OAAO,IAAI;AAAA,IACrB;AACA,WAAO;AAAA,EACX;AAAA,EACA,aAAa,OAAO,QAAQ;AACxB,WAAQ,SAAS,OAAQ,QAAS,SAAS,OAAO,KAAK,IAAI,WAAW,KAAK;AAAA,EAC/E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,OAAO;AACV,QAAI,OAAO,UAAU,UAAU;AAC3B,YAAM,IAAI,OAAO,KAAK;AACtB,cAAQ,MAAM,CAAC,IAAI,KAAK,MAAM,KAAK,IAAI;AAAA,IAC3C;AACA,WAAO,MAAM,OAAO,KAAK;AAAA,EAC7B;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,EAyCA,MAAM,OAAO;AACT,WAAO,KAAK,MAAM,KAAK,OAAO,KAAK,CAAC;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAS,OAAO;AACZ,UACI,KAAK,MACL,QAAQ,GAAG,uBACX,EAAE,UAAU,IAAI;AACpB,QAAI,IAAI,GAAG,MAAM,KAAK,GAClB;AACJ,QAAI,WAAW;AACX,UAAI,UAAU,OAAO,CAAC;AACtB,YAAM,EAAE,QAAQ,UAAU,OAAO,OAAO;AACxC,UAAI,MAAM,MAAM,EAAE,SAAS,MAAO,IAAI,OAAO;AACzC,YAAI,EAAE,MAAM,GAAG,MAAM,QAAQ,CAAC;AAAA,MAClC;AACA,UAAI,UAAU,MAAM,CAAC;AAAA,IACzB;AACA,WAAO;AAAA,EACX;AAAA,EACA,kBAAkB;AACd,UAAM,UAAU,MAAM,gBAAgB;AACtC,eAAW,OAAO,SAAS;AAGvB,UAAI,QAAQ,GAAG,MAAM,QAAW;AAC5B,gBAAQ,GAAG,IAAI,KAAK,GAAG;AAAA,MAC3B;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,MAAM,QAAQ,QAAQ;AAC1B,UACI,KAAK,MACL,QAAQ,GAAG,IAAI;AACnB,QAAI,SAAS,MAAM;AACf,YACI,UAAU,aAAa,WAAW,IAAI,GACtC,MAAM,UAAU,OAAO,UACvBC,OAAM,UAAU,OAAO;AAC3B,UAAI,OAAO,UAAU,UAAU;AAC3B,YAAI,QAAQ;AACR,aAAGA,IAAG,IAAI;AAAA,QACd;AACA,YAAI,QAAQ;AACR,aAAG,GAAG,IAAI;AAAA,QACd;AAAA,MACJ,OACK;AACD,WAAGA,IAAG,IAAI,MAAM,CAAC;AACjB,WAAG,GAAG,IAAI,MAAM,CAAC;AAAA,MACrB;AAAA,IACJ;AAAA,EACJ;AACJ;AAAA;AAAA;AAAA;AAAA;AA3OI,cARiB,eAQV,mBAAkB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAnBJ,IAAqB,eAArB;AAoPA,aAAa,SAAS;AACtB,OAAO,OAAO,aAAa,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQlC,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQX,iBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQlB,UAAW;AAAA,EACX,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKP,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQV,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOT,uBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxB,uBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxB,sBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOvB,0BAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO3B,0BAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAY3B,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQd,OAAQ;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,EA+BR,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMX,aAAc;AAClB,CAAC;AACD,UAAU,SAAS,CAACC,SAAQ,UAAU,aAAa,IAAIA,OAAM,EAAE,OAAO,KAAK;AAE3E,sBAAc,IAAI;AAAA,EACd,QAAS,MAAM,aAAa,MAAM,MAAM;AAC5C,CAAC;AACD,aAAa,SAAS;;;AC5dtB,IAAqB,WAArB,MAAqB,UAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1B,YAAY,WAAW,MAAM;AAGzB,QAAI,OAAO,cAAc,YAAY,cAAc,MAAM;AACrD,WAAK,aAAa;AAClB,WAAK,QAAQ;AAAA,IACjB,OACK;AACD,UAAI,OAAO,cAAc,UAAU;AAC/B,eAAO,OAAO,MAAM,WAAW,cAAc,SAAS,CAAC;AAAA,MAC3D;AACA,UAAI,OAAO,cAAc,UAAU;AAC/B,eAAO,OAAO,MAAM,SAAS;AAAA,MACjC;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,YAAY;AACZ,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,UAAU,OAAO;AACjB,SAAK,aAAc,OAAO,UAAU,YAAa;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,IAAI,OAAO;AACP,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,KAAK,OAAO;AACZ,SAAK,QAAQ,WAAW,cAAc,KAAK;AAAA,EAC/C;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,cAAc,QAAQ,QAAQ,WAAW,cAAc,KAAK,KAAK,CAAC;AAAA,EAClF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,eAAe;AAEf,WAAO,KAAK,UAAU,KAAK,MAAM,WAAW,eAAe,KAAK,YAAY,KAAK,KAAK,CAAC,IAAI;AAAA,EAC/F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ,OAAO;AACX,WAAO,QAAQ,KAAK,KAAK,KAAK,cAAc,QAAQ,MAAM,cAAc,QAAQ,KAAK,iBAAiB,MAAM;AAAA,EAChH;AAAA,EACA,SAAS,iBAAiB;AACtB,UACI,KAAiB,MACjB,iBAAiB,kBAAkB,uBAAuB;AAC9D,WAAO,GAAG,UAAU,GAAG,aAAa,IAAI,KAAK,EAAE,OAAO,GAAG,UAAU,CAAC,IAAI,WAAW,cAAc,EAAE,GAAG,OAAO,GAAG,eAAe,CAAC,CAAC,KAAK;AAAA,EAC1I;AAAA,EACA,SAAS;AACL,WAAO,KAAK,SAAS;AAAA,EACzB;AAAA,EACA,UAAU;AACN,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,KAAK,eAAe;AAChB,WAAO,IAAI,UAAS;AAAA,MAChB,MAAY,KAAK;AAAA,MACjB,WAAY,WAAW,GAAG,KAAK,MAAM,KAAK,eAAe,cAAc,YAAY;AAAA,IACvF,CAAC;AAAA,EACL;AACJ;AACA,SAAS,SAAS;;;ACnHlB,IACI,qBAAqB,CAAC,QAAQ,SAAS,iCAAS;AADpD,IAEI,yBAAyB;AAF7B,IAGI,wBAAwB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AA+DJ,IAAqB,oBAArB,MAAqB,0BAAyB,KAAK,MAAM,oBAAY,EAAE;AAAA,EAEnE,WAAW,gBAAgB;AACvB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKH,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,MAKR,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQX,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQX,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMV,eAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhB,IAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUL,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYP,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMX,UAAW;AAAA,IACf;AAAA,EACJ;AAAA,EACA,WAAW,eAAe;AACtB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASH,UAAW;AAAA,IACf;AAAA,EACJ;AAAA,EACA,UAAU,QAAQ;AACd,QAAI,OAAO,WAAW,YAAY;AAC9B,eAAS;AAAA,QACL,UAAW;AAAA,MACf;AAAA,IACJ;AAEA,QAAI,CAAC,OAAO,MAAM;AACd,UAAI,WAAW,OAAO,OAAO,KAAK,KAAM,MAAM,QAAQ,OAAO,KAAK,KAAK,OAAO,MAAM,MAAM,WAAW,MAAM,GAAI;AAC3G,eAAO,OAAO;AAAA,MAClB,WACS,OAAO,iBAAiB,UAAU;AACvC,eAAO,OAAO;AAAA,MAClB;AAAA,IACJ,OAEK;AACD,UAAI,OAAO,SAAS,UAAU,OAAO,SAAS,QAAQ,CAAC,MAAM,QAAQ,OAAO,KAAK,GAAG;AAChF,eAAO,QAAQ,IAAI,KAAK,OAAO,KAAK;AAAA,MACxC,WACS,OAAO,SAAS,cAAc,OAAO,SAAS,QAAQ,CAAC,MAAM,QAAQ,OAAO,KAAK,GAAG;AACzF,eAAO,QAAQ,IAAI,SAAS,OAAO,KAAK;AAAA,MAC5C;AAAA,IACJ;AACA,UAAM,UAAU,MAAM;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,KAAK;AACL,QAAI,CAAC,KAAK,KAAK;AAGX,UAAI,KAAK,UAAU;AACf,aAAK,MAAM,kBAAiB,WAAW,cAAc,KAAK,QAAQ,UAAU;AAAA,MAChF,OACK;AACD,aAAK,MAAM,KAAK,YAAY,kBAAiB,WAAW,WAAW;AAAA,MACvE;AAAA,IACJ;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,GAAG,IAAI;AACP,SAAK,MAAM;AAAA,EACf;AAAA,EACA,SAAS,iBAAiB;AA7N9B,QAAAC;AA8NQ,UAAM,KAAK;AAEX,QAAI,CAAC,GAAG,mBAAiBA,MAAA,GAAG,UAAH,gBAAAA,IAAU,oBAAmB,CAAC,GAAG,MAAM,eAAe;AAC3E,SAAG,MAAM,gBAAgB,IAAI,eAAe;AAAA,IAChD;AAAA,EACJ;AAAA,EACA,IAAI,WAAW;AACX,WAAO,KAAK,aAAa,KAAK;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,SAAS,UAAU;AACnB,SAAK,YAAY;AAAA,EACrB;AAAA,EACA,gBAAgB,WAAW;AACvB,UAAM,KAAK;AACX,QAAI;AAEJ,QAAI,UAAU,SAAS;AACnB,uBAAiB,UAAU,SAAS,GAAG,QAAQ;AAAA,IACnD,WAES,GAAG,eAAe,SAAS,GAAG;AAEnC,uBAAiB,GAAG,eAAe,OAAO,oBAAoB,SAAS;AAAA,IAC3E,OACK;AACD,uBAAiB,UAAU,GAAG,QAAQ;AAAA,IAC1C;AACA,WAAO,GAAG,GAAG,QAAQ,EAAE,GAAG,QAAQ,cAAc,CAAC;AAAA,EACrD;AAAA,EACA,eAAe,UAAU;AACrB,SAAK,iBAAiB,SAAS,MAAM,GAAG;AAExC,SAAK,SAAS,UAAU;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,MAAM,OAAO;AACb,UAAM,KAAK;AACX,OAAG,SAAS;AAEZ,QAAI,MAAM,QAAQ,KAAK,MACnB,EAAE,MAAO,GAAG,UAAW,EAAE,EAAE,GAAG,IAAI,KACjC,MAAM,SAAS,KAAK,OAAO,MAAM,CAAC,MAAM,WAC1C;AACC,SAAG,eAAe,MAAM,IAAI,OAAK,GAAG,QAAQ,CAAC,CAAC;AAAA,IAClD,WACS,CAAC,GAAG,iBAAiB,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,KAAK,OAAO,MAAM,CAAC,MAAM,UAAU;AACpG,SAAG,eAAe,MAAM,IAAI,OAAK,uBAAG,aAAa;AAAA,IACrD,WACS,CAAC,GAAG,iBAAiB,OAAO,UAAU,UAAU;AACrD,SAAG,eAAe,MAAM,YAAY;AAAA,IACxC,OACK;AACD,SAAG,eAAe,GAAG,QAAQ,KAAK;AAAA,IACtC;AAEA,OAAG,SAAS,OAAO;AAAA,EACvB;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,cAAc;AACd,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,SAAS,UAAU;AACnB,SAAK,YAAY;AAEjB,SAAK,SAAS,UAAU;AAAA,EAC5B;AAAA,EACA,IAAI,WAAW;AACX,UAAM,KAAK;AACX,QAAI,GAAG,WAAW;AACd,aAAO,GAAG;AAAA,IACd;AACA,QAAI,MAAM,QAAQ,GAAG,WAAW,GAAG;AAC/B,aAAO;AAAA,IACX;AACA,WAAO,OAAO,GAAG,gBAAgB,WAAW,MAAM;AAAA,EACtD;AAAA,EACA,QAAQ,OAAO;AA1TnB,QAAAA;AA8TQ,QAAI,KAAK,aAAa,cAAc,EAAE,OAAO,KAAK,gBAAgB,YAAY,iBAAiB,OAAO;AAClG,UAAI,KAAK,aAAa,WAAW;AAC7B,gBAAQ,WAAW,UAAU,KAAK;AAAA,MACtC;AAEA,eAAQA,MAAA,+BAAO,cAAP,OAAAA,MAAoB;AAAA,IAChC;AACA,YAAQ,CAAC,KAAK,iBAAkB,OAAO,UAAU,WAAY,MAAM,YAAY,IAAI;AACnF,WAAO;AAAA,EACX;AAAA,EACA,OAAO,WAAW;AACd,WAAO,KAAK,SAAS,SAAS;AAAA,EAClC;AAAA,EACA,WAAW,GAAG;AACV,WAAO,OAAO,CAAC,EAAE,WAAW,KAAK,WAAW;AAAA,EAChD;AAAA,EACA,SAAS,GAAG;AACR,WAAO,OAAO,CAAC,EAAE,SAAS,KAAK,WAAW;AAAA,EAC9C;AAAA,EACA,aAAa,GAAG;AACZ,WAAO,KAAK,YAAY,WAAW,KAAK,KAAK,YAAY,SAAS,CAAC;AAAA,EACvE;AAAA,EACA,gBAAgB,GAAG;AACf,WAAO,CAAC,KAAK,aAAa,CAAC;AAAA,EAC/B;AAAA,EACA,SAAS,GAAG;AACR,WAAO,KAAK,YAAY,WAAW,KAAK,OAAO,CAAC,EAAE,SAAS,KAAK,WAAW;AAAA,EAC/E;AAAA,EACA,eAAe,GAAG;AACd,WAAO,CAAC,KAAK,SAAS,CAAC;AAAA,EAC3B;AAAA,EACA,SAAS,GAAG;AACR,WAAO,WAAW,WAAW,GAAG,KAAK,WAAW;AAAA,EACpD;AAAA,EACA,QAAQ,GAAG;AACP,WAAO,MAAM,KAAK;AAAA,EACtB;AAAA,EACA,IAAI,GAAG;AACH,WAAO,aAAa,QAAQ,GAAG,KAAK,WAAW;AAAA,EACnD;AAAA,EACA,KAAK,GAAG;AACJ,WAAO,CAAC,aAAa,QAAQ,GAAG,KAAK,WAAW;AAAA,EACpD;AAAA,EACA,IAAI,GAAG;AACH,WAAO,aAAa,WAAW,GAAG,KAAK,WAAW;AAAA,EACtD;AAAA,EACA,KAAK,GAAG;AACJ,WAAO,aAAa,WAAW,GAAG,KAAK,WAAW,KAAK,aAAa,QAAQ,GAAG,KAAK,WAAW;AAAA,EACnG;AAAA,EACA,IAAI,GAAG;AACH,WAAO,aAAa,WAAW,GAAG,KAAK,WAAW;AAAA,EACtD;AAAA,EACA,KAAK,GAAG;AACJ,WAAO,aAAa,WAAW,GAAG,KAAK,WAAW,KAAK,aAAa,QAAQ,GAAG,KAAK,WAAW;AAAA,EACnG;AAAA,EACA,IAAI,GAAG;AACH,WAAO,aAAa,UAAU,GAAG,KAAK,WAAW;AAAA,EACrD;AAAA,EACA,QAAQ,GAAG;AACP,UAAM,CAAC,OAAO,GAAG,IAAI,KAAK;AAC1B,YAAQ,aAAa,WAAW,GAAG,KAAK,KAAK,aAAa,QAAQ,GAAG,KAAK,OACrE,aAAa,WAAW,GAAG,GAAG,KAAK,aAAa,QAAQ,GAAG,GAAG;AAAA,EACvE;AAAA,EACA,WAAW,GAAG;AACV,WAAO,CAAC,KAAK,QAAQ,CAAC;AAAA,EAC1B;AAAA,EACA,MAAM,GAAG;AACL,WAAO,MAAM,UAAa,MAAM,QAAQ,OAAO,CAAC,EAAE,WAAW;AAAA,EACjE;AAAA,EACA,SAAS,GAAG;AACR,WAAO,CAAC,KAAK,MAAM,CAAC;AAAA,EACxB;AAAA,EACA,QAAQ,GAAG;AAEP,WAAO,KAAK,QAAQ,CAAC;AAAA,EACzB;AAAA,EACA,WAAW,GAAG;AACV,WAAO,KAAK,QAAQ,CAAC;AAAA,EACzB;AAAA,EACA,YAAY,GAAG;AACX,WAAO,KAAK,QAAQ,CAAC;AAAA,EACzB;AAAA,EACA,WAAW,GAAG;AACV,WAAO,KAAK,QAAQ,CAAC;AAAA,EACzB;AAAA,EACA,WAAW,GAAG;AACV,WAAO,KAAK,QAAQ,CAAC;AAAA,EACzB;AAAA,EACA,WAAW,GAAG;AACV,WAAO,KAAK,QAAQ,CAAC;AAAA,EACzB;AAAA,EACA,YAAY,GAAG;AACX,WAAO,KAAK,QAAQ,CAAC;AAAA,EACzB;AAAA,EACA,YAAY,GAAG;AACX,WAAO,KAAK,QAAQ,CAAC;AAAA,EACzB;AAAA,EACA,YAAY,GAAG;AACX,WAAO,KAAK,QAAQ,CAAC;AAAA,EACzB;AAAA,EACA,WAAW,GAAG;AACV,WAAO,KAAK,QAAQ,CAAC;AAAA,EACzB;AAAA,EACA,WAAW,GAAG;AACV,WAAO,KAAK,QAAQ,CAAC;AAAA,EACzB;AAAA,EACA,WAAW,GAAG;AACV,WAAO,KAAK,QAAQ,CAAC;AAAA,EACzB;AAAA,EACA,aAAa,GAAG;AACZ,WAAO,KAAK,QAAQ,CAAC;AAAA,EACzB;AAAA,EACA,OAAO,GAAG;AACN,WAAO,MAAM;AAAA,EACjB;AAAA,EACA,QAAQ,GAAG;AACP,WAAO,MAAM;AAAA,EACjB;AAAA;AAAA,EAEA,wBAAwB;AACpB,SAAK,eAAe,kBAAiB,qBAAqB,KAAK,SAAS,EACnE,IAAI,CAAAC,UAAQA,MAAK,QAAQ,CAAC;AAAA,EACnC;AAAA,EACA,OAAO,qBAAqB,cAAcC,OAAM,oBAAI,KAAK,GAAG;AACxD,QAAI,YAAY,eAAe,OAAO,aAAa,WAAW,OAAO;AACrE,YAAQ,cAAc;AAAA,MAClB,KAAK;AACD,eAAO,CAAC,WAAW,MAAMA,MAAK,QAAQ,GAAGA,IAAG;AAAA,MAChD,KAAK;AACD,qBAAa,WAAW,MAAMA,MAAK,OAAO;AAC1C,eAAO,CAAC,YAAY,WAAW,IAAI,YAAY,GAAG,KAAK,CAAC;AAAA,MAC5D,KAAK;AACD,qBAAa,WAAW,MAAMA,MAAK,OAAO;AAC1C,eAAO,CAAC,WAAW,IAAI,YAAY,IAAI,KAAK,GAAG,UAAU;AAAA,MAC7D,KAAK;AACD,wBAAgB,WAAW,kBAAkBA,IAAG;AAChD,eAAO,CAAC,eAAe,WAAW,IAAI,eAAe,GAAG,KAAK,CAAC;AAAA,MAClE,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACD,gBAAQ,aAAa,YAAY,EAAE,MAAM,sBAAsB;AAC/D,YAAI,CAAC,OAAO;AACR,gBAAM,IAAI,MAAM,0CAA0C,YAAY,EAAE;AAAA,QAC5E;AACA,SAAC,EAAE,OAAO,QAAQ,IAAI;AACtB,sBAAc,KAAK,QAAQ;AAC3B,oBAAY,WAAW,MAAMA,MAAK,WAAW;AAC7C,YAAI,UAAU,QAAQ;AAClB,sBAAY,WAAW,IAAI,WAAW,GAAG,QAAQ;AAAA,QACrD,WACS,UAAU,QAAQ;AACvB,sBAAY,WAAW,IAAI,WAAW,IAAI,QAAQ;AAAA,QACtD;AACA,eAAO,CAAC,WAAW,WAAW,IAAI,WAAW,GAAG,QAAQ,CAAC;AAAA,IACjE;AAAA,EACJ;AAAA;AAAA,EAEA,OAAO,wBAAwB,SAAS;AACpC,QAAI,CAAC,WAAY,CAAC,QAAQ,UAAU,CAAC,QAAQ,OAAQ;AACjD,aAAO,eAAe;AAAA,IAC1B;AACA,eAAWC,WAAU,SAAS;AAC1B,UAAIA,QAAO,SAAS,UAAU,sBAAsB,SAASA,QAAO,SAAS,GAAG;AAC5E,QAAAA,QAAO,sBAAsB;AAAA,MACjC;AAAA,IACJ;AACA,WAAO,SAAS,WAAW;AACvB,UAAI,QAAQ;AACZ,iBAAWA,WAAU,SAAS;AAE1B,YAAI,CAACA,QAAO,UAAU;AAClB,kBAAQA,QAAO,OAAO,SAAS;AAAA,QACnC;AACA,YAAI,CAAC,OAAO;AACR;AAAA,QACJ;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAAA,EACJ;AACJ;AA9ZI,cADiB,mBACV,SAAQ;AADnB,IAAqB,mBAArB;AAgaA,iBAAiB,SAAS;;;ACpf1B,IAAMC,YAAW,aAAa,eAAe,YAAY,oBAAoB,uBAAO,OAAO,IAAI,CAAC;AAOhG,IAAqB,WAArB,MAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1B,OAAO,WAAW,SAAS,eAAe;AAGtC,WAAO,UAAUA,UAAS,MAAM,KAAKA,UAAS,MAAM,KAAK,KAAK;AAAA,EAClE;AACJ;AACA,SAAS,SAAS;;;ACmBlB,IAAqB,mBAArB,cAA8C,KAAK;AAAA,EAC/C,WAAW,gBAAgB;AACvB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKH,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMX,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASZ,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQT,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMV,IAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeL,eAAgB;AAAA,IACpB;AAAA,EACJ;AAAA,EACA,UAAU,QAAQ;AACd,QAAI,OAAO,WAAW,YAAY;AAC9B,eAAS;AAAA,QACL,QAAS;AAAA,MACb;AAAA,IACJ;AACA,UAAM,UAAU,MAAM;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,KAAK;AACL,WAAO,KAAK,QAAQ,KAAK,MAAM,KAAK,YAAY,SAAS,WAAW,UAAU;AAAA,EAClF;AAAA,EACA,IAAI,GAAG,IAAI;AACP,SAAK,MAAM;AAAA,EACf;AAAA,EACA,IAAI,OAAO,QAAQ;AACf,SAAK,UAAU;AAAA,EACnB;AAAA,EACA,IAAI,SAAS;AACT,QAAI,KAAK,SAAS;AACd,aAAO,KAAK;AAAA,IAChB;AACA,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc,KAAK,KAAK;AACpB,UACI,KAAuC,MACvC,EAAE,SAAS,UAAU,cAAc,IAAI,IACvC,aAAuC,GAAG,UAAU,YAAY,MAAM,SAAS,KAAK;AACxF,UAAM,IAAI,QAAQ;AAClB,UAAM,IAAI,QAAQ;AAClB,QAAI,SAAS;AACT,YAAM,QAAQ,GAAG;AACjB,YAAM,QAAQ,GAAG;AAAA,IACrB;AACA,QAAI,iBAAiB,OAAO,QAAQ,OAAO,QAAQ,OAAO,QAAQ,UAAU;AAExE,UAAI,kBAAkB,MAAM;AACxB,eAAO,OAAO,GAAG,EAAE,cAAc,GAAG;AAAA,MACxC;AAEA,UAAI,OAAO,kBAAkB,UAAU;AACnC,eAAO,OAAO,GAAG,EAAE,cAAc,KAAK,aAAa;AAAA,MACvD;AAEA,UAAI,OAAO,kBAAkB,UAAU;AACnC,eAAO,OAAO,GAAG,EAAE,cAAc,KAAK,cAAc,QAAQ,aAAa;AAAA,MAC7E;AAAA,IACJ;AACA,YAAS,MAAM,MAAO,IAAK,MAAM,MAAM,KAAK,KAAM;AAAA,EACtD;AAAA,EACA,OAAO,qBAAqB,SAAS,YAAY;AAC7C,UAAMC,SAAQ,QAAQ,eAAe,QAAQ,SAAS,SAClD,IAAIA,OAAM;AACd,WAAO,CAAC,KAAK,QAAQ;AACjB,UAAI,MAAM;AACV,WAAK,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AACpB,eAAOA,OAAM,CAAC,EAAE,OAAO,KAAK,GAAG;AAC/B,YAAI,MAAM;AACN,iBAAO;AAAA,QACX;AAAA,MACJ;AACA,aAAO,aAAa,WAAW,KAAK,GAAG,IAAI;AAAA,IAC/C;AAAA,EACJ;AACJ;AACA,iBAAiB,SAAS;;;ACnK1B,IACI,UAA0B,MAAM;AADpC,IAEI,uBAA0B,CAAC,GAAG,MAAM,IAAI;AAF5C,IAGI,0BAA0B,OAAO,yBAAyB;AAH9D,IAIIC,cAA0B,OAAO,OAAO,CAAC,CAAC;AAJ9C,IAKI,YAA0B,OAAO,OAAO;AAAA,EACpC,QAAW;AAAA,EACX,OAAWA;AAAA,EACX,SAAWA;AAAA,EACX,UAAWA;AACf,CAAC;AAVL,IAWI,cAA0B,OAAO,OAAO;AAAA,EACpC,QAAW;AAAA,EACX,OAAWA;AAAA,EACX,SAAWA;AAAA,EACX,UAAWA;AACf,CAAC;AAhBL,IAiBI,WAAyB;AAAA,EACrB,QAAS;AAAA,EACT,QAAS;AACb;AAEJ,SAAS,eAAe,MAAM,OAAO,KAAK,kBAAkB;AAExD,MAAI,MAAM,WAAW,OAAO;AACxB,UAAM,IAAI,KAAK,IAAI;AAEnB,QAAI,kBAAkB;AAClB,YAAM;AAAA,IACV;AAAA,EACJ,OAEK;AACD,QAAI,MAAM,MAAM,IAAI,GAAG;AAEvB,QAAI,CAAC,KAAK;AACN,YAAM,oBAAI,IAAI;AACd,YAAM,IAAI,KAAK,GAAG;AAAA,IACtB;AAEA,QAAI,IAAI,IAAI;AAAA,EAChB;AACJ;AAEA,SAAS,oBAAoB,MAAM,OAAO,KAAK;AAE3C,MAAI,MAAM,WAAW,OAAO;AACxB,UAAM,OAAO,GAAG;AAAA,EACpB,WACS,MAAM,IAAI,GAAG,GAAG;AAErB,UAAM,IAAI,GAAG,EAAE,OAAO,IAAI;AAE1B,QAAI,CAAC,MAAM,IAAI,GAAG,EAAE,MAAM;AACtB,YAAM,OAAO,GAAG;AAAA,IACpB;AAAA,EACJ;AACJ;AAGA,SAAS,iBAAiB,QAAQ,SAAS,UAAU,YAAY,yBAAyB,OAAO;AAC7F,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,UAAM,OAAO,OAAO,CAAC;AACrB,aAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACjC,YACI,UAAU,SAAS,CAAC,GACpB,MAAU,KAAK,OAAO,GACtB,QAAU,QAAQ,OAAO;AAC7B,qBAAe,MAAM,OAAO,KAAK,CAAC,0BAA0B,MAAM,WAAW;AAAA,IACjF;AAAA,EACJ;AACJ;AAgBA,IAAqB,aAArB,MAAqB,oBAAmB,KAAK,MAAM,cAAM,EAAE;AAAA,EAA3D;AAAA;AACI,yCAAgB;AAChB,wCAAe;AAAA;AAAA;AAAA,EAEf,WAAW,eAAe;AACtB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMH,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYb,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMZ,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMb,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOX,SAAU;AAAA,QACN,SAAU,CAAC,MAAM;AAAA,QACjB,OAAU,CAAC;AAAA,MACf;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,IAAI,eAAe;AACf,WAAO;AAAA,EACX;AAAA;AAAA;AAAA,EAGA,UAAU,QAAQ;AASd,SAAK,aAAa;AAClB,SAAK,UAAU,CAAC;AAChB,UAAM,UAAU,MAAM;AAAA,EAC1B;AAAA,EACA,YAAY;AAlKhB,QAAAC;AAmKQ,UAAM,UAAU;AAChB,UAAM,KAAK;AACX,OAAG,QAAQ,SAAS;AACpB,QAAI,GAAG,YAAY;AACf,SAAG,gBAAgB,SAAS;AAC5B,SAAG,QAAQ,QAAQ;AAAA,IACvB;AACA,KAAAA,MAAA,GAAG,aAAH,gBAAAA,IAAa;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ;AACJ,UACI,KAAU,MACV,UAAU,GAAG,QAAQ,MAAM;AAC/B,QAAI,GAAG,YAAY;AACf,SAAG,QAAQ,SAAS;AACpB,UAAI,GAAG,iBAAiB;AACpB,WAAG,gBAAgB,SAAS;AAAA,MAChC;AACA,SAAG,kBAAkB;AAErB,SAAG;AACH,SAAG,QAAQ,UAAU;AAAA,QACjB,QAAS;AAAA,QACT;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,OAAOC,MAAK;AACf,QAAI,MAAM,cAAc;AACpB,cAAQ,MAAM;AAAA,IAClB;AACA,QAAI,MAAM,WAAW,KAAK,OAAO;AAC7B,UAAI,EAAE,OAAO,IAAI;AACjB,UAAIA,MAAK;AACL,gBAAQ,MAAM,IAAIA,IAAG;AACrB,iBAAS,OAAO,IAAIA,IAAG;AAAA,MAC3B;AACA,aAAO,YAAY,MAAM,OAAO,MAAM,EAAE,OAAO,WAAW,KAAK;AAAA,IACnE;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,cAAc,EAAE,QAAQ,gBAAgB,SAAS,OAAO,eAAe,MAAM,GAAG;AAC5E,UAAM,KAAK;AACX,QAAI,gBAAgB;AAKpB,QAAI,GAAG,cAAc,CAAC,cAAc;AAChC,YAAM,iBAAiB,QAAQ,cAAc;AAE7C,UAAI,CAAC,gBAAgB;AACjB,yBAAiB,OAAO,MAAM;AAC9B,iBAAS;AAAA,MACb,WAES,QAAQ;AACb,yBAAiB,GAAG;AACpB,WAAG,UAAU,OAAO,MAAM;AAAA,MAC9B;AACA,+BAAyB,GAAG;AAC5B,SAAG,kBAAkB,eAAe,MAAM;AAAA,IAC9C,OACK;AACD,uBAAiB,GAAG;AACpB,SAAG,UAAU,OAAO,MAAM;AAC1B,uBAAiB;AACjB,UAAI,GAAG,cAAc,gBAAgB,GAAG,YAAY;AAChD,WAAG,kBAAkB;AACrB,WAAG,kBAAkB,GAAG,QAAQ,OAAO,GAAG,cAAc;AAAA,MAC5D,WACS,GAAG,iBAAiB;AACzB,WAAG,gBAAgB,SAAS;AAAA,MAChC;AAAA,IACJ;AACA,OAAG,kBAAkB;AACrB,OAAG,eAAe;AAElB,OAAG;AACH,QAAI,CAAC,QAAQ;AACT,SAAG,QAAQ,UAAU;AAAA,QACjB,QAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EACA,IAAI,OAAO,QAAQ;AAEf,SAAK,kBAAkB;AACvB,SAAK,OAAO,GAAG,KAAK,QAAQ,QAAQ,MAAM;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,SAAS;AACT,WAAO,KAAK,aAAa,KAAK,kBAAkB,KAAK;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,iBAAiB;AACjB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAIA,CAAC,OAAO,QAAQ,IAAI;AAChB,WAAO,KAAK,OAAO,OAAO,QAAQ,EAAE;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQC,KAAI,gBAAgB,OAAO;AAC/B,KAAC,KAAK,cAAc,CAAC,gBAAgB,KAAK,kBAAkB,KAAK,SAAS,QAAQA,GAAE;AAAA,EACxF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAIA,KAAI,gBAAgB,OAAO;AAC3B,YAAQ,KAAK,cAAc,CAAC,gBAAgB,KAAK,kBAAkB,KAAK,SAAS,IAAIA,GAAE;AAAA,EAC3F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAOA,KAAI,gBAAgB,OAAO,cAAc,CAAC,GAAG;AAChD,YAAQ,KAAK,cAAc,CAAC,gBAAgB,KAAK,kBAAkB,KAAK,SAAS,OAAOA,KAAI,WAAW;AAAA,EAC3G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAKA,KAAI,gBAAgB,OAAO;AAC5B,YAAQ,KAAK,cAAc,CAAC,gBAAgB,KAAK,kBAAkB,KAAK,SAAS,KAAKA,GAAE;AAAA,EAC5F;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAK,OAAO,CAAC;AAAA,EACxB;AAAA,EACA,IAAI,OAAO;AACP,WAAO,KAAK,OAAO,KAAK,QAAQ,CAAC;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,YAAY;AACZ,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,cAAc;AACd,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,MAAM,OAAO,cAAc,MAAM;AAC7B,UACI,KAAc,MACd,EAAE,QAAQ,IAAI,IACd,WAAc,CAAC;AAEnB,OAAG,QAAQ,UAAQ;AACf,YAAM,cAAc,MAAM,IAAI,KAAK,IAAI,IAAI;AAG3C,UAAI,aAAa;AACb,cACI,QAAc,GAAG,QAAQ,MAAM,IAAI,GACnC,cAAc,QAAQ,KAAK;AAE/B,gBAAQ,KAAK,IAAI;AAEjB,WAAG,kBAAkB,WAAW;AAChC,WAAG,aAAa,WAAW;AAAA,MAC/B,WACS,aAAa;AAClB,iBAAS,KAAK,IAAI;AAAA,MACtB;AAAA,IACJ,CAAC;AACD,QAAI,SAAS,QAAQ;AACjB,SAAG,OAAO,QAAQ;AAAA,IACtB;AAEA,QAAI,GAAG,YAAY;AACf,SAAG,kBAAkB,GAAG,QAAQ,OAAO,GAAG,cAAc;AAAA,IAC5D;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAOC,QAAO;AACV,QAAIA,OAAM,WAAW,GAAG;AACpB,WAAK,OAAO,KAAK,QAAQ,QAAQ,MAAM,GAAGA,MAAK;AAAA,IACnD,OACK;AACD,WAAK,OAAO,KAAK,QAAQ,QAAQ,MAAMA,MAAK;AAAA,IAChD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,UAAUA,QAAO;AACb,QAAIA,OAAM,WAAW,GAAG;AACpB,WAAK,OAAO,GAAG,GAAGA,MAAK;AAAA,IAC3B,OACK;AACD,WAAK,OAAO,GAAGA,MAAK;AAAA,IACxB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,KAAKA,QAAO,YAAY;AACpB,IAAAA,SAAQ,YAAY,QAAQA,MAAK;AAEjC,WAAOA,OAAM,UAAUA,OAAM,CAAC,MAAM,YAAY;AAC5C,MAAAA,OAAM,MAAM;AAAA,IAChB;AACA,QAAI,CAACA,OAAM,QAAQ;AACf;AAAA,IACJ;AACA,UACI,KAAc,MACd,EAAE,QAAQ,IAAI,IACd,YAAc,GAAG,QAAQA,OAAM,CAAC,GAAG,IAAI;AAE3C,QAAIA,OAAM,WAAW,KAAK,QAAQ,YAAY,CAAC,MAAM,YAAY;AAC7D;AAAA,IACJ;AAEA,OAAG,cAAc;AACjB,OAAG,OAAOA,MAAK;AACf,OAAG,aAAa;AAChB,UAAM,cAAc,aAAa,GAAG,QAAQ,YAAY,IAAI,IAAI,QAAQ;AACxE,QAAI,gBAAgB,IAAI;AACpB,YAAM,IAAI,MAAM,oEAAoE;AAAA,IACxF;AACA,YAAQ,OAAO,aAAa,GAAG,GAAGA,MAAK;AACvC,OAAG,kBAAkB;AACrB,OAAG,QAAQ,UAAU;AAAA,MACjB,QAAS;AAAA,MACT,OAAAA;AAAA,MACA,MAAS;AAAA,MACT,IAAS;AAAA,IACb,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAO,QAAQ,GAAG,aAAa,OAAO;AAClC,UACI,KAAa,MACb,aAAa,GAAG,YAChB,SAAa,GAAG,SAChB,SAAa,CAAC,GACd,UAAa,CAAC,GACd,WAAa,CAAC,GACd,WAAa,GAAG;AACpB,QAAI,OACA;AACJ,SAAI,+BAAO,YAAW,KAAK,MAAM,QAAQ,MAAM,CAAC,CAAC,GAAG;AAChD,cAAQ,MAAM,CAAC;AAAA,IACnB;AAOA,QAAI,GAAG,QAAQ,gBAAgB,EAAE,OAAO,UAAU,MAAM,CAAC,MAAM,OAAO;AAClE;AAAA,IACJ;AACA,QAAI,OAAO;AAEP,UAAI,YAAY,MAAM,QAAQ;AAE1B,cAAM,UAAU,GAAG,QAAQ,UAAU;AACrC,gBAAQ,CAAC;AACT,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,gBACI,UAAgB,MAAM,CAAC,GACvB,KAAgB,QAAQ,UAAU,GAClC,eAAgB,QAAQ,IAAI,EAAE,GAC9B,gBAAgB,eAAe,OAAO,QAAQ,YAAY,IAAI;AAElE,iBAAO,EAAE,IAAI;AAGb,cAAI,kBAAkB,IAAI;AAEtB,gBAAI,OAAO,aAAa,MAAM,SAAS;AACnC,uBAAS,KAAK,CAAC,OAAO,aAAa,GAAG,OAAO,CAAC;AAC9C,qBAAO,aAAa,IAAI;AAAA,YAC5B;AAAA,UACJ,OACK;AACD,kBAAM,KAAK,OAAO;AAAA,UACtB;AAAA,QACJ;AAAA,MACJ,OAEK;AACD,gBAAQ;AAAA,MACZ;AAAA,IACJ;AACA,QAAI,UAAU;AAEV,UAAI,OAAO,aAAa,UAAU;AAE9B,mBAAW,KAAK,IAAI,UAAU,OAAO,SAAS,KAAK;AACnD,iBAAS,cAAc,OAAO,UAAU,EAAE,UAAU;AAChD,gBAAM,KAAK,OAAO,WAAW,EAAE,UAAU;AAEzC,cAAI,OAAO,EAAE,GAAG;AACZ;AACA;AAAA,UACJ,OAEK;AACD,oBAAQ,KAAK,OAAO,WAAW,CAAC;AAChC,mBAAO,OAAO,aAAa,CAAC;AAC5B,sBAAU;AAAA,UACd;AAAA,QACJ;AAAA,MACJ,OAEK;AACD,YAAI,aAAa,MAAM,WAAW,GAC9B;AACJ,mBAAW,YAAY,QAAQ,QAAQ;AAGvC,cAAM,gBAAgB,SAAS,OAAO,CAAC,QAAQ,SAAS;AACpD,gBACI,YAAY,OAAO,SAAS,UAC5B,MAAY,YAAY,OAAO,GAAG,QAAQ,MAAM,IAAI;AAExD,cAAI,eAAe,WAAW,QAAQ,QAAQ,UAAU,KAAK,YAAY;AACrE,yBAAa;AAAA,UACjB;AAEA,cAAI,OAAO,KAAK,MAAM,UAAU;AAC5B,mBAAO,KAAK,GAAG;AAAA,UACnB;AACA,oBAAU;AACV,iBAAO;AAAA,QACX,GAAG,CAAC,CAAC,EAAE,KAAK,oBAAoB;AAEhC,YAAI,YAAY;AAGZ,cAAI,cAAc,QAAQ;AACtB,oBAAQ,KAAK,MAAM,SAAS,QAAQ;AACpC,mBAAO,OAAO,cAAc,cAAc,SAAS,CAAC,GAAG,cAAc,MAAM;AAC3E,sBAAU;AAAA,UACd;AAAA,QACJ,OACK;AAGD,mBAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC3C,kBAAM,cAAc,cAAc,CAAC;AACnC,gBAAI,gBAAgB,IAAI;AACpB,oBAAM,KAAK,OAAO,WAAW,EAAE,UAAU;AAEzC,kBAAI,CAAC,OAAO,EAAE,GAAG;AACb,wBAAQ,QAAQ,OAAO,WAAW,CAAC;AACnC,uBAAO,OAAO,aAAa,CAAC;AAC5B,0BAAU;AAAA,cACd;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAEA,UAAI,QAAQ,UAAU,CAAC,GAAG,iBAAiB;AACvC,gBAAQ,QAAQ,GAAG,mBAAmB,EAAE;AAAA,MAC5C;AAAA,IACJ;AAEA,QAAI,MAAM,QAAQ;AACd,aAAO,OAAO,KAAK,IAAI,OAAO,OAAO,MAAM,GAAG,GAAG,GAAG,KAAK;AACzD,gBAAU;AAEV,UAAI,CAAC,GAAG,iBAAiB;AACrB,cAAM,QAAQ,GAAG,cAAc,EAAE;AAAA,MACrC;AACA,UAAI,CAAC,GAAG,cAAc;AAClB,WAAG,eAAe,oBAAI,IAAI;AAAA,MAC9B;AACA,iBAAW,SAAS,OAAO;AACvB,WAAG,aAAa,IAAI,KAAK;AAAA,MAC7B;AAAA,IACJ;AACA,QAAI,QAAQ,UAAU,GAAG,cAAc;AACnC,iBAAW,SAAS,SAAS;AACzB,WAAG,aAAa,OAAO,KAAK;AAAA,MAChC;AAAA,IACJ;AAEA,QAAI,SAAS,UAAU,CAAC,GAAG,iBAAiB;AACxC,eAAS,QAAQ,SAAO;AACpB,WAAG,kBAAkB,IAAI,CAAC,CAAC;AAC3B,WAAG,aAAa,IAAI,CAAC,CAAC;AAAA,MAC1B,CAAC;AAAA,IACL;AAGA,QAAI,WAAW,SAAS,QAAQ;AAE5B,UAAI,GAAG,UAAU;AACb,WAAG,iBAAiB;AAAA,MACxB,WAES,GAAG,YAAY;AACpB,YAAI,GAAG,YAAY;AACf,aAAG,iBAAiB,EAAE,QAAS,UAAU,UAAW,EAAE,CAAC;AAAA,QAC3D,OACK;AACD,aAAG,gBAAgB,OAAO,KAAK,IAAI,OAAO,GAAG,gBAAgB,MAAM,GAAG,GAAG,GAAG,KAAK;AAAA,QACrF;AAAA,MACJ;AAEA,SAAG;AAeH,SAAG,QAAQ,UAAU;AAAA,QACjB,QAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,IACL,OACK;AAWD,SAAG,QAAQ,YAAY;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS,MAAM,OAAO;AAClB,UACI,KAAiB,MACjB,EAAE,WAAW,IAAI,IACjB,QAAiB,SAAS,OAAO,IAAI,IAAI,OAAO,KAAK,UAAU,GAC/D,SAAiB,GAAG,IAAI,KAAK;AACjC,QAAI,QAAQ;AACR,YAAM,iBAAiB,GAAG,IAAI,KAAK;AACnC,UAAI,kBAAkB,WAAW,gBAAgB;AAC7C,cAAM,IAAI,MAAM,uBAAuB,KAAK,oCAAoC,KAAK,EAAE;AAAA,MAC3F;AACA,SAAG,iBAAiB,MAAM,YAAY,KAAK;AAC3C,SAAG,cAAc,MAAM,YAAY,KAAK;AAExC,aAAO,UAAU,IAAI;AAAA,IACzB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAI,IAAI,gBAAgB,OAAO;AAC3B,WAAO,KAAK,MAAM,KAAK,YAAY,IAAI,aAAa;AAAA,EACxD;AAAA,EACA,MAAM,OAAO,gBAAgB,OAAO;AAChC,QAAI,KAAK,cAAc,CAAC,eAAe;AACnC,aAAO,KAAK,gBAAgB,KAAK;AAAA,IACrC,OACK;AACD,aAAO,KAAK,QAAQ,KAAK;AAAA,IAC7B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,cAAc,OAAO,gBAAgB,OAAO;AAC9C,WAAO,KAAK,SAAS,cAAc,OAAO,KAAK,cAAc,aAAa;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,QAAQ;AACR,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,aAAa;AACb,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,YAAY;AACzB,SAAK,SAAS,EAAE,UAAW,YAAY,QAAS,KAAK,CAAC;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAc,SAAS;AACnB,WAAO,IAAI,YAAW;AAAA,MAClB,QAAoB,YAAY,QAAQ,OAAO;AAAA,MAC/C,mBAAoB;AAAA,QAChB,QAAU;AAAA,QACV,SAAU;AAAA,MACd;AAAA,IACJ,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA,UAAU,QAAQ;AACd,UAAM,SAAU,kBAAkB,mBAAoB,SAAS,IAAI,iBAAiB,MAAM;AAC1F,SAAK,QAAQ,IAAI,MAAM;AACvB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,WAAW;AA91BnB,QAAAH;AA+1BQ,WAAO,SAAQA,MAAA,KAAK,aAAL,gBAAAA,IAAe,KAAK;AAAA,EACvC;AAAA,EACA,mBAAmB;AACf,UAAM,KAAK;AACX,OAAG,gBAAgB;AACnB,OAAG,eAAe;AAClB,OAAG,QAAQ,KAAK,GAAG,YAAY;AAC/B,OAAG,QAAQ,UAAU,SAAS;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,eAAe;AACf,QAAI,CAAC,KAAK,eAAe;AACrB,UAAI,KAAK,UAAU;AACf,aAAK,gBAAgB,iBAAiB,qBAAqB,KAAK,QAAQ,MAAM;AAAA,MAClF,OACK;AACD,aAAK,gBAAgB;AAAA,MACzB;AAAA,IACJ;AACA,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,UAAU;AACV,QAAI,CAAC,KAAK,UAAU;AAChB,WAAK,WAAW,IAAI,YAAW;AAAA,QAC3B,mBAAoB;AAAA,UAChB,QAAU;AAAA,UACV,SAAU;AAAA,QACd;AAAA,MACJ,CAAC;AAAA,IACL;AACA,WAAO,KAAK;AAAA,EAChB;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,EAyBA,UAAUI,SAAQ;AACd,UAAM,SAAUA,mBAAkB,mBAAoBA,UAAS,IAAI,iBAAiBA,OAAM;AAC1F,SAAK,QAAQ,IAAI,MAAM;AACvB,WAAO;AAAA,EACX;AAAA,EACA,aAAaA,SAAQ;AACjB,UAAM,EAAE,QAAQ,IAAI;AACpB,QAAI,CAACA,QAAO,oBAAoB;AAC5B,MAAAA,UAAS,QAAQ,IAAIA,OAAM;AAAA,IAC/B;AACA,YAAQ,OAAOA,OAAM;AAAA,EACzB;AAAA,EACA,eAAe;AACX,SAAK,QAAQ,MAAM;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,aAAa;AACb,WAAO,QAAQ,KAAK,YAAY,KAAK,SAAS,KAAK;AAAA,EACvD;AAAA,EACA,iBAAiB,EAAE,QAAQ,SAAU,MAAM,SAAS,GAAG;AACnD,UACI,KAAc,MACd,aAAc,YAAa,WAAW,WAAW,KAAK,SAAU,GAAG,kBAAkB,GAAG;AAC5F,OAAG,kBAAkB;AACrB,OAAG,kBAAkB,GAAG,QAAQ,OAAO,GAAG,cAAc;AACxD,OAAG,kBAAkB;AACrB,UAAM;AAAA,MACF,OAAW;AAAA,MACX,UAAW;AAAA,IACf,IAAI,YAAY,MAAM,GAAG,iBAAiB,YAAY,IAAI;AAC1D,OAAG,QAAQ,UAAU,EAAE,GAAG,aAAa,OAAO,QAAQ,CAAC;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,iBAAiB;AACjB,QAAI,CAAC,KAAK,iBAAiB;AACvB,UAAI,KAAK,YAAY;AACjB,aAAK,kBAAkB,iBAAiB,wBAAwB,KAAK,QAAQ,MAAM;AAAA,MACvF,OACK;AACD,aAAK,kBAAkB,eAAe;AAAA,MAC1C;AAAA,IACJ;AACA,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA,EAGA,gBAAgB,WAAW;AACvB,UAAM,OAAO,YAAY,QAAQ,SAAS;AAE1C,WAAO,KAAK,IAAI,YAAU;AACtB,UAAI,OAAO,WAAW,UAAU;AAC5B,eAAO,EAAE,UAAW,QAAQ,QAAS,KAAK;AAAA,MAC9C;AACA,aAAO;AAAA,IACX,CAAC;AAAA,EACL;AAAA,EACA,gBAAgB,WAAW;AACvB,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACvC,WAAK,SAAS,UAAU,CAAC,CAAC;AAAA,IAC9B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,SAAS,aAAa;AAClB,UAAM,KAAK;AAEX,QAAI,aAAa;AACb,OAAC,GAAG,aAAa,GAAG,WAAW,CAAC,IAAI,YAAY,QAAQ,IAAI,oBAAI,IAAI;AAEpE,aAAO,OAAO,GAAG,SAAS,YAAY,QAAQ,GAAG,WAAW;AAE5D,SAAG,kBAAkB;AACrB,UAAI,YAAY,aAAa;AACzB,WAAG,oBAAoB;AAAA,MAC3B;AAAA,IAiBJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,UAAU,cAAc,OAAO,gBAAgB,OAAO;AAClD,UAAM,OAAO,KAAK,SAAS,cAAc,OAAO,aAAa;AAC7D,QAAI,CAAC,MAAM;AACP,aAAO;AAAA,IACX;AACA,UAAM,SAAS,KAAK,cAAc,CAAC,gBAAgB,KAAK,kBAAkB,KAAK;AAC/E,WAAO,OAAO,QAAQ,IAAI;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,SAAS,cAAc,OAAO,gBAAgB,OAAO;AAxjCzD,QAAAJ;AAyjCQ,UACI,KAAiB,MACjB,EAAE,WAAW,IAAI,IACjB,QAAiB,cAAc,CAAC,gBAC1B,GAAG,QAAQ,uBAAuB,EAAE,YAAY,IAChD,GAAG,QAAQ,YAAY;AACjC,QAAI,OAAO;AAIP,YAAM,QAAOA,MAAA,MAAM,IAAI,KAAK,MAAf,OAAAA,MAAsB,OAAO,UAAU,YAAY,MAAM,UAAU,CAAC,MAAM,KAAK,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,KAAM;AAC9H,UAAI,QAAQ,MAAM;AACd,eAAO;AAAA,MACX;AAAA,IACJ,OACK;AAED,YACI,SAAS,cAAc,CAAC,gBAAgB,GAAG,kBAAkB,GAAG,SAChE,QAAS,OAAO;AACpB,eAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,cAAM,OAAO,OAAO,CAAC;AACrB,YAAI,KAAK,YAAY,KAAK,OAAO;AAC7B,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,YAAY,cAAc;AACtB,WAAO,KAAK,SAAS,YAAY;AACjC,SAAK,oBAAoB,OAAO,OAAO,KAAK,OAAO,EAAE,KAAK,WAAS,MAAM,WAAW;AAAA,EACxF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,QAAQ,MAAM,gBAAgB,OAAO;AACjC,WAAO,KAAK,UAAU,KAAK,YAAY,SAAS,OAAO,IAAI,IAAI,OAAO,KAAK,KAAK,UAAU,GAAG,aAAa;AAAA,EAC9G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,SAAS,MAAM,gBAAgB,OAAO;AAClC,QAAI,MAAM,QAAQ,IAAI,GAAG;AACrB,aAAO,KAAK,KAAK,CAAAK,UAAQ,KAAK,SAASA,KAAI,CAAC;AAAA,IAChD;AACA,WAAO,QAAQ,KAAK,SAAS,KAAK,YAAY,SAAS,OAAO,IAAI,IAAI,OAAO,KAAK,KAAK,UAAU,GAAG,aAAa,CAAC;AAAA,EACtH;AAAA,EACA,IAAI,UAAU;AACV,QAAI,KAAK,iBAAiB;AACtB,WAAK,eAAe;AAAA,IACxB;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,oBAAoB;AAChB,SAAK,kBAAkB;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAiB;AACb,UACI,KAAa,MACb,aAAa,GAAG,YAChB,UAAc,GAAG,aAAa,GAAG,WAAW,CAAC,IAC7C,WAAa,OAAO,KAAK,OAAO,GAChC,aAAa,SAAS,QACtB,SAAa,GAAG;AACpB,QAAI,mBAAmB,OACnB;AACJ,QAAI,YAAY;AACZ,wBAAkB,QAAQ,uBAAuB,IAAI,CAAC;AAAA,IAC1D;AAEA,aAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACjC,YAAM,QAAQ,QAAQ,SAAS,CAAC,CAAC;AACjC,YAAM,MAAM;AACZ,UAAI,MAAM,aAAa;AACnB,cAAM,QAAQ;AACd,2BAAmB;AAAA,MACvB;AACA,UAAI,YAAY;AACZ,YAAI,gBAAgB,gBAAgB,SAAS,CAAC,CAAC;AAC/C,YAAI,eAAe;AACf,wBAAc,MAAM;AAAA,QACxB,OACK;AACD,0BAAgB,gBAAgB,SAAS,CAAC,CAAC,IAAI,oBAAI,IAAI;AAEvD,wBAAc,SAAS,MAAM;AAAA,QACjC;AAAA,MACJ;AAAA,IACJ;AACA,qBAAiB,QAAQ,SAAS,UAAU,UAAU;AACtD,QAAI,kBAAkB;AAClB,eAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACjC,cAAM,QAAQ,QAAQ,SAAS,CAAC,CAAC;AAEjC,YAAI,MAAM,eAAe,MAAM,QAAQ,MAAM,MAAM;AAC/C,gBAAM,UAAU,oBAAI,IAAI;AAGxB,mBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,kBACI,OAAO,OAAO,CAAC,GACf,MAAO,KAAK,SAAS,CAAC,CAAC;AAC3B,gBAAI,QAAQ,IAAI,GAAG,GAAG;AAClB,oBAAM,YAAY,MAAM,KAAK,KAAK;AAAA,YACtC;AACA,oBAAQ,IAAI,GAAG;AAAA,UACnB;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAEA,QAAI,YAAY;AACZ,uBAAiB,GAAG,iBAAiB,iBAAiB,UAAU,YAAY,IAAI;AAAA,IACpF;AACA,OAAG,kBAAkB;AAAA,EACzB;AAAA;AAAA,EAEA,WAAW,cAAc;AACrB,UAAM,UAAU,CAAC,KAAK,QAAQ,YAAY,CAAC;AAC3C,QAAI,KAAK,YAAY;AACjB,cAAQ,KAAK,KAAK,QAAQ,uBAAuB,EAAE,YAAY,CAAC;AAAA,IACpE;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,MAAM;AACf,WAAO,KAAK,KAAK,OAAO,EAAE,QAAQ,kBAAgB;AAC9C,WAAK,cAAc,MAAM,cAAc,KAAK,YAAY,CAAC;AAAA,IAC7D,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAkB,MAAM;AACpB,WAAO,KAAK,KAAK,OAAO,EAAE,QAAQ,kBAAgB;AAC9C,WAAK,iBAAiB,MAAM,cAAc,KAAK,YAAY,CAAC;AAAA,IAChE,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,iBAAiB,MAAM,cAAc,UAAU;AAC3C,SAAK,WAAW,YAAY,EAAE,QAAQ,WAAS,oBAAoB,MAAM,OAAO,QAAQ,CAAC;AAAA,EAC7F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,MAAM,cAAc,OAAO;AACrC,SAAK,WAAW,YAAY,EAAE,QAAQ,WAAS,eAAe,MAAM,OAAO,KAAK,CAAC;AAAA,EACrF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAe,MAAM,QAAQ;AACzB,UAAM,KAAK;AAEX,QAAI,CAAC,GAAG,mBAAmB,OAAO,KAAK,GAAG,OAAO,EAAE,SAAS,GAAG;AAC3D,aAAO,KAAK,MAAM,EAAE,QAAQ,kBAAgB;AA9vCxD,YAAAL;AA+vCgB,cAAM,cAAc,GAAG,QAAQ,YAAY;AAC3C,YAAI,aAAa;AACb,gBAAM,EAAE,OAAO,SAAS,IAAI,OAAO,YAAY;AAC/C,aAAG,iBAAiB,MAAM,cAAc,QAAQ;AAChD,aAAG,cAAc,MAAM,cAAc,KAAK;AAAA,QAC9C;AAEA,YAAI,GAAG,mBAAmB;AAEtB,gBAAM,iBAAiB,OAAO,OAAO,GAAG,OAAO,EAAE,KAAK,WAAM;AAxwChF,gBAAAA;AAwwCmF,oBAAAA,MAAA,MAAM,gBAAN,gBAAAA,IAAoB;AAAA,WAAa;AAChG,cAAI,gBAAgB;AAChB,kBAAM,mBAAmB,CAAC;AAC1B,uBAAW,KAAK,eAAe,aAAa;AACxC,+BAAiB,CAAC,MAAIA,MAAA,OAAO,CAAC,MAAR,gBAAAA,IAAW,aAAY,KAAK,CAAC;AAAA,YACvD;AACA,kBAAM,WAAW,KAAK,cAAc,gBAAgB;AACpD,eAAG,iBAAiB,MAAM,eAAe,UAAU,QAAQ;AAC3D,eAAG,cAAc,MAAM,eAAe,UAAU,KAAK,eAAe,QAAQ,CAAC;AAAA,UACjF;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AAAA;AAEJ;AAGA,WAAW,SAAS;;;ACxxCpB,IACI,gBAAyB,oBAAI,QAAQ;AADzC,IAEI,eAAyB,CAAC,UAAU;AAChC,MAAI,SAAS,OAAO,UAAU,UAAU;AACpC,QAAI,aAAa,cAAc,IAAI,KAAK;AACxC,QAAI,eAAe,QAAW;AAC1B,mBAAa,OAAO,OAAO;AAC3B,oBAAc,IAAI,OAAO,UAAU;AAAA,IACvC;AACA,YAAQ;AAAA,EACZ;AACA,SAAO;AACX;AAQJ,IAAqB,MAArB,MAAyB;AAAA,EACrB,YAAY,QAAQ;AAChB,UAAM,KAAK;AACX,OAAG,aAAa;AAChB,OAAG,QAAQ,oBAAI,IAAI;AACnB,OAAG,QAAQ,CAAC;AACZ,OAAG,aAAa;AAChB,QAAI,QAAQ;AACR,UAAI,OAAO,YAAY;AACnB,WAAG,aAAa,OAAO;AAAA,MAC3B;AACA,UAAI,OAAO,QAAQ;AACf,WAAG,SAAS,OAAO;AAAA,MACvB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,KAAK;AACL,WAAO,KAAK,MAAM,aAAa,GAAG,CAAC;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,QAAQ;AACR,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,OAAO;AACV,QAAI,MAAM,WAAW,KAAK,MAAM,QAAQ,MAAM,CAAC,CAAC,GAAG;AAC/C,cAAQ,MAAM,CAAC;AAAA,IACnB;AACA,UACI,KAAM,MACN;AAAA,MACI,OAAAM;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAM,IACN,MAAM,MAAM;AAChB,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC1B,YACI,OAAe,MAAM,CAAC,GACtB,MAAe,SAAS,OAAO,IAAI,IAAI,OAAO,aAAa,KAAK,UAAU,CAAC,GAC3E,eAAe,MAAM,GAAG;AAE5B,UAAI,gBAAgB,MAAM;AACtB,cAAM,GAAG,IAAI;AACb,QAAAA,OAAM,IAAI,IAAI;AACd,WAAG;AAAA,MACP,WAGS,iBAAiB,MAAM;AAC5B,cAAM,GAAG,IAAI;AACb,QAAAA,OAAM,OAAO,YAAY;AACzB,QAAAA,OAAM,IAAI,IAAI;AAAA,MAClB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,GAAG,KAAK;AACJ,QAAI,MAAM;AACV,QAAI,MAAM,GAAG;AACT,aAAO,KAAK;AAAA,IAChB;AACA,SAAK,QAAQ,KAAK,OAAO;AACrB,UAAI,CAAC,OAAO;AACR,cAAM;AACN;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAU;AACb,eAAW,YAAY,QAAQ,QAAQ;AACvC,UACI,EAAE,OAAAA,QAAO,OAAO,WAAW,IAAI,MAC/B,MAAM,SAAS;AACnB,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC1B,YACI,OAAe,SAAS,CAAC,GACzB,MAAe,SAAS,OAAO,IAAI,IAAI,OAAO,aAAa,KAAK,UAAU,CAAC,GAC3E,eAAe,MAAM,GAAG;AAE5B,UAAI,gBAAgB,MAAM;AACtB,QAAAA,OAAM,OAAO,YAAY;AACzB,eAAO,MAAM,GAAG;AAChB,aAAK;AAAA,MACT;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,QAAQ;AACJ,SAAK,MAAM,MAAM;AACjB,SAAK,QAAQ,CAAC;AACd,SAAK;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQC,KAAI;AACR,QAAI,MAAM,GACN;AACJ,SAAK,QAAQ,KAAK,OAAO;AACrB,UAAIA,IAAG,IAAI,GAAG;AACV,UAAE;AAAA,MACN;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS,MAAM,OAAO;AAClB,UACI,KAAwB,MACxB,EAAE,OAAO,WAAW,IAAI,IACxB,QAAwB,SAAS,OAAO,IAAI,IAAI,OAAO,aAAa,KAAK,UAAU,CAAC,GACpF,SAAwB,GAAG,IAAI,KAAK;AACxC,QAAI,QAAQ;AACR,YAAM,iBAAiB,GAAG,IAAI,KAAK;AACnC,UAAI,kBAAkB,WAAW,gBAAgB;AAC7C,cAAM,IAAI,MAAM,uBAAuB,KAAK,oCAAoC,KAAK,EAAE;AAAA,MAC3F;AACA,aAAO,UAAU,IAAI;AACrB,aAAO,MAAM,KAAK;AAClB,YAAM,KAAK,IAAI;AAAA,IACnB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAOA,KAAI,SAAS;AAChB,UACI,EAAE,OAAAD,OAAM,IAAI,MACZ,SAAY,CAAC;AACjB,QAAI,IAAI;AACR,IAAAA,OAAM,QAAQ,UAAQ;AAClB,UAAIC,IAAG,KAAK,SAAS,MAAM,KAAKD,MAAK,GAAG;AACpC,eAAO,KAAK,IAAI;AAAA,MACpB;AAAA,IACJ,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,MAAM;AACX,UAAM,MAAM,SAAS,OAAO,IAAI,IAAI,OAAO,aAAa,KAAK,KAAK,UAAU,CAAC;AAC7E,WAAO,QAAQ,KAAK,MAAM,GAAG,CAAC;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAIC,KAAI,SAAS;AACb,UACI,EAAE,OAAAD,OAAM,IAAI,MACZ,SAAY,IAAI,MAAMA,OAAM,IAAI;AAEpC,QAAI,IAAI;AACR,IAAAA,OAAM,QAAQ,UAAQ;AAClB,aAAO,CAAC,IAAIC,IAAG,KAAK,SAAS,MAAM,KAAKD,MAAK;AAAA,IACjD,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQC,KAAI,SAAS;AACjB,WAAO,KAAK,MAAM,QAAQA,KAAI,OAAO;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,KAAKA,KAAI,MAAM,GAAG;AACd,QAAI,MAAM;AACV,QAAI,MAAM,GAAG;AACT,aAAO,KAAK,QAAQA,GAAE;AAAA,IAC1B;AACA,SAAK,QAAQ,KAAK,OAAO;AACrB,UAAIA,IAAG,IAAI,KAAK,CAAC,OAAO;AACpB,cAAM;AACN;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,CAAC,OAAO,QAAQ,IAAI;AAChB,WAAO,KAAK,MAAM,OAAO,QAAQ,EAAE;AAAA,EACvC;AAAA,EACA,QAAQ,MAAM,SAAS;AACnB,QAAI,QAAQ,IACR;AACJ,SAAK,MAAM,KAAK,OAAO;AACnB,UAAI,CAAC,WAAW,QAAQ,EAAE,GAAG;AACzB,UAAE;AACF,YAAI,OAAO,MAAM;AACb,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,SAAS;AACT,WAAO,CAAC,GAAG,KAAK,KAAK;AAAA,EACzB;AAAA,EACA,IAAI,OAAO,QAAQ;AACf,aAAS,YAAY,QAAQ,MAAM;AACnC,SAAK,MAAM;AACX,SAAK,IAAI,MAAM,MAAM,MAAM;AAC3B,SAAK;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAKA,KAAI;AACL,SAAK,SAAS,KAAK,OAAO,KAAKA,GAAE;AAAA,EACrC;AAAA,EACA,KAAKA,KAAI,SAAS;AACd,WAAO,KAAK,OAAO,KAAKA,KAAI,OAAO;AAAA,EACvC;AACJ;AACA,IAAI,SAAS;;;ACpSb,IAAqB,WAArB,cAAsC,IAAI;AAAA,EACtC,OAAO,OAAO;AACV,QAAI,MAAM,WAAW,KAAK,MAAM,QAAQ,MAAM,CAAC,CAAC,GAAG;AAC/C,cAAQ,MAAM,CAAC;AAAA,IACnB;AAEA,WAAO,MAAM,IAAI,GAAG,MAAM,OAAO,YAAU,OAAO,aAAa,CAAC;AAAA,EACpE;AACJ;AACA,SAAS,SAAS;;;ACKlB,IAAO,oBAAQ,YAAU,MAAM,mBAAmB,UAAU,MAAM;AAAA,EAC9D,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,WAAW,gBAAgB;AACvB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOH,YAAa;AAAA,IACjB;AAAA,EACJ;AAAA,EACA,WAAW,aAAa;AACpB,WAAO;AAAA,MACH,YAAe;AAAA,MACf,cAAe;AAAA,IACnB;AAAA,EACJ;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,EA6FA,OAAO,SAAS,SAAS,OAAO;AAC5B,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAElB,cAAU,YAAY,QAAQ,OAAO,EAAE,OAAO,CAAC,QAAQ,MAAM;AACzD,UAAI,GAAG,QAAQ,CAAC;AAChB,UAAI,GAAG;AACH,eAAO,KAAK,CAAC;AAAA,MACjB;AACA,aAAO;AAAA,IACX,GAAG,CAAC,CAAC;AACL,QAAI,QAAQ,WAAW,GAAG;AACtB,aAAO;AAAA,IACX;AAEA,QAAI,CAAC,GAAG,QAAQ,CAAC,UAAU,GAAG,QAAQ,gBAAgB,EAAE,QAAQ,CAAC,MAAM,OAAO;AAC1E,aAAO,CAAC;AAAA,IACZ;AAEA,OAAG,aAAa;AAEhB,QAAI,GAAG,WAAW;AACd,YACI,WAA2B,QAAQ,OACnC,2BAA2B,CAAC,GAC5B,sBAA2B,oBAAI,IAAI;AAIvC,iBAAW,OAAO,SAAS;AACvB,cAAM,cAAc,IAAI,YAAY,IAAI,GAAG,EAAE;AAC7C,YAAI,YAAY,KAAK,WAAW;AAC5B,mCAAyB,KAAK,GAAG;AAAA,QACrC;AAEA,oBAAY,OAAO,YAAY,eAAe,GAAG;AACjD,oBAAY,OAAO,YAAY,yBAAyB,GAAG;AAC3D,oBAAY,KAAK;AACjB,4BAAoB,IAAI,WAAW;AAAA,MACvC;AAGA,iBAAW,eAAe,qBAAqB;AAC3C,YAAI,YAAY,cAAc,SAAS,GAAG;AACtC,aAAG,cAAc,aAAa,CAAC,GAAG,CAAC,CAAC;AAAA,QACxC;AAAA,MACJ;AAEA,UAAI,yBAAyB,QAAQ;AACjC,gBAAQ,QAAQ,UAAU;AAAA,UACtB,QAAW;AAAA,UACX,SAAW;AAAA,UACX,OAAW,CAAC;AAAA,UACZ,UAAW,CAAC;AAAA,UACZ;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,IACJ,WACS,GAAG,MAAM;AACd,YACI,oBAAoB,CAAC,GACrB,mBAAoB,QAAQ,SAAS,GACrC,eAAoB,QAAQ,CAAC,GAE7B,QAAoB,mBAAmB,SAAY,QAAQ,QAAQ,YAAY,GAE/E,kBAAoB,QAAQ,OAAO,CAAC,QAAQ,UAAU;AAClD,cAAM,EAAE,OAAO,IAAI;AACnB,YAAI,QAAQ;AACR,cAAI,CAAC,OAAO,OAAO,EAAE,GAAG;AACpB,mBAAO,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAAA,UACnC;AACA,iBAAO,OAAO,EAAE,EAAE,CAAC,EAAE,KAAK,KAAK;AAAA,QACnC;AACA,eAAO;AAAA,MACX,GAAG,CAAC,CAAC,GACL,WAAoB,MAAM,KAAK,OAAO,OAAO,eAAe,CAAC;AACjE,UAAI,CAAC,UAAU,GAAG,QAAQ,gBAAgB,EAAE,SAAS,QAAS,OAAO,QAAS,mBAAmB,SAAY,aAAa,OAAO,CAAC,MAAM,OAAO;AAC3I,WAAG,aAAa;AAChB,eAAO,CAAC;AAAA,MACZ;AACA,SAAG,kBAAkB;AAMrB,eAAS,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,UAAU;AAEzD,iBAAW,CAAC,QAAQ,QAAQ,KAAK,UAAU;AACvC,0BAAkB,KAAK,GAAG,OAAO,YAAY,UAAU,OAAO,IAAI,CAAC;AAAA,MACvE;AACA,UAAI,CAAC,QAAQ;AACT,WAAG,QAAQ,UAAU;AAAA;AAAA,UAEjB,QAAa,mBAAmB,SAAY,aAAa;AAAA,UACzD;AAAA,UACA,SAAa;AAAA,UACb,YAAa;AAAA,UACb,QAAa;AAAA,UACb;AAAA,QACJ,CAAC;AACD,WAAG,QAAQ,UAAU;AAAA,UACjB,QAAS;AAAA,UACT;AAAA,QACJ,CAAC;AAAA,MACL;AACA,SAAG,iBAAiB;AACpB,SAAG,aAAa;AAChB,aAAO;AAAA,IACX;AACA,QAAI,QAAQ,WAAW,GAAG;AACtB,SAAG,aAAa;AAChB,aAAO;AAAA,IACX;AAEA,eAAW,UAAU,SAAS;AAC1B,aAAO,aAAa,OAAO;AAAA,IAC/B;AACA,QAAI,QAAQ;AACR,SAAG,cAAc;AAAA,IACrB;AACA,YAAQ,OAAO,OAAO;AACtB,QAAI,QAAQ;AACR,SAAG,aAAa;AAAA,IACpB;AACA,QAAI,GAAG,YAAY;AACf,SAAG,aAAa;AAAA,IACpB;AACA,OAAG,aAAa;AAChB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,YAAY,OAAO;AA9Q7B,QAAAC,KAAA;AA+QQ,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAElB,QAAI,GAAG,QAAQ,gBAAc,MAAAA,MAAA,GAAG,aAAH,gBAAAA,IAAa,uBAAb,mBAAiC,SAAQ;AAElE,UAAI,CAAC,aAAa,GAAG,QAAQ,gBAAgB,EAAE,SAAU,QAAQ,WAAW,aAAc,KAAK,CAAC,MAAM,OAAO;AACzG,eAAO;AAAA,MACX;AAEA,UAAI,GAAG,UAAU;AAEb,YAAI,CAAC,GAAG,WAAW;AACf,aAAG,SAAS,cAAc,SAAS;AAAA,QACvC;AAAA,MACJ,WACS,WAAW;AAGhB,cAAM,aAAa,GAAG;AACtB,iBAAS,IAAI,WAAW,SAAS,GAAG,KAAK,KAAK,GAAG,KAAK;AAClD,gBAAM,WAAW,CAAC;AAClB,cAAI,OAAO,CAAC,IAAI,aAAa;AACzB,gBAAI,YAAY,EAAE;AAAA,UACtB;AAAA,QACJ;AAAA,MACJ;AACA,UAAI,WAAW;AACX,WAAG,QAAQ,MAAM;AACjB,gBAAQ,cAAc;AAAA,MAC1B;AAEA,cAAQ,MAAM;AACd,UAAI,WAAW;AACX,gBAAQ,aAAa;AAAA,MACzB;AACA,SAAG,MAAM,MAAM;AACf,SAAG,SAAS,MAAM;AAAA,IACtB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,UAAU,SAAS,OAAO;AACtB,UACI,KAAU,MACV,UAAU,GAAG;AACjB,QAAI;AACJ,OAAG,aAAa;AAEhB,QAAI,QAAQ;AACR,cAAQ,cAAc;AAItB,YAAM,aAAa,GAAG;AACtB,eAAS,IAAI,WAAW,SAAS,GAAG,KAAK,KAAK,GAAG,KAAK;AAClD,cAAM,WAAW,CAAC;AAClB,YAAI,OAAO,CAAC,IAAI,eAAe,CAAC,IAAI,QAAQ;AACxC,cAAI,YAAY,EAAE;AAAA,QACtB;AAAA,MACJ;AAAA,IACJ;AACA,QAAI,GAAG,MAAM;AACT,eAAS,GAAG,SAAS,MAAM,MAAM;AAAA,IACrC,OACK;AACD,eAAS,GAAG,MAAM,MAAM;AAAA,IAC5B;AACA,QAAI,QAAQ;AACR,cAAQ,aAAa;AAAA,IACzB;AACA,OAAG,aAAa;AAChB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAI,SAAS,SAAS,OAAO,UAAU,CAAC,GAAG;AACvC,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAClB,cAAU,YAAY,QAAQ,OAAO;AACrC,QAAI,EAAC,mCAAS,SAAQ;AAElB;AAAA,IACJ;AACA,OAAG,OAAO,GAAG,QAAQ,QAAQ,GAAG,YAAY,QAAQ,CAAC,EAAE,QAAQ;AAC/D,QAAI,GAAG,MAAM;AACT,YAEI,cAAoB,oBAAI,IAAI,GAC5B,mBAAoB,GAAG,WAAW,mBAAmB,aAAa,GAClE,EAAE,cAAc,IAAI,GAAG,YACvBC,SAAoB,CAAC;AACzB,cAAQ,QAAQ,UAAQ;AACpB,cAAM,WAAW,KAAK,aAAa;AACnC,YAAI,CAAC,YAAY,IAAI,QAAQ,GAAG;AAC5B,sBAAY,IAAI,UAAU,EAAE,QAAS,CAAC,GAAG,QAAS,CAAC,EAAE,CAAC;AAAA,QAC1D;AACA,cAAM,QAAQ,YAAY,IAAI,QAAQ;AAGtC,YAAI,CAAC,KAAK,WAAW,oBAAoB,MAAM;AAC3C,gBAAM,OAAO,KAAK,IAAI;AAAA,QAC1B,OACK;AACD,gBAAM,OAAO,KAAK,IAAI;AAAA,QAC1B;AAAA,MACJ,CAAC;AACD,kBAAY,QAAQ,CAAC,EAAE,QAAQ,OAAO,GAAG,aAAa;AAClD,cAAM,aAAa,YAAY,OAAO,GAAG,WAAW,GAAG,QAAQ,QAAQ;AACvE,YAAI,CAAC,YAAY;AACb,gBAAM,IAAI,MAAM,uBAAuB,QAAQ,kCAAkC;AAAA,QACrF;AAEA,YAAI,OAAO,QAAQ;AACf,UAAAA,OAAM,KAAK,GAAG,WAAW,YAAY,QAAQ,QAAQ,OAAO,CAAC;AAAA,QACjE;AAEA,YAAI,OAAO,QAAQ;AACf,qBAAW,YAAY,QAAQ;AAC3B,YAAAA,OAAM,KAAK,WAAW,YAAY,UAAU,SAAS,gBAAgB,GAAG,QAAQ,OAAO,CAAC;AAAA,UAC5F;AAAA,QACJ;AAAA,MACJ,CAAC;AACD,UAAI,GAAG,cAAc,GAAG,oBAAoB;AACxC,WAAG,OAAO;AAAA,UACN,QAAS;AAAA,QACb,CAAC;AAAA,MACL;AAEA,UAAI,GAAG,uBAAuB,CAAC,GAAG,qBAAqB;AACnD,WAAG,KAAK;AAAA,MACZ;AACA,aAAOA;AAAA,IACX;AAEA,QAAI,CAAC,UAAU,GAAG,QAAQ,aAAa,EAAE,QAAQ,CAAC,MAAM,OAAO;AAC3D,aAAO;AAAA,IACX;AACA,OAAG,OAAO,GAAG,QAAQ,QAAQ,GAAG,YAAY,QAAQ,CAAC,EAAE,QAAQ;AAC/D,QAAI,GAAG,MAAM;AACT,aAAO,GAAG,SAAS,YAAY,OAAO;AAAA,IAC1C;AACA,UAAM,QAAQ,GAAG,eAAe,OAAO;AACvC,QAAI,QAAQ;AACR,SAAG,cAAc;AAAA,IACrB;AAIA,OAAG,cAAc,QAAQ;AACzB,YAAQ,IAAI,KAAK;AACjB,OAAG,cAAc;AACjB,QAAI,QAAQ;AACR,SAAG,aAAa;AAAA,IACpB;AACA,QAAI,GAAG,YAAY;AACf,SAAG,aAAa;AAAA,IACpB;AACA,WAAO;AAAA,EACX;AAAA,EACA,eAAe,SAAS,iBAAiB;AACrC,WAAO,QAAQ,IAAI,UAAQ;AACvB,YAAM,SAAS,KAAK,cAAc,KAAK,UAAU,OAAO,KAAK,aAAa,IAAI,CAAC;AAC/E,yDAAiB,KAAK,MAAM;AAC5B,aAAO;AAAA,IACX,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,OAAO,SAAS,SAAS,OAAO;AA/c3C,QAAAD;AAgdQ,UACI,KAAgB,MAChB,UAAgB,GAAG,SACnB,eAAgB,GAAG,MAAM,KAAK,GAC9B,WAAgB,QAAQ,QACxB,gBAAgB,CAAC;AACrB,cAAU,YAAY,QAAQ,OAAO;AACrC,QAAI,GAAG,MAAM;AACT,YAAM,OAAO,GAAG;AAChB,aAAO,KAAK,YAAY,UAASA,MAAA,KAAK,aAAL,gBAAAA,IAAgB,QAAQ,MAAM;AAAA,IACnE;AAEA,QAAI,CAAC,UAAU,GAAG,QAAQ,aAAa,EAAE,QAAQ,CAAC,MAAM,OAAO;AAC3D,aAAO;AAAA,IACX;AACA,QAAI,QAAQ,OAAO;AAGnB,QAAI,SAAS,QAAQ,KAAK,MAAM,QAAQ,CAAC,KAAK,SAAS,QAAQ,QAAQ,CAAC,MAAM,QAAQ,CAAC,GAAG;AACtF,WAAK,SAAS,MAAM,IAAI,GAAG,UAAU,IAAI,QAAQ,QAAQ,KAAK;AAC1D,YAAI,QAAQ,CAAC,MAAM,SAAS,QAAQ,CAAC,GAAG;AACpC,mBAAS;AAAA,QACb;AAAA,MACJ;AAAA,IACJ;AACA,QAAI,QAAQ;AACR,aAAO;AAAA,IACX;AACA,UAAM,QAAQ,GAAG,eAAe,SAAS,YAAU;AAC/C,YACI,iBAAiB,QAAQ,QAAQ,MAAM;AAC3C,UAAI,OAAO,YAAY,OAAO,SAAS,UAAU,GAAG,UAAU;AAC1D,WAAG,OAAO;AAAA,MACd;AAEA,UAAI,iBAAiB,IAAI;AACrB,YAAI,iBAAiB,SAAS;AAAc;AAC5C,sBAAc,KAAK,cAAc;AAAA,MACrC;AAEA,aAAO,KAAK,gBAAgB;AAAA,IAChC,CAAC;AAID,OAAG,cAAc;AACjB,OAAG,QAAQ,OAAO,aAAa;AAC/B,OAAG,aAAa;AAChB,QAAI,QAAQ;AACR,SAAG,cAAc;AAAA,IACrB;AACA,YAAQ,OAAO,OAAO,GAAG,GAAG,KAAK;AACjC,QAAI,QAAQ;AACR,SAAG,aAAa;AAAA,IACpB;AACA,QAAI,GAAG,YAAY;AACf,SAAG,aAAa;AAAA,IACpB;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,KAAK,SAAS,cAAc;AACxB,QAAI,KAAK,QAAQ;AACb,mBAAa,OAAO,YAAY,SAAS,YAAY;AAAA,IACzD,OACK;AACD,WAAK,QAAQ,KAAK,SAAS,YAAY;AAAA,IAC3C;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,YAAY,UAAU,OAAO,OAAO;AAChC,UACI,KAAU,MACV,UAAU,CAAC,GACX,UAAU,CAAC;AACf,OAAG,QAAQ,OAAK;AACZ,UAAI,SAAS,CAAC,GAAG;AACb,gBAAQ,KAAK,EAAE,IAAI,OAAO,OAAO,IAAI,CAAC;AACtC,gBAAQ,KAAK,CAAC;AAAA,MAClB;AAAA,IACJ,CAAC;AACD,OAAG,QAAQ,kBAAkB,EAAE,SAAS,KAAM,GAAG,QAAQ,WAAW,QAAQ,OAAO,CAAC;AACpF,OAAG,QAAQ,UAAU,EAAE,QAAS,kBAAkB,SAAS,KAAM,GAAG,QAAQ,WAAW,QAAQ,OAAO,CAAC;AACvG,QAAI,GAAG,yBAAyB,GAAG;AAAY,SAAG,OAAO;AAAA,EAC7D;AAAA,EACA,OAAO,OAAO,OAAO;AACjB,UACI,KAAU,MACV,UAAU,CAAC;AACf,OAAG,QAAQ,OAAK;AACZ,cAAQ,KAAK,EAAE,IAAI,OAAO,OAAO,IAAI,CAAC;AAAA,IAC1C,CAAC;AACD,OAAG,QAAQ,kBAAkB,EAAE,SAAU,GAAG,SAAS,KAAM,KAAK,CAAC;AACjE,OAAG,QAAQ,UAAU,EAAE,QAAS,kBAAkB,SAAU,GAAG,SAAS,KAAM,KAAK,CAAC;AACpF,QAAI,GAAG,yBAAyB,GAAG;AAAY,SAAG,OAAO;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,gBAAgB;AACZ,UAAM,KAAK;AAEX,OAAG,MAAM,QAAQ,OAAK,EAAE,aAAa,MAAM,KAAK,CAAC;AACjD,OAAG,SAAS,QAAQ,OAAK,EAAE,aAAa,MAAM,KAAK,CAAC;AAEpD,OAAG,MAAM,MAAM;AACf,OAAG,SAAS,MAAM;AAClB,OAAG,QAAQ,MAAM;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,SAAS,OAAO;AAEnB,UACI,EAAE,QAAQ,IAAI;AAClB,QAAI,CAAC,UAAU,KAAK,QAAQ,gBAAgB,EAAE,QAAQ,CAAC,MAAM,OAAO;AAChE,aAAO;AAAA,IACX;AACA,SAAK,cAAc;AACnB,QAAI,CAAC,QAAQ;AACT,WAAK,QAAQ,UAAU,EAAE,QAAQ,CAAC;AAAA,IACtC;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAgB;AACZ,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAClB,QAAI,SAAS;AACT,YAAM,QAAQ,EAAE,QAAS,gBAAgB,QAAQ;AACjD,SAAG,IAAI,GAAG,QAAQ,QAAQ,IAAI;AAC9B,SAAG,OAAO,GAAG,MAAM,QAAQ,IAAI;AAC/B,SAAG,SAAS,QAAQ,OAAK,EAAE,cAAc,IAAI,CAAC;AAC9C,SAAG,MAAM,MAAM;AACf,SAAG,SAAS,MAAM;AAClB,SAAG,QAAQ,MAAM;AACjB,SAAG,QAAQ,UAAU,KAAK;AAC1B,SAAG,QAAQ,WAAW,KAAK;AAAA,IAC/B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,IAAI,UAAU;AACV,UACI,KAAW,MAEX,WAAW,GAAG,SAAS,OAAO,OAAO,OAAK,EAAE,gBAAgB;AAChE,WAAQ,GAAG,MAAM,SAAS,SAAS,UAAU,GAAG,QAAQ,QAAS;AAAA;AAAA,MAE7D,OAAU,GAAG,MAAM,OAAO,MAAM;AAAA,MAChC;AAAA,MACA,SAAU,GAAG,QAAQ,OAAO,MAAM;AAAA,IACtC,IAAI;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,aAAa;AACb,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,WAAW,MAAM;AACjB,SAAK,cAAc;AACnB,QAAI,QAAQ,KAAK,SAAS;AACtB,WAAK,OAAO;AAAA,IAChB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB;AAChB,SAAK;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,WAAW,MAAM;AAC9B,SAAK;AACL,QAAI,KAAK,cAAc,UAAU;AAC7B,WAAK,aAAa;AAAA,IACtB;AAAA,EACJ;AAAA,EACA,eAAe;AACX,QAAI,KAAK,gBAAgB,GAAG;AACxB,WAAK,OAAO;AAAA,IAChB;AAAA,EACJ;AAAA;AAEJ;;;AChrBA,IAAO,uBAAQ,YAAU,MAAM,sBAAsB,UAAU,MAAM;AAAA,EACjE,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EACA,WAAW,eAAe;AACtB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAmBH,gCAAiC;AAAA,IACrC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,sBAAsB,YAAY;AAC9B,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAClB,QAAI,CAAC,SAAS;AACV;AAAA,IACJ;AACA,QAAI,QAAQ,OAAO;AACf,SAAG,IAAI,QAAQ,KAAK;AAAA,IACxB;AACA,QAAI,QAAQ,SAAS;AAEjB,SAAG,OAAO,QAAQ,QAAQ,IAAI,OAAK,EAAE,EAAE,CAAC;AAAA,IAC5C;AACA,QAAI,QAAQ,UAAU;AAClB,cAAQ,SAAS,QAAQ,YAAU;AAC/B,cAAM,cAAc,GAAG,QAAQ,OAAO,EAAE;AACxC,mDAAa,IAAI,OAAO;AAAA,MAC5B,CAAC;AAAA,IACL;AAAA,EACJ;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;AAAA;AAAA;AAAA;AAAA,EA2MA,eAAe,SAAS,cAAc,MAAM,iBAAiB,cAAc,SAAS,MAAM,aAAa,OAAO;AA3QlH,QAAAE,KAAA;AA4QQ,UACI,KAAwC,MACxC,EAAE,OAAO,SAAS,UAAU,QAAQ,KAAIA,MAAA,2CAAc,SAAS,QAAvB,OAAAA,MAA8B,SAEtE,WAAwC,iCAAW,aAAX,YAAuB,CAAC,GAChE,eAAwC,GAAG,WAAW,mBAAmB,IAAI,GAC7E,qBAAwC,GAAG,WAAW,mBAAmB,UAAU,GACnF,MAAwC,aAAa,oBAAI,IAAI,IAAI,MACjE,WAAwC,CAAC,GACzC,aAAwC,CAAC;AAC7C,QAAI,cAAc,OAAO,kBAAkB,CAAC;AAC5C,OAAG,QAAQ,qBAAqB;AAEhC,OAAG,yBAAyB,CAAC;AAE7B,OAAG,aAAa,GAAG,QAAQ,YAAU;AACjC,SAAG,uBAAuB,KAAK,OAAO,EAAE;AAAA,IAC5C,CAAC;AAED,SAAI,+BAAO,UAAS,GAAG;AACnB,YACI,WAAW,CAAC,GACZ,QAAW,CAAC;AAEhB,iBAAW,QAAQ,OAAO;AACtB,YAAI,GAAG,QAAQ,KAAK,cAAc,CAAC,KAAK,GAAG,QAAQ,aAAa,QAAQ,MAAM,YAAY,CAAC,GAAG;AAG1F,mBAAS,KAAK,IAAI;AAAA,QACtB,OACK;AACD,gBAAM,KAAK,IAAI;AAAA,QACnB;AAAA,MACJ;AACA,cAAQ,QAAQ,MAAM,SAAS,QAAQ;AAIvC,YAAM,0BAA0B,GAAG;AACnC,SAAG,sBAAsB;AAIzB,YAAM,gBAAe,QAAG,IAAI,OAAO,OAAO,EAAE,oBAAqB,EAAE,MAAO,KAAK,GAAG,OAAQ,OAAO,CAAC,MAA7E,YAAkF,CAAC;AACxG,eAAS,KAAK,GAAG,YAAY;AAC7B,SAAG,sBAAsB;AACzB,UAAI,GAAG,MAAM;AAGT,mBAAW,UAAU,cAAc;AAC/B,gBAAM,EAAE,OAAO,IAAI;AAEnB,cAAI,OAAO,QAAQ;AACf,0BAAc;AACd,8BAAkB,CAAC,MAAM;AACzB;AAAA,UACJ;AACA,cAAI,CAAC,OAAO,UAAU,gBAAgB,MAAM,OAAK,CAAC,EAAE,SAAS,MAAM,CAAC,GAAG;AACnE,4BAAgB,KAAK,MAAM;AAAA,UAC/B;AAAA,QACJ;AAAA,MACJ;AACA,iBAAW,UAAU,cAAc;AAC/B,mCAAK,IAAI,OAAO,IAAI,OAAO;AAC3B,eAAO,aAAa;AAAA,MACxB;AAAA,IACJ;AAEA,SAAI,mCAAS,UAAS,GAAG;AACrB,iBAAW,QAAQ,SAAS;AACxB,cACI,YAAY,KAAK,cAAc,GAC/B,KAAY,aAAa,QAAQ,MAAM,YAAY,GACnD,WAAY,aAAa,QAAQ,MAAM,kBAAkB,GACzD,UAAY,QAAG,QAAQ,SAAS,MAApB,YAAyB,GAAG,QAAQ,EAAE;AAEtD,YAAI,QAAQ;AACR,gBAAM,mBAAmB,YAAY,QAAO,QAAG,QAAQ,QAAQ,MAAnB,mBAAsB,SAAS;AAC3E,gBAAMC,WAAU,OAAO,eAAe,MAAM,gBAAgB,MAAM;AAClE,cAAI,kBAAkB;AAClB,eAAG,eAAe,OAAO,QAAQ,KAAK;AAAA,UAC1C;AAEA,cAAI,GAAG,QAAQ,CAAC,eAAe,gBAAgB,MAAM,OAAK,CAAC,EAAE,SAAS,MAAM,CAAC,GAAG;AAC5E,gBAAI,OAAO,OAAO,QAAQ;AACtB,4BAAc;AACd,gCAAkB,CAAC,OAAO,MAAM;AAAA,YACpC,OACK;AACD,8BAAgB,KAAK,OAAO,MAAM;AAAA,YACtC;AAAA,UACJ;AACA,qCAAK,IAAI,IAAIA;AACb,qBAAW,KAAK,MAAM;AAAA,QAC1B;AAAA,MACJ;AAAA,IACJ;AAEA,SAAI,mCAAS,UAAS,GAAG;AACrB,SAAG,cAAc,OAAO;AAAA,IAC5B;AACA,QAAI,GAAG,mCAAmC,WAAW;AACjD,YAAM,0BAA0B,GAAG,gBAAgB,UAAU,UAAU;AACvE,sBAAgB,KAAK,GAAG,uBAAuB;AAAA,IACnD;AACA,OAAG,sBAAsB,eAAe;AACxC,QAAI,GAAG,QAAQ,GAAG,YAAY,GAAG,yBAAwB,+BAAO,YAAU,mCAAS,UAAS;AAIxF,YAAM,YAAY,oBAAI,IAAI;AAC1B,sBAAgB,QAAQ,YAAU;AAC9B,YAAI,UAAU,IAAI,MAAM,GAAG;AACvB;AAAA,QACJ;AACA,kBAAU,IAAI,MAAM;AACpB,eAAO,oBAAoB,OAAO,GAAG,QAAQ;AAC7C,eAAO,uBAAuB,OAAO,GAAG,QAAQ;AAAA,MACpD,CAAC;AAED,SAAG,QAAQ,cAAc;AAAA,QACrB,QAAS,GAAG,mBAAmB,GAAG,QAAQ,EAAE;AAAA,QAC5C,QAAS;AAAA,MACb,CAAC;AACD,SAAG,iBAAiB,KAAK;AAAA,IAC7B;AACA,OAAG,yBAAyB;AAC5B,OAAG,QAAQ,mBAAmB;AAC9B,WAAO;AAAA,EACX;AAAA,EACA,sBAAsB,iBAAiB;AACnC,UAAM,UAAU,oBAAI,IAAI;AAExB,oBAAgB,QAAQ,YAAU;AAC9B,UAAI,QAAQ,IAAI,MAAM,GAAG;AACrB;AAAA,MACJ;AACA,aAAO,SAAS,YAAU;AACtB,YAAI,QAAQ,IAAI,MAAM,GAAG;AACrB;AAAA,QACJ;AACA,gBAAQ,IAAI,MAAM;AAClB,eAAO,oBAAoB,OAAO,KAAK;AAGvC,YAAI,OAAO,UAAU;AACjB,iBAAO,sBAAsB,OAAO,UAAU,eAAe,IAAI;AAAA,QACrE;AACA,YAAI,OAAO,oBAAoB;AAC3B,iBAAO,sBAAsB,OAAO,oBAAoB,mBAAmB,IAAI;AAAA,QACnF;AAAA,MACJ,CAAC;AAAA,IACL,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,UAAU;AACpB,UACI,KAA6B,MAC7B,EAAE,SAAU,aAAa,IAAI,IAC7B,eAA6B,GAAG,WAAW,SAC3C,WAA6B,CAAC;AAClC,eAAW,gBAAgB,UAAU;AACjC,YAAM,KAAK,aAAa,QAAQ,cAAc,YAAY;AAE1D,UAAI,aAAa,SAAS,EAAE,GAAG;AAC3B,cAAM,SAAS,aAAa,IAAI,EAAE;AAKlC,eAAO,aAAa,OAAO,MAAM,IAAI;AACrC,eAAO,aAAa;AACpB,qBAAa,OAAO,EAAE;AAAA,MAC1B,OAEM;AACF,iBAAS,KAAK,EAAE;AAAA,MACpB;AAAA,IACJ;AAEA,OAAG,OAAO,QAAQ;AAElB,eAAW,UAAU,UAAU;AAC3B,mBAAa,OAAO,MAAM;AAAA,IAC9B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,gBAAgB,OAAO,SAAS;AAC5B,UACI,KAAK,MACL;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAI,IACJ,oBAAoB,GAAG,WAAW,GAAG,eAAe,GAAG,OAAO,IAAI,QAClE;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAI,GAAG,SACP,SAAS,qBAAqB,QAAQ,WAAW,gDAAqB,GAAG,QAAQ,eAAe,MAChG,kBAAkB,oBAAI,IAAI;AAC9B,QAAI,CAAC,YAAY;AACb,aAAO,CAAC;AAAA,IACZ;AACA,QAAI,UAAU,OAAO;AAIrB,QAAI,WAAW;AACX,iBAAW,GAAG;AACd,SAAG,cAAc,IAAI;AAAA,IACzB;AACA,QAAI,MAAM;AACN,YAAM,iBAAiB,IAAI,IAAI,QAAQ,OAAO,eAAe,CAAC;AAG9D,iBAAW,eAAe,MAAM,OAAO,eAAe,GAAG;AACrD,uBAAe,IAAI,WAAW;AAAA,MAClC;AAEA,qBAAe,QAAQ,UAAQ,KAAK,OAAO,cAAY,eAAe,IAAI,QAAQ,CAAC,CAAC;AACpF,qBAAe,OAAO,GAAG,QAAQ;AACjC,YAAM,yBAAyB,YAAY;AAAA;AAAA,QAEvC,MAAM,KAAK,cAAc,EAAE,OAAO,WAAM;AAtgBxD,cAAAD,KAAA;AAsgB2D,oBAAC,MAAAA,MAAA,MAAM,WAAN,gBAAAA,IAAc,aAAd,mBAAwB,SAAS;AAAA,SAAM;AAAA,QACnF;AAAA,MACJ;AACA,iBAAW,qBAAqB,OAAO,OAAO,sBAAsB,GAAG;AACnE,cAAM,EAAE,OAAO,IAAI,kBAAkB,CAAC;AAEtC,YAAI,OAAO,oBAAoB;AAE3B,iBAAO,SAAS,KAAK,GAAG,iBAAiB;AACzC,0BAAgB,IAAI,MAAM;AAAA,QAC9B;AAAA,MACJ;AAAA,IACJ,WAES,UAAU,CAAC,WAAW;AAK3B,YAEI,EAAE,eAAe,IAAI,GAAG,SACxB,eAAe,cACR,eAAe,cAAc,WAAS,CAAC,YAAY,IAAI,KAAK,CAAC,IAAI,IAClE,eAAe,QACrB,SAAS,eAAe,MAAM,GAAG,YAAY,GAC7C,iBAAiB,IAAI,IAAI,QAAQ,OAAO,eAAe,CAAC;AAC5D,iBAAW,SAAS,gBAAgB;AAChC,YAAI,eAAe,IAAI,KAAK,GAAG;AAC3B,yBAAe,OAAO,KAAK;AAAA,QAC/B;AAAA,MACJ;AACA,iBAAW,YAAY,gBAAgB;AACnC,eAAO,KAAK,QAAQ;AAAA,MACxB;AACA,aAAO,KAAK,MAAM;AAClB,qBAAe,OAAO,GAAG,cAAc,GAAG,MAAM;AAChD,gBAAU;AAAA,IACd,OACK;AAID,YAAM,iBAAiB,QAAQ,OAAO,UAClC,gBAAgB,IAAI,KAAK,CAAC,GAAG,QAAQ,SAAS,IAAI,CAAC;AACvD,UAAI,eAAe,SAAS,GAAG;AAC3B,WAAG,gBAAgB,WAAW,GAAG,QAAQ,gBAAgB,cAAc;AACvE,kBAAU;AAAA,MACd;AAAA,IACJ;AAEA,UAAM,kBAAkB,IAAI,IAAI,MAAM,OAAO,WAAS,CAAC,gBAAgB,KAAK,CAAC,CAAC;AAC9E,QAAI,gBAAgB,OAAO,GAAG;AAC1B,UAAI,MAAM;AACN,mBAAW,cAAc,iBAAiB;AACtC,sBAAY,OAAO,WAAW,OAAO,UAAU,UAAU;AACzD,0BAAgB,IAAI,WAAW,MAAM;AAAA,QACzC;AAAA,MACJ,OACK;AACD,oBAAY,OAAO,GAAG,QAAQ,gBAAgB,eAAe;AAAA,MACjE;AACA,gBAAU;AAAA,IACd;AACA,QAAI,UAAU;AACV,SAAG,MAAM,SAAS,CAAC,GAAG,MAAM,OAAO,MAAM,IAAI;AAC7C,gBAAU;AAAA,IACd;AACA,QAAI,QAAQ,gBAAgB,OAAO,GAAG;AAClC,SAAG,QAAQ,cAAc;AAAA,QACrB,QAAS,GAAG,mBAAmB,GAAG,QAAQ,EAAE;AAAA,QAC5C,QAAS;AAAA,MACb,CAAC;AAAA,IACL,WACS,SAAS;AAEd,SAAG,SAAS;AACZ,SAAG,QAAQ,SAAS;AAAA,IACxB;AACA,WAAO,CAAC,GAAG,eAAe;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,gBAAgB,KAAK,QAAQ,WAAW;AACpC,UAAM,eAAe,IAAI,IAAI,SAAS;AACtC,QACI,cAAc,GACd,WAAW,GACX,OAAO,aAAa,SAAS;AACjC,WAAO,WAAW,IAAI,UAAU,CAAC,MAAM;AACnC,YAAM,aAAa,OAAO,WAAW;AACrC,UAAI,UAAU,IAAI,QAAQ;AAE1B,aAAO,eAAe,SAAS;AAC3B,YAAI,aAAa,IAAI,OAAO,GAAG;AAC3B,iBAAO,OAAO,aAAa,GAAG,OAAO;AACrC;AACA,uBAAa,OAAO,OAAO;AAC3B,iBAAO,aAAa,SAAS;AAAA,QACjC;AACA,kBAAU,IAAI,EAAE,QAAQ;AAAA,MAC5B;AAEA,UAAI,aAAa,IAAI,UAAU,GAAG;AAC9B,qBAAa,OAAO,UAAU;AAAA,MAClC;AAEA,UAAI,cAAc,OAAO,QAAQ;AAC7B;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AACJ;;;ACvkBA,IAAO,sBAAQ,YAAU,MAAM,qBAAqB,UAAU,MAAM;AAAA,EAChE,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,WAAW,gBAAgB;AACvB,WAAO;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,MAsCH,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOV,oBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOrB,uBAAwB;AAAA,IAC5B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,IAAI,mBAAmB,QAAQ;AAC3B,SAAK,QAAQ,aAAa;AAAA,EAC9B;AAAA,EACA,IAAI,qBAAqB;AACrB,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,QAAQ,SAAS;AACjB,UACI,KAAa,MACb,aAAa,GAAG;AACpB,eAAW,MAAM;AAEjB,OAAG,mBAAmB;AAEtB,QAAI,SAAS;AACT,UAAI,QAAQ,YAAY,SAAS,UAAU;AACvC,mBAAW,KAAK,OAAO,QAAQ,OAAO,GAAG;AAGrC,cAAI,EAAE,CAAC,MAAM,cAAc,OAAO,EAAE,CAAC,MAAM,YAAY;AACnD,uBAAW,IAAI,IAAI,iBAAO;AAAA,cACtB,UAAW,EAAE,CAAC;AAAA,YAClB,CAAC,CAAC;AAAA,UACN,OACK;AACD,uBAAW,IAAI,IAAI,iBAAO,EAAE,CAAC,EAAE,YAAY,SAAS,WAAW,OAAO,OAAO;AAAA,cACzE,UAAW,EAAE,CAAC;AAAA,YAClB,GAAG,EAAE,CAAC,CAAC,IAAI;AAAA,cACP,UAAW,EAAE,CAAC;AAAA,cACd,OAAW,EAAE,CAAC;AAAA,YAClB,CAAC,CAAC;AAAA,UACN;AAAA,QACJ;AAAA,MACJ,WACS,MAAM,QAAQ,OAAO,GAAG;AAE7B,mBAAW,IAAI,GAAG,QAAQ,IAAI,kBAAgB;AAC1C,cAAI,wBAAwB,kBAAQ;AAChC,mBAAO;AAAA,UACX;AACA,iBAAO,IAAI,iBAAO,YAAY;AAAA,QAClC,CAAC,CAAC;AAAA,MACN,WACS,QAAQ,cAAc;AAE3B,mBAAW,IAAI,GAAG,QAAQ,MAAM;AAAA,MACpC,OACK;AACD,mBAAW,IAAI,IAAI,iBAAO;AAAA,UACtB,UAAW;AAAA,QACf,CAAC,CAAC;AAAA,MACN;AACA,iBAAW,QAAQ,UAAQ,KAAK,QAAQ,EAAE;AAAA,IAC9C;AAAA,EACJ;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,aAAa,KAAK,WAAW,IAAI,WAAW,EAAE,WAAY,CAAC,UAAU,EAAE,CAAC;AAAA,EACxF;AAAA,EACA,IAAI,gBAAgB,iBAAiB;AACjC,SAAK,mBAAmB;AAAA,EAC5B;AAAA,EACA,IAAI,kBAAkB;AAClB,UACI,KAAyB,MACzB,EAAE,SAAS,UAAU,IAAI;AAC7B,QAAI,CAAC,GAAG,kBAAkB;AACtB,UAAI,QAAQ,OAAO;AACf,cAAM,0BAA0B,iBAAO,wBAAwB,OAAO;AACtE,WAAG,mBAAmB,eAAa;AAE/B,cAAI,aAAa,UAAU,cAAc;AACrC,mBAAO,UAAU,cAAc,KAAK,uBAAuB;AAAA,UAC/D;AACA,iBAAO,wBAAwB,SAAS;AAAA,QAC5C;AAAA,MACJ,OACK;AACD,WAAG,mBAAmB,eAAe;AAAA,MACzC;AAAA,IACJ;AACA,WAAO,GAAG;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,aAAa;AACb,WAAO,KAAK,QAAQ,OAAO,KAAK,CAAAE,YAAU,CAACA,QAAO,QAAQ;AAAA,EAC9D;AAAA,EACA,cAAc,QAAQ;AAClB,WAAO,KAAK,cAAc,CAAC,KAAK,gBAAgB,MAAM;AAAA,EAC1D;AAAA;AAAA,EAEA,eAAe,QAAQ;AACnB,UACI,KAAc,MACd,cAAc,CAAC,OAAO,UAAU,GAAG,gBAAgB,MAAM,GACzD,WAAc,OAAO,sBAAsB,OAAO;AAEtD,QAAI,CAAC,YAAY,CAAC,SAAS,QAAQ;AAC/B,aAAO;AAAA,IACX;AACA,QAAI,CAAC,OAAO,oBAAoB;AAC5B,aAAO,qBAAqB,OAAO,SAAS,MAAM;AAAA,IACtD;AACA,WAAO,WAAW,OAAO,mBAAmB,OAAO,OAAK;AACpD,aAAO,GAAG,eAAe,CAAC;AAAA,IAC9B,CAAC;AACD,QAAI,GAAG,UAAU;AACb,aAAO,SAAS,KAAK,GAAG,QAAQ;AAAA,IACpC;AAEA,WAAO,sBAAsB,OAAO,oBAAoB,mBAAmB,IAAI;AAE/E,WAAO,sBAAsB,OAAO,UAAU,eAAe,IAAI;AACjE,WAAO,eAAe,QAAQ,OAAO,SAAS,MAAM;AAAA,EACxD;AAAA,EACA,oBAAoB,QAAQ;AACxB,UAAM,KAAK;AACX,QAAI,OAAO,oBAAoB;AAG3B,aAAO,WAAW,OAAO,gBAAgB,MAAM;AAC/C,aAAO,qBAAqB;AAAA,IAChC;AACA,QAAI,OAAO,UAAU;AACjB,UAAI,GAAG,UAAU;AACb,eAAO,SAAS,KAAK,GAAG,QAAQ;AAAA,MACpC;AACA,aAAO,SAAS,QAAQ,OAAK,GAAG,oBAAoB,CAAC,CAAC;AACtD,aAAO,sBAAsB,OAAO,UAAU,eAAe,IAAI;AAAA,IACrE;AAAA,EACJ;AAAA,EACA,IAAI,oBAAoB;AACpB,WAAO,KAAK,QAAQ,OAAO,KAAK,QAAQ,KAAK,WAAW;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,UAAUA,SAAQ,SAAS,OAAO;AAC9B,UAAM,KAAK;AACX,IAAAA,UAASA,mBAAkB,mBAASA,UAAS,IAAI,iBAAOA,OAAM;AAE9D,IAAAA,QAAO,QAAQ;AAEf,OAAG,QAAQ,IAAIA,OAAM;AACrB,QAAI,CAAC,QAAQ;AACT,UAAI,GAAG,cAAc;AACjB,eAAO,GAAG,OAAO,EAAE,KAAK,MAAMA,OAAM;AAAA,MACxC,OACK;AACD,WAAG,OAAO;AAAA,MACd;AAAA,IACJ;AACA,WAAOA;AAAA,EACX;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,EAkGA,OAAO,YAAY;AACf,UAAM,KAAK;AACX,QAAI,SAAS,OAAO;AACpB,QAAI,YAAY;AACZ,UAAI,YAAY,OAAO;AACvB,UAAI,cAAc,UAAU;AACxB,YAAK,YAAY,cAAgB,aAAa,cAAe,WAAW,SAAS;AAC7E,mBAAS,WAAW;AACpB,cAAI,WAAW,SAAS;AAEpB,eAAG,aAAa,WAAW,QAAQ,WAAW,CAAC;AAAA,UACnD;AACA,qBAAW,WAAW;AACtB,uBAAa,WAAW;AACxB,sBAAY,OAAO;AAAA,QACvB;AAAA,MACJ;AAEA,UAAI,YAAY;AACZ,cAAM,cAAc,GAAG;AAEvB,WAAG,gBAAgB;AAcnB,YAAI,MAAM,QAAQ,UAAU,GAAG;AAC3B,qBAAW,QAAQ,OAAK,GAAG,UAAU,GAAG,IAAI,GAAG,EAAE;AAAA,QACrD,WACS,cAAc,YAAY;AAC/B,gBAAMA,UAAS,IAAI,iBAAO,UAAU;AACpC,UAAAA,QAAO,WAAW;AAClB,aAAG,UAAUA,SAAQ,IAAI;AAAA,QAC7B,WAGS,cAAc,UAAU;AAC7B,aAAG,UAAU;AAAA,YACT,UAAW;AAAA,YACX,OAAW,UAAU,CAAC;AAAA,UAC1B,GAAG,IAAI;AAAA,QACX,OAEK;AACD,aAAG,UAAU,YAAY,IAAI;AAAA,QACjC;AAEA,WAAG,gBAAgB;AAEnB,YAAI,CAAC,GAAG,cAAc,CAAC,aAAa;AAChC,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AAEA,OAAG,kBAAkB;AAGrB,UAAM,SAAS,GAAG,cAAc,MAAM;AAEtC,OAAG,SAAS;AACZ,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAc,QAAQ;AAClB,UACI,KAAiC,MACjC,EAAE,SAAS,SAAS,SAAS,IAAI,IACjC,WAAiC,GAAG;AAExC,OAAG,QAAQ,gBAAgB,EAAE,QAAQ,CAAC;AACtC,QAAI,OAAO;AACX,QAAI,GAAG,MAAM;AACT,YAAM,aAAa,QAAQ;AAC3B,UAAI,GAAG,YAAY;AACf,WAAG,eAAe,QAAQ;AAAA,MAC9B,OACK;AACD,WAAG,oBAAoB,QAAQ;AAAA,MACnC;AACA,YAAM,aAAa,GAAG,mBAAmB,QAAQ,EAAE;AACnD,cAAQ,cAAc;AAAA,QAClB,QAAS;AAAA,QACT,QAAS;AAAA,MACb,CAAC;AACD,YAAM,QAAQ,YAAY,MAAM,YAAY,YAAY,IAAI;AAC5D,cAAU,MAAM;AAChB,gBAAU,MAAM;AAAA,IACpB,OACK;AAED,cAAQ,IAAI;AAAA,QACR,OAAO,EAAE,SAAU,GAAG,OAAQ,EAAE,GAAG;AAC/B,oBAAU;AACV,kBAAQ;AAAA,QACZ;AAAA,QACA,MAAO;AAAA,MACX,CAAC;AACD,UAAI,GAAG,YAAY;AAEf,WAAG,aAAa,GAAG,iBAAiB;AACpC,gBAAQ,UAAU;AAAA,UACd,IAAW;AAAA,UACX,UAAW,GAAG;AAAA,QAClB,CAAC;AAED,WAAG,aAAa,GAAG,iBAAiB;AAAA,MACxC,OACK;AACD,gBAAQ,QAAQ,MAAM;AAAA,MAC1B;AAAA,IACJ;AACA,OAAG,mBAAmB,UAAU,GAAG,sBAAsB,OAAO;AAAA,MAC5D,QAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAU,GAAG,QAAQ;AAAA,IACzB,CAAC;AAAA,EACL;AAAA,EACA,mBAAmB,OAAO;AACtB,SAAK,mBAAmB;AACxB,QAAI,OAAO;AACP,WAAK,mBAAmB,KAAK;AAAA,IACjC;AAAA,EACJ;AAAA;AAAA,EAEA,mBAAmB,OAAO;AACtB,SAAK,QAAQ,UAAU,KAAK;AAG5B,QAAI,CAAC,KAAK,cAAc;AACpB,WAAK,QAAQ,WAAW,KAAK;AAC7B,WAAK,QAAQ,UAAU,KAAK;AAAA,IAChC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,SAASC,KAAI;AACT,WAAO,KAAK,OAAOA,GAAE;AAAA,EACzB;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,EAyCA,aAAa,cAAc,SAAS,OAAO;AACvC,UACI,KAAS,MACTD,UAAS,wBAAwB,mBAAS,eAAe,GAAG,QAAQ,IAAI,YAAY;AAExF,QAAIA,SAAQ;AACR,SAAG,QAAQ,OAAOA,OAAM;AAExB,SAAG,mBAAmB;AACtB,UAAI,CAAC,QAAQ;AACT,YAAI,GAAG,cAAc;AACjB,iBAAO,GAAG,OAAO,EAAE,KAAK,MAAMA,OAAM;AAAA,QACxC,OACK;AACD,aAAG,OAAO;AAAA,QACd;AAAA,MACJ;AACA,aAAOA;AAAA,IACX;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAa,QAAQ,MAAM;AAEvB,SAAK,QAAQ,OAAO,KAAK,QAAQ,OAAO,OAAO,OAAK,CAAC,EAAE,QAAQ,CAAC;AAChE,QAAI,OAAO;AACP,aAAO,KAAK,OAAO;AAAA,IACvB;AAAA,EACJ;AAAA,EACA,sBAAsB,OAAO;AACzB,UAAMA,UAAS,KAAK,QAAQ,MAAM,YAAY,KAAK;AACnD,WAAQA,WAAU,CAACA,QAAO,WAAY,OAAOA,OAAM,IAAI;AAAA,EAC3D;AAAA,EACA,YAAY;AAjpBhB,QAAAE;AAkpBQ,KAAAA,MAAA,KAAK,aAAL,gBAAAA,IAAe;AACf,UAAM,UAAU;AAAA,EACpB;AACJ;;;AC7oBA,IACI,gBAAqB;AAAA,EACjB,KAAU;AAAA,EACV,SAAU;AACd;AAJJ,IAKI,qBAAqB,CAAC,EAAE,aAAc,IAAI,GAAG,EAAE,aAAc,IAAI,MAAM,MAAM,MAAM,KAAK,MAAM,MAAM,IAAI;AAL5G,IAMI,UAAU,CAAC,OAAO,UAAU,MAAM,QAAQ,IAAI,MAAM,SAAS,QAAQ,KAAK;AAgC9E,IAAO,qBAAQ,YAAO;AA9CtB,MAAAC;AA8CyB,SAAAA,MAAA,eAA0B,UAAU,MAAM;AAAA,IA6B/D,WAAW,aAAa;AACpB,aAAO;AAAA,QACH,iBAAkB,oBAAI,IAAI;AAAA,MAC9B;AAAA,IACJ;AAAA;AAAA;AAAA,IAGA,UAAU,QAAQ;AACd,YAAM,UAAU,MAAM;AAGtB,WAAK,IAAI,EAAE,QAAS,iBAAiB,SAAU,KAAK,CAAC;AAAA,IACzD;AAAA,IACA,IAAI,WAAW;AAxFnB,UAAAA;AAyFQ,aAAO,KAAK,mBAAmB,KAAK,kBAAiBA,MAAA,cAAc,KAAK,WAAW;AAAA,QAM/E,IAAI,cAAc;AACd,iBAAO,KAAK,KAAK;AAAA,QACrB;AAAA,MACJ,GARI,cADiDA,KAC1C,gBAAe;AAAA,MAEtB,cAHiDA,KAG1C,UAAS,CAAC;AAAA,QACb,MAAO;AAAA,MACX,CAAC,IALgDA;AAAA,IAUzD;AAAA,IACA,eAAe,UAAU;AACrB,WAAK,YAAY,QAAQ;AAAA,IAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,YAAY,UAAU,UAAU,MAAM;AAClC,YACI,KAAa,MACb,EAAE,QAAQ,IAAI;AAClB,UAAI;AACJ,UAAI,qCAAU,QAAQ;AAClB,WAAG,YAAY,SAAS,IAAI,OAAK,GAAG,cAAc,CAAC,CAAC;AAAA,MACxD,WACS,GAAG,UAAU;AAClB,eAAO,GAAG;AACV,WAAG,iBAAiB;AACpB,gBAAQ,cAAc;AAAA,UAClB,QAAiB,GAAG,wBAAwB,QAAQ,OAAO;AAAA,UAC3D,gBAAiB,QAAQ,aAAa,GAAG,wBAAwB,QAAQ,eAAe,IAAI;AAAA,UAC5F,QAAiB;AAAA,QACrB,CAAC;AACD,iBAAS,GAAG,MAAM,MAAM,MAAM,MAAM,OAAO,mCAAS,MAAM;AAAA,MAC9D;AAEA,SAAG,SAAS;AACZ,aAAO;AAAA,IACX;AAAA,IACA,cAAc,SAAS;AACnB,UAAI,CAAC,WAAW,QAAQ,WAAW;AAC/B,eAAO;AAAA,MACX;AACA,UAAI,OAAO,YAAY,UAAU;AAC7B,kBAAU;AAAA,UACN,OAAQ;AAAA,QACZ;AAAA,MACJ;AACA,YACI,EAAE,MAAM,IAAS,SACjB,SAAiB,+BAAO,QAAQ,MAChC,iBAAiB,SAAS,GAC1B,OAAiB,+BAAO,MAAM,MAC9B,gBAAiB,iBAAiB,KAAK,CAAC,IAAI,OAC5C,gBAAiB,iBAAiB,QAAQ,MAAM,EAAE,IAAI,OACtD,YAAiB,iBAAiB,MAAM,MAAM,SAAS,CAAC,IAAI;AAChE,aAAO;AAAA,QACH,WAAY;AAAA,QACZ,GAAG;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA,IAAI,yBAAyB;AA/JjC,UAAAA;AAgKQ,YAAM,KAAK;AACX,UAAI,GAAG,WAAW;AACd,cAAM,EAAE,WAAW,IAAI,GAAG;AAC1B,cAAIA,MAAA,GAAG,4BAAH,gBAAAA,IAA4B,gBAAe,YAAY;AACvD,aAAG,0BAA0B,GAAG,QAAQ,UAAU,OAAO,OAAK,EAAE,YAAY;AAC5E,aAAG,wBAAwB,aAAa;AAAA,QAC5C;AAAA,MACJ;AACA,aAAO,GAAG,2BAA2B,CAAC;AAAA,IAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,wBAAwB,cAAc,eAAe,OAAO;AACxD,UAAI,KAAK,WAAW;AAChB,eAAO,eAAgB,aAAa,KAAK,cAAc,eAAe,aAAa,YAAY,IAAI,KAAK,EAAE,IAAK,KAAK,aAAa;AAAA,MACrI;AAAA,IACJ;AAAA;AAAA,IAEA,mBAAmB;AACf,iBAAW,WAAW,KAAK,iBAAiB;AACxC,aAAK,OAAO,KAAK,QAAQ,OAAO,GAAG,KAAK;AAAA,MAC5C;AAAA,IACJ;AAAA;AAAA,IAEA,mBAAmB;AACf,iBAAW,WAAW,KAAK,iBAAiB;AACxC,aAAK,SAAS,KAAK,QAAQ,OAAO,CAAC;AAAA,MACvC;AAAA,IACJ;AAAA,IACA,aAAa,EAAE,QAAS,SAAS,QAAQ,QAAQ,GAAG;AAlMxD,UAAAA;AAmMQ,YACI,KAAe,MACf,EAAE,SAAS,IAAI;AAInB,UAAI,UAAU;AAIV,YAAI,SAAS,QAAQ;AACjB,cAAK,WAAW,aAAY,mCAAS,WAAW,WAAW,QAAQ;AAC/D,oBAAQ,cAAc;AAAA,cAClB,GAAG,GAAG,oBAAoB;AAAA,cAC1B,QAAS;AAAA,YACb,CAAC;AAAA,UACL;AAAA,QACJ,OAEK;AACD,kBAAQ,cAAc;AAAA,YAClB,QAAiB,GAAG,wBAAwB,QAAQ,OAAO;AAAA,YAC3D,gBAAiB,QAAQ,aAAa,GAAG,wBAAwB,QAAQ,eAAe,IAAI;AAAA,YAC5F,QAAiB;AAAA,UACrB,CAAC;AAAA,QACL;AAAA,MACJ;AACA,OAAAA,MAAA,MAAM,iBAAN,gBAAAA,IAAA,WAAqB,GAAG;AAAA,IAC5B;AAAA,IACA,KAAK,SAAS,cAAc;AACxB,YAAM,KAAK;AACX,UAAI,GAAG,aAAa,CAAC,GAAG,MAAM;AAC1B,YAAI,aAAa;AACjB,YAAI,6CAAc,cAAc;AAC5B,uBAAa,GAAG,QAAQ,cAAc,OAAO,KAAK;AAClD,cAAI,CAAC,YAAY;AAEb;AAAA,UACJ;AAAA,QACJ;AAEA,cACI,oBAA4B,GAAG,wBAAwB,UAAU,GACjE,aAA4B,GAAG,SAAS,CAAC,EAAE,OAC3C,gBAA4B,kBAAkB,KAAK,aACnD,EAAE,sBAAsB,IAAI;AAGhC,WAAG,wBAAwB;AAC3B,WAAG,WAAW;AACd,gBAAQ,QAAQ,YAAU,OAAO,SAAS,YAAY,aAAa,CAAC;AACpE,WAAG,SAAS;AACZ,WAAG,wBAAwB;AAI3B,YAAI,GAAG,eAAc,6CAAc,eAAc;AAC7C,gBACI,EAAE,uBAAuB,IAAI,IAE7B,QAAQ,uBAAuB,QAAQ,iBAAiB;AAG5D,yBAAe,uBAAuB,QAAQ,CAAC;AAAA,QACnD;AAAA,MACJ;AACA,YAAM,KAAK,SAAS,YAAY;AAAA,IACpC;AAAA;AAAA,IAEA,SAAS,aAAa;AAClB,UAAI,eAAe,CAAC,YAAY,KAAK,WAAW;AAC5C,aAAK,oBAAoB,WAAW;AACpC,oBAAY,KAAK,YAAY;AAE7B,aAAK,gBAAgB,IAAI,YAAY,EAAE;AACvC,aAAK,QAAQ,eAAe,EAAE,aAAa,UAAW,KAAK,CAAC;AAC5D,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX;AAAA;AAAA,IAEA,OAAO,aAAa,YAAY,MAAM;AAClC,UAAI,2CAAa,KAAK,WAAW;AAC7B,aAAK,oBAAoB,WAAW;AACpC,oBAAY,KAAK,YAAY;AAE7B,qBAAa,KAAK,gBAAgB,OAAO,YAAY,EAAE;AACvD,qBAAa,KAAK,QAAQ,eAAe,EAAE,aAAa,UAAW,MAAM,CAAC;AAC1E,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX;AAAA,IACA,wBAAwB,SAAS;AAC7B,aAAO,QAAQ,OAAO,OAAK;AAhSnC,YAAAA;AAkSY,YAAI,EAAE,yBAAyB;AAC3B,YAAE,cAAc,SAAS,EAAE,wBAAwB,SAAS,EAAE,KAAK,aAAa;AAAA,QACpF;AAIA,YAAI,EAAE,gBAAiB,EAAE,cAAYA,MAAA,EAAE,gBAAF,gBAAAA,IAAe,IAAI,KAAK,MAAM;AAC/D,eAAK,WAAW,CAAC;AACjB,iBAAO;AAAA,QACX;AACA,eAAO;AAAA,MACX,CAAC;AAAA,IACL;AAAA,IACA,sBAAsB;AA/S1B,UAAAA;AAgTQ,YACI,KAAoB,MACpB;AAAA,QACI;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ,IAAoB,IACpB,UAAoB,GAAG,SAAS,CAAC,GACjC,aAAoB,QAAQ,cAAc,QAAQ,IAAI,IACtD;AAAA,QACI;AAAA,QACA,IAAK,cAAc;AAAA,QACnB;AAAA,MACJ,IAAoB,SACpB,OAAoB,OAAO,UAAU,YACrC,eAAoB,UAAU,GAAG,WAAW,SAC5C,kBAAoB,IAAI,WAAW,GAGnC,oBAAoB,GAAG,0BAA0B,CAAC,GAClDC,aAAoB,CAAC,WAAW;AAC5B,cAAM,gBAAgB,CAAC,cAAc,GAAG,gBAAgB,MAAM;AAC9D,eAAO,wBAAwB,gBAAiB,iBAAiB,kBAAkB,SAAS,OAAO,EAAE;AAAA,MACzG,GACA,cAAc,QAAQ,GAAG,wBAAwB,EAAC,6CAAc,MAAK;AAEzE,mDAAc,QAAQ,cAAY;AAC9B,YAAI,SAAS,aAAa;AACtB,aAAG,oBAAoB,QAAQ;AAAA,QACnC;AAAA,MACJ;AACA,YAAM,UAAU,GAAG,wBAAwB,GAAG,QAAQ,OAAO;AAE7D,UAAI,GAAG,QAAQ,QAAQ;AACnB,gBAAQ,KAAK,GAAG,QAAQ;AAAA,MAC5B;AAEA,UAAI,YAAY;AACZ,WAAG,kBAAkB;AAAA,MACzB;AAEA,cAAQ,QAAQ,SAAO;AACnB,cACI,WAAc,KACd,IAAc,OAAO,MAAM,GAAG,IAAI,IAAI,SAAS,KAAK,GACpD,cAAc,YAAY,QAAQ,KAAK,SAAY,gBAAgB,CAAC,GACpE,aAAc,MAAM,QAAQ,WAAW,GACvCC,eAAc,cAAc,CAAC,YAAY,QACzC,SAAcA,eAAa,IAAI,YAAY;AAC/C,iBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC7B,gBACI,aAAaA,eAAa,CAAC,IAAI,YAAY,CAAC,GAC5C,KAAa,gBAAgB,OAAO,eAAe,WAAW,aAAa,aAAa,SAAS,UAAU,CAAC;AAEhH,cAAI,WAAW,gBAAgB,IAAI,EAAE;AAErC,cAAI,CAAC,UAAU;AACX,wBAAW,6CAAc,IAAI,QAAO,IAAI,SAAS;AAAA,cAC7C,CAAC,GAAG,WAAW,OAAO,GAAgB;AAAA,cACtC,CAAC,eAAe,KAAK,aAAa,GAAI;AAAA,cACtC,aAAsC;AAAA,YAC1C,GAAG,IAAI;AAAA,cACH,WAAc;AAAA,cACd,YAAc;AAAA,cACd,aAAc;AAAA,cACd,YAAc;AAAA,cACd,YAAAA;AAAA,YACJ,CAAC;AAED,4BAAgB,IAAI,QAAQ;AAE5B,qBAAS,KAAK,aAAa;AAC3B,qBAAS,gBAAgB,CAAC;AAC1B,qBAAS,0BAA0B,CAAC;AAEpC,qBAAS,SAAS,CAAC,EAAE;AAAA,UACzB;AACA,aAAG,SAAS,QAAQ;AAEpB,cAAI,IAAI,GAAG;AACP,kBAAM,QAAQ,SAAS,eAAe,SAAS,aAAa,CAAC;AAC7D,kBAAM,MAAM,UAAU,MAAM,MAAM,UAAU,IAAI,SAAS,KAAK;AAC9D,gBAAI,SAAS,CAAC,EAAE;AAChB,eAAG,SAAS,GAAG;AAAA,UACnB;AAEA,cAAI,CAAC,IAAI,aAAa;AAClB,gBAAI,QAAQ,eAAe,oBAAI,IAAI,CAAC;AAAA,UACxC;AACA,cAAI,YAAY,IAAI,GAAG,IAAI,QAAQ;AAEnC,cAAID,WAAU,GAAG,GAAG;AAChB,qBAAS,cAAc,KAAK,GAAG;AAC/B,qBAAS,KAAK;AAAA,UAClB;AACA,mBAAS,wBAAwB,KAAK,GAAG;AAAA,QAC7C;AAAA,MACJ,CAAC;AAED,sBAAgB,QAAQ,KAAK,CAAC,KAAK,QAAQ,YAAY,KAAK,GAAG,IAAI,UAAU;AAE7E,UAAI,GAAG,iBAAiB;AACpB,iBAAS,QAAQ,GAAG,SAAS,gBAAgB,OAAO,QAAQ,QAAQ,SAAS;AACzE,gBACI,WAAW,gBAAgB,OAAO,KAAK,GACvC,MAAS,SAAS,KAAK,aACvB,KAAS,gBAAgB,OAAO,QAAQ,WAAW,MAAM,aAAa,SAAS,GAAG,CAAC,IACnF,SAAS,GAAG,QAAQ,EAAE,KAAK,IAAI,SAAS;AAAA,YACpC,CAAC,GAAG,WAAW,OAAO,GAAgB;AAAA,YACtC,CAAC,eAAe,KAAK,aAAa,GAAI;AAAA,YACtC,aAAsC;AAAA,UAC1C,GAAG,IAAI;AAAA,YACH,YAAiB;AAAA,YACjB,gBAAiB;AAAA,YACjB,aAAiB;AAAA,UACrB,CAAC;AAEL,iBAAO,SAAS,CAAC,EAAE;AACnB,aAAG,SAAS,MAAM;AAClB,iBAAO,gBAAgB,SAAS;AAEhC,0BAAgB,OAAO,EAAE,OAAO,GAAG,MAAM;AACzC;AAEA,mBAAS,cAAc,KAAK,MAAM;AAClC,mBAAS,wBAAwB,KAAK,MAAM;AAC5C,mBAAS,KAAK;AAAA,QAClB;AAAA,MACJ;AACA,SAAG,SAAS;AAEZ,YAAM,SAAS;AAAA,QACX,QAAS,gBAAgB,OAAO,CAACE,SAAQ,aAAa;AAClD,cAAI,CAAC,SAAS,eAAe;AACzB,YAAAA,QAAO,KAAK,QAAQ;AACpB,gBAAI,CAAC,SAAS,KAAK,WAAW;AAC1B,cAAAA,QAAO,KAAK,GAAG,SAAS,uBAAuB;AAAA,YACnD;AAAA,UACJ;AACA,iBAAOA;AAAA,QACX,GAAG,OAAO,CAAC,CAAC;AAAA,MAChB;AACA,UAAI,YAAY;AACZ,eAAO,iBAAiB,OAAO,OAAO,OAAOF,UAAS;AAAA,MAC1D;AAEA,OAAAD,MAAA,GAAG,iBAAH,gBAAAA,IAAiB,QAAQ,iBAAe;AACpC,YAAI,CAAC,gBAAgB,SAAS,WAAW,GAAG;AACxC,sBAAY,QAAQ;AAAA,QACxB;AAAA,MACJ;AAEA,SAAG,eAAe;AAClB,aAAO;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,IAAI,YAAY;AApdpB,UAAAA;AAqdQ,aAAO,SAAQA,MAAA,KAAK,aAAL,gBAAAA,IAAe,MAAM;AAAA,IACxC;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,IAwCA,MAAM,OAAOI,YAAW,MAAM,OAAO,cAAc,MAAM,SAAS,OAAO;AA9f7E,UAAAJ,KAAA;AA+fQ,YACI,KAAU,MACV,UAAU,GAAG,cAAc,KAAK;AACpC,UAAI;AACJ,UAAI,KAAK;AACL,WAAG,SAAS,KAAK,OAAO;AAAA,MAC5B,WACS,OAAO;AACZ,YAAII,cAAa,QAAQ,EAAE,eAAe,UAAU;AAChD,kBAAQ,YAAY,QAAQ,QAAMJ,MAAA,GAAG,cAAH,gBAAAA,IAAc,WAAU,QAAQ,WAAS,QAAG,cAAH,mBAAc,QAAO,QAAQ,KAAK,CAAC,GAAG,UAAU,YAAY;AAAA,QAC3I;AACA,WAAG,YAAY,aAAa;AAC5B,WAAG,WAAW,CAAC,GAAG,SAAS;AAAA,MAC/B;AACA,UAAI,YAAY;AACZ,cAAM,EAAE,WAAAK,WAAU,IAAI,GAAG;AAEzB,YAAI,WAAW,kBAAkB,CAAC,OAAO,UAAU,eAAe,KAAKA,YAAW,KAAK,GAAG;AACtF,iBAAO,eAAeA,YAAW,OAAO;AAAA,YACpC,MAAM;AACF,qBAAO,aAAa,QAAQ,MAAM,KAAK;AAAA,YAC3C;AAAA,UACJ,CAAC;AAAA,QACL;AAAA,MACJ;AAEA,UAAI,gBAAgB,OAAO;AACvB,YAAI,GAAG,cAAc,CAAC,GAAG,qBAAqB;AAC1C,iBAAO,GAAG,KAAK,MAAM,MAAM,OAAO,IAAI,EAAE,KAAK,MAAM,GAAG,gBAAgB,MAAM,CAAC;AAAA,QACjF,OACK;AACD,aAAG,KAAK,MAAM,MAAM,OAAO,IAAI;AAAA,QACnC;AAAA,MACJ;AACA,SAAG,gBAAgB,MAAM;AAAA,IAC7B;AAAA,IACA,gBAAgB,QAAQ;AACpB,UAAI,QAAQ;AACR;AAAA,MACJ;AACA,YACI,KAAK,MACL,WAAW,GAAG,YAAY,CAAC;AAQ/B,SAAG,QAAQ,SAAS,EAAE,WAAY,GAAG,WAAW,UAAU,SAAU,GAAG,QAAQ,OAAO,CAAC;AACvF,SAAG,QAAQ,WAAW,EAAE,QAAS,SAAS,WAAY,GAAG,WAAW,UAAU,SAAU,GAAG,QAAQ,OAAO,CAAC;AAAA,IAC/G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYA,WAAW,OAAOD,aAAY,MAAM;AAChC,aAAO,KAAK,MAAM,OAAOA,YAAW,IAAI;AAAA,IAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWA,cAAc,OAAO;AACjB,YACI,KAAe,MACf,EAAE,SAAS,IAAI;AACnB,UAAI,CAAC,UAAU;AACX;AAAA,MACJ;AACA,YAAM,QAAQ,SAAS,UAAU,aAAW,QAAQ,UAAU,KAAK;AACnE,UAAI,QAAQ,IAAI;AACZ,iBAAS,OAAO,OAAO,CAAC;AACxB,YAAI,CAAC,SAAS,QAAQ;AAClB,iBAAO,GAAG,cAAc;AAAA,QAC5B,OACK;AACD,iBAAO,GAAG,MAAM;AAAA,QACpB;AAAA,MACJ;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,cAAc,SAAS,OAAO;AAC1B,aAAO,KAAK,YAAY,MAAM,EAAE,OAAO,CAAC;AAAA,IAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,gBAAgB,QAAQ,YAAY;AAlnBxC,UAAAJ;AAmnBQ,UAAI,CAAC,KAAK,WAAW;AACjB,eAAO;AAAA,MACX;AACA,YAAM,cAAaA,MAAA,KAAK,SAAS,CAAC,MAAf,gBAAAA,IAAkB;AACrC,aAAO,OAAO,SAAS,UAAU,MAAM,cAAc,CAAC,OAAO;AAAA,IACjE;AAAA,IACA,mBAAmB,QAAQ;AACvB,YAAM,iBAAiB,OAAO,YAAY,IAAI,KAAK,EAAE;AACrD,aAAO,iDAAgB,KAAK;AAAA,IAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,gBAAgB,YAAY;AACxB,UAAI,CAAC,KAAK,WAAW;AACjB,eAAO;AAAA,MACX;AACA,aAAO,KAAK,QAAQ,OAAO,OAAO,YAAU,KAAK,gBAAgB,QAAQ,UAAU,CAAC;AAAA,IACxF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,iBAAiB;AACb,UAAI,CAAC,KAAK,WAAW;AACjB,eAAO;AAAA,MACX;AACA,aAAO,KAAK,kBAAkB,KAAK,SAAS,CAAC,EAAE,KAAK;AAAA,IACxD;AAAA;AAAA,IAEA,cAAc,EAAE,SAAS,OAAO,GAAG;AAC/B,UACI,KAAK;AAAA,OAEA,CAAC,WAAW,cAAc,MAAM;AAAA,MAEhC,WAAW,KAAK,SAAS,KAAK,aAAW,QAAQ,iBAAiB,OAAO,IAEhF;AAEE,aAAK,KAAK;AAAA,MACd;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,mCAAmC,aAAa,SAAS;AACrD,YACI,KAA0B,MAC1B,QAA0B,GAAG,QAAQ,WAAW,GAChD,WAA0B,GAAG,WAAW,WAAW,GACnD,EAAE,IAAK,OAAO,QAAQ,IAAI,IAC1B;AAAA,QACI;AAAA,QACA;AAAA,MACJ,IAA0B,SAC1B;AAAA,QACI;AAAA,QACA;AAAA,QACA;AAAA,MACJ,IAA0B;AAG9B,UAAI,aAAa,MAAO,KAAK,aAAa,CAAC,WAAa,CAAC,KAAK,aAAa,SAAU;AACjF;AAAA,MACJ;AACA,8BAAwB;AAAA,QAAQ,WAC5B,MAAM,aAAa,KAAK,EAAE,mBAAmB,CAAC;AAAA,MAClD;AACA,UAAI,SAAS;AAET,YAAI,iBAAiB;AACjB,0BAAgB,OAAO,QAAQ,GAAG,GAAG,GAAG,cAAc,OAAO,OAAK,CAAC,GAAG,YAAY,EAAE,EAAE,CAAC,CAAC;AAAA,QAC5F;AACA,gBAAQ,QAAQ,OAAO,WAAW,GAAG,GAAG,GAAG,wBAAwB,OAAO,OAAK,CAAC,GAAG,YAAY,EAAE,EAAE,CAAC,CAAC;AAAA,MACzG,OACK;AACD,YAAI,iBAAiB;AACjB,0BAAgB,OAAO,QAAQ,GAAG,cAAc,MAAM;AAAA,QAC1D;AACA,gBAAQ,OAAO,WAAW,GAAG,wBAAwB,MAAM;AAAA,MAC/D;AACA,cAAQ,kBAAkB;AAC1B,SAAG,SAAS;AAAA,IAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,oBAAoB,aAAa;AAC7B,WAAK,mCAAmC,aAAa,KAAK;AAAA,IAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,oBAAoB,aAAa;AAC7B,WAAK,mCAAmC,aAAa,IAAI;AAAA,IAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,oBAAoB,YAAY,iBAAiB,MAAM;AACnD,YAAM,UAAU,aAAa,KAAK,QAAQ,YAAY,KAAK,QAAQ;AACnE,aAAO,QAAQ,OAAO,CAACM,UAAS,WAAW;AACvC,YAAI,OAAO,cAAc;AACrB,cAAI,kBAAkB,CAAC,OAAO,eAAe;AACzC,YAAAA,SAAQ,KAAK,MAAM;AAAA,UACvB;AACA,cAAI,OAAO,eAAe;AACtB,YAAAA,SAAQ,KAAK,MAAMA,UAAS,aAAa,OAAO,0BAA0B,OAAO,aAAa;AAAA,UAClG;AAAA,QACJ;AACA,eAAOA;AAAA,MACX,GAAG,CAAC,CAAC;AAAA,IACT;AAAA,EACJ,GAxsBI,cADqBN,KACd,SAAQ;AAAA,EAEf,cAHqBA,KAGd,gBAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAalB,UAAW;AAAA,IACX,iBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUlB,sBAAuB;AAAA,EAC3B,IA5BqBA;AAAA;;;ACDzB,IAAO,qBAAQ,YAAU,MAAM,oBAAoB,UAAU,MAAM;AAAA,EAC/D,WAAW,eAAe;AACtB,WAAO;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,MAyBH,WAAY;AAAA,IAChB;AAAA,EACJ;AAAA,EACA,YAAY;AACR,QAAI,CAAC,WAAW,OAAO;AACnB,YAAM,IAAI,MAAM,qBAAqB;AAAA,IACzC;AACA,UAAM,QAAQ,IAAI,MAAM,MAAM;AAAA;AAAA,MAE1B,IAAI,QAAQ,UAAU;AAElB,YAAI,YAAY,QAAQ;AACpB,iBAAO,OAAO,QAAQ;AAAA,QAC1B;AAEA,YAAI,aAAa,UAAU;AACvB,iBAAO;AAAA,QACX;AAEA,YAAI,SAAS,OAAO,QAAQ,QAAQ;AAEpC,YAAI,CAAC,UAAU,CAAC,MAAM,SAAS,QAAQ,CAAC,GAAG;AACvC,mBAAS,OAAO,MAAM,SAAS,QAAQ,CAAC;AAAA,QAC5C;AACA,eAAO;AAAA,MACX;AAAA;AAAA,MAEA,IAAI,QAAQ,UAAU,OAAO;AAEzB,YAAI,YAAY,UAAU,OAAO,gBAAgB,aAAa,cAAc;AACxE,iBAAO,QAAQ,IAAI;AAAA,QACvB,OAEK;AACD,iBAAO,IAAI,EAAE,CAAC,OAAO,WAAW,OAAO,GAAI,UAAU,GAAG,MAAM,CAAC;AAAA,QACnE;AACA,eAAO;AAAA,MACX;AAAA;AAAA,MAEA,eAAe,QAAQ,UAAU;AAE7B,YAAI,OAAO,cAAc;AACrB,iBAAO,OAAO,QAAQ;AACtB,iBAAO;AAAA,QACX;AACA,eAAO,QAAQ,OAAO,OAAO,QAAQ,EAAE,MAAM;AAAA,MACjD;AAAA;AAAA,MAEA,IAAI,QAAQ,UAAU;AAElB,YAAI,YAAY,QAAQ;AACpB,iBAAO;AAAA,QACX;AAEA,YAAI,SAAS,WAAW,GAAG,KAAK,SAAS,SAAS,GAAG,GAAG;AACpD,gBAAM,OAAO,aAAa,cAAc,QAAQ;AAChD,qBAAW,6BAAM;AAAA,QACrB;AACA,eAAO,OAAO,SAAS,QAAQ;AAAA,MACnC;AAAA,IACJ,CAAC;AACD,WAAO;AAAA,EACX;AACJ;;;ACxHA,IAAO,wBAAQ,YAAO;AAftB,MAAAO;AAeyB,SAAAA,MAAA,eAA6B,UAAU,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOlE,cAAc,OAAO;AACjB,YACI,KAAY,MACZ,YAAY,GAAG,WAAW;AAC9B,UAAI,SAAS,GAAG,gBAAgB;AAE5B,WAAG,eAAe,QAAQ,cAAS;AA5B/C,cAAAA;AA4BkD,kBAAAA,MAAA,SAAS,kBAAT,gBAAAA,IAAA;AAAA,SAA0B;AAAA,MACpE;AACA,WAAK,CAAC,GAAG,kBAAkB,GAAG,eAAe,WAAW,KAAK,UAAU,WAAW;AAC9E,WAAG,iBAAiB,CAAC;AAErB,+CAAW,QAAQ,yBAAuB;AACtC,gBACI,SAAe,EAAE,GAAG,oBAAoB,GACxC;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,UACJ,IAAe,QACf,eAAe,OAAO,iBAAiB,WAAW,GAAG,YAAY,IAAI;AACzE,iBAAO,iBAAiB;AACxB,aAAG,eAAe,KAAK,MAAM;AAC7B,cAAI,cAAc;AACd,mBAAO,uBAAuB,OAAO;AACrC,mBAAO,eAAe;AACtB,kBAAM,wBAAwB,aAAa;AAE3C,gBAAI,sBAAsB,IAAI,EAAE,GAAG;AAC/B,oBAAM,mBAAmB,sBAAsB,IAAI,EAAE;AAErD,kBAAI,OAAO;AACP,sBAAM,iBAAiB,iBAAiB,KAAK,OAAK,EAAE,iBAAiB,YAAY;AACjF,oBAAI,gBAAgB;AAChB,8BAAY,OAAO,kBAAkB,cAAc;AAAA,gBACvD;AAAA,cACJ;AACA,+BAAiB,KAAK,MAAM;AAAA,YAChC,OACK;AACD,oCAAsB,IAAI,IAAI,CAAC,MAAM,CAAC;AAAA,YAC1C;AAEA,gBAAI,uBAAuB;AACvB,2BAAa,uBAAuB,QAAQ,EAAE;AAAA,YAClD;AACA,gBAAI,aAAa,QAAQ,GAAG;AACxB,2BAAa,sBAAsB,WAAW,aAAa,OAAO;AAAA,YACtE;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,uBAAuB,QAAQ,iBAAiB;AAC5C,YACI,KAAmB,MACnB,OAAmB,OAAO,uBAC1B,mBAAmB,GAAG,qBAAqB,GAAG,mBAAmB,CAAC;AACtE,uBAAiB,IAAI,IAAI;AAAA,QACrB,OAAQ;AAAA,QACR;AAAA,MACJ;AACA,UAAI,CAAC,GAAG,OAAO,OAAO,GAAG;AACrB,WAAG,OAAO,OAAO,IAAI;AAAA,MACzB;AACA,UAAI,GAAG,QAAQ,GAAG;AACd,WAAG,4BAA4B,MAAM,GAAG,UAAU;AAAA,MACtD;AAAA,IACJ;AAAA,IACA,4BAA4B,MAAM,SAAS;AACvC,YAAM,KAAK;AAEX,cAAQ,QAAQ,YAAU;AAEtB,eAAO,SAAS,UAAQ;AAEpB,gBAAM,UAAU,QAAQ,OAAO,WAAW,aAAa,WAAW,IAAI,CAAC,KAAK;AAC5E,iBAAO,eAAe,MAAM,SAAS;AAAA,YACjC,YAAe;AAAA,YACf,cAAe;AAAA,YACf,KAAe,WAAW;AACtB,qBAAO,GAAG,cAAc,MAAM,IAAI;AAAA,YACtC;AAAA,YACA,KAAM,SAAS,OAAO;AAClB,qBAAO,GAAG,cAAc,MAAM,MAAM,KAAK;AAAA,YAC7C;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAAA,MACL,CAAC;AAAA,IACL;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,qBAAqB;AACjB,WAAK,gBAAgB,CAAC;AACtB,WAAK,QAAQ,YAAU,OAAO,cAAc,CAAC;AAAA,IACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,0BAA0B,QAAQ,WAAW;AACzC,6CAAW,QAAQ,cAAY;AAC3B,cACI,EAAE,OAAO,IAAI,UAEb,YAAY,SAAS,UAAU,SAAS,QAAQ,KAAK,OAAO,SAAS,OAAO,UAAU;AAE1F,sBAAc,UAAa,KAAK,mBAAmB,QAAQ,WAAW,OAAO,cAAc,SAAS;AAAA,MACxG;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWA,sBAAsB,MAAM,YAAY;AAvJ5C,UAAAA;AAwJQ,YAAM,KAAK,MAAM,KAAK,UAAU;AAChC,eAAOA,MAAA,KAAK,cAAc,IAAI,MAAvB,gBAAAA,IAA2B,QAAO,CAAC;AAAA,IAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,cAAc,QAAQ,MAAM;AAlKhC,UAAAA;AAmKQ,YAAM,EAAE,QAAQ,MAAM,IAAI,KAAK,iBAAiB,IAAI;AACpD,eAAOA,MAAA,MAAM,cAAc,OAAO,YAAY,MAAvC,gBAAAA,IAA2C,OAAO,QAAO,CAAC;AAAA,IACrE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,cAAc,OAAO,MAAM,SAAS;AAChC,YACI,EAAE,QAAQ,MAAM,IAAI,KAAK,iBAAiB,IAAI,GAC9C,gBAAoB,MAAM,cAAc,OAAO,YAAY,MAAM,MAAM,cAAc,OAAO,YAAY,IAAI,CAAC,IAC7G,OAAqB,cAAc,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,GAC1D,QAAoB,CAAC,GACrB,UAAoB,CAAC;AACzB,YAAM,cAAc;AAEpB,UAAI,QAAQ,YAAU;AAClB,YAAI,CAAC,QAAQ,SAAS,MAAM,GAAG;AAC3B,iBAAO,OAAO,UAAU,IAAI;AAC5B,gBAAM,OAAO,MAAM;AACnB,kBAAQ,KAAK,MAAM;AAAA,QACvB;AAAA,MACJ,CAAC;AAED,cAAQ,QAAQ,YAAU;AACtB,YAAI,OAAO,mBAAmB,OAAO;AACjC,cAAI,CAAC,OAAO,OAAO,SAAS,KAAK,GAAG;AAChC,kBAAM,IAAI,MAAM;AAChB,kBAAM,KAAK,MAAM;AAAA,UACrB;AAAA,QACJ,OACK;AACD,WAAC,MAAM,IAAI,MAAM,IAAI,MAAM;AAC3B,gBAAM,KAAK,MAAM;AAAA,QACrB;AAEA,eAAO,OAAO,UAAU,IAAI,MAAM;AAAA,MACtC,CAAC;AACD,YAAM,aAAa;AACnB,UAAI,QAAQ,QAAQ;AAChB,cAAM,QAAQ,UAAU,EAAE,SAAU,QAAQ,CAAC;AAC7C,cAAM,QAAQ,UAAU,EAAE,QAAS,UAAU,SAAU,QAAQ,CAAC;AAAA,MACpE;AACA,UAAI,MAAM,QAAQ;AACd,cAAM,QAAQ,OAAO,EAAE,SAAU,MAAM,CAAC;AACxC,cAAM,QAAQ,UAAU,EAAE,QAAS,OAAO,SAAU,MAAM,CAAC;AAAA,MAC/D;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWA,mBAAmB,QAAQ,IAAI,MAAM,YAAY,MAAM;AACnD,YACI,KAAQ,MACR,QAAQ,GAAG,cAAc,IAAI,MAAM,GAAG,cAAc,IAAI,IAAI,CAAC;AACjE,UAAI,cAAc,MAAM;AACpB,WAAG,qBAAqB,QAAQ,MAAM,SAAS;AAAA,MACnD;AACA,UAAI,MAAM,MAAM;AAEZ,oBAAY,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,IAAI,CAAC,IAAI,MAAM;AAAA,MAC7D;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,qBAAqB,QAAQ,OAAO,MAAM,KAAK,MAAM;AACjD,YAAM,KAAK;AACX,eAAS,OAAO,cAAc,WAAW;AACrC,cACI,QAAW,GAAG,cAAc,YAAY,GACxC,WAAW,+BAAQ;AAGvB,YAAI,UAAU;AACV,gBAAM,eAAe,SAAS,QAAQ,MAAM;AAC5C,0BAAgB,KAAK,SAAS,OAAO,cAAc,CAAC;AACpD,cAAI,SAAS,WAAW,GAAG;AACvB,mBAAO,MAAM,SAAS;AAAA,UAC1B;AAAA,QACJ;AAAA,MACJ;AACA,UAAI,MAAM,MAAM;AACZ,eAAO,MAAM,EAAE;AAAA,MACnB,OACK;AACD,YAAI,OAAO,KAAK,eAAe;AAC3B,iBAAO,QAAQ,OAAO,KAAK,aAAa,EAAE;AAAA,YAAQ,CAAC,CAAC,cAAc,aAAa,MAC3E,OAAO,cAAc,+CAAe,EAAE;AAAA,UAC1C;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,sBAAsB,QAAQ,SAAS;AACnC,WAAK,sBAAsB,QAAQ,aAAW;AAC1C,gBAAQ,QAAQ,YAAU;AACtB,gBACI;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ,IAAQ,QACR,QAAQ,eAAe,cAAc,YAAY;AACrD,cAAI,WAAW,WAAW;AACtB,qCAAyB,KAAK,4BAA4B,uBAAuB,OAAO;AACxF,2BAAe,QAAQ,YAAU;AAC7B,oBAAM,UAAU,OAAO,aAAa,MAAM;AAC1C,yBAAW,eAAe,mBAAmB,QAAQ,QAAQ,IAAI,cAAc,QAAQ,EAAE;AAAA,YAC7F,CAAC;AACD;AAAA,UACJ;AACA,cAAI,WAAW,aAAa;AACxB,2BAAe,QAAQ,YAAU,OAAO,eAAe,MAAM,CAAC;AAC9D,mBAAO,eAAe,cAAc,YAAY;AAChD;AAAA,UACJ;AACA,cAAI,WAAW,WAAW;AAGtB,sBAAU,QAAQ,IAAI,OAAK,EAAE,CAAC,CAAC;AAAA,UACnC;AACA,cAAI,WAAW,SAAS,WAAW,WAAW;AAC1C,qCAAyB,KAAK,4BAA4B,uBAAuB,OAAO;AAAA,UAC5F;AACA,cAAI,WAAW,SAAS,WAAW,aAAa,WAAW,UAAU;AACjE,oBAAQ,QAAQ,YAAU;AACtB,oBAAM,mBAAmB,+BAAQ,OAAO;AACxC,sBAAQ,QAAQ;AAAA,gBACZ,KAAK;AAED,sBAAI,kBAAkB;AAClB,qCAAiB,QAAQ,qBAAmB,gBAAgB,eAAe,MAAM,CAAC;AAAA,kBAGtF;AACA;AAAA,gBACJ,KAAK;AAAA,gBACL,KAAK;AAGD,iCAAe,QAAQ,qBAAmB;AACtC,wBAAI,gBAAgB,SAAS,UAAU,KAAK,OAAO,IAAI;AACnD,sCAAgB,aAAa,MAAM;AACnC,qCAAe,mBAAmB,iBAAiB,OAAO,IAAI,YAAY;AAAA,oBAC9E;AAAA,kBACJ,CAAC;AACD;AAAA,cACR;AAAA,YACJ,CAAC;AAAA,UACL;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAAA,IACL;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,yBAAyB,UAAU,OAAO;AAnV9C,UAAAA;AAoVQ,OAAAA,MAAA,KAAK,0BAAL,gBAAAA,IAA4B,QAAQ,aAAW;AAC3C,gBAAQ,QAAQ,YAAU;AArVtC,cAAAA;AAsVgB,gBACI;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,UACJ,IAAe,QACf,QAAe,eAAe,cAAc,YAAY,GACxD,gBAAeA,MAAA,+BAAQ,cAAR,gBAAAA,IAAmB;AACtC,uDAAc,QAAQ,iBAAe;AAEjC,2BAAe,mBAAmB,aAAa,OAAO,cAAc,QAAQ;AAE5E,wBAAY,IAAI,YAAY,OAAO,OAAO,IAAI;AAAA,UAClD;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,IACJ;AAAA;AAAA,EAEJ,GAxVI,cADqBA,KACd,SAAQ,kBADMA;AAAA;;;ACNzB,IAAO,mBAAQ,YAAU,MAAM,kBAAkB,UAAU,MAAM;AAAA,EAC7D,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,OAAO,UAAU,KAAK,QAAQ,QAAQ;AACtC,QAAI,CAAC,SAAS;AACV,aAAO;AAAA,IACX;AACA,WAAO,QAAQ,OAAO,CAAC,KAAK,WAAW;AACnC,UAAI,OAAO,cAAc;AACrB,eAAO;AAAA,MACX;AACA,YAAM,IAAI,OAAO,OAAO,SAAS,KAAK,CAAC;AACvC,aAAO,MAAM,CAAC,IAAI,MAAM,MAAM;AAAA,IAClC,GAAG,CAAC;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,OAAO,UAAU,KAAK,QAAQ,QAAQ;AACtC,QAAI,EAAC,mCAAS,SAAQ;AAClB,aAAO;AAAA,IACX;AACA,WAAO,QAAQ,OAAO,CAACC,MAAK,WAAW;AACnC,YACI,aAAa,OAAO,SAAS,KAAK,GAClC,OAAa,QAAO,yCAAY;AACpC,UAAI,SAAS,aAAa,aAAaA,QAAOA,QAAO,OAAO;AACxD,QAAAA,OAAM;AAAA,MACV;AACA,aAAOA;AAAA,IACX,GAAG,QAAQ,CAAC,EAAE,SAAS,KAAK,CAAC;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,OAAO,UAAU,KAAK,QAAQ,QAAQ;AACtC,QAAI,EAAC,mCAAS,SAAQ;AAClB,aAAO;AAAA,IACX;AACA,WAAO,QAAQ,OAAO,CAAC,KAAK,WAAW;AACnC,YACI,aAAa,OAAO,SAAS,KAAK,GAClC,OAAa,QAAO,yCAAY;AACpC,UAAI,SAAS,aAAa,aAAa,OAAO,OAAO,OAAO;AACxD,cAAM;AAAA,MACV;AACA,aAAO;AAAA,IACX,GAAG,QAAQ,CAAC,EAAE,SAAS,KAAK,CAAC;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,OAAO,UAAU,KAAK,QAAQ,QAAQ;AAC1C,QAAI,EAAC,mCAAS,SAAQ;AAClB,aAAO;AAAA,IACX;AACA,QAAI,QAAQ;AACZ,UAAM,MAAM,QAAQ,OAAO,CAACC,MAAK,WAAW;AACxC,UAAI,OAAO,cAAc;AACrB,eAAOA;AAAA,MACX;AACA,YAAM,IAAI,WAAW,OAAO,SAAS,KAAK,CAAC;AAC3C,UAAI,CAAC,MAAM,CAAC,GAAG;AACX;AACA,eAAOA,OAAM;AAAA,MACjB,OACK;AACD,eAAOA;AAAA,MACX;AAAA,IACJ,GAAG,CAAC;AACJ,WAAO,QAAQ,IAAI,MAAM,QAAQ;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAS,YAAY,OAAO;AACxB,WAAO,KAAK,IAAI,OAAO,KAAK,gBAAgB,UAAU,CAAC;AAAA,EAC3D;AACJ;;;AC3GA,IACI,eAAe,CAAC,OAAO,SAAS,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,IAAI;AAD7E,IAEI,WAAe;AAAA,EACX,QAAU;AAAA,EACV,QAAU;AAAA,EACV,SAAU;AAAA,EACV,MAAU,CAAC,OAAO,SAAS;AACvB,QAAI,iBAAiB,QAAQ,gBAAgB,MAAM;AAC/C,aAAO,QAAQ,SAAS;AAAA,IAC5B;AACA,WAAO,OAAO,MAAM,SAAS,IAAI,CAAC,EAAE,SAAS,IAAI,KAC7C,OAAO,MAAM,QAAQ,CAAC,EAAE,SAAS,IAAI,KACrC,OAAO,MAAM,YAAY,CAAC,EAAE,SAAS,IAAI;AAAA,EACjD;AAAA,EACA,QAAY,CAAC,OAAO,SAAS,UAAU;AAAA;AAAA,EACvC,WAAY,CAAC,OAAO,SAAS,UAAU;AAC3C;AAiBJ,IAAO,sBAAQ,YAAU,MAAM,qBAAqB,UAAU,MAAM;AAAA,EAChE,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,MAAM,SAAS,MAAM,YAAY,kBAAkB;AACtD,UACI,UAAU,KAAK,UAAU,CAAC,mBAAmB,KAAK,SAAS,cAAc,KAAK,kBAAkB,gBAAgB,GAChH,MAAU,QAAQ,QAClB,QAAU,CAAC;AACf,QAAI,QAAQ,MAAM;AACd,aAAO,CAAC;AAAA,IACZ;AACA,QAAI,OAAO,SAAS,UAAU;AAC1B,aAAO,KAAK,YAAY;AAAA,IAC5B;AACA,QAAI,GACA,GACA,QACA,OACA,WACA;AACJ,SAAK,IAAI,GAAG,IAAI,KAAK,KAAK;AACtB,eAAS,QAAQ,CAAC;AAClB,UAAS;AACT,iBAAW,OAAO,UAAU,OAAO,YAAY;AAC3C,gBAAY,OAAO,SAAS,GAAG;AAC/B,oBAAa,iBAAiB,OAAQ,SAAS,OAAO;AACtD,cAAM,YAAY,yCAAa;AAC/B,YAAI,WAAW;AACX,kBAAY,UAAU,KAAK;AAC3B,sBAAY;AAAA,QAChB;AACA,qBAAa,SAAS,SAAS;AAC/B,YAAI,UAAS,yCAAa,OAAO,QAAO;AACpC,gBAAM,KAAK;AAAA,YACP,OAAQ;AAAA,YACR,MAAQ;AAAA,YACR,OAAQ;AAAA,YACR,IAAQ,OAAO;AAAA,UACnB,CAAC;AAAA,QACL;AACA;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,YAAY,OAAO,OAAOC,YAAW,OAAO,mBAAmB,OAAO;AAClE,UACI,UAAa,KAAK,kBAAkB,gBAAgB,GACpD,MAAa,QAAQ,QACrB,aAAa,oBAAI,IAAI,GACrB,QAAa,CAAC;AAClB,QAAI,GAAG,QAAQ;AACf,QAAI,SAAS,MAAM;AACf,cAAQ,OAAO,KAAK,EAAE,YAAY;AAAA,IACtC;AACA,SAAK,IAAI,GAAG,IAAI,KAAK,KAAK;AACtB,eAAa,QAAQ,CAAC;AACtB,mBAAa,OAAO,SAAS,KAAK;AAClC,UAAI,CAACA,aAAY,CAAC,WAAW,IAAI,UAAU,GAAG;AAC1C,cACI,OAAU,sBAAsB,OAAO,SAAS,OAAO,YACvD,UAAU,SAAS,IAAI;AAC3B,YAAK,SAAS,QAAQ,eAAe,SAAW,UAAU,MAAM,eAAe,MAAQ,SAAS,QAAQ,YAAY,KAAK,GAAI;AACzH,gBAAM,KAAK;AAAA,YACP,IAAQ,OAAO;AAAA,YACf,OAAQ;AAAA,YACR,MAAQ;AAAA,UACZ,CAAC;AACD,cAAIA,WAAU;AACV,uBAAW,IAAI,UAAU;AAAA,UAC7B;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,KAAKC,KAAI,mBAAmB,OAAQ;AAChC,WAAO,KAAK,kBAAkB,gBAAgB,EAAE,KAAKA,GAAE;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,WAAW,WAAW,OAAO,mBAAmB,OAAO;AACnD,UACI,UAAU,OAAK,aAAa,QAAQ,EAAE,SAAS,GAAG,KAAK;AAC3D,QAAI,KAAK,QAAQ;AACb,aAAO,KAAK,MAAM,SAAS,gBAAgB,EAAE,CAAC;AAAA,IAClD;AACA,WAAO,KAAK,kBAAkB,gBAAgB,EAAE,KAAK,OAAO;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAMA,KAAI,mBAAmB,OAAO;AAChC,QAAI,KAAK,QAAQ;AACb,YAAM,UAAU,CAAC;AACjB,WAAK,SAAS,CAAC,SAAS;AACpB,YAAIA,IAAG,IAAI,GAAG;AACV,kBAAQ,KAAK,IAAI;AAAA,QACrB;AAAA,MACJ,GAAG,QAAW,QAAW,gBAAgB;AACzC,aAAO;AAAA,IACX;AACA,WAAO,KAAK,kBAAkB,gBAAgB,EAAE,OAAOA,GAAE;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,KAAKA,KAAI,mBAAmB,OAAO;AAC/B,WAAO,KAAK,kBAAkB,gBAAgB,EAAE,KAAKA,GAAE;AAAA,EAC3D;AAAA;AAEJ;;;ACpKA,IAAO,oBAAQ,YAAU,MAAM,mBAAmB,UAAU,MAAM;AAAA,EAC9D,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,WAAW,gBAAgB;AACvB,WAAO;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,MAmCH,eAAgB;AAAA,IACpB;AAAA,EACJ;AAAA,EACA,WAAW,eAAe;AACtB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWH,SAAU,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOX,qBAAsB;AAAA,IAC1B;AAAA,EACJ;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,EA+BA,IAAI,WAAW;AACX,WAAO,QAAQ,KAAK,QAAQ,MAAM,KAAK,KAAK;AAAA,EAChD;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,EA6BA,cAAc,SAAS;AACnB,WAAO,QAAQ,IAAI,YAAU,KAAK,sBAAsB,QAAQ,IAAI,CAAC;AAAA,EACzE;AAAA,EACA,0BAA0B,QAAQ;AAC9B,SAAK,QAAQ,WAAW;AAAA,EAC5B;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,EA+CA,KAAK,OAAOC,YAAW,MAAM,OAAO,SAAS,OAAO;AAChD,UACI,KAAiB,MACjB,UAAiB,GAAG,YACpB,iBAAiB,GAAG,UAAU,GAAG,QAAQ,MAAM,IAAI,CAAC;AACxD,QAAI,aAAa,MACb;AACJ,QAAI,OAAO;AACP,UAAI,MAAM,QAAQ,KAAK,GAAG;AAEtB,WAAG,UAAU,MAAM,IAAI,YAAU,GAAG,sBAAsB,QAAQ,OAAO,WAAW,WAAW,OAAOA,UAAS,CAAC;AAAA,MACpH,OACK;AACD,cAAM,SAAS,GAAG,sBAAsB,OAAOA,UAAS;AACxD,YAAI,KAAK;AACL,oBAAU,GAAG,wBAAwB,OAAO,KAAK;AAEjD,cAAI,SAAS;AACT,yBAAoB,QAAQ;AAC5B,oBAAQ,YAAY,OAAO;AAAA,UAC/B,OACK;AACD,eAAG,QAAQ,KAAK,MAAM;AAAA,UAC1B;AAAA,QACJ,OACK;AACD,aAAG,UAAU,CAAC,MAAM;AAAA,QACxB;AAAA,MACJ;AAAA,IACJ;AACA,QAAI,CAAC,UAAU,GAAG,QAAQ,cAAc,EAAE,SAAU,GAAG,SAAS,SAAS,eAAe,CAAC,MAAM,OAAO;AAElG,SAAG,UAAU;AAEb,UAAI,eAAe,MAAM;AACrB,gBAAQ,YAAY;AAAA,MACxB;AACA,aAAO;AAAA,IACX;AACA,WAAO,GAAG,YAAY,MAAM;AAAA,EAChC;AAAA,EACA,sBAAsB,OAAOA,YAAW;AApQ5C,QAAAC,KAAA;AAqQQ,UACI,KAAS,MACT,SAAS,EAAE,WAAAD,WAAU;AACzB,QAAI,OAAO,UAAU,UAAU;AAC3B,mBAAa,OAAO,QAAQ,KAAK;AACjC,UAAI,MAAM,IAAI;AACV,eAAO,OAAO;AACd,eAAO,SAAS,MAAM;AAAA,MAC1B;AACA,aAAO,aAAYC,MAAA,MAAM,cAAN,OAAAA,MAAmBD;AAAA,IAC1C,WACS,OAAO,UAAU,YAAY;AAClC,aAAO,SAAS;AAAA,IACpB,OACK;AACD,aAAO,QAAQ;AAAA,IACnB;AAEA,QAAI,OAAO,aAAa,MAAM;AAC1B,YAAM,UAAU,GAAG,wBAAwB,OAAO,KAAK;AACvD,aAAO,YAAY,UAAU,CAAC,QAAQ,YAAY;AAAA,IACtD;AACA,QAAI,OAAO,UAAU,MAAM;AACvB,YAAM,gBAAe,cAAG,eAAH,mBAAe,MAAM,OAAO,IAAI,OAAO,WAAvC,mBAA+C;AACpE,UAAI,cAAc;AAEd,eAAO,SAAS;AAAA,MACpB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,wBAAwB,OAAO;AAC3B,WAAO,OAAO,UAAU,YAAY,KAAK,QAAQ,KAAK,OAAK,EAAE,UAAU,KAAK,KAAK;AAAA,EACrF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,UAAU,OAAOA,aAAY,MAAM;AAC/B,WAAO,KAAK,KAAK,OAAOA,YAAW,IAAI;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAa,OAAO;AAChB,UACI,cAAc,KAAK,QAAQ,UAAU,YAAU,OAAO,UAAU,SAAS,OAAO,WAAW,KAAK;AACpG,QAAI,cAAc,IAAI;AAClB,WAAK,QAAQ,OAAO,aAAa,CAAC;AAClC,aAAO,KAAK,KAAK;AAAA,IACrB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAa,SAAS,OAAO;AACzB,QAAI,KAAK,QAAQ,QAAQ;AACrB,WAAK,QAAQ,SAAS;AACtB,aAAO,KAAK,KAAK,QAAW,QAAW,QAAW,MAAM;AAAA,IAC5D;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,eAAe,SAAS;AACpB,UAAM,kBAAkB,KAAK;AAC7B,WAAO,CAAC,KAAK,QAAQ;AACjB,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,cACI,SAAS,QAAQ,CAAC,GAClB,EAAE,OAAO,WAAAA,aAAY,MAAM,gBAAgB,gBAAgB,IAAI,QAC/DE,MAAK,OAAO,MAAM,OAAO,QACzB,YAAYF,aAAY,IAAI;AAChC,YAAIE,KAAI;AACJ,gBAAM,MAAMA,IAAG,KAAK,QAAQ,KAAK,GAAG;AACpC,cAAI,QAAQ,GAAG;AAEX;AAAA,UACJ;AACA,cAAI,QAAQ,MAAM;AACd,mBAAO,MAAM;AAAA,UACjB;AAAA,QACJ;AACA,cACI,WAAW,IAAI,UAAU,IAAI,SAAS,KAAK,IAAI,IAAI,KAAK,GACxD,WAAW,IAAI,UAAU,IAAI,SAAS,KAAK,IAAI,IAAI,KAAK;AAC5D,YAAI,aAAa,UAAU;AACvB;AAAA,QACJ;AACA,YAAI,YAAY,MAAM;AAClB,iBAAO,CAAC;AAAA,QACZ;AACA,YAAI,YAAY,MAAM;AAClB,iBAAO;AAAA,QACX;AACA,YAAI,iBAAiB,OAAO,aAAa,UAAU;AAE/C,cAAI,kBAAkB,MAAM;AACxB,mBAAO,OAAO,QAAQ,EAAE,cAAc,QAAQ,IAAI;AAAA,UACtD;AAEA,cAAI,OAAO,kBAAkB,UAAU;AACnC,mBAAO,OAAO,QAAQ,EAAE,cAAc,UAAU,aAAa,IAAI;AAAA,UACrE;AAEA,cAAI,OAAO,kBAAkB,UAAU;AACnC,mBAAO,OAAO,QAAQ,EAAE,cAAc,UAAU,cAAc,QAAQ,aAAa,IAAI;AAAA,UAC3F;AAAA,QACJ;AACA,YAAI,WAAW,UAAU;AACrB,iBAAO;AAAA,QACX;AACA,YAAI,WAAW,UAAU;AACrB,iBAAO,CAAC;AAAA,QACZ;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,WAAW;AAGX,WAAO,KAAK,eAAe,KAAK,aAAc,CAAC,EAAE,OAAQ,mBAAmB,CAAC,IAAI,KAAK,OAAO;AAAA,EACjG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAY,QAAQ;AAChB,UACI,KAAK,MACL,EAAE,UAAU,SAAS,UAAU,OAAO,IAAI;AAC9C,QAAI,GAAG,MAAM;AACT,OAAC,GAAG,aAAa,SAAS,SAAS,UAAQ;AACvC,YAAI,KAAK,YAAY,KAAK,UAAU;AAChC,eAAK,SAAS,KAAK,MAAM;AAGzB,eAAK,sBAAsB,KAAK,UAAU,eAAe,IAAI;AAAA,QACjE;AAAA,MACJ,CAAC;AACD,cAAQ,cAAc;AAAA,QAClB,QAAS,GAAG,mBAAmB,QAAQ,EAAE;AAAA,QACzC,QAAS;AAAA,MACb,CAAC;AAAA,IACL,WACS,GAAG,WAAW;AACnB,cAAQ,cAAc;AAAA,QAClB,GAAG,GAAG,oBAAoB;AAAA,QAC1B,QAAS;AAAA,MACb,CAAC;AAAA,IACL,OACK;AACD,cAAQ,cAAc;AAAA,QAClB,QAAS,QAAQ,OAAO,KAAK,MAAM;AAAA,QACnC,QAAS;AAAA,MACb,CAAC;AAAA,IACL;AACA,OAAG,iBAAiB,UAAU,GAAG,mBAAmB;AAAA,EACxD;AAAA,EACA,iBAAiB,QAAQ;AACrB,QAAI,QAAQ;AACR;AAAA,IACJ;AACA,UAAM,KAAK;AACX,OAAG,SAAS;AACZ,UAAM,QAAQ;AAAA,MACV,QAAU;AAAA,MACV,SAAU,GAAG;AAAA,MACb,SAAU,GAAG;AAAA,IACjB;AACA,OAAG,QAAQ,QAAQ,KAAK;AACxB,OAAG,QAAQ,WAAW,KAAK;AAAA,EAC/B;AAAA;AAEJ;;;AC5cA,IAAM,aAAa,MAAM;AAkBzB,IAAO,uBAAQ,YAAU,MAAM,sBAAsB,UAAU,MAAM;AAAA,EACjE,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,WAAW,gBAAgB;AACvB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUH,iBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMlB,eAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhB,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMd,iBAAkB,CAAC,OAAO,UAAU,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM5C,mBAAoB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMrB,yBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO1B,UAAW;AAAA,MACX,gBAAiB;AAAA,IACrB;AAAA,EACJ;AAAA;AAAA,EAEA,WAAW,aAAa;AACpB,WAAO;AAAA,MACH,eAAgB;AAAA,IACpB;AAAA,EACJ;AAAA;AAAA,EAEA,UAAU,QAAQ;AACd,UAAM,UAAU,MAAM;AACtB,UACI,KAAkB,MAClB,EAAE,YAAY,IAAI;AACtB,QAAI,aAAa;AACb,SAAG,mBAAmB,QAAQ,YAAU,GAAG,MAAM,IAAI,IAAI,WAAW,GAAG,cAAc,QAAQ,MAAM,CAAC;AACpG,SAAG,YAAY,IAAI,WAAW;AAC1B,oBAAY,OAAO,GAAG,SAAS,GAAG,GAAG,MAAM;AAAA,MAC/C;AACA,kBAAY,IAAI;AAAA;AAAA;AAAA,QAGZ,iBAAkB,GAAG;AAAA,QACrB,QAAkB,GAAG;AAAA,QACrB,MAAkB;AAAA,QAClB,SAAkB;AAAA,MACtB,CAAC;AACD,UAAI,GAAG,UAAU;AACb,oBAAY,IAAI;AAAA,UACZ,MAAU,MAAM,GAAG,KAAK,YAAY,OAAO;AAAA,UAC3C,SAAU;AAAA,QACd,CAAC;AAAA,MACL;AACA,UAAI,CAAC,YAAY,eAAe;AAC5B,oBAAY,gBAAgB,CAAC;AAAA,MACjC;AACA,kBAAY,cAAc,KAAK,EAAE;AACjC,SAAG,eAAe;AAAA,IACtB;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,IAAI,UAAU;AACV,WAAO,KAAK,eAAe;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,YAAY;AACZ,WAAO,QAAQ,KAAK,WAAW;AAAA,EACnC;AAAA,EACA,IAAI,gBAAgB,iBAAiB;AACjC,SAAK,mBAAmB,KAAK,UAAU,gBAAgB,KAAK,KAAK,OAAO,IAAI;AAAA,EAChF;AAAA,EACA,IAAI,kBAAkB;AAClB,WAAO,KAAK,oBAAoB;AAAA,EACpC;AAAA,EACA,IAAI,qBAAqB;AACrB,UACI,YAAc,MAAM,QAAQ,KAAK,eAAe,GAChD,cAAc,MAAM,QAAQ,KAAK,iBAAiB;AACtD,WAAO,aAAa,KAAK,gBAAgB,OAAO,UAAQ,CAAC,eAAe,CAAC,KAAK,kBAAkB,SAAS,IAAI,CAAC,KAAK,CAAC;AAAA,EACxH;AAAA;AAAA;AAAA,EAGA,sBAAsB;AAClB,QAAI,KAAK,eAAe;AACpB,WAAK,cAAc,QAAQ,WAAS,MAAM,eAAe,CAAC;AAAA,IAC9D;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,iBAAiB;AACb,UACI,KAA0B,MAC1B,EAAE,aAAa,OAAO,IAAI;AAC9B,QAAI,UAAU,CAAC;AACf,QAAI,CAAC,GAAG,WAAW;AACf,YAAM,IAAI,MAAM,8CAA8C;AAAA,IAClE;AACA,QAAI,GAAG,kBAAkB;AACrB;AAAA,IACJ;AACA,QAAI,YAAY,aAAa,YAAY,YAAY;AACjD,kBAAY,QAAQ,OAAK,QAAQ,KAAK,CAAC,GAAG,aAAa,EAAE,2BAA4B,MAAM,8BAA+B,KAAK,CAAC;AAAA,IACpI,OACK;AACD,gBAAU,YAAY,WAAW,OAAO,OAAK,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,CAAC,CAAC;AAAA,IACzF;AACA,QAAI,QAAQ;AAER,SAAG,aAAa,CAAC;AACjB,SAAG,qBAAqB,CAAC;AAGzB,cAAQ,QAAQ,OAAK;AACjB,YAAI,EAAE,OAAO,SAAS,EAAE,GAAG;AACvB,aAAG,SAAS,CAAC;AAAA,QACjB,OACK;AACD,YAAE,UAAU,EAAE;AAAA,QAClB;AAAA,MACJ,CAAC;AAKD,UAAI,GAAG,yBAAyB;AAC5B,cAAM,WAAW,GAAG,YAAY,GAAG,QAAQ;AAC3C,kBAAU,GAAG,iBAAiB,UAAU,IAAI;AAAA,MAChD;AAAA,IACJ;AACA,OAAG,sBAAsB;AACzB,OAAG,OAAO;AACV,OAAG,sBAAsB;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,iBAAiB;AACb,UACI,KAAK,MACL,SAAS,GAAG;AAChB,QAAI,CAAC,GAAG,WAAW;AACf,YAAM,IAAI,MAAM,8CAA8C;AAAA,IAClE;AACA,WAAO,WAAW;AAClB,WAAO,OAAO,GAAG,QAAQ,MAAM;AAC/B,WAAO,IAAI,GAAG,MAAM,MAAM;AAC1B,WAAO,SAAS;AAChB,WAAO,GAAG,OAAO;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,QAAQ,QAAQ;AAC1B,WAAO,KAAK,YAAY,MAAM,EAAE,GAAG,MAAM;AAAA,EAC7C;AAAA;AAAA,EAEA,6BAA6B,OAAO;AAChC,SAAK,oBAAoB,KAAK;AAC9B,SAAK,sBAAsB;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB,EAAE,QAAQ,SAAS,UAAU,OAAO,GAAG;AA9O/D,QAAAC;AAgPQ,QAAI,KAAK,qBAAqB;AAC1B,WAAK,sBAAsB;AAC3B;AAAA,IACJ;AAEA,QAAI,UAAU,WAAW,UAAU;AAC/B;AAAA,IACJ;AAIA,QAAI,WAAW,cAAYA,MAAA,KAAK,kBAAL,gBAAAA,IAAoB,KAAK,WAAS,SAAS,WAAU;AAC5E,WAAK,eAAe;AAAA,IACxB;AAAA,EACJ;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,EA2BA,YAAY,kBAAkB,YAAY,eAAe,QAAQ;AAG7D,QAAI,KAAK,WAAW;AAChB,YAAM,qBAAqB;AAC3B,wBAAkB,OAAK,mBAAmB,CAAC,KAAK,KAAK,gBAAgB,CAAC;AAAA,IAC1E;AACA,WAAO,MAAK,iCAAQ,eAAc,KAAK,aAAa;AAAA;AAAA,MAEhD,SAAiB;AAAA,MACjB,IAAiB,GAAG,KAAK,EAAE,YAAY,aAAa,aAAa,CAAC;AAAA;AAAA,MAElE,GAAG,UAAU,CAAC;AAAA,MACd,MAAiB;AAAA,MACjB,UAAiB;AAAA;AAAA,MAEjB,aAAiB,KAAK;AAAA,MACtB,YAAiB,KAAK;AAAA;AAAA;AAAA,MAGtB,gBAAiB;AAAA,MACjB;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,QAAQ;AACJ,WAAO,KAAK,YAAY,GAAG,SAAS;AAAA,EACxC;AAAA;AAAA,EAEA,YAAY;AAlUhB,QAAAA;AAoUQ,KAAAA,MAAA,KAAK,kBAAL,gBAAAA,IAAoB,QAAQ,kBAAgB,aAAa,QAAQ;AAEjE,UAAM,UAAU;AAAA,EACpB;AAAA,EACA,eAAe;AACX,SAAK;AAAA,EACT;AAAA,EACA,YAAY,SAAS,OAAO;AACxB,QAAI,KAAK,kBAAkB,CAAC,EAAE,KAAK,kBAAkB,QAAQ;AACzD,WAAK,eAAe;AAAA,IACxB;AAAA,EACJ;AAAA,EACA,IAAI,mBAAmB;AACnB,WAAO,KAAK,iBAAiB;AAAA,EACjC;AACJ;;;ACtUA,IAAO,qBAAQ,YAAU,MAAM,oBAAoB,UAAU,MAAM;AAAA,EAC/D,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW;AACP,UACI,EAAE,SAAS,UAAU,QAAQ,IAAI,MACjC,QAAiC,CAAC;AACtC,QAAI,mCAAS,QAAQ;AACjB,YAAM,UAAU,QAAQ,IAAI,YAAU;AAClC,cAAM,QAAQ,aAAa,kBAAkB,aAAa,MAAM,MAAM,CAAC;AAEvE,eAAO,MAAM;AACb,eAAO,MAAM;AACb,eAAO;AAAA,MACX,CAAC;AAAA,IACL;AACA,QAAI,qCAAU,QAAQ;AAClB,YAAM,WAAW,SAAS,IAAI,aAAW;AACrC,cAAM,QAAQ,aAAa,kBAAkB,aAAa,MAAM,OAAO,CAAC;AAExE,eAAO,MAAM;AACb,eAAO;AAAA,MACX,CAAC;AACD,YAAM,kBAAkB,CAAC,GAAG,KAAK,eAAe;AAAA,IACpD;AACA,QAAI,mCAAS,OAAO,QAAQ;AACxB,YAAM,UAAU,QAAQ,OAAO,IAAI,CAAAC,YAAU;AACzC,cAAM,QAAQ,aAAa,kBAAkB,aAAa,MAAMA,QAAO,MAAM,CAAC;AAE9E,cAAM,QAAQA,QAAO;AAErB,YAAI,MAAM,eAAe;AACrB,iBAAO,MAAM;AAAA,QACjB;AAGA,eAAO;AAAA,MACX,CAAC;AAAA,IACL;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,OAAO;AAjEtB,QAAAC;AAkEQ,UACI,KAAK,MACL;AAAA,MACI,UAAW,CAAC;AAAA,MACZ,WAAW,CAAC;AAAA,MACZ,UAAW,CAAC;AAAA,IAChB,IAAK,OACL;AAAA,MACI;AAAA,MACA;AAAA,IACJ,IAAI;AAER,OAAG,UAAU,QAAQ,OAAO,YAAU,OAAO,SAAU,OAAO,UAAU,CAAC,aAAc;AACvF,OAAG,WAAW,SAAS,MAAM;AAC7B,KAAAA,MAAA,MAAM,oBAAN,gBAAAA,IAAuB,QAAQ,QAAM;AACjC,YAAM,SAAS,GAAG,QAAQ,EAAE;AAC5B,UAAI,QAAQ;AACR,WAAG,SAAS,QAAQ,IAAI;AAAA,MAC5B;AAAA,IACJ;AACA,OAAG,KAAK;AAER,OAAG,UAAU,QAAQ,OAAO,CAAAD,YAAUA,QAAO,YAAaA,QAAO,YAAY,CAAC,eAAgB;AAC9F,OAAG,OAAO;AAAA,EACd;AACJ;;;ACxFA,IAAM,UAAU,OAAK,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG;AAK9C,IAAqB,MAArB,MAAqB,KAAI;AAAA;AAAA;AAAA;AAAA;AAAA,EAKrB,YAAY,OAAO;AACf,SAAK,QAAQ;AACb,SAAK,UAAU;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,MAAM,OAAO;AACb,SAAK,SAAS,OAAO,wBAAS,EAAE;AAAA,EACpC;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,KAAK,OAAO;AAEf,WAAQ,SAAS,OAAQ,QAAU,iBAAiB,OAAO,QAAQ,IAAI,KAAI,KAAK;AAAA,EACpF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,IAAI,OAAO;AACd,WAAQ,iBAAiB,OAAO,MAAM,QAAQ,IAAI,KAAI,MAAM,KAAK,EAAE,IAAI,OAAO,EAAE,KAAK,GAAG;AAAA,EAC5F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,MAAM,OAAO;AAChB,QAAI,GAAG;AACP,QAAI,SAAS,UAAU,GAAG;AACtB,cAAQ,OAAO,OAAO;AAAA,QAClB,KAAK;AACD,kBAAQ,OAAO,KAAK;AAAA,QAExB,KAAK;AACD,gBAAM,MAAM,MAAM,GAAG;AACrB,eAAK,IAAI,IAAI,QAAQ,MAAM,KAAgB;AACvC,gBAAI,CAAC,IAAI,SAAS,IAAI,CAAC,GAAG,EAAE;AAAA,UAChC;AACA;AAAA,QACJ,KAAK;AACD,gBAAM,CAAC,KAAK;AACZ;AAAA,MACR;AAAA,IACJ;AACA,WAAO,OAAO,CAAC;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAAQ,KAAK,KAAK;AACrB,QAAI,QAAQ,KAAK;AACb,aAAO;AAAA,IACX;AACA,QAAI,CAAC,OAAO,CAAC,KAAK;AACd,aAAO,MAAM,IAAK,MAAM,KAAK;AAAA,IACjC;AACA,UAAM,KAAI,IAAI,GAAG;AACjB,UAAM,KAAI,IAAI,GAAG;AACjB,WAAQ,MAAM,MAAO,KAAO,MAAM,MAAO,IAAI;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,OAAO;AACV,UAAM,IAAI,KAAK;AACf,WAAO,KAAI,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,KAAK;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ,OAAO;AACX,WAAO,CAAC,KAAI,QAAQ,MAAM,KAAK;AAAA,EACnC;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,EA2BA,MAAM,SAAS;AACX,QAAI,MAAM;AACV,QAAI,SAAS;AACT,YACI,MAAM,KAAK,OACX,WAAW,QAAQ,CAAC,MAAM,KAC1B,YAAY,QAAQ,SAAS,GAAG,GAChC,IAAI,QAAQ;AAChB,UAAI,aAAa,WAAW;AAExB,cAAM,IAAI,QAAQ,WAAW,QAAQ,OAAO,GAAG,IAAI,CAAC,IAAI,OAAO,IAAI;AAAA,MACvE,WACS,UAAU;AACf,cAAM,IAAI,SAAS,QAAQ,OAAO,CAAC,CAAC;AAAA,MACxC,OACK;AACD,cAAM,IAAI,WAAW,QAAQ,OAAO,GAAG,IAAI,CAAC,CAAC;AAAA,MACjD;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,WAAW;AACP,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,SAAS;AACL,WAAO,KAAK,SAAS;AAAA,EACzB;AAAA,EACA,UAAU;AAlKd,QAAAE;AAqKQ,YAAOA,MAAA,KAAK,YAAL,OAAAA,MAAiB,KAAK,UAAU,KAAI,IAAI,KAAK,KAAK;AAAA,EAC7D;AACJ;AACA,IAAI,SAAS;;;AChKb,IACIC,cAAa,OAAO,OAAO,CAAC,CAAC;AADjC,IAEI,aAAa,OAAO,YAAY;AAMpC,IAAO,oBAAQ,YAAO;AAhBtB,MAAAC;AAgByB,SAAAA,MAAA,eAAyB,UAAU,MAAM;AAAA,IAwB9D,IAAI,aAAa;AACb,aAAO;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAiDA,IAAI,SAAS;AACT,aAAO,KAAK,QAAS,KAAK,eAAe,KAAK,YAAY;AAAA,IAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,IAAI,SAAS;AACT,YAAM,KAAK,MACP,SAAS,CAAC;AACd,UAAI,GAAG,QAAQ;AACX,WAAG,SAAS,YAAU;AAClB,cAAI,OAAO,QAAQ;AACf,mBAAO,KAAK,MAAM;AAAA,UACtB;AAAA,QACJ,CAAC;AACD,eAAO;AAAA,MACX,OACK;AACD,WAAG,WAAW,QAAQ,OAAK;AACvB,cAAI,EAAE,QAAQ;AACV,mBAAO,KAAK,CAAC;AAAA,UACjB;AACA,YAAE,SAAS,YAAU;AACjB,gBAAI,OAAO,QAAQ;AACf,qBAAO,KAAK,MAAM;AAAA,YACtB;AAAA,UACJ,GAAG,IAAI;AAAA,QACX,CAAC;AAAA,MACL;AACA,aAAO;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAeA,MAAM,aAAa,cAAc;AAAA,IACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAaA,eAAe,QAAQ,UAAU,OAAO,QAAQ,SAAS,OAAO;AAxJpE,UAAAA;AAyJQ,YACI,KAAsB,MACtB,aAAsB,WAAW,GAAG,YAAY,OAAO,WACvD,EAAE,QAAQ,IAAY,IACtB,EAAE,gBAAgB,IAAI,SAAS,CAAC;AACpC,UAAI;AACJ,YAAM,EAAE,SAAU,WAAW,KAAM,MAAM,IAAI,GAAG,mBAAmB,UAAU,QAAW,QAAW;AAAA,QAC/F,mBAAoB,EAAE,OAAO,WAAW,EAAE,KAAK,OAAO,kBAAkB,EAAE;AAAA,QAC1E,aAAoB,GAAG,cAAc,GAAG;AAAA,MAC5C,CAAC;AAED,UAAI,CAAC,cAAc,MAAM,QAAQ;AAC7B,mBAAW,UAAU,OAAO;AAExB,cAAI,CAAC,GAAG,SAAS,SAAS,MAAM,KAAK,CAAC,OAAO,OAAO,EAAE,GAAG;AAErD,gBAAI,GAAG,QAAQ,SAAS,MAAM,GAAG;AAC7B,iBAAG,QAAQ,OAAO,MAAM;AAAA,YAC5B,WAES,CAAC,OAAO,UAAU;AACvB,iBAAG,MAAM,IAAI,MAAM;AAAA,YACvB;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAEA,UAAI,cAAc,GAAG,aAAa;AAC9B,kBAAU,QAAQ,MAAM;AACxB,cAAM,QAAQ,MAAM;AAAA,MACxB;AACA,UAAI,UAAU,QAAQ;AAGlB,YAAI,UAAU,KAAK,CAAC,iBAAiB;AACjC,gCAAsB,QAAQ,QAAQ,MAAM;AAAA,QAChD,OAGK;AACD,gCAAsB,QAAQ,QAAQ,eAAe,IAAI,gBAAgB,mBAAmB,MAAM,EAAE;AAAA,QACxG;AAGA,gBAAQ,cAAc;AACtB,WAAG,QAAQ,OAAO,EAAE,qBAAqB,GAAG,SAAS;AACrD,gBAAQ,aAAa;AACrB,WAAG,SAAS;AAAA,MAChB,OACK;AAED,WAAG,cAAc;AAAA,MACrB;AAGA,SAAG,sBAAsB,OAAO,QAAQ;AAExC,UAAI,cAAc,UAAU,QAAQ;AAGhC,YAAI,GAAG,QAAQ,QAAQ;AACnB,aAAG,KAAK,MAAM,MAAM,OAAO,IAAI;AAAA,QACnC;AACA,SAAAA,MAAA,GAAG,kBAAH,gBAAAA,IAAA;AACA,YAAI,CAAC,QAAQ;AACT,gBAAM,QAAQ,EAAE,QAAS,WAAW,MAAO,GAAG,OAAO,SAAU,UAAU;AACzE,aAAG,QAAQ,WAAW,KAAK;AAC3B,aAAG,QAAQ,UAAU,KAAK;AAAA,QAC9B;AAAA,MACJ,WAES,CAAC,QAAQ;AACd,cAAM,QAAQ,EAAE,QAAS,OAAO,QAAQ,SAAU,MAAM,QAAQ,SAAU,UAAU,YAAa,OAAO,OAAQ,oBAAoB;AACpI,WAAG,QAAQ,OAAO,KAAK;AACvB,WAAG,QAAQ,UAAU,KAAK;AAE1B,YAAI,UAAU,OAAO,OAAO,MAAM,EAAE,KAAK,cAAY,QAAQ,GAAG;AAC5D,gBAAMC,SAAQ;AAAA,YACV,WAAa;AAAA,YACb,SAAa,SAAS,OAAO,YAAU,OAAO,OAAO,EAAE,CAAC;AAAA,YACxD,YAAa,SAAS,IAAI,WAAS;AAC/B,qBAAO,GAAG,QAAQ,MAAM,KAAK,WAAW;AAAA,YAC5C,CAAC;AAAA,UACL;AACA,aAAG,QAAQ,QAAQA,MAAK;AAAA,QAC5B;AAAA,MACJ;AAAA,IACJ;AAAA,IACA,kBAAkB,QAAQ,UAAU,OAAO,QAAQ,EAAE,QAAS,OAAO,QAAS,OAAO,YAAa,MAAM,GAAG;AACvG,YACI,KAAiC,MACjC,EAAE,QAAQ,IAAuB,IACjC,iBAAiC,CAAC,GAClC,WAAiC,CAAC,GAClC,EAAE,QAAQ,QAAQ,WAAW,IAAI,OACjC,mBAAiC,cAAc,GAAG,YAClD,mBAAiC,oBAAoB,OAAO,qBAAqB,OAAO,qBAAqB;AACjH,SAAG,mBAAmB,kBAAkB,gBAAgB,UAAU,EAAE,mBAAoB,EAAE,OAAO,WAAW,EAAE,KAAK,OAAO,kBAAkB,EAAE,IAAI,YAAa,iBAAiB,CAAC;AAGjL,UAAI,CAAC,QAAQ;AAET,mBAAW,UAAU,UAAU;AAC3B,iBAAO,YAAY,EAAE;AAAA,QACzB;AAEA,mBAAW,UAAU,UAAU;AAC3B,cAAI,OAAO,OAAO,SAAS,EAAE,GAAG;AAC5B,mBAAO,YAAY,EAAE;AAAA,UACzB;AAEA,cAAI,GAAG,MAAM,SAAS,MAAM,GAAG;AAC3B,eAAG,MAAM,OAAO,MAAM;AAAA,UAC1B,WAES,CAAC,OAAO,UAAU;AACvB,eAAG,QAAQ,IAAI,MAAM;AAAA,UACzB;AAAA,QACJ;AACA,WAAG,SAAS,OAAO,QAAQ;AAAA,MAC/B;AAEA,UAAI,eAAe,QAAQ;AACvB,gBAAQ,QAAQ,QAAQ,eAAe,CAAC,CAAC;AAEzC,YAAI,QAAQ,IAAI;AACZ,kBAAQ,cAAc;AACtB,kBAAQ,OAAO,OAAO,eAAe,MAAM;AAC3C,kBAAQ,aAAa;AACrB,aAAG,SAAS;AAAA,QAChB;AAAA,MACJ,OACK;AAED,gBAAQ;AAER,WAAG,cAAc;AAAA,MACrB;AACA,UAAI,CAAC,WAAW,GAAG,gCAAgC,CAAC,SAAS;AACzD,cAAM,QAAQ;AAAA,UACV,QAAa;AAAA,UACb;AAAA,UACA,SAAa;AAAA,UACb;AAAA,UACA,SAAa;AAAA,UACb,YAAa;AAAA,UACb;AAAA,QACJ;AACA,WAAG,QAAQ,UAAU,KAAK;AAC1B,WAAG,QAAQ,UAAU,KAAK;AAAA,MAC9B;AACA,aAAO;AAAA,IACX;AAAA;AAAA;AAAA,IAGA,mBAAmB,MAAM,UAAU,CAAC,GAAG,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG;AApTjE,UAAAD;AAqTQ,YACI,KAAK,MACL,EAAE,oBAAoB,OAAO,aAAa,OAAO,cAAc,MAAM,IAAI,OACzE,WAAW,MAAM,QAAQ,IAAI,IAAI,QAAOA,MAAA,GAAG,YAAY,MAAM,UAAU,MAA/B,OAAAA,MAAoC,CAAC;AACjF,UAAI,aAAa;AACb,eAAO;AAAA,UACH,SAAU,CAAC,qBAAqB,SAAS,QAAQ,WAAS,GAAG,sCAAsC,KAAK,CAAC;AAAA,UACzG,KAAU,SAAS,QAAQ,WAAS,MAAM,WAAW;AAAA,QACzD;AAAA,MACJ,OACK;AACD,iBAAS,IAAI,GAAG,MAAM,SAAS,QAAQ,OAAO,IAAI,KAAK,KAAK;AACxD,kBAAQ,SAAS,CAAC;AAClB,cAAI,CAAC,mBAAmB;AACpB,oBAAQ,KAAK,KAAK;AAAA,UACtB;AACA,cAAI,KAAK,KAAK;AACd,aAAG,mBAAmB,OAAO,SAAS,KAAK;AAAA,YACvC,mBAAoB,qBAAqB,CAAC,MAAM,WAAW,EAAE;AAAA,YAC7D;AAAA,UACJ,CAAC;AAAA,QACL;AACA,eAAO,EAAE,SAAS,IAAI;AAAA,MAC1B;AAAA,IACJ;AAAA,IACA,sCAAsC,MAAM;AACxC,YAAM,WAAW,KAAK,sBAAsB,KAAK;AACjD,UAAI,CAAC,YAAY,SAAS,WAAW,KAAK,CAAC,KAAK,UAAU,CAAC,KAAK,WAAW,IAAI,GAAG;AAC9E,eAAO,KAAK,gBAAgB,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;AAAA,MAClD;AACA,YAAM,mBAAmB,SAAS,QAAQ,WAAS,KAAK,sCAAsC,KAAK,CAAC;AACpG,aAAO,iBAAiB,UAAU,KAAK,gBAAgB,IAAI,IACrD,CAAC,MAAM,GAAG,gBAAgB,IAC1B,CAAC;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYA,YAAY,QAAQ,aAAa,OAAO;AACpC,YACI,KAAK,MACL,YAAa,cAAc,GAAG,cAAc,OAAO,sBAAuB,OAAO;AACrF,aAAO,EAAC,qCAAU,UAASD,cACvB,GAAG,YAEG,SAAS,OAAO,GAAG,eAAe,EAAE,KAAK,GAAG,QAAQ,IACpD;AAAA,IAEd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,6BAA6B,QAAQ,SAAS;AAC1C,YACI,KAAc,MACd,EAAE,QAAQ,IAAI,IACd,QAAc,QAAQ,QAAQ,MAAM,GACpC,WAAc,GAAG,iBAAiB,GAAG,YAAY,MAAM,GAAG,OAAO;AAErE,UAAI,GAAG,cAAc,WAAW,OAAO,oBAAoB;AACvD,WAAG,0BAA0B,MAAM;AAAA,MACvC;AAKA,UAAI,SAAS,UAAU,UAAU,OAAO;AAGpC,gBAAQ,cAAc;AACtB,YAAI,SAAS;AACT,kBAAQ,OAAO,QAAQ,GAAG,GAAG,GAAG,QAAQ;AACxC,gBAAM,QAAQ,EAAE,QAAS,OAAO,UAAW,MAAM,QAAQ,SAAU,UAAU,OAAQ,QAAQ,EAAE;AAC/F,aAAG,QAAQ,OAAO,KAAK;AACvB,aAAG,QAAQ,UAAU,KAAK;AAAA,QAC9B,OACK;AACD,kBAAQ,OAAO,QAAQ,GAAG,SAAS,MAAM;AACzC,gBAAM,QAAQ,EAAE,QAAS,UAAU,YAAa,MAAM,QAAQ,SAAU,UAAU,OAAQ,QAAQ,EAAE;AACpG,aAAG,QAAQ,UAAU,KAAK;AAC1B,aAAG,QAAQ,UAAU,KAAK;AAAA,QAC9B;AACA,gBAAQ,aAAa;AACrB,WAAG,SAAS;AAAA,MAChB;AAAA,IACJ;AAAA;AAAA,IAEA,0BAA0B,cAAc;AAzZ5C,UAAAC;AA0ZQ,OAAAA,MAAA,aAAa,uBAAb,gBAAAA,IAAiC,QAAQ,WAAS;AAC9C,cAAM,aAAa,KAAK,EAAE,EAAE,SAAS;AACrC,YAAI,CAAC,MAAM,QAAQ;AACf,eAAK,0BAA0B,KAAK;AAAA,QACxC;AAAA,MACJ;AAAA,IACJ;AAAA,IACA,iBAAiB,UAAU,SAAS,SAAS,CAAC,GAAG;AAC7C,YACI,KAAa,MACb,cAAa,qCAAU,WAAU;AACrC,eAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACjC,cAAM,QAAQ,SAAS,CAAC;AAGxB,YAAI,CAAC,GAAG,aAAa,GAAG,gBAAgB,KAAK,GAAG;AAC5C,gBAAM,UAAU,MAAM,aAAa,GAAG,EAAE;AACxC,cAAI,WAAW,CAAC,QAAQ,QAAQ;AAE5B,mBAAO,KAAK,KAAK;AAAA,UACrB;AACA,kBAAQ,SAAS,CAAC;AAClB,cAAI,MAAM,WAAW,EAAE,GAAG;AACtB,eAAG,iBAAiB,GAAG,YAAY,KAAK,GAAG,SAAS,MAAM;AAAA,UAC9D;AAAA,QACJ;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,MAAM,eAAe,YAAY,UAAU;AACvC,YACI,KAAS,MACT,SAAS,GAAG,QAAQ,UAAU,GAC9B,OAAS,OAAO,aAAa,EAAE;AACnC,UAAI,aAAa,QAAW;AACxB,mBAAW,CAAC,KAAK;AAAA,MACrB;AAEA,UAAI,CAAC,KAAK,qBAAqB,CAAC,OAAO,UAAU,OAAO,WAAW,EAAE,MAAM,UAAU;AACjF,WAAG,QAAQ,oBAAoB,EAAE,QAAQ,SAAS,CAAC;AACnD,aAAK,YAAY;AACjB,YAAI,KAAK,WAAW;AAChB,aAAG,eAAe,MAAM;AACxB,iBAAO;AAAA,QACX,OACK;AACD,aAAG,aAAa,MAAM;AACtB,cAAIE,WAAU;AAId,cAAI,CAAC,OAAO,UAAU;AAClB,iBAAK,oBAAoB;AACzB,gBAAI;AACA,oBAAM,GAAG,aAAa,MAAM;AAAA,YAChC,SACO,WAAW;AAEd,mBAAK,YAAY;AACjB,cAAAA,WAAU;AACV,iBAAG,QAAQ,yBAAyB,EAAE,QAAQ,UAAU,CAAC;AAAA,YAC7D,UACA;AACI,mBAAK,oBAAoB;AAAA,YAC7B;AAAA,UACJ;AACA,iBAAOA;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,eAAe,cAAc;AAEzB,UAAI,aAAa,kBAAkB,IAAI,GAAG;AACtC,eAAO,KAAK,6BAA6B,cAAc,KAAK;AAAA,MAChE;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,aAAa,cAAc;AAEvB,UAAI,aAAa,kBAAkB,IAAI,GAAG;AACtC,eAAO,KAAK,6BAA6B,cAAc,IAAI;AAAA,MAC/D;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,gBAAgB,MAAM;AAClB,YACI,EAAE,eAAe,SAAS,cAAc,IAAI,KAAK,YACjD,YAA4C,oBAAI,IAAI,GACpD,YAA4C,oBAAI,IAAI,GACpD,cAA4C,CAAC;AAEjD,iBAAW,QAAQ,MAAM;AACrB,cAAM,KAAK,KAAK,OAAO;AACvB,YAAI,MAAM,MAAM;AACZ,oBAAU,IAAI,IAAI,IAAI;AAAA,QAC1B;AAAA,MACJ;AAGA,YAAM,cAAc,UAAQ;AACxB,cAAM,QAAQ,OAAO,OAAO,CAAC,GAAG,IAAI;AACpC,cAAM,aAAa,IAAI,CAAC;AACxB,kBAAU,IAAI,MAAM,OAAO,GAAG,KAAK;AAEnC,kBAAU,IAAI,KAAK,OAAO,CAAC;AAC3B,eAAO;AAAA,MACX;AACA,eAAS,QAAQ,MAAM;AACnB,cAAM,SAAS,KAAK,OAAO;AAG3B,YAAI,UAAU,IAAI,MAAM,GAAG;AACvB,iBAAO,UAAU,IAAI,MAAM;AAAA,QAC/B,OACK;AACD,iBAAO,YAAY,IAAI;AAAA,QAC3B;AACA,cAAM,WAAW,KAAK,aAAa;AAEnC,YAAI,YAAY,MAAM;AAClB,cAAI,SAAS,UAAU,IAAI,QAAQ;AAEnC,cAAI,QAAQ;AACR,gBAAI,CAAC,OAAO,aAAa,GAAG;AACxB,uBAAS,YAAY,MAAM;AAAA,YAC/B;AACA,mBAAO,aAAa,EAAE,KAAK,IAAI;AAAA,UACnC;AAAA,QACJ,OAEK;AAED,cAAI,KAAK,aAAa,GAAG;AACrB,wBAAY,KAAK,IAAI;AAAA,UACzB,WAES,KAAK,OAAO,KAAK,MAAM;AAC5B,wBAAY,KAAK,YAAY,IAAI,CAAC;AAAA,UACtC,OACK;AACD,wBAAY,KAAK,IAAI;AAAA,UACzB;AAAA,QACJ;AAAA,MACJ;AACA,gBAAU,QAAQ,YAAU;AAlkBpC,YAAAF,KAAA;AAmkBY,eAAAA,MAAA,OAAO,aAAa,GAAE,SAAtB,wBAAAA,KAA6B,CAAC,QAAQ,WAAW,OAAO,cAAc,OAAO;AAAA,MACjF,CAAC;AACD,aAAO;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAoBA,QAAQ,QAAQ,iBAAiB,iBAAiB,OAAO;AACrD,YACI,EAAE,OAAO,IAAI,QACb,UAAa,CAAC,GACd,UAAa,CAAC,GACd,UAAa,CAAC;AAClB,UAAI,GAAG;AAyFP,WAAK,IAAI,GAAG,IAAI,QAAQ,KAAK;AACzB,YAAI,QAAQ,OAAO,CAAC;AACpB,gBAAQ,MAAM,SAAS;AACvB,YAAI,CAAC,OAAO,CAAC,EAAE,MAAM;AACjB,iBAAO,CAAC,IAAI,OAAK,EAAE,KAAK;AACxB,iBAAO,CAAC,EAAE,YAAY;AAAA,QAC1B;AACA,gBAAQ,CAAC,IAAI,oBAAI,IAAI;AAAA,MACzB;AACA,WAAK,SAAS,SAAS,OAAK;AAlsBpC,YAAAA;AAmsBY,sBAAc,CAAC;AACf,YAAI,EAAE,QAAQ;AACV,eAAK,IAAI,GAAG,IAAI,QAAQ,KAAK;AACzB,kBACI,mBAAiBA,MAAA,aAAY,2CAAa,UAAS,CAAC,MAAnC,gBAAAA,IAAsC,SAAQ,IAC/D,UAAiB,QAAQ,CAAC,GAC1B,OAAiB,YAAY,QAAQ,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GACvD,aAAiB,CAAC;AAEtB,gBAAI,KAAK,CAAC,MAAM,YAAY;AACxB;AAAA,YACJ;AAIA,qBAAS,IAAI,GAAG,EAAE,QAAAG,QAAO,IAAI,MAAM,IAAIA,SAAQ,KAAK;AAChD,oBACI,MAAiB,KAAK,CAAC,GACvB,OAAiB,GAAG,mBAAkB,2BAAK,WAAU,IAAI,KAAK,IAAI,KAClE,KAAiB,aAAa,eAAe,aAAa,IAAI,IAAI,GAAG,GACrE,QAAiB,OAAO,CAAC,EAAE,WAC3B,SAAiB,QAAQ,IAAI,EAAE,KAAM,QAAQ,IAAI,IAAI;AAAA,gBACjD;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,UAAkB;AAAA,gBAClB,UAAkB;AAAA,gBAClB,UAAkB,CAAC;AAAA,gBACnB,iBAAkB;AAAA,gBAClB;AAAA,gBACA,iBAAkB;AAAA,cACtB,CAAC,EAAG,IAAI,EAAE;AACd,yBAAW,KAAK,MAAM;AAAA,YAC1B;AACA,wBAAY,QAAQ,gBAAc;AAC9B,yBAAW,QAAQ,YAAU;AACzB,oBAAI,CAAC,WAAW,SAAS,SAAS,MAAM,GAAG;AACvC,6BAAW,SAAS,KAAK,MAAM;AAAA,gBACnC;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AACD,0BAAc;AAAA,UAClB;AACA,cAAI,YAAY,QAAQ;AACpB,wBAAY,QAAQ,CAAC,YAAY,MAAM,WAAW,SAAS,KAAK,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC;AAAA,UACrF,OACK;AACD,oBAAQ,KAAK,CAAC;AAAA,UAClB;AAAA,QACJ;AAAA,MACJ,GAAG,IAAI;AAGP,UAAI,mBAAmB,gBAAgB;AACnC,gBAAQ,QAAQ,OAAK,EAAE,QAAQ,CAACC,IAAG,IAAIC,SAAQ;AAC3C,6DAAkBD;AAClB,cAAI,gBAAgB;AAChB,YAAAA,KAAI,KAAK,aAAaA,EAAC;AACvB,YAAAC,KAAI,IAAI,IAAID,EAAC;AAAA,UACjB;AAAA,QACJ,CAAC,CAAC;AAAA,MACN;AACA,cAAQ,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,OAAO,GAAG,GAAG,OAAO;AAEtD,YAAM,OAAO,CAAC,MAAM;AAChB,YAAI,EAAE,UAAU;AACZ,YAAE,SAAS,KAAK,CAAC,KAAK,QAAQ;AAE1B,gBAAI,IAAI,WAAW,IAAI,QAAQ;AAE3B,kBAAI,IAAI,QAAQ;AACZ,oBAAI;AACJ,yBAASE,KAAI,GAAG,CAAC,UAAUA,KAAI,QAAQA,MAAK;AACxC,wBACI,KAAK,OAAOA,EAAC,EAAE,GAAG,GAClB,KAAK,OAAOA,EAAC,EAAE,GAAG;AAEtB,sBAAI,OAAO,cAAc,OAAO,YAAY;AACxC,2BAAO,IAAI,SAAS,IAAI,SAAS,KAAK,IAAI,SAAS,IAAI,SAAS,IAAI;AAAA,kBACxE;AACA,2BAAS,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI;AAAA,gBAC1C;AACA,uBAAO;AAAA,cACX,WAGS,OAAO,IAAI,QAAQ,YAAY,OAAO,IAAI,QAAQ,UAAU;AACjE,uBAAO,IAAI,IAAI,cAAc,IAAI,KAAK,QAAW,EAAE,SAAU,KAAK,CAAC;AAAA,cACvE,OACK;AACD,uBAAO,IAAI,MAAM,IAAI,MAAM,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI;AAAA,cAC5D;AAAA,YACJ,OACK;AACD,qBAAO,IAAI,SAAS,IAAI,SAAS,KAAK,IAAI,SAAS,IAAI,SAAS,IAAI;AAAA,YACxE;AAAA,UACJ,CAAC;AACD,YAAE,SAAS,QAAQ,IAAI;AAAA,QAC3B;AAAA,MACJ;AACA,WAAK,OAAO;AACZ,aAAO;AAAA,IACX;AAAA;AAAA,IAEA,gBAAgB,MAAM;AAClB,YAAM,EAAE,eAAe,cAAc,IAAI,KAAK;AAC9C,UAAI,cAAkB,OAClB,kBAAkB;AAItB,iBAAW,QAAQ,MAAM;AACrB,YAAI,KAAK,WAAW,MAAM,QAAQ,KAAK,aAAa,CAAC,GAAG;AACpD,4BAAkB;AAClB;AAAA,QACJ;AACA,YAAI,KAAK,aAAa,KAAK,MAAM;AAC7B,wBAAc;AAAA,QAClB;AAAA,MACJ;AACA,UAAI,mBAAmB,aAAa;AAChC,eAAO,KAAK,gBAAgB,IAAI;AAAA,MACpC;AACA,aAAO;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,MAAM,OAAO,OAAO;AAChB,YAAM,KAAK;AACX,cAAQ,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAG7C,cAAQ,MAAM,OAAO,UAAQ;AACzB,YAAI,SAAS,QAAQ,KAAK,eAAe;AACzC,eAAO,UAAU,CAAC,KAAK,QAAQ;AAC3B,mBAAS,CAAC,MAAM,SAAS,KAAK,MAAM;AACpC,iBAAS,KAAK;AAAA,QAClB;AACA,eAAO;AAAA,MACX,CAAC;AAUD,UAAI,MAAM,UAAU,GAAG,QAAQ,gBAAgB,EAAE,SAAU,MAAM,CAAC,MAAM,OAAO;AAE3E,cAAM,KAAK,CAAC,KAAK,QAAQ,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,CAAC;AAE9D,WAAG,WAAW;AAEd,mBAAW,QAAQ,OAAO;AACtB,gBAAM,YAAY,KAAK;AACvB,oBAAU,YAAY,IAAI;AAC1B,aAAG,eAAe,WAAW,KAAK;AAAA,QACtC;AAEA,WAAG,SAAS;AASZ,WAAG,QAAQ,UAAU,EAAE,SAAU,MAAM,CAAC;AACxC,WAAG,QAAQ,UAAU;AAAA,UACjB,QAAU;AAAA,UACV,SAAU;AAAA,QACd,CAAC;AAAA,MACL;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,MAAM,QAAQ,OAAO;AACjB,YAAM,KAAK;AACX,cAAQ,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAG7C,cAAQ,MAAM,OAAO,UAAQ;AACzB,cAAM,EAAE,OAAO,IAAI;AACnB,YAAI,SAAe,UAAU,CAAC,OAAO;AACrC,eAAO,UAAU,CAAC,KAAK,QAAQ;AAC3B,mBAAS,CAAC,MAAM,SAAS,MAAM;AAC/B,iBAAS,KAAK;AAAA,QAClB;AACA,eAAO;AAAA,MACX,CAAC;AAUD,UAAI,MAAM,UAAU,GAAG,QAAQ,iBAAiB,EAAE,SAAU,MAAM,CAAC,MAAM,OAAO;AAE5E,cAAM,KAAK,CAAC,KAAK,QAAQ,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,CAAC;AAE9D,WAAG,WAAW;AACd,mBAAW,QAAQ,OAAO;AACtB,gBACI,EAAE,OAAO,IAAK,MACd,cAAc,OAAO,SAAS,MAAM,OAAO,SAAS,QAAQ,IAAI,IAAI,CAAC;AACzE,iBAAO,OAAO,YAAY,MAAM,OAAO,WAAW;AAClD,eAAK,YAAY,WAAW;AAC5B,aAAG,eAAe,MAAM,KAAK;AAAA,QACjC;AACA,WAAG,SAAS;AASZ,WAAG,QAAQ,WAAW,EAAE,SAAU,MAAM,CAAC;AACzC,WAAG,QAAQ,UAAU;AAAA,UACjB,QAAU;AAAA,UACV,SAAU;AAAA,QACd,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,EACJ,GAn6BI,cADqBN,KACd,SAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBf,cAvBqBA,KAuBd,cAAa,aAIpB,cA3BqBA,KA2Bd,gBAAe;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,IA+BlB,mBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOpB,8BAA+B,cAAc,aAAa,QAAQ,OAAO,GAAG;AAAA,EAChF,IAlEqBA;AAAA;;;ACTzB,IAAqB,aAArB,MAAgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS5B,OAAO,QAAQ,MAAM,YAAYO,KAAI;AACjC,UAAM,YAAY,CAAC,IAAI;AACvB,QAAI,MAAM;AACV,WAAO,UAAU,QAAQ;AACrB,aAAO,UAAU,IAAI;AACrB,MAAAA,IAAG,IAAI;AACP,iBAAW,WAAW,IAAI;AAC1B,UAAI,UAAU;AACV,kBAAU,KAAK,MAAM,WAAW,SAAS,MAAM,EAAE,QAAQ,CAAC;AAAA,MAC9D;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,kBAAkB,MAAM,YAAYA,KAAI;AAC3C,UAAM,YAAY,CAAC,EAAE,MAAO,MAAM,QAAS,KAAK,CAAC;AACjD,WAAO,UAAU,QAAQ;AACrB,YAAM,EAAE,QAAQ,KAAK,IAAI,UAAU,IAAI;AACvC,MAAAA,IAAG,QAAQ,IAAI;AACf,YAAM,WAAW,WAAW,IAAI;AAChC,UAAI,MAAM,QAAQ,QAAQ,GAAG;AACzB,kBAAU,KAAK,GAAG,SAAS,MAAM,EAAE,QAAQ,EAAE,IAAI,YAAU,EAAE,MAAO,OAAO,QAAS,KAAK,EAAE,CAAC;AAAA,MAChG;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,OAAO,iBAAiB,MAAM,YAAYA,KAAI;AAC1C,UAAM,YAAY,CAAC,IAAI;AACvB,QAAI,MAAM;AACV,WAAO,UAAU,QAAQ;AACrB,aAAO,UAAU,IAAI;AACrB,MAAAA,IAAG,IAAI;AACP,iBAAW,WAAW,IAAI;AAC1B,UAAI,UAAU;AACV,kBAAU,KAAK,MAAM,WAAW,QAAQ;AAAA,MAC5C;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,SAAS,MAAM,YAAYA,KAAI;AAClC,UACI,UAAU,oBAAI,IAAI,GAClB,YAAY,CAAC,IAAI;AACrB,QAAI,MAAM;AACV,WAAO,UAAU,QAAQ;AACrB,aAAO,UAAU,UAAU,SAAS,CAAC;AACrC,UAAI,QAAQ,IAAI,IAAI,GAAG;AACnB,QAAAA,IAAG,IAAI;AACP,kBAAU,IAAI;AAAA,MAClB,OACK;AACD,mBAAW,WAAW,IAAI;AAC1B,YAAI,UAAU;AACV,oBAAU,KAAK,GAAG,SAAS,MAAM,EAAE,QAAQ,CAAC;AAAA,QAChD;AACA,gBAAQ,IAAI,MAAM,IAAI;AAAA,MAC1B;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,YAAY,MAAM,YAAY,MAAM,OAAO;AAC9C,UACI,UAAU,oBAAI,IAAI,GAClB,YAAY,CAAC,IAAI;AACrB,QAAI,MAAM;AACV,WAAO,UAAU,QAAQ;AACrB,aAAO,UAAU,UAAU,SAAS,CAAC;AACrC,UAAI,QAAQ,IAAI,IAAI,GAAG;AACnB,cAAM,IAAI;AACV,kBAAU,IAAI;AAAA,MAClB,OACK;AACD,aAAK,IAAI;AACT,mBAAW,WAAW,IAAI;AAC1B,YAAI,UAAU;AACV,oBAAU,KAAK,GAAG,SAAS,MAAM,EAAE,QAAQ,CAAC;AAAA,QAChD;AACA,gBAAQ,IAAI,MAAM,IAAI;AAAA,MAC1B;AAAA,IACJ;AAAA,EACJ;AACJ;AACA,WAAW,SAAS;;;ACzFpB,IAAO,oBAAQ,YAAU,MAAM,mBAAmB,UAAU,MAAM;AAAA,EAC9D,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EACA,WAAW,eAAe;AACtB,WAAO;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,MA6FH,gBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUjB,mBAAoB;AAAA,MACpB,kBAAoB;AAAA,IACxB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,YAAY,MAAM;AA5KtB,QAAAC;AA6KQ,UACI,KAAc,MACd,EAAE,QAAQ,IAAI,IAGd,cAAcA,MAAA,GAAG,sBAAH,gBAAAA,IAAA,SAAuB,EAAE,MAAM,OAAQ,IAAI,SAAU,GAAG,QAAQ;AAClF,QAAI,eAAe,OAAO;AACtB;AAAA,IACJ;AACA,OAAG,QAAQ,qBAAqB;AAChC,OAAG,sBAAsB;AACzB,UAAM,EAAE,OAAO,UAAU,QAAQ,SAAS,IAAI,IAAI,GAAG,OAAO,GAAG,gBAAgB,MAAM,UAAU,IAAI,GAAG,gBAAgB,MAAM,UAAU;AACtI,QAAI,EAAE,UAAU,IAAI,GAAG,gBACnB,YAAY;AAEhB,QAAI,WAAW;AAEX,UAAI,OAAO,cAAc,UAAU;AAC/B,oBAAY,SAAS,WAAW,EAAE,IAAI,MAAM,GAAG;AAAA,MACnD;AACA,kBAAY,MAAM,SAAS,SAAS,SAAS,OAAO,SAAS,QAAQ,SAAS;AAAA,IAClF;AACA,QAAI,GAAG,MAAM;AAGT,UAAI,MAAM,QAAQ;AAEd,cAAM,QAAQ,GAAG,IAAI,OAAO,SAAS;AAErC,cAAM,QAAQ,UAAQ,KAAK,cAAc,CAAC;AAAA,MAC9C;AACA,UAAI,OAAO,QAAQ;AACf,mBAAW,EAAE,QAAQ,MAAM,MAAM,KAAK,QAAQ;AAC1C,gBAAM,YAAY,GAAG,QAAQ,OAAO,EAAE;AACtC,oBAAU,YAAY,MAAM,KAAK;AAAA,QACrC;AAAA,MACJ;AAEA,SAAG,OAAO,UAAU,SAAS;AAAA,IACjC,OACK;AACD,UAAI,WAAW;AACX,WAAG,cAAc;AAAA,MACrB;AAIA,SAAG,OAAO,QAAQ;AAClB,SAAG,IAAI,KAAK;AACZ,UAAI,WAAW;AACX,WAAG,aAAa;AAAA,MACpB;AAAA,IACJ;AAGA,QAAI,aAAa,CAAC,WAAW;AACzB,cAAQ,QAAQ,CAAC,EAAE,QAAQ,OAAO,OAAO,MAAM,GAAG,cAAc,QAAQ,OAAO,MAAM,CAAC;AAAA,IAC1F;AAEA,OAAG,cAAc;AACjB,UAAM,QAAQ,EAAE,OAAQ,OAAO,SAAU,UAAU,SAAS,oBAAqB,UAAU;AAC3F,QAAI,GAAG,cAAc,CAAC,GAAG,cAAc;AAEnC,SAAG,OAAO;AAAA,QACN,QAAS,GAAG;AAAA,MAChB,CAAC;AAAA,IACL;AACA,QAAI,GAAG,WAAW;AAEd,SAAG,MAAM,MAAM,MAAM,OAAO,MAAM,GAAG,mBAAmB;AAAA,IAC5D,WACS,GAAG,UAAU;AAGlB,UAAI,GAAG,YAAY;AACf,gBAAQ,cAAc;AAAA,UAClB,QAAS,QAAQ,OAAO,KAAK,GAAG,eAAe,GAAG,OAAO,CAAC;AAAA,UAC1D,QAAS;AAAA,QACb,CAAC;AAAA,MACL,OAEK;AACD,WAAG,KAAK;AAAA,MACZ;AAAA,IACJ,WAES,CAAC,GAAG,MAAM;AAEf,UAAI,QAAQ,OAAO,KAAK,CAAC,QAAQ,UAAU,IAAI,OAAO,EAAE,MAAM,KAAK,GAAG;AAClE,gBAAQ,cAAc;AAAA,UAClB,QAAS,QAAQ,OAAO,KAAK,CAAC,GAAG,MAAM,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;AAAA,UAC5D,QAAS;AAAA,QACb,CAAC;AAED,SAAC,aAAa,GAAG,iBAAiB;AAAA,MACtC;AAAA,IACJ,OAEK;AACD,UAAI,WAAW,OACX,IAAI;AACR,iBAAW;AAAA,QACP,GAAG;AAAA,QACH,OAAK,MAAM,QAAQ,EAAE,QAAQ,KAAK,CAAC,WAAW,EAAE,WAAW;AAAA,QAC3D,UAAQ;AACJ,cAAI,KAAK,OAAO,IAAI,GAAG,GAAG;AACtB,uBAAW;AAAA,UACf;AAAA,QACJ;AAAA,MACJ;AAEA,UAAI,UAAU;AACV,WAAG,KAAK,CAAC,GAAG,MAAM,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,QAAW,QAAW,IAAI;AACnE,WAAG,aAAa,IAAI;AAEpB,SAAC,aAAa,GAAG,iBAAiB;AAAA,MACtC;AAAA,IACJ;AAEA,QAAI,WAAW;AACX,SAAG,QAAQ,WAAW;AAAA,QAClB,QAAW;AAAA,QACX;AAAA,QACA,SAAW,QAAQ;AAAA,QACnB,UAAW;AAAA,MACf,CAAC;AAAA,IACL;AACA,OAAG,sBAAsB;AACzB,OAAG,QAAQ,mBAAmB;AAC9B,OAAG,QAAQ,YAAY,KAAK;AAAA,EAChC;AAAA;AAAA,EAEA,gBAAgB,MAAM,YAAY;AAC9B,QAAI,CAAC,MAAM;AACP,aAAO;AAAA,QACH,UAAW,KAAK;AAAA,MACpB;AAAA,IACJ;AACA,UACI,KAAyB,MACzB,EAAE,SAAS,UAAU,IAAI,GAAG,YAC5B,WAAyB,CAAC,GAC1B,QAAyB,CAAC,GAC1B,UAAyB,CAAC,GAC1B,UAAyB,CAAC,GAC1B,MAAyB,CAAC,GAC1B,aAAyB,sBAAsB;AACnD,UAAM,EAAE,WAAW,kBAAkB,IAAI,GAAG;AAC5C,QAAI,WAAW;AACf,SAAK,QAAQ,CAAC,SAAS,MAAM;AAlUrC,UAAAA,KAAA;AAmUY,gBAAU,QAAQ,UAAU,QAAQ,OAAO;AAC3C,YACI,KAAS,QAAQ,OAAO,GACxB,SAAS,GAAG,QAAQ,EAAE;AAE1B,UAAI,CAAC,cAAc,WAAW,IAAI,EAAE,GAAG;AAEnC,YAAI,QAAQ;AAGR,gBAAIA,MAAA,GAAG,qBAAH,gBAAAA,IAAA,SAAsB,EAAE,QAAQ,MAAO,SAAS,OAAQ,GAAG,QAAO,OAAO;AAEzE,qBAAG,qBAAH,4BAAsB,EAAE,QAAQ,MAAO,QAAQ;AAE/C,gBAAI,sBAAsB,OAAO;AAC7B,yBAAW,SAAS,WAAW;AAC3B,oBAAI,EAAE,MAAM,cAAc,YAAa,MAAM,cAAc,OAAO,MAAO;AACrE,0BAAQ,MAAM,UAAU,IAAI,MAAM;AAAA,gBACtC;AAAA,cACJ;AAAA,YACJ;AAEA,kBAAM,SAAS,OAAO,IAAI,SAAS,MAAM,QAAQ,SAAS,CAAC;AAC3D,gBAAI,QAAQ;AACR,sBAAQ,KAAK;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA,OAAQ;AAAA,cACZ,CAAC;AAAA,YACL;AAEA,qBAAG,oBAAH,4BAAqB,EAAE,QAAQ,MAAO,QAAQ;AAAA,UAClD;AAAA,QACJ,OAEK;AACD,gBAAM,KAAK,GAAG,cAAc,GAAG,aAAa,OAAO,CAAC,CAAC;AAAA,QACzD;AAAA,MACJ;AACA,UAAI,QAAQ;AACR;AAAA,MACJ;AACA,cAAQ,EAAE,IAAI;AACd,UAAI,EAAE,IAAI;AAAA,IACd,CAAC;AAED,QAAI,WAAW,GAAG,WAAW,OAAO,OAAK,CAAC,EAAE,YAAY,EAAE,QAAQ;AAG9D,UAAI,YAAY;AACZ,mBAAW,MAAM,YAAY;AACzB,cAAI,CAAC,QAAQ,EAAE,GAAG;AACd,qBAAS,KAAK,GAAG,QAAQ,EAAE,CAAC;AAAA,UAChC;AAAA,QACJ;AAAA,MACJ,OAEK;AACD,WAAG,QAAQ,YAAU;AACjB,cAAI,CAAC,QAAQ,OAAO,EAAE,GAAG;AACrB,qBAAS,KAAK,MAAM;AAAA,UACxB;AAAA,QACJ,GAAG,IAAI;AAAA,UACH,2BAA+B;AAAA,UAC/B,8BAA+B;AAAA,QACnC,CAAC;AAAA,MACL;AAAA,IACJ;AACA,WAAO,EAAE,OAAO,UAAU,QAAS,CAAC,GAAG,SAAS,IAAI;AAAA,EACxD;AAAA;AAAA,EAEA,gBAAgB,MAAM;AAClB,QAAI,CAAC,MAAM;AACP,aAAO;AAAA,QACH,UAAW,KAAK;AAAA,MACpB;AAAA,IACJ;AACA,UACI,KAAe,MACf;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAe,GAAG,YAClB;AAAA,MACI;AAAA,MACA;AAAA,IACJ,IAAe,GAAG,gBAClB,WAAe,CAAC,GAChB,QAAe,CAAC,GAChB,SAAe,CAAC,GAChB,UAAe,CAAC,GAChB,eAAe,oBAAI,IAAI,GACvB,MAAe,CAAC;AACpB,QAAI,QAAQ;AACZ,QAAI,GAAG,mBAAmB;AACtB,aAAO,GAAG,gBAAgB,IAAI;AAAA,IAClC;AACA,eAAW,kBAAkB,EAAE,QAAS,MAAM,IAAK,GAAG,SAAS,IAAI,UAAW,KAAK,GAAG,OAAK,EAAE,UAAU,CAAC,QAAQ,YAAY;AAtapI,UAAAA;AAuaY,UAAI,QAAQ;AACR,cAAM,EAAE,IAAI,KAAK,IAAI,GAAG,gBAAgB,OAAO;AAE/C,YAAI,MAAM;AAGN,gBAAIA,MAAA,GAAG,qBAAH,gBAAAA,IAAA,SAAsB,EAAE,QAAS,MAAM,MAAO,QAAQ,QAAO,OAAO;AACpE,gBAAI;AACJ,kBAAM,mBAAmB,KAAK;AAE9B,gBAAI,qBAAqB,QAAQ,QAAQ,aAAa,MAAM,MAAM;AAC9D,mBAAK,cAAc;AACnB,mBAAK,KAAK,aAAa,IAAI,KAAK,WAAW;AAC3C,qBAAO,QAAQ,aAAa;AAC5B,iBAAG,eAAe,MAAM,IAAI;AAC5B,gCAAkB;AAAA,YACtB;AAEA,gBAAI,KAAK,OAAO,OAAO,OAAO,OAAO,GAAG;AACpC,qBAAO,KAAK;AAAA,gBACR;AAAA,gBACA;AAAA,gBACA,OAAQ,OAAO,aAAa,EAAE,QAAQ,OAAO;AAAA,cACjD,CAAC;AAAA,YACL;AAOA,gBAAI,sBAAsB,OAAO;AAC7B,yBAAW,SAAS,WAAW;AAE3B,oBAAI,MAAM,SAAS,cAAc,EAAE,MAAM,cAAc,YAAa,MAAM,cAAc,KAAK,MAAO;AAChG,0BAAQ,MAAM,UAAU,IAAI,MAAM;AAAA,gBACtC;AAAA,cACJ;AAAA,YACJ;AACA,gBAAI,OAAO,QAAQ,aAAa,WAAW;AACvC,mBAAK,eAAe,MAAM,CAAC,QAAQ,QAAQ;AAAA,YAC/C;AAEA,kBAAM,SAAS,KAAK,IAAI,SAAS,MAAM,QAAQ,SAAS,CAAC;AACzD,gBAAI,QAAQ;AACR,sBAAQ,KAAK;AAAA,gBACT,QAAS;AAAA,gBACT;AAAA,gBACA,OAAS;AAAA,cACb,CAAC;AAAA,YACL,WACS,iBAAiB;AACtB,mBAAK,kBAAkB;AAAA,gBACnB,CAAC,aAAa,GAAI;AAAA,kBACd,OAAW;AAAA,kBACX,UAAW;AAAA,gBACf;AAAA,cACJ,CAAC;AAAA,YACL;AAAA,UACJ;AAAA,QACJ,OAEK;AACD,kBAAQ,aAAa,IAAI,OAAO,OAAO;AACvC,gBAAM,KAAK,EAAE,GAAG,SAAS,GAAI,MAAM,QAAQ,QAAQ,aAAa,CAAC,IAAI,EAAE,UAAW,CAAC,EAAE,IAAI,OAAW,CAAC;AAAA,QACzG;AACA,qBAAa,IAAI,IAAI;AACrB,YAAI,EAAE,IAAI;AAAA,MACd;AAAA,IACJ,CAAC;AACD,QAAI,aAAa,WAAW,KAAK,QAAQ;AACrC,SAAG,SAAS,UAAQ;AAChB,YAAI,CAAC,aAAa,IAAI,IAAI,GAAG;AACzB,mBAAS,KAAK,IAAI;AAAA,QACtB;AAAA,MACJ,CAAC;AAAA,IACL;AACA,WAAO,EAAE,OAAO,UAAU,QAAQ,SAAS,IAAI;AAAA,EACnD;AAAA;AAAA,EAEA,gBAAgB,SAAS;AACrB,UACI,KAAO,QAAQ,KAAK,WAAW,OAAO,GACtC,OAAO,KAAK,QAAQ,EAAE;AAC1B,WAAO,EAAE,IAAI,KAAK;AAAA,EACtB;AACJ;;;ACxfA,IAAMC,YAAW,OAAO,UAAU;AAKlC,IAAO,mBAAQ,YAAU,MAAM,kBAAkB,UAAU,MAAM;AAAA,EAC7D,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EACA,WAAW,gBAAgB;AACvB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQH,KAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQN,0BAA2B;AAAA,IAC/B;AAAA,EACJ;AAAA,EACA,IAAI,MAAM;AACN,WAAO,KAAKA,SAAQ;AAAA,EACxB;AAAA,EACA,IAAI,IAAI,KAAK;AArCjB,QAAAC;AAsCQ,UAAM,KAAK;AACX,QAAI,GAAG,QAAQ,KAAK;AAChB,WAAIA,MAAA,GAAG,QAAH,gBAAAA,IAAQ,SAAS,KAAK;AACtB,WAAG,IAAI,YAAY,EAAE;AAAA,MACzB;AACA,SAAGD,SAAQ,IAAI;AACf,UAAI,GAAG,OAAO,CAAC,GAAG,IAAI,SAAS,EAAE,GAAG;AAChC,WAAG,IAAI,SAAS,EAAE;AAAA,MACtB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA,EAEA,IAAI,SAAS,SAAS,OAAO,UAAU,CAAC,GAAG;AACvC,QAAI;AACJ,UAAM,EAAE,IAAI,IAAI;AAGhB,QAAI,CAAC,KAAK,SAAQ,2BAAK,UAAS;AAG5B,eAAS,MAAM,IAAI,SAAS,MAAM;AAGlC,UAAI,iCAAQ,QAAQ;AAChB,YAAI,gBAAgB,MAAM,QAAQ,MAAM;AAAA,MAC5C;AAAA,IACJ,OACK;AACD,eAAS,MAAM,IAAI,SAAS,QAAQ,OAAO;AAAA,IAC/C;AACA,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,OAAO,OAAO,SAAS,SAAS,OAAO;AACnC,QAAI;AACJ,UAAM,EAAE,IAAI,IAAI;AAGhB,QAAI,CAAC,KAAK,SAAQ,2BAAK,UAAS;AAO5B,YAAM,WAAW,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO,GAAG;AAAA,QAC3D,CAACE,UAAS,MAAM;AACZ,gBAAMC,SAAQ,aAAa,QAAQ,KAAK,QAAQ,CAAC,IAAI;AACrD,cAAIA,WAAU,UAAaA,WAAU,IAAI;AACrC,YAAAD,SAAQ,IAAI,GAAGC,MAAK;AAAA,UACxB;AACA,iBAAOD;AAAA,QACX;AAAA,QACA,oBAAI,IAAI;AAAA,MACZ;AAGA,eAAS,MAAM,OAAO,OAAO,OAAO;AAGpC,UAAI,iCAAQ,QAAQ;AAGhB,gBAAQ,KAAK,QAAQ,OAAO,CAAC,CAAC;AAG9B,YAAI,mBAAmB,MAAM,OAAO,QAAQ,SAAS,MAAM;AAAA,MAC/D;AAAA,IACJ,OACK;AACD,eAAS,MAAM,OAAO,OAAO,SAAS,MAAM;AAAA,IAChD;AACA,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,OAAO,cAAc,SAAS,OAAO,iBAAiB;AAClD,QAAI;AACJ,UAAM,EAAE,IAAI,IAAI;AAGhB,QAAI,CAAC,KAAK,SAAQ,2BAAK,UAAS;AAI5B,YAAM,0BAA0B,MAAM,QAAQ,YAAY,IAAI,eAAe,CAAC,YAAY,GAAG,IAAI,OAAK,KAAK,QAAQ,CAAC,CAAC,EAAE,OAAO,OAAK,CAAC,CAAC,CAAC;AACtI,YAAM,UAAU,uBAAuB;AAAA,QACnC,CAACA,UAAS,MAAM;AACZ,gBAAM,QAAQ,KAAK,QAAQ,CAAC;AAC5B,cAAI,UAAU,UAAa,UAAU,IAAI;AACrC,YAAAA,SAAQ,IAAI,GAAG,KAAK;AAAA,UACxB;AACA,iBAAOA;AAAA,QACX;AAAA,QACA,oBAAI,IAAI;AAAA,MACZ;AAEA,eAAS,MAAM,OAAO,cAAc,QAAQ,eAAe;AAG3D,UAAI,iCAAQ,QAAQ;AAChB,YAAI,mBAAmB,MAAM,QAAQ,SAAS,MAAM;AAAA,MACxD;AAAA,IACJ,OACK;AACD,eAAS,MAAM,OAAO,cAAc,QAAQ,eAAe;AAAA,IAC/D;AACA,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,UAAU,QAAQ;AACd,UAAM,EAAE,IAAI,IAAI;AAChB,QAAI;AACJ,QAAI,2BAAK,SAAS;AAId,YACI,EAAE,MAAM,UAAU,WAAW,IAAI,MACjC,cAAiC,WAAW,QAE5C,UAAiC,OAAO,SAAS,SAAS,MAAM,IAAI,WAAW,MAAM;AACzF,eAAS,MAAM,UAAU,MAAM;AAK/B,UAAI,eAAe,KAAK,UAAU,GAAG;AACjC,YAAI,iBAAiB,MAAM,SAAS,MAAM;AAAA,MAC9C;AAAA,IACJ,OACK;AACD,eAAS,MAAM,UAAU,MAAM;AAAA,IACnC;AACA,WAAO;AAAA,EACX;AAAA,EACA,uBAAuB;AACnB,UAAM,EAAE,KAAK,YAAY,IAAI;AAC7B,QAAI,eAAgB,OAChB,gBAAgB;AACpB,QAAI,EAAC,2CAAa,uBAAqB,2BAAK,UAAS;AACjD,qBAAe;AAEf,UAAI,IAAI,aAAa;AACjB,wBAAgB,IAAI,MAAM;AAAA,MAC9B;AACA,UAAI,KAAK,0BAA0B;AAC/B,YAAI,QAAQ;AAAA,MAChB,OACK;AACD,YAAI,iBAAiB;AAAA,MACzB;AAAA,IACJ;AACA,WAAO,EAAE,cAAc,cAAc;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAIA,eAAe,SAAS,aAAa,gBAAgB,QAAQ,YAAY;AACrE,UACI;AAAA,MACI;AAAA,MACA;AAAA,IACJ,IAAM,KAAK,qBAAqB,GAChC,MAAM,MAAM,eAAe,SAAS,aAAa,gBAAgB,QAAQ,UAAU;AACvF,SAAK,oBAAoB,cAAc,aAAa;AACpD,WAAO;AAAA,EACX;AAAA,EACA,oBAAoB,cAAc,eAAe;AAC7C,QAAI,cAAc;AACd,YAAM,EAAE,IAAI,IAAI;AAChB,UAAI,KAAK,0BAA0B;AAC/B,YAAI,OAAO;AAAA,MACf,OACK;AACD,YAAI,gBAAgB;AAAA,MACxB;AACA,UAAI,WAAW,aAAa;AAAA,IAChC;AAAA,EACJ;AACJ;;;AC5LA,IACI,uBAAyB;AAAA,EACrB,QAAS;AAAA,EACT,OAAS;AACb;AAJJ,IAKIE,0BAAyB;AAAA,EACrB,2BAA+B;AAAA,EAC/B,8BAA+B;AACnC;AARJ,IASIC,sBAAyB,CAAC,OAAO,YAAY;AAEzC,YAAU,WAAW;AACrB,MAAI,OAAO,YAAY,WAAW;AAC9B,cAAU;AAAA,MACN,2BAA+B;AAAA,MAC/B,8BAA+B;AAAA,IACnC;AAAA,EACJ;AACA,SAAO,WAAWD;AACtB;AA6LJ,IAAqB,QAArB,MAAqB,eAAc,KAAK;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AACJ,EAAE;AAAA;AAAA,EAEE,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EACA,WAAW,aAAa;AACpB,WAAO;AAAA,MACH,eAAwB,CAAC;AAAA,MACzB,uBAAwB,oBAAI,IAAI;AAAA,MAChC,aAAwB;AAAA,IAC5B;AAAA,EACJ;AAAA,EACA,WAAW,eAAe;AACtB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeH,IAAK;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,MA8BL,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASb,sBAAuB;AAAA,IAC3B;AAAA,EACJ;AAAA,EACA,WAAW,gBAAgB;AACvB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAwBH,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOT,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAoBX,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMP,MAAO;AAAA,MACP,iBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOlB,SAAU;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,MA2BV,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWb,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASZ,yBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAiB1B,YAAa;AAAA,IACjB;AAAA,EACJ;AAAA,EACA,WAAW,eAAe;AACtB,WAAO;AAAA,MACH,qBAAsB;AAAA,IAC1B;AAAA,EACJ;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,EAmFA,eAAe,MAAM;AACjB,UAAM,GAAG,IAAI;AAEb,QAAI,KAAK,WAAW;AAChB,aAAO,KAAK,UAAU;AAAA,IAC1B;AAAA,EACJ;AAAA,EACA,UAAU,SAAS,CAAC,GAAG;AACnB,UAAM,KAAK;AACX,WAAO,OAAO,IAAI;AAAA,MACd,OAAqB,IAAI,SAAS;AAAA,MAClC,SAAqB,IAAI,SAAS;AAAA,MAClC,UAAqB,IAAI,SAAS;AAAA,MAClC,YAAqB,CAAC;AAAA,MACtB,oBAAqB,CAAC;AAAA,MACtB,UAAqB,CAAC;AAAA,IAC1B,CAAC;AACD,QAAI,OAAO,SAAS;AAEhB,eAAS,aAAa,OAAO,EAAE,IAAK,OAAO,QAAQ,GAAG,MAAM;AAAA,IAGhE;AACA,UAAM,UAAU,MAAM;AACtB,OAAG,cAAc;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,OAAO,KAAK,QAAQ,WAAW,CAAC,GAAG,cAAc,MAAM;AAEnD,QAAI,UAAU,CAAC,OAAO,SAAS;AAE3B,UAAI,OAAO,WAAW,UAAU;AAC5B,iBAAS,OAAM,SAAS,MAAM;AAAA,MAClC,OAEK;AAED,YAAI,MAAM,QAAQ,MAAM,GAAG;AACvB,cAAI,aAAa;AACb,qBAAS,OAAO,IAAI,UAAQ,KAAK,UAAU,OAAO,YAAY,IAAI,CAAC;AAAA,UACvE;AACA,mBAAS,aAAa,OAAO,CAAC,GAAG,UAAU,EAAE,MAAO,OAAO,CAAC;AAAA,QAChE,OACK;AACD,mBAAS,aAAa,OAAO,CAAC,GAAG,UAAU,MAAM;AAAA,QACrD;AACA,iBAAS,IAAI,OAAM,MAAM;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,YAAY;AAvmBhB,QAAAE,KAAA;AAwmBQ,UACI,KAAa,MACb,aAAa,GAAG;AAEpB,WAAAA,MAAA,GAAG,QAAH,gBAAAA,IAAQ,gBAAR,wBAAAA,KAAsB;AACtB,aAAS,IAAI,WAAW,SAAS,GAAG,KAAK,KAAK,GAAG,KAAK;AAClD,YAAM,WAAW,CAAC;AAClB,UAAI,EAAC,2BAAK,cAAa;AACnB,YAAI,YAAY,EAAE;AAAA,MACtB;AAAA,IACJ;AACA,aAAG,aAAH,mBAAa;AACb,QAAI,CAAC,GAAG,WAAW;AACf,eAAG,aAAH,mBAAa;AAAA,IACjB;AAEA,UAAM,UAAU;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,aAAa;AACT,SAAK,cAAc;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,WAAW;AACP,QAAI,KAAK,aAAa,GAAG;AAErB,YAAM,EAAE,QAAS,QAAQ,IAAI,KAAK;AAClC,WAAK,QAAQ,WAAW;AAAA,QACpB,QAAS;AAAA,QACT,MAAS;AAAA,QACT;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EACA,IAAI,QAAQ,SAAS;AACjB,UAAM,KAAK;AACX,QAAI,mCAAS,cAAc;AACvB,SAAG,WAAW;AAAA,IAClB,OACK;AACD,SAAG,WAAW,IAAI,WAAW,OAAO;AAAA,IACxC;AACA,OAAG,SAAS,aAAa,GAAG;AAC5B,OAAG,SAAS,WAAW,GAAG;AAE1B,eAAW,KAAK,GAAG,UAAU;AACzB,QAAE,UAAU,EAAE;AAAA,IAClB;AACA,OAAG,SAAS,IAAI;AAAA,MACZ,QAAU;AAAA,MACV,SAAU;AAAA,IACd,CAAC;AAAA,EACL;AAAA,EACA,IAAI,UAAU;AACV,QAAI,CAAC,KAAK,UAAU;AAChB,WAAK,UAAU,CAAC;AAAA,IACpB;AACA,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,aAAa;AA7rBrB,QAAAA;AA8rBQ,UAAM,KAAK;AACX,UAAIA,MAAA,GAAG,gBAAH,gBAAAA,IAAgB,gBAAe,GAAG,QAAQ,YAAY;AACtD,UAAI,GAAG,QAAQ;AACX,cAAM,SAAS,GAAG,mBAAmB,GAAG,UAAU,QAAW,QAAW,EAAE,YAAa,KAAK,CAAC,EAAE;AAC/F,YAAI,GAAG,aAAa;AAChB,iBAAO,QAAQ,GAAG,QAAQ;AAAA,QAC9B;AACA,WAAG,cAAc;AAAA,MACrB,OACK;AACD,WAAG,cAAc,GAAG,YACd,GAAG,oBAAoB,MAAM,IAAI,IACjC,GAAG,QAAQ;AAAA,MACrB;AACA,SAAG,YAAY,aAAa,GAAG,QAAQ;AAAA,IAC3C;AACA,WAAO,GAAG;AAAA,EACd;AAAA;AAAA,EAEA,kBAAkB,kBAAkB;AAChC,UAAM,KAAK;AACX,QAAI,GAAG,MAAM;AACT,aAAO,mBAAmB,GAAG,aAAa,GAAG,SAAS;AAAA,IAC1D;AACA,WAAO,GAAG,YAAY,GAAG,oBAAoB,kBAAkB,KAAK,IAAK,mBAAmB,GAAG,QAAQ,YAAY,GAAG,QAAQ;AAAA,EAClI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,mBAAmB,QAAQ,YAAY;AACnC,UACI,KAAmB,MACnB,mBAAmB,OAAO,iBAAiB,CAAC;AAIhD,OAAG,MAAM,mBAAmB,QAAQ,QAAQ,EAAE,MAAM;AAEpD,QAAI,kBAAkB;AASlB,SAAG,QAAQ,gBAAgB,EAAE,OAAO,CAAC;AAErC,UAAI,GAAG,YAAY;AACf,WAAG,aAAa;AAAA,MACpB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA,EAEA,mBAAmB,SAAS;AACxB,UAAM,EAAE,SAAS,IAAI;AACrB,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,YAAM,SAAS,QAAQ,CAAC;AAExB,aAAO,QAAQ,eAAe,WAAW,IAAI,QAAQ,MAAM;AAC3D,aAAO,UAAU,IAAI;AAAA,IACzB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,EAAE,QAAS,SAAS,QAAQ,OAAO,SAAS,UAAU,UAAU,OAAAC,QAAO,MAAM,GAAG,GAAG;AAC5F,UACI,KAAe,MACf,cAAe,qBAAqB,MAAM,GAG1C,aAAe,gBAAe,+BAAO,SACrC,eAAe,gBAAe,mCAAS;AAC3C,QAAI,sBACA;AACJ,OAAG,SAAS;AACZ,QAAI,YAAY;AACZ,SAAG,mBAAmB,KAAK;AAAA,IAC/B;AACA,yCAAU,QAAQ,CAAC,CAAC,WAAW,SAAS,MAAM;AAC1C,gBAAU,YAAY,IAAI,IAAI;AAC9B,gBAAU,UAAU,EAAE;AAAA,IAC1B;AAGA,UAAM,aAAa,GAAG,SAAS;AAI/B,QAAI,CAAC,GAAG,QAAQ;AACZ,UAAI,YAAY;AACZ,mBAAW,UAAU,OAAO;AAExB,cAAI,GAAG,QAAQ,SAAS,MAAM,GAAG;AAC7B,eAAG,QAAQ,OAAO,MAAM;AAAA,UAC5B,WAGS,CAAC,GAAG,eAAe,CAAC,OAAO,UAAU;AAC1C,eAAG,MAAM,IAAI,MAAM;AAAA,UACvB;AAAA,QACJ;AAGA,+BAAuB,CAAC,GAAG,gBAAgB,GAAG,cAAc,GAAG;AAC/D,YAAI,sBAAsB;AACtB,aAAG,OAAO;AAAA,YACN,QAAS;AAAA,UACb,CAAC;AAAA,QACL;AAEA,+BAAuB,CAAC,GAAG,cAAc,GAAG,YAAY,GAAG;AAC3D,YAAI,sBAAsB;AACtB,aAAG,KAAK,MAAM,MAAM,OAAO,IAAI;AAAA,QACnC;AAAA,MACJ;AACA,UAAI,cAAc;AACd,mBAAW,UAAU,SAAS;AAE1B,iBAAO,YAAY;AACnB,iBAAO,YAAY,EAAE;AAErB,cAAI,GAAG,MAAM,SAAS,MAAM,GAAG;AAC3B,eAAG,MAAM,OAAO,MAAM;AAAA,UAC1B,WAKS,CAAC,OAAO,qBAAqB,CAAC,OAAO,cAAc,CAAC,OAAO,UAAU;AAC1E,eAAG,QAAQ,IAAI,MAAM;AAAA,UACzB;AAAA,QACJ;AACA,WAAG,SAAS,OAAO,OAAO;AAG1B,+BAAuB,CAAC,GAAG,gBAAgB,GAAG;AAC9C,YAAI,sBAAsB;AACtB,aAAG,OAAO;AAAA,YACN,QAAS;AAAA,UACb,CAAC;AAAA,QACL;AAAA,MACJ;AAAA,IACJ;AACA,YAAQ,QAAQ;AAAA,MACZ,KAAK;AAED,WAAG,gBAAgB,CAAC;AAEpB,WAAG,sBAAsB,WAAW;AACpC,WAAG,QAAQ,WAAW;AACtB,WAAG,QAAQ,UAAU;AAAA,UACjB,QAAS;AAAA,QACb,CAAC;AACD;AAAA,MACJ,KAAK;AACD,YAAI,YAAY;AACZ,aAAG,sBAAsB,OAAO,KAAK;AACrC,gBAGI,WAAW,MAAM,OAAO,CAAC,QAAQ,WAAW;AACxC,kBAAM,EAAE,cAAc,IAAI,OAAO;AACjC,gBAAI,gBAAgB,MAAM,gBAAgB;AAAQ,uBAAS;AAC3D,mBAAO;AAAA,UACX,GAAG,MAAM,CAAC,EAAE,KAAK,aAAa,GAC9B,QAAW,QAAQ,QAAQ,MAAM,CAAC,GAAG,CAAC,QAAQ,UAAU,GACxD,SAAW;AAAA,YACP,SAAU;AAAA,YACV;AAAA,UACJ;AAEJ,cAAI,WAAW,IAAI;AACf,mBAAO,WAAW;AAAA,UACtB;AACA,aAAG,QAAQ,OAAO,MAAM;AACxB,aAAG,QAAQ,UAAU,OAAO,OAAO,EAAE,QAAS,MAAM,GAAG,MAAM,CAAC;AAC9D,cAAI,sBAAsB;AACtB,eAAG,mBAAmB;AAAA,cAClB,QAAS;AAAA,cAAU,SAAU,GAAG;AAAA,cAAS;AAAA,cAAU,SAAU,GAAG,QAAQ;AAAA,YAC5E,CAAC;AAAA,UACL;AACA,cAAI,sBAAsB;AACtB,eAAG,QAAQ,QAAQ,EAAE,QAAS,QAAQ,SAAU,GAAG,SAAS,SAAU,GAAG,QAAQ,UAAU,CAAC;AAAA,UAChG;AAAA,QACJ;AACA,YAAI,QAAQ,QAAQ;AAChB,aAAG,sBAAsB,UAAU,OAAO;AAC1C,aAAG,QAAQ,UAAU;AAAA,YACjB,SAAU;AAAA,UACd,CAAC;AACD,aAAG,QAAQ,UAAU;AAAA,YACjB,QAAU;AAAA,YACV,SAAU;AAAA,UACd,CAAC;AAAA,QACL;AACA,YAAI,SAAS,QAAQ;AACjB,aAAG,sBAAsB,WAAW,QAAQ;AAC5C,aAAG,QAAQ,WAAW;AAAA,YAClB,SAAU;AAAA,YACV,KAAU,GAAG,QAAQ,WAAW,SAAS;AAAA,UAC7C,CAAC;AACD,aAAG,QAAQ,UAAU;AAAA,YACjB,QAAS;AAAA,YACT;AAAA,YACA,KAAS,GAAG,QAAQ,WAAW,SAAS;AAAA,UAC5C,CAAC;AAAA,QACL;AACA;AAAA,MACJ,KAAK;AAED,YAAI,GAAG,aAAa,GAAG,UAAU;AAC7B,aAAG,YAAY,IAAI;AAAA,QACvB;AACA;AAAA,MACJ,KAAK,QAAQ;AAET,cACI,QAAQ,KAAK,IAAI,MAAM,EAAE,GAGzB,MAAQ,KAAK,IAAI,GAAG,QAAQ,UAAU,SAAS,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC;AACxE,iBAAS,aAAa,GAAG,QAAQ,WAAW,IAAI,OAAO,KAAK,KAAK,KAAK;AAClE,qBAAW,CAAC,EAAE,QAAQ,eAAe,CAAC;AAAA,QAC1C;AAaA,WAAG,QAAQ,QAAQ;AAAA,UACf,QAAUA,OAAM,CAAC;AAAA,UACjB,SAAUA;AAAA,UACV;AAAA,UACA;AAAA,QACJ,CAAC;AAGD,YAAI,GAAG,YAAY;AACf,aAAG,cAAc;AAAA,QACrB;AACA,WAAG,QAAQ,UAAU;AAAA,UACjB;AAAA,UACA,QAAUA,OAAM,CAAC;AAAA,UACjB,SAAUA;AAAA,UACV;AAAA,UACA;AAAA,QACJ,CAAC;AACD;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,eAAe,QAAQ,MAAM;AAz8BjC,QAAAD;AA08BQ,UACI,KAAc,MACd,EAAE,QAAQ,IAAI,IACd,MAAc,QAAQ,WACtB,SAAc,QAAQ,GAAG,QAAQ,SAAS,CAAC;AAC/C,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACjC,UAAI,CAAC,EAAE,UAAU,EAAE;AAAA,IACvB;AAIA,QAAI,CAAC,GAAG,gBAAgB,GAAG,YAAY;AACnC,SAAG,OAAO;AAAA,QACN,QAAS;AAAA,MACb,CAAC;AAAA,IACL;AACA,QAAI,GAAG,YAAY;AACf,UAAI,GAAG,WAAW;AACd,gBAAQ,cAAc;AAAA;AAAA,UAElB,GAAG,GAAG,oBAAoB;AAAA,UAC1B,QAAS;AAAA,QACb,CAAC;AAAA,MACL;AAAA,IACJ,OACK;AACD,UAAI,GAAG,WAAW;AACd,WAAG,MAAM,MAAM,MAAM,OAAO,CAAC,QAAQ,IAAI;AAAA,MAC7C;AAEA,UAAI,QAAQ;AACR,WAAG,KAAK,MAAM,MAAM,OAAO,IAAI;AAAA,MACnC;AAAA,IACJ;AAEA,QAAI,CAAC,GAAG,WAAW,yBAAyB;AACxC,YAAM,EAAE,MAAM,IAAI;AAClB,UAAI,OAAO,KAAK,KAAK,EAAE,SAAS,QAAQ,OAAO,QAAQ;AAEnD,cAAM,aAAa,CAAC;AACpB,gBAAQ,OAAO,QAAQ,OAAK,MAAM,EAAE,EAAE,IAAI,OAAO,MAAM,EAAE,EAAE,IAAI,WAAW,KAAK,CAAC,CAAC;AACjF,cAAM,IAAI,MAAM,mBAAmB,WAAW,IAAI,OAAK,EAAE,EAAE,CAAC,EAAE;AAAA,MAClE;AAAA,IACJ;AACA,UAAM,QAAQ,EAAE,QAAQ,MAAM,SAAU,QAAQ,OAAO;AACvD,OAAG,sBAAsB,QAAQ,MAAM,OAAO;AAE9C,KAAAA,MAAA,GAAG,kBAAH,gBAAAA,IAAA;AACA,QAAI,CAAC,GAAG,qBAAqB;AACzB,SAAG,QAAQ,WAAW,KAAK;AAAA,IAC/B;AACA,OAAG,QAAQ,UAAU,KAAK;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,cAAc,QAAQ,OAAO,QAAQ,QAAQ,oBAAoB;AAC7D,UACI,KAAc,MACd,QAAc;AAAA,MACV;AAAA,MACA,SAAU,CAAC,MAAM;AAAA,MACjB,SAAU;AAAA;AAAA;AAAA,MAGV,OAAU,OAAO,YAAY;AAAA,MAC7B;AAAA,IACJ,GACA,cAAc,OAAO,aAAa,OAAO,WAAW,QAAQ,GAAG,2BAA2B,MAAM;AAEpG,OAAG,QAAQ,eAAe,QAAQ,MAAM;AAExC,QAAI,QAAQ,QAAQ;AAChB,YAAM,EAAE,UAAU,MAAM,IAAI,MAAM;AAClC,SAAG,yBAAyB,UAAU,KAAK;AAC3C,SAAG,iBAAiB,EAAE,QAAQ,UAAU,MAAM,CAAC;AAAA,IACnD;AACA,QAAI,CAAC,QAAQ;AACT,UAAI,QAAQ,QAAQ;AAChB,cAAM,EAAE,UAAU,MAAM,IAAI,MAAM;AAClC,WAAG,QAAQ,YAAY;AAAA,UACnB,OAAQ;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAAA,MACL;AACA,SAAG,eAAe,QAAQ,MAAM;AAChC,SAAG,QAAQ,UAAU,KAAK;AAC1B,SAAG,QAAQ,UAAU,OAAO,OAAO,EAAE,QAAS,SAAS,GAAG,KAAK,CAAC;AAAA,IACpE;AACA,QAAI,GAAG,cAAc,aAAa;AAC9B,SAAG,aAAa;AAAA,IACpB;AAAA,EACJ;AAAA,EACA,2BAA2B,QAAQ;AAC/B,UAAM,KAAW;AACjB,QAAI,aAAa;AAEjB,QAAI,OAAO,YAAY;AACnB,UAAI,CAAC,GAAG,SAAS,SAAS,MAAM,KAAK,CAAC,GAAG,MAAM,SAAS,MAAM,KAAK,OAAO,cAAc,EAAE,KAAK,CAAC,OAAO,QAAQ;AAK3G,YAAI,OAAO,WAAW;AAClB,aAAG,MAAM,IAAI,MAAM;AAAA,QACvB,OACK;AACD,aAAG,SAAS,IAAI,MAAM;AAAA,QAC1B;AACA,qBAAa;AAAA,MACjB;AAAA,IACJ,OACK;AACD,SAAG,SAAS,OAAO,MAAM;AAAA,IAC7B;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,QAAQ;AACR,UACI,KAAe,MACf,eAAe,CAAC,GAAG,QACnB,QAAe,GAAG,WAAW,GAAG,SAAS,CAAC;AAC9C,QAAI,cAAc;AACd,YAAM,mBAAmB,GAAG,QAAQ;AACpC,eAAS,QAAQ,QAAQ,GAAG,eAAe,GAAG,QAAQ,iBAAiB,QAAQ,SAAS;AACpF,iBAAmB,iBAAiB,KAAK;AACzC,cAAM,OAAO,EAAE,IAAI,EAAE,OAAO,cAAc,OAAO;AACjD,YAAI,CAAC,OAAO,cAAc;AACtB;AAAA,QACJ;AAAA,MACJ;AAGA,UAAI,GAAG,YAAY;AACf,iBAAS,QAAQ,GAAG,IAAI,GAAG,QAAQ,QAAQ,QAAQ,QAAQ,GAAG,SAAS;AACnE,gBAAM,SAAS,GAAG,QAAQ,QAAQ,KAAK;AACvC,cAAI,OAAO,MAAM,OAAO;AACpB,kBAAM,OAAO,EAAE,EAAE,kBAAkB;AAAA,UACvC,OACK;AAGD,kBAAM,OAAO,EAAE,IAAI,EAAE,OAAQ,IAAI,iBAAkB,OAAO,OAAO;AAAA,UACrE;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,iBAAiB,UAAU;AACvB,UAAM,EAAE,OAAO,IAAI;AACnB,SAAK,qBAAqB;AAC1B,QAAI,aAAa;AAEjB,QAAI,iCAAQ,QAAQ;AAAA,MAEhB,MAAM,mBAAmB,SAAS;AAAA,QAC9B,WAAW,SAAS;AAChB,iBAAO;AAAA,QACX;AAAA,MACJ;AACA,mBAAa;AAAA,IACjB,WAES,CAAC,KAAK,yBAAyB;AAAA,MAEpC,MAAM,mBAAmB,SAAS;AAAA,MAAC;AACnC,mBAAa;AAAA,IACjB;AAEA,eAAW,UAAU;AACrB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA,EAGA,IAAI,QAAQ,SAAS;AACjB,SAAK,KAAK;AAAA,EACd;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,SAAS,IAAI,OAAO;AAChB,WAAO,MAAM,SAAU,OAAO,QAAS,IAAI,KAAK;AAAA,EACpD;AAAA,EACA,SAAS,IAAI,OAAO;AAChB,UAAM,YAAY,OAAM,QAAQ,EAAE;AAClC,iBAAa,OAAM,mBAAmB,SAAS;AAC/C,UAAM,SAAS,IAAI,KAAK;AAAA,EAC5B;AAAA,EACA,iBAAiB;AACb,WAAO,OAAM,WAAW,QAAQ;AAAA,EACpC;AAAA,EACA,IAAI,OAAO;AACP,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,KAAK,MAAM;AACX,SAAK,QAAQ;AACb,QAAI,QAAQ,CAAC,KAAK,UAAU;AACxB,WAAK,WAAsB,KAAK,cAAc;AAC9C,WAAK,SAAS,aAAa;AAAA,IAC/B;AAAA,EACJ;AAAA;AAAA,EAEA,gBAAgB;AACZ,WAAO,CAAC;AAAA,EACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,SAAS,IAAI,YAAY;AAC5B,QAAI,cAAc,QAAO;AACrB,aAAO;AAAA,IACX;AACA,QAAI,KAAK,QAAQ,EAAE,GAAG;AAClB,aAAO,KAAK,QAAQ,EAAE;AAAA,IAC1B;AACA,QAAI,MAAM,QAAQ,EAAE,GAAG;AACnB,UAAI;AACJ,YAAM,YAAY,GAAG,IAAI,UAAQ;AAC7B,YAAI,gBAAgB,OAAO;AACvB,uBAAa,KAAK;AAAA,QACtB,WACS,OAAO,SAAS,UAAU;AAC/B,iBAAO;AAAA,YACH,MAAO;AAAA,UACX;AAAA,QACJ,OACK;AAAA,QACL;AACA,eAAO;AAAA,MACX,CAAC;AACD,UAAI,CAAC,YAAY;AAAA,QAEb,MAAM,mBAAmB,MAAM;AAAA,QAAC;AAChC,qBAAa;AAAA,MACjB;AACA,WAAK;AAAA,QACD,aAAc;AAAA,QACd,MAAc;AAAA,QACd,YAAc;AAAA,QACd,WAAc;AAAA;AAAA,MAClB;AACA,UAAI,CAAC,YAAY;AACb,qBAAa;AAAA,MACjB;AAAA,IACJ;AACA,QAAI,YAAY;AACZ,aAAO,IAAI,WAAW,EAAE;AAAA,IAC5B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,SAAS;AAChB,WAAO,OAAM;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,WAAW;AACX,WAAO,KAAK,cAAc,KAAK,YAAY,WAAW,KAAK;AAAA,EAC/D;AAAA,EACA,IAAI,SAAS,UAAU;AA3uC3B,QAAAA;AA4uCQ,UAAM,KAAU,MACZ,UAAU,GAAG;AAEjB,QAAI,aAAa,SAAS;AACtB;AAAA,IACJ;AACA,QAAI,SAAS;AACT,SAAG,MAAM,IAAI;AACb,SAAG,QAAQ,MAAM;AAAA,IACrB;AACA,QAAI,oBAAoB,OAAO;AAE3B,eAAS,aAAa,EAAE,EAAE,YAAY;AACtC,SAAG,YAAY;AAAA,IACnB,OACK;AACD,SAAG,YAAY,WAAW,IAAI,GAAG,WAAW,OAAO,OAAO;AAAA,QACtD,UAA0B;AAAA,QAC1B,CAAC,GAAG,WAAW,OAAO,GAAI,GAAG,GAAG,EAAE;AAAA,MACtC,GAAG,QAAQ,GAAG,IAAI,MAAM,IAAI;AAAA,IAChC;AACA,OAAG,QAAe;AAClB,aAAS,SAAS;AAClB,aAAS,UAAU,EAAE;AAIrB,UAAIA,MAAA,SAAS,aAAT,gBAAAA,IAAmB,WAAU,GAAG,aAAa;AAC7C,eAAS,YAAY;AACrB,SAAG,eAAe,UAAU,SAAS,YAAY,CAAC,GAAG,CAAC;AACtD,eAAS,YAAY;AAAA,IACzB;AACA,OAAG,QAAQ,cAAc,EAAE,SAAS,SAAS,CAAC;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,IAAI,KAAK,MAAM;AACX,SAAK,aAAa,IAAI;AAAA,EAC1B;AAAA;AAAA,EAEA,aAAa,MAAM;AACf,UACI,KAA6B,MAC7B,EAAE,SAAS,cAAc,IAAI,GAAG;AAEpC,QAAI,GAAG,sBAAqB,6BAAM,UAAS,KAAK,CAAC,OAAO,aAAa,KAAK,CAAC,CAAC,GAAG;AAE3E,SAAG,aAAa,GAAG,cAAc;AAAA,QAC7B,yBAA0B;AAAA,QAC1B,qBAA0B;AAAA,QAC1B,uBAA0B;AAAA,MAC9B;AACA,aAAgB,aAAa,MAAM,IAAI;AAAA,IAC3C;AAKA,OAAG,UAAU,SAAS;AAEtB,OAAG,2BAA2B;AAE9B,QAAI,QAAQ,CAAC,MAAM,QAAQ,IAAI,GAAG;AAC9B,aAAO,aAAa,4BAA4B,MAAM,OAAO;AAAA,IACjE;AAEA,OAAG,OAAO,CAAC,GAAG,cAAc,GAAG,QAAQ,QAAQ,GAAG,aAAY,6BAAM,KAAK,OAAK,EAAE,aAAa,GAAE;AAE/F,QAAI,SAAS,GAAG,cAAc,GAAG,eAAe;AAC5C,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,aAAK,CAAC,EAAE,mBAAmB;AAAA,MAC/B;AAAA,IACJ;AAEA,QAAI,CAAC,GAAG,kBAAkB,CAAC,GAAG,OAAO;AACjC,SAAG,QAAQ;AAEX,UAAI,GAAG,MAAM;AACT,WAAG,aAAa,IAAI;AAAA,MACxB,OACK;AACD,WAAG,SAAS,IAAI;AAAA,MACpB;AAEA,SAAG,MAAM,MAAM;AACf,SAAG,QAAQ,MAAM;AACjB,SAAG,SAAS,MAAM;AAAA,IACtB,OAEK;AACD,SAAG,YAAY,IAAI;AAAA,IACvB;AAAA,EACJ;AAAA,EACA,aAAa,MAAM;AACf,UACI,KAAK,MACL,OAAO,GAAG;AACd,QAAI,GAAG,mBAAmB;AACtB,aAAO,GAAG,gBAAgB,IAAI;AAAA,IAClC;AACA,SAAK,YAAY;AAEjB,OAAG,MAAM,IAAI;AAEb,SAAK,YAAY,IAAI;AACrB,OAAG,sBAAsB,WAAW,CAAC,IAAI,CAAC;AAC1C,SAAK,YAAY;AACjB,QAAI,KAAK,WAAW,GAAG;AACnB,YAAM,QAAQ,EAAE,QAAS,WAAW,MAAO,CAAC,GAAG,SAAU,CAAC,EAAE;AAC5D,SAAG,QAAQ,WAAW,KAAK;AAC3B,SAAG,QAAQ,UAAU,KAAK;AAAA,IAC9B,WAES,GAAG,YAAY;AACpB,SAAG,OAAO;AAAA,IACd;AAAA,EACJ;AAAA,EACA,SAAS,MAAM,SAAS,WAAW;AAr3CvC,QAAAA,KAAA;AAs3CQ,UACI,KAAyB,MACzB,EAAE,SAAS,UAAU,IAAI,IACzB,UAAyB,GAAG,WAAW,SAAS,GAAG,YACnD,iBAAyB,GAAG,KAAK,SAAO,IAAI,UAAU;AAC1D,QAAI,gBAAgB;AAChB,cAAQ,OAAO,OAAO,GAAG,QAAQ,QAAQ,cAAc,GAAG,CAAC;AAAA,IAC/D;AACA,QAAI,gBAAgB,GAAG;AAEvB,OAAG,wBAAwB,GAAG,QAAQ,MAAM;AAC5C,OAAG,SAAW;AACd,OAAG,WAAW,CAAC;AACf,QAAI,MAAM;AACN,YAAM,QAAQ,EAAE,KAAK,CAAC,aAAa;AACnC,UAAI,OAAO;AACP,WAAG,WAAW,iBAAiB,KAAK,CAAC,CAAC;AACtC,cACI,QAAU,KAAK,QACf,UAAU,IAAI,MAAM,KAAK;AAC7B,iBAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,gBAAM,aAAa,KAAK,CAAC;AACzB,cAAI,CAAC,aAAa,WAAW,OAAO,KAAK,MAAM;AAC3C,kBAAM,IAAI,MAAM,oCAAoC,CAAC,EAAE;AAAA,UAC3D;AACA,cAAI,mBAAiB,MAAAA,MAAA,WAAW,OAAO,MAAlB,gBAAAA,IAAqB,eAArB,wBAAAA,KAAkC,gBAAe;AAClE,oBAAQ,KAAK,+BAA+B,WAAW,OAAO,CAAC,mFAAmF;AAClJ,4BAAgB;AAAA,UACpB;AACA,kBAAQ,CAAC,IAAI,GAAG,cAAc,GAAG,aAAa,YAAY,IAAI,GAAG,IAAI;AACrE,kBAAQ,CAAC,EAAE,QAAQ,eAAe,CAAC;AAAA,QACvC;AAEA,WAAG,MAAM,IAAI;AAQb,gBAAQ,cAAc;AAAA,UAClB,QAAe;AAAA,UACf,cAAe;AAAA,UACf,QAAe;AAAA,QACnB,CAAC;AAAA,MACL,OACK;AAED,WAAG,MAAM,IAAI;AACb,gBAAQ,cAAc;AAAA,UAClB,QAAe,KAAK,MAAM;AAAA,UAC1B,cAAe;AAAA,UACf,QAAe;AAAA,QACnB,CAAC;AAAA,MACL;AACA,UAAI,kBAAkB,CAAC,QAAQ,OAAO,SAAS,cAAc,GAAG;AAC5D,gBAAQ,OAAO,KAAK,cAAc;AAAA,MACtC;AACA,SAAG,QAAQ;AACX,SAAG,eAAe,QAAQ,IAAI;AAAA,IAClC,OACK;AAED,SAAG,MAAM,IAAI;AACb,SAAG,QAAQ;AAAA,IACf;AACA,OAAG,sBAAsB;AAAA,EAC7B;AAAA,EACA,IAAI,OAAO;AACP,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAS,OAAO,KAAK,MAAM,MAAM;AAC7B,YAAQ,MAAM,KAAK,QAAQ,YAAY,KAAK,QAAQ,QAAQ,MAAM,OAAO,GAAG;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,aAAa,MAAM,aAAa,OAAO,UAAU,OAAO;AAEpD,WAAO,IAAI,KAAK,YAAY,MAAM,MAAM,MAAM,YAAY,OAAO,OAAO;AAAA,EAC5E;AAAA,EACA,cAAc,QAAQ,YAAY,OAAO;AACrC,WAAO;AAAA,EACX;AAAA,EACA,cAAc;AACV,SAAK,OAAO;AACZ,SAAK,KAAK;AAAA,EACd;AAAA,EACA,iBAAiB,EAAE,QAAQ,UAAU,MAAM,GAAG;AAC1C,UACI,KAA2B,MAC3B,QAA2B,GAAG,QAC9B,EAAE,YAAY,SAAS,IAAI;AAC/B,OAAG,QAAQ,kBAAkB;AAK7B,aAAS,QAAQ,IAAI;AAGrB,QAAI,SAAS,CAAC,MAAM,KAAK,GAAG;AACxB,YAAM,QAAQ,MAAM,QAAQ;AAC5B,aAAO,MAAM,QAAQ;AACrB,YAAM,KAAK,IAAI;AAAA,IACnB;AACA,OAAG,MAAM,SAAS,UAAU,KAAK;AACjC,OAAG,QAAQ,SAAS,UAAU,KAAK;AACnC,OAAG,SAAS,SAAS,UAAU,KAAK;AACpC,WAAO,WAAW,QAAQ;AAC1B,eAAW,KAAK,IAAI;AACpB,WAAO,QAAQ,GAAG,QAAQ,QAAQ,MAAM;AAAA,EAC5C;AAAA,EACA,eAAe,QAAQ,SAAS;AAC5B,UACI,KAAyB,MACzB,EAAE,WAAW,IAAY,SACzB,EAAE,mBAAmB,IAAI;AAC7B,QAAI,YAAY;AACZ,WAAK,QAAQ,kBAAkB;AAC/B,aAAO,mBAAmB,WAAW,QAAQ;AAC7C,yBAAmB,WAAW,KAAK,IAAI;AAAA,IAC3C;AAEA,QAAI,GAAG,yBAAyB,GAAG,YAAY;AAC3C,SAAG,OAAO;AAAA,IACd;AAAA,EACJ;AAAA,EACA,IAAI,aAAa;AACb,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,WAAW,SAAS;AACpB,QAAI,YAAY,MAAM;AAClB,WAAK,cAAc;AAAA,QACf,SAA0B;AAAA,QAC1B,yBAA0B;AAAA,QAC1B,uBAA0B;AAAA,QAC1B,qBAA0B;AAAA,MAC9B;AAAA,IACJ,OACK;AACD,WAAK,cAAc,UAAU,OAAO,OAAO,SAAS,EAAE,SAAU,KAAK,CAAC,IAAI,EAAE,SAAU,MAAM;AAAA,IAChG;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,SAAS,iBAAiB,MAAM;AAC5B,WAAO,iBAAiB,KAAK,QAAQ,KAAK;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,gBAAgB;AA7iDxB,QAAAA;AA8iDQ,WAAO,KAAK,QAAQ,gBAAcA,MAAA,KAAK,iBAAL,gBAAAA,IAAmB,UAAS;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,QAAQ;AACR,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,WAAW;AACX,WAAO,KAAK,SAAS,KAAK,SAAS,kBAAkB,KAAK,QAAQ;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,IAAI,UAAU;AACV,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,QAAQ;AACR,WAAO,KAAK,QAAQ,OAAO,CAAC;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,OAAO;AACP,WAAO,KAAK,QAAQ,OAAO,KAAK,QAAQ,OAAO,SAAS,CAAC;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAAO,MAAM,OAAO;AAEtB,WAAO,KAAK,QAAQ,MAAM,OAAO,GAAG;AAAA,EACxC;AAAA;AAAA;AAAA,EAGA,SAAS,QAAQ;AACb,UAAM,KAAK;AACX,QAAI,CAAC,GAAG,WAAW,yBAAyB;AAGxC,YAAM,cAAc,GAAG,UAAU,GAAG,WAAW,OAAO,EAAE;AACxD,UAAI,eAAe,gBAAgB,QAAQ;AACvC,cAAM,IAAI,MAAM,mBAAmB,OAAO,EAAE,EAAE;AAAA,MAClD;AAAA,IACJ;AACA,OAAG,WAAW,OAAO,EAAE,IAAoB;AAC3C,OAAG,mBAAmB,OAAO,UAAU,IAAI;AAAA,EAC/C;AAAA,EACA,WAAW,QAAQ;AACf,WAAO,KAAK,WAAW,OAAO,EAAE;AAChC,WAAO,KAAK,mBAAmB,OAAO,UAAU;AAAA,EACpD;AAAA,EACA,IAAI,oBAAoB;AACpB,WAAO,OAAO,OAAO,KAAK,UAAU;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,IAAI;AAMR,QAAI,yBAAI,SAAS;AACb,YAAM,SAAS;AAIf,UAAI,OAAO,YAAY,CAAC,KAAK,QAAQ,UAAU,SAAS,MAAM,GAAG;AAC7D,eAAO,OAAO,OAAO,KAAK,OAAK,KAAK,QAAQ,UAAU,SAAS,CAAC,CAAC;AAAA,MACrE;AACA,aAAO;AAAA,IACX;AAEA,WAAO,KAAK,WAAW,EAAE;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,YAAY;AACpB,UAAM,SAAS,KAAK,QAAQ,UAAU;AACtC,WAAO,UAAU,KAAK,QAAQ,SAAS,MAAM,KAAK;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAgB,YAAY;AACxB,WAAO,KAAK,mBAAmB,UAAU;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,YAAY;AACjB,QAAI,KAAK,QAAQ;AACb,aAAO,KAAK,WAAW,MAAM,KAAK,UAAU,CAAC,KAAK;AAAA,IACtD;AACA,WAAO,KAAK,QAAQ,UAAU,IAAI;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,QAAQ,YAAY,iBAAiB,OAAO,8BAA8B,OAAO;AAtsDrF,QAAAA;AAwsDQ,SAAI,yCAAY,YAAW,GAACA,MAAA,WAAW,WAAX,gBAAAA,IAAmB,SAAS,KAAK,UAAU,QAAO;AAG1E,YAAM,eAAe,WAAW,OAAO,KAAK,OAAK,KAAK,QAAQ,UAAU,SAAS,CAAC,CAAC;AACnF,UAAI,cAAc;AACd,eAAO,KAAK,QAAQ,cAAc,cAAc;AAAA,MACpD;AACA,aAAO;AAAA,IACX;AAEA,QAAI,KAAK,QAAQ;AAEb,cAAQ,8BAA8B,KAAK,SAAS,cAAc,KAAK,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,UAAU,CAAC;AAAA,IAC3H;AACA,UAAM,KAAK,MAAM,KAAK,UAAU;AAChC,QAAI,MAAM,MAAM;AACZ,aAAO;AAAA,IACX;AACA,UAAM,QAAQ,KAAK,MAAM,EAAE;AAC3B,WAAO,QAAQ,MAAM,iBAAiB,iBAAiB,OAAO,IAAI;AAAA,EACtE;AAAA,EACA,WAAW,YAAY;AACnB,QAAI,KAAK,QAAQ;AACb,aAAO,KAAK,WAAW,QAAQ,KAAK,QAAQ,UAAU,CAAC;AAAA,IAC3D,OACK;AACD,aAAO,KAAK,QAAQ,QAAQ,YAAY,IAAI;AAAA,IAChD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,kBAAkB,OAAO,4BAA4B,OAAO;AACxD,UACI,KAAS,MACT,SAAS,CAAC,GACV,OAAS,CAAC;AACd,QAAI;AACJ,OAAG,QAAQ,OAAK;AACZ,UAAI,CAAC,EAAE,gBAAgB,CAAC,EAAE,QAAQ;AAC9B,gBAAuB,EAAE,SAAS,KAAK;AACvC,cAAM,iBAAiB,iBAAiB,OAAO,MAAM,QAAQ,IAAI;AACjE,YAAI,CAAC,KAAK,cAAc,GAAG;AACvB,iBAAO,KAAK,KAAK;AACjB,eAAK,cAAc,IAAI;AAAA,QAC3B;AAAA,MACJ;AAAA,IACJ,GAAG,IAAI,EAAE,8BAA+B,MAAM,0BAA0B,CAAC;AACzE,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,OAAO,OAAO;AACxB,QAAI,QAAQ;AACZ,SAAK,QAAQ,OAAK;AACd,UAAI,aAAa,QAAQ,EAAE,SAAS,KAAK,GAAG,KAAK;AAAG;AAAA,IACxD,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,IAAI,KAAK,MAAM;AACX,QAAI,OAAO,SAAS,UAAU;AAC1B,aAAO,aAAa,cAAc,IAAI;AAAA,IAC1C;AACA,SAAK,OAAO;AAAA,EAChB;AAAA,EACA,IAAI,OAAO;AACP,WAAO,aAAa,kBAAkB,IAAI;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,gBAAgB;AAChB,WAAO,aAAa,kBAAkB,MAAM,MAAM,CAAC;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,SAAS;AACL,UACI,KAA8B,MAC9B,EAAE,aAAa,WAAW,IAAI,GAAG,WAAW,mBAAmB,UAAU;AAG7E,YAAQ,GAAG,SAAS,GAAG,SAAS,sBAAsB,GAAG,SAAS,YAAY,CAAC,IAAI,GAAG,YAAY,IAAI,YAAU;AAC5G,YAAM,OAAO,OAAO,OAAO;AAC3B,UAAI,GAAG,QAAQ,OAAO,YAAY,aAAa;AAC3C,aAAK,UAAU,IAAI,OAAO,WAAW,EAAE;AAAA,MAC3C;AACA,aAAO;AAAA,IACX,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,yBAAyB,SAAS;AAC9B,UAAM,yBAAyB,OAAO;AACtC,WAAO,QAAQ;AAAA,EACnB;AAAA;AAAA,EAEA,cAAc,SAAS;AAl2D3B,QAAAA;AAm2DQ,UAAM,OAAO,CAAC;AACd,QAAI,KAAK,MAAM;AACX,OAAAA,MAAA,KAAK,SAAS,aAAd,gBAAAA,IAAwB,QAAQ,OAAK,KAAK,KAAK,EAAE,iBAAiB,OAAO,CAAC;AAAA,IAC9E,OACK;AACD,WAAK,QAAQ,OAAK,KAAK,KAAK,EAAE,iBAAiB,OAAO,CAAC,CAAC;AAAA,IAC5D;AACA,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,iBAAiB,SAAS;AA72D9B,QAAAA;AA82DQ,UACI,SAAY,MAAM,iBAAiB,OAAO,GAC1C,EAAE,MAAM,IAAI;AAChB,QAAI,QAAQ;AAER,UAAI,OAAO,MAAM;AACb,eAAO,OAAO,KAAK,cAAc,OAAO;AAAA,MAC5C;AAEA,aAAO,OAAO;AACd,aAAO,OAAO;AACd,aAAO,OAAO;AAEd,YAAIA,MAAA,OAAO,eAAP,gBAAAA,IAAmB,MAAM,UAAU,OAAO,WAAW,MAAM,UAAU,SAAS,QAAO,KAAK,YAAY,cAAc,YAAY;AAChI,eAAO,OAAO;AAAA,MAClB;AAEA,UAAI,CAAC,KAAK,MAAM;AACZ,eAAO,OAAO;AAAA,MAClB;AAEA,UAAI,OAAO;AACP,eAAO,OAAO,QAAQ,KAAK;AAAA,MAC/B;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,QAAQE,KAAI,UAAU,MAAM,SAAS;AACjC,UACI,KAAW,MACX,WAAW,CAAC,GAAG,MAAM;AACjB,UAAI,CAAC,EAAE,UAAU,CAAC,EAAE,cAAc;AAC9B,eAAOA,IAAG,KAAK,SAAS,GAAG,CAAC;AAAA,MAChC;AAAA,IACJ;AACJ,cAAUH,oBAAmB,IAAI,OAAO;AACxC,QAAI,GAAG,QAAQ;AAEX,UAAI,GAAG,WAAW;AACd,kBAAU;AAAA,UACN,GAAG;AAAA,UACH,UAAW,GAAG;AAAA,QAClB;AAAA,MACJ;AACA,SAAG,SAAS,cAAc,UAAU,OAAO,OAAO;AAAA,IACtD,OACK;AAED,YAAM,UAAU,QAAQ,4BAA4B,GAAG,QAAQ,YAAY,GAAG,QAAQ;AAEtF,UAAI,GAAG,aAAa,QAAQ,8BAA8B;AACtD,iBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,gBACI,SAAgB,QAAQ,CAAC,GACzB,gBAAgB,QAAQ,4BAA4B,OAAO,0BAA0B,OAAO;AAChG,cAAI,iBAAiB,OAAO,KAAK,cAAc,MAAM;AACjD,qBAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC3C,oBAAM,MAAM,cAAc,CAAC;AAC3B,kBAAI,SAAS,KAAK,CAAC,MAAM,OAAO;AAC5B;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ,WACS,SAAS,QAAQ,CAAC,MAAM,OAAO;AACpC;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ,OACK;AACD,iBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,cAAI,SAAS,QAAQ,CAAC,GAAG,CAAC,MAAM,OAAO;AACnC;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAIG,KAAI,UAAU,MAAM;AACpB,WAAO,KAAK,QAAQ,OAAO,IAAIA,KAAI,OAAO;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,QAAQA,KAAI,UAAU,MAAM;AACxB,WAAO,KAAK,QAAQ,OAAO,QAAQA,KAAI,OAAO;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAMA,KAAI,UAAU,MAAM,eAAe;AACrC,WAAO,KAAK,QAAQ,gBAAgB,cAAc,QAAQ,EAAE,MAAMA,KAAI,OAAO;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAOA,KAAI,eAAe,CAAC,GAAG,UAAU,MAAM;AAC1C,QAAI,YAAY,MAAM;AAClB,MAAAA,MAAKA,IAAG,KAAK,OAAO;AAAA,IACxB;AACA,WAAO,KAAK,QAAQ,OAAO,OAAOA,KAAI,cAAc,OAAO;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,OAAO,QAAQ,IAAI;AAChB,WAAO,KAAK,QAAQ,OAAO,OAAO,QAAQ,EAAE;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,SAASA,KAAI,UAAU,KAAK,UAAU,cAAc,YAAY,KAAK,UAAU,SAAS;AACpF,UAAM,KAAK;AACX,cAAUH,oBAAmB,IAAI,OAAO;AACxC,QAAI,GAAG,QAAQ;AAEX,UAAI,OAAO,YAAY,WAAW;AAC9B,sBAAc;AACd,kBAAc,GAAG;AAAA,MACrB;AACA,UAAI,GAAG,WAAW;AACd,cAAM,WAAWG;AACjB,QAAAA,MAAK,UAAQ;AACT,cAAI,GAAG,gBAAgB,IAAI,GAAG;AAC1B,qBAAS,IAAI;AAAA,UACjB;AAAA,QACJ;AAAA,MACJ;AACA,cAAQ,SAASA,KAAI,aAAa,OAAO;AAAA,IAC7C,OACK;AACD,SAAG,QAAQ,SAAO,IAAI,SAASA,KAAI,OAAO,OAAO,GAAG,IAAI,OAAO;AAAA,IACnE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,cAAcA,KAAI,UAAU,KAAK,UAAU,cAAc,YAAY,KAAK,UAAU,SAAS;AACzF,UAAM,KAAK;AACX,cAAUH,oBAAmB,IAAI,OAAO;AACxC,QAAI,GAAG,QAAQ;AAEX,UAAI,OAAO,YAAY,WAAW;AAC9B,sBAAc;AACd,kBAAc,GAAG;AAAA,MACrB;AACA,UAAI,GAAG,WAAW;AACd,cAAM,WAAWG;AACjB,QAAAA,MAAK,UAAQ;AACT,cAAI,GAAG,gBAAgB,IAAI,GAAG;AAC1B,qBAAS,IAAI;AAAA,UACjB;AAAA,QACJ;AAAA,MACJ;AACA,cAAQ,cAAcA,KAAI,aAAa,OAAO;AAAA,IAClD,OACK;AACD,iBAAW,UAAU,GAAG,SAAS;AAC7B,YAAI,OAAO,SAASA,KAAI,OAAO,OAAO,MAAM,OAAO;AAC/C;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,QAAQ,YAAY,OAAO,OAAO,kBAAkB,OAAO;AACvD,UACI,KAAU,MACV,UAAU,GAAG,QAAQ;AACzB,QAAI,MAAU,GAAG,QAAQ,UAAU;AACnC,QAAI,OAAO,QAAQ,SAAS,GAAG;AAC3B,UAAI,MAAM;AACN,cAAM;AAAA,MACV,OACK;AACD,eAAO;AAAA,MACX;AAAA,IACJ;AACA,UAAM,SAAS,QAAQ,MAAM,CAAC;AAE9B,QAAI,mBAAmB,UAAU,OAAO,cAAc;AAClD,aAAO,GAAG,QAAQ,QAAQ,MAAM,CAAC,GAAG,MAAM,IAAI;AAAA,IAClD;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,QAAQ,YAAY,OAAO,OAAO,kBAAkB,OAAO;AACvD,UACI,KAAU,MACV,UAAU,GAAG,QAAQ;AACzB,QAAI,MAAU,GAAG,QAAQ,UAAU;AACnC,QAAI,QAAQ,GAAG;AACX,UAAI,MAAM;AACN,cAAM,QAAQ;AAAA,MAClB,OACK;AACD,eAAO;AAAA,MACX;AAAA,IACJ;AACA,UAAM,SAAS,QAAQ,MAAM,CAAC;AAE9B,QAAI,mBAAmB,UAAU,OAAO,gBAAgB,MAAM,GAAG;AAC7D,aAAO,GAAG,QAAQ,QAAQ,MAAM,CAAC,GAAG,MAAM,IAAI;AAAA,IAClD;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,YAAY,YAAY,OAAO,MAAM,OAAO,OAAO,kBAAkB,OAAO;AACxE,WAAO,OAAO,KAAK,QAAQ,YAAY,MAAM,eAAe,IAAI,KAAK,QAAQ,YAAY,MAAM,eAAe;AAAA,EAClH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAY,YAAY,OAAO,OAAO;AAClC,UACI,KAAU,MACV,UAAU,GAAG,QACb,SAAU,GAAG,QAAQ,UAAU;AACnC,QAAI,MAAU,QAAQ,QAAQ,MAAM;AACpC,QAAI,OAAO,QAAQ,SAAS,GAAG;AAC3B,UAAI,MAAM;AACN,cAAM;AAAA,MACV,OACK;AACD,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO,QAAQ,MAAM,CAAC;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAY,YAAY,OAAO,OAAO;AAClC,UACI,KAAU,MACV,UAAU,GAAG,QACb,SAAU,GAAG,QAAQ,UAAU;AACnC,QAAI,MAAU,QAAQ,QAAQ,MAAM;AACpC,QAAI,QAAQ,GAAG;AACX,UAAI,MAAM;AACN,cAAM,QAAQ;AAAA,MAClB,OACK;AACD,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO,QAAQ,MAAM,CAAC;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,gBAAgB,YAAY,OAAO,MAAM,OAAO,OAAO;AACnD,WAAO,OAAO,KAAK,YAAY,YAAY,IAAI,IAAI,KAAK,YAAY,YAAY,IAAI;AAAA,EACxF;AAAA;AAEJ;AACA,MAAM,UAAU;AAChB,MAAM,SAAS;;;ACjsEf,IACI,oBAAoB,CAAC,YAAY,UAAU;AACvC,MAAI,MAAM,QAAQ,MAAM,CAAC,CAAC,GAAG;AACzB,UAAM,CAAC,EAAE,QAAQ,WAAS,WAAW,KAAK,mBAAmB,MAAM,CAAC,CAAC,IAAI,MAAM,mBAAmB,KAAK,CAAC,CAAC;AAAA,EAC7G,OACK;AACD,eAAW,KAAK,mBAAmB,MAAM,CAAC,CAAC,IAAI,MAAM,mBAAmB,MAAM,CAAC,CAAC,CAAC;AAAA,EACrF;AACA,SAAO;AACX;AATJ,IAUIC,oBAAoB,QAAQ,QAAQ;AAVxC,IAWI,eAAe,SAAO;AAClB,SAAO,OAAO,GAAG,EAAE,SAAS,GAAG,GAAG;AACtC;AAbJ,IAcI,eAAe,CAAAC,UAAQ;AACnB,SAAO,GAAIA,MAAK,YAAY,CAAE,IAAK,aAAaA,MAAK,SAAS,IAAI,CAAC,CAAE,IAAK,aAAaA,MAAK,QAAQ,CAAC,CAAE,IAAK,aAAaA,MAAK,SAAS,CAAC,CAAE,IAAK,aAAaA,MAAK,WAAW,CAAC,CAAE,IAAK,aAAaA,MAAK,WAAW,CAAC,CAAE,IAAKA,MAAK,gBAAgB,CAAE;AACpP;AA0HJ,IAAqB,YAArB,cAAuC,MAAM;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,EAmHzC,WAAW,gBAAgB;AACvB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAoBH,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAoBV,cAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOf,gBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQjB,gBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASjB,mBAAoB;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,MAgCpB,yBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgB1B,sBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAmBvB,uBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUxB,iBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASlB,eAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUhB,eAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOhB,eAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOhB,oBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQrB,mBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOpB,mBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAoBpB,aAAc;AAAA,QACV,QAAS;AAAA,QACT,MAAS;AAAA,QACT,QAAS;AAAA,QACT,QAAS;AAAA,MACb;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA,EA4BA,eAAe,UAAU;AACrB,UAAM,KAAK;AACX,QAAI,CAAC,KAAK,eAAe;AACrB,YAAM,cAAe,GAAG,cAAc,GAAG,cACnC,KAAK;AAAA,QACH,GAAG;AAAA,QACH,KAAK,OAAO,GAAG,WAAW,WAAW,KAAK,QAAQ;AAAA,MACtD,IACE;AACN,UAAI,UAAU;AACV,WAAG,SAAS,WAAW;AAAA,MAC3B;AAAA,IACJ;AAAA,EACJ;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,EA4IA,eAAe,QAAQ;AACnB,UAAM,eAAe,MAAM;AAC3B,QAAI,KAAK,UAAU;AACf,WAAK,KAAK,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAC9B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,IAAI,YAAY;AACZ,WAAO,KAAK,aAAa,IAAI,KAAK,qBAAqB,IAAI;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,eAAe;AAtrBvB,QAAAC;AAurBQ,WAAO,SAAQA,MAAA,KAAK,kBAAL,OAAAA,MAAsB,KAAK,wBAAwB;AAAA,EACtE;AAAA,EACA,IAAI,cAAc,eAAe;AAC7B,QAAI,KAAK,MAAM;AACX,YAAM,IAAI,MAAM,4CAA4C;AAAA,IAChE;AACA,QAAI,KAAK,oBAAoB;AACzB,YAAM,IAAI,MAAM,qEAAqE;AAAA,IACzF;AACA,SAAK,iBAAiB;AAAA,EAC1B;AAAA,EACA,IAAI,gBAAgB;AAChB,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,mBAAmB,oBAAoB;AACvC,QAAI,KAAK,MAAM;AACX,YAAM,IAAI,MAAM,4CAA4C;AAAA,IAChE;AACA,QAAI,KAAK,eAAe;AACpB,YAAM,IAAI,MAAM,qEAAqE;AAAA,IACzF;AACA,SAAK,sBAAsB;AAAA,EAC/B;AAAA,EACA,IAAI,qBAAqB;AACrB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,UAAU;AACV,WAAO,KAAK,iBAAiB,KAAK;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,WAAW;AACX,WAAQ,iBAAiB,OAAQ,KAAK,cAAc,MAAM;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,WAAW;AACX,QAAI,KAAK,SAAS;AACd,aAAO,KAAK,OAAO,KAAK,WAAW,KAAK,WAAW,KAAK,KAAK,QAAQ;AAAA,IACzE;AAAA,EACJ;AAAA,EACA,iBAAiB,QAAQ,cAAc;AACnC,UACI,iBAAiB,IAAI,SAAS,GAAG,GACjC,cAAiB,OAAO,QAAQ,OAAO,OAAO,CAAC,GAAG,GAAG,YAAY,CAAC,EAAE,OAAO,mBAAmB,CAAC,CAAC,EAAE,KAAK,GAAG;AAC9G,WAAO,eAAe,iBAAiB,MAAM,OAAO,cAAc;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,YAAY,QAAQ;AACtB,UAAM,KAAK;AACX,QAAI,GAAG,cAAc,CAAC,GAAG,qBAAqB;AAC1C,SAAG,sBAAsB;AACzB,YAAM,SAAmB,MAAM,GAAG,aAAa,CAAC,GAAG,IAAI,WAAS;AAC5D,WAAG,OAAO,MAAM;AAChB,WAAG,iBAAiB,MAAM;AAAA,MAC9B,CAAC;AACD,SAAG,sBAAsB;AACzB,aAAO;AAAA,IACX,OACK;AACD,YAAM,YAAY,MAAM;AAAA,IAC5B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,cAAc,QAAQ;AA1xBhC,QAAAA;AA2xBQ,UACI,KAAK;AAGT,QAAI,GAAG,cAAc;AACjB,OAAAA,MAAA,GAAG,mBAAH,gBAAAA,IAAmB;AAEnB,SAAG,sBAAsB;AACzB,YACI,WAAc,GAAG,OACjB,EAAE,QAAQ,IAAI;AAElB,SAAG,cAAsB;AACzB,YAAM,SAAmB,MAAM,GAAG,aAAa,CAAC,GAAG,IAAI,WAAS;AAC5D,WAAG,OAAO,MAAM;AAChB,gBAAU,SACJ,OACA;AAAA,UACE,QAAU;AAAA,UACV;AAAA,UACA;AAAA,UACA,SAAU,GAAG,QAAQ;AAAA,QACzB;AACJ,WAAG,mBAAmB,KAAK;AAC3B,WAAG,QAAQ,WAAW,KAAK;AAAA,MAC/B,CAAC;AACD,SAAG,sBAAsB;AACzB,aAAO;AAAA,IACX,OACK;AACD,YAAM,cAAc,MAAM;AAAA,IAC9B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,mBAAmB,SAAS;AACxB,UACI,SAAS,CAAC;AACd,eAAW,EAAE,UAAU,UAAU,OAAO,cAAc,KAAK,SAAS;AAChE,aAAO,KAAK;AAAA,QACR,OAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,IACL;AACA,WAAO,KAAK,UAAU,QAAQ,SAAS,KAAK,OAAO;AAC/C,aAAO,QAAQ,KACT,QACA,KAAK,GAAG,aAAa,OAAO,aAAa,KAAK,GAAG,CAAC,IAAI;AAAA,IAChE,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,mBAAmB,SAAS;AACxB,WAAO,KAAK,UAAU,QAAQ,OAAO,YAAU,CAAC,OAAO,MAAM,EAAE,IAAI,YAAU,MAAM,CAAC;AAAA,EACxF;AAAA,EACA,eAAe;AACX,UAAM,EAAE,QAAQ,IAAI;AACpB,QAAI,KAAK,iBAAiB,KAAK,QAAQ,OAAO;AAC1C,YAAM,MAAM,QAAQ,SAAS,GAAG,IAAI,UAAW,UAAU;AACzD,aAAO,MAAM,KAAK,QAAQ,MAAM;AAAA,IACpC;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,QAAQ,WAAW,WAAWC,SAAQ,GAAG;AAElD,aAAS,aAAa,OAAO,CAAC,GAAG,KAAK,QAAQ,MAAM;AACpD,UACI,KAAQ,MACR,MAAQ,GAAG,aAAa,GACxB,QAAQ,EAAE,QAAS,SAAS,WAAW,QAAQ,IAAI;AACvD,QAAI,CAAC,KAAK;AACN,YAAM,IAAI,MAAM,uBAAuB;AAAA,IAC3C;AACA,QAAI,GAAG,QAAQ,eAAe,WAAW,KAAK,MAAM,OAAO;AACvD,YAAM;AAAA,IACV;AACA,OAAG,WAAW,CAAC,KAAK,OAAO,QAAQ,WAAW,SAAS;AACvD,QAAIA,WAAU,OAAO;AACjB,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW,GAAG,gBAAgB,SAAS,MAAM,CAAC;AAAA,IAC/E;AACA,WAAO,GAAG,uBAAuB,GAAG,qBAAqB,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtF,SAAG,WAAW;AAAA,QACV,OAAAA;AAAA,QACA,IAAoB;AAAA,QACpB,MAAoB,CAAC,SAAS,MAAM;AAAA,QACpC,mBAAoB;AAAA,MACxB,CAAC;AAAA,IACL,CAAC;AAAA,EACL;AAAA;AAAA;AAAA,EAGA,MAAM,gBAAgB,SAAS,QAAQ;AACnC,UACI,KAAK,MACL;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAK,GAAG;AAEZ,OAAG,qBAAqB;AACxB,QAAI,KAAK;AACL,SAAG,aAAa;AAIhB,SAAG,QAAQ,OAAO,SAAS,SAAS,KAAK;AACzC,SAAG,QAAQ,iBAAiB,KAAK;AAEjC,UAAI,GAAG,mBAAmB,GAAG,YAAY;AACrC,eAAO,GAAG,eAAe,IAAI,GAAG,mBAAmB,GAAG,QAAQ,MAAM;AAAA,MACxE;AAGA,UAAI,GAAG,cAAc,GAAG,UAAU;AAC9B,eAAO,GAAG,aAAa,IAAI,GAAG,mBAAmB,GAAG,WAAW,GAAG,SAAS,OAAO,GAAG,OAAO,IAAI,GAAG,OAAO;AAAA,MAC9G;AAGA,UAAI,GAAG,SAAS;AACZ,YAAI,EAAG,GAAG,iBAAiB,UAAY,GAAG,sBAAsB,SAAU;AACtE,gBACI,OAAO,KAAK,IAAI,GAAG,eAAe,GAAG,GAAG,WAAW,GAAG,WAAW,QAAQ;AAC7E,cAAI,GAAG,eAAe;AAClB,mBAAO,GAAG,aAAa,IAAI;AAAA,UAC/B,OACK;AACD,mBAAO,GAAG,kBAAkB,KAAK,OAAO,KAAK,GAAG;AAAA,UACpD;AAAA,QACJ;AACA,eAAO,GAAG,iBAAiB,IAAI,GAAG;AAAA,MACtC;AACA,YAAM,UAAU,EAAE,SAAU,GAAG,SAAS,WAAY,KAAK;AACzD,UAAI,GAAG,mBAAmB;AACtB,gBAAQ,SAAS,GAAG,YAAY;AAEhC,YAAI,MAAM,MAAM;AACZ,kBAAQ,OAAO,KAAK,UAAU,MAAM,IAAI;AAAA,QAC5C;AAAA,MACJ;AACA,UAAI;AACA,cACI,UAAc,GAAG,iBAAiB,WAAW,IAAI,MAAM,MAAM,GAAG,iBAAiB,MAAM,KAAK,MAAM,GAAG,aAAa,OAAO,SAAS,GAAG,YAAY,CAAC,GAClJ,WAAc,MAAM,SACpB,OAAc,SAAS,YACvBC,WAAc,MAAM,QAAQ,IAAI,GAChCC,WAAcD,YAAY,QAAS,aAAa,QAAQ,MAAM,GAAG,uBAAuB,MAAM,OAC9F,cAAcA,WAAU,OAAO,aAAa,QAAQ,MAAM,GAAG,qBAAqB;AACtF,YAAI,GAAG,aAAa;AAChB;AAAA,QACJ;AACA,WAAG,iBAAiB;AACpB,WAAG,aAAc;AACjB,cAAM,WAAW;AACjB,cAAM,OAAW;AACjB,YAAIC,UAAS;AACT,cAAI,eAAe,MAAM;AACrB,eAAG,cAAc,SAAS,aAAa,EAAE;AAAA,UAC7C;AAGA,cAAI,GAAG,SAAS;AACZ,gBAAI,GAAG,eAAe,GAAG;AACrB,oBAAM,gBAAgB,GAAG,gBAAgB,OAAO,GAAG,aAAa,IAAI,OAAO,GAAG,kBAAkB,IAAI,GAAG,WAAW;AAClH,iBAAG,cAAmB,KAAK,IAAI,eAAe,GAAG,QAAQ;AAAA,YAC7D,OACK;AACD,oBAAM,IAAI,MAAM,0EAA0E;AAAA,YAC9F;AAAA,UACJ;AACA,gBAAM,OAAOD,WAAU,OAAO,aAAa,QAAQ,MAAM,GAAG,oBAAoB;AAChF,gBAAM,UAAU,KAAK;AACrB,WAAC,GAAG,eAAe,GAAG,QAAQ,SAAS,WAAW,KAAK;AACvD,kBAAQ,KAAK;AAAA,QACjB,OACK;AACD,iBAAO,OAAO,OAAO;AAAA,YACjB,WAAgB;AAAA,YAChB,eAAgB;AAAA,YAChB,OAAgB,6BAAM;AAAA,UAC1B,CAAC;AACD,WAAC,GAAG,eAAe,GAAG,QAAQ,aAAa,KAAK;AAChD,iBAAO,KAAK;AAAA,QAChB;AAEA,SAAC,GAAG,eAAe,GAAG,QAAQ,gBAAgB,KAAK;AAAA,MACvD,SACO,iBAAiB;AACpB,WAAG,aAAa;AAChB,cAAM,YAAY;AAClB,YAAI,2BAA2B,UAAU;AACrC,gBAAM,gBAAgB,gBAAgB,KAAK,WAAW;AACtD,gBAAM,WAAgB;AACtB,gBAAM,QAAgB,gBAAgB;AAAA,QAC1C,OACK;AACD,gBAAM,gBAAgB;AACtB,gBAAM,QAAgB;AAAA,QAC1B;AACA,SAAC,GAAG,eAAe,GAAG,QAAQ,aAAa,KAAK;AAChD,eAAO,KAAK;AAEZ,SAAC,GAAG,eAAe,GAAG,QAAQ,gBAAgB,KAAK;AAAA,MACvD;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,MAAM,KAAK,QAAQ;AACf,UACI,KAAK;AACT,QAAI,GAAG,SAAS;AACZ,aAAO,GAAG,SAAS,GAAG,eAAe,GAAG,MAAM;AAAA,IAClD,OACK;AACD,aAAO,GAAG,aAAa,QAAQ,IAAI,CAAC,UAAU;AAE1C,WAAG,OAAO,MAAM;AAAA,MACpB,CAAC;AAAA,IACL;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,MAAM,aAAa,cAAc;AAG7B,WAAO,KAAK,UAAU,KAAK,aAAa,EAAE,CAAC,KAAK,iBAAiB,GAAI,aAAa,GAAG,GAAG,YAAY,WAAS;AACzG,YAAM,eAAe;AACrB,UAAI,aAAa,SAAS,QAAQ;AAC9B,qBAAa,cAAc,IAAI;AAAA,MACnC;AAEA,mBAAa,KAAK,aAAa,YAAY,aAAa,IAAI,MAAM;AAClE,mBAAa,gBAAgB,aAAa,MAAM;AAAA,IACpD,GAAG,KAAK,IAAI,KAAK;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,MAAM,SAAS,MAAM,QAAQ;AACzB,QAAI,KAAK,UAAU;AACf,aAAO,KAAK,IAAI,MAAM,KAAK,QAAQ;AAAA,IACvC;AACA,UACI,KAAY,MACZ,YAAY,GAAG,gBACT;AAAA,MACE,CAAC,GAAG,aAAa,GAAI;AAAA,IACzB,IACE;AAAA,MACE,CAAC,GAAG,kBAAkB,IAAK,OAAO,KAAK,GAAG;AAAA,IAC9C;AACR,cAAU,GAAG,iBAAiB,IAAI,GAAG;AACrC,WAAO,GAAG,aAAa,aAAa,OAAO,WAAW,MAAM,GAAG,QAAQ,CAAC,UAAU;AAG9E,SAAG,SAAS,MAAM,MAAM,UAAU;AAAA,IACtC,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAM,SAAS,QAAQ;AACnB,UAAM,KAAK;AACX,WAAO,GAAG,WAAW,GAAG,gBAAgB,GAAG,WAAW,GAAG,SAAS,GAAG,cAAc,GAAG,MAAM,IAAIJ;AAAA,EACpG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAM,aAAa,QAAQ;AACvB,WAAO,KAAK,WAAW,KAAK,gBAAgB,IAAI,KAAK,SAAS,KAAK,cAAc,GAAG,MAAM,IAAIA;AAAA,EAClG;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,EA4CA,MAAM,SAAS;AACX,UACI,KAAc,MACd,EAAE,QAAQ,IAAI,IACd,cAAc,CAAC;AAEnB,OAAG,aAAa,YAAY;AAC5B,OAAG,2BAA2B;AAE9B,QAAI,GAAG,eAAe;AAClB,aAAO;AAAA,IACX;AAEA,QAAI,CAAC,SAAS;AAGV,UAAI,GAAG,SAAS,OAAO;AACnB,WAAG,SAAS,QAAQ,YAAU,OAAO,aAAa,MAAM,KAAK,CAAC;AAC9D,WAAG,SAAS,MAAM;AAAA,MACtB;AACA,aAAOA;AAAA,IACX;AACA,QAAI,GAAG,QAAQ,gBAAgB,EAAE,QAAQ,CAAC,MAAM,OAAO;AAEnD,OAAC,GAAG,QAAQ,OAAO,GAAG,QAAQ,UAAU,GAAG,QAAQ,OAAO,EAAE,QAAQ,YAAU,OAAO,KAAK,aAAa,IAAI;AAE3G,SAAG,QAAQ,eAAe,EAAE,QAAQ,CAAC;AACrC,YACI,cAAc;AAAA,QACV,QAAY;AAAA,QACZ,WAAY;AAAA,QACZ;AAAA,MACJ;AACJ,UAAI,IAAI,GAAG,cAAc,WAAW;AACpC,UAAI,GAAG;AACH,oBAAY,KAAK,CAAC;AAAA,MACtB;AACA,UAAI,GAAG,YAAY,WAAW;AAC9B,UAAI,GAAG;AACH,oBAAY,KAAK,CAAC;AAAA,MACtB;AACA,UAAI,GAAG,eAAe,WAAW;AACjC,UAAI,GAAG;AACH,oBAAY,KAAK,CAAC;AAAA,MACtB;AAEA,UAAI,CAAC,YAAY,QAAQ;AACrB,WAAG,SAAS,QAAQ,OAAK,EAAE,aAAa,MAAM,KAAK,CAAC;AACpD,WAAG,SAAS,MAAM;AAClB,WAAG,MAAM,QAAQ,OAAK,EAAE,aAAa,MAAM,KAAK,CAAC;AACjD,WAAG,MAAM,MAAM;AACf,WAAG,QAAQ,MAAM;AACjB,WAAG,QAAQ,UAAU,EAAE,QAAQ,CAAC;AAChC,eAAOA;AAAA,MACX;AAOA,UAAI,YAAY,WAAW,IAAI,YAAY,CAAC,IAAI,QAAQ,IAAI,WAAW;AACvE,aAAO,GAAG,gBAAgB,IAAI,QAAQ,CAAC,SAAS,WAAW;AACvD,UAAE,KAAK,MAAM;AACT,aAAG,gBAAgB;AACnB,cAAI,YAAY,WAAW;AACvB,eAAG,QAAQ,aAAa,WAAW;AACnC,mBAAO,WAAW;AAAA,UACtB,OACK;AACD,eAAG,QAAQ,UAAU,EAAE,QAAQ,CAAC;AAChC,oBAAQ,WAAW;AAAA,UACvB;AAAA,QACJ,CAAC,EAAE,MAAM,MAAM;AACX,aAAG,gBAAgB;AACnB,iBAAO,WAAW;AAAA,QACtB,CAAC;AAAA,MACL,CAAC;AAAA,IACL;AAAA,EACJ;AAAA;AAAA,EAEA,eAAe;AACX,UAAM,KAAK;AAEX,QAAI,GAAG,gBAAgB,KAAK,CAAC,GAAG,WAAW,YAAY,GAAG;AACtD,SAAG,2BAA2B,IAAI,QAAQ,aAAW;AACjD,WAAG,WAAW;AAAA,UACV,MAAO;AAAA,UACP,IAAO,MAAM;AACT,eAAG,2BAA2B;AAC9B,eAAG,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAe;AACpC,oBAAM,EAAE,SAAS,IAAI;AAGrB,kBAAI,EAAE,aAAa,SAAS,MAAM,SAAS,cAAc,CAAC,KAAK,GAAG,EAAE,SAAS,SAAS,MAAM,KAAK;AAC7F,sBAAM;AAAA,cACV;AAAA,YACJ,CAAC;AACD,oBAAQ;AAAA,UACZ;AAAA,UACA,OAAQ,GAAG;AAAA,QACf,CAAC;AAAA,MACL,CAAC;AAAA,IACL;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,YAAY,aAAa;AACrB,UACI,KAAQ,MACR,QAAQ,GAAG,OACX,QAAQ,EAAE,QAAS,UAAU,QAAS,GAAG,OAAO;AACpD,WAAO,MAAM,SAAS,GAAG,YAAY,IAAI,QAAQ,CAAC,YAAY;AAC1D,YAAM,QAAe,MAAM,OAAO,IAAI,OAAK,EAAE,eAAe;AAC5D,kBAAY,SAAS;AACrB,YAAM,OAAO,EAAE,MAAO,MAAM;AAC5B,SAAG,QAAQ,iBAAiB,KAAK;AACjC,UAAI,aAAa,MAAM;AACvB,UAAI,GAAG,gBAAgB;AACnB,cACI,WAAW,IAAI,SAAS;AAC5B,iBAAS,OAAO,QAAQ,KAAK,UAAU,KAAK,CAAC;AAC7C,qBAAa;AAAA,MACjB;AACA,YACI,UAAU,EAAE,SAAU,GAAG,SAAS,WAAY,KAAK,GACnD,MAAU,GAAG,YAAY,GAAG,iBAAiB,GAAG,WAAW,GAAG,MAAM;AACxE,UAAI,GAAG,mBAAmB;AACtB,gBAAQ,SAAS,GAAG,YAAY;AAAA,MACpC;AACA,iBAAW,KAAK,KAAK,YAAY,aAAa,OAAO,SAAS,GAAG,YAAY,CAAC,EAAE,KAAK,cAAY;AAC7F,cACI,OAAU,SAAS,YACnBI,WAAU,MAAM,QAAQ,IAAI,GAC5BC,WAAUD,YAAY,QAAS,KAAK,YAAY;AACpD,oBAAY,WAAW;AACvB,cAAM,OAAiB;AACvB,cAAM,WAAiB;AACvB,YAAIC,UAAS;AAGT,aAAG,oBAAoB,MAAM,QAAQD,WAAU,OAAO,aAAa,QAAQ,MAAM,GAAG,oBAAoB,CAAC;AAEzG,gBAAM,MAAM;AACZ,aAAG,QAAQ,aAAa;AAGxB,aAAG,QAAQ,WAAW,KAAK;AAC3B,kBAAQ,WAAW;AAAA,QACvB,OACK;AAED,gBAAM,QAAQ,OAAK,EAAE,KAAK,aAAa,KAAK;AAC5C,sBAAY,YAAY,MAAM,YAAY;AAC1C,sBAAY,gBAAgB,MAAM,gBAAgB;AAClD,aAAG,QAAQ,aAAa,KAAK;AAC7B,kBAAQ,WAAW;AAAA,QACvB;AAEA,WAAG,QAAQ,gBAAgB,KAAK;AAAA,MACpC,CAAC,EAAE,MAAM,qBAAmB;AAExB,cAAM,QAAQ,OAAK,EAAE,KAAK,aAAa,KAAK;AAC5C,oBAAY,YAAY,MAAM,YAAY;AAC1C,YAAI,2BAA2B,UAAU;AACrC,sBAAY,WAAW;AACvB,gBAAM,gBAAiB,gBAAgB,KAAK,WAAW;AACvD,gBAAM,WAAiB;AACvB,gBAAM,QAAiB,gBAAgB;AAAA,QAC3C,OACK;AACD,gBAAM,gBAAgB;AACtB,gBAAM,QAAgB;AAAA,QAC1B;AACA,SAAC,GAAG,eAAe,GAAG,QAAQ,aAAa,KAAK;AAChD,gBAAQ,WAAW;AAEnB,SAAC,GAAG,eAAe,GAAG,QAAQ,gBAAgB,KAAK;AAAA,MACvD,CAAC;AAAA,IACL,CAAC,IAAI;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,eAAe,aAAa;AACxB,UACI,KAAe,MAEf,EAAE,SAAS,IAAI,GAAG,SAClB,QAAe,EAAE,QAAS,UAAU,QAAS,GAAG,OAAO,GACvD,SAAe,SAAS,UAAU,GAAG,YAAY,IAAI,QAAQ,aAAW;AAIpE,YACI,gBAAgB,SAAS,IAAI,YAAU;AACnC,YAAI,GAAG,gBAAgB;AACnB,iBAAO,OAAO;AAAA,QAClB,OACK;AACD,iBAAO,OAAO;AAAA,QAClB;AAAA,MACJ,CAAC,EAAE,OAAO,QAAM,CAAC,aAAa,QAAQ,EAAE,CAAC;AAE7C,UAAI,cAAc,WAAW,GAAG;AAC5B,WAAG,SAAS,MAAM;AAClB,iBAAS,QAAQ,OAAK,EAAE,KAAK,aAAa,KAAK;AAC/C,gBAAQ;AACR;AAAA,MACJ;AACA,kBAAY,SAAS;AACrB,YAAM,OAAO,EAAE,MAAO,cAAc;AACpC,SAAG,QAAQ,iBAAiB,KAAK;AACjC,UAAI,aAAa,MAAM;AACvB,UAAI,GAAG,gBAAgB;AACnB,cACI,WAAW,IAAI,SAAS;AAC5B,iBAAS,OAAO,QAAQ,KAAK,UAAU,aAAa,CAAC;AACrD,qBAAa;AAAA,MACjB;AACA,YACI,UAAU,EAAE,SAAU,GAAG,SAAS,WAAY,KAAK;AACvD,UAAI,GAAG,mBAAmB;AACtB,gBAAQ,SAAS,GAAG,YAAY;AAAA,MACpC;AACA,iBAAW;AAAA,QACP,GAAG,YAAY,GAAG,iBAAiB,GAAG,WAAW,GAAG,MAAM;AAAA,QAC1D;AAAA,QACA,aAAa,OAAO,SAAS,GAAG,YAAY;AAAA,MAChD,EAAE,KAAK,cAAY;AACf,cACI,OAAU,SAAS,YACnBA,WAAU,MAAM,QAAQ,IAAI,GAC5BC,WAAUD,YAAY,QAAS,KAAK,YAAY;AACpD,oBAAY,WAAW;AACvB,cAAM,OAAiB;AACvB,cAAM,WAAiB;AACvB,YAAIC,UAAS;AAGT,aAAG,oBAAoB,UAAUD,WAAU,OAAO,aAAa,QAAQ,MAAM,GAAG,oBAAoB,GAAG,IAAI;AAE3G,aAAG,SAAS,MAAM;AAClB,aAAG,QAAQ,gBAAgB;AAI3B,aAAG,QAAQ,WAAW,KAAK;AAC3B,kBAAQ,WAAW;AAAA,QACvB,OACK;AAED,mBAAS,QAAQ,OAAK,EAAE,KAAK,aAAa,KAAK;AAC/C,sBAAY,YAAY,MAAM,YAAY;AAC1C,gBAAM,gBAAkB;AACxB,aAAG,QAAQ,aAAa,KAAK;AAC7B,kBAAQ,WAAW;AAAA,QACvB;AAEA,WAAG,QAAQ,gBAAgB,KAAK;AAAA,MACpC,CAAC,EAAE,MAAM,qBAAmB;AAExB,iBAAS,QAAQ,OAAK,EAAE,KAAK,aAAa,KAAK;AAC/C,oBAAY,YAAY,MAAM,YAAY;AAC1C,YAAI,2BAA2B,UAAU;AACrC,sBAAY,WAAW;AACvB,gBAAM,gBAAiB,gBAAgB,KAAK,WAAW;AACvD,gBAAM,WAAiB;AACvB,gBAAM,QAAiB,gBAAgB;AAAA,QAC3C,OACK;AACD,gBAAM,gBAAgB;AACtB,gBAAM,QAAgB;AAAA,QAC1B;AACA,SAAC,GAAG,eAAe,GAAG,QAAQ,aAAa,KAAK;AAChD,gBAAQ,WAAW;AAEnB,SAAC,GAAG,eAAe,GAAG,QAAQ,gBAAgB,KAAK;AAAA,MACvD,CAAC;AAAA,IACL,CAAC,IAAI;AAET,QAAI,CAAC,SAAS,UAAU,GAAG,SAAS,OAAO;AACvC,SAAG,SAAS,MAAM;AAAA,IACtB;AACA,WAAO;AAAA,EACX;AAAA,EACA,oBAAoB,cAAc,cAAc,aAAa,OAAO;AAChE,UACI,KAAe,MACfE,SAAe,GAAG,YAClB,eAAeA,OAAM,SAAS,GAAG;AACrC,iBAAa,QAAQ,CAAC,SAAS,MAAM;AACjC,YACI,SAAS,aAAa,CAAC;AAE3B,aAAO,aAAa,MAAM,KAAK;AAE/B,aAAO,OAAO,QAAQ,YAAY,CAAC;AAGnC,aAAO,OAAO,aAAa,CAAC,EAAE,MAAMA,OAAM,YAAY,SAAS,YAAY,IAAI,MAAM,CAAC;AAAA,IAC1F,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,cAAc,aAAa;AACvB,UACI,KAAU,MACV,UAAU,GAAG,SACb,QAAU,EAAE,QAAS,UAAU,QAAS,GAAG,OAAO;AACtD,WAAO,QAAQ,SAAS,GAAG,YAAY,IAAI,QAAQ,CAAC,YAAY;AAC5D,kBAAY,SAAS;AACrB,YAAM,OAAO,EAAE,KAAM,QAAQ,IAAI,OAAK,EAAE,EAAE,EAAE;AAC5C,SAAG,QAAQ,iBAAiB,KAAK;AACjC,UAAI,aAAa,MAAM;AACvB,UAAI,GAAG,gBAAgB;AACnB,cACI,WAAW,IAAI,SAAS;AAC5B,iBAAS,OAAO,MAAM,KAAK,UAAU,WAAW,GAAG,CAAC;AACpD,qBAAa;AAAA,MACjB;AACA,YACI,UAAU,EAAE,SAAU,GAAG,SAAS,WAAY,KAAK;AACvD,UAAI,GAAG,mBAAmB;AACtB,gBAAQ,SAAS,GAAG,YAAY;AAAA,MACpC;AACA,iBAAW;AAAA,QACP,GAAG,YAAY,GAAG,iBAAiB,GAAG,WAAW,GAAG,MAAM;AAAA,QAC1D;AAAA,QACA,aAAa,OAAO,SAAS,GAAG,YAAY;AAAA,MAChD,EAAE,KAAK,cAAY;AACf,cACI,OAAU,SAAS,YACnBF,WAAU,MAAM,QAAQ,IAAI,GAC5BC,WAAUD,YAAY,QAAS,KAAK,YAAY;AACpD,oBAAY,WAAW;AACvB,cAAM,OAAiB;AACvB,cAAM,WAAiB;AACvB,YAAIC,UAAS;AACT,kBAAQ,QAAQ,YAAU,OAAO,KAAK,aAAa,KAAK;AACxD,kBAAQ,MAAM;AACd,aAAG,QAAQ,eAAe;AAC1B,aAAG,QAAQ,WAAW,KAAK;AAC3B,kBAAQ,WAAW;AAAA,QACvB,OACK;AAED,kBAAQ,QAAQ,OAAK,EAAE,KAAK,aAAa,KAAK;AAC9C,sBAAY,YAAY,MAAM,YAAY;AAC1C,gBAAM,gBAAgB;AACtB,aAAG,QAAQ,aAAa,KAAK;AAC7B,kBAAQ,WAAW;AAAA,QACvB;AAEA,WAAG,QAAQ,gBAAgB,KAAK;AAAA,MACpC,CAAC,EAAE,MAAM,qBAAmB;AAExB,gBAAQ,QAAQ,OAAK,EAAE,KAAK,aAAa,KAAK;AAC9C,oBAAY,YAAY,MAAM,YAAY;AAC1C,YAAI,2BAA2B,UAAU;AACrC,sBAAY,WAAW;AACvB,gBAAM,gBAAiB,gBAAgB,KAAK,WAAW;AACvD,gBAAM,WAAiB;AACvB,gBAAM,QAAiB,gBAAgB;AAAA,QAC3C,OACK;AACD,gBAAM,gBAAgB;AACtB,gBAAM,QAAgB;AAAA,QAC1B;AACA,SAAC,GAAG,eAAe,GAAG,QAAQ,aAAa,KAAK;AAChD,gBAAQ,WAAW;AAEnB,SAAC,GAAG,eAAe,GAAG,QAAQ,gBAAgB,KAAK;AAAA,MACvD,CAAC;AAAA,IACL,CAAC,IAAI;AAAA,EACT;AAAA,EACA,IAAI,eAAe;AACf,WAAO,QAAQ,KAAK,mBAAmB,KAAK,aAAa;AAAA,EAC7D;AAAA,EACA,IAAI,aAAa;AACb,WAAO,QAAQ,KAAK,aAAa;AAAA,EACrC;AACJ;AAx8CI,cADiB,WACV,SAAQ;AA4Uf,cA7UiB,WA6UV,gBAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMlB,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUT,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQX,mBAAoB;AACxB;AAomCJ,UAAU,SAAS;;;AC1lDnB,IAAqB,eAArB,MAAkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO9B,OAAO,IAAI,SAAS,KAAK;AACrB,UAAM,SAAU,QAAQ,aAAa,QAAQ,WAAW,CAAC;AACzD,WAAQ,OAAO,OAAQ,OAAO,GAAG,IAAK;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,OAAO,SAAS,KAAK;AACxB,UACI,EAAE,SAAS,IAAI,SACf,MAAM,qCAAW;AACrB,8CAAkB;AAClB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,IAAI,SAAS,MAAM,OAAO;AAC7B,QAAI,UAAU,WAAW,GAAG;AACxB,OAAC,QAAQ,aAAa,QAAQ,WAAW,CAAC,IAAI,IAAI,IAAI;AAAA,IAC1D,OACK;AACD,cAAQ,WAAW;AAAA,IACvB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,OAAO,SAAS,MAAM;AACzB,WAAO,OAAQ,QAAQ,aAAa,QAAQ,WAAW,CAAC,IAAK,IAAI;AAAA,EACrE;AACJ;AACA,aAAa,SAAS;;;ACnDf,IAAM,0BAA0B,MAAM;AACzC,QAAM,IAAI,MAAM,uBAAuB;AAC3C;AACO,IAAM,yBAAyB,MAAM;AACxC,QAAM,IAAI,MAAM,wCAAwC;AAC5D;AAWA,IAAqB,YAArB,cAAuC,KAAK;AAAA,EACxC,QAAQ,KAAK;AACT,4BAAwB;AAAA,EAC5B;AAAA,EACA,QAAQ,KAAK;AACT,4BAAwB;AAAA,EAC5B;AAAA,EACA,OAAO,KAAK;AACR,4BAAwB;AAAA,EAC5B;AAAA,EACA,OAAO,KAAK;AACR,4BAAwB;AAAA,EAC5B;AAAA,EACA,mBAAmB,KAAK;AACpB,4BAAwB;AAAA,EAC5B;AAAA,EACA,kBAAkB,KAAK;AACnB,4BAAwB;AAAA,EAC5B;AAAA,EACA,yBAAyB,KAAK;AAC1B,4BAAwB;AAAA,EAC5B;AAAA,EACA,oBAAoB,KAAK;AACrB,4BAAwB;AAAA,EAC5B;AAAA,EACA,SAAS,KAAK;AACV,4BAAwB;AAAA,EAC5B;AAAA,EACA,UAAU,KAAK;AACX,4BAAwB;AAAA,EAC5B;AAAA,EACA,eAAe,KAAK;AAChB,4BAAwB;AAAA,EAC5B;AAAA,EACA,gBAAgB,KAAK;AACjB,4BAAwB;AAAA,EAC5B;AAAA,EACA,aAAa,KAAK;AACd,4BAAwB;AAAA,EAC5B;AAAA,EACA,cAAc,KAAK;AACf,4BAAwB;AAAA,EAC5B;AAAA,EACA,gBAAgB,KAAK;AACjB,4BAAwB;AAAA,EAC5B;AAAA,EACA,mBAAmB,KAAK;AACpB,4BAAwB;AAAA,EAC5B;AAAA,EACA,mBAAmB,KAAK;AACpB,4BAAwB;AAAA,EAC5B;AAAA,EACA,sBAAsB,KAAK;AACvB,4BAAwB;AAAA,EAC5B;AAAA,EACA,mBAAmB,KAAK;AACpB,4BAAwB;AAAA,EAC5B;AAAA,EACA,mBAAmB,KAAK;AACpB,4BAAwB;AAAA,EAC5B;AACJ;AACA,UAAU,SAAS;;;AC9EZ,IAAM,aAAyB,OAAO,YAAY;AAClD,IAAM,cAAyB,OAAO,aAAa;AACnD,IAAM,aAAyB,OAAO,YAAY;AAClD,IAAM,WAAyB,OAAO,UAAU;AAChD,IAAM,mBAAyB,OAAO,kBAAkB;AACxD,IAAM,yBAAyB,OAAO,wBAAwB;AAC9D,IAAM,mBAAyB,OAAO,kBAAkB;AACxD,IAAM,oBAAyB,OAAO,mBAAmB;AACzD,IAAM,QAAyB,OAAO,OAAO;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC;;;ACXD,IAAM,WAAW,oBAAI,IAAI;AASlB,IAAM,mBAAmB,CAAC,MAAM,UAAU;AAC7C,WAAS,IAAI,MAAM,KAAK;AAC5B;AASO,IAAM,kBAAkB,CAAC,UAAU;AACtC,MAAI,OAAO,UAAU,UAAU;AAC3B,YAAQ,SAAS,IAAI,KAAK;AAAA,EAC9B;AACA,SAAO;AACX;AAOA,IAAO,mBAAQ;AAAA,EACX;AAAA,EACA;AACJ;;;AC5CO,IAAM,aAAa,CAAC,KAAK,YAAY;AACxC,QAAM,EAAE,MAAM,KAAK,IAAI;AACvB,MAAI;AACJ,MAAI,QAAQ,CAAC,MAAM;AACf,eAAW;AAAA,MACP,CAAC,UAAU,GAAI,IAAI,UAAU,EAAE,MAAM,IAAI,QAAQ;AAAA,MACjD,CAAC,QAAQ,GAAM;AAAA,IACnB;AAAA,EACJ,WACS,QAAQ,CAAC,MAAM;AACpB,eAAW;AAAA,MACP,CAAC,UAAU,GAAI,IAAI,UAAU,EAAE,MAAM,GAAG,IAAI,QAAQ;AAAA,IACxD;AAAA,EACJ,OACK;AACD,eAAW;AAAA,MACP,CAAC,UAAU,GAAI,CAAC;AAAA,MAChB,CAAC,QAAQ,GAAM;AAAA,IACnB;AAAA,EACJ;AAAC;AACD,SAAO;AAAA,IACH;AAAA,IACA,MAAM;AACF,UAAI,4BAA4B,OAAO;AAAA,IAC3C;AAAA,EACJ;AACJ;;;ACfO,IAAM,qBAAN,cAAiC,UAAU;AAAA,EAC9C,UAAU;AACN,WAAO;AAAA,EACX;AAAA,EACA,UAAU;AACN,WAAO;AAAA,EACX;AAAA,EACA,SAAS;AACL,2BAAuB;AAAA,EAC3B;AAAA,EACA,SAAS;AACL,2BAAuB;AAAA,EAC3B;AAAA,EACA,SAAS,KAAK;AACV,WAAO,IAAI,aAAa,mBAAmB;AAAA,EAC/C;AAAA,EACA,YAAY;AACR,2BAAuB;AAAA,EAC3B;AAAA,EACA,iBAAiB;AACb,WAAO;AAAA,MACH,CAAC,gBAAgB,GAAI;AAAA,IACzB;AAAA,EACJ;AAAA,EACA,kBAAkB;AACd,WAAO;AAAA,MACH,CAAC,gBAAgB,GAAI;AAAA,IACzB;AAAA,EACJ;AAAA,EACA,qBAAqB;AACjB,2BAAuB;AAAA,EAC3B;AAAA,EACA,oBAAqB;AACjB,2BAAuB;AAAA,EAC3B;AAAA,EACA,2BAA2B;AACvB,2BAAuB;AAAA,EAC3B;AAAA,EACA,sBAAsB;AAClB,2BAAuB;AAAA,EAC3B;AAAA,EACA,aAAa,KAAK,SAAS;AACvB,WAAO,WAAW,KAAK,OAAO;AAAA,EAClC;AAAA,EACA,gBAAqB;AAAA,EAAC;AAAA,EACtB,qBAAqB;AAAA,EAAC;AAAA,EACtB,qBAAqB;AAAA,EAAC;AAAA,EACtB,kBAAqB;AAAA,EAAC;AAAA,EACtB,qBAAqB;AAAA,EAAC;AAAA,EACtB,qBAAqB;AAAA,EAAC;AAAA,EACtB,mBAAqB;AAAA,EAAC;AAC1B;AAMA,IAAM,gBAAgB,IAAI,mBAAmB;AAC7C,IAAO,wBAAQ;AACf,iBAAS,iBAAiB,iBAAiB,aAAa;;;ACnExD,IAAM,oBAAoB,OAAO,mBAAmB;AAQpD,IAAqB,cAArB,cAAyC,KAAK;AAAA,EAC1C,IAAI,gBAAgB;AAChB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMH,OAAQ;AAAA,IACZ;AAAA,EACJ;AAAA,EACA,aAAa,MAAM;AACf,SAAK,iBAAiB,IAAI,CAAC;AAC3B,UAAM,UAAU,GAAG,IAAI;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,QAAQ;AACR,WAAO,KAAK,iBAAiB,EAAE,MAAM,CAAC;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,SAAS;AACT,WAAO,KAAK,iBAAiB,EAAE;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,QAAQ;AACd,SAAK,iBAAiB,EAAE,KAAK,MAAM;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO;AACH,UAAM,QAAQ,KAAK,iBAAiB;AACpC,aAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,EAAE,GAAG;AACxC,YAAM,CAAC,EAAE,KAAK;AAAA,IAClB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO;AACH,UAAM,QAAQ,KAAK,iBAAiB;AACpC,aAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,EAAE,GAAG;AAC9C,YAAM,CAAC,EAAE,KAAK;AAAA,IAClB;AAAA,EACJ;AACJ;AACA,YAAY,SAAS;;;ACzDd,IAAM,kBAAN,cAA8B,UAAU;AAAA,EAC3C,QAAQ,KAAK;AAGT,WAAO,IAAI,IAAI,YAAY,IAAI,YAAY,IAAI;AAAA,EACnD;AAAA,EACA,QAAQ,KAAK;AAGT,WAAO,KAAK,IAAI,YAAY,IAAI,WAAW,IAAI;AAAA,EACnD;AAAA,EACA,OAAO,KAAK,OAAO;AACf,QAAI,SAAS,IAAI;AACjB,UACI,QAAS,IAAI,UAAU,GACvB,SAAS,KAAK,IAAI,GAAG,SAAS,KAAK,GACnC,OAAO,MAAM;AACT,UAAI,qCAAqC;AACzC,YAAM,qBAAqB,CAAC;AAC5B,aAAO,WAAW,QAAQ;AACtB,cAAM,cAAc,MAAM,EAAE,MAAM;AAClC,oBAAY,KAAK;AACjB,2BAAmB,KAAK,WAAW;AAAA,MACvC;AACA,aAAO,CAAC,IAAI,aAAa,mBAAmB,cAAc,MAAM;AAC5D,YAAI,oCAAoC,EAAE,OAAQ,QAAQ,cAAe,mBAAmB,CAAC;AAAA,MACjG,CAAC;AAAA,IACL;AACJ,WAAO,CAAC;AAAA,MACJ,CAAC,UAAU,GAAI;AAAA,MACf,CAAC,QAAQ,GAAM;AAAA,IACnB,GAAG,IAAI;AAAA,EACX;AAAA,EACA,OAAO,KAAK,OAAO;AACf,QAAI,SAAS,IAAI;AACjB,UACI,QAAS,IAAI,UAAU,GACvB,SAAS,KAAK,IAAI,MAAM,QAAQ,SAAS,KAAK;AAClD,UAAM,OAAO,MAAM;AACf,UAAI,qCAAqC;AACzC,YAAM,qBAAqB,CAAC;AAC5B,SAAG;AACC,cAAM,cAAc,MAAM,QAAQ;AAClC,oBAAY,KAAK;AACjB,2BAAmB,KAAK,WAAW;AAAA,MACvC,SACO,WAAW;AAClB,aAAO,CAAC,IAAI,aAAa,mBAAmB,cAAc,MAAM;AAC5D,YAAI,oCAAoC,EAAE,OAAQ,QAAQ,cAAe,mBAAmB,CAAC;AAAA,MACjG,CAAC;AAAA,IACL;AACA,WAAO,CAAC;AAAA,MACJ,CAAC,UAAU,GAAI;AAAA,MACf,CAAC,QAAQ,GAAM;AAAA,IACnB,GAAG,IAAI;AAAA,EACX;AAAA,EACA,WAAW;AACP,2BAAuB;AAAA,EAC3B;AAAA,EACA,YAAY;AACR,WAAO;AAAA,EACX;AAAA,EACA,iBAAiB;AACb,WAAO;AAAA,MACH,CAAC,UAAU,GAAU;AAAA,MACrB,CAAC,gBAAgB,GAAI;AAAA,IACzB;AAAA,EACJ;AAAA,EACA,kBAAkB;AACd,2BAAuB;AAAA,EAC3B;AAAA,EACA,mBAAmB,KAAK,OAAO;AAC3B,UAAM,cAAc,IAAI,YAAY,EAAE,MAAM,CAAC;AAC7C,WAAO,CAAC;AAAA,MACJ,CAAC,UAAU,GAAU;AAAA,MACrB,CAAC,gBAAgB,GAAI;AAAA,IACzB,GAAG,MAAM;AACL,UAAI,qCAAqC,WAAW;AAAA,IACxD,CAAC;AAAA,EACL;AAAA,EACA,oBAAoB;AAChB,2BAAuB;AAAA,EAC3B;AAAA,EACA,2BAA2B;AACvB,2BAAuB;AAAA,EAC3B;AAAA,EACA,sBAAsB;AAClB,2BAAuB;AAAA,EAC3B;AAAA,EACA,aAAa,KAAK,SAAS;AACvB,WAAO,WAAW,KAAK,OAAO;AAAA,EAClC;AAAA,EACA,gBAAqB;AAAA,EAAC;AAAA,EACtB,qBAAqB;AAAA,EAAC;AAAA,EACtB,qBAAqB;AAAA,EAAC;AAAA,EACtB,kBAAqB;AAAA,EAAC;AAAA,EACtB,qBAAqB;AAAA,EAAC;AAAA,EACtB,qBAAqB;AAAA,EAAC;AAAA,EACtB,mBAAqB;AAAA,EAAC;AAC1B;AAMA,IAAM,aAAa,IAAI,gBAAgB;AACvC,IAAO,qBAAQ;AACf,iBAAS,iBAAiB,cAAc,UAAU;;;AC5G3C,IAAM,sBAAN,cAAkC,UAAU;AAAA,EAC/C,UAAU;AACN,WAAO;AAAA,EACX;AAAA,EACA,UAAU;AACN,WAAO;AAAA,EACX;AAAA,EACA,WAAW;AAAA,EAAC;AAAA,EACZ,UAAU,KAAK;AACX,UAAM,cAAc,IAAI,gBAAgB;AACxC,QAAI,oCAAoC,aAAa,EAAE,UAAW,KAAK,CAAC;AACxE,WAAO;AAAA,MACH,CAAC,UAAU,GAAU;AAAA,MACrB,CAAC,gBAAgB,GAAI;AAAA,IACzB;AAAA,EACJ;AAAA,EACA,eAAe,KAAK;AAChB,WAAO,CAAC;AAAA,MACJ,CAAC,UAAU,GAAU;AAAA,MACrB,CAAC,gBAAgB,GAAI;AAAA,IACzB,GAAG,MAAM;AACL,UAAI,uBAAuB;AAAA,IAC/B,CAAC;AAAA,EACL;AAAA,EACA,kBAAkB;AACd,2BAAuB;AAAA,EAC3B;AAAA,EACA,qBAAqB;AACjB,2BAAuB;AAAA,EAC3B;AAAA,EACA,kBAAkB,KAAK,OAAO;AAC1B,UACI,cAAc,IAAI,gBAAgB,GAClC,QAAc,IAAI,UAAU;AAChC,QAAI,WAAW,IAAI,QAAQ;AAC3B,QAAI,YAAY,QAAQ;AACpB,UAAI,CAAC,YAAY,SAAS,CAAC,SAAS,IAAI,qBAAqB;AACzD,oBAAY,QAAQ,IAAI,oBAAoB,WAAW;AAAA,MAC3D,WACS,OAAO;AACZ,oBAAY,QAAQ;AAAA,MACxB;AACA,YAAM,QAAQ,IAAI;AAClB,YAAM,SAAY,EAAE;AAAA,IACxB;AACA,WAAO,CAAC;AAAA,MACJ,CAAC,UAAU,GAAU;AAAA,MACrB,CAAC,QAAQ,GAAY;AAAA,MACrB,CAAC,gBAAgB,GAAI;AAAA,IACzB,GAAG,MAAM;AACL,UAAI,oCAAoC,aAAa,EAAE,MAAO,KAAK,CAAC;AAAA,IACxE,CAAC;AAAA,EACL;AAAA,EACA,oBAAoB,KAAK;AACrB,UAAM,cAAc,IAAI,gBAAgB;AACxC,WAAO,CAAC;AAAA,MACJ,CAAC,UAAU,GAAU;AAAA,MACrB,CAAC,gBAAgB,GAAI;AAAA,IACzB,GAAG,MAAM;AACL,UAAI,YAAY,QAAQ;AACpB,oBAAY,KAAK;AAAA,MACrB;AACA,aAAO;AAAA,QACH;AAAA,QACA,MAAM;AACF,cAAI,oCAAoC,aAAa,EAAE,UAAW,KAAK,CAAC;AAAA,QAC5E;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,2BAA2B;AACvB,2BAAuB;AAAA,EAC3B;AAAA,EACA,aAAa,KAAK,SAAS;AACvB,WAAO,WAAW,KAAK,OAAO;AAAA,EAClC;AAAA,EACA,cAAc,KAAK,OAAO,SAAS,SAAS,qBAAqB;AAC7D,UAAM,cAAc,IAAI,gBAAgB;AACxC,gBAAY,UAAU,IAAI,sBAAsB,OAAO,SAAS,SAAS,mBAAmB,CAAC;AAAA,EACjG;AAAA,EACA,mBAAmB,KAAK,aAAa,OAAO,YAAY,gBAAgB,eAAe,mBAAmB;AACtG,UAAM,cAAc,IAAI,gBAAgB;AACxC,gBAAY,UAAU,IAAI,2BAA2B,aAAa,OAAO,YAAY,gBAAgB,eAAe,iBAAiB,CAAC;AAAA,EAC1I;AAAA,EACA,mBAAmB,KAAK,aAAa,aAAa,SAAS;AACvD,UAAM,cAAc,IAAI,gBAAgB;AACxC,gBAAY,UAAU,IAAI,2BAA2B,aAAa,aAAa,OAAO,CAAC;AAAA,EAC3F;AAAA,EACA,gBAAgB,KAAK,OAAO,QAAQ,QAAW;AAC3C,UAAM,cAAc,IAAI,gBAAgB;AACxC,gBAAY,UAAU,IAAI,wBAAwB,OAAO,QAAQ,MAAM,CAAC;AAAA,EAC5E;AAAA,EACA,mBAAmB,KAAK,OAAO,OAAO,QAAQ,SAAS,QAAQ;AAC3D,UAAM,cAAc,IAAI,gBAAgB;AACxC,gBAAY,UAAU,IAAI,2BAA2B,OAAO,OAAO,QAAQ,SAAS,MAAM,CAAC;AAAA,EAC/F;AAAA,EACA,mBAAmB,KAAK,OAAO,QAAQ,SAAS,QAAQ;AACpD,UAAM,cAAc,IAAI,gBAAgB;AACxC,gBAAY,UAAU,IAAI,2BAA2B,OAAO,QAAQ,SAAS,MAAM,CAAC;AAAA,EACxF;AAAA,EACA,iBAAiB,KAAK,OAAO,YAAY,QAAU;AAC/C,UAAM,cAAc,IAAI,gBAAgB;AACxC,gBAAY,UAAU,IAAI,yBAAyB,OAAO,YAAY,MAAM,CAAC;AAAA,EACjF;AACJ;AAMA,IAAM,iBAAiB,IAAI,oBAAoB;AAC/C,IAAO,yBAAQ;AACf,iBAAS,iBAAiB,kBAAkB,cAAc;;;ACjHnD,IAAM,sBAAN,cAAkC,UAAU;AAAA,EAC/C,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EACA,UAAU;AACN,WAAO;AAAA,EACX;AAAA,EACA,UAAU;AACN,WAAO;AAAA,EACX;AAAA,EACA,SAAS;AACL,2BAAuB;AAAA,EAC3B;AAAA,EACA,SAAS;AACL,2BAAuB;AAAA,EAC3B;AAAA,EACA,WAAW;AACP,2BAAuB;AAAA,EAC3B;AAAA,EACA,YAAY;AACR,2BAAuB;AAAA,EAC3B;AAAA,EACA,iBAAiB;AACb,WAAO;AAAA,MACH,CAAC,gBAAgB,GAAI;AAAA,IACzB;AAAA,EACJ;AAAA,EACA,kBAAkB;AACd,WAAO;AAAA,MACH,CAAC,gBAAgB,GAAI;AAAA,IACzB;AAAA,EACJ;AAAA,EACA,qBAAqB;AACjB,2BAAuB;AAAA,EAC3B;AAAA,EACA,oBAAqB;AACjB,2BAAuB;AAAA,EAC3B;AAAA,EACA,2BAA2B;AACvB,2BAAuB;AAAA,EAC3B;AAAA,EACA,sBAAsB;AAClB,2BAAuB;AAAA,EAC3B;AAAA,EACA,eAAe;AACX,2BAAuB;AAAA,EAC3B;AAAA,EACA,gBAAqB;AAAA,EAAC;AAAA,EACtB,qBAAqB;AAAA,EAAC;AAAA,EACtB,qBAAqB;AAAA,EAAC;AAAA,EACtB,kBAAqB;AAAA,EAAC;AAAA,EACtB,qBAAqB;AAAA,EAAC;AAAA,EACtB,qBAAqB;AAAA,EAAC;AAAA,EACtB,mBAAqB;AAAA,EAAC;AAC1B;AAMA,IAAM,iBAAiB,IAAI,oBAAoB;AAC/C,IAAO,yBAAQ;AACf,iBAAS,iBAAiB,kBAAkB,cAAc;;;AC5DnD,IAAM,sBAAN,cAAkC,gBAAgB;AAAA,EACrD,iBAAiB;AACb,2BAAuB;AAAA,EAC3B;AAAA,EACA,kBAAkB;AACd,WAAO;AAAA,MACH,CAAC,UAAU,GAAU;AAAA,MACrB,CAAC,gBAAgB,GAAI;AAAA,IACzB;AAAA,EACJ;AAAA,EACA,mBAAmB,KAAK,OAAO;AAC3B,UAAM,cAAc,IAAI,YAAY,EAAE,MAAM,CAAC;AAC7C,WAAO,CAAC;AAAA,MACJ,CAAC,UAAU,GAAU;AAAA,MACrB,CAAC,gBAAgB,GAAI;AAAA,IACzB,GAAG,MAAM;AACL,UAAI,qCAAqC,WAAW;AACpD,UAAI,uBAAuB;AAAA,IAC/B,CAAC;AAAA,EACL;AAAA,EACA,cAAc,KAAK,OAAO,SAAS,SAAS;AACxC,QAAI,iBAAiB;AACrB,QAAI,cAAc,OAAO,SAAS,OAAO;AAAA,EAC7C;AAAA,EACA,mBAAmB,KAAK,aAAa,OAAO,aAAa,SAAS;AAC9D,QAAI,iBAAiB;AACrB,QAAI,mBAAmB,aAAa,OAAO,aAAa,OAAO;AAAA,EACnE;AAAA,EACA,mBAAmB,KAAK,aAAa,aAAa,SAAS;AACvD,QAAI,iBAAiB;AACrB,QAAI,mBAAmB,aAAa,aAAa,OAAO;AAAA,EAC5D;AAAA,EACA,gBAAgB,KAAK,OAAO,QAAQ,QAAQ;AACxC,QAAI,iBAAiB;AACrB,QAAI,gBAAgB,OAAO,QAAQ,MAAM;AAAA,EAC7C;AAAA,EACA,mBAAmB,KAAK,OAAO,OAAO,QAAQ,SAAS,QAAQ;AAC3D,QAAI,iBAAiB;AACrB,QAAI,mBAAmB,OAAO,OAAO,QAAQ,SAAS,MAAM;AAAA,EAChE;AAAA,EACA,mBAAmB,KAAK,OAAO,QAAQ,SAAS,QAAQ;AACpD,QAAI,iBAAiB;AACrB,QAAI,mBAAmB,OAAO,QAAQ,SAAS,MAAM;AAAA,EACzD;AAAA,EACA,iBAAiB,KAAK,OAAO,YAAY,QAAQ;AAC7C,QAAI,iBAAiB;AACrB,QAAI,iBAAiB,OAAO,YAAY,MAAM;AAAA,EAClD;AACJ;AAMA,IAAM,iBAAiB,IAAI,oBAAoB;AAC/C,IAAO,yBAAQ;AACf,iBAAS,iBAAiB,kBAAkB,cAAc;;;ACvDnD,IAAM,0BAAN,cAAsC,oBAAoB,MAAM,iBAAS,EAAE;AAAA,EAC9E,UAAU,KAAK;AACX,UACI,cAAc,IAAI,gBAAgB,GAClC,QAAc,IAAI,sBAAsB;AAC5C,QAAI,OAAO;AACP,WAAK,aAAa,KAAK;AAAA,IAC3B;AACA,QAAI,oCAAoC,aAAa,EAAE,UAAW,KAAK,CAAC;AACxE,WAAO;AAAA,MACH,CAAC,UAAU,GAAgB;AAAA,MAC3B,CAAC,gBAAgB,GAAU;AAAA,MAC3B,CAAC,sBAAsB,GAAI;AAAA,IAC/B;AAAA,EACJ;AAAA,EACA,eAAe,KAAK;AAChB,2BAAuB;AAAA,EAC3B;AAAA,EACA,gBAAgB,KAAK;AACjB,UAAM,QAAc,IAAI,sBAAsB;AAC9C,QAAI,OAAO;AACP,WAAK,aAAa,KAAK;AAAA,IAC3B;AACA,WAAO;AAAA,MACH,CAAC,UAAU,GAAgB;AAAA,MAC3B,CAAC,gBAAgB,GAAU;AAAA,MAC3B,CAAC,sBAAsB,GAAI;AAAA,IAC/B;AAAA,EACJ;AAAA,EACA,kBAAkB,KAAK,OAAO;AAC1B,UACI,cAAc,IAAI,gBAAgB,GAClC,QAAc,IAAI,sBAAsB,GACxC,QAAc,IAAI,UAAU;AAChC,QAAI,WAAW,IAAI,QAAQ;AAC3B,QAAI,OAAO;AACP,WAAK,aAAa,KAAK;AAAA,IAC3B;AACA,QAAI,YAAY,QAAQ;AACpB,UAAI,CAAC,YAAY,SAAS,CAAC,SAAS,IAAI,qBAAqB;AACzD,oBAAY,QAAQ,IAAI,oBAAoB,WAAW;AAAA,MAC3D,WACS,OAAO;AACZ,oBAAY,QAAQ;AAAA,MACxB;AACA,YAAM,QAAQ,IAAI;AAClB,YAAM,SAAY,EAAE;AAAA,IACxB;AACA,WAAO,CAAC;AAAA,MACJ,CAAC,UAAU,GAAgB;AAAA,MAC3B,CAAC,QAAQ,GAAkB;AAAA,MAC3B,CAAC,gBAAgB,GAAU;AAAA,MAC3B,CAAC,sBAAsB,GAAI;AAAA,IAC/B,GAAG,MAAM;AACL,UAAI,oCAAoC,aAAa,EAAE,MAAO,KAAK,CAAC;AAAA,IACxE,CAAC;AAAA,EACL;AAAA,EACA,yBAAyB,KAAK;AAC1B,QAAI,QAAQ,IAAI,sBAAsB;AACtC,QAAI,OAAO;AACP,WAAK,aAAa,KAAK;AAAA,IAC3B;AACA,YAAQ,KAAK;AAAA,MACT,MAAM;AACF,YAAI,gBAAgB;AAAA,MACxB;AAAA,MACA,IAAI;AAAA,IACR;AACA,WAAO;AAAA,MACH,CAAC,UAAU,GAAgB;AAAA,MAC3B,CAAC,sBAAsB,GAAI;AAAA,IAC/B;AAAA,EACJ;AAAA,EACA,aAAa,KAAK,SAAS;AACvB,WAAO,WAAW,KAAK,OAAO;AAAA,EAClC;AAAA,EACA,oBAAoB,KAAK;AACrB,UACI,cAAc,IAAI,gBAAgB,GAClC,QAAQ,IAAI,sBAAsB;AACtC,QAAI,OAAO;AACP,WAAK,aAAa,KAAK;AAAA,IAC3B;AACA,WAAO,CAAC;AAAA,MACJ,CAAC,UAAU,GAAgB;AAAA,MAC3B,CAAC,gBAAgB,GAAU;AAAA,MAC3B,CAAC,sBAAsB,GAAI;AAAA,IAC/B,GAAG,MAAM;AACL,UAAI,YAAY,QAAQ;AACpB,oBAAY,KAAK;AAAA,MACrB;AACA,aAAO;AAAA,QACH;AAAA,QACA,MAAM;AACF,cAAI,oCAAoC,aAAa,EAAE,UAAW,KAAK,CAAC;AAAA,QAC5E;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,cAAc,QAAQ,MAAM;AACxB,UAAM,cAAc,KAAK,GAAG,IAAI;AAChC,QAAI,uBAAuB;AAAA,EAC/B;AAAA,EACA,mBAAmB,QAAQ,MAAM;AAC7B,UAAM,mBAAmB,KAAK,GAAG,IAAI;AACrC,QAAI,uBAAuB;AAAA,EAC/B;AAAA,EACA,mBAAmB,QAAQ,MAAM;AAC7B,UAAM,mBAAmB,KAAK,GAAG,IAAI;AACrC,QAAI,uBAAuB;AAAA,EAC/B;AAAA,EACA,gBAAgB,QAAQ,MAAS;AAC7B,UAAM,gBAAgB,KAAK,GAAG,IAAI;AAClC,QAAI,uBAAuB;AAAA,EAC/B;AAAA,EACA,mBAAmB,QAAQ,MAAM;AAC7B,UAAM,mBAAmB,KAAK,GAAG,IAAI;AACrC,QAAI,uBAAuB;AAAA,EAC/B;AAAA,EACA,mBAAmB,QAAQ,MAAM;AAC7B,UAAM,mBAAmB,KAAK,GAAG,IAAI;AACrC,QAAI,uBAAuB;AAAA,EAC/B;AAAA,EACA,iBAAiB,QAAQ,MAAQ;AAC7B,UAAM,iBAAiB,KAAK,GAAG,IAAI;AACnC,QAAI,uBAAuB;AAAA,EAC/B;AACJ;AAMA,IAAM,qBAAqB,IAAI,wBAAwB;AACvD,IAAO,6BAAQ;AACf,iBAAS,iBAAiB,sBAAsB,kBAAkB;;;ACjJlE,IAAME,2BAA0B,MAAM;AAClC,QAAM,IAAI,MAAM,uBAAuB;AAC3C;AAMA,IAAqB,aAArB,cAAwC,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMzC,IAAI,OAAO;AACP,WAAO,KAAK,YAAY;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO;AACH,IAAAA,yBAAwB;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO;AACH,IAAAA,yBAAwB;AAAA,EAC5B;AACJ;AACA,WAAW,SAAS;;;AC9BpB,IACI,aAAgB,OAAO,YAAY;AADvC,IAEI,gBAAgB,OAAO,eAAe;AAF1C,IAGI,gBAAgB,OAAO,eAAe;AAK1C,IAAqB,eAArB,cAA0C,WAAW;AAAA,EACjD,WAAW,gBAAgB;AACvB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQH,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASR,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASV,SAAU;AAAA,MACV,qBAAsB;AAAA,IAC1B;AAAA,EACJ;AAAA,EACA,IAAI,OAAO;AACP,WAAO;AAAA,EACX;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAK,UAAU;AAAA,EAC1B;AAAA,EACA,IAAI,MAAM,OAAO;AACb,SAAK,UAAU,IAAI;AAAA,EACvB;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,aAAa;AAAA,EAC7B;AAAA,EACA,IAAI,QAAQ,OAAO;AACf,SAAK,aAAa,IAAI,EAAE,GAAG,MAAM;AAAA,EACrC;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,aAAa;AAAA,EAC7B;AAAA,EACA,IAAI,QAAQ,OAAO;AACf,SAAK,aAAa,IAAI,EAAE,GAAG,MAAM;AAAA,EACrC;AAAA,EACA,OAAO;AACH,UAAM,EAAE,OAAO,QAAQ,IAAI;AAG3B,QAAI,MAAM,GAAG;AACT,aAAO,OAAO,OAAO,OAAO;AAAA,IAChC;AASA,UAAM,IAAI,SAAS,MAAM,MAAM,MAAM,QAAQ,MAAM,CAAC,CAAC;AAAA,EACzD;AAAA,EACA,OAAO;AACH,UAAM,EAAE,OAAO,QAAQ,IAAI;AAE3B,QAAI,MAAM,GAAG;AACT,aAAO,OAAO,OAAO,OAAO;AAAA,IAChC;AACA,UAAM,IAAI,SAAS,MAAM,MAAM,MAAM,QAAQ,MAAM,CAAC,CAAC;AAAA,EACzD;AACJ;AACA,aAAa,SAAS;;;ACvFtB,IACI,oBAAoB,OAAO,mBAAmB;AADlD,IAEI,oBAAoB,OAAO,mBAAmB;AAFlD,IAGI,oBAAoB,OAAO,mBAAmB;AAHlD,IAII,cAAoB,OAAO,cAAc;AAJ7C,IAKI,eAAoB,OAAO,cAAc;AAK7C,IAAqB,oBAArB,cAA+C,WAAW;AAAA,EACtD,WAAW,gBAAgB;AACvB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQH,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQd,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQd,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASd,mBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASpB,SAAU;AAAA,IACd;AAAA,EACJ;AAAA,EACA,IAAI,OAAO;AACP,WAAO;AAAA,EACX;AAAA,EACA,IAAI,cAAc;AACd,WAAO,KAAK,iBAAiB;AAAA,EACjC;AAAA,EACA,IAAI,YAAY,OAAO;AACnB,SAAK,iBAAiB,IAAI;AAAA,EAC9B;AAAA,EACA,IAAI,cAAc;AACd,WAAO,KAAK,iBAAiB;AAAA,EACjC;AAAA,EACA,IAAI,YAAY,QAAQ;AACpB,SAAK,iBAAiB,IAAI,OAAO,MAAM,CAAC;AAAA,EAC5C;AAAA,EACA,IAAI,cAAc;AACd,WAAO,KAAK,iBAAiB;AAAA,EACjC;AAAA,EACA,IAAI,YAAY,OAAO;AACnB,SAAK,iBAAiB,IAAI;AAAA,EAC9B;AAAA,EACA,IAAI,oBAAoB;AACpB,WAAO,KAAK,WAAW;AAAA,EAC3B;AAAA,EACA,IAAI,kBAAkB,MAAM;AACxB,SAAK,WAAW,IAAI;AAAA,EACxB;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,YAAY;AAAA,EAC5B;AAAA,EACA,IAAI,QAAQ,KAAK;AACb,SAAK,YAAY,IAAI;AAAA,EACzB;AAAA,EACA,OAAO;AACH,UACI,EAAE,aAAa,SAAS,YAAY,IAAI,MACxC,eAAe,oBAAI,IAAI,GACvB,aAAa,oBAAI,IAAI;AACzB,eAAW,cAAc,aAAa;AAClC,YAAM,MAAM,QAAQ,IAAI,UAAU;AAClC,UAAI,CAAC,KAAK;AACN,mBAAW,IAAI,UAAU;AAAA,MAC7B,OACK;AACD,YAAI,eAAe,aAAa,IAAI,IAAI,MAAM;AAC9C,YAAI,CAAC,cAAc;AACf,yBAAe,EAAE,WAAY,CAAC,GAAG,UAAW,CAAC,GAAG,uBAAwB,CAAC,EAAE;AAC3E,uBAAa,IAAI,IAAI,QAAQ,YAAY;AAAA,QAC7C;AACA,YAAI,IAAI,WAAW,aAAa;AAC5B,cAAI,IAAI,QAAQ,WAAW,aAAa;AACpC,yBAAa,UAAU,KAAK,EAAE,QAAS,IAAI,QAAQ,OAAQ,YAAY,OAAQ,IAAI,QAAQ,EAAE,CAAC;AAAA,UAClG,OACK;AACD,yBAAa,SAAS,KAAK,EAAE,QAAS,IAAI,QAAQ,OAAQ,YAAY,OAAQ,IAAI,MAAM,CAAC;AAAA,UAC7F;AAAA,QACJ,OACK;AACD,uBAAa,sBAAsB,KAAK,EAAE,QAAS,IAAI,QAAQ,OAAQ,YAAY,OAAQ,IAAI,MAAM,CAAC;AAAA,QAC1G;AAAA,MACJ;AAAA,IACJ;AACA,eAAW,QAAQ,WAAS,MAAM,OAAO,YAAY,KAAK,CAAC;AAG3D,eAAW,gBAAgB,aAAa,OAAO,GAAG;AAC9C,YAAM,EAAE,WAAW,UAAU,sBAAsB,IAAI;AACvD,4BAAsB,QAAQ,UAAQ;AAClC,aAAK,OAAO,YAAY,KAAK,OAAO,KAAK,KAAK;AAAA,MAClD,CAAC;AACD,eAAS,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AACzC,gBAAU,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAAA,IAC9C;AAEA,eAAW,gBAAgB,aAAa,OAAO,GAAG;AAC9C,YAAM,EAAE,WAAW,SAAS,IAAI;AAChC,eAAS,QAAQ,UAAQ;AACrB,aAAK,OAAO,YAAY,KAAK,OAAO,KAAK,KAAK;AAAA,MAClD,CAAC;AACD,gBAAU,QAAQ,UAAQ;AACtB,aAAK,OAAO,YAAY,KAAK,OAAO,KAAK,KAAK;AAAA,MAClD,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EACA,OAAO;AAjJX,QAAAC,KAAA;AAkJQ,UACI,EAAE,aAAa,aAAa,aAAa,kBAAkB,IAAI,MAC/D,gBAAeA,MAAA,YAAY,aAAZ,gBAAAA,IAAuB;AAC1C,gBAAY,YAAY,aAAa,cAAc,OAAO;AAAA,MACtD,mBAAoB,iDAAqB,kDAAc,oBAAd,mBAA+B;AAAA,IAC5E,CAAC;AAAA,EACL;AACJ;AACA,kBAAkB,SAAS;;;ACtJ3B,IACIC,qBAAoB,OAAO,mBAAmB;AADlD,IAEIC,qBAAoB,OAAO,mBAAmB;AAFlD,IAGIC,gBAAoB,OAAO,cAAc;AAK7C,IAAqB,oBAArB,cAA+C,WAAW;AAAA,EACtD,WAAW,gBAAgB;AACvB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQH,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQd,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASd,SAAU;AAAA,IACd;AAAA,EACJ;AAAA,EACA,IAAI,OAAO;AACP,WAAO;AAAA,EACX;AAAA,EACA,IAAI,cAAc;AACd,WAAO,KAAKF,kBAAiB;AAAA,EACjC;AAAA,EACA,IAAI,YAAY,OAAO;AACnB,SAAKA,kBAAiB,IAAI;AAAA,EAC9B;AAAA,EACA,IAAI,cAAc;AACd,WAAO,KAAKC,kBAAiB;AAAA,EACjC;AAAA,EACA,IAAI,YAAY,QAAQ;AACpB,SAAKA,kBAAiB,IAAI,OAAO,MAAM,CAAC;AAAA,EAC5C;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAKC,aAAY;AAAA,EAC5B;AAAA,EACA,IAAI,QAAQ,KAAK;AACb,SAAKA,aAAY,IAAI;AAAA,EACzB;AAAA,EACA,OAAO;AACH,UAAM,EAAE,aAAa,SAAS,YAAY,IAAI;AAG9C,gBAAY,KAAK,CAAC,KAAK,QAAQ;AAC3B,YACI,WAAW,QAAQ,IAAI,GAAG,EAAE,aAC5B,WAAW,QAAQ,IAAI,GAAG,EAAE;AAChC,aAAO,WAAW;AAAA,IACtB,CAAC;AAED,gBAAY,QAAQ,OAAK;AACrB,YAAM,MAAM,QAAQ,IAAI,CAAC;AACzB,kBAAY,YAAY,GAAG,IAAI,aAAa,QAAW,EAAE,oBAAqB,IAAI,mBAAmB,CAAC;AAAA,IAC1G,CAAC;AAAA,EACL;AAAA,EACA,OAAO;AACH,SAAK,YAAY,YAAY,KAAK,WAAW;AAAA,EACjD;AACJ;AACA,kBAAkB,SAAS;;;AC9E3B,IACI,aAAkB,OAAO,YAAY;AADzC,IAEI,kBAAkB,OAAO,iBAAiB;AAK9C,IAAqB,YAArB,cAAuC,WAAW;AAAA,EAC9C,WAAW,gBAAgB;AACvB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQH,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQR,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQZ,QAAS;AAAA,IACb;AAAA,EACJ;AAAA,EACA,IAAI,OAAO;AACP,WAAO;AAAA,EACX;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAK,UAAU;AAAA,EAC1B;AAAA,EACA,IAAI,MAAM,OAAO;AACb,SAAK,UAAU,IAAI;AAAA,EACvB;AAAA,EACA,IAAI,YAAY;AACZ,WAAO,KAAK,eAAe;AAAA,EAC/B;AAAA,EACA,IAAI,UAAU,MAAM;AAChB,SAAK,eAAe,IAAI,KAAK,MAAM,CAAC;AAAA,EACxC;AAAA,EACA,OAAO;AACH,SAAK,MAAM,OAAO,KAAK,WAAW,KAAK,MAAM;AAAA,EACjD;AAAA,EACA,OAAO;AACH,SAAK,MAAM,IAAI,KAAK,WAAW,KAAK,MAAM;AAAA,EAC9C;AACJ;AACA,UAAU,SAAS;;;AC1DnB,IACIC,cAAoB,OAAO,YAAY;AAD3C,IAEIC,mBAAoB,OAAO,iBAAiB;AAFhD,IAGIC,qBAAoB,OAAO,mBAAmB;AAHlD,IAIIC,gBAAoB,OAAO,cAAc;AAK7C,IAAqB,eAArB,cAA0C,WAAW;AAAA,EACjD,WAAW,gBAAgB;AACvB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQH,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQR,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQZ,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUd,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQV,QAAS;AAAA,IACb;AAAA,EACJ;AAAA,EACA,IAAI,OAAO;AACP,WAAO;AAAA,EACX;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAKH,WAAU;AAAA,EAC1B;AAAA,EACA,IAAI,MAAM,OAAO;AACb,SAAKA,WAAU,IAAI;AAAA,EACvB;AAAA,EACA,IAAI,YAAY;AACZ,WAAO,KAAKC,gBAAe;AAAA,EAC/B;AAAA,EACA,IAAI,UAAU,MAAM;AAChB,SAAKA,gBAAe,IAAI,KAAK,MAAM,CAAC;AAAA,EACxC;AAAA,EACA,IAAI,cAAc;AACd,WAAO,KAAKC,kBAAiB;AAAA,EACjC;AAAA,EACA,IAAI,YAAY,OAAO;AACnB,SAAKA,kBAAiB,IAAI;AAAA,EAC9B;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAKC,aAAY;AAAA,EAC5B;AAAA,EACA,IAAI,QAAQ,SAAS;AACjB,SAAKA,aAAY,IAAI;AAAA,EACzB;AAAA,EACA,OAAO;AACH,UAAM,EAAE,OAAO,WAAW,SAAS,OAAO,IAAI;AAG9C,cAAU,KAAK,CAAC,KAAK,QAAQ;AACzB,YACI,WAAW,QAAQ,IAAI,GAAG,GAC1B,WAAW,QAAQ,IAAI,GAAG;AAC9B,aAAO,aAAa,UAAa,aAAa,SAAY,WAAW,WAAW;AAAA,IACpF,CAAC;AACD,cAAU,QAAQ,OAAK;AACnB,YAAM,QAAQ,QAAQ,IAAI,CAAC;AAE3B,QAAE,oBAAoB;AACtB,UAAI,UAAU,QAAW;AAErB,cAAM,OAAO,OAAO,GAAG,MAAM;AAAA,MACjC,OACK;AAED,cAAM,OAAO,GAAG,MAAM;AAAA,MAC1B;AACA,QAAE,oBAAoB;AAAA,IAC1B,CAAC;AAAA,EACL;AAAA,EACA,OAAO;AACH,UAAM,KAAK;AACX,OAAG,MAAM,OAAO,GAAG,aAAa,GAAG,WAAW,GAAG,MAAM;AAAA,EAC3D;AACJ;AACA,aAAa,SAAS;;;ACjHtB,IACIC,cAAkB,OAAO,YAAY;AADzC,IAEIC,mBAAkB,OAAO,iBAAiB;AAF9C,IAGIC,gBAAkB,OAAO,cAAc;AAK3C,IAAqB,eAArB,cAA0C,WAAW;AAAA,EACjD,WAAW,gBAAgB;AACvB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQH,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQR,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQZ,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQV,QAAS;AAAA,IACb;AAAA,EACJ;AAAA,EACA,IAAI,OAAO;AACP,WAAO;AAAA,EACX;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAKF,WAAU;AAAA,EAC1B;AAAA,EACA,IAAI,MAAM,OAAO;AACb,SAAKA,WAAU,IAAI;AAAA,EACvB;AAAA,EACA,IAAI,YAAY;AACZ,WAAO,KAAKC,gBAAe;AAAA,EAC/B;AAAA,EACA,IAAI,UAAU,MAAM;AAChB,SAAKA,gBAAe,IAAI,KAAK,MAAM,CAAC;AAAA,EACxC;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAKC,aAAY;AAAA,EAC5B;AAAA,EACA,IAAI,QAAQ,SAAS;AACjB,SAAKA,aAAY,IAAI;AAAA,EACzB;AAAA,EACA,OAAO;AACH,UAAM,EAAE,OAAO,SAAS,WAAW,OAAO,IAAI;AAG9C,cAAU,KAAK,CAAC,KAAK,QAAQ;AACzB,YACI,WAAW,QAAQ,IAAI,GAAG,GAC1B,WAAW,QAAQ,IAAI,GAAG;AAE9B,aAAO,WAAW;AAAA,IACtB,CAAC;AACD,cAAU,QAAQ,OAAK;AACnB,YAAM,QAAQ,QAAQ,IAAI,CAAC;AAE3B,YAAM,OAAO,OAAO,GAAG,MAAM;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EACA,OAAO;AACH,SAAK,MAAM,OAAO,KAAK,WAAW,KAAK,MAAM;AAAA,EACjD;AACJ;AACA,aAAa,SAAS;;;ACvFtB,IACIC,cAAmB,OAAO,YAAY;AAD1C,IAEI,mBAAmB,OAAO,kBAAkB;AAKhD,IAAqB,kBAArB,cAA6C,WAAW;AAAA,EACpD,WAAW,gBAAgB;AACvB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQH,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQR,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQb,QAAS;AAAA,IACb;AAAA,EACJ;AAAA,EACA,IAAI,OAAO;AACP,WAAO;AAAA,EACX;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAKA,WAAU;AAAA,EAC1B;AAAA,EACA,IAAI,MAAM,OAAO;AACb,SAAKA,WAAU,IAAI;AAAA,EACvB;AAAA,EACA,IAAI,aAAa;AACb,WAAO,KAAK,gBAAgB;AAAA,EAChC;AAAA,EACA,IAAI,WAAW,SAAS;AACpB,SAAK,gBAAgB,IAAI,QAAQ,MAAM,CAAC;AAAA,EAC5C;AAAA,EACA,OAAO;AACH,UAAM,EAAE,OAAO,YAAY,OAAO,IAAI;AACtC,UAAM,IAAI,YAAY,MAAM;AAAA,EAChC;AAAA,EACA,OAAO;AACH,SAAK,MAAM,UAAU,KAAK,MAAM;AAAA,EACpC;AACJ;AACA,gBAAgB,SAAS;;;AC1ClB,IAAM,wBAAwB,CAAC,OAAO,SAAS,SAAS,wBAAwB;AACnF,SAAO,IAAI,aAAa;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AACL;AACO,IAAM,6BAA6B,CAAC,aAAa,aAAa,aAAa,SAAS,sBAAsB;AAC7G,SAAO,IAAI,kBAAkB;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AACL;AACO,IAAM,6BAA6B,CAAC,aAAa,aAAa,YAAY;AAC7E,SAAO,IAAI,kBAAkB;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AACL;AACO,IAAM,0BAA0B,CAAC,OAAO,WAAW,WAAW;AACjE,SAAO,IAAI,UAAU;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AACL;AACO,IAAM,6BAA6B,CAAC,OAAO,aAAa,WAAW,SAAS,WAAW;AAC1F,SAAO,IAAI,aAAa;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AACL;AACO,IAAM,6BAA6B,CAAC,OAAO,WAAW,SAAS,WAAW;AAC7E,SAAO,IAAI,aAAa;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AACL;AACO,IAAM,2BAA2B,CAAC,OAAO,YAAY,WAAW;AACnE,SAAO,IAAI,gBAAgB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AACL;AACA,IAAM,kBAAkB,CAAC,KAAK,UAAU,SAAS;AAC7C,QACI,WAAW,IAAI,OACf,WAAW,MAAM,KAAK,IAAI,UAAU,GAAG,KAAK,GAAG,IAAI;AACvD,MAAI,OAAO,aAAa,UAAU;AAC9B,QAAI,UAAU,IAAI,iBAAS,gBAAgB,QAAQ;AAAA,EACvD,WACS,oBAAoB,WAAW;AACpC,QAAI,UAAU,IAAI;AAAA,EACtB,WACS,MAAM,QAAQ,QAAQ,GAAG;AAC9B,UAAM,CAAC,OAAO,IAAI,IAAI;AACtB,QAAI,OAAO,UAAU,UAAU;AAC3B,UAAI,UAAU,IAAI,iBAAS,gBAAgB,KAAK;AAAA,IACpD,WACS,iBAAiB,WAAW;AACjC,UAAI,UAAU,IAAI;AAAA,IACtB,WACS,SAAS,OAAO,UAAU,UAAU;AACzC,YAAM,OAAO,OAAO,KAAK,KAAK;AAC9B,UAAI,UAAU,IAAI,iBAAS,gBAAgB,IAAI,UAAU,CAAC;AAAA,IAC9D;AACA,QAAI,OAAO,SAAS,YAAY;AAC5B,sBAAgB,KAAK,MAAM,GAAG,IAAI;AAAA,IACtC;AAAA,EACJ,WACS,YAAY,OAAO,aAAa,UAAU;AAC/C,UAAM,OAAO,OAAO,KAAK,QAAQ;AACjC,QAAI,UAAU,IAAI,iBAAS,gBAAgB,IAAI,UAAU,CAAC;AAAA,EAC9D;AACA,MAAI,aAAa,sBAAc,aAAa,2BAAmB,aAAa,sBAAc,aAAa,yBAAiB;AACpH,QAAI,QAAQ,OAAO;AAAA,EACvB;AACJ;AAyEA,IAAqB,uBAArB,cAAkD,eAAO,IAAI,EAAE;AAAA,EAC3D,WAAW,gBAAgB;AACvB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOH,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcX,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOb,kCAAmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,qBAAsB;AAAA,IAC1B;AAAA,EACJ;AAAA,EACA,aAAa,MAAM;AACf,WAAO,OAAO,MAAM;AAAA,MAChB,CAAC,UAAU,GAAgB;AAAA,MAC3B,CAAC,WAAW,GAAe,CAAC;AAAA,MAC5B,CAAC,UAAU,GAAgB,CAAC;AAAA,MAC5B,CAAC,QAAQ,GAAkB;AAAA,MAC3B,CAAC,gBAAgB,GAAU;AAAA,MAC3B,CAAC,sBAAsB,GAAI;AAAA,MAC3B,CAAC,gBAAgB,GAAU;AAAA,MAC3B,CAAC,iBAAiB,GAAS;AAAA,MAC3B,qBAA2B,CAAC;AAAA,IAChC,CAAC;AACD,UAAM,UAAU,GAAG,IAAI;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,QAAQ;AACR,WAAO,KAAK,UAAU;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,WAAW;AACX,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,SAAS;AACT,WAAO,KAAK,UAAU,EAAE;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,SAAS;AACT,WAAO,MAAM,KAAK,KAAK,WAAW,CAAC;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,OAAO;AACZ,WAAO,KAAK,WAAW,EAAE,SAAS,KAAK;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS,OAAO;AACZ,QAAI,CAAC,KAAK,SAAS,KAAK,GAAG;AACvB,WAAK,WAAW,EAAE,KAAK,KAAK;AAC5B,YAAM,MAAM;AACZ,YAAM,QAAQ,WAAS,MAAM,MAAM,IAAI;AAGvC,UAAI,MAAM,QAAQ;AACd,cAAM,SAAS,MAAM;AAAA,MACzB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,OAAO;AACf,QAAI,KAAK,SAAS,KAAK,GAAG;AACtB,WAAK,WAAW,IAAI,KAAK,WAAW,EAAE,OAAO,OAAK,MAAM,KAAK;AAC7D,YAAM,MAAM;AACZ,YAAM,QAAQ,WAAS,MAAM,MAAM,IAAI;AAAA,IAC3C;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAaC,KAAI;AACb,SAAK,WAAW,EAAE,QAAQ,OAAKA,IAAG,GAAG,EAAE,EAAE,CAAC;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,WAAW;AACX,WAAO,KAAK,UAAU;AAAA,EAC1B;AAAA,EACA,IAAI,SAAS,KAAK;AACd,UAAM,KAAK;AACX,QAAI,GAAG,aAAa,KAAK;AACrB,UAAI,KAAK;AACL,wBAAgB,IAAI,GAAG,MAAM,WAAW,EAAE;AAAA,MAC9C,OACK;AACD,wBAAgB,IAAI,GAAG,MAAM,UAAU,EAAE;AAAA,MAC7C;AACA,SAAG,QAAQ,eAAe,EAAE,UAAW,IAAI,CAAC;AAQ5C,SAAG,QAAQ,YAAY,EAAE,UAAW,IAAI,CAAC;AAAA,IAC7C;AAAA,EACJ;AAAA,EACA,IAAI,UAAU;AACV,WAAO,CAAC,KAAK;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS;AACL,SAAK,WAAW;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAIA,UAAU;AACN,SAAK,WAAW;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,UAAU;AACV,WAAO,KAAK,UAAU,sBAAc,KAAK,UAAU;AAAA,EACvD;AAAA,EACA,mBAAmB;AACf,WAAO,KAAK,MAAM,SAAS,KAAK;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,cAAc;AACd,WAAO,KAAK,UAAU,0BAAkB,KAAK,UAAU;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,kBAAkB;AAClB,WAAO,KAAK,iBAAiB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,aAAa;AACb,WAAO,KAAK,gBAAgB;AAAA,EAChC;AAAA,EACA,IAAI,WAAW,OAAO;AAClB,UAAM,KAAK;AACX,QAAI,GAAG,cAAc,OAAO;AACxB,UAAI,OAAO;AACP,wBAAgB,IAAI,GAAG,MAAM,gBAAgB,EAAE;AAAA,MACnD,OACK;AACD,wBAAgB,IAAI,GAAG,MAAM,iBAAiB,EAAE;AAAA,MACpD;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,iBAAiB,QAAQ,MAAM;AAC3B,oBAAgB,MAAM,KAAK,MAAM,oBAAoB,KAAK;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAgB,QAAQ,MAAM;AAC1B,oBAAgB,MAAM,KAAK,MAAM,mBAAmB,KAAK;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,yBAAyB;AACrB,oBAAgB,MAAM,KAAK,MAAM,wBAAwB;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA,EAIA,oBAAoB;AAChB,oBAAgB,MAAM,KAAK,MAAM,mBAAmB;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,cAAc;AACd,WAAO,KAAK,gBAAgB;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,QAAQ;AACR,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK;AAAA,EAC9C;AAAA,EACA,IAAI,WAAW;AACX,WAAO,KAAK,UAAU;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,cAAc;AACd,WAAO,KAAK,UAAU,0BAAkB,KAAK;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,UAAU;AACV,WAAO,KAAK,MAAM,QAAQ,IAAI;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,UAAU;AACV,WAAO,KAAK,MAAM,QAAQ,IAAI;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KAAK,QAAQ,GAAG;AAClB,QAAI,CAAC,KAAK,SAAS;AACf,YAAM,KAAK,iBAAiB;AAAA,IAChC;AACA,oBAAgB,MAAM,KAAK,MAAM,QAAQ,KAAK;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU;AACZ,QAAI,CAAC,KAAK,SAAS;AACf,YAAM,KAAK,iBAAiB;AAAA,IAChC;AACA,SAAK,KAAK,KAAK,MAAM;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,KAAK,QAAQ,GAAG;AAClB,QAAI,CAAC,KAAK,SAAS;AACf,YAAM,KAAK,iBAAiB;AAAA,IAChC;AACA,oBAAgB,MAAM,KAAK,MAAM,QAAQ,KAAK;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU;AACZ,QAAI,CAAC,KAAK,SAAS;AACf,YAAM,KAAK,iBAAiB;AAAA,IAChC;AACA,SAAK,KAAK,KAAK,MAAM;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAIA,WAAwB,UAAU,EAAE,MAAO,MAAM,MAAO,KAAK,GAAG;AAC5D,oBAAgB,MAAM,KAAK,MAAM,cAAc,OAAO;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA,EAIA,iBAAiB;AACb,SAAK,WAAW,EAAE,MAAO,KAAK,CAAC;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAIA,iBAAiB;AACb,SAAK,WAAW,EAAE,MAAO,KAAK,CAAC;AAAA,EACnC;AAAA,EACA,qCAAqC,aAAa;AAC9C,SAAK,aAAa,CAAC,UAAO;AAzlBlC,UAAAC;AAylBqC,cAAAA,MAAA,MAAM,wBAAN,gBAAAA,IAAA,YAA4B,MAAM;AAAA,KAAY;AAQ3E,SAAK,QAAQ,kBAAkB,EAAE,KAAM,MAAM,YAAY,CAAC;AAAA,EAC9D;AAAA,EACA,oCAAoC,aAAa,QAAQ;AACrD,SAAK,aAAa,CAAC,UAAO;AApmBlC,UAAAA;AAomBqC,cAAAA,MAAA,MAAM,uBAAN,gBAAAA,IAAA,YAA2B,MAAM,aAAa;AAAA,KAAO;AAYlF,SAAK,QAAQ,iBAAiB,EAAE,KAAM,MAAM,aAAa,OAAO,CAAC;AAAA,EACrE;AAAA,EACA,uCAAuC;AACnC,SAAK,aAAa,CAAC,UAAO;AAnnBlC,UAAAA;AAmnBqC,cAAAA,MAAA,MAAM,wBAAN,gBAAAA,IAAA,YAA4B;AAAA,KAAK;AAO9D,SAAK,QAAQ,kBAAkB,EAAE,KAAM,KAAK,CAAC;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,oCAAoC,EAAE,OAAO,aAAa,GAAG;AACzD,SAAK,aAAa,CAAC,UAAO;AAjoBlC,UAAAA;AAioBqC,cAAAA,MAAA,MAAM,uBAAN,gBAAAA,IAAA,YAA2B;AAAA,KAAK;AAO7D,SAAK,QAAQ,iBAAiB,EAAE,KAAM,MAAM,OAAO,aAAa,CAAC;AAAA,EACrE;AAAA,EACA,4BAA4B,SAAS;AACjC,SAAK,aAAa,CAAC,UAAO;AA3oBlC,UAAAA;AA2oBqC,cAAAA,MAAA,MAAM,oBAAN,gBAAAA,IAAA,YAAwB,MAAM;AAAA,KAAQ;AAOnE,SAAK,QAAQ,cAAc,EAAE,KAAM,MAAM,QAAQ,CAAC;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,cAAc,OAAO,SAAS,SAAS,qBAAqB;AACxD,oBAAgB,MAAM,KAAK,MAAM,eAAe,OAAO,SAAS,SAAS,mBAAmB;AAAA,EAChG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,mBAAmB,aAAa,OAAO,aAAa,SAAS,mBAAmB;AAC5E,oBAAgB,MAAM,KAAK,MAAM,oBAAoB,aAAa,OAAO,aAAa,SAAS,iBAAiB;AAAA,EACpH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,mBAAmB,aAAa,aAAa,SAAS;AAClD,oBAAgB,MAAM,KAAK,MAAM,oBAAoB,aAAa,aAAa,OAAO;AAAA,EAC1F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,gBAAgB,OAAO,QAAQ,QAAQ;AACnC,oBAAgB,MAAM,KAAK,MAAM,iBAAiB,OAAO,QAAQ,MAAM;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,mBAAmB,OAAO,OAAO,QAAQ,SAAS,QAAQ;AACtD,oBAAgB,MAAM,KAAK,MAAM,oBAAoB,OAAO,OAAO,QAAQ,SAAS,MAAM;AAAA,EAC9F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,mBAAmB,OAAO,QAAQ,SAAS,QAAQ;AAC/C,oBAAgB,MAAM,KAAK,MAAM,oBAAoB,OAAO,QAAQ,SAAS,MAAM;AAAA,EACvF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,iBAAiB,OAAO,YAAY,QAAQ;AACxC,oBAAgB,MAAM,KAAK,MAAM,kBAAkB,OAAO,YAAY,MAAM;AAAA,EAChF;AAAA;AAAA,EAEA,eAAe,OAAO;AAClB,UAAM,KAAK;AACX,QAAI,GAAG,SAAS;AACZ,UAAI,MAAM,UAAU;AAChB,YAAI,GAAG,SAAS;AACZ,gBAAM,eAAe;AACrB,aAAG,KAAK;AAAA,QACZ;AAAA,MACJ,WACS,GAAG,SAAS;AACjB,cAAM,eAAe;AACrB,WAAG,KAAK;AAAA,MACZ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,QAAQ;AACJ,UAAM,KAAK;AACX,QAAI,GAAG,aAAa;AAChB,YAAM,KAAK,SAAS,WAAW,iCAAiC;AAChE,SAAG,oBAAoB,EAAE,IAAI,GAAG;AAChC,SAAG,kBAAkB;AACrB,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EACA,WAAW,IAAI;AACX,UACI,KAAc,MACd,cAAc,GAAG,oBAAoB,EAAE;AAC3C,OAAG,iBAAiB,IAAI;AACxB,QAAI,aAAa;AACb,SAAG,iBAAiB,YAAY,KAAK;AACrC,kBAAY,KAAK;AACjB,aAAO,GAAG,oBAAoB,EAAE;AAAA,IACpC;AACA,OAAG,iBAAiB,IAAI;AAAA,EAC5B;AACJ;AACA,qBAAqB,SAAS;;;ACtwB9B,IAAqB,YAArB,MAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO3B,OAAO,WAAW,SAAS,gBAAgB,SAAS,MAAM;AACtD,UACI,aAAa,KAAK,cAAc,aAAa,GAC7C,WAAa,WAAW,SAAS;AACrC,eAAW,WAAW,SAAS,CAAC;AAEhC,QAAI,WAAW,SAAS,SAAS,UAAU;AACvC,aAAO,WAAW,SAAS,CAAC;AAAA,IAChC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,SAAS,UAAU;AACtB,QAAI;AACJ,UAAM,OAAO,OAAO,aAAa;AAIjC,UAAM,UAAU,KAAK,KAAK,SAAS,KAAK,iBAAiB,uCAAuC,GAAG,aAAW;AAC1G,eAAS,MAAM,UAAU,KAAK,KAAK,QAAQ,MAAM,SAAS,QAAQ,MAAM,UAAU,OAAK;AACnF,eAAO,OAAO,SAAS,CAAC,IAAI,EAAE,iBAAiB;AAAA,MACnD,CAAC;AACD,UAAI,QAAQ;AACR,eAAO;AAAA,MACX;AAAA,IACJ,CAAC;AACD,WAAO;AAAA,EACX;AAAA,EACA,OAAO,cAAc,gBAAgB,SAAS,MAAM;AAChD,QAAI,CAAC,cAAc,oBAAoB;AACnC,oBAAc,qBAAqB,UAAU,cAAc;AAAA,QACvD,KAAS;AAAA,QACT,IAAS;AAAA,QACT,MAAS;AAAA,QACT,QAAS;AAAA,MACb,CAAC,EAAE;AAAA,IACP;AACA,WAAO,cAAc;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,gBAAgB;AACnB,WAAO,iBAAiB,SAAS,eAAe,EAAE,iBAAiB,mBAAmB,EAAE,QAAQ,UAAU,EAAE;AAAA,EAChH;AACJ;AACA,UAAU,SAAS;;;AChEnB,IACIC,cAAwB,MAAM,UAAU;AAD5C,IAEIC,cAAwB,OAAO,OAAO,CAAC,CAAC;AAF5C,IAGIC,eAAwB,OAAO,OAAO,CAAC,CAAC;AAH5C,IAIIC,UAAwB;AAJ5B,IAKI,EAAE,gBAAAC,gBAAe,IAAO;AAL5B,IAMI,EAAE,UAAAC,UAAS,IAAa,OAAO;AANnC,IAOI,EAAE,SAAS,UAAAC,UAAS,IAAI;AAP5B,IASI,sBAAsB;AAAA,EAClB,QAAc;AAAA,EACd,aAAc;AAAA,EACd,IAAc;AAAA,EACd,aAAc;AAClB;AAdJ,IAeI,2BAA2B,OAAO;AAAA,EAC9B,QAAY;AAAA,EACZ,WAAY,oBAAI,IAAI;AACxB;AAlBJ,IAmBI,UAAU;AAAA,EACN,OAAY;AAAA,EACZ,WAAY;AAAA,EACZ,WAAY;AAChB;AAvBJ,IAwBI,cAAc;AAAA,EACV,QAAW;AAAA,EACX,SAAW;AAAA,EACX,UAAW;AAAA,EACX,QAAW;AAAA;AAAA,EAEX,QAAW;AAAA,EACX,QAAW;AAAA;AAEf;AAjCJ,IAmCI,uBAAuB;AAAA,EACnB,KAAiB;AAAA,EACjB,MAAiB;AAAA,EACjB,MAAiB;AAAA,EACjB,UAAiB;AAAA,EACjB,SAAiB;AAAA,EACjB,QAAiB;AAAA,EACjB,aAAiB;AAAA,EACjB,IAAiB;AAAA,EACjB,WAAiB;AAAA,EACjB,aAAiB;AAAA,EACjB,eAAiB;AAAA,EACjB,aAAiB;AAAA,EACjB,aAAiB;AAAA,EACjB,WAAiB;AAAA;AAAA,EACjB,YAAiB;AAAA,EACjB,MAAiB;AAAA,EACjB,IAAiB;AAAA,EACjB,cAAiB;AAAA,EACjB,gBAAiB;AACrB;AACJ,IAAM,iBAAiB,CAAC,KAAK,kBAAkB;AAC3C,QACI,eAAgB,eAAe,gBAAgB,cAAc,SAC7D,gBAAgB,cAAc,YAAY;AAC9C,MAAI,eAAe;AACf,QAAI,OAAO,kBAAkB,UAAU;AACnC,YAAM,QAAQ,cAAc,MAAM,GAAG;AACrC,UAAI,CAAC,MAAM,SAAS,GAAG,GAAG;AACtB,cAAM,KAAK,GAAG;AACd,sBAAc,YAAY,IAAI,MAAM,KAAK,GAAG;AAAA,MAChD;AAAA,IACJ,WACS,MAAM,QAAQ,aAAa,GAAG;AACnC,UAAI,CAAC,cAAc,SAAS,GAAG,GAAG;AAC9B,sBAAc,KAAK,GAAG;AAAA,MAC1B;AAAA,IACJ,WACS,cAAc,gBAAgB;AACnC,oBAAc,IAAI,GAAG;AAAA,IACzB,WACS,aAAa,SAAS,aAAa,GAAG;AAC3C,oBAAc,GAAG,IAAI;AAAA,IACzB;AAAA,EACJ;AACJ;AACA,IAAM,sBAAsB,CAAC,KAAK,kBAAkB;AAChD,QACI,eAAgB,eAAe,gBAAgB,cAAc,SAC7D,gBAAgB,cAAc,YAAY;AAC9C,MAAI,eAAe;AACf,QAAI,OAAO,kBAAkB,UAAU;AACnC,YAAM,QAAQ,cAAc,MAAM,GAAG;AACrC,UAAI,MAAM,SAAS,GAAG,GAAG;AACrB,cAAM,OAAO,MAAM,QAAQ,GAAG,GAAG,CAAC;AAClC,sBAAc,YAAY,IAAI,MAAM,KAAK,GAAG;AAAA,MAChD;AAAA,IACJ,WACS,MAAM,QAAQ,aAAa,GAAG;AACnC,UAAI,cAAc,SAAS,GAAG,GAAG;AAC7B,sBAAc,OAAO,cAAc,QAAQ,GAAG,GAAG,CAAC;AAAA,MACtD;AAAA,IACJ,WACS,cAAc,gBAAgB;AACnC,oBAAc,OAAO,GAAG;AAAA,IAC5B,WACS,aAAa,SAAS,aAAa,GAAG;AAC3C,aAAO,cAAc,GAAG;AAAA,IAC5B;AAAA,EACJ;AACJ;AAkCA,IAAqB,UAArB,MAAqB,SAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAezB,OAAO,cAAc,IAAI,KAAK,SAAS,YAAY;AAlKvD,QAAAC;AAmKQ,QAAI,OAAO,KAAK;AACZ,aAAO;AAAA,IACX;AAEA,QAAI,MAAM,MAAM;AACZ,aAAO,OAAO;AAAA,IAClB;AACA,QAAI,CAAC,MAAM,CAAC,KAAK;AACb,aAAO;AAAA,IACX;AACA,UACI,QAAQ,OAAO,IACf,QAAQ,OAAO;AACnB,QAAI,UAAU,SAAS,YAAY,KAAK,GAAG;AACvC,aAAO;AAAA,IACX;AAEA,QAAI,QAAQ,QAAQ,kBAAkB,QAAQ,gBAAgB,oBAAI,IAAI,IAClE,kBAAkB,QAAQ,UAAU,GACpCC,QAAO,GAAG,QAAQ,cAAc,KAAK,aAAa;AAGtD,YAAQ,MAAM,IAAI,EAAE,KAAK,MAAM,IAAI,IAAI,oBAAI,IAAI,CAAC,EAAE,IAAI,EAAE;AACxD,IAAAA,SAAQ,MAAM,IAAI,GAAG;AACrB,QAAIA,WAAU,QAAW;AACrB,MAAAA,SAAQ;AACR,UAAIJ,gBAAe,EAAE,MAAMA,gBAAe,GAAG,KAAK,cAAc,MAAM;AAElE,QAAAI,SAAQ;AAAA,MACZ,WACS,MAAM,QAAQ,EAAE,GAAG;AAExB,YAAI,GAAG;AACP,YAAI,MAAM,IAAI,QAAQ;AAClB,UAAAA,SAAQ;AAAA,QACZ,OACK;AACD,iBAAO,MAAM,GAAG;AACZ,gBAAI,CAAC,SAAQ,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,eAAe,GAAG;AACjE,cAAAA,SAAQ;AACR;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ,OACK;AACD,sBAAc,GAAG;AACjB,uBAAe,2CAAa;AAC5B,YAAI,cAAc;AACd,4BAAkB;AAClB,uBAAa,iBAAiB;AAAA,QAClC;AACA,iBAAS,QAAQ,UAAUN;AAI3B,aAAK,OAAO,KAAK;AACb,cAAI,CAAC,OAAO,GAAG,KAAK,EAAE,OAAO,OAAO,EAAE,cAAc,QAAQ,cAAc;AACtE,YAAAM,SAAQ;AACR;AAAA,UACJ;AAAA,QACJ;AACA,YAAIA,QAAO;AACP,cAAIH,UAAS,KAAK,GAAG,MAAM,iBAAiB;AAExC,YAAAG,SAAQ,GAAG,QAAQ,MAAM,IAAI,QAAQ;AAAA,UACzC,WACS,UAAU,eAAe,EAAE,KAAK,UAAU,eAAe,GAAG,GAAG;AACpE,YAAAA,SAAQ;AAAA,UACZ,OACK;AACD,iBAAK,OAAO,IAAI;AACZ,kBAAI,CAAC,OAAO,GAAG,KAAK,EAAE,cAAc,QAAQ,cAAc;AACtD,oBAAI,EAAE,OAAO,MAAM;AACf,kBAAAA,SAAQ;AACR;AAAA,gBACJ;AACA,sBAAM,GAAG,GAAG;AAaZ,oBAAI,CAAC,SAAQ,cAAc,KAAK,IAAI,GAAG,GAAG,SAAS,eAAe,GAAG;AACjE,kBAAAA,SAAQ;AACR;AAAA,gBACJ;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AACA,UAAI,CAAC,cAAcF,UAAS,EAAE,KAAK,GAAG,WAAW;AAG7C,SAAAC,MAAA,QAAQ,cAAR,gBAAAA,IAAmB,IAAI,GAAG;AAAA,MAC9B;AACA,YAAM,IAAI,KAAKC,MAAK;AAAA,IACxB;AACA,WAAOA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,OAAO,KAAK,SAAS;AA9RzB,QAAAD;AA+RQ,UACI,YAAuB,SACvB,EAAE,SAAS,IAAY,SACvB,UAAuB,qCAAU,OACjC,uBAAuB,yBAAyB;AACpD,QAAI,WAAW,QAAQ,UACnB,GAAG,KAAK,YAAY;AACxB,QAAI,OAAO,aAAa,UAAU;AAC9B,iBAAW,CAAC,QAAQ;AAAA,IACxB;AAKA,cAAU;AAAA,MACN,GAAG;AAAA,MACH;AAAA,IACJ;AACA,QAAI,UAAU;AAEV,eAAS,QAAQ,CAAC;AAClB,UAAI,UAAU;AAGV,aAAK,OAAO,SAAS;AACjB,cAAI,CAAC,SAAS,SAAS,GAAG,GAAG;AACzB,qBAAS,MAAM,GAAG,IAAI,QAAQ,GAAG;AAAA,UACrC;AAAA,QACJ;AAAA,MACJ;AACA,cAAQ,UAAU;AAAA,IACtB;AAGA,cAAU,UAAU,SAAQ,YAAY,SAAS,QAAQ,aAAa;AACtE,QAAI,UAAU;AACV,UAAI,CAAC,UAAU;AACX,mBAAW,OAAO,KAAK,OAAO;AAAA,MAClC;AACA,WAAK,IAAI,GAAG,IAAI,SAAS,QAAQ,EAAE,GAAG;AAClC,cAAM,SAAS,CAAC;AAChB,qBAAa,QAAQ,GAAG;AACxB,YAAI,qBAAqB,UAAU,IAAI,GAAG,KAAK,WAAW,eAAe;AACrE,mBAAS,MAAM,GAAG,IAAI;AAAA,QAC1B,OACK;AACD,0BAAgB,WAAW;AAG3B,WAAAA,MAAA,WAAW,SAAX,gBAAAA,IAAA;AACA,qBAAW,OAAO;AAClB,mBAAS,UAAU,KAAK,YAAY,aAAa;AAAA,QACrD;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,QAAQ;AAAA,EACnB;AAAA,EACA,OAAO,YAAY,SAAS,eAAe;AACvC,UACI,EAAE,WAAW,SAAS,IAAI,SAC1B,EAAE,cAAc,IAAU,eAC1B,gBAA0B,QAAQ,kBAAkB,SAAQ;AAChE,QAAI,CAAC,cAAc,WAAW,eAAe,QAAQ,sBAAsB,QAAQ,UAAU,GAAG;AAC5F,UAAI,WAAW;AAEX,YAAI,CAAC,UAAU,cAAc;AACzB,mBAAQ,eAAe,WAAW,eAAe,OAAO;AACxD,mBAAQ,YAAY,WAAW,aAAa;AAAA,QAChD;AACA,YAAI,CAAC,UAAU,cAAc;AACzB,mBAAQ,aAAa,SAAS,aAAa;AAAA,QAC/C;AAAA,MACJ,OAEK;AACD,sBAAc,YAAY;AAC1B,sBAAc,YAAY;AAAA,MAC9B;AAEA,oBAAc,gBAAgB,GAAE,uCAAW,iBAAgB,iBAAiB,YAAY;AAAA,QACpF,GAAG;AAAA,QACH,UAAW,UAAU;AAAA,MACzB;AACA,aAAO;AAAA,IACX,OACK;AAED,2CAAW;AAAA,QACP,QAAS;AAAA,QACT;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,OAAO,YAAY,WAAW,eAAe;AACzC,UACI,EAAE,cAAc,IAAI,eACpB,aAAoB,cAAc,eAClC,SAAoB,OAAO,KAAK,UAAU,OAAO,GACjD,SAAoB,iBAAiB,cAAc,WAAW,OAAO,KAAK,cAAc,OAAO,GAC/F,QAAoB,YAAY,MAAM,QAAQ,MAAM;AACxD,QAAI,MAAM,GAAG,MAAM;AAEnB,SAAK,IAAI,GAAG,IAAI,MAAM,QAAQ,QAAQ,KAAK;AACvC,aAAO,MAAM,QAAQ,CAAC;AACtB,cAAQ,UAAU,QAAQ,IAAI;AAE9B,UAAI,SAAS,MAAM;AACf,sBAAc,aAAa,QAAQ,aAAa,UAAU,IAAI,CAAC,IAAI,KAAK;AAAA,MAC5E;AAAA,IACJ;AAEA,SAAK,IAAI,GAAG,IAAI,MAAM,OAAO,QAAQ,KAAK;AACtC,aAAO,MAAM,OAAO,CAAC;AACrB,cAAQ,UAAU,QAAQ,IAAI;AAG9B,UAAI,cAAc,SAAS,cAAc,QAAQ,IAAI,GAAG;AACpD,eAAO,QAAQ,aAAa,UAAU,IAAI,CAAC;AAC3C,YAAI,SAAS,MAAM;AACf,wBAAc,gBAAgB,IAAI;AAAA,QACtC,OACK;AACD,wBAAc,aAAa,MAAM,KAAK;AAAA,QAC1C;AAAA,MACJ;AAAA,IACJ;AAEA,SAAK,IAAI,GAAG,IAAI,MAAM,QAAQ,QAAQ,KAAK;AACvC,oBAAc,gBAAgB,QAAQ,aAAa,UAAU,MAAM,QAAQ,CAAC,CAAC,CAAC,EAAE;AAAA,IACpF;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,OAAO,KAAK,eAAe;AAC9B,UAAM,EAAE,cAAc,IAAI;AAC1B,UAAM,aAAa,UAAU,KAAK,OAAO;AACzC,QAAI,QAAQ,CAAAE,SAAO;AACf,oBAAc,UAAU,IAAIA,IAAG;AAC/B,qBAAeA,MAAK,aAAa;AAAA,IACrC,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,UAAU,KAAK,eAAe;AACjC,UAAM,EAAE,cAAc,IAAI;AAC1B,UAAM,aAAa,UAAU,KAAK,OAAO;AACzC,QAAI,QAAQ,CAAAA,SAAO;AACf,oBAAc,UAAU,OAAOA,IAAG;AAClC,0BAAoBA,MAAK,aAAa;AAAA,IAC1C,CAAC;AAAA,EACL;AAAA,EACA,OAAO,cAAc,WAAW,eAAe,eAAe;AAC1D,QAAI,MAAU,UAAU,aAAa,UAAU,OAC3C,UAAU,OACV,GAAG,gBAAgB,GAAG,GAAG,MAAM;AACnC,QAAI,eAAe;AAGf,uBAAiB,aAAa,UAAU,eAAe,OAAO;AAC9D,YAAM,aAAa,UAAU,KAAK,QAAQ;AAC1C,aAAO,aAAa,UAAU,cAAc,aAAa,cAAc,OAAO,QAAQ;AACtF,aAAO,CAAC;AACR,WAAK,IAAI,GAAG,IAAI,eAAe,QAAQ,IAAI,GAAG,EAAE,GAAG;AAC/C,YAAI,eAAe,CAAC;AAEpB,YAAI,IAAI,CAAC,KAAK,EAAE,KAAK,OAAO;AACxB,eAAK,CAAC,IAAI;AACV,eAAK,KAAK,CAAC;AAAA,QACf,OACK;AACD,oBAAU;AAAA,QACd;AAAA,MACJ;AACA,WAAK,KAAK,KAAK;AACX,YAAI,CAAC,KAAK,CAAC,GAAG;AACV,eAAK,KAAK,CAAC;AACX,oBAAU;AAAA,QACd;AAAA,MACJ;AACA,UAAI,CAAC,SAAS;AACV;AAAA,MACJ;AACA,YAAM,KAAK,KAAK,GAAG;AAAA,IACvB,OACK;AACD,YAAM,aAAa,UAAU,GAAG;AAAA,IACpC;AACA,kBAAc,aAAa,SAAS,GAAG;AAAA,EAC3C;AAAA;AAAA,EAEA,OAAO,kBAAkB,WAAW;AAChC,UACI,aAAa,CAAC,GAEd,QAAa,CAAC;AAElB,QAAI,WAAW;AACX,aAAO,KAAK,SAAS,EAAE,QAAQ,UAAQ;AACnC,YAAI,CAAC,qBAAqB,IAAI,GAAG;AAC7B,gBAAM,OAAO,KAAK,YAAY;AAC9B,qBAAW,IAAI,IAAI,UAAU,IAAI;AACjC,gBAAM,KAAK,IAAI;AAAA,QACnB;AAAA,MACJ,CAAC;AAAA,IACL;AACA,WAAO,EAAE,YAAY,MAAM;AAAA,EAC/B;AAAA,EACA,OAAO,eAAe,WAAW,eAAe,SAAS;AACrD,UACI,EAAE,cAAc,IAAI,eAEpB,aAAoB,cAAc,eAClC,kBAAoB,SAAQ,kBAAkB,SAAS,GAEvD;AAAA,MACI,YAAa;AAAA,MACb,OAAa;AAAA,IACjB,IAAoB,iBACpB;AAAA,MACI,YAAa;AAAA,MACb,OAAa;AAAA,IACjB,IAAoB,aAAa,kBAAkB,SAAQ,kBAAkB,aAAa,GAE1F;AAAA,MACI,SAAU;AAAA,MACV,SAAU;AAAA,MACV,QAAU;AAAA,IACd,IAAoB,aAAa;AAAA,MAC7B,SAAUR;AAAA,MACV,SAAUA;AAAA,MACV,QAAU;AAAA,IACd,IAAI,YAAY,MAAM,aAAa,WAAW;AAClD,QAAI,MAAM,GAAG,eAAe;AAE5B,SAAK,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAC/B,aAAO,MAAM,CAAC;AACd,YAAM,aAAa,iBAAiB,IAAI;AAExC,UAAI,SAAS,WAAW,cAAc,MAAM;AACxC,kBAAU,WAAW,eAAe,YAAY,IAAI;AAAA,MACxD,WAES,SAAS,WAAW;AACzB,iBAAQ,YAAY,WAAW,aAAa;AAAA,MAChD,WAES,QAAQ,IAAI,GAAG;AACpB,iBAAQ,cAAc,WAAW,aAAa;AAC9C,uBAAe;AAAA,MACnB,WAGS,cAAc,MAAM;AACzB,sBAAc,aAAa,MAAM,UAAU;AAAA,MAC/C;AAAA,IACJ;AACA,SAAK,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AAChC,aAAO,OAAO,CAAC;AACf,YACI,aAAa,iBAAiB,IAAI,GAClC,aAAa,iBAAiB,IAAI;AAEtC,UAAI,cAAc,MAAM;AACpB,sBAAc,gBAAgB,IAAI;AAAA,MACtC,WAES,SAAS,SAAS;AACvB,YAAI,QAAQ,QAAQ;AAChB,cAAI,YAAY;AACZ,qBAAQ,WAAW,eAAe,UAAU;AAAA,UAChD,WACS,CAAC,QAAQ,YAAY,YAAY,IAAI,GAAG;AAC7C,qBAAQ,WAAW,eAAe,YAAY,UAAU;AAAA,UAC5D;AAAA,QACJ,WACS,cAAc,CAAC,QAAQ,YAAY,YAAY,IAAI,GAAG;AAC3D,oBAAU,WAAW,eAAe,YAAY,IAAI;AAAA,QACxD;AAAA,MACJ,WAES,SAAS,WAAW;AACzB,iBAAQ,YAAY,WAAW,aAAa;AAAA,MAChD,WAES,QAAQ,IAAI,GAAG;AACpB,iBAAQ,cAAc,WAAW,eAAe,QAAQ,UAAU,cAAc,aAAa;AAC7F,uBAAe;AAAA,MACnB,WACS,cAAc,eAAe,YAAY;AAC9C,sBAAc,aAAa,MAAM,UAAU;AAAA,MAC/C;AAAA,IACJ;AAEA,SAAK,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AAClC,aAAO,SAAS,CAAC;AAEjB,UAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,cAAc;AACjC,sBAAc,gBAAgB,IAAI;AAAA,MACtC;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,OAAO,WAAW,eAAe,YAAY,YAAY;AACrD,QAAI,QAAQ,KAAK;AACjB,QAAI,CAAC,YAAY;AACb,eAAS;AAAA,IACb,OACK;AACD,eAAS,CAAC;AAEV,mBAAa,UAAU,WAAW,UAAU;AAC5C,mBAAa,UAAU,WAAW,UAAU;AAC5C,UAAI,YAAY;AACZ,aAAK,OAAO,YAAY;AACpB,kBAAQ,WAAW,GAAG;AACtB,cAAI,WAAW,GAAG,MAAM,OAAO;AAC3B,mBAAO,GAAG,IAAI;AAAA,UAClB;AAAA,QACJ;AAAA,MACJ;AACA,WAAK,OAAO,YAAY;AACpB,YAAI,EAAE,OAAO,aAAa;AACtB,iBAAO,GAAG,IAAI;AAAA,QAClB;AAAA,MACJ;AAAA,IACJ;AACA,cAAU,WAAW,eAAe,MAAM;AAAA,EAC9C;AAAA;AAAA;AAAA,EAGA,OAAO,YAAY,WAAW,eAAe;AAnnBjD,QAAAM;AAonBQ,UACI,EAAE,MAAM,KAAK,IAAI,WACjB,UAAU,sBAAQ;AACtB,kBAAc,oBAAoB;AAElC,QAAI,UAAU,aAAa;AACvB,oBAAc,cAAc,UAAU;AAAA,IAC1C;AAEA,QAAI,mBAAmB,kBAAkB;AAErC,UACI,cAAc,WAAW,WAAW,KACpC,UAAU,qBAAqB,aAAa,MAAM,KAClD,QAAQ,WAAW,WAAW,KAC9B,UAAU,qBAAqB,OAAO,MAAM,GAC9C;AAEE,kBAAU,aAAa,eAAe,QAAQ,WAAW,IAAI;AAAA,MACjE,OACK;AACD,sBAAc,YAAY;AAC1B,sBAAc,YAAY,OAAO;AAAA,MACrC;AAAA,IACJ,WAES,QAAQ,QAAQJ,QAAO,KAAK,IAAI,GAAG;AACxC,oBAAc,YAAY,OAAO,IAAI;AAAA,IACzC,WACS,WAAW,MAAM;AACtB,YAAM,EAAE,cAAc,IAAI;AAE1B,YAAII,MAAA,+CAAe,aAAf,gBAAAA,IAAyB,YAAW,+CAAe,SAAQJ,QAAO,KAAK,cAAc,cAAc,IAAI,GAAI;AAC3G,sBAAc,YAAY;AAAA,MAC9B,OAEK;AACD,kBAAU,aAAa,eAAe,OAAO,OAAO,CAAC;AAGrD,sBAAc,oBAAoB;AAAA,MACtC;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,OAAO,eAAe,MAAM,eAAe,UAAU,UAAU,gBAAgB,MAAM;AACjF,UAAM,UAAU,SAAS,eAAe,IAAI;AAC5C,kBAAc,aAAa,SAAS,aAAa;AACjD,QAAI,UAAU;AACV,cAAQ,cAAc,SAAS;AAAA,IACnC;AACA,yCAAW;AAAA,MACP,QAAgB;AAAA,MAChB,WAAgB;AAAA,MAChB,eAAgB;AAAA,IACpB;AAAA,EACJ;AAAA,EACA,OAAO,cAAc,WAAW,eAAe,YAAY,UAAU,WAAW,QAAQ,SAAS;AA5qBrG,QAAAI;AA8qBQ,UAAM,aAAa,QAAQ,KACrB,SAAS,gBAAgB,QAAQ,IAAI,UAAU,OAAO,KAAK,IAC3D,SAAS,cAAc,UAAU,OAAO,KAAK;AAEnD,kBAAc,aAAa,YAAY,UAAU;AAEjD,aAAQ,YAAY,SAAS,UAAU;AACvC,QAAI,UAAU,MAAM;AAChB,gBAAU,MAAM,IAAI;AAAA,IACxB;AAGA,QAAI,CAAC,UAAU,QAAQ,CAAC,UAAU,YAAY,CAAC,UAAU,aAAa,KAAK,CAAC,UAAU,YAAY,YAAY,IAAI,KAAK,CAAC,WAAW,SAAS;AACxI,iBAAW,aAAa,QAAQ,cAAc;AAAA,IAClD;AACA,QAAI,UAAU;AACV,iBAAW,cAAc,SAAS;AAClC,UAAI,QAAQ;AACR,mBAAW,aAAa;AACxB,iBAAS,UAAU,QAAQ,YAAY,SAAS;AAAA,MACpD;AAAA,IACJ;AACA,KAAAA,MAAA,QAAQ,aAAR,gBAAAA,IAAA,cAAmB;AAAA,MACf,QAAgB;AAAA,MAChB;AAAA,MACA,eAAgB;AAAA,MAChB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,OAAO,aAAa,SAAS,eAAe;AA7sBhD,QAAAA,KAAA;AA8sBQ,QAAI;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAAG;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAe,SACf,eAAe,MACf,OAAO,UAAU;AACrB,UAAM,cAAc,UAAU,eAAe,CAAC;AAE9C,SAAIH,MAAA,UAAU,SAAV,OAAAA,MAAkB,UAAU,MAAM;AAClC;AAAA,IACJ;AAGA,iBAAa,SAAQ,iBAAY,eAAZ,YAA0B,UAAU;AACzD,QAAI,YAAY;AACZ,iBAAW,UAAU;AAAA,IACzB;AACA,QAAI,YAAY,aAAa;AACzB,eAAS,YAAY;AAAA,IACzB;AACA,UAEI,eAAgB,WAAW,SAAS,QAAQ,CAAC,GAC7C,gBAAgBP,YAAW,KAAK,UAAU,YAAY,CAAC,CAAC,GACxD,cAAgBA,YAAW,KAAK,cAAc,UAAU,GACxD,YAAgB,WAAW,cAAc,aAAa,CAAC,GACvD,gBAAgB,cAAc,iBAAiB,CAAC,GAChD,aAAgB,YAAU;AAItB,aAAO,YAAY,UAAU,YAAY,CAAC,EAAE,eAAe,eAAe;AACtE,oBAAY,MAAM;AAAA,MACtB;AACA,cAAQ,SAAS,YAAY,MAAM,IAAI,YAAY,CAAC,MAAM;AAAA,IAC9D;AAEJ,kBAAc,YAAY,eAAe;AACzC,aAAS,YAAY,UAAU;AAC/B,eAAW,YAAY,YAAY;AACnC,qBAAiB,YAAY,kBAAkB;AAE/C,uBAAmB,sBAAsB,cAAc,YAAY,mBAAmB;AACtF,QAAI,aAAa;AACb,oBAAc,YAAY;AAAA,IAC9B;AAEA,UAAM,mBAAmB;AAAA,MACrB,sBAAuB,wBAAwB,yBAAyB;AAAA,MACxE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AACA,WAAO,cAAc,QAAQ;AACzB,YAAM,eAAe,cAAc,MAAM;AACzC,eAAS;AAET,UAAI,CAAC,cAAc;AACf;AAAA,MACJ;AAEA,UAAI,UAAU,eAAe,YAAY,GAAG;AACxC,iBAAS,EAAE,KAAM,cAAc,eAAe,UAAU,CAAC;AACzD;AAAA,MACJ;AAEA,UAAI,MAAM,QAAQ,YAAY,GAAG;AAC7B,aAAK,aAAa;AAAA,UACd,GAAG;AAAA,UACH,WAAY;AAAA,YACR,GAAG,QAAQ;AAAA,YACX,UAAW;AAAA,UACf;AAAA,QACJ,GAAG,aAAa;AAChB;AAAA,MACJ;AACA,UAAI,wBAAwB,MAAM;AAC9B,mBAAW,WAAW;AAEtB,YAAI,iBAAiB,UAAU;AAC3B,wBAAc,aAAa,cAAc,QAAQ;AAAA,QACrD;AACA,gBAAQ,YAAY,QAAQ,YAAY;AACxC,YAAI,QAAQ,IAAI;AACZ,sBAAY,OAAO,OAAO,CAAC;AAAA,QAC/B;AACA;AAAA,MACJ;AACA,YAAM,aAAa,OAAO,iBAAiB;AAE3C,uBAAiB,YAAY;AAC7B,uBAAiB,KAAK,aAAa,MAAMU;AACzC,UAAI,CAAC,YAAY;AAGb,YAAI,UAAU;AACV,mBAAS,aAAa;AAAA,QAC1B,WACS,eAAe,aAAa,SAAS;AAC1C,mBAAS,aAAa,QAAQ,WAAW;AAAA,QAC7C;AAEA,YAAI,UAAU,QAAQ,CAAC,aAAa,WAAW;AAE3C,gBAAM,oBAAoB,UAAU,MAAM,KAAK,cAAc,MAAM;AACnE,cAAI,mBAAmB;AACnB,kBAAM,EAAE,cAAc,IAAI;AAE1B,gBAAI,kBAAkB,eAAe;AAAA,YAErC,WAGI,SAAQ,YAAY,kBAAkB,iBAAiB,GACzD;AAEE,mDAAW;AAAA,gBACP,QAAgB;AAAA,gBAChB,WAAgB;AAAA,gBAChB,eAAgB;AAAA,gBAChB;AAAA,gBACA;AAAA,cACJ;AAAA,YACJ;AAEA,gBAAI,aAAa,eAAe;AAC5B,gCAAkB,gBAAgB;AAAA,YACtC;AAEA,yBAAa,MAAM,IAAI;AAEvB,wBAAY,OAAO,aAAa,iBAAiB;AACjD,mBAAO,cAAc,MAAM;AAC3B,8BAAkB,aAAa;AAC/B,uBAAW,WAAW;AACtB,gBAAI,kBAAkB,eAAe,iBAChC,UAAU,kBAAkB,gBAAgB,UAAW;AACxD,4BAAc,aAAa,mBAAmB,QAAQ;AAAA,YAC1D;AAAA,UACJ,WACS,QAAQ;AACb,qBAAQ;AAAA,cAAc;AAAA,cAAc;AAAA,cAAe,WAAW;AAAA,cAAG;AAAA,cAC7D;AAAA,cAAc;AAAA,cAAQ;AAAA,YAAgB;AAAA,UAC9C,OACK;AAED,0BAAc,KAAK,YAAY;AAE/B,yBAAa,YAAY;AAAA,UAC7B;AAEA;AAAA,QACJ;AAEA,YAAI,aAAa,WAAW;AACxB,iBAAO,aAAa;AAAA,QACxB;AAAA,MACJ;AAEA,UAAI,aAAa,MACb,aAAa,MACb;AACJ,aAAO,CAAC,eAAe,cAAc,WAAW,IAAI,IAAI;AACpD,YAAI,UAAU;AAEV,cAAI,YAAY,gBAAgB,SAAS,IAAI;AACzC;AAAA,UACJ;AACA,cAAI,YAAY,YAAY;AAGxB,gBAAI,CAAC,QAAQ;AACT;AAAA,YACJ;AAGA,yBAAa;AACb;AAAA,UACJ;AAGA,uBAAa;AAAA,QACjB,WACS,CAAC,YAAY,eAAe;AACjC,uBAAa;AAAA,QACjB;AACA,YAAI,CAAC,YAAY;AACb,WAAC,iBAAiB,eAAe,CAAC,IAAI,KAAK,WAAW;AAAA,QAC1D;AAAA,MACJ;AACA,UAAI,cAAc,CAAC,YAAY;AAC3B,YAAI,YAAY;AACZ,mBAAQ,eAAe,cAAc,eAAe,UAAU,UAAU,UAAU;AAAA,QACtF,OACK;AAED,mBAAQ;AAAA,YAAc;AAAA,YAAc;AAAA,YAAe;AAAA,YAAY;AAAA,YAC3D;AAAA,YAAc;AAAA,YAAQ;AAAA,UAAgB;AAAA,QAC9C;AAAA,MACJ,OAEK;AAED,YACI,CAAC,cACD,WAAW,aAAa,KAAK,iBAC5B,aAAa,OAAO,OAAO,YAAY,MAAM,WAAW,QAAQ,YAAY,GAC/E;AACE,gBACI,EAAE,cAAc,IAAI,YACpB,SAAoB,SAAQ,YAAY,kBAAkB,UAAU;AAExE,cAAI,iBAAe,oDAAe,YAAf,mBAAyB,iBAAgB,MAAM;AAC9D,kBAAM,aAAa,cAAc,QAAQ,WAAW;AACpD,mBAAO,cAAc,UAAU;AAE/B,mBAAO,UAAU,UAAU;AAAA,UAC/B;AACA,cAAI,UAAU,MAAM;AAChB,yBAAa,MAAM,IAAI;AAAA,UAC3B;AACA,qBAAW,aAAa;AAExB,qBAAU,qCAAW;AAAA,YACjB,QAAgB;AAAA,YAChB,WAAgB;AAAA,YAChB,eAAgB;AAAA,YAChB;AAAA,YACA;AAAA,UACJ;AAAA,QACJ,WAES,cAAc,WAAW,aAAa,KAAK,WAAW;AAC3D,qBAAW,OAAO;AAAA,QAEtB,OAEK;AACD,cAAI,YAAY;AACZ,qBAAQ,eAAe,cAAc,eAAe,UAAU,UAAU,UAAU;AAAA,UACtF,OACK;AAED,qBAAQ;AAAA,cAAc;AAAA,cAAc;AAAA,cAAe;AAAA,cAAY;AAAA,cAC3D;AAAA,cAAc;AAAA,cAAQ;AAAA,YAAgB;AAAA,UAC9C;AAGA,2BAAW,SAAX;AACA,qBAAW,OAAO;AAAA,QACtB;AAAA,MACJ;AAAA,IACJ;AAEA,QAAI,cAAc,qBAAqB,YAAY,WAAW,KAAK,YAAY,CAAC,EAAE,aAAa,KAAK,WAAW;AAC3G;AAAA,IACJ;AAEA,QAAI,UAAU,gBAAgB;AAC1B;AAAA,IACJ;AAEA,WAAQ,WAAW,WAAW,IAAI,GAAI;AAIlC,UAAI,CAAC,YAAa,SAAS,gBAAgB,SAAS,MAAM,CAAC,SAAS,YAAa;AAC7E,SAAC,iBAAiB,eAAe,CAAC,IAAI,KAAK,QAAQ;AAAA,MACvD;AAAA,IACJ;AACA,QAAI,cAAc;AACd,eAAQ;AAAA,QAAoB;AAAA,QAAe;AAAA,QAAc;AAAA,QAAc;AAAA,QAAU;AAAA,QAC7E;AAAA,QAAkB;AAAA,MAAW;AAAA,IACrC;AAAA,EACJ;AAAA,EACA,OAAO,oBAAoB,eAAe,cAAc,cAAc,UAAU,UAAU,kBAAkB,aAAa;AA/+B7H,QAAAH;AAg/BQ,QAAI,eAAe,GACf;AACJ,eAAW,cAAc,cAAc;AACnC,YAAM,EAAE,cAAc,IAAI;AAE1B,UAAI,WAAW,aAAa,QAAQ,WAAW;AAC3C,mBAAW,OAAO;AAClB;AAAA,MACJ;AAEA,UAAI,CAAC,WAAW,eAAe;AAG3B,YAAI,CAAC,YAAY,gBAAgB,oBAAoB,QAAQ,eAAe,mBAAmB;AAE3F,cAAI,CAAC,WAAW,YAAY;AACxB,uBAAW,YAAY;AACvB,uBAAW,aAAa;AAExB,gBAAI,+CAAe,SAAS;AACxB,kBAAI,CAAC,cAAc,eAAe;AAC9B,8BAAc,gBAAgB,CAAC;AAAA,cACnC;AACA,4BAAc,cAAc,cAAc,QAAQ,WAAW,CAAC,IAAI;AAAA,YACtE;AACA,iDAAW;AAAA,cACP,QAAgB;AAAA,cAChB,WAAgB;AAAA,cAChB;AAAA,cACA,eAAgB;AAAA,YACpB;AAEA,gBAAI,eAAe;AAGf,4BAAc,aAAa;AAE3B,kBAAI,cAAc,WAAW;AACzB,8BAAc,YAAY;AAAA,cAC9B;AACA,kBAAI,cAAc,OAAO;AACrB,8BAAc,QAAQ;AAAA,cAC1B;AAGA,kBAAI,cAAc,OAAO;AACrB,8BAAc,QAAQ;AAAA,cAC1B;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,QACJ,OAEK;AAGD,WAAAA,MAAA,WAAW,SAAX,gBAAAA,IAAA;AACA,qBAAW,OAAO;AAClB,cAAI,UAAU;AACV,kBAAM,WAAW;AACjB,gBAAI,KAAK;AACL,uBAAS,UAAU,KAAK,YAAY,aAAa;AAAA,YACrD;AAAA,UACJ;AAEA,cAAI,cAAc,iBAAiB,gBAAe,+CAAe,UAAS;AACtE,mBAAO,cAAc,cAAc,cAAc,QAAQ,WAAW,CAAC;AAAA,UACzE;AACA,+CAAW;AAAA,YACP,QAAgB;AAAA,YAChB,WAAgB,WAAW;AAAA,YAC3B,eAAgB,WAAW;AAAA,YAC3B,eAAgB;AAAA,UACpB;AAAA,QACJ;AAAA,MACJ,WACS,aAAa;AAElB,YAAI,eAAe;AACf,uBAAa,WAAW,QAAQ,WAAW,CAAC,IAAI;AAAA,QACpD;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,YAAY,eAAe,cAAc;AAC5C,QAAI,cAAc,SAAS,YAAY,GAAG;AACtC,YAAM,YAAY,cAAc;AAChC,UAAI,WAAW;AACX,cAAM,QAAQ,OAAO,OAAO,SAAS,EAAE,QAAQ,YAAY;AAC3D,YAAI,QAAQ,IAAI;AACZ,iBAAO,UAAU,OAAO,KAAK,SAAS,EAAE,KAAK,CAAC;AAAA,QAClD;AAAA,MACJ;AACA,oBAAc,YAAY,YAAY;AAAA,IAC1C;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,SAAS,eAAe,cAAc,QAAQ;AACjD,kBAAc,YAAY,YAAY;AACtC,QAAI,CAAC,cAAc,WAAW;AAC1B,oBAAc,YAAY,CAAC;AAAA,IAC/B;AACA,kBAAc,UAAU,MAAM,IAAI;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,OAAO,SAAS,SAAS,MAAM;AA/mCnC,QAAAA;AAgnCQ,UAAM,UAAU,OAAO,IAAI,EAAE,MAAM,GAAG;AACtC,eAAW,MAAM,SAAS;AACtB,iBAAUA,MAAA,mCAAS,cAAT,gBAAAA,IAAqB;AAC/B,UAAI,CAAC,SAAS;AACV,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAEJ;AACA,QAAQ,SAAS;;;ACnnCjB,IAAqB,aAArB,MAAgC;AAAA,EAC5B,OAAO,OAAO;AACV,UAAM,UAAW,CAAC,qBAAqB,qBAAqB,kBAAkB,mBAAmB,GAE7F,WAAW,YAAU,QAAQ,IAAI,CAAAI,QAAM;AACnC,UAAI,SAAS,SAAS,aAAa,WAAWA,GAAE;AAEhD,UAAI,WAAW,OAAO;AAClB,iBAAS,OAAO,QAAQ,UAAU,QAAQ;AAG1C,YAAI,yBAAyB,YAAYA,QAAO,kBAAkB;AAC9D,mBAAS;AAAA,QACb;AAAA,MACJ;AACA,aAAO;AAAA,IACX,CAAC;AACL,SAAK,YACA,uBAAuB,YAAY,WACnC,6BAA6B,YAAY,SAAS,QAAQ,KAC1D,0BAA0B,YAAY,SAAS,KAAK,KACpD,yBAAyB,YAAY,SAAS,IAAI,KACnD,CAAC;AAEL,UAAM,aAAe;AAAA,MACb;AAAA,MACA;AAAA,IACJ,GACA,eAAe;AAAA,MACX;AAAA,MACA;AAAA,IACJ,GACA,YAAe,YAAU,WAAW,IAAI,eAAa,SAAS,aAAa,WAAW,SAAS,CAAC;AACpG,SAAK,SACA,uBAAuB,YAAY,cACnC,6BAA6B,YAAY,UAAU,QAAQ,KAC3D,0BAA0B,YAAY,UAAU,KAAK,KACrD,yBAAyB,YAAY,gBACtC,CAAC;AAEL,SAAK,mBAAmB,KAAK,2BAA2B,KAAK,IAAI,CAAC;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,UAAU;AACjB,WAAO,QAAQ,KAAK,UAAU,CAAC,KAAK,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,QAAQ,SAAS;AAC1B,WAAO,KAAK,UAAU,CAAC,MAAK,mCAAU,KAAK,UAAU,CAAC;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,OAAO;AAChB,WAAO,KAAK,UAAU,CAAC,KAAK,SAAS,KAAK,UAAU,CAAC,CAAC,EAAE;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,eAAe;AACtB,WAAO,CAAC,CAAC,KAAK;AAAA,EAClB;AAAA,EACA,WAAW,UAAU;AACjB,WAAO,KAAK,UAAU,CAAC,KAAK,SAAS,KAAK,UAAU,CAAC,CAAC;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,mBAAmBA,KAAI;AAC1B,QAAI,KAAK,OAAO,CAAC,GAAG;AAChB,eAAS,iBAAiB,KAAK,OAAO,CAAC,GAAGA,GAAE;AAAA,IAChD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,mBAAmBA,KAAI;AAC1B,QAAI,KAAK,OAAO,CAAC,GAAG;AAChB,eAAS,oBAAoB,KAAK,OAAO,CAAC,GAAGA,GAAE;AAAA,IACnD;AAAA,EACJ;AAAA;AAAA,EAEA,OAAO,6BAA6B;AAChC,UACI,KAAkC,MAClC,EAAE,SAAU,kBAAkB,IAAI;AACtC,QAAI,mBAAmB;AACnB,UAAI,CAAC,kBAAkB,QAAQ,cAAc,GAAG;AAC5C,cACI,cAAgB,UAAU,eAAe,iBAAiB,GAC1D,EAAE,UAAU,IAAI;AACpB,YAAI,WAAW;AACX,aAAG,aAAa;AAChB,aAAG,aAAa,UAAU;AAC1B,4BAAkB,YAAY,SAAS;AAAA,QAC3C;AAAA,MACJ;AAAA,IACJ,OACK;AACD,UAAI,GAAG,YAAY;AACf,WAAG,WAAW,YAAY,GAAG,UAAU;AAAA,MAC3C;AACA,SAAG,aAAa;AAChB,SAAG,aAAa;AAAA,IACpB;AAAA,EACJ;AACJ;AACA,WAAW,KAAK;AAChB,WAAW,SAAS;;;AC5HpB,IAAI,kBAAkB;AACtB,IAAM,eAAe,CAAC;AAAtB,IACI,yBAAyB,OAAE;AAL/B,MAAAC;AAKkC,WAAE,aAAa,EAAE,kBAAgBA,MAAA,EAAE,cAAc,gBAAhB,gBAAAA,IAA6B,iBAAiB,GAAG,iBAAiB,iBAAgB;AAAA;AAkBrJ,IAAqB,gBAArB,MAAqB,eAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO/B,OAAO,kBAAkB,SAAS,SAAS;AACvC,UAAM,KAAK;AACX,QAAI,YAAY,YAAY,YAAY,YAAY;AAChD,gBAAU,SAAS;AAAA,IACvB;AACA,QAAI,QAAQ,aAAa,QAAQ,wBAAwB;AACrD,gBAAU,QAAQ;AAAA,IACtB;AACA,QAAI,CAAC,QAAQ,UAAU,SAAS,oBAAoB,GAAG;AACnD,cAAQ,UAAU,IAAI,oBAAoB;AAC1C,cAAQ,kBAAkB;AAAA,QACtB,UAAW,CAAC;AAAA,MAChB;AAAA,IACJ;AAEA,QAAI,YAAY,SAAS,MAAM;AAC3B,UAAI,CAAC,GAAG,yBAAyB;AAC7B,mBAAW,iBAAiB,UAAU,GAAG,cAAc;AACvD,WAAG,0BAA0B;AAAA,MACjC;AAAA,IACJ,WAES,WAAW,gBAAgB;AAChC,UAAI,CAAC,GAAG,gBAAgB;AACpB,WAAG,iBAAiB,IAAI,eAAe,GAAG,eAAe;AAAA,MAC7D;AACA,SAAG,eAAe,QAAQ,OAAO;AAAA,IACrC,OAEK;AACD,cAAQ,UAAU,IAAI,qBAAqB;AAC3C,YAAM,CAAC,UAAU,QAAQ,MAAM,IAAI,UAAU,cAAc;AAAA,QACvD,QAAY;AAAA,QACZ,WAAY;AAAA,QACZ,UAAY,CAAC;AAAA,UACT,WAAY;AAAA,QAChB,GAAG;AAAA,UACC,WAAY;AAAA,QAChB,CAAC;AAAA,MACL,GAAG,EAAE,WAAY,KAAK,CAAC;AACvB,aAAO,aAAa,OAAO,YAAY,OAAO,aAAa,OAAO,YAAY;AAC9E,aAAO,iBAAiB,UAAU,GAAG,qBAAqB,IAAI;AAC9D,aAAO,iBAAiB,UAAU,GAAG,qBAAqB,IAAI;AAE9D,OAAC,QAAQ,wBAAwB,IAAI,iBAAiB,CAAC,MAAM;AACzD,cACI,aAAe,CAAC,GAChB,eAAe,CAAC;AAGpB,mBAAW,MAAM,GAAG;AAChB,cAAI,GAAG,SAAS,aAAa;AACzB,uBAAW,KAAK,MAAM,YAAY,GAAG,UAAU;AAC/C,yBAAa,KAAK,MAAM,cAAc,GAAG,YAAY;AAAA,UACzD;AAAA,QACJ;AACA,cAAM,eAAe;AAAA,UACjB,GAAG,WAAW,OAAO,OAAK,CAAC,aAAa,SAAS,CAAC,CAAC;AAAA,UACnD,GAAG,aAAa,OAAO,OAAK,CAAC,WAAW,SAAS,CAAC,CAAC;AAAA,QACvD;AACA,YAAI,aAAa,WAAW,GAAG;AAC3B;AAAA,QACJ;AAGA,YAAI,aAAa,SAAS,KAAK,aAAa,MAAM,sBAAsB,GAAG;AACvE;AAAA,QACJ;AAGA,eAAO,cAAc,IAAI,YAAY,UAAU,EAAE,SAAU,MAAM,CAAC,CAAC;AAAA,MACvE,CAAC,GAAG,QAAQ,SAAS;AAAA,QACjB,WAAY;AAAA,QACZ,SAAY;AAAA,MAChB,CAAC;AAED,cAAQ,iBAAiB;AAAA,IAC7B;AACA,YAAQ,gBAAgB,SAAS,KAAK,OAAO;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,qBAAqB,SAAS,SAAS;AAC1C,QAAI,SAAS;AACT,UAAI,YAAY,YAAY,YAAY,YAAY;AAChD,kBAAU,SAAS;AAAA,MACvB;AACA,YAAM,gBAAgB,QAAQ;AAC9B,UAAI,gBAAgB;AACpB,UAAI,iBAAiB,cAAc,UAAU;AACzC,oBAAY,OAAO,cAAc,UAAU,OAAO;AAElD,wBAAgB,cAAc,SAAS;AAAA,MAC3C;AAEA,UAAI,CAAC,eAAe;AAChB,gBAAQ,UAAU,OAAO,oBAAoB;AAC7C,YAAI,KAAK,gBAAgB;AACrB,eAAK,eAAe,UAAU,OAAO;AAAA,QACzC,OAEK;AAED,cAAI,QAAQ,gBAAgB;AACxB,oBAAQ,eAAe,OAAO;AAC9B,oBAAQ,iBAAiB;AAAA,UAC7B;AAEA,cAAI,QAAQ,uBAAuB;AAC/B,oBAAQ,sBAAsB,WAAW;AAAA,UAC7C;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,OAAO,gBAAgB,SAAS;AAC5B,eAAW,uBAAuB,SAAS;AACvC,YACI,iBAAiB,oBAAoB,QACrC,gBAAiB,eAAe,iBAChC,UAAiB,oBAAoB,eAAe,eAAe,sBAAsB;AAC7F,UAAI,UAAU,cAAc,GAAG;AAC3B,YAAI,CAAC,cAAc,aAAa,QAAQ,UAAU,cAAc,UAAU,SAAS,QAAQ,WAAW,cAAc,UAAU,QAAQ;AAClI,gBAAM,UAAU,cAAc;AAC9B,wBAAc,YAAY;AAC1B,qBAAW,iBAAiB,cAAc,UAAU;AAChD,0BAAc,gBAAgB,SAAS,OAAO;AAAA,UAClD;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,OAAO,oBAAoB,GAAG;AArKlC,QAAAA;AAuKQ,QAAI,EAAE,OAAO,iBAAeA,MAAA,SAAS,SAAT,gBAAAA,IAAe,SAAS,EAAE,UAAS;AAC3D,QAAE,yBAAyB;AAC3B,YAAM,cAAiB,EAAE,OAAO,YAC5B,iBAAiB,YAAY,YAC7B,gBAAiB,eAAe,iBAChC,UAAiB,eAAe,sBAAsB;AAC1D,UAAI,CAAC,cAAc,aAAa,QAAQ,UAAU,cAAc,UAAU,SAAS,QAAQ,WAAW,cAAc,UAAU,QAAQ;AAClI,qBAAa,KAAK,CAAC,gBAAgB,cAAc,WAAW,OAAO,CAAC;AACpE,sBAAc,YAAY;AAC1B,YAAI,CAAC,iBAAiB;AAClB,4BAAkB,sBAAsB,eAAc,gBAAgB;AAAA,QAC1E;AAAA,MACJ;AACA,kBAAY,WAAW,aAAa,YAAY,WAAW,YAAY,YAAY,WAAW,CAAC,EAAE,YAAY,YAAY,WAAW,CAAC,EAAE,aAAa;AAAA,IACxJ;AAAA,EACJ;AAAA,EACA,OAAO,eAAe,GAAG;AACrB,UACI,iBAAiB,SAAS,MAC1B,gBAAiB,eAAe,iBAChC,UAAiB,cAAc;AACnC,kBAAc,YAAY,SAAS,gBAAgB,sBAAsB;AACzE,eAAW,iBAAiB,cAAc,UAAU;AAChD,oBAAc,gBAAgB,SAAS,cAAc,SAAS;AAAA,IAClE;AAAA,EACJ;AAAA,EACA,OAAO,mBAAmB;AACtB,eAAW,gBAAgB,cAAc;AACrC,iBAAW,iBAAiB,aAAa,CAAC,EAAE,gBAAgB,UAAU;AAElE,YAAI,aAAa,CAAC,EAAE,cAAc;AAC9B,wBAAc,MAAM,MAAM,YAAY;AAAA,QAC1C;AAAA,MACJ;AAAA,IACJ;AACA,sBAAkB;AAClB,iBAAa,SAAS;AAAA,EAC1B;AAAA,EACA,OAAO,wBAAwB;AAC3B,eAAW,oBAAoB,UAAU,KAAK,cAAc;AAAA,EAChE;AACJ;AACA,cAAc,SAAS;;;AClMvB,IACI,iBAAuB;AAAA,EACnB,MAAkB;AAAA,EAClB,MAAkB;AAAA,EAClB,OAAkB;AAAA,EAClB,iBAAkB;AAAA,EAClB,MAAkB,cAAc,uBAAuB,SAAS;AACpE;AAPJ,IAQI,cAAuB;AAR3B,IASI,uBAAuB;AAAA,EACnB,OAAQ;AACZ;AAXJ,IAYIC,oBAAuB,QAAQ,QAAQ;AAZ3C,IAaI,gBAAuB,aAAW,IAAI,QAAQ,aAAW,YAAY,GAAG;AAAA,EACpE,SAAU,YAAY,SAAS,kBAAkB,aAAa;AAAA,EAC9D,QAAU;AAAA,EACV,MAAU;AACd,CAAC,CAAC;AAjBN,IAkBI,QAAuB;AAAA,EACnB,GAAI;AACR;AApBJ,IAqBI,eAAe;AAAA,EACX,MAAS;AAAA,EACT,QAAS;AACb;AAxBJ,IAyBI,qBAAqB;AAAA,EACjB,MAAO;AAAA,EACP,MAAO;AACX;AA5BJ,IA6BI,YAAY;AAAA,EACR,WAAY;AAAA,EACZ,WAAY;AAChB;AAhCJ,IAiCI,sBAAuB,gBAAc;AAhDzC,MAAAC,KAAA;AAiDQ,MAAI,KAAK,QAAQ,OAAO;AACxB,MAAI,CAAC,YAAY;AACb,UAAM,SAAS,QAAQ,MAAM;AAAA,EACjC,WACS,OAAO,eAAe,UAAU;AACrC,UAAM,SAAS,QAAQ,MAAM;AAAA,EACjC,OACK;AACD,WAAMA,MAAA,WAAW,QAAX,OAAAA,MAAkB;AACxB,cAAS,gBAAW,WAAX,YAAqB;AAC9B,aAAQ,gBAAW,UAAX,YAAoB;AAC5B,WAAM,gBAAW,QAAX,YAAkB;AAAA,EAC5B;AACA,SAAO,EAAE,KAAK,QAAQ,OAAO,IAAI;AACrC;AAmCJ,IAAqB,WAArB,MAAqB,kBAAiB,kBAAU,eAAO,IAAI,CAAC,EAAE;AAAA,EAC1D,WAAW,eAAe;AACtB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKH,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMT,SAAU;AAAA,QACN,SAAU;AAAA,UACN,SAAU;AAAA,QACd;AAAA,QACA,OAAQ;AAAA,MACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,gBAAiB;AAAA,QACb,SAAU;AAAA,UACN,SAAU;AAAA,QACd;AAAA,QACA,OAAQ;AAAA,MACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBA,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBZ,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOZ,WAAY;AAAA,MACZ,GAAI;AAAA,MACJ,GAAI;AAAA,MACJ,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOZ,eAAgB;AAAA,IACpB;AAAA,EACJ;AAAA,EACA,WAAW,YAAY;AACnB,WAAO;AAAA,MACH,aAAc;AAAA,QACV,MAAQ;AAAA,QACR,OAAQ;AAAA,MACZ;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,IAAI,QAAQ;AAjNhB,QAAAA;AAkNQ,WAAO,SAAQA,MAAA,KAAK,cAAL,gBAAAA,IAAgB,GAAG;AAAA,EACtC;AAAA,EACA,oBAAoB;AAChB,UACI,KAAe,MACf,EAAE,QAAQ,IAAK,IACf;AAAA,MACI;AAAA,MACA;AAAA,IACJ,IAAe,IACf,IAAe,GAAG,eAAe,QAAQ,cAAc,QAAQ,aAC/D,IAAe,GAAG,eAAe,QAAQ,eAAe,QAAQ;AACpE,QAAI,iBAAiB,KAAK,iBAAiB,GAAG;AAC1C,YAAM,YAAY,IAAI,aAAa,QAAQ,WAAW;AAAA,QAClD,yBAA0B;AAAA,QAC1B,uBAA0B;AAAA,MAC9B,CAAC;AACD,gBAAU,cAAc,SAAS,SAAS;AAC1C,UAAI,CAAC,GAAG,eAAe;AAWnB,WAAG,QAAQ,kBAAkB,EAAE,GAAG,EAAE,CAAC;AAAA,MACzC;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,OAAO,KAAK;AACpB,UACI,KAAkB,MAClB,kBAAkB,GAAG,WAAW,KAAK,YAAY,CAAC,EAAE,GACpD,YAAkB,GAAG,WAAW,SAAS,MAAM,MAAM,GAAG,EAAE;AAK9D,QAAI,CAAC,UAAU,kBAAkB,CAAC,mBAAmB,eAAe,KAAK,cAAc,iBAAiB;AACpG,YAAM,YAAY,SAAS,MAAM,WAAW;AAC5C,aAAO,GAAG,SAAS,SAAS,EAAE,IAAI,GAAG,SAAS,SAAS,EAAE;AAAA,IAC7D;AACA,WAAO,GAAG,cAAc,KAAK,YAAY,CAAC,EAAE;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,OAAO,KAAK;AACrB,UAAM,EAAE,QAAQ,IAAI;AACpB,QAAI,WAAW,UAAU,gBAAgB;AACrC,YACI,WAAa,SAAS,KACtB,YAAa,WAAW,UAAU,UAClC,aAAa,QAAQ,SAAS,SAAS,EAAE,GACzC,aAAa,SAAS,UAAU,cAAc,SAAS,SAAS,WAAW,SAAS,KAAK,OAAO,CAAC,IAC7F,SAAS,UAAU,cAAc,SAAS,SAAS,WAAW,UAAU,QAAQ,OAAO,CAAC,GAC5F,aAAc,QAAQ,SAAS,SAAS,EAAE,IAAI,aAAc;AAGhE,aAAO,KAAK,IAAI,aAAa,UAAU,cAAc,IAAI;AAAA,IAC7D;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW,eAAe,OAAO,OAAO;AACpC,UAAM,KAAK;AACX,QAAI,OAAO,SAAS,UAAU;AAC1B,aAAO;AAAA,QACH,CAAC,IAAI,GAAI;AAAA,MACb;AAAA,IACJ;AACA,QAAI,CAAC,GAAG,UAAU;AACd,SAAG,WAAW,CAAC;AAAA,IACnB;AACA,OAAG,SAAS,cAAc,EAAE,IAAI;AAAA,MAC5B,UAAW;AAAA,MACX;AAAA,IACJ;AAEA,QAAI,KAAK,GAAG;AACR,oBAAc,IAAI,GAAG;AAAA,IACzB;AACA,QAAI,KAAK,GAAG;AACR,oBAAc,IAAI,GAAG;AAAA,IACzB;AAEA,QAAI,CAAC,cAAc,gBAAgB,EAAE,GAAG;AACpC,oBAAc,WAAW,IAAI,IAAI;AAAA,IACrC;AAAA,EACJ;AAAA,EACA,YAAYC,KAAI;AACZ,UAAM,EAAE,SAAS,IAAI;AACrB,QAAI,UAAU;AACV,aAAO,OAAO,QAAQ,EAAE,QAAQA,GAAE;AAAA,IACtC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc,eAAe;AACzB,QAAI,iBAAiB,KAAK,gBAAgB,aAAa,GAAG;AACtD,aAAO,KAAK,SAAS,cAAc,EAAE;AACrC,oBAAc,cAAc,IAAI;AAAA,IACpC;AAAA,EACJ;AAAA,EACA,gBAAgB,eAAe;AA/UnC,QAAAD;AAgVQ,WAAO,SAAQA,MAAA,KAAK,aAAL,gBAAAA,IAAgB,cAAc,GAAG;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAgB;AACZ,QAAI,KAAK,UAAU;AACf,aAAO,OAAO,KAAK,QAAQ,EAAE,QAAQ,mBAAiB,cAAc,SAAS,cAAc,IAAI,CAAC;AAAA,IACpG;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,eAAe,SAAS,UAAU,sBAAsB;AAC1D,UACI,KAAqB,MACrB,EAAE,YAAY,IAAO,SACrB,eAAqB,cAAc,UAAU,UAAU,KAAK,OAAO,GACnE,EAAE,QAAQ,OAAO,IAAI,GAAG,WAAW,SAAS,OAAO,GACnD,SAAqB,GAAG,SAAS,QAAQ,QAAQ,OAAO;AAC5D,QAAI,QAAQ,aAAa,QAAQ,OAAO;AACpC,aAAO,KAAK,MAAM;AA3W9B,YAAAA,KAAA;AA4WgB,kBAAU,cACJ,aAAa,UAAU,CAAC,QAAQ,CAAC,MAAM,KACvC,MAAAA,MAAA,QAAQ,uBAAR,gBAAAA,IAAA,8BAAkC;AACxC,YAAI,QAAQ,WAAW;AAEnB,cAAI,MAAM,QAAQ,SAAS,GAAG;AAC1B,aAAC,GAAG,UAAU,IAAI,SAAS,QAAQ,WAAW,MAAM,CAAC,OAAO,CAAC;AAAA,UACjE,OAEK;AACD,sBAAU,UAAU,SAAS,EAAE;AAAA,UACnC;AAAA,QACJ;AACA,YAAI,QAAQ,OAAO;AACf,kBAAQ,MAAM,EAAE,eAAgB,KAAK,CAAC;AAAA,QAC1C;AAAA,MACJ,CAAC;AAAA,IACL;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,eAAe,SAAS,UAAU,sBAAsB,MAAM,OAAO;AAC9E,UACI,SAAiB,UAAU,KAAK,OAAO,GACvC,UAAkB,OAAO,YAAY,WAAY,QAAQ,UAAU,SACnE,iBAAiB,UAAS,oBAAoB,UAAS,kBAAkB,IAAI,UAAS,IACtF,SAAiB,CAAC;AACtB,mBAAe,YAAY,EAAE,IAAI;AACjC,QAAI,SAAS,GAAG,SAAS,GAAG;AAG5B,QAAI,QAAQ,UAAU;AAClB,aAAO,QAAQ,KAAK,IAAI,OAAO,OAAO,QAAQ,QAAQ;AACtD,cAAQ,WAAW;AAAA,IACvB;AACA,QAAI,QAAQ,WAAW;AACnB,aAAO,SAAS,KAAK,IAAI,OAAO,QAAQ,QAAQ,SAAS;AACzD,cAAQ,YAAY;AAAA,IACxB;AAEA,aAAS,WAAW,QAAQ,YAAY,SAAS,aAAa,KAAK,cAAc,WAAW,SAAS,YAAY;AAC7G,UAAI,aAAa,SAAS,QAAQ,aAAa,SAAS,kBAAkB;AACtE;AAAA,MACJ;AAEA,YACI,QAAQ,aAAa,SAAS,mBAAmB,YAAY,SAAS,cAAc,YAAY,iBAAiB,QAAQ,GACzH,IAAO,aAAa,IAAI,UAAU,UAAU;AAGhD,UACK,QAAQ,MAAM,WAAU,uBAAG,iBAAgB,aAAa,MAAM,SAAS,KAAK,SAAS,eAAe,SAAS,iBAC7G,QAAQ,MAAM,WAAU,uBAAG,iBAAgB,aAAa,MAAM,SAAS,KAAK,SAAS,cAAc,SAAS,cAC/G;AACE,YAAI,WAAW;AAEf,YAAI,GAAG;AACH,qBAAW;AAAA,QACf,OACK;AAED,yBAAe,UAAU;AAEzB,yBAAe,gBAAgB;AAAA,QACnC;AAEA,cAAM,EAAE,QAAQ,OAAO,IAAI,SAAS,WAAW,QAAQ,OAAO;AAC9D,YAAI,UAAU,QAAQ;AAClB,iBAAO,KAAK;AAAA,YACR,SAAU;AAAA,YACV,GAAU,SAAS;AAAA,YACnB,GAAU,SAAS;AAAA,YACnB;AAAA,YACA;AAAA,UACJ,CAAC;AACD,iBAAO,UAAU,CAAC,QAAQ,CAAC,MAAM;AACjC,oBAAU;AACV,oBAAU;AAAA,QACd;AAAA,MACJ;AAAA,IACJ;AAEA,QAAI,OAAO,QAAQ;AACf,YACI,OAAO,KAAK,IAAI,MAAM,GACtB,OAAO,KAAK,IAAI,MAAM;AAC1B,UAAI,WAAW,YAAY,OAAO,YAAY,WAAW,UAAW,OAAO,QAAQ,aAAa,WAAW,QAAQ,WAAW;AAE9H,UAAI,aAAa,OAAO,MAAM,OAAO,KAAK;AAEtC,YAAI,KAAK,IAAI,MAAM,IAAI,IAAI,IAAI;AAC3B,qBAAW,KAAK,IAAI,UAAU,GAAG;AAAA,QACrC;AACA,iBAAS,eAAe,kBAAkB,eAAe,QAAQ,UAAU,cAAY;AACnF,gBAAM,QAAQ,aAAa;AAC3B,qBAAW,EAAE,SAAAE,UAAS,GAAG,GAAG,QAAQ,OAAO,KAAK,QAAQ;AACpD,2BAAe,UAAUA;AACzB,gBAAI,QAAQ;AACR,6BAAe,IAAI,KAAK,MAAM,QAAQ,KAAK,EAAE,KAAK,QAAQ,SAAS,KAAK,MAAM,SAAS,QAAQ,IAAI,CAAC;AAAA,YACxG;AACA,gBAAI,QAAQ;AACR,6BAAe,IAAI,KAAK,IAAI,KAAK,QAAQ,SAAS,KAAK,MAAM,SAAS,QAAQ,IAAI,CAAC;AAAA,YACvF;AAAA,UACJ;AAAA,QACJ,GAAG,MAAM,QAAQ,MAAM;AACvB,eAAO,KAAK,MAAM;AACd,yBAAe,kBAAkB;AAAA,QACrC,CAAC;AAAA,MACL,OAEK;AACD,mBAAW,EAAE,SAAAA,UAAS,QAAQ,OAAO,KAAK,QAAQ;AAC9C,UAAAA,SAAQ,aAAa;AACrB,UAAAA,SAAQ,cAAc;AAAA,QAC1B;AACA,iBAAS,cAAc,OAAO,OAAO,SAAS,CAAC,EAAE,OAAO;AAAA,MAC5D;AAAA,IACJ,OACK;AACD,eAASH;AAAA,IACb;AAEA,QAAI,QAAQ,aAAa,QAAQ,OAAO;AACpC,aAAO,KAAK,MAAM;AACd,YAAI,QAAQ,WAAW;AAEnB,cAAI,MAAM,QAAQ,SAAS,GAAG;AAC1B,2BAAe,SAAS,QAAQ,WAAW,MAAM,CAAC,OAAO,CAAC;AAAA,UAC9D,OAEK;AACD,sBAAU,UAAU,SAAS,cAAc;AAAA,UAC/C;AAAA,QACJ;AACA,YAAI,QAAQ,OAAO;AACf,kBAAQ,MAAM,EAAE,eAAgB,KAAK,CAAC;AAAA,QAC1C;AAAA,MACJ,CAAC;AAAA,IACL;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,SAAS,SAAS,GAAG,SAAS,GAAG,UAAU,sBAAsB;AAC7D,UACI,KAAU,MACV,UAAW,OAAO,YAAY,WAAY,QAAQ,UAAU,SAC5D,OAAU,KAAK,IAAI,MAAM,GACzB,OAAU,KAAK,IAAI,MAAM;AAC7B,QAAI,GAAG,iBAAiB;AACpB,SAAG,gBAAgB,OAAO;AAC1B,SAAG,kBAAkB;AAAA,IACzB;AAGA,QAAI,UAAU,QAAQ;AAClB,SAAG,SAAS,QAAQ;AAAA,IACxB;AACA,QAAI,WAAW,YAAY,OAAO,YAAY,WAAW,UAAW,OAAO,QAAQ,aAAa,WAAW,QAAQ,WAAW;AAE9H,QAAI,aAAa,OAAO,MAAM,OAAO,KAAK;AACtC,YAAM,EAAE,GAAG,EAAE,IAAI;AACjB,UAAI,QAAQ,GACR,QAAQ;AAEZ,UAAI,KAAK,IAAI,MAAM,IAAI,IAAI,IAAI;AAC3B,mBAAW,KAAK,IAAI,UAAU,GAAG;AAAA,MACrC;AACA,SAAG,kBAAkB,eAAe,QAAQ,UAAU,cAAY;AAjiB9E,YAAAC,KAAA;AAkiBgB,cAAM,QAAQ,aAAa;AAC3B,YAAI,QAAQ;AAGR,cAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,OAAO;AAC9C,oBAAOA,MAAA,GAAG,oBAAH,gBAAAA,IAAoB;AAAA,UAC/B;AACA,aAAG,IAAI,KAAK,IAAI,KAAK,QAAQ,SAAS,KAAK,MAAM,SAAS,QAAQ,IAAI,CAAC;AAAA,QAC3E;AACA,YAAI,QAAQ;AAGR,cAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,OAAO;AAC9C,oBAAO,QAAG,oBAAH,mBAAoB;AAAA,UAC/B;AACA,aAAG,IAAI,KAAK,IAAI,KAAK,QAAQ,SAAS,KAAK,MAAM,SAAS,QAAQ,IAAI,CAAC;AAAA,QAC3E;AAEA,gBAAQ,GAAG;AACX,gBAAQ,GAAG;AAAA,MACf,GAAG,IAAI,QAAQ,MAAM;AACrB,SAAG,QAAQ,UAAU,IAAI,aAAa;AACtC,SAAG,gBAAgB,KAAK,MAAM;AAC1B,YAAI,CAAC,GAAG,aAAa;AACjB,aAAG,QAAQ,UAAU,OAAO,aAAa;AACzC,aAAG,kBAAkB;AAAA,QACzB;AAAA,MACJ,CAAC;AACD,aAAO,GAAG;AAAA,IACd,OACK;AACD,UAAI,UAAU,QAAQ;AAClB,cACI,UAAU,GAAG,GACb,UAAU,GAAG;AAKjB,YAAI,KAAK,MAAM,IAAI,KAAK,GAAG;AACvB,aAAG,KAAK;AAAA,QACZ;AACA,YAAI,KAAK,MAAM,IAAI,KAAK,GAAG;AACvB,aAAG,KAAK;AAAA,QACZ;AAGA,YAAI,GAAG,MAAM,WAAW,GAAG,MAAM,SAAS;AACtC,iBAAO,cAAc,GAAG,OAAO;AAAA,QACnC;AAAA,MACJ;AACA,aAAOD;AAAA,IACX;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,SAAS,KAAK,KAAK,SAAS;AAC9B,UACI,EAAE,GAAG,EAAE,IAAI,MACX,SAAW,OAAO,OAAO,IAAI,MAAM,GACnC,SAAW,OAAO,OAAO,IAAI,MAAM;AACvC,SAAK,oBAAoB,mCAAS;AAClC,WAAO,KAAK,SAAS,QAAQ,QAAQ,OAAO;AAAA,EAChD;AAAA,EACA,YAAY;AAzmBhB,QAAAC,KAAA;AA0mBQ,UAAM,KAAK;AACX,QAAI,GAAG,UAAU;AACb,SAAG,SAAS,oBAAoB,UAAU,GAAG,aAAa;AAC1D,OAAAA,MAAA,GAAG,yBAAH,gBAAAA,IAAA;AAAA,IACJ;AACA,aAAG,oBAAH,mBAAoB;AACpB,WAAO,OAAO,GAAG,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,SAAS,MAAM,SAAS,cAAc,EAAE,CAAC;AACrF,UAAM,UAAU;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,WAAW;AACpB,UACI,KAAS,MACT,CAAC,GAAG,CAAC,IAAI,UAAU,eAAe,GAAG,OAAO;AAGhD,QAAI,GAAG,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG;AAC7B,YAAM,cAAc,IAAI,YAAY,UAAU,EAAE,SAAU,KAAK,CAAC;AAChE,aAAO,eAAe,aAAa,UAAU;AAAA,QACzC,KAAM,MAAM,GAAG;AAAA,MACnB,CAAC;AACD,SAAG,SAAS,WAAW;AAAA,IAC3B;AAAA,EACJ;AAAA,EACA,aAAa;AACT,UACI,KAAa,MACb,EAAE,OAAO,IAAI;AAEjB,QAAI,EAAC,iCAAQ,cAAa;AACtB,SAAG,kBAAkB;AAAA,IACzB,WAES,OAAO,aAAa,gBAAgB,cAAc,EAAE,MAAM,IAAI;AACnE,aAAO,IAAI;AAAA,QACP,cAAe;AAAA,QACf,SAAe;AAAA,QACf,MAAe;AAAA,MACnB,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EACA,SAAS,GAAG;AACR,UACI,KAAK,MACL,EAAE,IAAI,IAAI,QAAQ,IAAI;AAC1B,QAAI,SAAS;AAEb,QAAI,GAAG,cAAc,UAAU,QAAQ,eAAe,IAAI;AACtD,cAAQ,aAAa;AACrB,QAAE;AAAA,IACN;AACA,QAAI,GAAG,cAAc,UAAU,QAAQ,cAAc,IAAI;AACrD,cAAQ,YAAY;AACpB,QAAE;AAAA,IACN;AACA,QAAI,WAAW,GAAG;AACd;AAAA,IACJ;AACA,QAAI,CAAC,GAAG,UAAU,CAAC,GAAG,OAAO,aAAa;AAEtC,SAAG,gBAAgB;AACnB,UAAI,CAAC,QAAQ,UAAU,SAAS,aAAa,GAAG;AAC5C,gBAAQ,UAAU,IAAI,aAAa;AAAA,MACvC;AACA,QAAE,SAAS,GAAG;AACd,QAAE,oBAAoB,GAAG;AAEzB,UAAI,CAAC,GAAG,QAAQ;AACZ,WAAG,QAAQ,UAAU,CAAC;AAAA,MAC1B;AAEA,SAAG,aAAa;AAEhB,SAAG,qBAAqB;AAGxB,SAAG,YAAY,CAAC;AAAA,IACpB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAa,OAAO,YAAY,KAAK,eAAe;AAChD,UAAM,KAAK;AAEX,QAAI,GAAG,UAAU;AACb,aAAO,OAAO,GAAG,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,SAAS,MAAM;AAKvD,YAAI,aAAa,GAAG,sBAAsB,OAAO;AAG7C,cAAI,SAAS,KAAK,IAAI,IAAI,KAAK,WAAW;AACtC,qBAAS,aAAa,OAAO,SAAS;AAAA,UAC1C;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EACA,YAAY,GAAG;AACX,UAAM,KAAK;AACX,QAAI,GAAG,QAAQ;AACX,SAAG,SAAS;AAAA,IAChB;AACA,OAAG,QAAQ,aAAa,CAAC;AACzB,OAAG,oBAAoB;AAKvB,OAAG,qBAAqB;AACxB,OAAG,QAAQ,UAAU,OAAO,aAAa;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,WAAW,SAAS,SAAS;AACzB,UAAM,KAAK;AAEX,QAAI,CAAC,GAAG,UAAU;AACd,aAAO;AAAA,QACH,QAAS;AAAA,QACT,QAAS;AAAA,MACb;AAAA,IACJ;AACA,UACI;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAe,IACf,cAAgB,mBAAmB,YAAY,UAAU,UAAU,KAAK,OAAO,GAC/E,QAAe,QAAQ,SAAS,WAChC,eAAe,GAAG,UAClB,aAAe,oBAAoB,QAAQ,UAAU;AAGzD,QAAI,QAAQ,UAAU;AAElB,UAAI,YAAY,IAAI,aAAa,GAAG;AAChC,oBAAY,IAAI,YAAY,QAAQ,QAAQ;AAC5C,mBAAW,QAAQ;AAAA,MACvB,OAEK;AACD,oBAAY,QAAQ,KAAK,IAAI,YAAY,OAAO,QAAQ,QAAQ;AAChE,mBAAW,MAAM;AAAA,MACrB;AAAA,IACJ;AACA,QAAI,QAAQ,WAAW;AAEnB,UAAI,YAAY,IAAI,aAAa,GAAG;AAChC,oBAAY,IAAI,YAAY,SAAS,QAAQ;AAC7C,mBAAW,MAAM;AAAA,MACrB,OAEK;AACD,oBAAY,SAAS,KAAK,IAAI,YAAY,QAAQ,QAAQ,SAAS;AACnE,mBAAW,SAAS;AAAA,MACxB;AAAA,IACJ;AACA,UAEI,UAAe,aAAa,SAAS,YAAY,SAAS,WAAW,QAAQ,WAAW,OAAO,aAAa,EAAE,OAAQ,GAAG,KAAM,EAAE,GACjI,UAAe,aAAa,UAAU,YAAY,UAAU,WAAW,MAAM,WAAW,UAAU,aAAa,EAAE,KAAM,GAAG,QAAS,EAAE,GACrI,cAAe,IAAI;AAAA,MACf,QAAS,aAAa,QAAQ,CAAC,IAAI,cAAgB,aAAa,IAAI;AAAA,MACpE,aAAa,IAAI;AAAA,MACjB;AAAA,MACA;AAAA,IACJ,GACA,SAAe,YAAY,MAAM,EAAE,OAAO,CAAC,QAAQ,OAAO,CAAC,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,EAAE,YAAY,WAAW,GAC5H,aAAe,OAAO,MAAM,GAE5B,UAAe,GAAG,QAAQ,KAAK;AACnC,QAAI,SAAS,GACT,SAAS;AACb,QAAI,UAAU,SAAS;AACnB,iBAAW,OAAO,aAAa,KAAK,GAAG,QAAQ,aAAa,QAAQ,WAAW,QAAQ,IAAI,aAAa,CAAC;AACzG,eAAS,OAAO,IAAI,WAAW;AAC/B,eAAS,OAAO,IAAI,WAAW;AAAA,IACnC,WACS,UAAU,OAAO;AACtB,iBAAW,OAAO,aAAa,KAAK,CAAC,GAAG,QAAQ,aAAa,QAAQ,WAAW,QAAQ,IAAI,aAAa,SAAS,WAAW,MAAM;AACnI,eAAS,OAAO,IAAI,WAAW;AAC/B,eAAS,OAAO,IAAI,WAAW;AAAA,IACnC,WAES,UAAU,UAAU;AACzB,YAAM,SAAS,aAAa;AAC5B,iBAAW,OAAO,OAAO,IAAI,WAAW,QAAQ,GAAG,OAAO,IAAI,WAAW,SAAS,CAAC;AACnF,eAAS,UAAU,OAAO,IAAI,WAAW;AACzC,eAAS,UAAU,OAAO,IAAI,WAAW;AAAA,IAC7C,OAEK;AAED,UAAI,WAAW,QAAQ,aAAa,OAAO;AACvC,iBAAS,WAAW,IAAI,aAAa;AAAA,MACzC,OAEK;AACD,YAAI,WAAW,QAAQ,aAAa,OAAO;AACvC,mBAAS,WAAW,QAAQ,aAAa;AAAA,QAC7C,WACS,WAAW,IAAI,aAAa,GAAG;AACpC,mBAAS,WAAW,IAAI,aAAa;AAAA,QACzC;AAAA,MACJ;AAEA,UAAI,WAAW,SAAS,aAAa,QAAQ;AACzC,iBAAS,WAAW,IAAI,aAAa;AAAA,MACzC,OAEK;AACD,YAAI,WAAW,SAAS,aAAa,QAAQ;AACzC,mBAAS,WAAW,SAAS,aAAa;AAAA,QAC9C,WACS,WAAW,IAAI,aAAa,GAAG;AACpC,mBAAS,WAAW,IAAI,aAAa;AAAA,QACzC;AAAA,MACJ;AAAA,IACJ;AAEA,aAAS,UAAU,KAAK,MAAM,MAAM;AACpC,aAAS,KAAK,MAAM,MAAM;AAE1B,QAAI,QAAQ,0BAA0B,OAAO;AAQzC,eAAS,KAAK,IAAI,KAAK,IAAI,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AACnD,eAAS,KAAK,IAAI,KAAK,IAAI,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAAA,IACvD;AACA,WAAO;AAAA,MACH,QAAS,QAAQ,MAAM,QAAQ,IAAI;AAAA,MACnC,QAAS,QAAQ,MAAM,QAAQ,IAAI;AAAA,IACvC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,WAAW;AACX,WAAO,UAAU,OAAO,KAAK,OAAO;AAAA,EACxC;AAAA,EACA,aAAa,QAAQ;AACjB,SAAK,YAAY,KAAK,QAAQ;AAAA,EAClC;AAAA,EACA,cAAc,SAAS,YAAY;AA/3BvC,QAAAA;AAg4BQ,UAAM,KAAK;AAGX,QAAI,OAAO,UAAS,iBAAiB;AACjC,SAAG,WAAW;AACd,SAAG,gBAAgB;AACnB;AAAA,IACJ;AACA,UACI,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,SAAS,KAAK,EAAE,IAC3E,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,WAAW,KAAK,EAAE;AACjF,QAAI,YAAY;AACZ,mBAAa,OAAO,YAAY,UAAU;AAC1C,UAAI,GAAG,WAAW;AACd,SAAAA,MAAA,GAAG,qBAAH,gBAAAA,IAAqB;AAAA,MACzB,OACK;AACD,mBAAW,oBAAoB,UAAU,aAAa;AACtD,mBAAW,UAAU,OAAO,WAAW;AACvC,mBAAW,MAAM,YAAY,WAAW,MAAM,YAAY;AAAA,MAC9D;AACA,oBAAc,qBAAqB,YAAY,aAAa;AAAA,IAChE;AACA,QAAI,SAAS;AACT,mBAAa,IAAI,SAAS,YAAY,EAAE;AACxC,UAAI,GAAG,WAAW;AACd,YAAI,CAAC,GAAG,kBAAkB;AACtB,aAAG,mBAAmB,IAAI,iBAAiB,GAAG,oBAAoB,GAAG,kBAAkB,GAAG,aAAa,KAAK,EAAE,EAAE;AAAA,QACpH;AACA,WAAG,KAAK,GAAG,KAAK;AAChB,YAAI,SAAS,SAAS,OAAO,GAAG;AAC5B,gBAAM,CAAC,GAAG,CAAC,IAAI,UAAU,eAAe,OAAO;AAC/C,aAAG,KAAK,CAAC;AACT,aAAG,KAAK,CAAC;AAAA,QACb;AACA,WAAG,iBAAiB,QAAQ,SAAS,EAAE,YAAa,KAAK,CAAC;AAAA,MAC9D,OACK;AACD,gBAAQ,iBAAiB,UAAU,aAAa;AAChD,gBAAQ,UAAU,IAAI,WAAW;AAAA,MACrC;AACA,oBAAc,kBAAkB,SAAS,aAAa;AACtD,UAAI,CAAC,GAAG,QAAQ;AACZ,WAAG,YAAY;AAAA,UACX,IAAI,MAAM;AACN,mBAAO,UAAU,cAAc,SAAS,WAAW,MAAM;AAAA,UAC7D;AAAA,QACJ;AAAA,MACJ;AACA,UAAI,GAAG,OAAO;AACV,gBAAQ,UAAU,IAAI,OAAO;AAAA,MACjC;AAGA,UAAI,GAAG,eAAe;AAClB,WAAG,gBAAgB,GAAG,SAAS;AAC/B,WAAG,gBAAgB,GAAG,SAAS;AAAA,MACnC;AAEA,SAAG,kBAAkB;AAErB,UAAI,GAAG,eAAe;AAClB,WAAG,MAAM,GAAG,QAAQ,GAAG,EAAE;AACzB,WAAG,MAAM,GAAG,QAAQ,GAAG,EAAE;AAAA,MAC7B;AAAA,IACJ;AACA,OAAG,gBAAgB;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,IAAI;AACJ,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAClB,QAAI,WAAW,GAAG,eAAe;AAC7B,UAAI,GAAG,WAAW;AACd,cAAM,CAAC,GAAG,CAAC,IAAI,UAAU,eAAe,OAAO;AAC/C,WAAG,KAAK,CAAC;AACT,WAAG,KAAK,CAAC;AAAA,MACb,OACK;AAED,WAAG,KAAK,KAAK,IAAI,QAAQ,UAAU;AACnC,WAAG,KAAK,QAAQ;AAAA,MACpB;AACA,SAAG,gBAAgB;AAAA,IACvB;AACA,WAAO,GAAG;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,aAAa;AACb,WAAO,KAAK,KAAK,KAAK,QAAQ,KAAK;AAAA,EACvC;AAAA,EACA,QAAQ,GAAG;AAKP,QAAI,KAAK,IAAI,GAAG,CAAC;AAEjB,QAAI,CAAC,KAAK,iBAAiB,GAAG;AAC1B,aAAO;AAAA,IACX;AACA,SAAK,KAAK;AAAA,EACd;AAAA,EACA,qBAAqB,gBAAgB;AACjC,QAAI,gBAAgB;AAChB,uBAAiB,OAAO,mBAAmB,WAAW,KAAK,QAAQ,cAAc,cAAc,IAAI;AACnG,oBAAc,kBAAkB,gBAAgB,KAAK,aAAa;AAAA,IACtE;AAAA,EACJ;AAAA,EACA,QAAQ,GAAG;AA3/Bf,QAAAA;AA4/BQ,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAElB,QAAI,WAAW,GAACA,MAAA,GAAG,WAAH,gBAAAA,IAAW,gBAAe;AAItC,UAAI,KAAK,MAAM,CAAC;AAChB,SAAG,QAAQ,eAAe,EAAE,EAAE,CAAC;AAC/B,UAAI,GAAG,WAAW;AACd,kBAAU,cAAc,SAAS,CAAC,CAAC;AAAA,MACvC,OACK;AACD,gBAAQ,aAAa,GAAG,QAAQ,CAAC,IAAI;AAAA,MACzC;AAAA,IACJ;AAIA,OAAG,gBAAgB;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,KAAK,oBAAoB,MAAM;AAC3B,UACI,KAAW,MACX,EAAE,GAAG,EAAE,IAAI;AACf,QAAI,SAAS;AACb,QAAI,KAAK,MAAM;AACX,UAAI,GAAG,MAAM,mBAAmB,GAAG;AAG/B,WAAG,qBAAqB;AACxB,WAAG,IAAI,mBAAmB;AAC1B,iBAAS;AAAA,MACb;AAAA,IACJ;AACA,QAAI,KAAK,MAAM;AACX,UAAI,GAAG,MAAM,mBAAmB,GAAG;AAC/B,WAAG,qBAAqB;AACxB,WAAG,IAAI,mBAAmB;AAC1B,iBAAS;AAAA,MACb;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,IAAI;AACJ,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAClB,QAAI,WAAW,GAAG,eAAe;AAC7B,UAAI,GAAG,WAAW;AACd,cAAM,CAAC,GAAG,CAAC,IAAI,UAAU,eAAe,OAAO;AAC/C,WAAG,KAAK,CAAC;AACT,WAAG,KAAK,CAAC;AAAA,MACb,OACK;AACD,WAAG,KAAK,QAAQ;AAChB,WAAG,KAAK,QAAQ;AAAA,MACpB;AACA,SAAG,gBAAgB;AAAA,IACvB;AACA,WAAO,GAAG;AAAA,EACd;AAAA,EACA,QAAQ,GAAG;AAEP,QAAI,CAAC,KAAK,iBAAiB,GAAG;AAC1B,aAAO;AAAA,IACX;AACA,SAAK,KAAK;AAAA,EACd;AAAA,EACA,QAAQ,GAAG;AACP,UAAM,EAAE,SAAS,OAAO,IAAI;AAE5B,QAAI,WAAW,EAAC,iCAAQ,gBAAe;AACnC,WAAK,QAAQ,eAAe,EAAE,EAAE,CAAC;AACjC,UAAI,KAAK,WAAW;AAChB,kBAAU,cAAc,SAAS,CAAC,CAAC;AAAA,MACvC,OACK;AACD,gBAAQ,YAAY;AAAA,MACxB;AAAA,IACJ;AAIA,SAAK,gBAAgB;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,OAAO;AACP,WAAO,KAAK,cAAc,KAAK;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,OAAO;AACP,WAAO,KAAK,eAAe,KAAK;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,iBAAiB;AACjB,YAAQ,KAAK,cAAc,KAAK,gBAAgB,KAAK,QAAQ,KAAK;AAAA,EACtE;AAAA,EACA,gBAAgB,WAAW,cAAc;AACrC,UACI,KAAyB,MACzB,EAAE,SAAS,UAAU,IAAI,IACzB,EAAE,OAAO,UAAU,IAAM;AAC7B,QAAI,iBAAiB,iBAAiB;AAClC,gBAAU,OAAO,eAAe;AAAA,IACpC;AAIA,QAAI,cAAc,mBAAmB,CAAC,WAAW;AAC7C,YAAM,sBAAsB,aAAa,MAAM,SAAS;AAIxD,UAAI,qBAAqB;AACrB,oBAAY;AAEZ,WAAG,YAAY;AAAA,MACnB,OACK;AACD,kBAAU,IAAI,eAAe;AAAA,MACjC;AAAA,IACJ;AACA,QAAI,CAAC,WAAW;AACZ,YAAM,YAAY,eAAe,SAAS,KAAK;AAAA,IACnD;AACA,QAAI,CAAC,GAAG,eAAe;AACnB,SAAG,gBAAgB;AACnB,SAAG,kBAAkB;AAAA,IACzB;AAAA,EACJ;AAAA,EACA,gBAAgB,WAAW,cAAc;AACrC,UACI,KAAyB,MACzB,EAAE,SAAS,UAAU,IAAI,IACzB,EAAE,OAAO,UAAU,IAAM;AAC7B,QAAI,iBAAiB,iBAAiB;AAClC,gBAAU,OAAO,eAAe;AAAA,IACpC;AAKA,QAAI,cAAc,mBAAmB,CAAC,WAAW;AAC7C,YAAM,sBAAsB,aAAa,MAAM,SAAS;AAIxD,UAAI,qBAAqB;AACrB,oBAAY;AAEZ,WAAG,YAAY;AAAA,MACnB,OACK;AACD,kBAAU,IAAI,eAAe;AAAA,MACjC;AAAA,IACJ;AACA,QAAI,CAAC,WAAW;AACZ,YAAM,YAAY,eAAe,SAAS,KAAK;AAAA,IACnD;AACA,QAAI,CAAC,GAAG,eAAe;AACnB,SAAG,gBAAgB;AACnB,SAAG,kBAAkB;AAAA,IACzB;AAAA,EACJ;AAAA,EACA,cAAc;AACV,QAAI,CAAC,KAAK,sBAAsB;AAC5B,WAAK,uBAAuB,YAAY,GAAG;AAAA,QACvC,SAAU,KAAK;AAAA,QACf,OAAU;AAAA,QACV,SAAU;AAAA,MACd,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EACA,QAAQ,GAAG;AACP,QAAI,KAAK,IAAI,EAAE,MAAM,IAAI,KAAK,IAAI,EAAE,MAAM,KAAK,KAAK,cAAc,iBAAiB;AAC/E,WAAK,KAAK,EAAE;AAAA,IAChB,WACS,KAAK,cAAc,iBAAiB;AACzC,WAAK,KAAK,EAAE;AAAA,IAChB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,cAAc;AAptCtB,QAAAA,KAAA;AAqtCQ,YAAO,MAAAA,MAAA,KAAK,YAAL,gBAAAA,IAAc,gBAAd,YAA6B;AAAA,EACxC;AAAA,EACA,IAAI,YAAY,aAAa;AACzB,UACI,KAAqB,MACrB,EAAE,SAAS,MAAM,IAAI;AACzB,QAAI,YAAY,GAAG;AAEnB,QAAI,aAAa,eAAe,MAAM;AAClC,gBAAU,OAAO;AACjB,SAAG,iBAAiB;AAAA,IACxB,WACS,aAAa;AAIlB,oBAAc,KAAK,IAAI,WAAW;AAClC,UAAI,CAAC,WAAW;AACZ,oBAAY,GAAG,iBAAiB,UAAU,cAAc;AAAA,UACpD,WAAgB;AAAA;AAAA,UAEhB,eAAgB;AAAA,QACpB,CAAC;AAAA,MACL;AACA,gBAAU,MAAM,YAAY,eAAe,cAAc,MAAM,QAAQ,KAAK,EAAE;AAC9E,UAAI,WAAW,CAAC,QAAQ,SAAS,SAAS,GAAG;AACzC,gBAAQ,aAAa,WAAW,QAAQ,iBAAiB;AAAA,MAC7D;AAAA,IACJ;AAEA,QAAI,GAAG,cAAc,OAAO;AACxB,SAAG,YAAY,CAAC,EAAE,SAAS,MAAM;AAE7B,iBAAS,YAAY;AACrB,iBAAS,cAAc;AACvB,eAAO,SAAS;AAAA,MACpB,CAAC;AAAA,IACL;AACA,OAAG,gBAAgB;AACnB,OAAG,kBAAkB;AAAA,EACzB;AAAA,EACA,IAAI,eAAe;AA9vCvB,QAAAA,KAAA;AA+vCQ,YAAO,MAAAA,MAAA,KAAK,YAAL,gBAAAA,IAAc,iBAAd,YAA8B;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,aAAa,cAAc;AAC3B,UACI,KAAY,MACZ,YAAY,GAAG,cAAc,GAAG,YAAY,UAAU,cAAc;AAAA,MAChE,WAAY;AAAA,IAChB,CAAC;AACL,cAAU,MAAM,YAAY,cAAc,eAAe,CAAC;AAC1D,QAAI,GAAG,WAAW,GAAG,QAAQ,cAAc,WAAW;AAClD,SAAG,QAAQ,YAAY,SAAS;AAAA,IACpC;AACA,OAAG,gBAAgB;AACnB,OAAG,kBAAkB;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,cAAc;AAzxCtB,QAAAA;AA0xCQ,aAAOA,MAAA,KAAK,YAAL,gBAAAA,IAAc,gBAAe;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,eAAe;AAjyCvB,QAAAA;AAkyCQ,aAAOA,MAAA,KAAK,YAAL,gBAAAA,IAAc,iBAAgB;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,KAAK;AACL,QAAI,CAAC,KAAK,KAAK;AACX,UAAI,KAAK,QAAQ;AACb,aAAK,MAAM,GAAG,KAAK,OAAO,EAAE;AAAA,MAChC,OACK;AACD,aAAK,MAAM,SAAS,WAAW,WAAW;AAAA,MAC9C;AAAA,IACJ;AACA,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA,EAGA,yBAAyB,SAAS;AAC9B,UAAM,yBAAyB;AAC/B,WAAO,QAAQ;AACf,WAAO,QAAQ;AAAA,EACnB;AAAA;AAEJ;AACA,SAAS,SAAS;;;AChyClB,IAAqB,aAArB,MAAgC;AAAA,EAC5B,YAAYG,KAAI;AACZ,SAAK,UAAU,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC5C,WAAK,UAAU;AACf,WAAK,SAAS;AAAA,IAClB,CAAC;AACD,QAAIA,KAAI;AACJ,MAAAA,IAAG,IAAI;AAAA,IACX;AAAA,EACJ;AACJ;AACA,WAAW,SAAS;;;AChCpB,IAAM,EAAE,gBAAAC,gBAAe,IAAI;AAiC3B,IAAqB,aAArB,MAAqB,oBAAmB,KAAK,MAAM,qBAAa,gBAAQ,mBAAW,oBAAY,EAAE;AAAA,EAC7F,WAAW,eAAe;AACtB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASH,SAAU;AAAA,IACd;AAAA,EACJ;AAAA,EACA,WAAW,YAAY;AACnB,WAAO;AAAA,MACH,YAAa;AAAA,IACjB;AAAA,EACJ;AAAA,EACA,WAAW,eAAe;AACtB,WAAO,CAAE;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW,gBAAgB;AACvB,UACI,KAAK,MACL,OAAO,GAAG;AACd,QAAI,gBAAgB,KAAK,eACrB,SAAS;AACb,QAAI,kBAAkB,QAAW;AAC7B,sBAAgB;AAChB,gBAAU,KAAK;AACf,WAAK,QAAQ,SAAS;AAClB,YAAI,QAAQ,IAAI,EAAE,QAAQ;AACtB,WAAC,kBAAkB,gBAAgB,oBAAI,IAAI,IAAI,IAAI,IAAI;AAAA,QAC3D;AAAA,MACJ;AAEA,WAAK,gBAAgB,GAAG,UAAU,iBAAiB;AAAA,IACvD;AACA,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,aAAa,MAAM;AACf,SAAK,OAAO,EAAE,YAAW;AACzB,SAAK,QAAQ,CAAC;AACd,UAAM,UAAU,GAAG,IAAI;AACvB,QAAI,KAAK,WAAW,YAAW,UAAU,QAAQ;AAC7C,WAAK,aAAa;AAAA,IACtB;AAAA,EACJ;AAAA,EACA,eAAe,QAAQ;AACnB,SAAK,UAAU,KAAK,cAAc,UAAU;AAC5C,UAAM,eAAe,MAAM;AAAA,EAC/B;AAAA;AAAA;AAAA,EAGA,IAAI,UAAU;AAGV,SAAK,WAAW,MAAM;AACtB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,SAAS,YAAY;AAC/B,UAAM,KAAK;AACX,QAAI,YAAY;AACZ,iBAAW,OAAO;AAAA,IACtB;AACA,QAAI,SAAS;AACT,cAAQ,KAAK,GAAG;AAChB,gBAAU,UAAU,cAAc,SAAS;AAAA,QACvC,UAAW;AAAA,MACf,CAAC;AAAA,IACL;AACA,WAAO;AAAA,EACX;AAAA,EACA,SAAS,IAAI,OAAO;AAChB,UAAM,KAAK;AACX,QAAI,OAAO;AACP,YAAM,UAAU,GAAG;AACnB,cAAQ,KAAK;AACb,SAAG,cAAc,SAAS,IAAI,KAAK;AAAA,IACvC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,UAAU;AACV,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,IAAI,IAAI,OAAO;AACzB,QAAI,GAAG,gBAAgB,OAAO;AAC1B,SAAG,cAAc;AACjB,YAAM,MAAM,GAAG;AACf,UAAI,KAAK;AACL,WAAG,KAAK,GAAG,EAAE,IAAI,GAAG;AAAA,MACxB;AACA,iBAAW,KAAK,GAAG,YAAY;AAC3B,aAAK,cAAc,GAAG,IAAI,KAAK;AAAA,MACnC;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,eAAe,EAAE,KAAK,GAAG;AAGrB,QAAI,CAAC,KAAK,iBAAiB,KAAK,eAAe,IAAI,IAAI,GAAG;AACtD,WAAK,WAAW;AAAA,IACpB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,UAAU,MAAM,IAAI,WAAW;AAC3B,UACI,KAAK,MACL,MAAM,MAAM,MAEZ,EAAE,UAAU,IAAI;AACpB,QAAI,EAAE,OAAO,KAAK;AACd,MAAAA,gBAAe,IAAI,MAAM;AAAA,QACrB,MAAM;AAEF,aAAG,WAAW,MAAM;AACpB,iBAAO,GAAG,GAAG;AAAA,QACjB;AAAA,QACA,IAAIC,KAAI;AACJ,aAAG,GAAG,IAAIA;AAAA,QAKd;AAAA,MACJ,CAAC;AAAA,IACL;AACA,OAAG,KAAK,GAAG,GAAG,EAAE,IAAI,IAAI;AACxB,OAAG,MAAM,IAAI,IAAI;AACjB,OAAG,IAAI,IAAI;AACX,QAAI,WAAW;AACX,gBAAU,YAAY;AAAA,QAClB,IAAK;AAAA,QACL,IAAK,YAAY,GAAG,OAAO,OAAO;AAAA,UAC9B,SAAU;AAAA,UACV,SAAU;AAAA,QACd,GAAG,SAAS,CAAC;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU,MAAM,IAAI,WAAW;AAC3B,QAAI,UAAU,WAAW;AACrB,gBAAU,UAAU,GAAG;AACvB,gBAAU,YAAY;AAAA,IAC1B;AACA,SAAK,IAAI,IAAI;AACb,WAAO,KAAK,MAAM,IAAI;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,YAAY;AAER,WAAO,CAAC;AAAA,EACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,gBAAgB;AAChB,UACI,KAAK,MACL,OAAO,GAAG,OACV,IAAI,GAAG;AACX,QAAI,gBAAgB,KAAK,iBAAiB,EAAE,eACxC,UAAU;AAId,QAAI,CAAC,eAAe;AAChB,gBAAU,OAAO,OAAO,EAAE;AAC1B,sBAAgB,oBAAI,IAAI;AACxB,iBAAW,QAAQ,KAAK,SAAS;AAC7B,QAAAD,gBAAe,SAAS,MAAM;AAAA,UAC1B,MAAM;AACF,0BAAc,IAAI,IAAI;AACtB,mBAAO,GAAG,IAAI;AAAA,UAClB;AAAA,QACJ,CAAC;AAAA,MACL;AAGA,cAAQ,YAAY,MAAM;AACtB,eAAO,GAAG,UAAU,KAAK,OAAO;AAAA,MACpC;AACA,SAAG,iBAAiB;AAAA,IACxB;AAEA,IAAAA,gBAAe,IAAI,iBAAiB;AAAA,MAChC,OAAQ;AAAA,IACZ,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,aAAa;AACT,YAAQ,KAAK;AAAA,MACT,eAAgB,KAAK;AAAA,MACrB,WAAgB,KAAK,cAAc,UAAU;AAAA,MAC7C,UAAgB;AAAA;AAAA;AAAA,MAGhB,QAAS;AAAA,IACb,CAAC;AAAA,EACL;AAAA;AAAA,EAEA,SAAS,WAAW;AAEhB,QAAI,cAAc,QAAQ;AACtB,WAAK,aAAa;AAAA,IACtB;AAAA,EACJ;AAAA,EACA,eAAe;AACX,UAAM,KAAK;AACX,QAAI,CAAC,GAAG,aAAa;AACjB,UAAI,KAAK,OAAO,OAAO,GAAG,KAAK,EAAE,KAAK,CAAAC,QAAMA,IAAG,UAAU,SAAS,YAAY,CAAC;AAC/E,UAAI,CAAC,IAAI;AACL,aAAK,GAAG;AACR,WAAG,UAAU,IAAI,YAAY;AAAA,MACjC;AACA,SAAG,cAAc,IAAI,qBAAqB,aAAW;AACjD,YAAI,CAAC,GAAG,aAAa;AACjB,kBAAQ,QAAQ,SAAO;AACnB,gBAAI,IAAI,gBAAgB;AACpB,iBAAG,OAAO;AAAA,gBACN,OAAQ,EAAE,GAAG;AAAA,cACjB,CAAC;AAAA,YACL;AAAA,UACJ,CAAC;AAAA,QACL;AAAA,MACJ,CAAC;AACD,SAAG,YAAY,QAAQ,EAAE;AAAA,IAC7B;AAAA,EACJ;AAAA,EACA,OAAO,IAAI;AACP,SAAK,QAAQ,QAAQ,EAAE;AAAA,EAC3B;AACJ;AACA,WAAW,UAAU;AACrB,OAAO,OAAO,WAAW,WAAW;AAAA,EAChC,aAAiB;AAAA,EACjB,gBAAiB;AAAA,EACjB,aAAiB;AACrB,CAAC;AACD,WAAW,SAAS;;;ACxSpB,IAAqB,QAArB,MAAqB,cAAa,WAAW;AAAA,EA6GzC,UAAU,QAAQ;AACd,QAAI,QAAQ;AACR,UAAI,KAAK,OAAO,SACZ;AAGJ,UAAI,IAAI;AACJ,sBAAc,UAAU,QAAQ,SAAS,oDAAoD;AAC7F,iBAAS,MAAM,OAAO,OAAO,CAAC,GAAG,MAAM;AACvC,eAAO,IAAI;AACX,YAAI,SAAS;AAAA,MACjB;AACA,WAAK,OAAO;AACZ,UAAI,OAAO,OAAO,UAAU;AACxB,iBAAS,MAAM,OAAO,OAAO,OAAO,CAAC,GAAG,MAAM;AAC9C,YAAI,SAAS,OAAO,MAAM,EAAE;AAAA,MAChC;AAAA,IACJ;AACA,UAAM,UAAU,MAAM;AACtB,UACI,KAAW,MACX,EAAE,KAAK,IAAI;AACf,QAAI,CAAC,GAAG,QAAQ;AACZ,SAAG,SAAS,SAAS;AAAA,IACzB;AACA,OAAG,WAAW,OAAO,OAAO,SAAS,WAAW,KAAK,KAAK,IAAI,EAAE,IAAI,MAAK,SAAS;AAClF,OAAG,KAAK;AAAA,EACZ;AAAA,EACA,YAAY;AACR,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAClB,QAAI,GAAG,SAAS,SAAS;AACrB,aAAO;AAAA,IACX;AACA,QAAI,SAAS;AACT,SAAG,UAAU;AACb,UAAI,GAAG,KAAK,SAAS,MAAM,GAAG;AAC1B,kBAAU,aAAa,SAAS,WAAS;AACrC,gBAAM,UAAU,OAAO,YAAY,GAAG,IAAI,EAAE;AAAA,QAChD,CAAC;AAAA,MACL;AACA,SAAG,OAAO,UAAU,OAAO,UAAU;AACrC,SAAG,OAAO,GAAG,QAAQ,IAAI;AACzB,kBAAY,OAAO,MAAK,OAAO,EAAE;AAAA,IACrC;AACA,UAAM,UAAU;AAAA,EACpB;AAAA,EACA,IAAI,cAAc;AACd,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,MAAM,OAAO;AACb,SAAK,UAAU,KAAK,aAAa;AACjC,SAAK,OAAO;AAAA,EAChB;AAAA,EACA,YAAY;AACR,UACI,KAAkB,MAClB,EAAE,YAAY,IAAI;AACtB,WAAO;AAAA,MACH,OAAQ;AAAA,QACJ,UAA0B;AAAA,QAC1B,kBAA0B,GAAG;AAAA,QAC7B,YAA0B;AAAA,QAC1B,CAAC,UAAU,GAAG,IAAI,EAAE,GAAM;AAAA,QAC1B,cAA0B;AAAA,QAC1B,yBAA0B,CAAC,GAAG;AAAA,MAClC;AAAA,MACA,UAAW,CAAC;AAAA,QACR,WAAY;AAAA,QACZ,OAAY;AAAA,QACZ,UAAY;AAAA,UACR,cAAc;AAAA,YACV,WAAY;AAAA,YACZ,OAAY;AAAA,YACZ,OAAY;AAAA,cACR,OAAQ,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAM,GAAG,WAAW,cAAc,GAAG,CAAC,CAAC,CAAC;AAAA,YACtF;AAAA,UACJ,IAAI;AAAA,UACJ;AAAA,YACI,WAAY;AAAA,YACZ,OAAY;AAAA,YACZ,OAAa,GAAG,OAAO,yBAAyB,GAAG,IAAI,WAAW,MAAM,GAAG;AAAA,UAC/E;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,OAAO,gBAAgB,SAAS;AAC5B,UAAM,MAAM,CAAC;AACb,eAAW,OAAO,SAAS;AACvB,UAAI,OAAO,QAAQ,UAAU;AACzB,YAAI,OAAO;AAAA,MACf,OACK;AACD,qBAAa,OAAO,KAAK,GAAG;AAAA,MAChC;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,KAAK,MAAM,SAAS,SAAS,MAAM;AACtC,WAAO,MAAK,IAAI,EAAE,OAAO,GAAG,OAAO,SAAS,WAAW,EAAE,GAAG,KAAK,IAAI,EAAE,KAAK,CAAC;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,OAAO,UAAU,SAAS,MAAM;AACnC,UAAM,QAAQ,KAAK,gBAAgB,OAAO;AAC1C,QAAI,MAAM,SAAS,GAAG;AAClB,aAAO,MAAM,MAAM,SAAS,CAAC,EAAE,MAAM;AAAA,IACzC;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAU,UAAU,SAAS,MAAM;AACtC,WAAO,KAAK,gBAAgB,OAAO,EAAE,QAAQ,UAAQ,KAAK,MAAM,CAAC;AAAA,EACrE;AAAA,EACA,OAAO,gBAAgB,SAAS;AAC5B,WAAO,KAAK,MAAM,OAAO,UAAQ,KAAK,WAAW,OAAO;AAAA,EAC5D;AAAA;AAAA;AAAA,EAGA,gBAAgBC,QAAO;AACnB,SAAK,cAAc,OAAO;AAC1B,QAAIA,QAAO;AACP,WAAK,cAAc,QAAQA;AAC3B,WAAK,cAAc;AAAA,IACvB;AAAA,EACJ;AAAA,EACA,cAAc;AACV,SAAK,UAAU;AAAA,EACnB;AAAA,EACA,YAAY;AA5ThB,QAAAC,KAAA;AA6TQ,WAAAA,MAAA,KAAK,UAAL,gBAAAA,IAAY,kBAAZ,wBAAAA,KAA4B;AAAA,EAChC;AAAA,EACA,gBAAgB;AACZ,SAAK,UAAU;AAAA,EACnB;AAAA,EACA,YAAY,OAAO;AACf,SAAK,gBAAgB,OAAO;AAC5B,mCAAO,IAAI;AAAA,MACP,MAAY;AAAA,MACZ,WAAY;AAAA,MACZ,QAAY;AAAA,MACZ,SAAY;AAAA,IAChB;AAAA,EACJ;AAAA,EACA,gBAAgBD,QAAO;AACnB,UAAM,EAAE,YAAY,IAAI;AACxB,gBAAY,QAAQA;AACpB,QAAI,CAACA,QAAO;AACR,kBAAY,MAAM;AAAA,IACtB;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,gBAAgB;AApVpB,QAAAC;AAqVQ,UAAM,EAAE,MAAM,IAAI;AAClB,SAAK,MAAM,EAAE,KAAK,MAAM;AAtVhC,UAAAA;AAuVY,OAAAA,MAAA,+BAAO,oBAAP,gBAAAA,IAAA,YAAyB;AAAA,IAC7B,CAAC;AACD,KAAAA,MAAA,+BAAO,sBAAP,gBAAAA,IAAA,YAA2B;AAAA,EAC/B;AAAA,EACA,cAAc;AACV,SAAK,QAAQ,OAAO,gBAAgB;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO;AACH,UACI,KAAK,MACL,EAAE,SAAS,QAAQ,QAAQ,SAAS,IAAI;AAK5C,QAAI,QAAQ;AAIR,aAAO,QAAQ;AAGf,SAAG,SAAS;AACZ,SAAG,aAAa,MAAM;AAAA,IAC1B;AACA,QAAI,GAAG,WAAW;AACd,cAAQ,UAAU,IAAI,gBAAgB;AACtC,SAAG,YAAY;AAAA,IACnB;AACA,YAAQ,UAAU,IAAI,WAAW;AACjC,YAAQ,UAAU,OAAO,UAAU;AACnC,WAAO,UAAU,IAAI,UAAU;AAC/B,QAAI,CAAC,OAAO,QAAQ,GAAG;AACnB,aAAO,QAAQ,IAAI;AACnB,aAAO,YAAY,OAAO;AAAA,IAC9B;AACA,gBAAY,QAAQ,MAAK,OAAO,EAAE;AAClC,OAAG,QAAQ;AACX,OAAG,QAAQ,MAAM;AAEjB,QAAI,GAAG,KAAK,SAAS,MAAM,GAAG;AAC1B,gBAAU,aAAa,QAAQ,WAAS;AACpC,YAAI,UAAU,SAAS;AACnB,gBAAM,UAAU,IAAI,YAAY,GAAG,IAAI,EAAE;AAAA,QAC7C;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO;AACH,UACI,KAAK,MACL,EAAE,QAAQ,QAAQ,IAAI;AAC1B,QAAI,EAAE,OAAO,IAAI;AACjB,QAAI,CAAC,QAAQ;AACT,UAAI,CAAC,GAAG,OAAO;AACX,eAAO,QAAQ,QAAQ;AAAA,MAC3B;AACA,SAAG,SAAS,SAAS,IAAI,WAAW;AACpC,SAAG,QAAQ;AACX,cAAQ,UAAU,OAAO,WAAW;AACpC,cAAQ,UAAU,IAAI,UAAU;AAChC,aAAO,UAAU,OAAO,UAAU;AAClC,UAAI,GAAG,KAAK,SAAS,MAAM,GAAG;AAC1B,kBAAU,aAAa,QAAQ,WAAS;AACpC,cAAI,UAAU,SAAS;AACnB,kBAAM,UAAU,OAAO,YAAY,GAAG,IAAI,EAAE;AAAA,UAChD;AAAA,QACJ,CAAC;AAAA,MACL;AACA,aAAO,UAAU,OAAO,QAAQ,KAAK,MAAM;AACvC,YAAI,GAAG,WAAW,QAAQ;AACtB,aAAG,SAAS;AAAA,QAChB;AAAA,MACJ,CAAC;AACD,SAAG,WAAW,MAAM,OAAO,QAAQ,GAAG,KAAK,MAAM;AAAA,IACrD;AACA,WAAO,OAAO;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ;AACV,UAAM,KAAK,KAAK;AAChB,SAAK,QAAQ;AAAA,EACjB;AAAA;AAEJ;AAAA;AAzXI,cAFiB,OAEV,SAAQ;AACf,cAHiB,OAGV,QAAO;AACd,cAJiB,OAIV,gBAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWlB,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWZ,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMR,MAAO;AAAA,EACP,eAAgB;AAAA,IACZ,MAAY;AAAA,IACZ,WAAY;AAAA,IACZ,WAAY;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMd,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKP,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYX,OAAQ;AAAA,IACJ,SAAU;AAAA,IACV,OAAU;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAKT,MAAO;AAAA,EACP,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQP,WAAY;AAAA,EACZ,eAAgB;AACpB;AACA,cA/FiB,OA+FV,aAAY;AAAA,EACf,eAAgB;AAAA,EAChB,aAAgB;AAAA,EAChB,WAAgB;AAAA,IACZ,MAAQ;AAAA,IACR,OAAQ;AAAA,EACZ;AACJ;AAAA;AAAA;AAAA;AAIA,cA1GiB,OA0GV,WAAU;AAAA;AAEjB,cA5GiB,OA4GV,SAAQ,CAAC;AA5GpB,IAAqB,OAArB;AA4XA,KAAK,SAAS;;;ACjZd,IAAO,iBAAQ,YAAO;AArCtB,MAAAC;AAqCyB,SAAAA,MAAA,eAAsB,UAAU,MAAM;AAAA,IAE3D,IAAI,cAAc;AAAA,IAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKnB,IAAI,gBAAgB;AAChB,aAAO,KAAK;AAAA,IAChB;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,sBAAsB;AACtB,aAAO,KAAK;AAAA,IAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAiBA,iBAAiB,UAAU,SAAS,KAAK,QAAQ;AAC7C,UAAI,UAAU,CAAC,SAAS,WAAW,SAAS,QAAQ,QAAW;AAE3D,eAAO,aAAa,KAAK,MAAM,EAAE,KAAK,eAAa;AAC/C,gBACI,OAAe,UAAU,MAAM,GAAG,GAClC,aAAe,KAAK,SAAS,KAAK,GAClC,eAAe,KAAK,SAAS,OAAO,GACpC,cAAe,KAAK,SAAS,MAAM;AAEvC,cAAI,YAAe,KAAK,KAAK,SAAS,CAAC,EAAE,YAAY;AACrD,cAAI,cAAc,SAAS;AACvB,wBAAY;AAAA,UAChB;AAEA,iBAAO,cAAc,SAAS,IAAI,YAAY,MACxC,CAAC,SAAS,UAAU,CAAC,cAAgB,SAAS,UAAU,gBACxD,CAAC,SAAS,WAAW,CAAC,eAAiB,SAAS,WAAW,iBAC3D,CAAC,SAAS,YAAY,CAAC,gBAAkB,SAAS,YAAY;AAAA,QACxE,CAAC;AAAA,MACL;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,oBAAoB,OAAO;AAhG/B,UAAAA;AAiGQ,YAAM,EAAE,OAAO,IAAI;AACnB,UAAI,gBAAgB;AAEpB,UAAI,UAAU,CAAC,MAAM,WAAW,MAAM,QAAQ,QAAW;AACrD,cAAM,MAAM,KAAK,iBAAiB,KAAK;AAEvC,YAAI,OAAO,GAAG,GAAG;AAEb,gBAAMC,WAAU,YAAY,QAAQ,OAAO,GAAG,CAAC;AAE/C,gBAAM,aAAa;AACnB,gBAAM,SAAS;AACf,cAAIC;AAEJ,mBAAS,UAAUD,UAAS;AACxB,YAAAC,kBAAiB;AAEjB,gBAAI,aAAa,SAAS,MAAM,GAAG;AAC/B,kBAAI,CAAC,OAAO,SAAS;AACjB;AAAA,cACJ;AACA,kBAAI,OAAO,mBAAmB,OAAO;AACjC,gBAAAA,kBAAiB;AAAA,cACrB;AACA,uBAAS,OAAO;AAAA,YACpB;AACA,gBAAI,OAAO,WAAW,UAAU;AAC5B,oBAAM;AAAA,gBACF;AAAA,gBACA;AAAA,cACJ,IAAI,KAAK,oBAAoB,MAAM;AAEnC,oBAAIF,MAAA,QAAQ,sBAAR,gBAAAA,IAAA,cAA4B,EAAE,KAAK,QAAQ,OAAO,YAAa,OAAO,MAAM,GAAG,EAAE,IAAI,EAAE,QAAO,OAAO;AAErG,oBAAI,QAAQ,KAAK,SAAS,KAAK,MAAM,OAAO;AACxC,kCAAgB;AAChB;AAAA,gBACJ;AAAA,cACJ;AAAA,YACJ,WACS,OAAO,KAAK,MAAM,KAAK,MAAM,OAAO;AACzC,8BAAgB;AAChB;AAAA,YACJ;AAAA,UACJ;AAEA,iBAAO,MAAM;AACb,iBAAO,MAAM;AACb,cAAI,eAAe;AACf,gBAAIE,iBAAgB;AAChB,oBAAM,eAAe;AAAA,YACzB;AACA,kBAAM,UAAU;AAAA,UACpB;AAAA,QACJ;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAoBA,oBAAoB,QAAQ;AACxB,YAAM,EAAE,oBAAoB,IAAI;AAChC,UAAI,OAAO,WAAW,KAAK,KAAK,OAAO,WAAW,OAAO,GAAG;AACxD,eAAO,KAAK,gBAAgB,MAAM;AAAA,MACtC;AACA,UAAI,uBAAuB,OAAO,SAAS,GAAG,GAAG;AAC7C,cAAM,CAAC,WAAW,UAAU,IAAI,OAAO,MAAM,GAAG;AAChD,YAAI,aAAa,YAAY;AACzB,iBAAO;AAAA,YACH,SAAU,oBAAoB,SAAS;AAAA,YACvC,SAAU,oBAAoB,SAAS,EAAE,UAAU;AAAA,UACvD;AAAA,QACJ;AAAA,MACJ;AACA,aAAO;AAAA,QACH,SAAU;AAAA,QACV,SAAU,KAAK,MAAM;AAAA,MACzB;AAAA,IACJ;AAAA,IACA,aAAa,QAAQ;AAjMzB,UAAAF;AAkMQ,OAAAA,MAAA,KAAK,mBAAL,gBAAAA,IAAA;AACA,UAAI,CAAC,aAAa,QAAQ,MAAM,GAAG;AAC/B,aAAK,iBAAiB,YAAY,GAAG;AAAA,UACjC,SAAU,KAAK;AAAA,UACf,SAAU;AAAA,UACV,SAAU;AAAA,QACd,CAAC;AAAA,MACL;AAAA,IACJ;AAAA;AAAA,IAEA,gBAAgB,OAAO;AACnB,WAAK,oBAAoB,KAAK;AAAA,IAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,aAAa,QAAQ,QAAQ,YAAY,MAAM;AAC3C,YAAM,eAAe,CAAC;AACtB,UAAI,QAAQ;AACR,qBAAa,OAAO,cAAc,MAAM;AAAA,MAC5C;AACA,iBAAW,OAAO,QAAQ;AACtB,YAAI,CAAC,OAAO,GAAG,GAAG;AACd;AAAA,QACJ;AACA,cACI,kBAAkB,YAAY,QAAQ,iCAAS,IAAI,GACnDC,WAAkB,CAAC;AACvB,YAAI,mDAAiB,QAAQ;AACzB,UAAAA,SAAQ,KAAK,GAAG,eAAe;AAAA,QACnC;AACA,YAAI,EAAC,mDAAiB,KAAK,OAAK;AAC5B,gBAAM,UAAW,EAAE,UAAU,EAAE,UAAU;AACzC,iBAAO,OAAQ,YAAY,YAAY,QAAQ,WAAW,YAAY,GAAG;AAAA,QAC7E,KAAI;AACA,qBAAW,UAAU,YAAY,QAAQ,OAAO,GAAG,CAAC,GAAG;AAEnD,gBAAI,aAAa,SAAS,MAAM,KAAK,OAAO,SAAS;AACjD,cAAAA,SAAQ,KAAK,aAAa,SAAS;AAAA,gBAC/B,UAAW,YAAY,YAAY,MAAM,MAAM,OAAO;AAAA,cAC1D,GAAG,MAAM,CAAC;AAAA,YACd,WACS,OAAO,WAAW,YAAY;AACnC,cAAAA,SAAQ,KAAK,MAAM;AAAA,YACvB,OACK;AACD,cAAAA,SAAQ,MAAM,YAAY,YAAY,MAAM,MAAM,MAAM;AAAA,YAC5D;AAAA,UACJ;AACA,UAAAA,SAAQ,KAAK,CAAC,GAAG,MAAM;AAEnB,kBAAM,UAAU,EAAE,UAAU,MAAM,EAAE,UAAU;AAE9C,gBAAI,WAAW,MAAK,mDAAiB,SAAQ;AACzC,qBAAO,gBAAgB,QAAQ,CAAC,IAAI,gBAAgB,QAAQ,CAAC;AAAA,YACjE;AACA,mBAAO;AAAA,UACX,CAAC;AAAA,QACL;AACA,qBAAa,GAAG,IAAIA;AAAA,MACxB;AACA,aAAO;AAAA,IACX;AAAA,EACJ,GAjOI,cADqBD,KACd,SAAQ,WAgBf,cAjBqBA,KAiBd,gBAAe;AAAA,IAClB,QAAS;AAAA,MACL,OAAQ;AAAA,MACR,SAAU;AAAA,QACN,OAAU;AAAA,QACV,SAAU;AAAA,MACd;AAAA,IACJ;AAAA,EACJ,IAzBqBA;AAAA;;;AC1BzB,IAAO,cAAQ,YAAO;AAXtB,MAAAG;AAWyB,SAAAA,MAAA,eAAmB,UAAU,MAAM;AAAA,IAExD,IAAI,cAAc;AAAA,IAAC;AAAA;AAAA,IAkCnB,IAAI,QAAQ;AACR,aAAO,KAAK;AAAA,IAChB;AAAA,IACA,UAAU,KAAK;AACX,YAAM,EAAE,QAAQ,IAAI;AACpB,UAAI,SAAS;AACT,gBAAQ,UAAU,OAAO,SAAS,QAAQ,IAAI;AAC9C,gBAAQ,UAAU,OAAO,SAAS,QAAQ,KAAK;AAAA,MACnD;AAAA,IACJ;AAAA,IACA,eAAe,QAAQ;AAzD3B,UAAAA,KAAA;AA0DQ,OAAAA,MAAA,MAAM,mBAAN,gBAAAA,IAAA,WAAuB;AAIvB,UAAI,CAAC,OAAO,YAAY,OAAO,OAAO,MAAM;AACxC,cACI,KAAQ,MACR,KAAQ,OAAO,eAAe,OAAO,gBAAc,QAAG,WAAH,mBAAW,oBAAmB,GAAG,WAAW,GAAG,YAAY,GAAG,iBAAiB,GAAG,iBAAiB,MAAM,EAAE,CAAC,KAAK,OAAO,SAAS,SAAS,IAAI,IACjM,QAAQ,OAAO,SAAS,OAAO,UAAU,GAAG,YAAY,YAAY,EAAE;AAC1E,YAAI,OAAO;AACP,iBAAO,MAAM,MAAM,MAAM,gBAAgB,eAAe,WAAW,EAAE,KAAK;AAAA,QAC9E,OACK;AACD,iBAAO,OAAM,yBAAI,cAAa,KAAK,iBAAiB,EAAE,EAAE,iBAAiB,WAAW,MAAM;AAAA,QAC9F;AAEA,YAAI,OAAO,KAAK;AACZ,aAAG,WAAW,MAAM;AAAA,QACxB;AAAA,MACJ;AAAA,IACJ;AAAA;AAAA,IAEA,UAAU,MAAM;AAhFpB,UAAAA,KAAA;AAiFQ,OAAAA,MAAA,MAAM,WAAN,gBAAAA,IAAA,WAAe,GAAG;AAClB,UACK,cAAc,YAAY,cAAc,gBAAgB,MACxD,cAAc,aAAa,cAAc,iBAAiB,MAC1D,cAAc,YAAY,cAAc,gBAAgB,MAC3D;AACE,aAAK,QAAQ,UAAU,IAAI,gBAAgB;AAAA,MAC/C;AAEA,UAAI,iBAAiB,KAAK,OAAO,EAAE,cAAc,WAAS,UAAK,UAAL,mBAAY,MAAK;AACvE,aAAK,MAAM;AACX,mBAAK,eAAL,mBAAiB,QAAQ,OAAK,EAAE,MAAM;AAAA,MAC1C;AAAA,IACJ;AAAA,EACJ,GAnFI,cADqBA,KACd,SAAQ,QAEf,cAHqBA,KAGd,gBAAe;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,IA8BlB,KAAM;AAAA,EACV,IAlCqBA;AAAA;;;ACmBzB,IACI,sBAA0B,OAAO,OAAO;AAAA,EACpC,WAAY;AAAA,EACZ,UAAY;AAChB,CAAC;AAJL,IAKI,aAA0B,CAAC;AAL/B,IAMI,0BAA0B;AAN9B,IAOI,gBAA0B;AAP9B,IAQI,uBAA0B,OAAO,sBAAsB;AAR3D,IASI,iBAA0B;AAAA,EACtB,OAAW;AAAA,EACX,UAAW;AACf;AAZJ,IAaI,sBAA0B,CAAC,IAAI,SAAS,WAAW,YAAY;AAC3D,MAAI,aAAY,uCAAW,eAAa,uCAAW;AAEnD,eAAY,uCAAW,OAAM;AAC7B,MAAI,WAAW;AACX,UAAM,KAAK,YAAY,GAAG,aAAa,OAAO;AAAA,MAC1C;AAAA,MACA,SAAU;AAAA,IACd,GAAG,SAAS,CAAC;AACb,QAAI,SAAS;AAGT,OAAC,GAAG,kBAAkB,GAAG,gBAAgB,uBAAO,OAAO,IAAI,IAAI,OAAO,IAAI;AAAA,IAC9E,OACK;AACD,gBAAU,YAAY;AAAA,QAClB,IAAK;AAAA,QACL;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;AAlCJ,IAmCI,YAA0B,CAAC,OAAO,QAAQ;AAGtC,SAAQ,SAAS,OAAO,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC,CAAC,IAAK,OAAO,MAAM,OAAO,GAAG,IAAI;AAC3F;AAvCJ,IAyCI,qBAA0B,OAAK;AAC3B,IAAE,aAAa,EAAE,aAAa;AAClC;AA3CJ,IA4CI,iBAA0B;AA5C9B,IA6CI,qBAA0B;AA7C9B,IA8CI,WAA0B,OAAK,EAAE,SAAS;AA9C9C,IA+CI,EAAE,QAAAC,QAAO,IAAiB;AA/C9B,IAgDI,EAAE,gBAAAC,gBAAe,IAAS;AAhD9B,IAiDI,gBAA0B,OAAK,WAAW,CAAC,KAAK,EAAE,SAAS,IAAI,IAAI,IAAI;AAjD3E,IAkDI,eAA0B;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAvDJ,IAwDI,kBAA0B;AAAA,EACtB,cAAe;AAAA,EACf,MAAM;AACF,WAAO;AAAA,EACX;AACJ;AA7DJ,IA8DI,aAA0B;AA9D9B,IA+DI,kBAA0B,CAACC,SAAQ,SAAS,eAAe,OAAO;AA/DtE,IAgEIC,eAA0B;AAhE9B,IAiEI,aAA0B,CAAC,UAAU,aAAa;AAG9C,MAAIA,aAAY,KAAK,QAAQ,GAAG;AAC5B,eAAW,EAAE,OAAQ,SAAS;AAAA,EAClC;AACA,MAAIA,aAAY,KAAK,QAAQ,GAAG;AAC5B,eAAW,EAAE,OAAQ,SAAS;AAAA,EAClC;AACA,SAAO,OAAO,MAAM,UAAU,QAAQ;AAC1C;AA3EJ,IA4EI,aAA0B;AA5E9B,IAmFI,kBAA0B;AAAA,EACtB,GAAI;AAAA,EACJ,GAAI;AAAA,EACJ,GAAI;AAAA,EACJ,GAAI;AACR;AAxFJ,IAyFI,oBAA0B,OAAK,CAAC,EAAE,YAAY,CAAC,EAAE,QAAQ,CAAAC,OAAKA,GAAE,mBAAmBA,GAAE,eAAe;AAzFxG,IA0FI,kBAA0B,QAAM,UAAU,cAAc,IAAI,SAAS,MAAM,aAAa,gBAAgB,GAAG,UAAU,IAAI;AA1F7H,IA2FI,iBAA0B,OAAK;AAC3B,MAAI,uBAAG,QAAQ;AACX,QAAI,EAAE,SAAS,QAAQ,IAAI,GACvB,SAAS,gBAAgB,EAAE,MAAM;AAErC,QAAI,UAAU,cAAc,EAAE,QAAQ,SAAS,MAAM,YAAY;AAC7D,YAAM,OAAO,OAAO,sBAAsB,MAAM;AAChD,iBAAW,KAAK;AAChB,iBAAW,KAAK;AAAA,IACpB;AACA,WAAO;AAAA,MACH,QAAS,gBAAgB,EAAE,MAAM;AAAA,MACjC;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AACJ;AAkPJ,IAAqB,SAArB,MAAqB,gBAAe,KAAK,MAAM,qBAAa,gBAAQ,mBAAW,sBAAc,qBAAa,gBAAQ,WAAG,EAAE;AAAA;AAAA;AAAA;AAAA,EAInH,OAAO,SAAS,UAAU,UAAU;AAChC,QAAI,YAAY,UAAU;AACtB,iBAAW,IAAI,aAAa,QAAQ,EAAE,OAAO,OAAO,aAAa,WAAW,IAAI,aAAa,QAAQ,IAAI,QAAQ;AAAA,IACrH,WACS,YAAY,CAAC,SAAS,gBAAgB;AAC3C,iBAAW,IAAI,aAAa,QAAQ;AAAA,IACxC;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA,WAAW,OAAO;AACd,WAAO;AAAA,EACX;AAAA,EACA,WAAW,eAAe;AACtB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeH,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBV,iBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWlB,IAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYL,MAAO;AAAA,QACH,SAAU;AAAA,QACV,OAAU;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAmBA,SAAU;AAAA,QACN,SAAU;AAAA,QACV,OAAU;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBA,KAAM;AAAA,QACF,SAAU;AAAA,UACN,OAAQ;AAAA,QACZ;AAAA,QACA,OAAQ;AAAA,MACZ;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,MA8BA,IAAK;AAAA,QACD,SAAU;AAAA,UACN,OAAQ;AAAA,QACZ;AAAA,QACA,OAAQ;AAAA,MACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAiBA,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAiBb,mBAAoB;AAAA,QAChB,SAAU;AAAA,UACN,OAAQ;AAAA,QACZ;AAAA,QACA,OAAQ;AAAA,MACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAiBA,YAAa;AAAA,QACT,SAAU;AAAA,UACN,OAAQ;AAAA,QACZ;AAAA,QACA,OAAQ;AAAA,MACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBA,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAiBP,mBAAoB;AAAA,QAChB,SAAU;AAAA,UACN,OAAQ;AAAA,QACZ;AAAA,QACA,OAAQ;AAAA,MACZ;AAAA,MACA,QAAS;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,MAsDT,KAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAON,mBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMpB,SAAU;AAAA,QACN,SAAU;AAAA,UACN,OAAQ;AAAA,QACZ;AAAA,QACA,OAAQ;AAAA,UACJ,UAAW;AAAA,QACf;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAaR,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAqBX,UAAW;AAAA,QACP,OAAU;AAAA,QACV,SAAU;AAAA,QACV,SAAU;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,sBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWvB,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQR,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMX,cAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMf,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMd,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBV,SAAU;AAAA,QACN,SAAU,CAAC,QAAQ,SAAS;AAAA,QAC5B,OAAU;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,yBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQ1B,uBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYxB,eAAgB;AAAA,QACZ,SAAU,CAAC,QAAQ,SAAS;AAAA,QAC5B,OAAU;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,QAAS;AAAA,QACL,SAAU;AAAA,QACV,OAAU;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,cAAe;AAAA,QACX,QAAS;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWX,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAoBb,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAoBZ,OAAQ;AAAA,QACJ,SAAU;AAAA,UACN,OAAQ;AAAA,QACZ;AAAA,QACA,OAAQ;AAAA,MACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQX,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQd,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAsBT,OAAQ;AAAA,QACJ,SAAU;AAAA,QACV,OAAU;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,cAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAsBf,eAAgB;AAAA,QACZ,SAAU;AAAA,UACN,OAAQ;AAAA,QACZ;AAAA,QACA,OAAQ;AAAA,MACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAsBA,eAAgB;AAAA,QACZ,SAAU;AAAA,UACN,OAAQ;AAAA,QACZ;AAAA,QACA,OAAQ;AAAA,MACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,GAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUJ,GAAI;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,MA0BJ,YAAa;AAAA,QACT,SAAU,CAAC,QAAQ,SAAS;AAAA,QAC5B,OAAU;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,eAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQhB,qBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAStB,eAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAahB,cAAe;AAAA,QACX,OAAU;AAAA,QACV,SAAU;AAAA,QACV,SAAU;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQR,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOT,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOZ,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOX,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOX,WAAY;AAAA;AAAA,MAEZ,iBAAkB;AAAA,MAClB,gBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAalB,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAmBT,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOP,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcT,WAAY;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,MA4BZ,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOT,OAAQ;AAAA,MACR,uBAAwB,CAAC,SAAS,aAAa,iBAAiB;AAAA;AAAA,MAEhE,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAad,KAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeN,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYT,WAAY;AAAA;AAAA;AAAA,MAGZ,sBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQvB,KAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASN,gBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOjB,aAAc;AAAA,MACd,sBAAuB;AAAA,QACnB,SAAU,CAAC,QAAQ,SAAS;AAAA,QAC5B,OAAU;AAAA,UACN,WAAY;AAAA,UACZ,SAAY;AAAA,QAChB;AAAA,MACJ;AAAA,MACA,MAAO;AAAA,QACH,SAAU;AAAA,QACV,OAAU;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,WAAY;AAAA,QACR,SAAU;AAAA,QACV,OAAU;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,iBAAkB;AAAA,QACd,SAAU;AAAA,QACV,OAAU;AAAA,MACd;AAAA,MACA,aAAc;AAAA,MACd,cAAe;AAAA,MACf,gBAAiB;AAAA,MACjB,YAAa;AAAA,QACT,sBAAuB;AAAA,QACvB,gBAAuB;AAAA,MAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,kBAAmB;AAAA,IACvB;AAAA,EACJ;AAAA,EACA,WAAW,sBAAsB;AAC7B,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOH,gBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQjB,WAAY;AAAA,IAChB;AAAA,EACJ;AAAA,EACA,WAAW,aAAa;AACpB,WAAO;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,MA4BH;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,WAAW,YAAY;AACnB,WAAO;AAAA,MACH,WAAkB;AAAA,MAClB,iBAAkB;AAAA;AAAA;AAAA,MAGlB,yBAA0B;AAAA,IAC9B;AAAA,EACJ;AAAA,EACA,WAAW,cAAc;AACrB,WAAO;AAAA,MACH,aAAc;AAAA,IAClB;AAAA,EACJ;AAAA,EACA,WAAW,eAAe;AACtB,WAAO,CAAC;AAAA,EACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW,MAAM;AACb,WAAO,MAAM;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW,iBAAiB;AACxB,WAAO,QAAO;AAAA,EAClB;AAAA,EACA,WAAW,eAAe,OAAO;AAC7B,YAAO,kBAAkB;AACzB,QAAI,SAAS,MAAM;AACf,YAAM,EAAE,IAAI,IAAI;AAChB,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,EAAE,GAAG;AACjC,YAAI,IAAI,CAAC,EAAE,cAAc;AACrB,cAAI,CAAC,EAAE,iBAAiB;AAAA,QAC5B;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,OAAO,MAAM,MAAM;AACf,WAAO,QAAO,OAAO,MAAM,MAAM,IAAI;AAAA,EACzC;AAAA,EACA,OAAO,mBAAmB,KAAK,MAAM;AACjC,UAEI,qBAAqB,KAAK,aAAa,eAAe,GACtD,EAAE,cAAc,IAAK;AACzB,QAAI,eAAe;AAEf,UAAI,MAAM,QAAQ,aAAa,GAAG;AAC9B,mBAAW,QAAQ,eAAe;AAC9B,6BAAmB,IAAI,IAAI;AAAA,QAC/B;AAAA,MACJ,OAEK;AACD,qBAAa,OAAO,oBAAoB,aAAa;AAAA,MACzD;AACA,yBAAmB,oBAAoB,IAAI;AAAA,IAC/C;AAAA,EAEJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,UAAU,SAAS,CAAC,MAAM,MAAM;AAC5B,UACI,KAAsB,MACtB,EAAE,gBAAgB,IAAI,IACtB,EAAE,eAAe,IAAK;AAC1B,QAAI,kBAAkB,QAAQ,GAAG,kBAAkB,MAAM;AACrD,SAAG,iBAAiB;AAAA,IACxB;AACA,QAAI,CAAC,WAAW,QAAQ,YAAY;AAChC,YACI,aAAa,WAAW,QAAQ,aAAa,UAAU,cAAc,GACrE,YAAa,cAAc,WAAW,MAAM;AAChD,UAAI,cAAc,eAAe,WAAW;AACxC,gBAAQ,KAAK,eAAe,UAAU,iCAAiC,SAAS;AAAA,sEACH;AAAA,MACjF;AAAA,IACJ;AACA,OAAG,2BAA2B,OAAO;AACrC,OAAG,sBAAsB;AAEzB,OAAG,mBAAmB;AACtB,OAAG,QAAQ,uBAAO,OAAO,IAAI;AAC7B,OAAG,iBAAiB,GAAG,eAAe,KAAK,EAAE;AAC7C,OAAG,qBAAqB,GAAG,mBAAmB,KAAK,EAAE;AACrD,OAAG,kBAAkB,gBAAgB,UAAU,OAAO,gBAAgB,KAAK,EAAE;AAC7E,OAAG,gBAAgB;AAEnB,UAAM,UAAU,QAAQ,GAAG,IAAI;AAC/B,OAAG,aAAa;AAAA,EACpB;AAAA,EACA,eAAe,QAAQ;AACnB,UAAM,eAAe,MAAM;AAC3B,SAAK,UAAU,SAAS;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAe;AAzmDnB,QAAAC;AA0mDQ,UACI,KAAa,MACb,EAAE,MAAM,IAAK,IACb,aAAa,GAAG,gBAAgB,GAAG,YAAY,GAAG,eAAe;AAErE,OAAG,UAAU,MAAM;AACnB,OAAG,UAAU,SAAS;AACtB,QAAI,YAAY;AACZ,UAAI,OAAO;AACP,WAAG,QAAQ,UAAU,OAAO,UAAU;AACtC,WAAG,UAAU;AAAA,MACjB;AAEA,UAAI,GAAG,WAAUA,MAAA,WAAW,WAAW,aAAa,SAAS,eAAe,UAAU,MAArE,gBAAAA,IAAyE,cAAa;AACnG,WAAG,OAAO;AAAA,MACd,OACK;AAED,WAAG,4BAA4B,GAAG,0BAA0B,KAAK,EAAE;AACnE,sBAAc,kBAAkB,YAAY,GAAG,yBAAyB;AAAA,MAC5E;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,0BAA0B,IAAI;AAC1B,kBAAc,qBAAqB,IAAI,KAAK,yBAAyB;AACrE,QAAI,CAAC,KAAK,eAAe,CAAC,KAAK,UAAU;AACrC,WAAK,OAAO;AAAA,IAChB;AAAA,EACJ;AAAA,EACA,YAAY;AAvoDhB,QAAAA,KAAA;AAwoDQ,UACI,KAAK,MACL;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAK;AACT,QAAI,WAAW,YAAY,SAAS;AAChC,iBAAW,KAAK;AAAA,IACpB;AACA,QAAI,eAAe;AACf,aAAO,OAAO,eAAe,QAAM,GAAG,CAAC;AACvC,SAAG,gBAAgB;AAAA,IACvB;AACA,QAAI,SAAS;AACT,YAAM,gBAAgB,CAAC,GAAG,YAAY,kBAClCA,MAAA,QAAO,YAAP,gBAAAA,IAAgB,iBAAiB,cAAc,WAAW;AAE9D,WAAI,+CAAe,WAAU,IAAI;AAC7B,sBAAc,QAAQ;AACtB,sBAAc,KAAK;AAAA,MACvB;AACA,SAAG,iBAAiB;AAGpB,SAAG,aAAa,GAAG,qBAAqB;AACxC,SAAG,aAAa,GAAG,qBAAqB;AAGxC,SAAG,yBAAyB;AAC5B,UAAI,GAAG,YAAY,GAAG,YAAY;AAE9B,WAAG,KAAK,KAAK;AAAA,MACjB,OACK;AACD,WAAG,YAAY;AAAA,MACnB;AACA,oBAAc,qBAAqB,QAAQ,eAAe,GAAG,qBAAqB;AAClF,oBAAc,qBAAqB,SAAS,GAAG,eAAe;AAE9D,UAAI,OAAO;AACP,iBAAS,QAAQ,MAAM,KAAK,QAAQ,UAAU,GAAG,IAAI,GAAG,EAAE,OAAO,IAAI,OAAO,IAAI,QAAQ,KAAK;AACzF,gBAAM,KAAK,MAAM,CAAC;AAElB,cAAI,CAAC,oBAAoB,SAAS,EAAE,KAAK,OAAO,GAAG,WAAW;AAC1D,eAAG,OAAO;AAAA,UACd;AAAA,QACJ;AACA,gBAAQ,YAAY,GAAG;AACvB,gBAAQ,MAAM,UAAU,GAAG;AAAA,MAC/B;AACA,eAAG,sBAAH;AACA,eAAG,0BAAH;AACA,SAAG,UAAU,OAAO;AAAA,IACxB;AACA,aAAG,sBAAH,mBAAsB;AACtB,UAAM,UAAU;AAEhB,oBAAgB,OAAO,OAAO,YAAY,EAAE,QAAQ,OAAE;AAtsD9D,UAAAA;AAssDiE,cAAAA,MAAA,EAAE,YAAF,gBAAAA,IAAA;AAAA,KAAa;AAGtE,QAAI,aAAa,CAAC,OAAO,OAAO,QAAO,aAAa,KAAK,EAAE,KAAK,iBAAiB,GAAG;AAChF,2BAAa,qBAAqB,SAAS;AAAA,IAC/C;AAEA,QAAI,CAAC,OAAO;AACR,cAAQ,OAAO;AAAA,IACnB;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,IAAI,sBAAsB;AACtB,WAAO;AAAA,EACX;AAAA,EACA,IAAI,YAAY;AACZ,WAAO,KAAK,QAAQ,KAAK,OAAO,KAAK;AAAA,EACzC;AAAA,EACA,aAAa,UAAU;AACnB,eAAY,YAAY,OAAO,aAAa,WAAY,SAAS,WAAW;AAC5E,WAAO,WAAW,KAAK,OAAO,KAAK;AAAA,EACvC;AAAA,EACA,iBAAiB,QAAQ,KAAK,OAAO;AACjC,UACI,KAAoB,MACpB,oBAAoB,GAAG;AAC3B,QAAI,qBAAqB,IAAI;AACzB,SAAG,iBAAiB,IAAI;AAAA,IAC5B;AAAA,EACJ;AAAA,EACA,YAAY,QAAQ,UAAU,qBAAqB;AAC/C,UACI,KAAM,MACN,MAAM,GAAG,uBAAuB,GAChC,MAAM,GAAG,aAAa,OAAO;AACjC,QAAI,QAAQ,CAAC,UAAU,OAAO,SAAS;AACnC,UAAI,QAAQ,cAAc,OAAO;AAE7B,WAAG,uBAAuB,IAAI;AAAA,MAClC;AAEA,SAAG,iBAAiB,QAAQ,KAAK,SAAS,OAAO,GAAG,IAAI,IAAI;AAC5D,SAAG,uBAAuB,IAAI;AAAA,IAClC;AAAA,EACJ;AAAA,EACA,YAAY,QAAQ;AAChB,UACI,KAAoB,MACpB,oBAAoB,GAAG;AAC3B,QAAI,GAAG,gBAAgB,WAAU,qBAAqB,IAAI;AACtD,aAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,EAAE,IAAI,GAAG,iBAAiB;AAAA,IAC7D;AAAA,EACJ;AAAA,EACA,aAAa,QAAQ;AACjB,SAAK,WAAW,YAAU,OAAO,YAAY,MAAM,GAAG,KAAK;AAAA,EAC/D;AAAA;AAAA,EAEA,IAAI,oBAAoB;AACpB,UAAM,QAAQ,KAAK;AACnB,WAAO,SAAS,aAAa,cAAc,KAAK;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,sBAAsB,WAAW;AAtxDrC,QAAAA;AAuxDQ,UAAM,KAAK;AACX,QAAI,SAAS,aAAa,MAAM,GAAG,aAAa;AAEhD,WAAO,OAAO;AAEd,WAAO,SAAS;AAChB,WAAO,OAAO,GAAG;AACjB,WAAO,sBAAsB;AAE7B,WAAO,WAAW,GAAG;AACrB,QAAI,WAAW,IAAI;AACf,aAAO,QAAQ,GAAG;AAAA,IACtB;AAEA,KAAAA,MAAA,GAAG,sBAAH,gBAAAA,IAAsB,QAAQ,QAAM;AAChC,aAAO,OAAO,KAAK,aAAa,WAAW,EAAE,CAAC,EAAE;AAAA,IACpD;AACA,QAAI,WAAW;AACX,eAAU,OAAO,cAAc,aACzB,UAAU,MAAM,KAAK,SAAS,aAAa,OAAO,QAAQ,SAAS;AAAA,IAC7E;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,mBAAmB,WAAW;AA1zDlC,QAAAA;AA2zDQ,UACI,KAAe,MACf,SAAe,GAAG,sBAAsB,SAAS,GACjD,eAAe,QAAO,OAAO,MAAM;AACvC,KAAAA,MAAA,GAAG,sBAAH,gBAAAA,IAAsB,QAAQ,QAAM;AAChC,mBAAa,IAAI;AAAA,QACb,CAAC,EAAE,GAAI,UAAQ;AAEX,cAAI,GAAG,iBAAiB,KAAK,QAAQ;AACjC,mBAAO,aAAa,OAAO,CAAC,GAAG,IAAI;AAEnC,mBAAO,KAAK;AACZ,eAAG,QAAQ,KAAK,WAAW,IAAI;AAAA,UACnC;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,mBAAmB,WAAW,UAAU;AACpC,QAAI,EAAE,aAAa,IAAI;AACvB,QAAI,CAAC,cAAc;AACf,WAAK,eAAe,eAAe,KAAK,mBAAmB,SAAS;AACpE,2CAAW;AAAA,IACf;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,eAAe;AACf,WAAO,CAAC,KAAK,QAAQ;AAAA,EACzB;AAAA,EACA,aAAa,OAAO;AAChB,UACI,KAAiB,MACjB,eAAiB,OAAO,UAAU,WAAW,SAAS,eAAe,KAAK,IAAI,OAC9E,iBAAiB,QAAO,YAAY,YAAY;AAGpD,QAAI,kBAAkB,eAAe,SAAS,mBAAmB,IAAI;AACjE,YAAM,sBAAsB,OAAO,eAAe,UAAU,WACtD,SAAS,eAAe,eAAe,KAAK,IAC5C,eAAe;AACrB,UAAI,wBAAwB,cAAc;AACtC,uBAAe,QAAQ;AAAA,MAC3B;AAAA,IACJ;AAEA,OAAG,sBAAsB,MAAM,KAAK,aAAa,UAAU;AAC3D,OAAG,0BAA0B,aAAa;AAC1C,OAAG,wBAAwB,aAAa,MAAM;AAC9C,iBAAa,gBAAgB;AAC7B,iBAAa,cAAc,GAAG;AAC9B,iBAAa,YAAY,aAAa,MAAM,UAAU;AACtD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,eAAe,MAAM,KAAK;AACtB,UAAM,EAAE,WAAAC,WAAU,IAAI,KAAK;AAC3B,IAAAL,gBAAeK,YAAW,KAAK;AAAA,MAC3B,UAAW;AAAA,MACX,OAAW;AAAA,IACf,CAAC;AACD,IAAAL,gBAAeK,YAAW,MAAM;AAAA,MAC5B,MAAM;AAEF,aAAK,UAAU,MAAM;AACrB,eAAO,KAAK,GAAG;AAAA,MACnB;AAAA,MACA,IAAI,IAAI;AACJ,aAAK,GAAG,IAAI;AAAA,MAChB;AAAA,IACJ,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU,MAAM,IAAI,WAAW;AAC3B,UACI,KAAM,MACN,MAAM,MAAM;AAEhB,OAAG,YAAY,GAAG,QAAQ,WAAW,GAAG;AACxC,QAAI,GAAG,cAAc;AACjB,UAAI,EAAE,OAAO,KAAK;AACd,WAAG,eAAe,MAAM,GAAG;AAAA,MAC/B;AACA,0BAAoB,IAAI,IAAI,WAAW,IAAI;AAAA,IAC/C;AACA,OAAG,MAAM,IAAI,IAAI;AACjB,OAAG,IAAI,IAAI;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU,MAAM,IAAI,WAAW;AAC3B,UACI,KAAY,MACZ,YAAY,GAAG;AACnB,QAAI,uCAAY,OAAO;AACnB,gBAAU,IAAI,EAAE;AAChB,aAAO,UAAU,IAAI;AAAA,IACzB;AACA,OAAG,IAAI,IAAI;AACX,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB;AAAA,EAEjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,UAAU;AACN,WAAO;AAAA,MACH,OAAQ,aAAa,UAAU,KAAK,iBAAiB,QAAQ;AAAA,IACjE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY;AACR,UACI,KAAmB,MACnB,EAAE,OAAQ,KAAK,IAAI,IACnB,UAAmB,KAAK,WACxB,gBAAmB,KAAK,iBAAiB,KAAK,aAAa,eAAe;AAC9E,QAAI,EAAE,UAAU,IAAI,MAChB,YAAgB,MAChB,GAAG,KAAK,GAAGC;AACf,OAAG,UAAU,QAAQ;AACrB,QAAI,CAAC,WAAW;AACZ,WAAK,YAAY,YAAY,CAAC;AAE9B,WAAK,IAAI,QAAQ,QAAQ,OAAM,GAAG,IAAI,QAAQ,QAAQ,EAAE,GAAG;AACvD,QAAAA,SAAQ,QAAQ,CAAC,EAAE;AACnB,YAAIP,QAAOO,QAAO,SAAS,GAAG;AAC1B,oBAAU,KAAKA,MAAK;AAAA,QACxB;AAAA,MACJ;AAEA,UAAI,CAACP,QAAO,eAAe,oBAAoB,GAAG;AAC9C,sBAAc,oBAAoB,IAAI;AAAA,UAClC,IAAI,MAAM;AACN,0BAAc,IAAI,IAAI;AAAA,UAC1B;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AACA,OAAG,iBAAiB,cAAc,oBAAoB;AAEtD,SAAK,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACnC,UAAI,UAAU,CAAC,EAAE,QAAQ,KAAK,IAAI,SAAS;AAC3C,kBAAY,YAAY,UAAU,MAAM,WAAW,CAAC,IAAI;AAAA,IAC5D;AACA,QAAIA,QAAO,IAAI,SAAS,MAAM,IAAI,GAAG,UAAU;AAC3C,UAAI,EAAE,KAAK,IAAI,SAAS;AACxB,gBAAU,MAAM,WAAW,CAAC;AAAA,IAChC;AACA,OAAG,iBAAiB;AAIpB,WAAO,UAAU,kBAAkB,WAAW,CAAC,WAAW,UAAU;AAEhE,UAAI,OAAO;AACP,cAAM,MAAM;AACZ,YAAI,EAAE,OAAO,KAAK;AACd,aAAG,eAAe,WAAW,GAAG;AAAA,QACpC;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,IAAI,UAAU;AAEV,QAAI,KAAK,gBAAgB,CAAC,KAAK,cAAc;AAEzC,WAAK,UAAU,MAAM;AAAA,IACzB;AACA,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAgB,MAAM;AAAA,EAEtB;AAAA,EACA,cAAc,SAAS;AACnB,UACI,KAAY,MACZ,UAAY,GAAG,cACf,EAAE,MAAM,IAAI;AAEhB,OAAG,KAAK,GAAG,OAAM,+BAAO,OAAM;AAE9B,QAAI,OAAO;AACP,gBAAU,GAAG,aAAa,KAAK;AAAA,IACnC,OACK;AACD,UAAI,SAAS;AACT,kBAAU,GAAG,UAAU;AAAA,MAC3B;AAAA,IACJ;AACA,QAAI,OAAO,YAAY,UAAU;AAC7B,gBAAU,UAAU,0BAA0B,OAAO;AAAA,IACzD,WACS,aAAa,SAAS,OAAO,GAAG;AACrC,gBAAU,UAAU,cAAc,SAAS;AAAA,QACvC,UAAW;AAAA,QACX,UAAW,GAAG;AAAA;AAAA,MAClB,CAAC;AACD,SAAG,UAAU,OAAO;AAAA,IACxB,WACS,UAAU,eAAe,GAAG,WAAW,MAAM,CAAC,GAAG;AAEtD,gBAAU,SAAS,cAAc,KAAK;AAAA,IAC1C,WACS,QAAQ,aAAa,GAAG;AAC7B,gBAAU,UAAU,0BAA0B,GAAG,SAAS,EAAE,CAAC;AAAA,IACjE;AACA,KAAC,QAAQ,OAAO,QAAQ,KAAK,GAAG;AAChC,QAAI,GAAG,mBAAmB;AACtB,gBAAU,cAAc,SAAS,GAAG,iBAAiB;AAAA,IACzD;AACA,WAAO;AAAA,EACX;AAAA,EACA,cAAc,SAAS;AACnB,UACI,KAAU,MACV,UAAU,GAAG;AAIjB,QAAI,GAAG,OAAO;AACV,SAAG,UAAU;AACb,iBAAW,GAAG,aAAa;AAAA,IAC/B;AAEA,eAAW,oBAAoB,IAAI,SAAS,QAAQ,aAAa;AACjE,UACI,EAAE,UAAU,IAA0C,SACtD,EAAE,gBAAgB,mBAAmB,aAAa,IAAI,IACtD,kBAAsD,mBAAmB,SACzE,gBAAsD,CAAC,gBAAgB,QAAQ,iBAAiB,kBAAkB,GAElH,UAAsD,eAAe,CAAC,IAAI,GAAG;AAGjF,QAAI,aAAa,mBAAmB,CAAC,iBAAiB,GAAG;AACzD,iBAAa,QAAQ,QAAQ,SAAS;AACtC,OAAG,WAAW,QAAQ,KAAK,UAAU;AACrC,OAAG,aAAa,QAAQ,KAAK,YAAY;AAKzC,mBAAe;AAAA,MAAQ;AAAA,MAAS;AAAA;AAAA,IAAqC;AACrE,QAAI,WAAW;AACX,UAAI,uDAAmB,OAAO;AAC1B,oBAAY,UAAU,MAAM;AAC5B,kBAAU,KAAK,kBAAkB,KAAK;AAAA,MAC1C;AACA,kBAAY,UAAU,KAAK,GAAG;AAAA,IAClC,OACK;AACD,kBAAY,uDAAmB;AAAA,IACnC;AACA,QAAI,WAAW;AACX,UAAI,iBAAiB;AACjB,uBAAe,aAAa,MAAM;AAAA,MACtC,OACK;AACD,gBAAQ,KAAK,SAAS;AAAA,MAC1B;AAAA,IACJ;AAGA,QAAI,CAAC,GAAG,QAAQ;AACZ,YACI,EAAE,WAAW,IAAI,IACjB,EAAE,SAAS,IAAM;AACrB,cAAQ,KAAK,GAAI,aAAa,SAAS,OAAO,OAAK,EAAE,KAAK,eAAe,WAAW,CAAC,CAAC,IAAI,QAAS;AAAA,IACvG;AACA,YAAQ,YAAY,QAAQ,KAAK,GAAG;AACpC,QAAI,eAAe;AACf,eAAS,IAAI,IAAI,GAAG,IAAI,cAAc,QAAQ,EAAE,GAAG;AAC/C,aAAK,cAAc,CAAC;AACpB,WAAG,UAAU,GAAG,aAAa,gBAAgB,GAAG,EAAE;AAClD,WAAG,gBAAgB,gBAAgB;AAAA,MACvC;AAAA,IACJ;AAKA,QAAI,CAAC,GAAG,iBAAiB;AACrB,SAAG,UAAU,eAAe;AAAA,IAChC;AAEA,OAAG,UAAU,MAAM;AACnB,OAAG,UAAU,WAAW;AACxB,OAAG,UAAU,iBAAiB;AAC9B,QAAI,GAAG,OAAO;AACV,SAAG,UAAU,sBAAsB;AAAA,IACvC;AAOA,OAAG,QAAQ,kBAAkB,EAAE,QAAQ,CAAC;AAAA,EAC5C;AAAA,EACA,sBAAsB,iBAAiB;AACnC,UACI,EAAE,YAAY,IAAI,MAClB,WAAkB,GAAG,KAAK,EAAE;AAChC,QAAI,iBAAiB;AACjB,YAAM,aAAa,KAAK,gBAAgB,KAAK,cAAc,UAAU,cAAc;AAAA,QAC/E,WAAY;AAAA,QACZ,IAAY;AAAA,QACZ,QAAY;AAAA,MAChB,CAAC;AACD,iBAAW,YAAY,gBAAgB,MAAM,UAAU,IAAI,KAAK,EAAE,iBAAiB,IAAI,IAAI;AAC3F,kBAAY,aAAa,oBAAoB,WAAW,EAAE;AAAA,IAC9D,WACS,YAAY,aAAa,kBAAkB,MAAM,UAAU;AAChE,kBAAY,gBAAgB,kBAAkB;AAAA,IAClD;AAAA,EACJ;AAAA,EACA,gBAAgB,WAAW;AACvB,cAAU,cAAc,KAAK,aAAa;AAAA,MACtC,eAAe,uCAAW,MAAM,eAAc,KAAK,EAAE,WAAW,IAAI,IAAI;AAAA,IAC5E,CAAC;AAAA,EACL;AAAA,EACA,mBAAmB,cAAc;AAC7B,cAAU,cAAc,KAAK,aAAa;AAAA,MACtC,iBAAkB;AAAA,IACtB,CAAC;AAAA,EACL;AAAA,EACA,WAAW,MAAM;AA3rErB,QAAAK,KAAA;AA4rEQ,QAAI,MAAM;AACN,OAAAA,MAAA,KAAK,gBAAL,gBAAAA,IAAkB,aAAa,QAAQ;AAAA,IAC3C,OACK;AACD,iBAAK,gBAAL,mBAAkB,gBAAgB;AAAA,IACtC;AAAA,EACJ;AAAA,EACA,IAAI,cAAc;AAEd,SAAK,UAAU,SAAS;AACxB,UAAM,EAAE,aAAa,IAAI;AAGzB,WAAO,aAAa,aAAa,KAAK,eAAe,eAAe,aAAa,QAAQ,MAAM,YAAY;AAAA,EAC/G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,eAAe,EAAE,WAAW,KAAAG,KAAI,GAAG;AAC/B,UACI,EAAE,WAAW,IAAe,MAO5B,kBAA4B,eAAe,QAC3C,gBAA4B,eAAe,OAC3C,4BAA4B,cAAc,MAC1C,YAA4B,eAAe;AAM/C,WAAOA,OACD,aAAc,6BAA6B,YAC1C,iBAAiB,mBAAoB,6BAA6B,CAAC;AAAA,EAC9E;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,EAyBA,MAAM,YAAY;AACd,WAAO,KAAK,kBAAkB;AAAA,EAClC;AAAA,EACA,MAAM,oBAAoB;AACtB,UACI,KAAU,MACV,UAAU;AAAA,MACN,eAAgB,GAAG;AAAA,MACnB,WAAgB,GAAG,UAAU;AAAA,MAC7B,UAAgB;AAAA,MAChB,UAAgB,GAAG;AAAA;AAAA;AAAA,MAGnB,QAAS;AAAA,IACb;AACJ,QAAI,GAAG,qBAAqB;AACxB,SAAG,qBAAqB;AACxB,YAAM,UAAU,WAAW,aAAa,OAAO;AAAA,QAC3C,SAAU,GAAG;AAAA,QACb,SAAS;AACL,kBAAQ,KAAK,OAAO;AAAA,QACxB;AAAA,MACJ,GAAG,GAAG,mBAAmB,CAAC;AAC1B,UAAI,GAAG,aAAa;AAChB;AAAA,MACJ;AACA,SAAG,qBAAqB;AACxB,SAAG,QAAQ,uBAAuB;AAAA,IACtC,OACK;AACD,cAAQ,KAAK,OAAO;AAAA,IACxB;AACA,QAAI,QAAQ,SAAS;AACjB,SAAG,eAAe;AAQlB,SAAG,QAAQ,WAAW;AAAA,IAC1B;AACA,OAAG,gBAAgB;AAAA,EACvB;AAAA;AAAA,EAEA,kBAAkB;AACd,SAAK,UAAU,OAAO;AAAA,EAC1B;AAAA,EACA,iBAAiB,IAAI;AACjB,QAAI,OAAO,OAAO,UAAU;AACxB,YAAM,KAAK;AACX,UAAI,EAAE,KAAK,SAAS,eAAe,EAAE,IAAI;AACrC,cAAM,IAAI,MAAM,6BAA6B,EAAE,GAAG;AAAA,MACtD;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,eAAe,UAAU;AACrB,WAAO,KAAK,iBAAiB,QAAQ;AAAA,EACzC;AAAA,EACA,eAAe,UAAU;AACrB,QAAI,CAAC,KAAK,iBAAiB,UAAU;AACjC,WAAK,OAAO;AAAA,IAChB;AAAA,EACJ;AAAA,EACA,mBAAmB,cAAc;AAC7B,WAAO,KAAK,iBAAiB,YAAY;AAAA,EAC7C;AAAA,EACA,mBAAmB,cAAc;AAC7B,QAAI,CAAC,KAAK,iBAAiB,cAAc;AACrC,WAAK,OAAO;AAAA,IAChB;AAAA,EACJ;AAAA,EACA,kBAAkB,aAAa;AAC3B,WAAO,KAAK,iBAAiB,WAAW;AAAA,EAC5C;AAAA,EACA,kBAAkB,aAAa;AAC3B,QAAI,CAAC,KAAK,iBAAiB,aAAa;AACpC,WAAK,OAAO;AAAA,IAChB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,iBAAiB,SAAS,MAAM,UAAU;AACtC,QAAI,gBAAgB,YAAY,OAAO,UAAU,EAAE,aAAa,aAAa,IAAI;AACjF,QAAI,aAAa;AACb,sBAAgB;AAChB,qBAAe,cAAc;AAAA,IACjC;AACA,QAAI,cAAc;AACd,UAAI,CAAC,eAAe;AAChB,wBAAgB,aAAa;AAAA,MACjC;AAAA,IACJ;AAEA,WAAO,CAAC,eAAe,gBAAgB,MAAS;AAAA,EACpD;AAAA,EACA,OAAO,UAAU,eAAe,MAAM;AAz2E1C,QAAAH;AA02EQ,UACI,KAAc,MACd,EAAE,QAAQ,IAAI,IACd;AAAA,MACI;AAAA,MACA;AAAA,IACJ,IAAc,GAAG,iBAAiB,IAAI,QAAQ;AAClD,OAAG,WAAW;AACd,QAAI,GAAG,eAAe,GAAG,gBAAgB;AACrC,gBAAU,KAAK,SAAS,GAAG,cAAc;AAAA,IAC7C,OACK;AACD,qDAAe,aAAa,SAAS;AACrC,SAAG,iBAAiB;AAAA,IACxB;AAGA,SAAIA,MAAA,QAAQ,kBAAR,gBAAAA,IAAuB,QAAQ,cAAc;AAC7C,cAAQ,UAAU,OAAO,GAAG,QAAO,QAAQ;AAAA,IAC/C;AACA,UAAM,OAAO,eAAe,YAAY;AACxC,OAAG,WAAW;AAEd,OAAG,UAAU,MAAM;AACnB,QAAI,cAAc;AACd,SAAG,UAAU,cAAc;AAC3B,SAAG,aAAa;AAAA,IACpB;AACA,OAAG,oBAAoB;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,SAAS,EAAE,KAAK,MAAM,SAAS,KAAK,GAAG;AACnC,UAAM,KAAK;AAEX,QAAI,OAAO,SAAS,YAAY,WAAW,KAAK,IAAI,KAAK,GAAG,gBAAgB,MAAM,IAAI,KAAK,GAAG;AAC1F,aAAO,GAAG,SAAS,MAAM,IAAI,CAAC,EAAE,CAAC;AAAA,IACrC;AACA,UAAM,WAAU,6BAAM,QAAO,KAAK,KAAK,IAAI,EAAE,IAAI;AACjD,WAAO,IAAI,GAAG,WAAW,UAAU,UAAU,EAAE,KAAK,OAAO,cAAc,IAAI,MAAM,EAAE,IAAI,WAAW,EAAE,KAAK,GAAG;AAAA,EAClH;AAAA,EACA,qBAAqB,OAAO;AACxB,SAAK,UAAU,YAAY,CAAC;AAAA,EAChC;AAAA;AAAA;AAAA,EAGA,eAAe,EAAE,KAAK,GAAG;AAp6E7B,QAAAA;AAu6EQ,QAAI,KAAK,YAAY,CAAC,KAAK,kBAAgBA,MAAA,KAAK,MAAM,kBAAX,gBAAAA,IAA2B,QAAO;AACzE,WAAK,UAAU;AAAA,IACnB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAIA,yBAAyB,SAAS;AAC9B,UAAM,yBAAyB,OAAO;AAEtC,WAAO,QAAQ;AAAA,EACnB;AAAA;AAAA,EAEA,eAAe,MAAM,SAAS;AAE1B,QAAI,SAAS,SAAS;AAClB,aAAO,KAAK;AAAA,IAChB;AACA,WAAO,MAAM,eAAe,MAAM,OAAO;AAAA,EAC7C;AAAA;AAAA,EAEA,iBAAiB,SAAS;AACtB,UAAM,SAAS,MAAM,iBAAiB,OAAO;AAE7C,SAAI,mCAAS,SAAQ,GAAG;AACpB,aAAO,OAAO,KAAK;AAAA,IACvB;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,UAAU;AACV,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EACA,cAAc,SAAS;AAEnB,iBAAa,OAAO,KAAK,SAAS,OAAO;AAAA,EAC7C;AAAA,EACA,IAAI,YAAY;AACZ,WAAO,KAAK,YAAY,eAAe,KAAK,YAAY,aAAa,UAAU,cAAc;AAAA;AAAA,MAEzF,MAAQ;AAAA,MACR,OAAQ;AAAA,IACZ,CAAC;AAAA,EACL;AAAA,EACA,aAAa,QAAQ;AACjB,UAAM,EAAE,UAAW,QAAQ,IAAI;AAC/B,QAAI,SAAS;AACT,cAAQ,UAAU,SAAS,WAAW,KAAK,EAAE,GAAG,QAAO,QAAQ;AAAA,IACnE;AAAA,EACJ;AAAA,EACA,IAAI,cAAc;AACd,QAAI,SAAS,KAAK;AAClB,aAAU,WAAW,SAAa,cAAc,iCAAQ,cAAa,KAAK,yBAA0B,OAAO,QAAQ,OAAO,gBAAiB;AAE3I,QAAI,KAAK,YAAY;AACjB,YAAM,EAAE,aAAa,IAAI,KAAK;AAG9B,UAAI,gBAAgB,UAAU,cAAc,cAAc,UAAU,MAAM,UAAU;AAChF,iBAAS,UAAU,KAAK,YAAY,EAAE,OAAO,GAAG,CAAC;AAAA,MACrD,WACS,UAAU,CAAC,OAAO,aAAa;AACpC,cAAM,aAAa,WAAW,YAAY,WAAW;AACrD,iBAAS,UAAU,KAAK,QAAQ,YAAY;AAC5C,YAAI,YAAY;AACZ,iBAAO,UAAU,WAAW,aAAa,WAAW,WAAW;AAAA,QACnE;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,eAAe,OAAO;AAClB,UACI;AAAA,MACI;AAAA,MACA;AAAA,IACJ,IAAI;AACR,QAAI,SAAS,CAAC,KAAK,YAAY,CAAC,KAAK,YAAY;AAC7C,YAAM,IAAI,MAAM,yEAAyE;AAAA,IAC7F;AACA,QAAI,OAAO;AACP,cAAQ,UAAU,IAAI,YAAY;AAClC,cAAQ,MAAM,YAAY,QAAQ,MAAM,OAAO,QAAQ,MAAM,MAAM;AACnE,uDAAgB,UAAU,IAAI;AAC9B,cAAQ,UAAU,OAAO,YAAY;AAAA,IACzC,OACK;AACD,cAAQ,UAAU,OAAO,YAAY;AAAA,IACzC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,iBAAiB;AACjB,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,eAAe;AACf,UACI,KAAe,MACf,eAAe,GAAG,kBAAkB,GAAG,gBAAgB,IAAI,MAAM;AAGrE,QAAI,aAAa,WAAW;AACxB,UAAI,GAAG,oBAAoB,GAAG,OAAO;AACjC,qBAAa,SAAS,GAAG,gBAAgB,CAAC;AAAA,MAC9C,OACK;AACD,qBAAa,mBAAmB,GAAG,cAAc;AAAA,MACrD;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,IAAI,IAAI,OAAO;AACzB,QAAI,GAAG,gBAAgB,OAAO;AAC1B,SAAG,cAAc;AACjB,eAAS,EAAE,WAAW,IAAI,IAAI,IAAI,WAAW,QAAQ,MAAM,KAAgB;AACvE,aAAK,cAAc,WAAW,CAAC,GAAG,IAAI,KAAK;AAAA,MAC/C;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,IAAI,YAAY;AAhjFpB,QAAAA;AAijFQ,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAClB,QAAI,SAAS,WAAW;AACxB,SAAI,mCAAS,iBAAgB,CAAC,mBAAmB,KAAK,UAAU,cAAc,SAAS,UAAU,CAAC,GAAG;AACjG,YACI,OAAW,QAAQ,oBACnB,WAAW,QAAQ,wBACnB,OAAW,CAAC,QAAQ;AACxB,kBAAY,UAAU,cAAc,QAAQ,eAAe,gBAAgB;AAE3E,UAAI,WAAW;AACX,oBAAY,UAAU,WAAW,KAAK,IAAI,MAAM;AAAA,MACpD,OACK;AACD,mBAAWA,MAAA,QAAQ,aAAR,gBAAAA,IAAmB;AAC9B,eAAO,WAAW,QAAQ,sBAAsB;AAChD,oBAAa,WAAW,KAAK,IAAI,QAAQ,MAAM,KAAK,GAAG,IAAI,KAAK,IAAI,QAAQ,OAAO,KAAK,IAAI,IAAK,MAAM;AAAA,MAE3G;AACA,mBAAc,cAAc,MAAQ,OAAO,MAAM,MAAQ,OAAO,MAAM;AAAA,IAC1E;AACA,WAAO;AAAA,EACX;AAAA,EACA,SAAS,IAAI,OAAO;AAChB,UAAM,SAAS,IAAI,KAAK;AACxB,QAAI,OAAO;AAEP,YAAM,EAAE,OAAO,QAAQ,IAAI;AAC3B,iBAAW,OAAO,OAAO;AACrB,cAAM,GAAG,EAAE,YAAY,MAAM,GAAG,EAAE,QAAQ,WAAW;AAAA,MACzD;AACA,cAAQ,KAAK;AACb,WAAK,cAAc,SAAS,IAAI,KAAK;AAAA,IACzC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,QAAQ;AACR,UAAM,EAAE,QAAQ,IAAI;AACpB,YAAO,mCAAS,cAAc,YAAY,iBAAiB,aAAY,KAAK;AAAA,EAChF;AAAA,EACA,YAAY,OAAO;AACf,SAAK,WAAW,UAAU,WAAW,KAAK,SAAS,KAAK;AAAA,EAC5D;AAAA,EACA,YAAY,OAAO;AACf,QAAI,KAAK,cAAc;AACnB,WAAK,aAAa,YAAY;AAAA,IAClC;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,cAAc,MAAM;AAAA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQrB,QAAQ,MAAM;AAlnFlB,QAAAA,KAAA;AAmnFQ,UACI,KAAK,MACL;AAAA,MACI;AAAA,MACA;AAAA,IACJ,IAAK,IACL;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAK;AACT,QAAI,eAAe;AAEf,oBAAc,uBAAuB,GAAG,qBAAqB,UAAU,cAAc,MAAM;AAE3F,UAAI,SAAS,cAAc,IAAI,GAAG;AAC9B,gBAAQ,UAAU,OAAO,aAAa,cAAc,IAAI,CAAC;AAAA,MAC7D;AAAA,IACJ;AAEA,QAAI,CAAC,MAAM;AACP,SAAG,yBAAyB;AAC5B,SAAG,SAAS,GAAG,gBAAgB;AAC/B;AAAA,IACJ;AAEA,OAAG,cAAc,IAAI;AAGrB,QAAI,KAAK,aAAa,QAAQ,gBAAgB,KAAK,YAAa,KAAK,WAAW,SAAU;AACtF,aAAO;AAAA,QACH,QAAS;AAAA,MACb;AAAA,IACJ;AAEA,OAAG,uBAAuB;AAC1B,UACI;AAAA,MACI;AAAA,MACA;AAAA,IACJ,IAAoB,IACpB,cAAoB,UAAU,YAAY,UAAU,cAAc,SAAS,WAAW,GAAG,OAAO,GAChG,aAAoB,UAAU,YAAY,UAAU,cAAc,SAAS,UAAU,GAAG,OAAO,GAC/F,aAAoB,GAAG,cAAc,UAAU,cAAc,SAAS,UAAU,MAAM,SACtF,QAAoB,GAAG,SAAS,GAChC,eAAoB,KAAK,QACzB,cAAoB,KAAK,gBAAgB,eAAe,KAAK,YAAY,KAAK,YAAUA,MAAA,6CAAc,WAAd,gBAAAA,IAAsB,cAAa,KAAK,eAAe,eAAe,KAAK,GACnK,oBAAoB,gDAAa,WAAb,mBAAqB,cAAa,QAAQ,cAC9D,SAAoB,kBAAkB,YAAY,UAAS,6CAAc,eAAc,gBAAe,6CAAc,YAAW,cAC/H,qBAAoB,iCAAQ,cAAa,QAAQ;AACrD,WAAO,KAAK,gBAAgB,OAAO,aAAa,MAAM;AAAA,MAClD;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAW;AAAA;AAAA,MACX,UAAW,GAAG;AAAA,MACd,QAAW,GAAG;AAAA,IAClB,GAAG,GAAG,OAAO,IAAI;AAEjB,QAAI,iBAAiB;AACjB,WAAK,WAAW;AAAA,IACpB;AAGA,UACI,WAAY,KAAK,YAAY,YAC7B,YAAY,KAAK,aAAa;AAGlC,OAAG,gBAAgB;AACnB,QAAI,mBAAmB;AAKnB,WAAK,SAAS,KAAK,aAAa;AAEhC,UAAI,UAAU,kBAAkB,aAAa,OAAO,QAAQ,KAAK,IAAI,MAAM,GAAG;AAE1E,eAAO,OAAO,eAAe,CAAC,GAAG,IAAI;AAMrC,aAAK,SAAS,GAAG,cAAc,aAC3B,KAAK,kBAAkB,KAAK,iBAAiB,UAAU,KAAK,QAAQ,aAAa,eAAe,MAAM,CAAC,UAAU,IAC3G,UAAU,SAAS,kBAAkB,cAAc,QAAQ,OAAO,EAAE;AAE9E,YAAI,CAAC,KAAK,QAAQ;AACd,gBAAMI,UAAS,GAAG,KAAK;AAKvB,cAAI,CAAC,GAAG,aAAa;AACjB,eAAG,cAAc,kBAAkB;AAAA,UACvC;AACA,iBAAOA;AAAA,QACX;AAEA,aAAK,OAAO,SAAS,KAAK,IAAI,KAAK,OAAO,QAAQ,CAAC;AACnD,aAAK,OAAO,QAAQ,KAAK,IAAI,KAAK,OAAO,OAAO,CAAC;AAAA,MACrD;AAAA,IACJ;AACA,QAAI,KAAK,QAAQ;AACb,WAAK,aAAa,GAAG;AACrB,UAAI,CAAC,QAAQ,SAAS,GAAG,iBAAiB,GAAG;AACzC,gBAAQ,YAAY,GAAG,aAAa;AAAA,MACxC;AAAA,IACJ;AAEA,OAAG,aAAa;AAEhB,OAAG,QAAQ,eAAe,IAAI;AAE9B,UACI,aAAa,UAAU,KAAK,SAAS,aAAa,eAAe,MAAM,IAAI,GAC3E;AAAA,MACI,OAAS;AAAA,MACT,QAAS;AAAA,IACb,IAAa;AAKjB,eAAW,mBAAmB;AAC9B,iBAAa,WAAW,WAAW,WAAW;AAC9C,kBAAc,WAAW,YAAY,YAAY;AACjD,OAAG,aAAa;AAEhB,SAAK,MAAM,GAAG;AAEd,QAAI,KAAK,MAAM,SAAS,GAAG,KAAK,KAAK,MAAM,SAAS,GAAG,GAAG;AACtD,UAAI,GAAG,KAAK;AACR,aAAK,QAAQ,KAAK,MAAM,QAAQ,MAAM,GAAG,EAAE,QAAQ,MAAM,GAAG;AAAA,MAChE,OACK;AACD,aAAK,QAAQ,KAAK,MAAM,QAAQ,MAAM,GAAG,EAAE,QAAQ,MAAM,GAAG;AAAA,MAChE;AAAA,IACJ;AAGA,UAAM,SAAS,GAAG,cAAc,SAAS,WAAW,QAAQ,IAAI;AAEhE,QAAI,EAAE,OAAO,QAAQ,GAAG,GAAG,OAAO,QAAQ,QAAQ,IAAI;AAEtD,OAAG,cAAc,OAAO,OAAO;AAU/B,QAAI,UAAU,aAAa;AACvB,YAAM,SAAS,SAAS;AACxB,SAAG,mBAAmB,GAAG,oBAAoB,SAAS,IAAI;AAC1D,YAAM,GAAG,qBAAqB,gBAAgB,GAAG,mBAAmB,CAAM,CAAC,IAAI,GAAG,SAAS,KAAK;AAGhG,UAAI,UAAU,CAAC,GAAG,cAAc,aAAa;AACzC,cAAM,YAAY,GAAG,KAAK,IAAI,QAAQ,WAAW,IAAI,KAAK;AAAA,MAC9D;AACA,UAAI,YAAY;AACZ,mBAAW,YAAY;AAAA,MAC3B;AAAA,IACJ;AACA,QAAI,SAAS,YAAY;AACrB,YAAM,SAAS,QAAQ;AACvB,SAAG,mBAAmB,GAAG,oBAAoB,SAAS,IAAI;AAC1D,YAAM,GAAG,oBAAoB,gBAAgB,GAAG,mBAAmB,EAAM,CAAC,IAAI,GAAG,QAAQ,KAAK;AAG9F,UAAI,UAAU,CAAC,GAAG,aAAa,YAAY;AACvC,cAAM,WAAW,GAAG,KAAK,IAAI,OAAO,UAAU,IAAI,KAAK;AAAA,MAC3D;AACA,UAAI,YAAY;AACZ,mBAAW,YAAY;AAAA,MAC3B;AAAA,IACJ;AAIA,QAAI,SAAS,GAAG,kBAAkB;AAC9B,YAAM,UAAU,UAAU,KAAK,SAAS,aAAa,eAAe,MAAM,IAAI;AAC9E,WAAK,QAAe;AACpB,YAAM,YAAY,GAAG,cAAc,SAAS,QAAQ,QAAQ,IAAI;AAChE,eAAS,UAAU;AACnB,UAAI,UAAU;AACd,UAAI,UAAU;AACd,cAAQ,UAAU;AAClB,eAAS,UAAU;AAAA,IACvB;AAEA,QAAI,CAAC,GAAG,UAAU;AACd,SAAG,MAAM,GAAG,CAAC;AAAA,IACjB;AAEA,QAAI,CAAC,OAAO,WAAW,SAAS,OAAO,IAAI,GAAG;AAC1C,gBAAU,IAAI,aAAa,OAAO,IAAI,CAAC;AAAA,IAC3C;AAGA,QAAI,iCAAQ,MAAM;AACd,YACI,EAAE,KAAK,IAAmB,QAC1B,EAAE,cAAc,IAAU,IAC1B,EAAE,OAAQ,YAAY,IAAI,eAC1B,SAA0B,UAAU,KAAK,OAAO,GAChD,kBAA0B,CAAC;AAE/B,UAAI,SAAS,SAAS,SAAS,UAAU;AACrC,wBAAgB,CAAC,IAAI,OAAO;AAC5B,wBAAgB,CAAC,IAAI,SAAS,QAAQ,IAAI,OAAO,SAAS;AAAA,MAC9D,OACK;AAED,wBAAgB,CAAC,IAAI,SAAS,SAAS,IAAI,OAAO,QAAQ;AAC1D,wBAAgB,CAAC,IAAI,OAAO;AAAA,MAChC;AAEA,kBAAY,UAAU;AACtB,UAAI,eAAe,UAAU,eAAe,SAAS,GAAG,eAAe;AAGvE,YAAK,6CAAc,QAAQ,cAAa,iBAAiB,qBAAa,uBACjE,QAAQ,wBAAwB,YAAY,IAAI,KAAK,gCAAiC;AACvF,uBAAe,aAAa;AAAA,MAChC;AAEA,UAAI,gBAAgB,iBAAiB,UAAU;AAC3C,YAAI,aAAa,UAAU,cAAc,cAAc,kBAAkB;AACzE,eAAO,WAAW,MAAM,aAAa,KAAK,UAAU,cAAc,cAAc,UAAU,MAAM,YAAY;AACxG,yBAAe,aAAa;AAE5B,cAAI,iBAAiB,UAAU;AAC3B;AAAA,UACJ;AACA,uBAAa,UAAU,cAAc,cAAc,kBAAkB;AAAA,QACzE;AACA,YAAI,WAAW,MAAM,aAAa,GAAG;AACjC,aAAG,kBAAkB,aAAa,QAAQ,GAAG,4BAA4B;AAAA,QAC7E,OACK;AACD,aAAG,kBAAkB,aAAa,QAAQ,UAAU;AAAA,QACxD;AAAA,MACJ;AACA,kBAAY,YAAY,YAAY,UAAU;AAC9C,oBAAc,YAAY,qBAAqB,IAAI;AAEnD,aAAO,MAAM,OAAO,KAAK;AACzB,aAAO,MAAM,OAAO,KAAK;AACzB,gBAAU,eAAe,eAAe,OAAO,GAAG,OAAO,CAAC;AAC1D,gBAAU,IAAI,YAAY;AAAA,IAC9B,WACS,GAAG,gBAAgB;AACxB,SAAG,cAAc,UAAU,IAAI,gBAAgB;AAC/C,gBAAU,OAAO,YAAY;AAAA,IACjC;AAMA,QAAI,CAAC,mBAAmB;AAGpB,YAAM,gBAAgB;AACtB,YAAM,KAAK,UAAU,iBAAiB,GAAG,CAAC;AAG1C,UAAI,CAAC,GAAG,KAAK,EAAE,GAAG;AACd,WAAG,cAAc,aAAa;AAAA,MAClC;AACA,YAAM,gBAAgB;AAAA,IAC1B;AAIA,SAAK,GAAG,iBAAiB,aAAa,qBAAqB,GAAG,iBAAiB,WAAW,CAAC,GAAG,wBAAwB;AAElH,SAAG,aAAa,GAAG,qBAAqB;AAIxC,UAAI,KAAK,yBAAyB,CAAC,GAAG,gBAAgB;AAClD,cAAM,iBAAiB,GAAG,mBAAmB,GAAG,iBAAiB,IAAI,iBAAiB,GAAG,uBAAuB,KAAK,EAAE,CAAC;AACxH,uBAAe,QAAQ,UAAU,eAAe,MAAM,GAAG;AAAA,UACrD,WAAY;AAAA,UAAM,YAAa;AAAA,UAAM,SAAU;AAAA,QACnD,CAAC;AAAA,MACL;AACA,SAAG,wBAAwB,GAAG,WAAW,MAAM;AAz5F3D,YAAAJ,KAAAK;AA05FgB,cAAM,cAAcA,OAAAL,MAAA,oBAAoB,SAAS,GAAG,cAAc,YAAY,gBAA1D,gBAAAK,IAAA,KAAAL;AAGpB,WAAG,yBAAyB,YAAY,YAAY,UAAU,UAAU,mBAAmB;AAAA,UACvF,SAAU;AAAA,UAAM,SAAU;AAAA,QAC9B,CAAC;AAED,YAAI,yCAAY,MAAM;AAClB,aAAG,2BAA2B,YAAY,YAAY,YAAY,UAAU,mBAAmB;AAAA,YAC3F,SAAU;AAAA,YAAM,SAAU;AAAA,UAC9B,CAAC;AAAA,QACL;AAAA,MACJ,GAAG,GAAG,iBAAiB,SAAS,GAAG,uBAAuB,CAAC;AAAA,IAC/D;AAEA,QAAI,mBAAmB;AACnB,UAAI,KAAK,iBAAiB,CAAC,GAAG,sBAAsB;AAChD,sBAAc,kBAAkB,QAAQ,GAAG,cAAc;AACzD,WAAG,uBAAuB;AAAA,MAC9B;AAKA,UAAI,KAAK,uBAAuB,EAAE,WAAW,OAAO,SAAS,OAAO,KAAK,OAAO,kBAAkB;AAC9F,WAAG,qBAAqB,QAAQ,MAAM;AAAA,MAC1C;AAAA,IACJ;AAGA,QAAI,CAAC,cAAc,WAAW;AAC1B,UAAI,CAAC,GAAG,oBAAoB;AACxB,cAAM,MAAK,2CAAa,eAAc,aAAa;AAGnD,WAAG,aAAa,GAAG,qBAAqB;AACxC,WAAG,wBAAwB,GAAG,WAAW,MAAM;AAC3C,aAAG,qBAAqB;AACxB,wBAAc,kBAAkB,MAAM,YAAY,GAAG,uBAAuB;AAAA,QAChF,GAAG,GAAG,oBAAoB;AAAA,MAC9B;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,uBAAuB,iBAAiB;AAr8F5C,QAAAA;AAs8FQ,UAAM,EAAE,SAAS,cAAc,IAAI;AACnC,QAAI,+CAAe,mBAAmB;AAElC,UAAI,GAACA,MAAA,cAAc,WAAd,gBAAAA,IAAsB,cAAa;AACpC,aAAK,KAAK;AAAA,MACd,WAES,gBAAgB,KAAK,CAAC,EAAE,OAAO,MAAM,OAAO,SAAS,cAAc,MAAM,KAAK,CAAC,QAAQ,SAAS,MAAM,CAAC,GAAG;AAC/G,aAAK,QAAQ;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,IAAI,uBAAuB;AACvB,WAAO,KAAK,0BAA0B,KAAK,wBAAwB,IAAI,qBAAqB,KAAK,2BAA2B,KAAK,IAAI,GAAG;AAAA,MACpI,MAAO,cAAc,WAAW,KAAK,cAAc,KAAK,YAAY;AAAA,IACxE,CAAC;AAAA,EACL;AAAA,EACA,2BAA2B,SAAS;AAChC,QAAI,CAAC,KAAK,aAAa;AAEnB,YAAM,IAAI,QAAQ,QAAQ,SAAS,CAAC;AACpC,UAAI,CAAC,EAAE,gBAAgB;AACnB,aAAK,uBAAuB,EAAE,MAAM;AAAA,MACxC;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,iBAAiB;AACb,UAAM,EAAE,cAAc,IAAI;AAC1B,QAAI,eAAe;AACf,YAAM;AAAA,QACE,OAAS;AAAA,QACT,QAAS;AAAA,MACb,IAAI,cAAc,YAClB;AAAA,QACI;AAAA,QACA;AAAA,MACJ,IAAI,cAAc,OAAO,sBAAsB;AAEnD,UAAI,UAAU,aAAa,WAAW,YAAY;AAC9C,aAAK,wBAAwB,GAAG,SAAS;AAAA,MAC7C;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,uBAAuB,QAAQ;AAC3B,SAAK,KAAK;AACV,SAAK,kBAAkB,KAAK,cAAc,kBAAkB;AAAA,EAChE;AAAA,EACA,wBAAwB,IAAI,SAAS,EAAE,OAAO,GAAG;AAC7C,UACI,EAAE,MAAM,IAAQ,KAAK,gBACrB,EAAE,UAAU,IAAI;AAEpB,SAAK,WAAW,KAAK,SAAS,EAAE;AAEhC,QAAI,WAAW,SAAS,QAAQ,QAAQ;AACpC,YAAM,YAAY;AAClB,WAAK,sBAAsB,MAAM,MAAM,YAAY,SAAS;AAAA,IAChE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU;AACN,UACI,KAAoB,MACpB,EAAE,cAAc,IAAI;AACxB,SAAK,GAAG,YAAY,GAAG,eAAe,iBAAiB,GAAG,WAAW;AACjE,UAAI,cAAc,mBAAmB;AACjC,cACI,eAAgB,cAAc,OAAO,SAAS,KAAK,OAAO,GAC1D,gBAAgB,UAAU,SAAS,cAAc,QAAQ,OAAO,EAAE;AAGtE,YAAI,CAAC,cAAc,mBAAmB,CAAC,UAAU,cAAc,MAAM,KAAK,CAAC,gBAAgB;AACvF,aAAG,KAAK;AAER,cAAI,CAAC,GAAG,aAAa;AACjB,eAAG,cAAc,kBAAkB;AAAA,UACvC;AACA;AAAA,QACJ;AAIA,sBAAc,eAAe,cAAc;AAC3C,sBAAc,gBAAgB,gBAAgB,cAAc,kBAAkB,OAAO;AAAA,MACzF;AACA,gBAAU,kBAAkB,GAAG,SAAS,gBAAgB,GAAG,gBAAgB,EAAE;AAC7E,SAAG,QAAQ,aAAa;AAAA,IAC5B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,UAAU,OAAO,YAAY,kBAAkB;AAC3C,WAAO,KAAK,YAAY,WAAW,OAAO,YAAY,gBAAgB;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,YAAY,SAAS,OAAO,YAAY,kBAAkB;AACtD,QAAI,OAAO,UAAU,UAAU;AAC3B,yBAAmB;AACnB,mBAAa;AACb,cAAQ;AAAA,IACZ,WACS,UAAU,UAAU;AACzB,cAAQ;AAAA,IACZ;AAEA,QAAI,OAAO,eAAe,WAAW;AACjC,yBAAmB;AACnB,mBAAa;AAAA,IACjB;AACA,QAAI,YAAY,aAAa,eAAe,QAAW;AACnD,mBAAa,KAAK;AAAA,IACtB;AACA,kBAAa,yCAAY,YAAW,WAAW,UAAU;AACzD,WAAO,UAAU,SAAS,MAAM,EAAE,KAAK,OAAO,GAAG,YAAY,gBAAgB;AAAA,EACjF;AAAA,EACA,yBAAyB;AACrB,UACI,KAAY,MACZ;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAY,IACZ,EAAE,MAAM,IAAI;AAMhB,QAAI,mBAAmB,IAAQ;AAC3B,gBAAU,UAAU,SAAS,GAAG,mBAAmB,GAAG,QAAQ,aAAa,WAAW,GAAG,iBAAiB,CAAC,EAAE,KAAK,EAAE;AACpH,YAAM,WAAW,GAAG,aAAa;AACjC,UAAI,YAAY;AACZ,mBAAW,YAAY,WAAW,OAAO;AAAA,MAC7C;AAAA,IACJ;AACA,QAAI,mBAAmB,GAAQ;AAC3B,gBAAU,UAAU,SAAS,GAAG,oBAAoB,GAAG,QAAQ,aAAa,WAAW,GAAG,kBAAkB,CAAC,EAAE,KAAK,EAAE;AACtH,YAAM,YAAY,GAAG,cAAc;AACnC,UAAI,YAAY;AACZ,mBAAW,YAAY,WAAW,OAAO;AAAA,MAC7C;AAAA,IACJ;AACA,OAAG,mBAAmB;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU;AACN,UACI,EAAE,QAAQ,IAAI,MACd,SAAc,KAAK,WAAW,KAAK,YAAY,KAAK,aAAa,mCAAS,aAAa,MACvF,cAAc,SAAS,uBAAuB;AAIlD,QAAI,KAAK,eAAe;AACpB,eAAS,cAAc,QAAQ,aAAa,QAAQ,aAAa,cAAc,QAAQ;AACnF,iBAAS,YAAY;AACrB,YAAI,OAAO,SAAS,WAAW,KAAK,CAAC,KAAK,KAAK,WAAW,GAAG;AACzD,sBAAY,YAAY,WAAW;AAAA,QACvC;AAAA,MACJ;AACA,aAAO,aAAa,aAAa,OAAO;AAAA,IAC5C,OAEK;AACD,aAAO,YAAY,OAAO;AAAA,IAC9B;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,UAAU,KAAK;AACX,SAAK,QAAQ,QAAQ,MAAM;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,kBAAkB;AAClB,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,mBAAmB;AACnB,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,YAAY,OAAO;AACf,WAAQ,OAAO,UAAU,WAAY,EAAE,MAAM,IAAI;AAAA,EACrD;AAAA,EACA,iBAAiB,YAAY,eAAe;AACxC,QAAI,OAAO,eAAe,WAAW;AACjC,mBAAa;AAAA,QACT,WAAY;AAAA,QACZ,WAAY;AAAA,MAChB;AAAA,IACJ;AACA,QAAI,YAAY;AACZ,iBAAW,UAAU,KAAK;AAC1B,iBAAW,SAAS;AACpB,UAAI,CAAC,WAAW,YAAY;AACxB,qBAAa,gBAAgB,cAAc,UAAU,UAAU,IAAI,IAAI,KAAK,cAAc,UAAU;AAAA,MACxG;AAEA,iBAAW,kBAAkB;AAAA,IACjC,OAEK;AACD,qDAAe;AAAA,IACnB;AACA,WAAO;AAAA,EACX;AAAA,EACA,mBAAmB,MAAM;AAxsG7B,QAAAA;AAysGQ,UACI,SAAS,KAAK,QAAQ,SAAO,IAAI,cAAc,GAE/C,kBAAiB,iCAAQ,qBAAkBA,MAAA,mCAAS,MAAM,OAAE;AA5sGxE,UAAAA;AA4sG2E,cAAC,GAACA,MAAA,EAAE,mBAAF,gBAAAA,IAAkB;AAAA,WAAxC,gBAAAA,IAAgD;AAC/F,qDAAgB,qBAAqB;AAAA,MACjC,cAAe;AAAA,MACf,QAAe;AAAA,MACf;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,OAAO;AACP,QAAI,KAAK,eAAe;AACpB,aAAO,KAAK,WAAW,KAAK;AAAA,IAChC;AACA,WAAO,KAAK,eAAe;AAAA,EAC/B;AAAA,EACA,WAAW,MAAM;AACb,QAAI,CAAC,KAAK,qBAAqB;AAE3B,WAAK,cAAc,MAAM,EAAE,KAAK,oBAAoB,KAAK,MAAM;AAAA,IACnE;AAAA,EACJ;AAAA,EACA,2BAA2B,sBAAsB,KAAK;AAClD,UACI,KAAqB,MACrB,EAAE,eAAe,IAAI;AAEzB,+BAAK;AAEL,QAAI,sBAAsB;AACtB,YAAM,SAAS,IAAI,iBAAiB,MAAM;AACtC,YAAI,GAAG,cAAc;AACjB,aAAG,eAAe;AAAA,QACtB,OACK;AACD,aAAG,QAAQ,eAAe;AAAA,QAC9B;AAAA,MACJ,CAAC;AACD,aAAO,QAAQ,gBAAgB,oBAAoB;AACnD,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EACA,cAAc,MAAM;AAChB,QAAI,CAAC,KAAK,qBAAqB;AAC3B,WAAK,cAAc,IAAI;AAAA,IAC3B;AAAA,EACJ;AAAA,EACA,cAAc,YAAY,UAAU,OAAO;AACvC,UACI,KAAW,MACX;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAW,IACX,WAAW,WAAY,mBAAmB,WAAY,GAAG;AAC7D,QAAI,UAAU,eAAe,UAAU,GAAG;AACtC,aAAO,GAAG,mBAAmB,UAAU;AAAA,IAC3C;AAEA,OAAG,eAAe;AAGlB,OAAG,UAAU,sBAAsB;AAGnC,QAAI,UAAU;AACV,cAAQ,YAAY,QAAQ;AAAA,IAChC;AAEA,QAAI,SAAS;AAET,cAAQ,OAAO,QAAQ,WAAS,QAAQ,UAAU,aAAa,QAAQ,QAAQ,EAAE,KAAK,CAAC;AAAA,IAC3F;AAEA,OAAG,YAAY;AACf,QAAI,YAAY;AACZ,UAAI;AACJ,UAAI,OAAO,eAAe,UAAU;AAChC,6BAAqB,SAAS,uBAAuB;AACrD,gBAAQ,KAAK;AAAA,UACT,WAAY;AAAA,YACR,GAAG;AAAA,YACH,cAAe;AAAA,UACnB;AAAA,UACA,eAAgB;AAAA,QACpB,CAAC;AAAA,MACL,OACK;AACD,6BAAqB,UAAU,0BAA0B,YAAY,EAAE,UAAW,KAAK,CAAC;AAAA,MAC5F;AACA,UAAI,SAAS;AACT,uBAAe,YAAY;AAC3B,uBAAe,YAAY,kBAAkB;AAAA,MACjD,OACK;AAED,YAAI,QAAQ,aAAa;AACrB,uBAAa,eAAe;AAC5B,uBAAa,WAAW,kBAAkB;AAAA,QAC9C,OACK;AACD,yBAAe,aAAa,oBAAoB,eAAe,UAAU;AAAA,QAC7E;AAAA,MACJ;AAAA,IACJ,OACK;AACD,UAAI,WAAW,CAAC,QAAQ,aAAa;AACjC,uBAAe,YAAY;AAAA,MAC/B,OACK;AACD,qBAAa,eAAe;AAAA,MAChC;AAAA,IACJ;AAEA,OAAG,YAAY;AACf,QAAI,UAAU;AACV,cAAQ,YAAY,QAAQ;AAAA,IAChC;AAEA,OAAG,0BAA0B,aAAa;AAC1C,OAAG,wBAAwB,aAAa;AACxC,QAAI,GAAG,cAAc;AACjB,SAAG,UAAU;AAAA,IACjB;AAEA,SAAK,GAAG,YAAY,GAAG,eAAe,CAAC,GAAG,YAAY;AAClD,SAAG,QAAQ;AAAA,IACf;AAAA,EACJ;AAAA,EACA,gBAAgB;AAn1GpB,QAAAA;AAu1GQ,SAAIA,MAAA,KAAK,kBAAL,gBAAAA,IAAoB,cAAc;AAClC,WAAK,cAAc;AACnB,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAI,aAAa;AACb,UAAM,KAAK;AACX,QAAI,SAAS,KAAK;AAClB,QAAI,CAAC,QAAQ;AACT,YACI,cAAgB,WAAW,UAAU,cAAc,GAAG,SAAS,kBAAkB,CAAC,GAClF,eAAgB,UAAU,cAAc,GAAG,SAAS,kBAAkB,GACtE,gBAAgB,GAAG,eACnB,EAAE,UAAU,IAAI,eAChB,QAAgB,cAAc,mBAC9B,cAAgB,GAAG,oBAAoB,MAAM,kBAC7C,SAAgB,GAAG;AAIvB,oBAAc,YAAY;AAC1B,UAAI,mBAAmB,UAAU,cAAc,GAAG,gBAAgB,kBAAkB;AAEpF,UAAI,iBAAiB,MAAM,aAAa,GAAG;AACvC,2BAAmB,UAAU,cAAc,GAAG,SAAS,kBAAkB;AAAA,MAC7E;AACA,SAAG,+BAA+B;AAClC,eAAS,cAAc,sBAAsB;AAC7C,YAAM,CAAC,OAAO,MAAM,IAAI,SAAS,GAAG,cAAc,CAAC,OAAO,OAAO,OAAO,MAAM;AAE9E,oBAAc,YAAY;AAC1B,YAAM,aAAa,UAAU,SAAS,WAAW;AACjD,YAAM,aAAa,SAAS,KAAK;AACjC,kBAAY,aAAa,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI,MAAM,EAAE;AAChF,UAAI,aAAa;AACb,oBAAY,aAAa,gBAAgB,WAAW;AACpD,oBAAY,aAAa,UAAU,YAAY;AAAA,MACnD;AACA,aAAO,CAAC,KAAK;AACb,UAAI,QAAQ;AACR,WAAG,QAAQ,UAAU,IAAI,UAAU;AAAA,MACvC;AACA,UAAI,CAAC,GAAG,qBAAqB;AACzB,WAAG,sBAAsB,qBAAa,IAAI;AAAA,UACtC,OAAU;AAAA,UACV,SAAU;AAAA,QACd,CAAC;AAAA,MACL;AAEA,SAAG,kBAAkB,aAAa,QAAQ,GAAG,4BAA4B;AAAA,IAC7E;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,gBAAgB;AAChB,UAAM,KAAK;AACX,QAAI,CAAC,GAAG,gBAAgB;AACpB,YACI,YAAY,GAAG,UACf,WAAY,GAAG,GAAG,EAAE;AACxB,SAAG,iBAAiB,UAAU,cAAc;AAAA,QACxC,QAAY,GAAG;AAAA,QACf,WAAY;AAAA,QACZ,UAAY,CAAC;AAAA,UACT,KAAW;AAAA,UACX,IAAW;AAAA,UACX,SAAW;AAAA,UACX,OAAW;AAAA,UACX,UAAW,CAAC,YACN;AAAA,YACE,KAAW;AAAA,YACX,UAAW,CAAC;AAAA,cACR,KAAW;AAAA,cACX,IAAW;AAAA,cACX,UAAW,CAAC;AAAA,gBACR,KAAkB;AAAA,gBAClB,IAAkB;AAAA,gBAClB,IAAkB;AAAA,gBAClB,cAAkB;AAAA,gBAClB,iBAAkB;AAAA,cACtB,CAAC;AAAA,YACL,CAAC;AAAA,UACL,IACE,MAAM;AAAA,YACR,KAA8B;AAAA,YAC9B,CAAC,YAAY,WAAW,EAAE,GAAI,QAAQ,QAAQ;AAAA,UAClD,CAAC;AAAA,QACL,CAAC;AAAA,MACL,CAAC;AAAA,IACL;AACA,WAAO,GAAG;AAAA,EACd;AAAA,EACA,aAAa,QAAQ;AACjB,QAAI,KAAK,gBAAgB;AACrB,WAAK,eAAe,UAAU,SAAS,WAAW,KAAK,EAAE,gBAAgB;AAAA,IAC7E;AAAA,EACJ;AAAA,EACA,gBAAgB,WAAW;AAh8G/B,QAAAA,KAAA;AAi8GQ,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAClB,QAAI,WAAW;AACX,SAAG,oBAAoB,YAAY,YAAY;AAAA,QAC3C;AAAA,QACA,WAAY;AAAA,QACZ,SAAY;AAAA,QACZ,SAAY;AAAA,MAChB,CAAC;AACD,SAAG,eAAe,YAAY,GAAG;AAAA,QAC7B;AAAA,QACA,UAAU,OAAO;AACb,gBACI,EAAE,OAAO,IAAO,OAChB,gBAAgB,QAAO,YAAY,MAAM;AAE7C,cAAI,CAAC,MAAM,OAAO,QAAQ,gBAAgB;AAAA;AAAA,UAGtC,kBAAkB,QAAS,KAAK,UAAU,OAAO,OAAO,KAAK,MAAM,EAAE,SAAS,aAAa,GAAI;AAC/F,oBAAQ,aAAa,aAAa,MAAM;AAAA,UAC5C;AAAA,QACJ;AAAA;AAAA,QAEA,SAAU;AAAA,MACd,CAAC;AAAA,IACL,OACK;AACD,OAAAA,MAAA,GAAG,sBAAH,gBAAAA,IAAA;AACA,eAAG,0BAAH;AACA,eAAG,iBAAH;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,kBAAkB,GAAG;AAn+GzB,QAAAA;AAo+GQ,UAAM,KAAK;AACX,QAAI,CAAC,GAAG,uBAAuB,CAAC,GAAG;AAC/B;AAAA,IACJ;AACA,UACI;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAuB,IACvB,aAAuB,GAAG,cAAc,UAAU,cAAc,SAAS,UAAU,MAAM,SACzF,gBAAuB,aAAa,QAAQ,gBAAgB,GAAG,aAC/D,SAAuB,UAAU,KAAK,SAAS,aAAa,gBAAgB,IAAI,GAChF,aAAuB,EAAE,SACzB,aAAuB,EAAE,SACzB,uBAAwB,SAAS,oBAAoB,SAAS,MAC9D,CAAC,SAAS,OAAO,IAAM,aAAa,UAAU,YAAY,SAAS,aAAa,IAAI,GAAG,MAAM,GAC7F,iBAAwBA,MAAA,aAAa,UAAU,QAAQ,aAAa,EAAE,OAAO,GAAG,CAAC,IAAI,iBAAgB,2CAAa,eAAc,cAAc,UAAU,KAAK,WAAW,OAAhJ,gBAAAA,IAAqJ,QAAQ,MAAM,oBAAoB,IAC/M,gBAAuB;AAAA,MACnB,SAAU;AAAA,MACV,UAAW,WAAS;AAEhB,gBAAQ,UAAU,OAAO,YAAY;AAErC,eAAO;AAAA,UACH,UAAU,MAAM,UAAU,cAAc,aAAa,IAAI,qBAAqB;AAAA,UAC9E,UAAU,MAAM,UAAU,cAAc,aAAa,IAAI,qBAAqB;AAAA,QAClF;AAEA,YAAI,eAAe;AACf,iBAAO,YAAY,aAAa;AAAA,QACpC;AAIA,kBAAU,eAAe,SAAS,OAAO,GAAG,OAAO,CAAC;AAAA,MACxD;AAAA,IACJ;AAEJ,QAAI,cAAc,eAAe;AAC7B,oBAAc,YAAY,CAAAM,QAAKA,IAAE,eAAe;AAAA,IACpD;AACA,OAAG,UAAU,YAAY,GAAG,SAAS;AACrC,OAAG,aAAa,CAAC;AAEjB,MAAE,aAAa,gBAAgB;AAC/B,OAAG,wBAAwB,YAAY,YAAY,aAAa;AAIhE,OAAG,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,uBAAuB,GAAG;AAhiH9B,QAAAN;AAiiHQ,UACI,KAAqB,MACrB,EAAE,QAAQ,IAAW,IACrB,eAAqB,UAAU,iBAAiB,EAAE,SAAS,EAAE,OAAO,GACpE,EAAE,eAAe,IAAI,GAAG;AAC5B,QAAI,gBAAgB;AAChB,YAAM,aAAYA,MAAA,eAAe,KAAK,cAAc,MAAlC,gBAAAA,IAAsC;AAExD,UAAI,WAAW;AACX,YAAI,aAAa,QAAQ,IAAI,QAAQ,EAAE,IAAI,SAAS,EAAE,GAAG;AACrD,YAAE,eAAe;AACjB,iBAAO;AAAA,QACX;AAAA,MACJ,WAES,CAAC,aAAa,QAAQ,IAAI,QAAQ,EAAE,IAAI,cAAc,EAAE,GAAG;AAChE,UAAE,eAAe;AACjB,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,aAAa,GAAG;AACZ,QAAI,EAAE,aAAa,cAAc;AAE7B,QAAE,aAAa,QAAQ,yBAAyB,EAAE;AAIlD,QAAE,aAAa,aAAa,KAAK,WAAW,OAAO,KAAK;AAAA,IAC5D;AAAA,EACJ;AAAA,EACA,SAAS,MAAM,OAAO;AAClB,cAAU,WAAW,KAAK,SAAS,aAAa,SAAS,IAAI,IAAI,OAAO,EAAE,CAAC,IAAI,GAAI,MAAM,CAAC;AAC1F,WAAO;AAAA,EACX;AAAA,EACA,kBAAkB;AACd,SAAK,UAAU,OAAO;AACtB,SAAK,sBAAsB;AAC3B,SAAK,QAAQ,gBAAgB,WAAW;AAAA,EAC5C;AAAA,EACA,eAAe,OAAO;AAElB,WAAO,QAAQ,KAAK;AAAA,EACxB;AAAA,EACA,iBAAiB,OAAO;AAEpB,WAAO,QAAQ,KAAK;AAAA,EACxB;AAAA,EACA,iBAAiB,YAAY;AACzB,SAAK,QAAQ,UAAU,aAAa,QAAQ,QAAQ,EAAE,cAAc;AAAA,EACxE;AAAA,EACA,QAAQ;AACJ,WAAO;AAAA,MACH,UAAU,SAAS,KAAK,OAAO;AAAA,MAC/B,UAAU,SAAS,KAAK,OAAO;AAAA,IACnC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,GAAG,GAAG;AACR,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAClB,QAAI,GAAG,YAAY,GAAG,YAAY;AAC9B,UAAI,KAAK,MAAM;AACX,WAAG,KAAK;AAAA,MACZ;AACA,UAAI,KAAK,MAAM;AACX,WAAG,KAAK;AAAA,MACZ;AAKA,UAAI,UAAU,cAAc,SAAS,UAAU,MAAM,SAAS;AAC1D,cACI,IAAW,QAAQ,sBAAsB,GACzC,CAAC,IAAI,EAAE,IAAI,UAAU,eAAe,OAAO,GAC3C,SAAW,IAAI,EAAE,GACjB,SAAW,IAAI,EAAE;AACrB,kBAAU,eAAe,SAAS,KAAK,QAAQ,KAAK,MAAM;AAAA,MAC9D,OACK;AACD,kBAAU,eAAe,SAAS,GAAG,MAAM,GAAG,GAAG,MAAM,CAAC;AAAA,MAC5D;AACA,UAAI,GAAG,gBAAgB;AACnB,WAAG,WAAW;AAAA,MAClB,OACK;AACD,gBAAQ,UAAU,OAAO,YAAY;AAAA,MACzC;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,IAAI;AACJ,WAAO,KAAK,MAAM,EAAE,CAAC;AAAA,EACzB;AAAA,EACA,QAAQ,GAAG;AACP,SAAK,MAAM,CAAC;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,IAAI;AACJ,WAAO,KAAK,MAAM,EAAE,CAAC;AAAA,EACzB;AAAA,EACA,QAAQ,GAAG;AACP,SAAK,MAAM,MAAM,CAAC;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,QAAQ;AACR,UACI,KAAU,MACV,UAAU,GAAG;AACjB,QAAI,GAAG,eAAe;AAElB,UAAI,GAAG,UAAU,MAAM;AACnB,WAAG,SAAS,QAAQ;AAAA,MACxB;AAEA,aAAO,GAAG;AAAA,IACd;AAEA,WAAO,QAAQ;AAAA,EACnB;AAAA,EACA,YAAY,OAAO;AACf,UAAM,KAAK;AACX,cAAU,UAAU,GAAG,SAAS,SAAS,KAAK;AAC9C,OAAG,aAAa;AAEhB,OAAG,YAAY,GAAG;AAClB,OAAG,SAAY;AAEf,OAAG,QAAQ;AACX,OAAG,QAAQ,MAAM,OAAO;AAAA,EAC5B;AAAA;AAAA,EAEA,kBAAkB;AACd,SAAK,SAAS;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,WAAW;AACX,WAAO,UAAU,YAAY,KAAK,QAAQ,MAAM,UAAU,KAAK,OAAO;AAAA,EAC1E;AAAA,EACA,eAAe,UAAU;AACrB,SAAK,gBAAgB;AACrB,cAAU,UAAU,KAAK,SAAS,YAAY,QAAQ;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,WAAW;AACX,WAAO,UAAU,YAAY,KAAK,QAAQ,MAAM,UAAU,KAAK,OAAO;AAAA,EAC1E;AAAA,EACA,eAAe,UAAU;AACrB,cAAU,UAAU,KAAK,SAAS,YAAY,QAAQ;AAAA,EAC1D;AAAA,EACA,WAAW,MAAM;AAIb,SAAK,UAAU,OAAO;AAEtB,QAAI,OAAO,SAAS,YAAY,CAAC,MAAM,IAAI,GAAG;AAC1C,aAAO,GAAG,IAAI,IAAI,IAAI;AAAA,IAC1B;AACA,SAAK,QAAQ,MAAM,OAAO;AAC1B,SAAK,QAAQ,MAAM,QAAQ;AAAA,EAC/B;AAAA,EACA,gBAAgB,WAAW;AACvB,SAAK,QAAQ,MAAM,YAAY;AAAA,EACnC;AAAA,EACA,aAAa,QAAQ;AAEjB,SAAK,QAAQ,MAAM,SAAS,KAAK,UAAU,MAAM,EAAE,KAAK,GAAG;AAAA,EAC/D;AAAA,EACA,gBAAgB,OAAO,UAAU;AAC7B,gBAAY,KAAK,QAAQ,UAAU,OAAO,gBAAgB,QAAQ,EAAE;AACpE,SAAK,QAAQ,UAAU,IAAI,gBAAgB,KAAK,EAAE;AAAA,EACtD;AAAA,EACA,kBAAkB,aAAa;AAC3B,QAAI,KAAK,OAAO;AACZ,UAAI,eAAe,MAAM;AACrB,aAAK,MAAM,gBAAgB,aAAa;AAAA,MAC5C,OACK;AACD,aAAK,MAAM,cAAc;AAAA,MAC7B;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,SAAS;AACT,UAAM,KAAU,MACZ,UAAU,GAAG;AACjB,QAAI,GAAG,eAAe;AAElB,UAAI,GAAG,WAAW,MAAM;AACpB,WAAG,UAAU,QAAQ;AAAA,MACzB;AAEA,aAAO,GAAG;AAAA,IACd;AAEA,WAAO,QAAQ;AAAA,EACnB;AAAA,EACA,aAAa,QAAQ;AACjB,cAAU,UAAU,KAAK,SAAS,UAAU,MAAM;AAClD,SAAK,cAAc;AAEnB,SAAK,UAAU;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,YAAY;AACZ,WAAO,UAAU,YAAY,KAAK,iBAAiB,MAAM,WAAW,KAAK,OAAO;AAAA,EACpF;AAAA,EACA,gBAAgB,WAAW;AACvB,SAAK,iBAAiB;AACtB,cAAU,UAAU,KAAK,kBAAkB,aAAa,SAAS;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,YAAY;AACZ,WAAO,UAAU,YAAY,KAAK,QAAQ,MAAM,WAAW,KAAK,OAAO;AAAA,EAC3E;AAAA,EACA,gBAAgB,WAAW;AACvB,cAAU,UAAU,KAAK,SAAS,aAAa,SAAS;AAAA,EAC5D;AAAA,EACA,eAAe,WAAW,OAAO;AAC7B,UACI;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAI;AACR,SAAK,QAAQ,wBAAwB,EAAE,SAAS,CAAC;AACjD,QAAI,UAAU;AACV,WAAK,YAAY;AAEjB,UAAI,KAAK,cAAc,UAAU;AAC7B;AAAA,MACJ;AAAA,IACJ;AACA,QAAI,SAAS;AACT,cAAQ,UAAU,WAAW,QAAQ,QAAQ,EAAE,YAAY;AAC3D,UAAI,cAAc;AACd,qBAAa,WAAW;AAAA,MAC5B;AACA,UAAI,aAAa;AACb,oBAAY,aAAa,iBAAiB,QAAQ;AAAA,MACtD;AAAA,IACJ;AACA,SAAK,WAAW,QAAQ;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,UAAU;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAIA,UAAU;AACN,SAAK,WAAW;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS;AACL,SAAK,WAAW;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB;AAChB,UACI,KAAS,MAET,SAAS,WAAW,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO;AACvE,eAAW,mBAAmB,GAAG,kBAAkB;AACnD,OAAG,QAAQ,UAAU,IAAI,cAAc;AACvC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB;AACb,WAAO,WAAW,KAAK;AAAA,EAC3B;AAAA,EACA,qBAAqB;AACjB,QAAI,CAAC,WAAW,cAAc;AAC1B,WAAK,iBAAiB;AAAA,IAC1B;AAAA,EACJ;AAAA,EACA,mBAAmB;AACf,eAAW,mBAAmB,KAAK,kBAAkB;AACrD,SAAK,QAAQ,UAAU,OAAO,cAAc;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,IAAI,UAAU;AAl5HlB,QAAAA;AAm5HQ,UAAM,KAAK;AACX,QAAI,GAAG,UAAU;AACb,aAAO,GAAG;AAAA,IACd,OACK;AACD,YAAM,WAAUA,MAAA,QAAO,YAAP,gBAAAA,IAAgB,iBAAiB,GAAG,aAAa,GAAG;AAGpE,UAAI,WAAW,QAAQ,iBAAiB,GAAG,YAAY,QAAQ,WAAW;AACtE,eAAO;AAAA,MACX;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA,EAEA,cAAc,SAAS,YAAY;AAj6HvC,QAAAA;AAk6HQ,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAClB,QAAI,SAAS;AACT,UAAI,EAAE,GAAG,yBAAyB,cAAc,gBAAgB;AAC5D,YAAI,CAAC,QAAQ,aAAa,QAAQ,YAAY,SAAS,UAAU;AAC7D,oBAAU;AAAA,YACN,MAAe,OAAO,YAAY,WAAY,UAAU,GAAG;AAAA,YAC3D,aAAc;AAAA,UAClB;AAAA,QACJ;AAIA,YAAI,CAAC,GAAG,0BAA0B;AAC9B,aAAG,oBAAkBA,MAAA,QAAQ,SAAR,gBAAAA,IAAc,MAAM,eAAc,QAAQ,KAAK,QAAQ,YAAY,eAAe,IAAI,QAAQ;AAAA,QACvH;AAGA,aAAI,yCAAY,cAAa,QAAQ,aAAa;AAC9C,kBAAQ,OAAO;AACf,cAAI,CAAC,QAAQ;AAAY,oBAAQ,aAAa;AAC9C,cAAI,EAAE,iBAAiB,YAAY,CAAC,QAAQ;AAAa,oBAAQ,cAAc;AAC/E,cAAI,EAAE,eAAe;AAAU,oBAAQ,YAAY;AACnD,oBAAU,QAAO,YAAY,YAAY,SAAS,EAAE;AAEpD,aAAG,gBAAgB,sBAAsB;AACzC,cAAI,CAAC,GAAG,0BAA0B;AAC9B,oBAAQ,IAAI;AAAA,cACR,MAAkB;AAAA,cAClB,iBAAkB;AAAA,cAClB,SAAkB;AAAA,YACtB,CAAC;AAAA,UACL;AAAA,QACJ,OAEK;AACD,kBAAQ,QAAQ,OAAO;AACvB,aAAG,YAAY;AAEf;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,OACK;AAID,UAAI,YAAY;AACZ,YAAI,WAAW,QAAQ,WAAW,WAAW;AACzC,qBAAW,QAAQ;AAAA,QACvB,OACK;AAED,qBAAW,OAAO;AAClB;AAAA,QACJ;AAAA,MACJ,OAEK;AACD,eAAO,QAAQ,QAAQ;AAAA,MAC3B;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,qBAAqB,EAAE,OAAO,OAAO,GAAG;AACpC,SAAK,kBAAmB,OAAO,SAAS,WAAY,QAAQ,OAAO,eAAe;AAAA,EACtF;AAAA,EACA,IAAI,cAAc;AACd,UAAM,UAAU,KAAK;AACrB,QAAI,SAAS;AACT,aAAO,QAAQ,YAAY,QAAQ,eAAe,YAAY,OAAO,YAAY,WAAW,UAAU,QAAQ;AAAA,IAClH,WACS,KAAK,WAAW;AACrB,aAAO,KAAK,UAAU;AAAA,IAC1B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,YAAY;AACZ,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAElB,QAAI;AAEJ,WAAO;AAAA,MAAQ,WAAW,CAAC,GAAG,WAAW,CAAC,GAAG,gBAAgB,QAAQ,gBAChE,CAAC,GAAG,eAAe,UAAU,OAAO,OACpC,EAAE,QAAQ,GAAG,WAAW,MAAM;AAAA,IACnC;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,YAAY,UAAU,UAAU,MAAM,MAAM,KAAK,SAAS,SAAS,GAAG;AA9gI1E,QAAAA;AA+gIQ,UAAM,KAAK;AAEX,QAAI,GAAG,aAAa,GAAG,WAAW;AAG9B,OAAAA,MAAA,GAAG,sBAAH,gBAAAA,IAAsB,OAAO;AAC7B,SAAG,SAAS,UAAU,SAAS,IAAI;AAAA,IACvC,OACK;AAED,OAAC,GAAG,sBAAsB,GAAG,oBAAoB,oBAAI,IAAI,IAAI,IAAI,IAAI,EAAE,UAAU,SAAS,KAAK,CAAC;AAAA,IACpG;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQ;AACJ,QAAI,KAAK,aAAa;AAClB,WAAK,aAAa,MAAM,EAAE,eAAgB,KAAK,CAAC;AAAA,IACpD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,eAAe;AAAA,EAEnB;AAAA,EACA,IAAI,cAAc;AAEd,UAAM,eAAgB,CAAC,KAAK,gBAAgB,KAAK,aAAa,CAAC,KAAK,YAAa,KAAK;AAGtF,WAAO,iBAAiB,iBAAiB,SAAS,QAAQ,aAAa;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,KAAK,EAAE,OAAO,UAAU,KAAK,IAAI,CAAC,GAAG;AACvC,UACI,KAAgB,MAChB;AAAA,MACI;AAAA,MACA;AAAA,IACJ,IAAgB,IAChB,EAAE,MAAM,IAAQ,SAChB,gBAAgB,WAAW,GAAG;AAClC,QAAI,WAAW,WAAW,UAAU,CAAC,GAAG;AACxC,QAAI,SAAS;AAST,gBAAU,GAAG,QAAQ,YAAY;AACjC,UAAI,aAAa,UAAU,OAAO,GAAG;AACjC,kBAAU,MAAM;AAAA,MACpB;AAAA,IACJ;AACA,QAAI,YAAY,UAAU,CAAC,GAAG,sBAAsB,GAAG,mBAAmB,MAAM,QAAQ;AACpF,aAAO,IAAI,QAAQ,aAAW;AAE1B,WAAG,wBAAwB;AAK3B,WAAG,eAAe,GAAG,SAAS;AAC9B,YAAI,UAAU;AACV,gBAAM,YAAY,GAAG;AACrB,cAAI,CAAC,UAAU,SAAS,OAAO,GAAG;AAE9B,gBAAI,GAAG,UAAU;AACb,wBAAU,YAAY,GAAG,OAAO;AAAA,YACpC,OACK;AAGD,iBAAG,OAAO,WAAW,KAAK;AAAA,YAC9B;AAAA,UACJ;AAGA,cAAI,MAAM,UAAU,SAAS,OAAO,GAAG;AACnC,eAAG,QAAQ;AACX,kBAAM,YAAY,MAAM,kBAAkB;AAAA,UAC9C;AACA,gBAAM,iBAAiB,GAAG,QAAQ,QAAQ;AAC1C,cAAI,gBAAgB;AAChB,kBAAM,EAAE,MAAM,IAAI;AAGlB,eAAG,QAAQ;AACX,kBAAM,YAAY,SAAS,KAAK;AAChC,kBAAM,kBAAkB;AAAA,UAC5B;AAAA,QACJ;AACA,WAAG,UAAU;AACb,gBAAQ,UAAU,OAAO,UAAU;AAGnC,YAAI,YAAY,CAAC,UAAU,OAAO,GAAG;AACjC,aAAG,KAAK,KAAK;AACb,kBAAQ;AAAA,QACZ;AAEA,WAAG,eAAe;AAAA,UACd,MAAS;AAAA,UACT,OAAS;AAAA,UACT,KAAS;AAAA,UACT,QAAS,GAAG,MAAM,QAAQ;AAAA,QAC9B,CAAC;AACD,YAAI,eAAe;AACf,sBAAY,OAAO,KAAK,aAAa,EAAE,CAAC;AACxC,sBAAY,cAAc,SAAS;AACnC,gBAAM,mBAAmB,GAAG,mBAAmB;AAAA,YAC3C,SAAU;AAAA,YACV;AAAA,YACA;AAAA,UACJ;AACA,aAAG,cAAc;AAEjB,gBAAM,aAAa;AAGnB,gBAAM,SAAS,IAAI,UAAU;AAC7B,oBAAU,cAAc,SAAS,SAAS;AAE1C,aAAG,iBAAiB,WAAW,YAAY,gBAAgB;AAAA,YACvD;AAAA,YACA,UAAW;AAAA,YACX,UAAW,cAAc,UAAU,QAAQ,IAAI;AAAA,YAC/C,SAAW,MAAM,GAAG,qBAAqB,gBAAgB;AAAA,YACzD,SAAW;AAAA,UACf,CAAC;AACD,gBAAM,aAAa,GAAG,SAAS,IAAI,UAAU,QAAQ,SAAS,UAAU,KAAK;AAC7E,gBAAM,SAAS,IAAI,UAAU;AAAA,QACjC;AACA,WAAG,UAAU,OAAO,CAAC,gBAAgB,UAAU,IAAI;AAAA,MACvD,CAAC;AAAA,IACL,OACK;AACD,aAAO,QAAQ,QAAQ;AAAA,IAC3B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,OAAO,OAAO,QAAQ,SAAS;AACjC,UACI,KAAU,MACVO,WAAU,MAAM,QAAQ,KAAK;AAEjC,QAAIA,YAAW,OAAO,UAAU,UAAU;AACtC,YAAM,KAAKA,WAAU,QAAQ,CAAC,OAAO,MAAM;AAC3C,cAAQ,OAAO,OAAO;AAAA,QAClB,QAAY,IAAI,MAAM,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;AAAA;AAAA;AAAA,QAG1C,WAAY;AAAA,QACZ,OAAY;AAAA,MAChB,GAAGA,WAAU,SAAS,OAAO;AAAA,IACjC;AAEA,OAAG,cAAc;AACjB,QAAI,GAAG,WAAW;AACd,gBAAU,kBAAkB,GAAG,SAAS,gBAAgB,KAAK,EAAE;AAE/D,SAAG,QAAQ,KAAK;AAAA,IACpB,OACK;AACD,aAAO,GAAG,KAAK,EAAE,MAAM,CAAC;AAAA,IAC5B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,cAAc;AAChB,kBAAc,UAAU,QAAQ,SAAS,0EAA0E;AACnH,WAAO,KAAK,OAAO,GAAG,SAAS;AAAA,EACnC;AAAA,EACA,UAAU,OAAO,WAAW;AAztIhC,QAAAP,KAAA;AA0tIQ,UAAM,KAAK;AAMX,OAAG,QAAQ,MAAM;AAEjB,OAAG,yBAAyB,GAAG;AAI/B,WAAAA,MAAA,GAAG,UAAH,gBAAAA,IAAU,gBAAV,wBAAAA,KAAwB;AACxB,OAAG,aAAa;AAEhB,QAAI,GAAG,YAAY,GAAG,YAAY;AAC9B,UAAI,OAAO;AACP,WAAG,QAAQ,KAAK;AAAA,MACpB,WAES,GAAG,UAAU;AAClB,WAAG,QAAQ;AAAA,UACP,QAAS,GAAG;AAAA,UACZ,OAAS;AAAA,QACb,CAAC;AAAA,MACL,WACS,GAAG,YAAY;AACpB,WAAG,QAAQ,GAAG,UAAU;AAAA,MAC5B;AAAA,IACJ;AACA;AAAA,EACJ;AAAA,EACA,YAAY,QAAQ;AAChB,QAAI,OAAO,UAAU;AACjB,WAAK,YAAY,gBAAgB,WAAW;AAAA,IAChD;AAAA,EACJ;AAAA,EACA,YAAY,OAAO;AACf,QAAI,MAAM,UAAU;AAChB,WAAK,eAAe,MAAM;AAC1B,WAAK,YAAY,aAAa,aAAa,MAAM,EAAE;AAAA,IACvD;AAAA,EACJ;AAAA,EACA,eAAe;AACX,UACI,KAAiC,MACjC,EAAE,SAAS,kBAAkB,IAAI,IACjC,aAAiC,CAAC,GAAG;AACzC,QAAI,GAAG,WAAW;AACd,UAAI,YAAY;AACZ,WAAG,UAAU,YAAY;AAEzB,YAAI,GAAG,mBAAmB,CAAC,GAAG,eAAe;AACzC,aAAG,wBAAwB,GAAG,sBAAsB,KAAK,EAAE;AAC3D,wBAAc,kBAAkB,QAAQ,eAAe,GAAG,qBAAqB;AAC/E,aAAG,YAAY;AAAA,QACnB;AAEA,YAAI,CAAC,GAAG,0BAA0B,GAAG,mBAAmB,GAAG,cAAc,GAAG,aAAa;AACrF,kBAAQ,aAAa,IAAI,QAAQ,0CAA0C,GAAG,QAAQ,UAAU;AAAA,QACpG;AAGA,YAAI,GAAG,uBAAuB,WAAW,gBAAgB;AAErD,aAAG,oBAAoB,IAAI,eAAe,MAAM;AAC5C,gBAAI,GAAG,sBAAsB,CAAC,QAAQ,aAAa;AAC/C,iBAAG,oBAAoB,KAAK;AAC5B,iBAAG,qBAAqB;AAAA,YAC5B,WACS,CAAC,GAAG,sBAAsB,QAAQ,aAAa;AACpD,iBAAG,oBAAoB,MAAM,GAAG,sBAAsB,IAAI;AAC1D,iBAAG,qBAAqB;AAAA,YAC5B;AAAA,UACJ,CAAC;AACD,aAAG,kBAAkB,QAAQ,OAAO;AAAA,QACxC;AAAA,MACJ;AAIA,SAAG,WAAW,oBAAoB,KAAK;AACvC,UAAI,YAAY;AAEZ,WAAG,UAAU,SAAS;AAEtB,YAAI,CAAC,QAAO,UAAU,QAAO,aAAa;AACtC,kBAAO,SAAS,IAAI,QAAO,YAAY;AAAA,YACnC,aAAc,GAAG;AAAA,UACrB,CAAC;AAAA,QACL;AAEA,YAAI,WAAW,eAAe,GAAG,YAAY,GAAG,QAAQ,OAAE;AAtzI1E,cAAAA;AAszI6E,kBAAAA,MAAA,EAAE,YAAF,gBAAAA,IAAW,QAAQ;AAAA,SAAwC,GAAG;AACvH,kBAAQ,UAAU,IAAI,mBAAmB;AAAA,QAC7C;AAAA,MACJ;AAeA,SAAG,YAAY;AAIf,oBAAc,GAAG,eAAe,OAAO;AACvC,SAAG,gBAAgB,EAAE,WAAW,CAAC;AACjC,SAAG,QAAQ,SAAS,EAAE,WAAW,CAAC;AAClC,UAAI,uDAAmB,MAAM;AACzB,mBAAW,EAAE,UAAU,SAAS,KAAK,KAAK,kBAAkB,OAAO,GAAG;AAClE,aAAG,SAAS,UAAU,SAAS,IAAI;AAAA,QACvC;AACA,0BAAkB,MAAM;AAAA,MAC5B;AACA,UAAI,YAAY;AAGZ,YAAI,GAAG,iBAAiB,CAAC,GAAG,iBAAiB;AACzC,wBAAc,gBAAgB,CAAC,EAAE,QAAS,QAAQ,CAAC,CAAC;AAAA,QACxD;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA,0BAA0B;AACtB,UACI,KAAgC,MAChC,EAAE,kBAAkB,QAAQ,IAAI;AACpC,QAAI,kBAAkB;AAClB,SAAG,cAAc;AAGjB,UAAI,QAAQ,UAAU,SAAS,UAAU,GAAG;AACxC,gBAAQ,UAAU,OAAO,UAAU;AACnC,WAAG,UAAU;AAAA,MACjB;AACA,uBAAiB,SAAS;AAC1B,uBAAiB,QAAQ;AACzB,cAAQ,MAAM,aAAa,QAAQ,MAAM,iBAAiB,SAAS,IAAI;AACvE,SAAG,mBAAmB;AACtB,SAAG,QAAQ,GAAG,iBAAiB,UAAU,SAAS,MAAM,cAAc;AAAA,IAC1E;AAAA,EACJ;AAAA,EACA,qBAAqB,kBAAkB;AAGnC,UAAM,KAAK;AAGX,QAAI,qBAAqB,GAAG,kBAAkB;AAE1C,SAAG,QAAQ,UAAU,OAAO,UAAU;AACtC,SAAG,wBAAwB;AAE3B,UAAI,GAAG,SAAS;AACZ,WAAG,mBAAmB;AAAA,MAC1B;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,oBAAoB;AAChB,SAAK,wBAAwB,KAAK,wBAAwB,KAAK;AAC/D,WAAO,eAAe,MAAM,aAAa,eAAe;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,iBAAiB,eAAe,MAAM;AAClC,QAAI,CAAC,EAAE,KAAK,sBAAsB;AAC9B,aAAO,KAAK;AACZ,UAAI,cAAc;AACd,aAAK,aAAa;AAAA,MACtB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAK,UAAU,MAAM;AACjB,WAAO,IAAI,QAAQ,aAAW;AAC1B,YACI,KAAgB,MAChB;AAAA,QACI;AAAA,QACA;AAAA,MACJ,IAAgB,IAChB,EAAE,MAAM,IAAQ,SAChB,gBAAgB,WAAW,GAAG;AAGlC,SAAG,aAAa,GAAG,qBAAqB;AACxC,SAAG,aAAa,GAAG,qBAAqB;AAQxC,UAAI,CAAC,GAAG,WAAW,GAAG,QAAQ,cAAc,EAAE,QAAQ,CAAC,MAAM,OAAO;AAChE,WAAG,UAAU;AAGb,YAAI,eAAe;AACf,wBAAc,kBAAkB;AAChC,cAAI,cAAc,qBAAqB;AACnC,eAAG,qBAAqB,YAAY;AACpC,eAAG,qBAAqB,UAAU,cAAc,MAAM;AAAA,UAC1D;AAAA,QACJ;AAEA,WAAG,eAAe;AAAA,UACd,MAAS;AAAA,UACT,OAAS;AAAA,UACT,KAAS;AAAA,UACT,QAAS,GAAG,MAAM,QAAQ;AAAA,QAC9B,CAAC;AACD,YAAI,CAAC,SAAS;AACV,kBAAQ;AACR;AAAA,QACJ;AACA,YAAI,QAAQ,SAAS,UAAU,iBAAiB,OAAO,CAAC,GAAG;AACvD,aAAG,YAAY,IAAI;AAAA,QACvB;AAGA,YAAI,GAAG,aAAa;AAChB,kBAAQ;AACR;AAAA,QACJ;AAEA,WAAG,wBAAwB;AAC3B,YAAI,eAAe;AACf,gBACI,YAAY,OAAO,KAAK,aAAa,EAAE,CAAC,GACxC,YAAY,cAAc,SAAS;AAEvC,cAAI,OAAO,iBAAiB,GAAG,OAAO,EAAE,SAAS,CAAC,MAAM,UAAU,IAAI;AAClE,kBAAM,mBAAmB,GAAG,mBAAmB;AAAA,cAC3C,QAAS;AAAA,cACT;AAAA,cACA;AAAA,YACJ;AAGA,oBAAQ,UAAU,IAAI,UAAU;AAChC,eAAG,cAAc;AAEjB,eAAG,iBAAiB,WAAW,YAAY,gBAAgB;AAAA,cACvD;AAAA,cACA,UAAW;AAAA,cACX,UAAW,cAAc,UAAU,QAAQ,IAAI;AAAA,cAC/C,SAAW,MAAM,GAAG,qBAAqB,gBAAgB;AAAA,cACzD,SAAW;AAAA,YACf,CAAC;AAGD,kBAAM,SAAS,IAAI,UAAU;AAC7B,sBAAU,cAAc,SAAS,SAAS;AAC1C,kBAAM,aAAa,GAAG,SAAS,IAAI,UAAU,QAAQ,SAAS,UAAU,KAAK;AAC7E,kBAAM,SAAS,IAAI,UAAU;AAAA,UACjC,OACK;AACD,oBAAQ,UAAU,IAAI,UAAU;AAAA,UACpC;AAAA,QACJ,OACK;AACD,kBAAQ,UAAU,IAAI,UAAU;AAAA,QACpC;AAEA,WAAG,UAAU,CAAC,iBAAiB,SAAS,aAAa;AAAA,MACzD;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,gBAAgB,EAAE,QAAQ,UAAU,GAAG;AACnC,UACI,KAAa,MACb;AAAA,MACI;AAAA,MACA;AAAA,IACJ,IAAa,IACb,aAAa,+CAAe,YAC5B,aAAa,+CAAe,QAC5B,WAAa,+CAAe,UAC5B,WAAa,UAAU,iBAAiB,EAAE;AAC9C;AAAA;AAAA,MAEI,CAAC;AAAA,MAED,CAAC,UAAU,OAAO;AAAA;AAAA,MAGlB;AAAA,OAEI,QAAQ,SAAS,MAAM,KACtB,OAAO,aAAa,QAAQ,gBAAgB,GAAG,KAAK,MAAM;AAAA;AAAA,MAIvD,OAAO,aAAa,QAAQ,iBAC5B,QAAQ,SAAS,QAAQ,KAAK,eAAe,QAAQ,KACrD,WAAW,cAAc,SAAS,KAAK;AAAA,MAGjD;AACE;AAAA,IACJ;AAGA,QAAI,cAAc,mBAAmB;AACjC,YAAM,YAAY,UAAU,SAAS,YAAY,OAAO,EAAE;AAE1D,UAAI,aAAa,UAAU,OAAO,cAAc,UAAU,GAAG;AACzD;AAAA,MACJ;AAAA,IACJ;AAGA,UAAM,KAAK,GAAG,iBAAiB,UAAU,GAAG,MAAM;AAElD,OAAG,QAAQ;AAEX,QAAI,CAAC,GAAG,eAAe,UAAU,OAAO,KAAK,GAAG,iBAAiB,QAAQ;AACrE,YACI,CAAC,MAAM,IAAI,IAAI,GAAG,MAAM,GACxB,QAAe,SAAS,GAAG,CAAC,KAAK,SAAS,GAAG,CAAC;AAKlD,WAAI,+CAAe,qBAAqB,UAAS,yCAAY,YAAW,WAAW,cAAc,CAAC,cAAc,CAAC,UAAU,UAAU,KAAK,UAAU,UAAU,aAAa,QAAQ,UAAU,IAAK;AAC9L,WAAG,KAAK;AAAA,MACZ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,UAAU,YAAY,MAAM,gBAAgB,KAAK,eAAe;AAjkJpE,QAAAA,KAAA;AAkkJQ,UAAM,KAAK;AAEX,OAAG,UAAU,GAAG;AAGhB,OAAG,yBAAyB;AAK5B,QAAI,CAAC,eAAe;AAChB,SAAG,mBAAmB;AAAA,IAC1B;AAMA,OAAG,QAAQ,MAAM;AAIjB,WAAAA,MAAA,GAAG,UAAH,gBAAAA,IAAU,gBAAV,wBAAAA,KAAwB;AACxB,iBAAa,UAAU;AAAA,EAC3B;AAAA,EACA,2BAA2B;AA3lJ/B,QAAAA,KAAA;AA4lJQ,UACI,KAAK,MACL;AAAA,MACI;AAAA,MACA;AAAA,IACJ,IAAK;AACT,OAAG,aAAa,GAAG,qBAAqB;AACxC,OAAG,aAAa,GAAG,qBAAqB;AAExC,QAAI,gBAAgB;AAChB,qBAAe,WAAW;AAC1B,aAAO,GAAG;AAAA,IACd;AACA,OAAG,0BAAyBA,MAAA,GAAG,2BAAH,gBAAAA,IAAA;AAC5B,OAAG,4BAA2B,QAAG,6BAAH;AAC9B,QAAI,GAAG,sBAAsB;AACzB,oBAAc,qBAAqB,cAAc,QAAQ,GAAG,cAAc;AAC1E,SAAG,uBAAuB;AAAA,IAC9B;AACA,QAAI,GAAG,oBAAoB;AACvB,YAAM,OAAK,mBAAc,gBAAd,mBAA2B,eAAc,aAAa,cAAc;AAC/E,oBAAc,qBAAqB,MAAM,YAAY,GAAG,uBAAuB;AAC/E,SAAG,qBAAqB;AAAA,IAC5B;AAAA,EACJ;AAAA,EACA,qBAAqB;AACjB,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAClB,QAAI,GAAG,YAAY,GAAG,UAAU,SAAS,OAAO,GAAG;AAC/C,cAAQ,OAAO;AAAA,IACnB,OACK;AACD,cAAQ,UAAU,IAAI,UAAU;AAAA,IACpC;AAEA,QAAI,GAAG,8BAA8B;AAEjC,SAAG,kBAAkB,aAAa,QAAQ,GAAG,4BAA4B;AAAA,IAC7E;AAAA,EACJ;AAAA,EACA,aAAa,OAAO;AAChB,UAAM,KAAK;AACX,QAAI;AACJ,QAAI,GAAG,eAAe;AAClB,YAAM,QAAQ,KAAK;AACnB,SAAG,QAAQ,UAAU,QAAQ,QAAQ,QAAQ,EAAE,UAAU;AAAA,IAC7D,OACK;AAGD,SAAG,QAAQ,sBAAsB,EAAE,QAAS,MAAM,CAAC;AACnD,UAAI,OAAO;AACP,WAAG,KAAK;AAAA,MACZ,OACK;AACD,WAAG,KAAK;AAAA,MACZ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,aAAa;AACb,WAAO,KAAK,iBAAiB,OAAO,KAAK;AAAA,EAC7C;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,EA2BA,IAAI,QAAQ;AACR,WAAO,KAAK,UAAU,KAAK,UAAU,KAAK;AAAA,EAC9C;AAAA,EACA,YAAY,OAAO;AAGf,QAAI,CAAC,KAAK,QAAQ;AACd,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EACA,YAAY,OAAO,eAAe;AAC9B,oDAAe,iBAAiB,OAAO,cAAc,aAAa,KAAK,EAAE;AACzE,eAAW,MAAM,iBAAiB,MAAM,eAAe,CAAC,IAAI,KAAK,EAAE,IAAI;AAAA,EAC3E;AAAA,EACA,IAAI,mBAAmB;AA3sJ3B,QAAAA,KAAA;AA4sJQ,QAAI,SAAS,KAAK;AAClB,QAAI,CAAC,QAAQ;AACT,YAAM,aAAWA,MAAA,KAAK,eAAL,gBAAAA,IAAiB,cAAa,QAAQ,eAAe,KAAK,cAAa,UAAK,YAAL,mBAAc;AACtG,gBAAU,qCAAU,QAAQ,iBAAgB,QAAO,YAAY,QAAQ;AAAA,IAC3E;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,kBAAkB;AAClB,WAAO,KAAK,WAAW,EAAE;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,cAAc;AACd,WAAO,KAAK,WAAW,CAAC;AAAA,EAC5B;AAAA,EACA,WAAW,WAAW;AAClB,UACI,KAAa,MACb,EAAE,OAAO,IAAI,IACb,WAAa,SAAS,OAAO,aAAa,MAAM,KAAK,GAAG,QAAQ,cAAc,iBAAiB,WAAW,CAAC;AAC/G,WAAO,SAAS,SAAS,SAAS,QAAQ,EAAE,IAAI,SAAS,IAAI,QAAO,YAAY,SAAS,SAAS,QAAQ,GAAG,OAAO,IAAI,SAAS,CAAC;AAAA,EACtI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,GAAG,UAAU,MAAM,OAAO;AA3vJ9B,QAAAA;AA4vJQ,UAAM,EAAE,MAAM,IAAI;AAClB,WAAO,YAAWA,MAAA,+BAAO,YAAP,gBAAAA,IAAA,YAAiB,UAAU,MAAM,SAAS;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,QAAQ,UAAU,MAAM,OAAO;AAC3B,UACI,YAAgB,OAAO,OACvB,eAAgB,cAAc,UAC9B,gBAAgB,cAAc;AAClC,aAAS,SAAS,MAAM,QAAQ,GAAG,QAAQ,SAAS,OAAO,OAAO,SAAS;AACvE,UAAI,QAAO,cAAc,QAAQ,UAAU,IAAI,GAAG;AAC9C,eAAO;AAAA,MACX;AACA,UAAI,gBAAgB,SAAS,OAAO;AAChC;AAAA,MACJ,WACS,iBAAkB,QAAO,cAAc,QAAQ,OAAO,IAAI,GAAI;AACnE;AAAA,MACJ,WACS,WAAW,OAAO;AACvB;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,KAAK,QAAQ;AACT,QAAI,QAAQ;AAER,UAAI,gBAAgB,QAAQ;AACxB,iBAAS,OAAO;AAAA,MACpB;AAEA,UAAI,OAAO,aAAa,QAAQ,cAAc;AAC1C,YAAI,KAAK,QAAQ,SAAS,MAAM,GAAG;AAC/B,iBAAO;AAAA,QACX;AACA,iBAAS,QAAO,YAAY,MAAM;AAAA,MACtC;AACA,aAAO,QAAQ;AACX,YAAI,WAAW,MAAM;AACjB,iBAAO;AAAA,QACX;AACA,iBAAS,OAAO;AAAA,MACpB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,aAAaQ,KAAI;AACb,QAAI,WAAW,KAAK;AACpB,WAAO,UAAU;AACb,UAAIA,IAAG,QAAQ,MAAM,OAAO;AACxB,eAAO;AAAA,MACX;AACA,iBAAW,SAAS;AAAA,IACxB;AACA,WAAO;AAAA,EACX;AAAA,EACA,uBAAuB,kBAAkB;AACrC,UAAM,KAAK;AACX,QAAI,GAAG,YAAY,cAAc,UAAU;AACvC,YAAM,EAAE,cAAc,IAAI;AAC1B,UAAI,kBAAkB;AAClB,WAAG,WAAW,GAAG,QAAQ;AACzB,WAAG,YAAY;AAAA,MACnB,OACK;AACD,WAAG,WAAW,cAAc;AAC5B,WAAG,QAAQ,cAAc;AACzB,WAAG,YAAY,cAAc;AAAA,MACjC;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,oBAAoB,eAAe,kBAAkB;AAEjD,UAAM,SAAS,KAAK,kBAAkB,QAAQ,QAAQ,aAAa;AAEnE,QAAI,WAAW,QAAQ,gBAAgB,GAAG;AACtC,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EACA,oBAAoB,eAAe;AAC/B,UAAM,KAAK;AACX,QAAI,CAACb,QAAO,IAAI,iBAAiB,GAAG;AAChC,SAAG,kBAAkB,GAAG,gBAAgB,KAAK,EAAE;AAAA,IACnD;AACA,kBAAc,gBAAgB,sBAAsB,sBAAsB,EAAE,GAAG,SAAS,GAAG,eAAe;AAAA,EAC9G;AAAA,EACA,eAAe,UAAU;AACrB,eAAW,QAAQ,QAAQ;AAE3B,QAAI,QAAQ,KAAK,SAAS,MAAM,UAAU;AACtC,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EACA,eAAe,UAAU;AAn3J7B,QAAAK;AAu3JQ,KAAAA,MAAA,KAAK,YAAL,gBAAAA,IAAc,UAAU,WAAW,QAAQ,UAAU;AAGrD,QAAI,CAAC,KAAK,eAAe;AAGrB,WAAK,WAAW,YAAU;AAEtB,YAAI,OAAO,sBAAsB;AAC7B;AAAA,QACJ;AACA,YAAI,EAAE,uBAAuB,SAAS;AAIlC,iBAAO,oBAAoB,OAAO,OAAO,YAAY;AAAA,QACzD;AAEA,eAAO,WAAW,YAAY,OAAO;AAAA,MACzC,GAAG,KAAK;AAMR,WAAK,QAAQ,YAAY,EAAE,SAAS,CAAC;AAAA,IACzC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,WAAWQ,KAAI,OAAO,MAAM;AACxB,UACI,UAAU,KAAK,YACf,UAAU,mCAAS,WAAU,GAC7B,UAAU,CAAC;AACf,aAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC7B,YAAM,SAAS,QAAQ,CAAC;AACxB,cAAQ,OAAO;AAEf,UAAIA,IAAG,QAAQ,OAAO,MAAM,OAAO;AAC/B,eAAO;AAAA,MACX;AACA,UAAI,QAAQ,QAAQ,OAAO,YAAY;AAEnC,YAAI,OAAO,WAAWA,KAAI,IAAI,MAAM,OAAO;AACvC,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,SAASC,SAAQ;AACb,UAAM,SAAS,CAAC;AAChB,SAAK,WAAW,OAAK;AACjB,UAAIA,QAAO,CAAC,GAAG;AACX,eAAO,KAAK,CAAC;AAAA,MACjB;AAAA,IACJ,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAMA,SAAQ;AACV,QAAI,SAAS;AACb,SAAK,WAAW,OAAK;AACjB,UAAIA,QAAO,CAAC,GAAG;AACX,iBAAS;AACT,eAAO;AAAA,MACX;AAAA,IACJ,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,eAAe,KAAK;AAn+JxB,QAAAT,KAAA;AAo+JQ,QAAI,eAAe,SAAQ;AACvB,aAAO;AAAA,IACX;AACA,aAAOA,MAAA,6BAAM,cAAN,gBAAAA,IAAkB,WAAQ,kCAAM,UAAN,mBAAa,eAAe;AAAA,EACjE;AAAA,EACA,UAAU,GAAG;AACT,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAalB,OAAG,gBAAgB;AACnB,OAAG,eAAe;AAElB,QAAI,GAAG,YAAY,GAAG,YAAY;AAC9B,SAAG,QAAQ;AAAA,IACf;AACA,YAAQ,UAAU,IAAI,kBAAkB;AACxC,OAAG,gBAAgB,GAAG,iBAAiB,WAAW,CAAC;AACnD,OAAG,sBAAsB,GAAG,iBAAiB,iBAAiB,CAAC;AAC/D,QAAI,QAAQ,SAAS,EAAE,OAAO,KAAK,GAAG,qBAAqB,CAAC,GAAG,wBAAwB;AACnF,SAAG,yBAAyB,YAAY,GAAG;AAAA,QACvC;AAAA,QACA,SAAU;AAAA,QACV,SAAU;AAAA,MACd,CAAC;AAAA,IACL;AAWA,OAAG,QAAQ,WAAW,CAAC;AAAA,EAC3B;AAAA,EACA,WAAW,GAAG;AACV,UAAM,KAAK;AACX,QAAI,GAAG,wBAAwB;AAC3B,SAAG,uBAAuB;AAC1B,SAAG,yBAAyB;AAAA,IAChC;AACA,QAAI,CAAC,GAAG,aAAa;AAEjB,UAAI,CAAC,EAAE,eAAe;AAClB,WAAG,YAAY,CAAC,GAAG,SAAS;AAAA,MAChC;AACA,SAAG,gBAAgB;AACnB,SAAG,QAAQ,UAAU,OAAO,kBAAkB;AAC9C,SAAG,gBAAgB,GAAG,iBAAiB,WAAW,CAAC;AACnD,SAAG,sBAAsB,GAAG,iBAAiB,iBAAiB,CAAC;AAa/D,SAAG,QAAQ,YAAY,CAAC;AAAA,IAC5B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,eAAe;AACX,UACI,KAAmB,MACnB,mBAAmB,UAAU,iBAAiB,EAAE,GAChD,UAAmB,GAAG,SAAS,gBAAgB,KAAK,GAAG,iBAAiB,gBAAgB;AAC5F,WAAO,CAAC,gBAAgB,UAAU;AAC9B,UAAI,WAAW,CAAC,GAAG,cAAc;AAC7B,cAAM,mBAAmB,UAAU,iBAAiB,EAAE;AACtD,YAAK,qBAAqB,oBAAqB,OAAO;AAClD,kBAAQ,cAAc;AAAA,QAC1B;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,iBAAiB,eAAe;AAC5B,WAAO,CAAC,iBAAiB,SAAS;AAC9B,UAAI,KAAK,SAAS,aAAa,GAAG;AAC9B,yBAAiB,cAAc,MAAM,IAAI,cAAc,MAAM,EAAE,eAAgB,KAAK,CAAC;AAAA,MACzF;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,SAAS,iBAAiB,QAAQ;AAC9B,UAAM,EAAE,QAAQ,IAAI;AACpB,QAAI,mBAAmB,SAAS;AAC5B,UAAI,gBAAgB,UAAU;AAC1B,0BAAkB,gBAAgB;AAAA,MACtC;AAEA,aAAO,QAAQ,SAAS,eAAe,MAAM,CAAC,UAAU,YAAY;AAAA,IACxE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,OAAO;AAxnKvB,QAAAA;AAynKQ,UACI,KAAgB,MAChB,gBAAgB,UAAU,iBAAiB,EAAE;AACjD,QAAI,UAASA,MAAA,GAAG,iBAAH,gBAAAA,IAAiB;AAC9B,QAAI,SAAU,GAAG,kBAAiB,iCAAQ,cAAa,QAAQ,gBAAgB,GAAG,QAAQ,SAAS,aAAa,GAAI;AAChH,UAAI,CAAC,UAAU,CAAC,UAAU,YAAY,MAAM,GAAG;AAC3C,iBAAS,GAAG,qBAAqB;AAAA,MACrC;AACA,SAAG,oBAAoB;AACvB,UAAI,UAAU,UAAU,YAAY,MAAM,GAAG;AACzC,eAAO,oBAAoB;AAC3B,eAAO,MAAM,EAAE,eAAgB,KAAK,CAAC;AACrC,eAAO,oBAAoB;AAAA,MAC/B,OACK;AAKD,uDAAe;AAAA,MACnB;AACA,SAAG,oBAAoB;AAAA,IAC3B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,uBAAuB;AAzpK3B,QAAAA;AA0pKQ,UACI,KAAkB,MAClB;AAAA,MACI;AAAA,MACA;AAAA,IACJ,IAAkB,IAClB,kBAAkB,eAAgB,aAAa,YAAY,IAAI,KAAM;AACzE,QAAI,SAAS,gBAAgB,aAAa;AAC1C,UAAM,cAAc,UAAU,QAAO,YAAY,MAAM;AAIvD,QAAI,SAAS,CAAC,MAAM,gBAAgB,CAAC,UAAU,CAAC,UAAU,YAAY,MAAM,KAAM,eAAe,CAAC,YAAY,cAAe;AACzH,eAAS;AAGT,UAAI,MAAM,YAAY;AAClB,cAAM,WAAW,CAAC;AAGlB,cAAM,WAAW,OAAK;AAClB,cAAI,MAAM,MAAM,EAAE,aAAa;AAC3B,qBAAS,KAAK,CAAC;AAAA,UACnB;AAAA,QACJ,GAAG,KAAK;AACR,YAAI,SAAS,SAAS,GAAG;AACrB,gBAAM,UAAU,SAAS,QAAQ,EAAE;AACnC,mBAAS,SAAS,UAAU,eAAe,KACvC,SAAS,UAAU,eAAe;AAAA,QAC1C;AAAA,MACJ;AAEA,UAAI,CAAC,UAAU,MAAM,aAAa;AAC9B,iBAAS;AAAA,MACb;AAGA,eAAS,SAAS,OAAO,gBAAeA,MAAA,MAAM,yBAAN,gBAAAA,IAAA;AAAA,IAC5C;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,uBAAuB,aAAa,QAAQ;AACxC,UACI,YAAY,IAAI,aAAa,GAC7B,YAAY,KAAK,MAAM;AAC3B,QAAI,KAAK,GAAG,MAAM,aAAa;AAC/B,SAAK,IAAI,UAAU,QAAQ,WAAW,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AAChE,YAAM,UAAU,CAAC;AACjB,4BAAsB,QAAQ,yBAAyB,IAAI,WAAW,aAAa;AAEnF,UAAI,2DAAqB,KAAK;AAC1B,sBAAc,oBAAoB,IAAI,KAAK,IAAI;AAAA,MACnD,OACK;AAID,eAAQL,QAAO,KAAK,QAAQ,KAAKA,QAAO,KAAK,OAAO,KAAKA,QAAO,KAAK,QAAQ,IAAK,IAAI,SAAS,IAAI;AAGnG,YAAI,KAAK,SAAS,KAAK,KAAK,SAAS,GAAG,GAAG;AAEvC,kBAAQ;AAAA,YACJ,UAAU,IAAI,gBAAgB,IAAI,KAAK;AAAA,UAAgE;AAAA,QAC/G;AACA,sBAAc,KAAK,KAAK,YAAY,CAAC;AAAA,MACzC;AACA,UAAI,aAAa;AACb,kBAAU,IAAI,SAAS,cAAc,SAAS,WAAW;AAAA,MAC7D;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,cAAc;AACd,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,kBAAkB;AAClB,UAAM,EAAE,OAAQ,KAAK,IAAI;AACzB,QAAI,YAAY,KAAK;AACrB,QAAI,CAAC,WAAW;AAEZ,WAAK,kBAAkB,YAAY,KAAK,uBAAuB,OAAM;AACrE,oBAAc,iBAAiB,UAAU,IAAI,SAAS;AAAA,IAC1D;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,IAAI,YAAY;AAEZ,SAAK,UAAU,IAAI;AACnB,WAAO,KAAK;AAAA,EAChB;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,EAgCA,IAAI,cAAc;AAEd,SAAK,UAAU,IAAI;AACnB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,IAAI,kBAAkB;AAClB,UACI,KAAiC,MACjC,EAAE,KAAK,YAAY,UAAU,IAAI;AACrC,QAAI,EAAE,gBAAgB,IAAI;AAC1B,QAAI,cAAc,KAAK;AAEnB,wBAAkB,gBAAgB,MAAM;AACxC,oBAAc,gBAAgB,OAAO,UAAU;AAC/C,aAAO,gBAAgB,OAAO,GAAG;AAAA,IACrC;AACA,UAAM,YAAY,gBAAgB;AAClC,iBAAa,UAAU,KAAK,GAAG,SAAS;AACxC,OAAG,YAAY,UAAU,KAAK,YAAY;AAC1C,QAAI,GAAG,eAAe,QAAQ;AAC1B,gBAAU,KAAK,mBAAmB;AAAA,IACtC;AACA,WAAO;AAAA,EACX;AAAA,EACA,UAAU,KAAK;AACX,WAAO,aAAa,KAAK,GAAG;AAAA,EAChC;AAAA,EACA,UAAU,KAAK,KAAK;AAChB,QAAI,CAAC,KAAK,iBAAiB,CAAC,KAAK,cAAc;AAC3C,YAAM,EAAE,QAAQ,IAAI;AACpB,UAAI,KAAK;AACL,qBAAa,cAAc,GAAG,EAAE,QAAQ,OAAK,QAAQ,UAAU,OAAO,CAAC,CAAC;AAAA,MAC5E;AACA,UAAI,SAAS,OAAO;AAAA,IACxB;AAAA,EACJ;AAAA,EACA,wBAAwB,KAAK;AACzB,WAAO,aAAa,KAAK,GAAG;AAAA,EAChC;AAAA,EACA,cAAc,KAAK;AACf,WAAO,aAAa,KAAK,GAAG;AAAA,EAChC;AAAA,EACA,iBAAiB,KAAK;AAClB,WAAO,aAAa;AAAA,MAAK;AAAA;AAAA,MAAsB;AAAA,IAAI;AAAA,EACvD;AAAA,EACA,SAAS,IAAI;AACT,WAAO,aAAa,KAAK,EAAE;AAAA,EAC/B;AAAA,EACA,SAAS,IAAI;AACT,QAAI,cAAc,MACd,KAAK;AACT,QAAI,IAAI;AACJ,YAAM,kBAAkB,KAAK,uBAAuB,KAAK,WAAW;AACpE,WAAK,UAAU,IAAI;AACf,YAAI,GAAG,MAAM,GAAG;AACZ,eAAK,OAAO,iBAAiB;AACzB,gBAAI,gBAAgB,GAAG,GAAG;AACtB,eAAC,gBAAgB,cAAc,IAAI,aAAa,IAAI,GAAG,GAAG,OAAO,MAAM,EAAE,IAAI;AAAA,YACjF;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AACA,SAAK,aAAa,2CAAa;AAC/B,SAAK,eAAe;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,UAAU,OAAO,WAAW,OAAO,UAAU,KAAK,SAAS;AAz4K/D,QAAAK;AA04KQ,QAAI,CAAC,SAAS;AACV,aAAO;AAAA,IACX;AACA,UAAM,KAAK;AACX,QAAI,GAACA,MAAA,GAAG,UAAH,gBAAAA,IAAW,SAAQ;AACpB,UAAI,CAAC,GAAG,OAAO;AACX,WAAG,QAAQ,CAAC;AAAA,MAChB;AACA,aAAO,GAAG,MAAM,KAAK,IAAI,WAAW,UAAU,SAAS,SAAS,KAAK,IAAI,QAAQ,cAAc,KAAK;AAAA,IACxG;AACA,WAAO,GAAG,MAAM,KAAK;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa;AACT,QAAI,KAAK,OAAO;AACZ,WAAK,QAAQ,CAAC;AAAA,IAClB;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,aAAa,MAAM,cAAc;AAl6KrC,QAAAA;AAm6KQ,UAAIA,MAAA,KAAK,WAAL,gBAAAA,IAAa,UAAS,SAAS;AAC/B;AAAA,IACJ;AACA,QAAI,SAAS,QAAQ,SAAS,IAAI;AAC9B,aAAO;AAAA,IACX;AACA,QAAI,gBAAgB,CAAC,aAAa,aAAa;AAC3C,UAAI,OAAO,SAAS,UAAU;AAC1B,qBAAa,OAAO;AACpB,eAAO;AAAA,MACX,WACS,MAAM;AACX,qBAAa,UAAU,IAAI;AAC3B,eAAO;AAAA,MACX,OACK;AACD,qBAAa,QAAQ;AAAA,MACzB;AAAA,IACJ,WACS,MAAM;AACX,YAAMU,QAAO,QAAO,YAAY,MAAM;AACtC,aAAOA,MAAK,aAAa,KAAK,cAAc,IAAI;AAChD,WAAK,QAAQ;AACb,aAAOA,MAAK,KAAK,IAAI;AAAA,IACzB;AACA,WAAO,QAAQ;AAAA,EACnB;AAAA,EACA,gBAAgB,MAAM;AAClB,QAAI,KAAK,eAAe,SAAS,KAAK,QAAQ;AAC1C,WAAK,SAAS;AAAA,IAClB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAK,KAAK;AACN,SAAK,SAAS;AACd,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS;AACL,SAAK,SAAS;AAAA,EAClB;AAAA;AAAA;AAAA,EAGA,iBAAiB,SAAS,OAAO,QAAQ,UAAU,WAAW;AAC1D,SAAK,SAAS,QAAQ;AACtB,SAAK,UAAU,QAAQ;AAAA,EAC3B;AAAA,EACA,gBAAgB,gBAAgB,UAAU;AAx9K9C,QAAAV;AAy9KQ,UACI,KAAc,MACd,EAAE,QAAQ,IAAI,IACd,YAAcA,MAAA,GAAG,WAAH,OAAAA,MAAa,GAAG,WAC9B,YAAc,GAAG,SACjB,WAAc,QAAQ,aACtB,YAAc,QAAQ;AAG1B,QAAI,GAAG,YAAY,UAAU;AACzB,SAAG,uBAAuB,GAAG,SAAS;AAAA,IAC1C;AACA,QAAI,CAAC,GAAG,yBAAyB,aAAa,YAAY,cAAc,YAAY;AAChF,SAAG,iBAAiB,SAAS,UAAU,WAAW,UAAU,SAAS;AAUrE,SAAG,QAAQ,UAAU,EAAE,OAAQ,UAAU,QAAS,WAAW,UAAU,UAAU,CAAC;AAAA,IACtF;AAAA,EACJ;AAAA,EACA,uBAAuB,gBAAgB,UAAU,QAAQ;AACrD,UACI,KAAK,MACL;AAAA,MACI;AAAA,MACA;AAAA,IACJ,IAAK;AAGT,QAAI,GAAG,aAAa,iBAAiB,cAAc,QAAQ;AACvD,YACI,eAAkB,CAAC,YAAY,OAAO,WAAW,SAAS,QAC1D,cAAkB,CAAC,YAAY,OAAO,UAAU,SAAS,OACzD,kBAAkB,eAAe,CAAC,UAAU,KAAK,WAAW,EAAE,SAAS,UAAU,KAAK,GAAG,SAAS,MAAM,IAAI,CAAC;AAIjH,UAAK,gBAAgB,cAAc,SAAS,KAAO,eAAe,cAAc,SAAS,KAAM,iBAAiB;AAI5G,WAAG,sBAAsB,MAAM,GAAG,QAAQ,CAAC;AAAA,MAC/C;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,cAAc;AACV,UAAM,KAAgB,MAClB,UAAgB,GAAG,SACnB,gBAAgB,QAAQ;AAG5B,QAAI,CAAC,GAAG,iBAAiB;AACrB,SAAG,kBAAkB,GAAG;AAAA,IAC5B;AAIA,YAAQ,MAAM,UAAU;AACxB,UACI,OAAgB,UAAU,OAAO,aAAa,GAC9C,QAAgB,KAAK,QAAQ,GAAG,iBAChC,gBAAgB,GAAG,QAAQ,GAAG,iBAAiB,KAAK,IAAI,OAAO,CAAC,IAAI;AACxE,YAAQ,MAAM,YAAY,SAAS,aAAa;AAChD,YAAQ,MAAM,kBAAkB;AAChC,YAAQ,MAAM,UAAU;AACxB,QAAI,GAAG,kBAAkB,QAAQ,GAAG;AAEhC,SAAG,QAAQ,GAAG,kBAAkB;AAAA,IACpC;AAAA,EACJ;AAAA,EACA,sBAAsB,OAAO;AACzB,SAAK,YAAY;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,UAAU,QAAQ,QAAQ,MAAM;AAC5B,aAAS,UAAU;AACnB,QAAI,OAAO,WAAW,UAAU;AAC5B,aAAO,CAAC,GAAG,MAAM,GAAG,KAAK,IAAI,GAAG,MAAM,GAAG,KAAK,IAAI,GAAG,MAAM,GAAG,KAAK,IAAI,GAAG,MAAM,GAAG,KAAK,EAAE;AAAA,IAC9F;AACA,UACI,QAAQ,OAAO,MAAM,GAAG,GACxB,MAAQ,MAAM;AAClB,QAAI,QAAQ,GAAG;AACX,YAAM,CAAC,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC;AAAA,IAC5C,WACS,QAAQ,GAAG;AAChB,YAAM,CAAC,IAAI,MAAM,CAAC;AAClB,YAAM,CAAC,IAAI,MAAM,CAAC;AAAA,IACtB,WACS,QAAQ,GAAG;AAChB,YAAM,CAAC,IAAI,MAAM,CAAC;AAAA,IACtB;AACA,WAAO;AAAA,MACH,SAAS,MAAM,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK,KAAK,MAAM,CAAC;AAAA,MACpD,SAAS,MAAM,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK,KAAK,MAAM,CAAC;AAAA,MACpD,SAAS,MAAM,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK,KAAK,MAAM,CAAC;AAAA,MACpD,SAAS,MAAM,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK,KAAK,MAAM,CAAC;AAAA,IACxD;AAAA,EACJ;AAAA;AAAA,EAEA,IAAI,eAAe;AA1kLvB,QAAAA;AA2kLQ,aAAOA,MAAA,KAAK,UAAL,gBAAAA,IAAY,iBAAgB,KAAK,QAAQ,YAAY;AAAA,EAChE;AAAA;AAAA,EAEA,IAAI,YAAY;AA9kLpB,QAAAA,KAAA;AA+kLQ,aAAOA,MAAA,KAAK,YAAL,gBAAAA,IAAc,eAAc,UAAU,eAAe,KAAK,OAAO,MAAK,UAAK,UAAL,mBAAY,cAAa,KAAK;AAAA,EAC/G;AAAA;AAAA,EAEA,IAAI,cAAc;AAllLtB,QAAAA,KAAA;AAmlLQ,UAAM,KAAK;AACX,QAAI,CAAC,GAAG,cAAc;AAGlB,UAAI,SAAOA,MAAA,GAAG,UAAH,gBAAAA,IAAU,gBAAe,UAAU,eAAe,GAAG,iBAAe,QAAG,YAAH,mBAAY,eAAc,GAAG,UAAU,GAAG,iBAAiB,EAAE,CAAC,KAAK,GAAG,QAAQ;AAC7J,UAAI,CAAC,MAAM;AACP,eAAO,SAAS;AAAA,MACpB;AACA,SAAG,eAAe;AAAA,IACtB;AACA,WAAO,GAAG;AAAA,EACd;AAAA,EACA,IAAI,YAAY;AA/lLpB,QAAAA;AAgmLQ,UACI,KAAkB,MAClB,EAAE,YAAY,IAAI;AACtB,QAAI,EAAE,UAAU,IAAI;AACpB,QAAI,CAAC,WAAW;AACZ,YACI,EAAE,SAAS,IAAI,SACf,aAAeA,MAAA,UAAU,aAAa,MAAM,WAAW,MAAxC,gBAAAA,IAA2C;AAC9D,UAAI,CAAC,UAAU,uBAAuB,WAAW,GAAG;AAChD,cAAM,IAAI,MAAM,oCAAoC;AAAA,MACxD;AAGA,UAAI,WAAW;AACX,iBAAS,KAAK,WAAW,UAAU,YAAY,CAAC,EAAE;AAAA,MACtD;AACA,kBAAY,YAAY,YAAY,UAAU,cAAc;AAAA,QACxD,WAAY,gBAAgB,SAAS,KAAK,GAAG,CAAC;AAAA,QAC9C,QAAY;AAAA,MAChB,CAAC;AACD,iBAAW,KAAK,SAAS;AAEzB,UAAI,cAAc,WAAW;AACzB,kBAAU,MAAM,SAAS,GAAG,OAAO,MAAM;AACzC,oBAAY,GAAG;AAAA,UACX,SAAoB;AAAA,UACpB,mBAAoB,MAAM,UAAU,MAAM,SAAS,GAAG,OAAO,MAAM;AAAA,UACnE,SAAoB;AAAA,QACxB,CAAC;AAAA,MACL;AAEA,2BAAa,IAAI;AAAA,QACb,OAAQ,CAAC,EAAE,OAAO,KAAK,MAAM;AACzB,oBAAU,UAAU,IAAI,WAAW,MAAM,YAAY,CAAC,EAAE;AACxD,oBAAU,UAAU,OAAO,WAAW,KAAK,YAAY,CAAC,EAAE;AAAA,QAC9D;AAAA,MACJ,CAAC;AAAA,IACL,WAES,CAAC,YAAY,SAAS,SAAS,GAAG;AAEvC,kBAAY,YAAY,SAAS;AAAA,IACrC;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,qBAAqB;AACrB,QAAI,MAAM;AACV,UAAM,KAAK,KAAK,UAAU,QAAQ,EAAE,QAAQ,WAAS;AACjD,YAAM,SAAS,SAAS,iBAAiB,KAAK,EAAE,UAAU,GAAG,EAAE;AAC/D,UAAI,SAAS,KAAK;AACd,cAAM;AAAA,MACV;AAAA,IACJ,CAAC;AACD,WAAO;AAAA,EACX;AAAA,EACA,OAAO,uBAAuB;AAC1B,eAAW,QAAQ,eAAa,UAAU,YAAY,UAAU,aAAa,CAAC;AAAA,EAClF;AAAA,EACA,WAAW,aAAa;AACpB,WAAO;AAAA,EACX;AAAA,EACA,OAAO,gBAAgB,WAAW;AAC9B,eAAW,OAAO,WAAW,QAAQ,SAAS,GAAG,CAAC;AAAA,EACtD;AAAA;AAAA,EAEA,WAAW,WAAW;AAClB,UACI,SAAe,CAAC,SAAS,GACzB,EAAE,SAAS,IAAI;AACnB,QAAI,UAAU;AACV,aAAO,KAAK,KAAK,QAAQ,EAAE;AAAA,IAC/B;AACA,QAAI,cAAc,eAAe;AAC7B,aAAO,KAAK,gBAAgB;AAAA,IAChC;AACA,QAAI,cAAc,UAAU;AACxB,aAAO,KAAK,UAAU;AAAA,IAC1B;AACA,QAAI,UAAU,gBAAgB;AAC1B,aAAO,KAAK,qBAAqB;AAAA,IACrC,OACK;AACD,aAAO,KAAK,qBAAqB;AAAA,IACrC;AACA,QAAI,cAAc,UAAU;AACxB,aAAO,KAAK,UAAU;AAAA,IAC1B,WACS,cAAc,UAAU;AAC7B,aAAO,KAAK,UAAU;AAAA,IAC1B,WACS,cAAc,WAAW;AAC9B,aAAO,KAAK,WAAW;AAAA,IAC3B;AAEA,QAAI,cAAc,SAAS;AACvB,aAAO,KAAK,SAAS;AAAA,IACzB;AAGA,QAAI,CAAC,WAAW,gBAAgB;AAC5B,aAAO,KAAK,qBAAqB;AAAA,IACrC;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,cAAc;AACd,WAAO,KAAK,sBAAsB;AAAA,EACtC;AAAA,EACA,IAAI,YAAY,OAAO;AACnB,UACI,KAA0B,MAC1B,EAAE,oBAAoB,IAAI;AAE9B,OAAG,sBAAsB,KAAK,IAAI,GAAG,uBAAuB,QAAQ,IAAI,GAAG;AAC3E,QAAI,wBAAwB,KAAK,OAAO;AACpC,SAAG,QAAQ,UAAU,IAAI,aAAa;AACtC,SAAG,QAAQ,gBAAgB;AAAA,IAC/B,WACS,wBAAwB,KAAK,CAAC,OAAO;AAC1C,SAAG,QAAQ,UAAU,OAAO,aAAa;AACzC,SAAG,QAAQ,cAAc;AAAA,IAC7B;AAAA,EACJ;AAAA;AAAA,EAEA,MAAM,oBAAoB;AACtB,QAAI,KAAK,aAAa;AAClB,YAAM,KAAK,MAAM,gBAAgB,EAAE,UAAW,MAAM,CAAC;AAAA,IACzD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,0BAA0B,SAASQ,KAAI;AACzC,UAAM,SAAS,QAAQ,cAAc,EAAE,SAAU,KAAK,CAAC;AACvD,UAAMA,IAAG;AACT,UACI,QAAc,QAAQ,cAAc,EAAE,SAAU,KAAK,CAAC,GACtD,EAAE,QAAQ,IAAI,YAAY,MAAM,QAAQ,KAAK;AACjD,QAAI,QAAQ,QAAQ;AAChB,YAAM,QAAQ,WAAW,QAAQ,IAAI,eAAa,UAAU,QAAQ,CAAC;AAAA,IACzE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,OAAO,MAAM,UAAU,OAAO,OAAO;AACjC,UAAM,EAAE,MAAM,IAAI,QAAO;AACzB,eAAW,MAAM,OAAO;AACpB,UAAI,QAAO,cAAc,MAAM,EAAE,GAAG,UAAU,IAAI,GAAG;AACjD,eAAO,MAAM,EAAE;AAAA,MACnB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,OAAO,SAAS,UAAU,OAAO,OAAO;AACpC,UACI,EAAE,MAAM,IAAI,QAAO,cACnB,SAAY,CAAC;AACjB,eAAW,MAAM,OAAO;AACpB,UAAI,QAAO,cAAc,MAAM,EAAE,GAAG,UAAU,IAAI,GAAG;AACjD,eAAO,KAAK,MAAM,EAAE,CAAC;AAAA,MACzB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,YAAY,SAAS,MAAM,OAAO;AACrC,UAAM,aAAa,OAAO;AAE1B,QAAI,WAAW,CAAC,QAAQ,UAAU;AAC9B,gBAAU,QAAQ;AAAA,IACtB;AACA,QAAI,eAAe,YAAY,QAAQ,KAAK,aAAa,QAAQ,cAAc;AAC3E,cAAQ;AACR,aAAO;AAAA,IACX;AACA,QAAI,SAAS,SACT,QAAS,GACT,SAAS,OAAO;AACpB,QAAI,OAAO,UAAU,UAAU;AAC3B,gBAAU;AACV,cAAQ,OAAO;AAAA,IACnB;AACA,QAAI,eAAe,UAAU;AACzB,aAAO,KAAK,YAAY;AAAA,IAC5B;AACA,WAAO,UAAU,OAAO,aAAa,QAAQ,gBAAgB,QAAQ,SAAS,WAAW,SAAS;AAC9F,cAAS,OAAO,WAAW,OAAO,QAAQ,YAAa,OAAO;AAC9D,UAAI,OAAO;AACP,cAAM,QAAO,QAAQ,KAAK;AAC1B,YAAI,KAAK;AACL,cAAI,MAAM;AACN,gBAAI,eAAe,YAAY;AAC3B,kBAAI,KAAK,GAAG,GAAG;AACX,uBAAO;AAAA,cACX;AAAA,YACJ,WACS,QAAO,cAAc,KAAK,MAAM,IAAI,GAAG;AAC5C,qBAAO;AAAA,YACX;AAAA,UACJ,OACK;AACD,mBAAO;AAAA,UACX;AAAA,QACJ;AAEA;AAAA,MACJ;AACA,eAAS,UAAU,MAAM;AAAA,IAC7B;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,OAAO,aAAa,UAAU;AAC1B,UAAM,UAAU,SAAS,cAAc,QAAQ;AAC/C,WAAO,UAAU,QAAO,YAAY,OAAO,IAAI;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,mBAAmB,QAAQ,UAAU,MAAM;AA/2L/C,QAAAR;AAg3LQ,QAAI,SAAS;AACT,WAAK,QAAQ,UAAU,MAAM;AAAA,IACjC,OACK;AACD,aAAO,SAAS;AAAA,IACpB;AACA,KAAAA,MAAA,KAAK,iBAAL,gBAAAA,IAAA,WAAoB,cAAY;AAt3LxC,UAAAA,KAAA;AAu3LY,OAAAA,MAAA,SAAS,kBAAT,gBAAAA,IAAA,eAAyB;AAEzB,WAAI,cAAS,uBAAT,kCAA8B,OAAO;AACrC,eAAO;AAAA,MACX;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,mBAAmB,OAAO;AACtB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA,EAEA,sBAAsB;AAElB,yBAAa,wBAAwB,KAAK,WAAW,WAAW;AAAA,EACpE;AAAA,EACA,OAAO,cAAc,WAAW,UAAU,MAAM;AAC5C,QAAI,aAAa,KAAK;AAClB,aAAO;AAAA,IACX;AACA,QAAI,OAAO,aAAa,YAAY;AAChC,aAAO,SAAS,SAAS;AAAA,IAC7B;AACA,WAAO,QAAO,OAAO,WAAW,UAAU,IAAI;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAO,cAAc,SAAS,cAAc;AACxC,QAAI,OAAO,iBAAiB;AAAU,qBAAe,EAAE,MAAO,aAAa;AAC3E,YAAO,OAAO,OAAO,OAAO;AAAA,MACxB,YAAa;AAAA,IACjB,GAAG,YAAY,GAAG,SAAS;AAC3B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW,MAAM;AACb,QAAI,SAAS,SAAS;AAClB,aAAO;AAAA,IACX;AACA,QAAI,SAAS,OAAO;AAChB,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA,EACA,UAAU,KAAK;AACX,UAAM,UAAU,GAAG;AAEnB,SAAK,WAAW,UAAQ;AACpB,UAAI,EAAE,SAAS,KAAK,gBAAgB;AAChC,aAAK,MAAM;AAAA,MACf;AAAA,IACJ,CAAC;AAAA,EACL;AAAA;AAEJ;AACA,IAAME,SAAQ,OAAO;AACrB,CAAC,WAAW,iBAAiB,EAAE,QAAQ,CAAAM,QAAMN,OAAMM,GAAE,EAAE,UAAU,IAAI;AAErE,OAAO,UAAU;AACjB,OAAO,SAAS,QAAQ,IAAI;AAG5B,UAAU,SAAS;AACnB,qBAAa,SAAS;AAEtB,KAAK,aAAa,QAAQ,OAAO,aAAa;AAE9C,OAAO,OAAQ,WAAW,YAAY,WAAW,UAAU,CAAC,IAAK;AAAA,EAC7D,KAAe,OAAO,QAAQ,KAAK,MAAM;AAAA,EACzC,OAAe,OAAO;AAAA,EACtB,UAAe,OAAO;AAAA,EACtB,aAAe,OAAO;AAAA,EACtB,cAAe,OAAO;AAC1B,CAAC;AACD,OAAO,SAAS;;;AC/7LhB,IAAqB,SAArB,cAAoC,KAAK,MAAM,gBAAQ,mBAAW,EAAE;AAAA,EA6BhE,IAAI,iBAAiB;AAlDzB,QAAAG;AAmDQ,YAAOA,MAAA,KAAK,UAAL,gBAAAA,IAAY;AAAA,EACvB;AAAA,EACA,WAAW,MAAM;AAAA,EAAC;AAAA,EAClB,cAAc,MAAM;AAAA,EAAC;AAAA,EACrB,iBAAiB;AACb,UACI,KAA4B,MAC5B,EAAE,OAAO,QAAQ,IAAW,IAC5B,EAAE,gBAAgB,OAAAC,OAAM,IAAI,OAC5B,eAA4B,MAAM,SAClC,YAA4BA,UAAA,gBAAAA,OAAO;AAEvC,QAAI,WAAW;AACX,YAAM,cAAc;AACpB,eAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAChC,cACI,OAAOA,OAAM,CAAC,GACd,EAAE,QAAQ,IAAI,MACd,EAAE,UAAU,IAAI;AACpB,gBAAQ,QAAQ,YAAY;AAG5B,YAAI,UAAU,SAAS,SAAS,GAAG;AAC/B,oBAAU,OAAO,GAAG,OAAO,QAAQ;AAAA,QACvC;AACA,YAAI,SAAS;AACT,oBAAU,IAAI,OAAO;AAAA,QACzB;AACA,YAAI,cAAc;AACd,oBAAU,IAAI,YAAY;AAAA,QAC9B;AAGA,aAAK,OAAO,gBAAgB,QAAQ,MAAM,SAAS,CAAC;AAAA,MACxD;AAAA,IACJ;AACA,OAAG,mBAAmB;AACtB,OAAG,eAAe;AAAA,EACtB;AAAA,EACA,YAAY,OAAO;AACf,UACI,KAAqB,MACrB,EAAE,QAAQ,IAAW,OACrB,EAAE,OAAO,QAAQ,IAAI,IACrB,EAAE,eAAe,IAAI,OACrB,eAAqB,MAAM;AAG/B,QAAI,eAAe,SAAS,OAAO,GAAG;AAClC,cAAQ,OAAO;AAAA,IACnB;AACA,WAAO,QAAQ,QAAQ;AACvB,QAAI,SAAS;AACT,cAAQ,UAAU,OAAO,OAAO;AAAA,IACpC;AACA,QAAI,cAAc;AACd,cAAQ,UAAU,OAAO,YAAY;AAAA,IACzC;AACA,OAAG,gBAAgB;AACnB,OAAG,eAAe;AAAA,EACtB;AAAA,EACA,YAAY,OAAO;AACf,UACI,EAAE,QAAQ,IAAW,OACrB,EAAE,OAAO,QAAQ,IAAI,MACrB,EAAE,eAAe,IAAI,OACrB,eAAqB,MAAM;AAC/B,YAAQ,QAAQ,YAAY,MAAM,aAAa,KAAK;AACpD,UAAM,cAAc;AACpB,QAAI,SAAS;AACT,cAAQ,UAAU,IAAI,OAAO;AAAA,IACjC;AACA,QAAI,cAAc;AACd,cAAQ,UAAU,IAAI,YAAY;AAAA,IACtC;AACA,UAAM,OAAO,gBAAgB,QAAQ,MAAM,SAAS,CAAC;AACrD,SAAK,eAAe;AAAA,EACxB;AAAA,EACA,YAAY,OAAO,YAAY;AAC3B,UACI,KAAqB,MACrB,EAAE,QAAQ,IAAW,OACrB,EAAE,OAAO,QAAQ,IAAI,IACrB,EAAE,eAAe,IAAI,OACrB,cAAqB,UAAU,SAAS,gBAAgB,qBAAqB,UAAU,IAAI,GAC3F,eAAqB,MAAM;AAC/B,UAAM,cAAc;AACpB,QAAI,SAAS;AACT,cAAQ,UAAU,IAAI,OAAO;AAAA,IACjC;AACA,QAAI,cAAc;AACd,cAAQ,UAAU,IAAI,YAAY;AAAA,IACtC;AACA,mBAAe,aAAa,SAAS,WAAW;AAChD,UAAM,OAAO,MAAM,QAAQ,MAAM,SAAS,CAAC;AAC3C,OAAG,gBAAgB;AACnB,OAAG,eAAe;AAAA,EACtB;AAAA,EACA,kBAAkB;AACd,SAAK,MAAM,MAAM,QAAQ,CAAC,OAAO,UAAU;AACvC,YAAM,QAAQ,QAAQ,YAAY;AAAA,IACtC,CAAC;AAAA,EACL;AAAA,EACA,iBAAiB;AA1JrB,QAAAD;AA2JQ,UACI,EAAE,MAAM,IAAK,MACb,EAAE,OAAO,IAAI,MAAM;AAEvB,KAAAA,MAAA,MAAM,mBAAN,gBAAAA,IAAsB,UAAU,WAAW,IAAI,QAAQ,UAAU;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAgB,QAAQ;AACpB,UAAM,iBAAiB,KAAK,mBAAmB,KAAK,iBAAiB,CAAC;AACtE,QAAI,CAAC,eAAe,SAAS,MAAM,GAAG;AAClC,qBAAe,KAAK,MAAM;AAAA,IAC9B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,gBAAgB,EAAE,MAAM,OAAO,SAAS,KAAAE,KAAI,GAAG;AAC3C,UACI,KAAK,MACL,UAAU,SAAS,IAAI,KACvB,EAAE,eAAe,IAAI,IACrB,MAAM,GAAG,IAAI;AACjB,QAAI,SAAQA,QAAA,gBAAAA,KAAM,SAAQ;AAC1B,QAAI,gBAAgB;AAChB,UAAI,SAAS;AACT,cAAM,EAAE,UAAU,IAAI;AACtB,gBAAQ,QAAQ,OAAK;AACjB,cAAI,MAAM,OAAO;AACb,sBAAU,OAAO,UAAU,CAAC;AAAA,UAChC;AAAA,QACJ,CAAC;AACD,YAAI,QAAQ,SAAS,KAAK,GAAG;AACzB,oBAAU,IAAI,UAAU,KAAK;AAC7B,kBAAQ;AAAA,QACZ;AAAA,MACJ;AACA,qBAAe,MAAM,KAAK,IAAI;AAAA,IAClC,OACK;AACD,SAAG,gBAAgB,IAAI;AAAA,IAC3B;AAAA,EACJ;AAAA,EACA,qBAAqB;AACjB,UACI,KAAK,MACL,EAAE,eAAe,IAAI;AACzB,QAAI;AACJ,QAAI,gBAAgB;AAChB,SAAG,iBAAiB;AACpB,aAAQ,OAAwB,eAAe,IAAI,GAAI;AACnD,WAAG,GAAG,MAAM,QAAQ,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;AAAA,MAC/C;AAAA,IACJ;AAAA,EACJ;AACJ;AAtMI,cADiB,QACV,QAAO;AACd,cAFiB,QAEV,gBAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUlB,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMR,cAAe;AAAA;AAAA;AAAA;AAAA;AAAA,EAKf,SAAU;AACd;AAAA;AAEA,cA1BiB,QA0BV,eAAc;AAAA,EACjB,aAAc;AAClB;AA4KJ,OAAO,UAAU;AACjB,OAAO,SAAS;;;ACxNhB,IAAI,gBAAgB;AACpB,IAAM,YAAY,OAAK,EAAE;AACzB,IAAqB,SAArB,cAAoC,OAAO;AAAA,EAGvC,WAAW,gBAAgB;AACvB,WAAO;AAAA,MACH,aAAc;AAAA,QACV,UAAW,CAAC;AAAA,UACR,WAAY;AAAA,UACZ,WAAY;AAAA,QAChB,CAAC;AAAA,MACL;AAAA,MACA,SAAU;AAAA,QACN,UAAW,CAAC;AAAA,UACR,KAAY;AAAA,UACZ,OAAY;AAAA,UACZ,WAAY;AAAA,UACZ,IAAY;AAAA,UACZ,SAAY;AAAA,UACZ,SAAY;AAAA,UACZ,UAAY,CAAC;AAAA,YACT,WAAY;AAAA,YACZ,KAAY;AAAA,YACZ,IAAY;AAAA,YACZ,IAAY;AAAA,YACZ,GAAY;AAAA,UAChB,CAAC;AAAA,QACL,CAAC;AAAA,MACL;AAAA,MACA,UAAgB;AAAA,MAChB,eAAgB;AAAA,MAChB,eAAgB;AAAA,MAChB,cAAgB;AAAA,MAChB,OAAgB;AAAA,MAChB,aAAgB;AAAA,MAChB,QAAgB;AAAA,IACpB;AAAA,EACJ;AAAA,EACA,iBAAiB;AACb,UAAM,eAAe;AACrB,gBAAY,GAAG;AAAA,MACX,SAAY,KAAK;AAAA,MACjB,WAAY;AAAA,MACZ,SAAY;AAAA,MACZ,SAAY;AAAA,MACZ,MAAY;AAAA,IAChB,CAAC;AAAA,EACL;AAAA,EACA,yBAAyB,OAAO;AAvDpC,QAAAC;AAwDQ,UAAM,KAAK;AACX,OAAG,KAAK;AACR,UAAM,kBAAkB,UAAU,cAAc,GAAG,eAAe,eAAe;AACjF,OAAG,KAAK;AACR,KAAAA,MAAA,GAAG,qBAAH,gBAAAA,IAAA;AAEA,QAAI,mBAAmB,oBAAoB,QAAQ;AAC/C,SAAG,mBAAmB,YAAY,GAAG;AAAA;AAAA,QAEjC,WAAY;AAAA,UACR,SAAU,GAAG;AAAA,UACb,SAAU;AAAA,UACV,SAAU;AAAA,QACd;AAAA,QACA,YAAa;AAAA,UACT,SAAU,GAAG;AAAA,UACb,SAAU;AAAA,UACV,SAAU;AAAA,QACd;AAAA;AAAA,QAEA,cAAe;AAAA,UACX,SAAU,GAAG;AAAA,UACb,SAAU;AAAA,QACd;AAAA,QACA,SAAU;AAAA,MACd,CAAC;AAED,UAAI,MAAM,SAAS,aAAa;AAC5B,WAAG,YAAY,KAAK;AACpB,6BAAa,IAAI;AAAA,UACb,OAAU;AAAA,UACV,SAAU;AAAA,QACd,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,aAAa,OAAO;AAChB,oBAAgB,YAAY,IAAI;AAChC,SAAK,mBAAmB,KAAK;AAAA,EACjC;AAAA,EACA,YAAY,OAAO;AAGf,QAAI,YAAY,IAAI,IAAI,gBAAgB,KAAK;AACzC,WAAK,mBAAmB,KAAK;AAAA,IACjC;AAAA,EACJ;AAAA,EACA,mBAAmB,OAAO;AACtB,UAAM,eAAe,OAAO,YAAY,MAAM,QAAQ,SAAS;AAC/D,QAAI,cAAc;AACd,YACI,YAAY,aAAa,QACzB,SAAY,UAAU,WAChB,MAAM,OAAO,QAAQ,UAAU,QAAQ,IACtC,aAAa,gBAAgB,aAAa;AACrD,UAAI,QAAQ;AACR,cAAM,SAAS,aAAa,OAAO;AAAA,UAC/B;AAAA,UACA;AAAA,UACA,QAAS,KAAK;AAAA,QAClB,GAAG,SAAS;AAEZ,YAAI,OAAO,OAAO,SAAS,UAAU;AACjC,iBAAO,OAAO,aAAa,OAAO,IAAI,KAAK,MAAM,OAAO,QAAQ,OAAO,IAAI;AAE3E,cAAI,CAAC,OAAO,MAAM;AACd;AAAA,UACJ;AAAA,QACJ;AACA,aAAK,OAAO,MAAM;AAAA,MACtB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,OAAO;AAAA,IACH;AAAA,IACA,QAAQ,YAAY,eAAe,KAAK;AAAA,IACxC,SAAS,MAAM;AAAA,IACf,OAAO;AAAA,IACP,SAAS,KAAK;AAAA,IACd,QAAQ,KAAK;AAAA,EACjB,GAAG;AACC,SAAK,OAAO;AACZ,WAAO,UAAU,KAAK,MAAM,MAAM,IAAI;AACtC,UACI,KAAgB,MAChB,cAAgB,KAAK,SAAS,KAAK,GACnC,cAAgB,GAAG,cAAc,OACjC,gBAAgB,GAAG,eACnB,eAAgB,UAAU,cAAc,QAAQ,eAAe;AACnE,OAAG,KAAK;AACR,gBAAY,YAAe,cAAc,YAAY,CAAC,CAAC,kBAAkB,YAAY,CAAC,CAAC;AACvF,gBAAY,SAAe,YAAY,QAAQ,GAAG,MAAM;AACxD,OAAG,QAAQ,MAAM,eAAe;AAChC,kBAAc,aAAa,KAAK,MAAM;AACtC,kBAAc,aAAa,QAAQ,KAAK;AAExC,OAAG,OAAO;AAAA,MACN,QAAY;AAAA,MACZ,OAAY;AAAA,MACZ,WAAY;AAAA,IAChB,CAAC;AAAA,EACL;AAAA;AAAA,EAEA,eAAe,OAAO;AAClB,QAAI,MAAM,kBAAkB,mBAAmB;AAC3C,WAAK,KAAK;AAAA,IACd;AAAA,EACJ;AACJ;AA3JI,cADiB,QACV,SAAQ;AACf,cAFiB,QAEV,QAAO;AA2JlB,OAAO,cAAc;AACrB,OAAO,SAAS;;;AC1JhB,IACIC,eAAe,OAAO,OAAO,CAAC,CAAC;AADnC,IAEI,EAAE,SAAAC,SAAQ,IAAK;AAFnB,IAGI,eAAe,OAAK,EAAE;AAH1B,IAKI,eAAe,CAAC,EAAE,QAAS,EAAE,GAAG,EAAE,QAAS,EAAE,MAAM;AAC/C,MAAI,OAAO,MAAM,YAAY,OAAO,MAAM,UAAU;AAChD,WAAO,OAAO,CAAC,EAAE,cAAc,OAAO,CAAC,CAAC;AAAA,EAC5C;AAEA,UAAQ,gBAAK,OAAO,qBAAqB,gBAAK,OAAO;AACzD;AAXJ,IAYI,cAAgB,OAAK,KAAK,CAAC,EAAE;AAZjC,IAaI,gBAAgB,CAAC,WAAW,gBAAgB;AAbhD,IAcI,aAAgB;AAAA,EACZ,SAAU;AAAA,EACV,KAAU;AACd;AA6CJ,IAAqB,YAArB,cAAuC,OAAO;AAAA,EAG1C,WAAW,eAAe;AACtB,WAAO;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,MAqEH,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUR,WAAY;AAAA,QACR,SAAU,CAAC,MAAM;AAAA,QACjB,OAAU;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,UAAW;AAAA,MACX,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAiBd,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMd,SAAU;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,MA6CV,QAAS;AAAA,QACL,MAAO;AAAA,MACX;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,MAiCA,YAAa;AAAA,QACT,SAAU;AAAA,QACV,OAAU;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAaA,cAAe;AAAA,QACX,OAAU;AAAA,QACV,SAAU;AAAA,QACV,SAAU;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcd,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAST,qBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMtB,kBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMnB,kBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWnB,eAAgB;AAAA,MAChB,2BAA4B;AAAA,QACxB,SAAU,CAAC,QAAQ,SAAS;AAAA,QAC5B,OAAU;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,eAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhB,iBAAkB;AAAA;AAAA,MAElB,qBAAsB;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,MA6CtB,cAAe;AAAA,IACnB;AAAA,EACJ;AAAA,EACA,WAAW,sBAAsB;AAC7B,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMH,YAAa;AAAA,MACb,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQb,cAAe;AAAA,IACnB;AAAA,EACJ;AAAA,EACA,eAAe,QAAQ;AAInB,UAAMC,SAAQ,OAAO,SAAS,OAAO;AACrC,QAAI,EAAE,KAAK,WAAW,QAAQA,WAAUD,SAAQC,MAAK,IAAIA,SAAQ,OAAO,KAAKA,MAAK,GAAG,MAAM,IAAI;AAC3F,WAAK,eAAe;AAAA,IACxB;AACA,UAAM,eAAe,MAAM;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,YAAY;AACZ,WAAO,KAAK,MAAM,CAAC;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,WAAW;AACX,WAAO,KAAK,MAAM,EAAE;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAAO;AACT,WAAO,KAAK,YAAY,EAAE,GAAG,KAAK;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,UAAU;AAChB,QAAI,cAAc;AAClB,QAAI,SAAS,WAAW,GAAG;AACvB,UAAID,SAAQ,SAAS,CAAC,CAAC,GAAG;AACtB,mBAAW,SAAS,CAAC;AAAA,MACzB,OACK;AACD,sBAAc;AAAA,MAClB;AAAA,IACJ;AACA,UACI,KAAa,MACb,EAAE,OAAO,IAAI,IACb,SAAa,CAAC;AAClB,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACtC,YAAM,gBAAgB,SAAS,CAAC;AAChC,UAAI,OAAO,SAAS,aAAa,GAAG;AAChC,eAAO,OAAO,aAAa;AAC3B,WAAG,OAAO,YAAY,aAAa;AACnC,eAAO,KAAK,aAAa;AACzB,WAAG,cAAc,aAAa;AAAA,MAClC;AAAA,IACJ;AACA,WAAO,cAAc,SAAS,OAAO,CAAC;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY;AACR,WAAO,KAAK,OAAO,KAAK,KAAK;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,OAAO;AACV,UACI,KAAS,MACTC,SAAQ,GAAG,YAAY,GACvB,SAAS,CAAC;AACd,QAAI,cAAc,MACd,YAAY,GAAG;AACnB,QAAI,MAAM,WAAW,GAAG;AACpB,UAAID,SAAQ,MAAM,CAAC,CAAC,GAAG;AACnB,gBAAQ,MAAM,CAAC;AAAA,MACnB,OACK;AACD,sBAAc;AAAA,MAClB;AAAA,IACJ;AACA,SAAK,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAC/B,mBAAa,MAAM,CAAC;AACpB,UAAI,WAAW,UAAU;AACrB,mBAAW,SAAS;AAAA,MACxB,OACK;AACD,qBAAa,GAAG,aAAa,UAAU;AAAA,MAC3C;AAEA,WAAI,yCAAY,WAAU,MAAM;AAE5B,gBAAQ,YAAY,mBAAmB,YAAYC,OAAM,QAAQ,YAAY;AAC7E,eAAO,KAAK,GAAG,OAAO,YAAY,KAAK,CAAC;AAAA,MAC5C,WAES,YAAY;AACjB,YAAI,CAACA,OAAM,SAAS,UAAU,GAAG;AAC7B,UAAAA,OAAM,IAAI,UAAU;AACpB,aAAG,WAAW,UAAU;AACxB,aAAG,OAAO,YAAY,UAAU;AAChC,iBAAO,KAAK,UAAU;AAAA,QAC1B;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,cAAc,SAAS,OAAO,CAAC;AAAA,EAC1C;AAAA,EACA,cAAc;AACV,UAAM,KAAK;AACX,OAAG,UAAU,OAAO;AACpB,OAAG,UAAU,WAAW;AAExB,QAAI,CAAC,GAAG,QAAQ;AACZ,SAAG,QAAQ,CAAC;AAAA,IAChB;AACA,WAAO,GAAG;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,OAAO,OAAO;AACjB,UACI,KAAQ,MACRA,SAAQ,GAAG,YAAY;AAC3B,QAAI,iBAAiB,QAAQ;AACzB,YAAM,SAAS;AAAA,IACnB,OACK;AACD,cAAQ,GAAG,aAAa,KAAK;AAAA,IACjC;AACA,QAAIA,OAAM,SAAS,KAAK,GAAG;AACvB,cAAQ,GAAG,aAAa,KAAK;AAAA,IACjC;AACA,YAAQ,KAAK,IAAI,OAAOA,OAAM,KAAK;AACnC,UAAM,YAAYA,OAAM;AACxB,cAAU,OAAO,OAAO,GAAG,KAAK;AAChC,IAAAA,OAAM,SAAS;AAEf,OAAG,WAAW,KAAK;AACnB,OAAG,OAAO,YAAY,OAAO,KAAK;AAClC,WAAO;AAAA,EACX;AAAA,EACA,aAAa,OAAO;AAChB,WAAO,KAAK,MAAM,QAAQ,KAAK;AAAA,EACnC;AAAA,EACA,gBAAgB,WAAW;AACvB,SAAK,QAAQ;AACb,SAAK,OAAO,eAAe;AAAA,EAC/B;AAAA,EACA,YAAYA,QAAO,UAAU;AACzB,UACI,KAAW,MACX,WAAW,CAAC,GACZ,SAAW,IAAI,IAAI;AACvB,QAAID,SAAQC,MAAK,GAAG;AAChB,SAAG,kBAAkBA,QAAO,QAAQ;AAAA,IACxC,WACSA,QAAO;AACZ,SAAG,mBAAmBA,QAAO,GAAG,YAAY,QAAQ;AAAA,IACxD;AAEA,QAAI,SAAS,KAAK,YAAY,GAAG;AAC7B,eAAS,KAAK,YAAY;AAAA,IAC9B;AACA,WAAO,IAAI,QAAQ;AAEnB,QAAI,UAAU;AACV,eAAS,QAAQ,OAAK;AAClB,WAAG,OAAO,CAAC;AAEX,YAAI,CAAC,OAAO,SAAS,CAAC,KAAK,EAAE,eAAe,IAAI;AAC5C,YAAE,QAAQ;AAAA,QACd;AAAA,MACJ,CAAC;AAAA,IACL;AACA,WAAO;AAAA,EACX;AAAA,EACA,iBAAiB;AACb,UACI,EAAE,IAAI,IAAU,MAChB,EAAE,UAAU,IAAI,KAAK;AAGzB,cAAU,OAAO,SAAS,QAAQ,IAAI;AACtC,cAAU,OAAO,SAAS,QAAQ,KAAK;AAAA,EAC3C;AAAA,EACA,UAAU,KAAK;AACX,UAAM,UAAU,GAAG;AACnB,UAAM,EAAE,eAAe,IAAI;AAE3B,QAAI,gBAAgB;AAGhB,qBAAe,UAAU,OAAO,SAAS,QAAQ,IAAI;AACrD,qBAAe,UAAU,OAAO,SAAS,QAAQ,KAAK;AAAA,IAC1D;AAAA,EACJ;AAAA,EACA,YAAYA,QAAO,UAAU;AACzB,QAAI,QAAQ;AACZ,IAAAA,OAAM,QAAQ,UAAQ;AAClB,WAAK,WAAW,IAAI;AAGpB,UAAI,YAAY,CAAC,SAAS,WAAW;AACjC,aAAK,OAAO,YAAY,MAAM,KAAK;AAAA,MACvC;AACA,QAAE;AAAA,IACN,CAAC;AACD,SAAK,eAAe;AAAA,EACxB;AAAA,EACA,sBAAsB;AAClB,SAAK,eAAe,KAAK,QAAQ;AAAA,EACrC;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,EA6CA,IAAI,QAAQ;AACR,UAAM,KAAK;AAEX,OAAG,UAAU,WAAW;AAGxB,QAAI,CAAC,GAAG,QAAQ;AAEZ,UAAI,GAAG,mBAAmB;AAEtB,eAAO,CAAC;AAAA,MACZ;AAEA,SAAG,SAAS,IAAI,IAAI;AACpB,SAAG,OAAO,YAAY;AAAA,IAC1B;AAEA,WAAO,GAAG,OAAO;AAAA,EACrB;AAAA,EACA,kBAAkBA,QAAO,QAAQ;AAC7B,UAAM,MAAMA,OAAM;AAClB,QAAI,GAAG;AACP,SAAK,IAAI,GAAG,IAAI,KAAK,KAAK;AACtB,aAAOA,OAAM,CAAC;AACd,UAAI,gBAAgB,QAAQ;AACxB,aAAK,SAAS;AACd,aAAK,QAAQ,UAAU,OAAO,GAAG,OAAO,QAAQ;AAAA,MACpD,OACK;AACD,eAAO,KAAK,aAAa,IAAI;AAAA,MACjC;AAEA,UAAI,MAAM;AACN,YAAI,KAAK,OAAO,KAAK,IAAI;AAErB,eAAK,cAAc,IAAI;AAAA,QAC3B;AACA,eAAO,KAAK,IAAI;AAAA,MACpB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,mBAAmBA,QAAO,YAAY,SAAS,CAAC,GAAG;AAC/C,QAAI,MAAM;AACV,SAAK,OAAOA,QAAO;AACf,aAAOA,OAAM,GAAG;AAEhB,UAAI,MAAM;AAGN,YAAI,cAAc,OAAO,YAAY;AACjC,iBAAO,OAAO,SAAS,WAAW,aAAa,MAAM,aAAa,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,IAAI,WAAW,GAAG;AAAA,QACpH;AAEA,YAAI,MAAM;AACN,cAAI,gBAAgB,QAAQ;AACxB,iBAAK,SAAS;AAAA,UAClB,OACK;AACD,gBAAI,gBAAgB,QAAQ;AACxB,mBAAK,MAAM;AAAA,YACf;AACA,mBAAO,KAAK,aAAa,IAAI;AAAA,UACjC;AAEA,cAAI,MAAM;AACN,iBAAK,MAAM;AAEX,iBAAK,cAAc,IAAI;AACvB,mBAAO,KAAK,IAAI;AAAA,UACpB;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,WAAW,MAAM;AAGb,QAAI,KAAK,aAAa,KAAK,YAAY,CAAC,KAAK,sBAAsB;AAC/D,WAAK,WAAW;AAAA,IACpB;AACA,SAAK,iBAAiB,IAAI;AAC1B,QAAI,KAAK,OAAO,KAAK,IAAI;AACrB,eAAS,UAAU,MAAM,SAAS,UAAU,QAAQ,QAAQ;AAGxD,gBAAQ,cAAc,IAAI;AAAA,MAC9B;AAAA,IACJ;AACA,SAAK,eAAe,IAAI;AAAA,EAC5B;AAAA,EACA,iBAAiB,MAAM;AAEnB,QAAI,KAAK,WAAW;AAEhB,WAAK,OAAO,WAAW,IAAI;AAAA,IAC/B;AAAA,EACJ;AAAA,EACA,YAAY,QAAQ;AAxyBxB,QAAAC;AAyyBQ,UAAM,YAAY,MAAM;AAExB,SAAIA,MAAA,KAAK,WAAL,gBAAAA,IAAa,SAAS,SAAS;AAC/B,WAAK,eAAe,IAAI;AAAA,IAC5B;AAAA,EACJ;AAAA,EACA,YAAY,OAAO;AA/yBvB,QAAAA;AAgzBQ,UAAM,YAAY,KAAK;AAEvB,SAAIA,MAAA,KAAK,WAAL,gBAAAA,IAAa,SAAS,QAAQ;AAC9B,WAAK,eAAe,IAAI;AAAA,IAC5B;AAAA,EACJ;AAAA,EACA,eAAe,sBAAsB;AAMjC,QAAI,CAAC,KAAK,eAAe;AACrB,YACI,KAA6B,MAC7B;AAAA;AAAA;AAAA,QAGI,OAAAD;AAAA,QACA;AAAA,MACJ,IAA6B,IAC7B,eAA6BA,OAAM,OAAO,WAAW,GACrD,EAAE,QAAS,cAAc,IAAI;AAMjC,SAAG,oBAAoB;AAIvB,UAAI,GAAG,iBAAiB,sBAAsB;AAC1C,cAAM,aAAa,QAAQ,CAAC,aAAa;AACzC,YAAI,QAAQ,GAAG,OAAO,MAAM,YAAY;AACpC,aAAG,SAAS;AAAA,QAChB;AAAA,MACJ;AACA,MAAAA,OAAM,QAAQ,eAAa,UAAU,QAAQ,UAAU,OAAO,wBAAwB,uBAAuB,CAAC;AAC9G,UAAI,eAAe;AACf,qBAAa,CAAC,EAAE,QAAQ,UAAU,IAAI,uBAAuB;AAC7D,qBAAa,gBAAgB,CAAC,EAAE,QAAQ,UAAU,IAAI,sBAAsB;AAAA,MAChF;AAIA,SAAG,WAAW,QAAQ,GAAG,WAAW,MAAM;AAC1C,SAAG,eAAe,UAAU,gBAAgB,WAAW,KAAK,EAAE,uBAAuB;AAErF,UAAI,CAAC,GAAG,cAAc;AAClB,WAAG,kBAAkB,GAAG,YAAY;AAAA,MACxC,WACS,aAAa,GAAG,UAAU;AAC/B,WAAG,UAAU;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,oBAAoB;AAChB,UACI,KAAY,MACZ,EAAE,gBAAgB,YAAY,WAAW,IAAI,IAC7C,YAAY,IAAI,aAAa,eAAe,SAAS,GACrD,SAAY,UAAU,cAAc,gBAAgB,aAAa;AAErE,cAAU,UAAU,IAAI,UAAU,UAAU,IAAI;AAEhD,QAAI,OAAO,YAAY,QAAQ;AAC3B,gBAAU,OAAO,gBAAgB,MAAM,QAAQ,aAAa,UAAU,IAAI;AAAA,IAC9E;AAGA,cAAU,cAAc,gBAAgB,SAAS;AAAA,EACrD;AAAA,EACA,cAAc,MAAM;AAChB,UACI,MAAY,KAAK,OAAO,KAAK,IAC7B,YAAY,KAAK,eAAe,KAAK,aAAa,CAAC;AACvD,QAAI,CAAC,UAAU,GAAG,GAAG;AACjB,gBAAU,GAAG,IAAI;AAAA,IACrB;AAAA,EACJ;AAAA,EACA,cAAc,MAAM;AAChB,UACI,KAAM,MACN,MAAM,KAAK,OAAO,KAAK;AAC3B,QAAI,KAAK;AACL,eAAS,UAAU,IAAI,SAAS,UAAU,QAAQ,QAAQ;AACtD,YAAI,QAAQ,UAAU,GAAG,MAAM,MAAM;AACjC,iBAAO,QAAQ,UAAU,GAAG;AAAA,QAChC;AAAA,MACJ;AAAA,IACJ;AAEA,OAAG,OAAO,cAAc,IAAI;AAC5B,OAAG,eAAe,IAAI;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,YAAY;AACZ,QAAI,CAAC,KAAK,YAAY;AAClB,WAAK,aAAa,CAAC;AAAA,IACvB;AAIA,QAAI,CAAC,KAAK,mBAAmB;AACzB,WAAK,UAAU,OAAO;AAAA,IAC1B;AACA,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA,EAEA,aAAa,QAAQ;AAGjB,SAAK,UAAU,UAAU,OAAOF,eAAc;AAC9C,WAAO;AAAA,EACX;AAAA,EACA,aAAa,QAAQ;AA16BzB,QAAAG;AA26BQ,UAAM,KAAK;AACX,KAAAA,MAAA,GAAG,yBAAH,gBAAAA,IAAA;AAQA,OAAG,QAAQ,mBAAmB,EAAE,OAAO,CAAC;AACxC,OAAG,UAAU,QAAQ;AAAA,MACjB,UAAY,GAAG;AAAA,MACf,WAAY,QAAQ,GAAG,UAAU;AAAA,IACrC,CAAC;AACD,QAAI,GAAG,qBAAoB,iCAAQ,aAAY;AAC3C,SAAG,uBAAuB,OAAO,WAAW,IAAI;AAAA,QAC5C,QAAU,GAAG;AAAA,QACb,SAAU;AAAA,MACd,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EACA,UAAU,QAAQ,kBAAkB;AAChC,SAAK,aAAa;AAClB,SAAK,SAAa;AAClB,SAAK,aAAa;AAAA,EACtB;AAAA,EACA,gBAAgB,EAAE,OAAO,GAAG;AACxB,QAAI,WAAW,KAAK,QAAQ;AACxB,WAAK,UAAU,KAAK,QAAQ,MAAM,IAAI;AAAA,IAC1C;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,EAAE,QAAQ,WAAW,GAAG;AAGlC,QAAI,KAAK,oBAAoB,YAAY;AACrC,YACI,EAAE,QAAQ,oBAAoB,IAAS,MACvC,EAAE,MAAM,KAAK,UAAU,MAAM,MAAM,IAAI,QACvC,MAAuC,sBAAsB,OAAO,QAAQ;AAChF,UAAI,UAAU,OAAO,SAAS;AAC1B,YAAI,OAAO,SAAS;AAChB,iBAAO,SAAS,KAAK,KAAK;AAAA,QAC9B,OACK;AACD,iBAAO,GAAG,IAAI;AAAA,QAClB;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,UAAU,UAAU;AAChB,UAAM,SAAS,CAAC;AAChB,SAAK,WAAW,CAAC,QAAQ,YAAY;AAEjC,UAAI,OAAO,eAAe;AACtB,gBAAQ,OAAO;AAAA,MACnB,WACU,UAAU,WAAY,CAAC,YAAY,SAAS,MAAM,IAAI;AAC5D,eAAO,OAAO,IAAI,IAAI,OAAO;AAAA,MACjC;AAAA,IACJ,GAAG,IAAI;AACP,WAAO;AAAA,EACX;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,EA0CA,IAAI,SAAS;AACT,UAAM,SAAS,CAAC;AAChB,SAAK,YAAY,MAAM;AACvB,WAAO;AAAA,EACX;AAAA,EACA,IAAI,OAAO,QAAQ;AAEf,SAAK,YAAY,MAAM;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,kBAAkB;AAClB,WAAO,QAAQ,KAAK,eAAe;AAAA,EACvC;AAAA,EACA,IAAI,kBAAkB;AA1iC1B,QAAAA;AA4iCQ,WAAO,KAAK,sBAAoBA,MAAA,KAAK,WAAL,gBAAAA,IAAa;AAAA,EACjD;AAAA,EACA,IAAI,gBAAgB,GAAG;AACnB,SAAK,mBAAmB;AAAA,EAC5B;AAAA,EACA,YAAY,QAAQ,SAAS;AAEzB,UAAM,YAAY,QAAQ,OAAO;AACjC,QAAI,CAAC,KAAK,eAAe;AACrB,WAAK,UAAU,QAAQ,OAAO;AAAA,IAClC;AAAA,EACJ;AAAA,EACA,YAAY,QAAQ;AAChB,UAAM,YAAY,MAAM;AACxB,QAAI,CAAC,KAAK,eAAe;AACrB,WAAK,aAAa,MAAM;AAAA,IAC5B;AAAA,EACJ;AAAA,EACA,UAAU,QAAQ,UAAU,KAAK,qBAAqB;AAElD,SAAK,kBAAkB;AACvB,SAAK,WAAW,YAAU,OAAO,YAAY,QAAQ,OAAO,GAAG,KAAK;AACpE,SAAK,kBAAkB;AAAA,EAC3B;AAAA;AAAA,EAEA,IAAI,gBAAgB;AAKhB,UACI,KAAuB,MACvB,EAAE,OAAAD,QAAO,UAAU,IAAI,GAAG,eAC1B,aAAuBA,WAAUD,SAAQC,MAAK,IAAIA,SAAQ,aAAa,OAAOA,MAAK,IACnF,iBAAuB,cAAcD,SAAQ,SAAS,IAAI,YAAY,aAAa,OAAO,SAAS,IAEnG,aAAuB,GAAG,gBAAgB,kBAAkB,aAAa,GAAG;AAChF,WAAO,EAAC,yCAAY,OAAO,aAAa;AAAA,EAC5C;AAAA,EACA,iBAAiB;AACb,UAAM,eAAe;AACrB,SAAK,QAAQ;AAAA,EACjB;AAAA,EACA,kBAAkB,aAAa;AAC3B,UAAM,KAAK;AAEX,QAAI,CAAC,GAAG,cAAc;AAClB,YACI,aAAgB,QAAQ,eAAe,GAAG,aAAa,GACvD,EAAE,UAAU,IAAI,GAAG,gBACnB,UAAgB,eAAe,UAAU,SAAS,gBAAgB;AAGtE,UAAI,SAAS;AACT,kBAAU,aAAa,QAAQ,QAAQ,EAAE,gBAAgB;AACzD,YAAI,GAAG,UAAU;AACb,aAAG,QAAQ;AAAA,QACf;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,kBAAkB,aAAa;AAC3B,cAAU,WAAW,KAAK,gBAAgB,WAAW;AAAA,EACzD;AAAA,EACA,cAAc,SAAS;AACnB,UAAM,cAAc,GAAG,SAAS;AAChC,QAAI,SAAS;AACT,YACI,EAAE,UAAU,IAAO,KAAK,gBACxB,EAAE,aAAa,IAAI,KAAK;AAE5B,gBAAU,IAAI,mBAAmB;AACjC,UAAI,cAAc;AACd,kBAAU,IAAI,YAAY;AAAA,MAC9B;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,kBAAkB;AAznCtB,QAAAE;AA0nCQ,KAAAA,MAAA,MAAM,oBAAN,gBAAAA,IAAA,WAAwB,GAAG;AAE3B,SAAK,UAAU,2BAA2B;AAAA,EAC9C;AAAA,EACA,gCAAgC,2BAA2B,8BAA8B;AACrF,QAAI,8BAA8B;AAE9B,mCAA6B,YAAY;AACzC,mCAA6B,WAAW;AAAA,IAC5C;AAIA,QAAI,2BAA2B;AAE3B,YACI,KAAK,MACL;AAAA,QACI;AAAA,QACA;AAAA,MACJ,IAAK;AACT,kCAA4B,IAAI,iBAAiB,eAAa,GAAG,oBAAoB,SAAS,CAAC;AAC/F,gCAA0B,QAAQ,gBAAgB,EAAE,YAAa,KAAK,CAAC;AAIvE,UAAI,mBAAmB,SAAS;AAC5B,kCAA0B,QAAQ,SAAS,EAAE,YAAa,KAAK,CAAC;AAAA,MACpE;AACA,SAAG,kBAAkB;AAAA,IACzB;AACA,WAAO;AAAA,EACX;AAAA,EACA,oBAAoB,WAAW;AAI3B,QAAI,WAAW,KAAK,OAAO,IAAI,KAAK,KAAK,aAAa,UAAU,KAAK,OAAK,KAAK,eAAe,SAAS,EAAE,MAAM,CAAC,GAAG;AAC/G,WAAK,kBAAkB;AAAA,IAC3B;AAAA,EACJ;AAAA,EACA,aAAa,QAAQ,gBAAgB;AACjC,WAAO,OAAO,YAAY,gBAAgB,QAAQ;AAAA,MAC9C,OAAW;AAAA,MACX,UAAW;AAAA,QACP,OAAQ;AAAA,MACZ;AAAA,IACJ,CAAC;AAAA,EACL;AAAA;AAAA,EAEA,IAAI,aAAa;AACb,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc,IAAI;AACd,WAAO,KAAK,UAAU,EAAE;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAoB,QAAQ;AAAA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ7B,kBAAkB,cAAc,MAAM;AAClC,UAAM,KAAK;AAEX,QAAI,OAAO,iBAAiB,UAAU;AAClC,qBAAe;AAAA,QACX,MAAO;AAAA,MACX;AAAA,IACJ,WAES,aAAa,aAAa,QAAQ,cAAc;AACrD,qBAAe;AAAA,QACX,SAAU;AAAA,QACV,IAAU,aAAa;AAAA,MAC3B;AAAA,IACJ;AACA,QAAI,OAAO,SAAS,YAAY,CAAC,SAAS,OAAuB,aAAa,OAAO;AAEjF,UAAI,SAAS,cAAc,cAAc,YAAY,OAAO,YAAY,eAAe,IAAI,GAAG;AAC1F,eAAO,aAAa,OAAO;AAAA,MAC/B;AACA,aAAO,OAAO,YAAY,MAAM,IAAI;AAAA,IACxC;AAEA,oBAAgB,QAAQ,QAAQ,aAAa,GAAG,UAAU,cAAc,EAAE,QAAS,GAAG,CAAC;AACvF,aAAS,WAAW,aAAa,QAAQ,UAAU,WAAW,SAAS,QAAQ;AAC3E,UAAI,SAAS,oBAAoB,YAAY,MAAM,OAAO;AACtD,eAAO;AAAA,MACX;AAAA,IACJ;AACA,QAAI,GAAG,QAAQ,sBAAsB,EAAE,aAAa,CAAC,MAAM,OAAO;AAC9D,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,QAAQ;AACjB,UAAM,SAAS,OAAO,OAAO,KAAK,kBAAkB,MAAM,GAAG,KAAK,WAAW;AAG7E,eAAW,OAAO,aAAa;AAC/B,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,eAAe,UAAU,aAAa;AAClC,QAAI,CAAC,KAAK,iBAAiB,UAAU;AACjC,YAAM,UAAU,OAAO,QAAQ,QAAQ;AACvC,WAAK,WAAW,YAAU;AACtB,gBAAQ,QAAQ,CAAC,CAAC,MAAM,KAAK,MAAM;AAE/B,cAAI,CAAC,eAAe,OAAO,IAAI,MAAM,YAAY,IAAI,GAAG;AACpD,mBAAO,IAAI,IAAI;AAAA,UACnB;AAAA,QACJ,CAAC;AAAA,MACL,GAAG,KAAK;AAAA,IACZ;AAAA,EACJ;AAAA,EACA,SAAS;AAEL,SAAK,UAAU,WAAW;AAC1B,SAAK,OAAO,eAAe;AAM3B,SAAK,eAAe;AACpB,UAAM,OAAO,GAAG,SAAS;AAAA,EAC7B;AAAA,EACA,IAAI,eAAe;AAEf,UAAM,iBAAiB,KAAK,MAAM,KAAK,iBAAiB,OAAE;AA/wClE,UAAAA;AA+wCqE,eAAE,eAAe,EAAE,QAAQ,WAAW,GAACA,MAAA,EAAE,QAAF,gBAAAA,IAAO,SAAS;AAAA,MAAY;AAChI,QAAI,gBAAgB;AAChB,aAAO,eAAe;AAAA,IAC1B;AACA,WAAO,MAAM;AAAA,EACjB;AAAA,EACA,YAAY;AArxChB,QAAAA;AAsxCQ,KAAAA,MAAA,KAAK,WAAL,gBAAAA,IAAa,QAAQ,YAAO;AAtxCpC,UAAAA;AAsxCuC,cAAAA,MAAA,OAAO,YAAP,gBAAAA,IAAA;AAAA;AAC/B,SAAK,OAAO,QAAQ;AACpB,UAAM,UAAU;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,UAAU;AACV,QAAI,QAAQ;AACZ,SAAK,WAAW,YAAU;AAGtB,UAAI,OAAO,aAAa,aAAa,UAAU,CAAC,OAAO,SAAS;AAC5D,gBAAQ;AAAA,MACZ;AAAA,IACJ,GAAG,IAAI;AACP,WAAO;AAAA,EACX;AACJ;AA9tCI,cADiB,WACV,SAAQ;AACf,cAFiB,WAEV,QAAO;AA+tClB,UAAU,UAAU;AACpB,UAAU,SAAS;;;ACpyCnB,IACI,EAAE,OAAO,IAAI;AADjB,IAEI,MAAM,MAAM,YAAY,IAAI;AAFhC,IAGI,UAAU,EAAE,OAAQ,MAAM;AAH9B,IAII,SAAS;AAJb,IAKI,iBAAiB,aAAW;AACxB,QAAM,WAAW,QAAQ,aAAa,QAAQ,WAAW,CAAC;AAC1D,SAAO,SAAS,gBAAgB,SAAS,cAAc,uBAAO,OAAO,IAAI;AAC7E;AARJ,IASI,eAAe,CAAC,UAAU,SAAS;AAjBvC,MAAAC;AAkBQ,MAAI,OAAO,aAAa,UAAU;AAC9B,YAAOA,MAAA,OAAO,KAAK,QAAQ,MAApB,gBAAAA,IAAwB;AAC/B,eAAW,WAAW,QAAQ;AAAA,EAClC;AAEA,SAAO,YAAa,YAAa,SAAS,OAAO,CAAC,QAAQ,WAAW,KAAM,MAAO;AACtF;AAhBJ,IAiBI,kBAAkB,aAAW;AACzB,QAAM,MAAM,aAAa,OAAO,eAAe,OAAO,CAAC,EAAE,OAAO,OAAK,EAAE,aAAa,IAAI,EAAE,IAAI,OAAK,EAAE,SAAS,CAAC;AAC/G,UAAQ,MAAM,aAAa,IAAI,KAAK,IAAI;AAC5C;AApBJ,IAqBI,OAAO,YAAU,MAAM,aAAa,OAAO;AAAA,EACvC,WAAW,sBAAsB;AAC7B,WAAO;AAAA,MACH,QAAY;AAAA,MACZ,WAAY;AAAA,MACZ,SAAY;AAAA,MACZ,SAAY;AAAA,MACZ,OAAY;AAAA,MACZ,OAAY;AAAA,MACZ,WAAY;AAAA,IAChB;AAAA,EACJ;AAAA,EACA,eAAe,MAAM;AACjB,UAAM,GAAG,IAAI;AACb,SAAK,KAAK,EAAE;AAAA,EAChB;AAAA,EACA,QAAQ;AACJ,SAAK,YAAY,IAAI;AAAA,EACzB;AAAA,EACA,IAAI,QAAQ;AAhDpB,QAAAA,KAAA;AAiDY,WAAO,cAAa,gBAAK,WAAL,aAAeA,MAAA,KAAK,UAAL,gBAAAA,IAAY,UAA3B,YAAoC,GAAG,KAAK,IAAI;AAAA,EACxE;AAAA,EACA,IAAI,MAAM,GAAG;AACT,SAAK,SAAS;AAAA,EAClB;AAAA,EACA,IAAI,WAAW;AAtDvB,QAAAA;AAuDY,UAAM,EAAE,OAAO,KAAK,IAAI;AACxB,WAAO,cAAaA,MAAA,KAAK,cAAL,OAAAA,MAAmB,QAAQ,MAAM,WAAW,SAAS,iBAAkB,IAAI;AAAA,EACnG;AAAA,EACA,IAAI,SAAS,GAAG;AACZ,SAAK,YAAY;AAAA,EACrB;AAAA,EACA,IAAI,UAAU;AACV,WAAO,IAAI,IAAI,KAAK;AAAA,EACxB;AAAA,EACA,IAAI,YAAY;AACZ,WAAO,KAAK,WAAW,KAAK;AAAA,EAChC;AAAA,EACA,IAAI,SAAS;AAnErB,QAAAA,KAAA;AAoEY,YAAO,UAAK,YAAL,aAAgBA,MAAA,KAAK,UAAL,gBAAAA,IAAY;AAAA,EACvC;AAAA,EACA,IAAI,OAAO,GAAG;AACV,SAAK,UAAU;AAAA,EACnB;AAAA,EACA,IAAI,SAAS;AAzErB,QAAAA,KAAA;AA0EY,YAAO,UAAK,YAAL,aAAgBA,MAAA,KAAK,UAAL,gBAAAA,IAAY;AAAA,EACvC;AAAA,EACA,IAAI,OAAO,GAAG;AACV,SAAK,UAAU;AAAA,EACnB;AAAA,EACA,IAAI,OAAO;AA/EnB,QAAAA,KAAA;AAgFY,YAAO,UAAK,UAAL,aAAcA,MAAA,KAAK,UAAL,gBAAAA,IAAY;AAAA,EACrC;AAAA,EACA,IAAI,KAAK,GAAG;AACR,SAAK,QAAQ;AAAA,EACjB;AACJ;AACJ,IAAI,SAAS;AAkCb,IAAM,qBAAN,MAAM,4BAA2B,KAAK,MAAM,IAAI,EAAE;AAAA,EAC9C,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EACA,WAAW,sBAAsB;AAC7B,WAAO;AAAA,MACH,SAAW;AAAA,MACX,UAAW;AAAA,MACX,MAAW;AAAA,MACX,IAAW;AAAA,MACX,WAAa;AAAA,MACb,YAAa;AAAA,MACb,WAAa;AAAA,IACjB;AAAA,EACJ;AAAA,EACA,iBAAiB;AACb,UAAM,eAAe;AACrB,UACI,KAAK,MACL,EAAE,SAAS,YAAY,IAAI;AAC/B,QAAI,EAAE,SAAS,IAAI;AACnB,KAAC,UAAU,GAAG,EAAE,IAAI,UAAU,QAAQ,UAAU,GAAG,EAAE;AACrD,OAAG,OAAO,UAAU,QAAQ,UAAU,GAAG,IAAI,EAAE,CAAC;AAChD,OAAG,aAAa,IAAI,WAAW;AAC/B,OAAG,WAAW;AACd,UAAM,MAAM,YAAY,QAAQ;AAChC,gBAAY,QAAQ,IAAI;AACxB,QAAI,EAAE,KAAK,IAAI;AACf,QAAI,KAAK;AAGL,SAAG,OAAO,IAAI;AACd,aAAO;AACP,UAAI,QAAQ;AAAA,IAChB;AACA,QAAI,SAAS,MAAM;AACf,aAAO,GAAG,qBAAqB;AAC/B,UAAI,CAAC,KAAK;AACN,WAAG,OAAO;AAAA,MACd;AAAA,IACJ;AAEA,YAAQ,MAAM,QAAQ,IAAI;AAE1B,OAAG,qBAAqB;AAAA,EAC5B;AAAA,EACA,YAAY;AACR,UAAM,KAAK;AACX,OAAG,OAAO,KAAK;AACf,QAAI,GAAG,aAAa,CAAC,GAAG,QAAQ;AAC5B,SAAG,WAAW;AAAA,IAClB;AACA,UAAM,UAAU;AAAA,EACpB;AAAA,EACA,IAAI,UAAU;AA9KlB,QAAAA;AA+KQ,YAAOA,MAAA,KAAK,eAAL,gBAAAA,IAAiB;AAAA,EAC5B;AAAA,EACA,IAAI,cAAc;AACd,WAAO,eAAe,KAAK,OAAO;AAAA,EACtC;AAAA,EACA,aAAa;AACT,SAAK,SAAS,EAAE;AAAA,EACpB;AAAA,EACA,OAAO,UAAU;AACb,UACI,KAAK,MACL,EAAE,aAAa,YAAY,SAAS,IAAI;AAC5C,QAAI,YAAY;AACZ,SAAG,YAAY;AACf,SAAG,aAAa;AAChB,iBAAW,QAAQ,QAAQ;AAC3B,UAAI,YAAY,QAAQ,MAAM,IAAI;AAC9B,eAAO,YAAY,QAAQ;AAC3B,YAAI,CAAC,UAAU;AAGX,0BAAgB,GAAG,OAAO;AAC1B,aAAG,WAAW;AAAA,QAClB;AAAA,MACJ,OACK;AACD,WAAG,YAAY;AAAA,MACnB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,uBAAuB;AACnB,WAAO,UAAU,cAAc,KAAK,SAAS,KAAK,QAAQ;AAAA,EAC9D;AAAA,EACA,SAAS;AACL,UAAM,EAAE,UAAU,SAAS,SAAS,MAAM,UAAU,SAAU,QAAQ,SAAU,OAAO,IAAI;AAC3F,WAAO,IAAI,oBAAmB;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAY,KAAK,MAAM,KAAK,IAAI,UAAU,OAAO,CAAC;AAAA,MAClD,WAAY;AAAA,MACZ,IAAY;AAAA,MACZ,MAAY;AAAA,IAChB,CAAC;AAAA,EACL;AAAA,EACA,SAAS,OAAO;AACZ,SAAK,QAAQ,MAAM,KAAK,QAAQ,IAAI;AAAA,EACxC;AAAA,EACA,QAAQ;AACJ,UACI,KAAK,MACL,EAAE,OAAAC,QAAO,UAAU,SAAS,SAAS,IAAI;AAC7C,gBAAY,gBAAgB;AAAA,MACxB;AAAA,MACA;AAAA,MACA,UAAWA,SAAQ,WAAW;AAAA,MAC9B,SAAW,GAAG;AAAA,MACd,SAAW,MAAG;AAzO1B,YAAAD;AAyO6B,gBAAAA,MAAA,GAAG,WAAH,gBAAAA,IAAA,SAAY;AAAA;AAAA;AAAA,IACjC,CAAC;AACD,UAAM,MAAM;AACZ,OAAG,SAAS,GAAG,EAAE;AAAA,EACrB;AAAA,EACA,WAAW;AACP,UAAM,EAAE,OAAAC,QAAO,UAAU,UAAU,OAAO,IAAI;AAC9C,WAAO,GAAG,QAAQ,IAAI,QAAQ,MAAM,UAAU,aAAa,GAAGA,SAAQ,IAAIA,MAAK,OAAO,EAAE;AAAA,EAC5F;AACJ;AACA,mBAAmB,UAAU;AA2C7B,IAAqB,WAArB,MAAqB,kBAAiB,KAAK,MAAM,IAAI,EAAE;AAAA,EACnD,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EACA,WAAW,sBAAsB;AAC7B,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBH,SAAU;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,MAyBV,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASX,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAwBd,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYZ,OAAQ;AAAA,IACZ;AAAA,EACJ;AAAA,EACA,OAAO,SAAS,MAAMC,KAAI;AACtB,QAAI,aAAa,SAAS,IAAI,GAAG;AAC7B,mBAAa,QAAQ,IAAI,EAAE,QAAQ,WAAS,UAAS,SAAS,GAAG,KAAK,CAAC;AACvE;AAAA,IACJ;AACA,cAAS,GAAG,IAAI,IAAIA;AACpB,cAAS,IAAI,IAAI,aAAW;AACxB,UAAI,UAAU,UAAU,OAAO,GAAG;AAC9B,kBAAU;AAAA,UACN,SAAU;AAAA,UACV,CAAC,IAAI,GAAK,CAAC;AAAA,QACf;AAAA,MACJ,OACK;AACD,kBAAU;AAAA,UACN,SAAU,QAAQ;AAAA,UAClB,CAAC,IAAI,GAAK;AAAA,QACd;AACA,eAAO,QAAQ,IAAI,EAAE;AAAA,MACzB;AACA,aAAO,UAAS,IAAI,OAAO;AAAA,IAC/B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,OAAO,IAAI,SAAS;AAChB,WAAQ,IAAI,UAAS,OAAO,EAAG,MAAM;AAAA,EACzC;AAAA,EACA,YAAY,SAAS;AAvazB,QAAAF;AAwaQ,UAAM,IAAI;AACV,UACI,KAAK,MACLG,SAAQ,CAAC,GACT,aAAa,CAAC;AAClB,QAAI,MAAM,IAAI,KAAK;AACnB,QAAI,MAAM,QAAQ,OAAO,GAAG;AACxB,SAAG,QAAQ;AAAA,IACf,OACK;AACD,WAAK,OAAO,SAAS;AACjB,SAAC,UAAS,eAAe,KAAK,GAAG,IAAI,KAAK,YAAY,GAAG,IAAI,QAAQ,GAAG;AAAA,MAC5E;AAAA,IACJ;AACA,iBAAa,KAAK,UAAU,EAAE,QAAQ,cAAY;AAC9C,UAAI,WAAW,QAAQ;AAEvB,UAAI,KAAK,QAAQ,MAAM,SAAS,MAAM,GAAG;AACrC,YAAI,EAAE,KAAK,UAAS,GAAG,QAAQ,IAAI;AAC/B,cAAI,OAAO,GAAG,UAAW,OAAO,MAAM,WAAY,IAAI,EAAE,IAAK,EAAE,CAAC;AAChE,YAAE,QAAQ;AACV,YAAE,WAAW;AACb,iBAAO,IAAI,mBAAmB,CAAC;AAAA,QACnC,OACK;AACD,cAAI,OAAO,GAAG,UAAU,GAAG,GAAG,IAAI,QAAQ,CAAC;AAC3C,YAAE,QAAQ;AACV,iBAAO,IAAI,UAAS,CAAC;AAAA,QACzB;AACA,QAAAA,OAAM,KAAK,IAAI;AAAA,MACnB;AAAA,IACJ,CAAC;AAED,KAAAH,MAAA,GAAG,UAAH,gBAAAA,IAAU,QAAQ,UAAQ;AACtB,UAAI,aAAa,eAAe,IAAI,GAAG;AACnC,aAAK,QAAQ;AAAA,MACjB,OACK;AACD,eAAO,OAAO,GAAG,UAAU,IAAI;AAC/B,aAAK,QAAQ;AACb,eAAO,IAAI,UAAS,IAAI;AAAA,MAC5B;AACA,MAAAG,OAAM,KAAK,IAAI;AAAA,IACnB;AACA,OAAG,QAAQA;AACX,OAAG,WAAYA,OAAM,WAAW,IAAKA,OAAM,CAAC,EAAE,UAAU,QAAQ,IAAIA,OAAM,IAAI,QAAM,GAAG,OAAO,CAAC,GAAG,KAAK,SAAO;AArdtH,UAAAH;AAsdY,OAAAA,MAAA,GAAG,WAAH,gBAAAA,IAAA,SAAY;AACZ,aAAO,GAAG,aAAa;AAAA,IAC3B,CAAC;AAAA,EACL;AAAA,EACA,YAAY;AACR,SAAK,MAAM,QAAQ,OAAK,EAAE,QAAQ,CAAC;AACnC,UAAM,UAAU;AAAA,EACpB;AAAA,EACA,IAAI,WAAW;AACX,WAAO;AAAA,MACH,SAAU,KAAK;AAAA,IACnB;AAAA,EACJ;AAAA,EACA,IAAI,SAAS;AACT,UAAM,EAAE,SAAS,UAAU,MAAM,IAAI;AACrC,WAAO,4BAAY,WAAW,QAAS,QAAQ,MAAM,SAAS;AAAA,EAClE;AAAA,EACA,IAAI,OAAO,GAAG;AACV,UAAM,SAAS;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO;AACH,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,OAAO,UAAU;AAlfrB,QAAAA,KAAA;AAmfQ,UACI,KAAK,MACL,EAAE,OAAAG,OAAM,IAAI;AAChB,oBAAgB,GAAG,OAAO;AAC1B,OAAG,YAAa,OAAO,aAAa,YAAa,WAAW,CAAC,SAAS,KAAK,OAAK,CAAC,CAAC;AAClF,KAAAH,MAAA,GAAG,gBAAH,gBAAAA,IAAA,SAAiB,GAAG,WAAW;AAC/B,WAAOG,OAAM,QAAQ;AACjB,MAAAA,OAAM,IAAI,EAAE,QAAQ;AAAA,IACxB;AACA,aAAG,aAAH,4BAAc,GAAG,WAAW;AAAA,EAChC;AAAA,EACA,OAAO,SAAS;AA9fpB,QAAAH;AA+fQ,UACI,KAAK,MACL,EAAE,UAAU,IAAI,IAChB,QAAQ,CAAC,aAAYA,MAAA,QAAQ,UAAR,OAAAA,MAAiB;AAC1C,QAAI,OAAO,GAAG;AACd,QAAI,WAAW;AAGX,UAAI,UAAU,UAAU;AACpB,aAAK,WAAW,UAAU;AAAA,MAC9B;AACA,UAAI,UAAU,aAAa;AACvB,aAAK,cAAc,UAAU;AAAA,MACjC;AACA,WAAK,SAAS,UAAU;AAAA,IAC5B;AACA,WAAO,OAAO,MAAM,SAAS;AAAA,MACzB,OAAY,GAAG,MAAM,IAAI,QAAM,GAAG,OAAO,OAAO,CAAC;AAAA,MACjD,WAAY;AAAA,IAChB,CAAC;AACD,WAAO,IAAI,UAAS,IAAI;AACxB,aAAS,KAAK,MAAM;AACpB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ;AACJ,UAAM,EAAE,SAAS,OAAAG,OAAM,IAAI;AAC3B,UAAM,MAAM;AACZ,QAAIA,OAAM,QAAQ;AACd,sBAAgB,OAAO;AACvB,MAAAA,OAAM,QAAQ,OAAK,EAAE,MAAM,CAAC;AAAA,IAChC;AACA,WAAO;AAAA,EACX;AACJ;AACA,SAAS,UAAU,EAAE,aAAa;AAClC,SAAS,iBAAiB,IAAI,OAAO,OACjC,OAAO,KAAK,SAAS,mBAAmB,EAAE;AAAA,EACtC,OAAO,KAAK,SAAS,WAAW,mBAAmB;AACvD,EAAE,IAAI,OAAM,EAAE,CAAC,MAAM,MAAO,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CACzD,IAAI;AACJ,SAAS,kBAAkB;AAC3B,SAAS,KAAK,CAAC;AACf,SAAS,SAAS;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,EA8Bd,KAAK,MAAM;AACP,QAAI,SAAS,MAAM;AACf,aAAO,CAAC;AAAA,IACZ,WACS,OAAO,SAAS,UAAU;AAC/B,aAAO;AAAA,QACH,WAAY,SAAS,IAAI;AAAA,MAC7B;AAAA,IACJ,WACS,KAAK,OAAO;AACjB,aAAO,aAAa,MAAM,IAAI;AAC9B,WAAK,YAAY,SAAS,KAAK,KAAK;AACpC,aAAO,KAAK;AAAA,IAChB;AACA,WAAO,OAAO;AAAA,MACV,SAAY;AAAA,MACZ,WAAY;AAAA,IAChB,GAAG,IAAI;AAAA,EACX;AACJ,CAAC;AACD,SAAS,SAAS;;;ACjlBlB,IAAqB,gBAArB,cAA2C,KAAK,MAAM,iBAAS,EAAE;AAAA,EAC7D,WAAW,eAAe;AACtB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKH,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOV,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMX,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMR,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMZ,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOV,oBAAqB;AAAA,MACrB,YAAa;AAAA,IACjB;AAAA,EACJ;AAAA,EACA,YAAY;AA1DhB,QAAAC;AA2DQ,KAAAA,MAAA,KAAK,qBAAL,gBAAAA,IAAA;AACA,SAAK,OAAO;AACZ,UAAM,UAAU;AAAA,EACpB;AAAA,EACA,SAAS;AA/Db,QAAAA,KAAA;AAgEQ,UAAM,KAAK;AACX,KAAAA,MAAA,GAAG,kBAAH,gBAAAA,IAAkB,UAAU,OAAO,GAAG;AACtC,OAAG,gBAAgB;AACnB,aAAG,iBAAH,mBAAiB;AACjB,OAAG,yBAAwB,QAAG,0BAAH;AAC3B,OAAG,aAAa,GAAG,eAAe;AAClC,OAAG,aAAa,GAAG,WAAW;AAAA,EAClC;AAAA,EACA,cAAc,SAAS;AAxE3B,QAAAA;AAyEQ,KAAAA,MAAA,KAAK,qBAAL,gBAAAA,IAAA;AACA,SAAK,mBAAmB,YAAY,GAAG;AAAA,MACnC;AAAA,MACA,WAAY;AAAA,MACZ,SAAY;AAAA,IAChB,CAAC;AAAA,EACL;AAAA,EACA,YAAY,GAAG;AACX,UACI,KAAS,MACT,SAAS,GAAG,WAAW,EAAE,OAAO,QAAQ,GAAG,QAAQ,IAAI,GAAG;AAC9D,OAAG,OAAO;AACV,QAAI,QAAQ;AACR,SAAG,gBAAgB;AACnB,SAAG,eAAe;AAClB,aAAO,UAAU,IAAI,GAAG,UAAU;AAClC,SAAG,wBAAwB,YAAY,GAAG;AAAA,QACtC,SAAU;AAAA,UACN,SAAU;AAAA,UACV,SAAU;AAAA,UACV,SAAU;AAAA,QACd;AAAA,QACA,WAAY;AAAA,UACR,SAAU;AAAA,UACV,SAAU;AAAA,QACd;AAAA,QACA,YAAa;AAAA,UACT,SAAU;AAAA,UACV,SAAU;AAAA,QACd;AAAA,QACA,YAAa;AAAA,UACT,SAAU;AAAA,UACV,SAAU;AAAA,QACd;AAAA,QACA,SAAU;AAAA,MACd,CAAC;AACD,SAAG,kBAAkB,GAAG,WAAW,mBAAmB,GAAG,KAAK;AAAA,IAClE;AAAA,EACJ;AAAA,EACA,YAAY;AACR,SAAK,OAAO;AAAA,EAChB;AAAA,EACA,qBAAqB;AACjB,SAAK,cAAc,UAAU,OAAO,KAAK,UAAU;AACnD,SAAK,aAAa,KAAK,WAAW;AAAA,EACtC;AAAA,EACA,mBAAmB,GAAG;AAClB,UAAM,KAAK;AACX,QAAI,CAAC,EAAE,SAAS;AAEZ,SAAG,OAAO;AAAA,IACd,OACK;AACD,SAAG,cAAc,UAAU,IAAI,GAAG,UAAU;AAC5C,SAAG,eAAe;AAClB,SAAG,UAAU;AAAA,IACjB;AAAA,EACJ;AAAA,EACA,kBAAkB,GAAG;AACjB,SAAK,eAAe;AAAA,EACxB;AAAA,EACA,kBAAkB;AACd,UAAM,KAAK;AACX,OAAG,WAAW,GAAG,gBAAgB,MAAO,GAAG;AAC3C,OAAG,oBAAoB,GAAG,gBAAgB,MAAO,GAAG;AAEpD,OAAG,UAAU;AACb,OAAG,eAAe,eAAe,QAAQ,GAAG,oBAAoB,GAAG,UAAU,IAAI,aAAa;AAAA,EAClG;AAAA,EACA,SAAS,UAAU;AACf,SAAK,WAAW,KAAK,gBAAiB,KAAK,oBAAoB;AAAA,EACnE;AAAA,EACA,YAAY;AACR,UACI,KAAa,MACb,aAAa,IAAI,WAAW,SAAS,GAAG,YAAY;AACxD,OAAG,aAAa,OAAO,cAAc,UAAU;AAC/C,OAAG,cAAc,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ;AAAA,EAC5D;AACJ;AACA,cAAc,SAAS;;;ACpJvB,IACI,eAAgB;AADpB,IAEI,WAAW;AAAA,EACP,KAAS;AAAA,EACT,OAAS;AAAA,EACT,QAAS;AAAA,EACT,MAAS;AACb;AACG,IAAM,gBAAgB,UAAQ;AACjC,QAAM,OAAO,6BAAM;AACnB,SAAO,CAAC,MAAM,SAAS,UAAU,SAAS,OAAO;AACrD;AAOA,IAAO,oBAAQ,YAAO;AAvBtB,MAAAC;AAuByB,SAAAA,MAAA,eAAyB,UAAU,MAAM;AAAA,IAE9D,WAAW,eAAe;AACtB,aAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASH,QAAS;AAAA,QACT,cAAe;AAAA,MACnB;AAAA,IACJ;AAAA,IACA,UAAU;AACN,YAAM,EAAE,OAAO,IAAI;AACnB,aAAO;AAAA,QACH,OAAQ;AAAA,UACJ,CAAC,aAAa,UAAU,IAAI,YAAY,CAAC,EAAE,GAAI;AAAA,UAC/C,qBAA+C;AAAA,QACnD;AAAA,MACJ;AAAA,IACJ;AAAA,IACA,mBAAmB,MAAM;AACrB,UAAI,aAAa,KAAK,OAAO,KAAK,MAAM,CAAC,GAAG;AACxC,cAAM,CAAC,MAAM,QAAQ,IAAI,cAAc,IAAI;AAC3C,aAAK,SAAS,WAAY,KAAK,eAAe,SAAS,IAAI,IAAI,OAAQ;AAAA,MAC3E;AAAA,IACJ;AAAA,IACA,IAAI,cAAc;AACd,aAAO;AAAA,IACX;AAAA,EACJ,GAjCI,cADqBA,KACd,SAAQ,cADMA;AAAA;;;ACRzB,IAAqB,OAArB,cAAkC,OAAO,MAAM,iBAAS,EAAE;AAAA,EAwCtD,UAAU;AACN,UAAM,EAAE,OAAO,KAAK,IAAI;AACxB,WAAO;AAAA,MACH,KAAQ,QAAQ,OAAO,MAAM;AAAA,MAC7B,OAAQ;AAAA,QACJ,CAAC,WAAW,SAAS,KAAK,EAAE,GAAI;AAAA,QAChC,UAAgC;AAAA,MACpC;AAAA;AAAA,MAEA,WAAY;AAAA,QACR,OAAQ;AAAA,MACZ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,IAAI,eAAe;AACf,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,QAAQ;AAxEhB,QAAAC,KAAA;AA4EQ,UAAIA,MAAA,KAAK,WAAL,gBAAAA,IAAa,cAAW,UAAK,YAAL,mBAAc,WAAW,QAAQ,qBAAoB;AAC7E,aAAO,KAAK;AAAA,IAChB;AAAA,EACJ;AAAA,EACA,YAAY,OAAO;AACf,WAAO;AAAA,EACX;AAAA,EACA,gBAAgB,UAAU;AACtB,UACI,KAAqB,MACrB,EAAE,SAAS,MAAM,IAAI,IACrB,eAAqB,EAAE,UAAU,MAAO,GAAG;AAE/C,QAAI,GAAG,UAAU;AACb;AAAA,IACJ;AAOA,OAAG,QAAQ,SAAS,YAAY;AAEhC,QAAI,CAAC,GAAG,aAAa;AAOjB,SAAG,QAAQ,UAAU,YAAY;AACjC,UAAI,CAAC,GAAG,gBAAe,+BAAO,QAAQ,aAAa,mBAAkB,OAAO;AACxE,mBAAW,GAAG,SAAS,SAAS,OAAO,CAAC,UAAU,OAAO,EAAE,CAAC;AAAA,MAChE;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,kBAAkB,UAAU;AACxB,UAAM,UAAU,SAAS,IAAI,KAAK,KAAK,SAAS;AAGhD,QAAI,YAAY,SAAS;AACrB,eAAS,eAAe;AACxB,eAAS,gBAAgB;AAAA,IAC7B;AAAA,EACJ;AAAA,EACA,eAAe,UAAU,KAAK;AA1HlC,QAAAA;AA2HQ,UAAM,eAAe,UAAU,GAAG;AAClC,kBAAYA,MAAA,KAAK,WAAL,gBAAAA,IAAa;AAAA,EAC7B;AAAA,EACA,aAAa,QAAQ,WAAW;AAC5B,2CAAW;AACX,WAAO,UAAU,cAAc,IAAI;AAAA,MAC/B,SAAU,KAAK;AAAA,IACnB,GAAG,MAAM;AAAA,EACb;AACJ;AApHI,cADiB,MACV,SAAQ;AACf,cAFiB,MAEV,QAAO;AACd,cAHiB,MAGV,gBAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOlB,OAAQ;AAAA,IACJ,OAAU;AAAA,IACV,SAAU;AAAA,MACN,OAAQ;AAAA,IACZ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBP,QAAS;AAAA,EACT,qBAAsB;AAC1B;AAgFJ,KAAK,UAAU;AACf,KAAK,SAAS;;;ACnId,IACI,UAAU;AADd,IAEI,YAAY,WACP,KAAK,aAAa,KAAK;AAExB,KAAK,MAAM,uBAAuB,SAClC,KAAK,MAAM,YAAY,UAAU,MAAM,OAAO,IAC9C,UAAU;AASlB,IAAqB,eAArB,cAA0C,KAAK;AAAA,EAG3C,WAAW,eAAe;AACtB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcH,WAAY;AAAA,MACZ,WAAY;AAAA,MACZ,YAAa;AAAA,MACb,YAAa;AAAA;AAAA,MACb,WAAY;AAAA;AAAA,MAEZ,qBAAsB;AAAA,IAC1B;AAAA,EACJ;AAAA,EACA,UAAU;AACN,UAAM,EAAE,WAAW,UAAU,IAAI;AACjC,WAAO;AAAA,MACH,OAAQ;AAAA,QACJ,CAAC,mBAAmB,SAAS,EAAE,GAAI;AAAA,QACnC,eAAmC;AAAA,MACvC;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,gBAAgB,GAAG;AACf,WAAQ,MAAM,OAAQ,YAAY;AAAA,EACtC;AAAA,EACA,gBAAgB;AACZ,UAAM,EAAE,WAAAC,WAAU,IAAI;AACtB,QAAIA,YAAW;AACX,WAAK,QAAQA,WAAU,IAAI;AAAA,IAC/B;AAAA,EACJ;AAAA,EACA,kBAAkB;AACd,SAAK,cAAc;AAAA,EACvB;AAAA,EACA,kBAAkB;AACd,SAAK,cAAc;AAAA,EACvB;AAAA,EACA,mBAAmB;AACf,SAAK,cAAc;AAAA,EACvB;AAAA,EACA,kBAAkB;AACd,SAAK,cAAc;AAAA,EACvB;AACJ;AAxDI,cADiB,cACV,SAAQ;AACf,cAFiB,cAEV,QAAO;AAyDlB,aAAa,UAAU;AACvB,aAAa,SAAS;;;ACpEtB,IACI,uBAAuB;AAD3B,IAEI,eAAuB;AAF3B,IAGIC,eAAuB,CAAC;AAH5B,IAII,eAAuB;AAJ3B,IAKI,cAAuB;AAL3B,IAMI,aAAuB;AAN3B,IAOI,YAAuB;AAP3B,IAQI,EAAE,MAAM,IAAe;AAR3B,IASI,qBAAuB,CAAC,MAAM,QAAQ,QAAQ,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM;AACpE,IAAE,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI;AAC5B,SAAO;AACX,GAAG,CAAC,CAAC;AAZT,IAaI,aAAa;AAAA,EACT,KAAS,CAAC,OAAO,QAAQ;AAAA,EACzB,OAAS,CAAC,SAAS,MAAM;AAAA,EACzB,QAAS,CAAC,UAAU,KAAK;AAAA,EACzB,MAAS,CAAC,QAAQ,OAAO;AAC7B;AAlBJ,IAmBI,+BAA+B;AAAA,EAC3B,IAAK;AAAA,EACL,IAAK;AAAA,EACL,IAAK;AAAA,EACL,IAAK;AACT;AAxBJ,IAyBI,YAAY;AAAA,EACR,GAAI;AAAA,EACJ,GAAI;AACR;AA5BJ,IA6BI,kBAAkB;AAAA,EACd,IAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AACZ;AAlCJ,IAmCI,aAAa;AAAA,EACT,KAAS;AAAA,EACT,OAAS;AAAA,EACT,QAAS;AAAA,EACT,MAAS;AACb;AAxCJ,IAyCI,kBAAkB;AAAA,EACd,KAAS;AAAA,EACT,OAAS;AAAA,EACT,QAAS;AAAA,EACT,MAAS;AACb;AA9CJ,IA+CI,sBAAsB;AAAA,EAClB,KAAS,UAAQ,iBAAiB,MAAM,KAAK,UAAU,CAAC,CAAC;AAAA,EACzD,QAAS,UAAQ,gBAAgB,MAAM,KAAK,UAAU,CAAC,CAAC;AAAA,EACxD,OAAS,UAAQ,aAAa,MAAM,KAAK,SAAS,CAAC,CAAC;AAAA,EACpD,MAAS,UAAQ,cAAc,MAAM,KAAK,SAAS,CAAC,CAAC;AACzD;AACJ,IAAIC,UAAS;AAkBb,IAAqB,iBAArB,cAA4C,KAAK,MAAM,mBAAW,EAAE;AAAA,EAGhE,WAAW,eAAe;AACtB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMH,WAAY;AAAA,QACR,UAAW;AAAA,MACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,WAAY;AAAA,QACR,OAAU;AAAA,QACV,SAAU;AAAA,QACV,SAAU;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcA,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA,MAKZ,iBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKlB,eAAgB;AAAA,MAChB,OAAQ;AAAA,QACJ,OAAQ;AAAA,QACR,SAAU;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAqBA,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMd,MAAO;AAAA,QACH,MAAO;AAAA,QACP,QAAQ,IAAI;AAlK5B,cAAAC;AAoKoB,WAAAA,MAAA,KAAK,gBAAL,gBAAAA,IAAkB,gBAAgB;AAAA,QACtC;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,WAAW,cAAc;AACrB,WAAO;AAAA,MACH,aAAc;AAAA,IAClB;AAAA,EACJ;AAAA,EACA,IAAI,aAAa;AACb,WAAO,KAAK,wBAAwB;AAAA,EACxC;AAAA,EACA,IAAI,sBAAsB;AAjL9B,QAAAA;AAkLQ,UAAM,SAAQA,MAAA,KAAK,qBAAL,gBAAAA,IAAuB;AACrC,WAAQ,SAAS,OAAQ,OAAQ,QAAQ,eAAe;AAAA,EAC5D;AAAA,EACA,IAAI,cAAc;AArLtB,QAAAA,KAAA;AAsLQ,YAAO,kBAAAA,MAAA,KAAK,UAAL,gBAAAA,IAAY,WAAZ,mBAAoB,SAApB,mBAA0B,kBAA1B,YAA2C;AAAA,EACtD;AAAA,EACA,IAAI,YAAY;AACZ,WAAO,KAAK,wBAAwB;AAAA,EACxC;AAAA,EACA,IAAI,eAAe;AA3LvB,QAAAA,KAAA;AA4LQ,YAAO,MAAAA,MAAA,KAAK,UAAL,gBAAAA,IAAY,UAAZ,mBAAmB;AAAA,EAC9B;AAAA,EACA,IAAI,cAAc;AACd,WAAO,WAAW,KAAK,KAAK,WAAW,IAAI,UAAU;AAAA,EACzD;AAAA,EACA,eAAe,WAAW;AAjM9B,QAAAA;AAkMQ,QAAI,EAAE,WAAW,MAAM,IAAI;AAC3B,QAAI,CAAC,aAAa,qBAAqB,KAAK,SAAS,GAAG;AACpD,YAAM,YAAY,+BAAO;AACzB,UAAI,WAAW;AACX,oBAAY,6BAA6B,SAAS;AAAA,MACtD,OACK;AACD,oBAAY,kBAAgBA,MAAA,+BAAO,WAAP,gBAAAA,IAAe,SAAQ,KAAK;AAAA,MAC5D;AAAA,IAGJ;AACA,WAAO,YAAY,mBAAmB,SAAS,IAAI;AAAA,EACvD;AAAA,EACA,IAAI,cAAc;AACd,WAAO,KAAK,eAAe,IAAI;AAAA,EACnC;AAAA,EACA,IAAI,eAAe;AACf,WAAO,KAAK,aAAa,CAAC;AAAA,EAC9B;AAAA,EACA,IAAI,eAAe;AACf,UACI,EAAE,MAAM,IAAI,MACZC,cAAa,MAAM,aAAa,MAAM;AAC1C,QAAI,OAAO,gBAAgB,KAAK,WAAW,GACvC,aAAa;AACjB,QAAIA,aAAY;AACZ,UAAI,EAAE,aAAa,WAAW,IAAI,MAAM,WAAWA,WAAU,IAAI;AAC7D,eAAOA;AAAA,MACX;AAAA,IACJ;AACA,WAAO,CAAC,MAAM,UAAU;AAAA,EAC5B;AAAA,EACA,IAAI,cAAc;AACd,UAAM,EAAE,WAAW,KAAK,IAAI;AAC5B,WAAO,QAAQ;AAAA,MACX,UAAW,aAAa,OAAO;AAAA,QAC3B,WAAY,UAAU,YAAY;AAAA,MACtC,GAAG,IAAI;AAAA,IACX;AAAA,EACJ;AAAA,EACA,eAAe,WAAW;AACtB,UACI,EAAE,MAAM,IAAM,MACd,EAAE,QAAQ,IAAI;AAElB,QAAI,QAAQ,SAAS,UAAU,iBAAiB,OAAO,CAAC,GAAG;AACvD,YAAM,YAAY,IAAI;AAAA,IAC1B;AAAA,EACJ;AAAA,EACA,WAAW,MAAM;AACb,UACI,KAAK,MACL,EAAE,MAAM,IAAI;AAChB,QAAI,GAAG,iBAAiB,GAAG,gBAAgB,CAAC,SAAS,MAAM,cAAc;AACrE,aAAO;AAAA,IACX;AACA,UAAM,QAAQ;AAAA,MACV,UAAW;AAAA,IACf;AAAA,EACJ;AAAA,EACA,SAAS,WAAW;AA/PxB,QAAAD,KAAA;AAgQQ,UACI,KAAK,MACL,EAAE,MAAM,IAAI,IACZ,YAAY;AAAA,MACR,IAAY,EAAED;AAAA,MACd,WAAY;AAAA,MACZ;AAAA,IACJ;AACJ,QAAI,EAAE,iBAAiB,IAAI;AAC3B,gBAAY,gCAAa;AACzB,QAAI,aAAa,SAAS,SAAS,GAAG;AAClC,gBAAU,YAAY;AACtB,mBAAa,OAAO,WAAW,SAAS;AACxC,kBAAY,UAAU;AACtB,aAAO,UAAU;AAAA,IACrB;AACA,cAAU,aAAa;AACvB,cAAU,WAAW,8CAAoB;AACzC,QAAI,cAAc,GAAG,WAAW;AAE5B,UAAI,kBAAkB;AAClB,YAAI,iBAAiB,eAAe,WAAW;AAE3C,oBAAU,YAAY,iBAAiB,UAAU,OAAO;AAAA,YACpD,WAAW;AAxRnC,kBAAAC;AAyR4B,eAAAA,MAAA,GAAG,qBAAH,gBAAAA,IAAA,SAAsB,WAAW;AAAA,YACrC;AAAA,UACJ,CAAC;AACD,oBAAU,aAAa;AACvB,6BAAmB;AAAA,QACvB;AAAA,MACJ,OACK;AAGD,kBAAU,YAAY,aAAa,OAAQ,eAAe,YAAa,YAAY,IAAI,SAAS;AAChG,YAAI,GAAG,eAAe,SAAS,MAAM,OAAO;AACxC,cAAI,UAAU,WAAW;AACrB,sBAAU,UAAU,WAAW,cAAS;AAtShE,kBAAAA;AAsSmE,sBAAAA,MAAA,GAAG,qBAAH,gBAAAA,IAAA,SAAsB,WAAW;AAAA;AAAA,UAChF;AACA,gBAAM,mBAAmB;AACzB,aAAG,YAAY,kBAAkB,aAAa,EAAE,SAAS;AACzD,cAAI,UAAU,WAAW;AACrB,+BAAmB;AAAA,UACvB,OACK;AACD,sBAAU,YAAY;AACtB,eAAG,YAAY,gBAAgB,WAAW,EAAE,SAAS;AAAA,UACzD;AACA,gBAAM,mBAAmB;AACzB,cAAI,CAAC,UAAU,WAAW;AACtB,eAAG,WAAW,YAAY,aAAa,QAAQ;AAAA,UACnD;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,WACS,oBAAoB,iBAAiB,eAAe,WAAW;AAEpE,SAAG,YAAY,iBAAiB,gBAAgB,EAAE,SAAS;AAE3D,gBAAU,YAAY,iBAAiB,UAAU,OAAO;AAAA,QACpD,WAAW;AA7T3B,cAAAA;AA8ToB,WAAAA,MAAA,GAAG,qBAAH,gBAAAA,IAAA,SAAsB,WAAW;AAAA,QACrC;AAAA,MACJ,CAAC;AACD,yBAAmB;AAAA,IACvB;AAEA,OAAG,mBAAmB;AACtB,YAAO,MAAAA,MAAA,qDAAkB,cAAlB,gBAAAA,IAA6B,WAA7B,YAAuC,QAAQ,QAAQ,cAAc,GAAG,SAAS;AAAA,EAC5F;AAAA,EACA,iBAAiB,WAAW,UAAU;AAClC,UACI,KAAK,MACL,EAAE,kBAAkB,MAAM,IAAI,IAC9B,SAAS,MAAM,YAAY,WAAW;AAC1C,QAAI,qBAAqB,WAAW;AAChC,SAAG,mBAAmB;AACtB,gBAAU,YAAY;AACtB,YAAM,mBAAmB;AACzB,SAAG,SAAS,KAAK,EAAE,SAAS;AAC5B,YAAM,mBAAmB;AACzB,kBAAY,GAAG,WAAW,MAAM;AAAA,IACpC;AAAA,EACJ;AAAA,EACA,gBAAgB,WAAW,QAAQ,MAAM;AACrC,UACI,KAAK,MACL,EAAE,aAAa,MAAM,IAAI,IACzB,OAAO,YAAY,GAAG,eAAe,MAAM;AAC/C,QAAI,SAAS,eAAe,MAAM,WAAW;AACzC,YAAM,SAAS;AAAA,QACX;AAAA,MACJ;AACA,eAAS,MAAM,UAAU,MAAM;AAAA,IACnC;AAAA,EACJ;AAAA,EACA,cAAc,QAAQ;AAClB,UACI,EAAE,MAAM,IAAI,MACZ,EAAE,OAAQ,IAAI,IAAI,QAClB,OAAO,MAAM,sBACT,OAAO,KAAK,GAAG,EAAE,OAAO,OAAK,IAAI,CAAC,KAAK,aAAa,KAAK,CAAC,CAAC,EAAE,IAAI,OAAK,aAAa,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACxG,QAAI,WAAW,IAAI;AACnB,QAAI,iBAAiB,KAAK,CAAC,CAAC,GAAG,KAAK,YAAY,CAAC,CAAC,EAAE,IAAI;AACxD,WAAO;AAAA,EACX;AAAA,EACA,aAAa,OAAO;AAChB,UAAM,MAAM,WAAW,IAAI;AAC3B,WAAO;AAAA,EACX;AAAA,EACA,cAAc,WAAW;AA/W7B,QAAAA;AAgXQ,UACI,KAAK,MACL,EAAE,UAAU,IAAI,WAChB,EAAE,aAAa,cAAc,MAAM,IAAI,IACvC,EAAE,SAAS,UAAU,IAAI,OACzB,CAAC,cAAc,UAAU,IAAI,GAAG,cAChC,sBAAsB,6CAAc,QAAQ,WAC5C,SAAS,CAAC,aACJ,UAAU,CAAC,MAAM,OAAS,gBAAgB,WAC1C,UAAU,CAAC,MAAM,OAAS,gBAAgB;AACpD,OAAG,kBAAkB,MAAM;AAC3B,OAAG,mBAAmB,MAAM;AAC5B,OAAG,qBAAqB;AACxB,OAAG,gBAAgB,IAAI;AAKvB,UACI,YAAY,MAAM,UAAU,GAC5B,eAAe,GAAG,cAAc,EAAE,OAAO,GAAG,CAAC,GAC7C,mBAAmB,aAAa,MAAM,GACtC,UAAU,WAAW,YAAY,GACjC,cAAaA,MAAA,MAAM,kBAAN,gBAAAA,IAAqB,yBAClC,gBAAgB,OAAM,yCAAa,iBAAgB,CAAC;AACxD,YAAQ,UAAU,OAAO,WAAW,MAAM;AAC1C,QAAI,WAAW;AACX,uBAAiB,QAAQ,CAAC,CAAC,IAAI,iBAAiB,QAAQ,CAAC,CAAC;AAC1D,cAAQ,UAAU,IAAI,cAAc;AAEpC,iEAAqB,IAAI,eAAe;AACxC,UAAI,cAAc;AACd,qBAAa,aAAa;AAAA,MAC9B;AACA,UAAI,qBAAqB;AACrB,4BAAoB,OAAO,aAAa;AACxC,cAAM,UAAU;AAChB,4BAAoB,OAAO,cAAc;AACzC,4BAAoB,IAAI,aAAa;AAAA,MACzC;AACA,gBAAU,UAAU;AACpB,gBAAU,SAAS;AACnB,gBAAU,WAAW,IAAI;AAAA,QACrB,MAAO,MAAM,UAAU,WAAW,CAAC;AAAA,QACnC,IAAO;AAAA,MACX;AAIA,gBAAU,QAAQ,CAAC;AAAA,QACf,SAAU,GAAG;AAAA,QACb,QAAU;AAAA,QACV,MAAU;AAAA,UACN,MAAO,QAAQ,YAAY;AAAA,UAC3B,IAAO,QAAQ,gBAAgB;AAAA,QACnC;AAAA,MACJ,CAAC;AACD,UAAI,YAAY;AACZ,kBAAU,MAAM,KAAK;AAAA,UACjB,SAAY,MAAM;AAAA,UAClB,UAAY,UAAU;AAAA,UACtB,QAAY;AAAA,UACZ,WAAY;AAAA,YACR,MAAO,oBAAoB,YAAY,EAAE,UAAU;AAAA,YACnD,IAAO;AAAA,UACX;AAAA,QACJ,CAAC;AAAA,MACL;AACA,gBAAU,YAAY,SAAS,IAAI,SAAS;AAAA,IAChD,OACK;AAGD,cAAQ,MAAM,WAAW,IAAI,GAAG,aAAa;AAC7C,UAAI,cAAc;AACd,4BAAoB,IAAI,gBAAgB,aAAa;AACrD,qBAAa,UAAU;AACvB,4BAAoB,OAAO,cAAc;AAAA,MAC7C;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,YAAY,WAAW;AACnB,UACI,KAAK,MACL,EAAE,aAAa,IAAI;AACvB,OAAG,MAAM,QAAQ,UAAU,OAAO,cAAc;AAChD,QAAI,cAAc;AACd,mBAAa,aAAa;AAAA,IAC9B;AACA,QAAI,UAAU,WAAW;AACrB,SAAG,YAAY;AAAA,IACnB,OACK;AACD,SAAG,gBAAgB,KAAK;AACxB,SAAG,sBAAsB;AACzB,SAAG,cAAc,KAAK;AAAA,IAC1B;AAAA,EACJ;AAAA,EACA,eAAe,WAAW;AAld9B,QAAAA;AAmdQ,KAAAA,MAAA,KAAK,iBAAL,gBAAAA,IAAmB,QAAQ,UAAU,OAAO;AAAA,EAChD;AAAA,EACA,YAAY,WAAW;AACnB,UACI,KAAK,MACL,EAAE,UAAU,IAAI,WAChB,EAAE,aAAa,cAAc,MAAM,IAAI,IACvC,CAAC,cAAc,UAAU,IAAI,GAAG,cAChC,EAAE,QAAQ,IAAI,OACd,mBAAmB,QAAQ,WAC3B,SAAS,iBAAiB,SAAS,SAAS,GAC5C,WAAW,MAAM,UAAU;AAC/B,qBAAiB,OAAO,eAAe,cAAc;AAGrD,UAAM,QAAQ,MAAM,WAAW,IAAI;AACnC,OAAG,sBAAsB;AACzB,OAAG,cAAc,KAAK;AACtB,UACI,SAAS,MAAM,UAAU,GAEzB,eAAe,GAAG,cAAc,EAAE,OAAO,GAAG,CAAC,GAC7C,mBAAmB,aAAa,MAAM,GACtC,UAAU,WAAW,GAAG,YAAY;AACxC,iDAAc,QAAQ,UAAU,OAAO;AACvC,QAAI,WAAW;AACX,uBAAiB,QAAQ,CAAC,CAAC,IAAI,iBAAiB,QAAQ,CAAC,CAAC;AAC1D,uBAAiB,IAAI,eAAe,aAAa;AACjD,gBAAU,iBAAiB,IAAI,SAAS;AACxC,gBAAU,UAAU;AACpB,gBAAU,WAAW,IAAI;AAAA,QACrB,MAAO,MAAM,SAAS,WAAW,CAAC;AAAA,QAClC,IAAO,MAAM,OAAO,WAAW,CAAC;AAAA,MACpC;AACA,gBAAU,QAAQ,CAAC;AAAA,QACf,SAAU,GAAG;AAAA,QACb,QAAU;AAAA,QACV,MAAU;AAAA,UACN,MAAO,QAAQ,gBAAgB;AAAA,UAC/B,IAAO,QAAQ,YAAY;AAAA,QAC/B;AAAA,MACJ,CAAC;AACD,UAAI,YAAY;AACZ,kBAAU,MAAM,KAAK;AAAA,UACjB,SAAY,MAAM;AAAA,UAClB,UAAY,UAAU;AAAA,UACtB,QAAY;AAAA,UACZ,WAAY;AAAA,YACR,MAAO;AAAA,YACP,IAAO,oBAAoB,YAAY,EAAE,QAAQ;AAAA,UACrD;AAAA,QACJ,CAAC;AAAA,MACL;AACA,gBAAU,YAAY,SAAS,IAAI,SAAS;AAAA,IAChD;AAAA,EACJ;AAAA,EACA,UAAU,WAAW;AACjB,UAAM,KAAK;AACX,OAAG,MAAM,QAAQ,UAAU,OAAO,aAAa;AAC/C,QAAI,UAAU,WAAW;AACrB,SAAG,YAAY;AACf,SAAG,gBAAgB,KAAK;AACxB,SAAG,sBAAsB;AACzB,SAAG,cAAc,KAAK;AAAA,IAC1B;AAAA,EACJ;AAAA,EACA,aAAa,WAAW;AArhB5B,QAAAA;AAshBQ,KAAAA,MAAA,KAAK,iBAAL,gBAAAA,IAAmB,QAAQ,UAAU,IAAI;AAAA,EAC7C;AAAA,EACA,IAAI,eAAe;AACf,WAAO,KAAK,MAAM,uBAAuB,KAAK,MAAM;AAAA,EACxD;AAAA,EACA,IAAI,mBAAmB;AACnB,WAAO,KAAK,qBAAqB,KAAK,MAAM,UAAU,KAAK;AAAA,EAC/D;AAAA,EACA,IAAI,cAAc;AACd,QAAI,EAAE,aAAa,IAAI;AACvB,UAAM,cAAc,iBAAiB;AACrC,QAAI,eAAe,gBAAgB,MAAM;AACrC,qBAAe,KAAK,YAAY,CAAC;AACjC,UAAI,eAAe,UAAU,cAAc,KAAK,MAAM,SAAS,UAAU,MAAM,YAAY;AACvF,wBAAgB,UAAU,YAAY;AAAA,MAC1C;AAAA,IACJ;AACA,WAAO,gBAAgB;AAAA,EAC3B;AAAA,EACA,cAAc,OAAO,MAAM;AACvB,UACI,KAAK,MACL,EAAE,cAAc,MAAM,IAAI,IAC1B,cAAc,OAAO,GAAG,cAAc,IACtC,UAAU,MAAM,SAChB,WAAW,MAAM,eACjB,aAAa,QAAQ,YAAY,UAAU,KAAK,UAAU,OAAO,GACjE,YAAY,QAAQ,UAAU,KAAK,GAAG,kBAAkB,OAAO,GAC/D,aAAa,aAAa;AAK9B,QAAI,UAAU;AACV,eAAS,MAAM,WAAW,YAAY,SAAS,GAAG,IAAI,GAAG,WAAW,KAAK,OAAO;AAChF,eAAS,MAAM,YAAY,YAAY,SAAS,GAAG,IAAI,GAAG,WAAW,MAAM,OAAO;AAAA,IACtF;AAGA,eAAW,QAAS,OAAO,GAAG,UAAU,KAAK,OAAS;AACtD,eAAW,SAAS,OAAO,GAAG,UAAU,MAAM,OAAQ;AACtD,iBAAa,UAAU,OAAO,QAAQ,QAAQ,EAAE,8BAA8B;AAC9E,WAAO;AAAA,EACX;AAAA,EACA,gBAAgB,GAAG;AACf,QAAI,YAAY,KAAK,aAAa,QAAQ,KAAK,YAAY,OAAO,CAAC,KAAK;AACxE,QAAI,EAAE,QAAQ;AACV,kBAAY;AAAA,QACR,WAAY;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AACA,SAAK,SAAS,SAAS;AAAA,EAC3B;AAAA,EACA,WAAW,QAAQ;AA5kBvB,QAAAA;AA6kBQ,KAAAA,MAAA,KAAK,UAAL,gBAAAA,IAAY,QAAQ;AAAA,EACxB;AAAA,EACA,mBAAmB,EAAE,MAAM,GAAG;AAC1B,QAAI,MAAM,WAAW,KAAK,KAAK,MAAM,aAAa,MAAM,OAAO,UAAU,SAAS,WAAW,GAAG;AAC5F,WAAK,gBAAgB;AAAA,IACzB;AAAA,EACJ;AAAA,EACA,oBAAoB,EAAE,MAAM,MAAM,GAAG;AACjC,UACI,KAAY,MACZ,EAAE,MAAM,IAAI;AAChB,QAAI,SAAS,aAAa;AACtB,UAAI,MAAM,WAAW;AACjB,WAAG,YAAY;AAAA,MACnB;AAAA,IACJ,WACS,SAAS,YAAY,CAAC,MAAM,kBAAkB;AACnD,SAAG,cAAc;AAAA,IACrB;AAAA,EACJ;AAAA,EACA,eAAe;AACX,SAAK,cAAc;AACnB,QAAI,KAAK,MAAM,aAAa,CAAC,KAAK,WAAW;AACzC,WAAK,SAAS;AAAA,QACV,WAAY;AAAA,QACZ,WAAY;AAAA,MAChB,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EACA,kBAAkB;AACd,SAAK,MAAM,UAAU,EAAE,WAAY,MAAM,CAAC;AAAA,EAC9C;AAAA,EACA,sBAAsB,OAAO;AACzB,UAAM,EAAE,kBAAkB,iBAAiB,MAAM,IAAI;AACrD,YAAQ,wBAAS;AACjB,UAAM,QAAQ,UAAU,OAAO,SAAS;AACxC,QAAI,mBAAmB,QAAQ,MAAM,SAAS,GAAG,GAAG;AAChD,YAAM,QAAQ;AAAA,IAClB;AACA,QAAI,oBAAoB,QAAQ,MAAM,SAAS,GAAG,GAAG;AACjD,YAAM,SAAS;AAAA,IACnB;AAAA,EACJ;AAAA,EACA,iBAAiB,EAAE,IAAI,KAAK,IAAIF,cAAa;AAxnBjD,QAAAE;AAynBQ,YAAOA,MAAA,KAAK,UAAL,gBAAAA,IAAY,iBAAiB,EAAE,IAAI,MAAM,KAAM,KAAK;AAAA,EAC/D;AAAA,EACA,gBAAgB;AACZ,UACI,KAAK,MACL,EAAE,UAAU,IAAI;AACpB,QAAI,CAAC,aAAa,qBAAqB,KAAK,SAAS,GAAG;AAGpD,SAAG,YAAY,GAAG,eAAe;AAAA,IACrC;AAAA,EACJ;AAAA,EACA,gBAAgB,WAAW;AAEvB,WAAO,QAAQ,SAAS;AAAA,EAC5B;AAAA,EACA,gBAAgB,WAAW;AACvB,UAAM,EAAE,cAAc,MAAM,IAAI;AAChC,QAAI,OAAO;AACP,YAAM,YAAY;AAClB,YAAM,QAAQ,UAAU,YAAY,QAAQ,QAAQ,EAAE,aAAa;AAAA,IACvE;AACA,QAAI,cAAc;AACd,mBAAa,YAAY;AAAA,IAC7B;AAAA,EACJ;AAAA,EACA,gBAAgB,WAAW;AACvB,UAAM,EAAE,cAAc,MAAM,IAAI;AAChC,QAAI,cAAc;AACd,mBAAa,YAAY,mBAAmB,SAAS;AAAA,IACzD;AACA,QAAI,+BAAO,UAAU;AACjB,YAAM,UAAU;AAAA,IACpB;AAAA,EACJ;AAAA,EACA,YAAY,OAAO;AA5pBvB,QAAAA;AA6pBQ,UAAM,KAAK;AACX,OAAG,cAAc;AACjB,KAAAA,MAAA,GAAG,wBAAH,gBAAAA,IAAA;AACA,OAAG,sBAAsB,SAAS,eAAe,MAAM,OAAO,kBAAkB,uBAAuB,IAAI;AAAA,MACvG,QAAS;AAAA,IACb,CAAC;AAAA,EACL;AAAA,EACA,cAAc,KAAK,MAAM;AApqB7B,QAAAA;AAqqBQ,UACI,KAAK,MACL,CAAC,cAAc,UAAU,IAAI,GAAG;AACpC,QAAI,CAAC,YAAY;AACb,aAAO,CAAC,KAAK,IAAI;AAAA,IACrB;AACA,UACI,EAAE,aAAa,MAAM,IAAI,IACzB,EAAE,oBAAoB,QAAQ,aAAa,YAAY,IAAI,OAC3D,cAAaA,MAAA,MAAM,UAAN,gBAAAA,IAAa,YAC1B,CAAC,QAAQ,KAAK,IAAI,GAAG,iBAAiB,EAAE,IAAK,WAAW,MAAO,aAAa,CAAC,GAC7E,QAAQ,MAAM,YAAa,MAAM,UAAS,2CAAa,UAAS,SAAU,MAC1E,gBAAgB,SAAS;AAAA,MACrB,KAAQ;AAAA,MACR,OAAQ,IAAI,aAAa;AAAA,QACrB,GAAG;AAAA,QACH,CAAC,UAAU,kBAAkB,EAAE,GAAI;AAAA,QACnC,kBAAmC;AAAA,QACnC,4BAAmC;AAAA,MACvC,GAAG,2CAAa,GAAG;AAAA,MACnB,UAAW;AAAA,QACP,GAAG;AAAA,QACH;AAAA,UACI,WAAY;AAAA,UACZ,MAAY;AAAA,UACZ,OAAY;AAAA,YACR,GAAG;AAAA,YACH,CAAC,YAAW,2CAAa,eAAc,OAAO,EAAE,GAAI;AAAA,YACpD,kBAAoD;AAAA,UACxD;AAAA,QACJ;AAAA,QACA,GAAG;AAAA,MACP;AAAA,IACJ;AACJ,QAAI,YAAY;AACZ,iBAAW,YAAY;AAAA,IAC3B;AACA,WAAO;AAAA,MACH;AAAA,MACA;AAAA,QACI,OAAQ;AAAA,UACJ,GAAG;AAAA,UACH,CAAC,4BAA4B,kBAAkB,EAAE,GAAQ;AAAA,UACzD,CAAC,qBAAqB,WAAW,EAAE,GAAsB;AAAA,UACzD,CAAC,KAAK,WAAW,kBAAkB,IAAI,MAAM,GAAG,KAAK,GAAI;AAAA,UACzD,qBAAyD;AAAA,UACzD,gBAAyD;AAAA,QAC7D;AAAA,QACA,UAAW,aAAa,KAAK,kBAAkB,IAAI;AAAA,UAC/C,wBAAyB;AAAA,UACzB,CAAC,GAAG,GAAqB;AAAA,QAC7B,IAAI;AAAA,UACA,CAAC,GAAG,GAAqB;AAAA,UACzB,wBAAyB;AAAA,QAC7B;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;AA3oBI,cADiB,gBACV,SAAQ;AACf,cAFiB,gBAEV,QAAO;AA2oBlB,eAAe,OAAO;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AACJ;AAEA,eAAe,UAAU;AACzB,eAAe,SAAS;;;ACjuBxB,IAAM,UAAU,OAAO,eAAe;AA4BtC,IAAqB,gBAArB,cAA2C,KAAK;AAAA,EAC5C,WAAW,sBAAsB;AAC7B,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASH,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMV,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASb,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA,MAKV,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQV,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA,MAKZ,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,MAKR,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQZ,WAAY,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAU7B,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUR,WAAY;AAAA,IAChB;AAAA,EACJ;AAAA,EACA,WAAW,aAAa;AACpB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASH,UAAW,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMZ,WAAY,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOb,QAAS,uBAAO,OAAO,CAAC,CAAC;AAAA,IAC7B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,QAAQ;AACR,UAAM,KAAK;AACX,QAAI,QAAQ;AACZ,QAAI,GAAG,WAAW;AACd,cAAQ,IAAI,MAAM,GAAG,WAAW;AAAA,QAC5B,IAAI,GAAG,MAAM;AACT,iBAAO,GAAG,IAAI,IAAI;AAAA,QACtB;AAAA,QACA,IAAI,GAAG,MAAM,OAAO;AAChB,aAAG,IAAI,MAAM,KAAK;AAClB,iBAAO;AAAA,QACX;AAAA,QACA,eAAe,GAAG,MAAM;AACpB,aAAG,IAAI,MAAM,IAAI;AACjB,iBAAO;AAAA,QACX;AAAA,MACJ,CAAC;AAAA,IACL;AAEA,YAAQ,eAAe,IAAI,SAAS;AAAA,MAChC,cAAe;AAAA;AAAA,MACf,OAAe;AAAA,IACnB,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,SAAS;AACT,WAAO,KAAK,SAAS,KAAK;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,MAAM,QAAQ;AACjB,UACI,KAAgB,MAChB,EAAE,UAAU,IAAI,IAChB,cAAgB,YAAY,UAAU,QAAQ,IAAI,IAAI,QACtD,eAAgB,aAAa,eAAe,WAAW;AAC3D,OAAG,UAAU,IAAI,IAAI;AACrB,QAAI,CAAC,cAAc;AACf,SAAG,YAAY,MAAM,WAAW;AAAA,IACpC;AAKA,OAAG,WAAW,MAAM,IAAI;AACxB,QAAI,cAAc;AACd,SAAG,IAAI,MAAM,WAAW;AAAA,IAC5B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,MAAM,MAAM;AACnB,UACI,KAAK,MACL,EAAE,OAAO,IAAI;AACjB,QAAI,CAAC,GAAG,OAAO;AACX,cAAQ,eAAe,OAAO,OAAO,eAAe,MAAM,IAAI,QAAQ,MAAM;AAAA,QACxE,cAAe,CAAC;AAAA,QAChB,YAAe;AAAA,QACf,MAAM;AACF,iBAAO,GAAG,IAAI,IAAI;AAAA,QACtB;AAAA,QACA,IAAI,OAAO;AACP,iBAAO,GAAG,IAAI,MAAM,KAAK;AAAA,QAC7B;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ;AA1OZ,QAAAE;AA2OQ,UAAM,KAAK;AAEX,QAAI;AACA,SAAG,WAAW;AACd,iBAAW,QAAQ,GAAG,UAAU;AAC5B,WAAG,IAAI,IAAI;AAAA,MACf;AACA,SAAG,uBAAsBA,MAAA,GAAG,wBAAH,gBAAAA,IAAA;AAAA,IAC7B,UACA;AACI,SAAG,WAAW;AAAA,IAClB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,MAAM;AACN,UAAM,EAAE,UAAU,UAAU,IAAI;AAChC,QAAI,UAAU,IAAI,MAAM,SAAS;AAC7B,WAAK,IAAI,MAAM,OAAO;AAAA,IAC1B;AAEA,WAAO,UAAU,IAAI,KAAM,SAAS,IAAI,KAAK;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,MAAM,OAAO;AA5QrB,QAAAA;AA6QQ,UACI,KAAK,MACL,EAAE,SAAS,YAAY,UAAU,SAAS,WAAW,OAAO,OAAO,WAAW,SAAS,IAAI,IAC3F,SAAS,SAAS,cAAc,CAAC,UACjC,MAAO,UAAU,IAAI,MAAM,UAAW,OAAO,UAAU,IAAI,GAC3D,WAAW,QAAQ,YAAY,KAAM,UAAU,UAAW,CAAC,IAAK,SAAS,MAAO;AAAA,MAC5E,SAAY,YAAY,CAAAC,cAAY,QAAQA,WAAU,IAAI;AAAA,MAC1D,UAAY,SAAS,IAAI,KAAK,GAAG,YAAY,MAAM,CAAC,CAAC;AAAA,MACrD,OAAY,GAAG;AAAA,MACf,OAAY,UAAU,CAAC,QAAQ,MAAMC,cAAa,MAAM,QAAQ,MAAM,MAAMA,SAAQ;AAAA,MACpF,WAAY,cAAc,YAAU,UAAU,QAAQ,IAAI;AAAA,IAC9D,CAAC;AACL,QAAI,aAAa,KAAK;AAClB,YAAM,SAAS,UAAU,EAAE,GAAG,UAAU;AACxC,gBAAU,IAAI,IAAI;AAClB,UAAI,UAAU;AACV,WAAG,WAAW,IAAI;AAClB,SAAAF,MAAA,GAAG,YAAH,gBAAAA,IAAA,SAAa,UAAU;AAAA,MAC3B,OACK;AACD,eAAO,GAAG,OAAO,IAAI;AACrB,eAAO,UAAU,IAAI;AAAA,MACzB;AACA,UAAI,QAAQ;AACR,cAAM,eAAe;AAAA,UACjB,MAAS;AAAA,UACT,QAAS,MAAM,MAAM,QAAQ,UAAU;AAAA,UACvC,OAAS,GAAG;AAAA,UACZ,KAAS;AAAA,QACb,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAY,MAAM,QAAQ;AACtB,UACI,EAAE,UAAU,SAAS,WAAW,WAAW,OAAO,UAAU,IAAI,MAChE,EAAE,QAAQ,IAAI,QAAQ;AAC1B,aAAU,WAAW,OAAQ,CAAC,IAAI,aAAa,OAAO,CAAC,GAAG,MAAM;AAChE,QAAI,cAAc,UAAW,cAAc,QAAQ,CAAC,OAAO,OAAO,GAAI;AAClE,aAAO,OAAO,IAAI;AAAA,IACtB;AAEA,QAAI,WAAW;AACX,aAAO,SAAS,IAAI;AAAA,IACxB;AACA,WAAO,kBAAkB,cAAY;AAGjC,gBAAU,IAAI,IAAI;AAAA,IACtB;AACA,WAAO,SAAS,IAAI,IAAI;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,SAAS;AACZ,UACI,KAAK,MACL,EAAE,MAAM,IAAI;AAChB,QAAI,MAAM;AACV,QAAI;AACA,SAAG,WAAW;AACd,UAAI,SAAS;AAGT,aAAK,QAAQ,SAAS;AAClB,mBAAS,QAAQ,IAAI;AACrB,cAAI,GAAG,SAAS,IAAI,GAAG;AACnB,eAAG,IAAI,MAAM,MAAM;AAAA,UACvB,WACS,QAAQ;AACb,eAAG,OAAO,MAAM,MAAM;AAAA,UAC1B;AAAA,QACJ;AAAA,MAGJ,OACK;AACD,aAAK,QAAQ,GAAG,WAAW;AACvB,aAAG,IAAI,MAAM,IAAI;AAAA,QACrB;AAAA,MACJ;AAAA,IACJ,UACA;AACI,SAAG,WAAW;AAAA,IAClB;AACA,QAAI,OAAO;AAIP,UAAI,CAAC,MAAM,eAAe;AACtB,WAAG,MAAM;AAAA,MACb,WACS,CAAC,GAAG,qBAAqB;AAG9B,WAAG,sBAAsB,eAAe,OAAO,OAAO,kBAAkB,SAAS,EAAE;AAAA,MACvF;AAAA,IACJ;AAAA,EACJ;AACJ;AACA,cAAc,UAAU;AACxB,cAAc,SAAS;;;ACrXvB,IACIG,cAAa,CAAC;AADlB,IAEIC,eAAc,CAAC;AAFnB,IAGI,cAAc;AAAA,EACV,OAAS;AAAA;AAAA,EAET,QAAS;AACb;AAOJ,IAAO,mBAAQ,YAAO;AAtBtB,MAAAC;AAsByB,SAAAA,MAAA,eAAwB,UAAU,QAAQ;AAAA,IAE/D,WAAW,eAAe;AACtB,aAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAgBH,OAAQ;AAAA,UACJ,OAAU;AAAA,UACV,SAAU;AAAA,YACN,SAAU;AAAA,UACd;AAAA,QACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASA,cAAe;AAAA,UACX,KAAM;AAAA,YACF,MAAQ;AAAA,YACR,OAAQ;AAAA,UACZ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA,eAAe,GAAG,GAAG;AACjB,cAAQ,EAAE,UAAU,MAAM,EAAE,UAAU;AAAA,IAC1C;AAAA,IACA,sBAAsB,GAAG,GAAG;AACxB,cAAQ,EAAE,UAAU,MAAM,EAAE,UAAU;AAAA,IAC1C;AAAA,IACA,YAAY,EAAE,OAAO,KAAAC,MAAK,KAAK,IAAIF,cAAa;AArEpD,UAAAC,KAAA;AAsEQ,YACI,EAAE,WAAW,MAAM,IAAI,MACvB,UAAU,EAAE,WAAW,KAAAC,KAAI;AAC/B,UAAI,MAAM,CAAC,GACP,WAAW,KAAK,GAAG,MAAM;AAC7B,WAAK,OAAO,OAAO;AACf,eAAO,MAAM,GAAG;AAGhB,qBAAY,YAAAD,MAAA,6BAAM,UAAN,gBAAAA,IAAa,UAAb,YAAsB,6BAAM,UAA5B,YAAqC;AACjD,YAAI,cAAc,SAAS,KAAK,eAAe,OAAO,GAAG;AACrD,cAAI,KAAK,IAAI;AAAA,QACjB;AAAA,MACJ;AACA,UAAI,KAAK,KAAM,UAAU,QAAS,0BAA0B,gBAAgB,CAAC;AAC7E,UAAI,MAAM;AACN,cACI,WAAW,SAAS,UACpB,SAAS,CAAC;AACd,aAAK,IAAI,GAAG,IAAI,IAAI,QAAQ,EAAE,GAAG;AAC7B,iBAAO,IAAI,CAAC;AACZ,iBAAO,KAAK,GAAG,IAAI,WAAW,OAAO,KAAK;AAAA,QAC9C;AACA,cAAM;AAAA,MACV;AACA,aAAO;AAAA,IACX;AAAA,IACA,YAAY,EAAE,KAAAC,MAAK,KAAK,IAAIF,cAAa;AACrC,aAAO,KAAK,YAAY,EAAE,OAAQ,OAAO,KAAAE,MAAK,KAAK,CAAC;AAAA,IACxD;AAAA,IACA,cAAc,EAAE,KAAAA,MAAK,KAAK,IAAIF,cAAa;AACvC,aAAO,KAAK,YAAY,EAAE,OAAQ,SAAS,KAAAE,MAAK,KAAK,CAAC;AAAA,IAC1D;AAAA,IACA,IAAI,aAAa;AACb,aAAO;AAAA,QACH,GAAG,KAAK,cAAc;AAAA,QACtB,GAAI,KAAK,UAAUH;AAAA,QACnB,GAAG,KAAK,YAAY;AAAA,MACxB;AAAA,IACJ;AAAA,IACA,YAAY,OAAO,UAAU;AACzB,YACI,KAAU,MACV,UAAU,GAAG,WAAW,GAAG,SAAS,IAAI,cAAc;AAAA,QAClD,YAAa;AAAA,QACb,SAAa;AAAA,QACb,WAAa;AAAA;AAAA,QACb,OAAa;AAAA,QACb,QAAQ,UAAU;AAtHlC,cAAAE,KAAA;AAuHoB,mBAAS,YAAY;AACrB,yBAAS,uBAAT,mCAA8BA,MAAA,GAAG,WAAH,gBAAAA,IAAW;AACzC,yBAAe,MAAM,UAAU,kBAAkB,CAAC,KAAK,EAAE,KAAK,MAAM;AAChE,gBAAI,YAAY,IAAI,GAAG;AACnB,iBAAG,eAAe;AAAA,gBACd,MAAQ;AAAA,gBACR,OAAQ,QAAQ;AAAA,cACpB,CAAC;AAAA,YACL;AAAA,UACJ,CAAC;AACD,aAAG,WAAW,QAAQ;AAAA,QAC1B;AAAA,QACA,MAAM,QAAQ,MAAM;AAChB,mBAAS,aAAa,MAAM,CAAC,GAAG,GAAG,aAAa,GAAG,GAAG,GAAG,aAAa,IAAI,GAAG,MAAM;AACnF,iBAAO,SAAS;AAChB,iBAAO,MAAS;AAChB,iBAAO;AAAA,QACX;AAAA,MACJ,CAAC;AACL,cAAQ,OAAO,KAAK;AACpB,UAAI,CAAC,UAAU;AAIX,eAAO,QAAQ;AAAA,MACnB;AAAA,IACJ;AAAA,IACA,IAAI,cAAc;AAAA,IAAC;AAAA,EACvB,GA5HI,cADqBA,KACd,SAAQ,aADMA;AAAA;;;AClBzB,IACI,eAAe;AAAA,EACX;AAAA,EACA;AACJ;AAJJ,IAKI,YAAY;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AACZ;AARJ,IASI,mBAAmB;AAAA,EACf,MAAQ;AAAA,EACR,OAAQ;AACZ;AAZJ,IAaI,gBAAgB;AAAA,EACZ,MAAQ;AAAA,EACR,OAAQ;AACZ;AAhBJ,IAiBI,cAAc;AAAA,EACV,MAAU;AAAA,EACV,OAAU;AAAA,EACV,SAAU,CAAC,SAAS;AACxB;AArBJ,IAsBI,WAAW;AAAA,EACP,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,KAAQ;AAAA,IACJ,OAAU;AAAA,IACV,MAAU;AAAA,IACV,SAAU;AAAA,EACd;AACJ;AAgBJ,IAAqB,MAArB,cAAiC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiFpC,IAAI,WAAW;AACX,WAAO,KAAK,eAAe;AAAA,EAC/B;AAAA,EACA,IAAI,SAAS,GAAG;AACZ,WAAO,KAAK,aAAa,CAAC;AAAA,EAC9B;AAAA,EACA,cAAc;AACV,SAAK,gBAAgB,SAAS;AAAA,EAClC;AAAA,EACA,qBAAqB;AACjB,SAAK,gBAAgB,gBAAgB;AAAA,EACzC;AAAA,EACA,kBAAkB;AACd,SAAK,gBAAgB,aAAa;AAAA,EACtC;AAAA,EACA,mBAAmB;AAlJvB,QAAAE;AAmJQ,UACI,KAAK,MACL,aAAYA,MAAA,GAAG,mBAAH,gBAAAA,IAAmB,WAC/B,WAAW,OAAO,GAAG,QAAQ;AACjC,QAAI,WAAW;AACX,gBAAU,OAAO,aAAa,IAAI,QAAQ,CAAC;AAC3C,gBAAU,IAAI,aAAa,QAAQ,CAAC;AAAA,IACxC,OACK;AACD,SAAG,gBAAgB,YAAY;AAAA,IACnC;AACA,OAAG,cAAc;AAAA,EACrB;AAAA,EACA,gBAAgB;AACZ,SAAK,gBAAgB,WAAW;AAAA,EACpC;AAAA,EACA,gBAAgB;AACZ,SAAK,cAAc;AAAA,EACvB;AAAA,EACA,aAAa;AACT,SAAK,gBAAgB,QAAQ;AAAA,EACjC;AAAA,EACA,gBAAgB;AACZ,UACI,KAAK,MACL,EAAE,QAAQ,IAAI;AAClB,OAAG,YAAY,UAAU,GAAG,GAAG,WAAW,WAAW,KAAK,GAAG,UAAU,aAAa,EAAE,KAAK;AAAA,EAC/F;AACJ;AA5HI,cADiB,KACV,SAAQ;AACf,cAFiB,KAEV,QAAO;AACd,cAHiB,KAGV,SAAQ;AACf,cAJiB,KAIV,gBAAe;AAAA,EAClB,cAAe;AAAA,EACf,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOV,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOR,cAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASf,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQZ,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOb,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASV,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBV,MAAO;AACX;AAuDJ,IAAI,UAAU;AACd,IAAI,SAAS;;;ACvJb,IAAqB,OAArB,cAAkC,IAAI;AAMtC;AALI,cADiB,MACV,SAAQ;AACf,cAFiB,MAEV,QAAO;AACd,cAHiB,MAGV,gBAAe;AAAA,EAClB,YAAa;AACjB;AAIJ,KAAK,UAAU;AACf,KAAK,SAAS;;;ACnBd,IAAO,gBAAQ,YAAO;AAnBtB,MAAAC;AAmByB,SAAAA,MAAA,eAAqB,UAAU,MAAM;AAAA,IAE1D,WAAW,eAAe;AACtB,aAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAWH,OAAQ;AAAA,MACZ;AAAA,IACJ;AAAA,IACA,UAAU;AACN,YAAM,EAAE,MAAM,IAAI;AAClB,aAAO;AAAA,QACH,SAAU;AAAA,UACN;AAAA,QACJ;AAAA,QACA,OAAQ;AAAA,UACJ,WAAY,SAAS,QAAQ,UAAU;AAAA,QAC3C;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ,GA3BI,cADqBA,KACd,SAAQ,UADMA;AAAA;;;ACVzB,IACI,QAAoB;AADxB,IAEI,MAAoB;AAFxB,IAGI,oBAAoB,OAAO,mBAAmB;AAHlD,IAII,iBAAoB,CAAC,SAAS,QAAQ,WAAW,QAAQ,WAAW;AAJxE,IAKI,oBAAoB,OAAO,iBAAiB;AA+IhD,IAAqB,SAArB,cAAoC,OAAO,MAAM,eAAO,iBAAS,EAAE;AAAA,EAI/D,WAAW,eAAe;AACtB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASH,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASP,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAuBX,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMd,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMZ,cAAe;AAAA;AAAA;AAAA;AAAA;AAAA,MAKf,MAAO;AAAA,QACH,OAAU;AAAA,QACV,SAAU;AAAA,QACV,SAAU;AAAA,MACd;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,MA8BA,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMR,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAab,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAqBV,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOd,sBAAuB;AAAA,MACvB,QAAS;AAAA,QACL,QAAS;AAAA,MACb;AAAA,MACA,mBAAoB,CAAC,UAAU,QAAQ;AAAA,MACvC,uBAAwB,CAAC,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgB/B,MAAO;AAAA,QACH,SAAU,CAAC,QAAQ,SAAS;AAAA,QAC5B,OAAU;AAAA,MACd;AAAA,MACA,cAAe;AAAA,QACX,MAAe;AAAA,QACf,UAAe;AAAA,QACf,WAAe;AAAA,QACf,UAAe;AAAA,QACf,cAAe;AAAA,QACf,OAAe;AAAA,MACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKP,QAAS;AAAA;AAAA,MAET,qBAAsB;AAAA,IAC1B;AAAA,EACJ;AAAA,EACA,cAAc,SAAS,YAAY;AA7VvC,QAAAC,KAAA;AA8VQ,UACI,KAAoB,MACpB,EAAE,YAAY,IAAM,IACpB,SAAoB,MAAM,cAAc,SAAS,UAAU,GAC3D,OAAoB,GAAG,WAAW,MAAM,GACxC,OAAoB,OAAQ,KAAK,WAC3B,KAAK,SACJ,MAAAA,MAAA,YAAY,YAAY,KAAK,IAAI,MAAjC,gBAAAA,IAAoC,iBAApC,mBAAkD,WAClD,iBAAY,aAAa,iBAAzB,mBAAuC,SAAQ,SAClD;AACR,OAAG,eAAe;AAClB,WAAO;AAAA,EACX;AAAA,EACA,UAAU;AACN,UACI;AAAA,MACI;AAAA,MAAO;AAAA,MAAM;AAAA,MAAM;AAAA,MAAW;AAAA,MAAS;AAAA,MAAa;AAAA,MAAQ;AAAA,MAAM;AAAA,MAAY;AAAA,MAAa;AAAA,MAC3F;AAAA,IACJ,IAAI,MACJ,UAAU,KAAK,UAAU,MAAM,GAC/B,UAAW,WAAW,cAAe,cAAc;AACvD,WAAO;AAAA,MACH,KAAQ,OAAO,MAAM;AAAA,MACrB;AAAA,MACA;AAAA,MACA,MAAQ;AAAA,MACR,OAAQ;AAAA,QACJ,CAAC,gBAAgB,SAAS,EAAE,GAAI;AAAA,QAChC,CAAC,KAAK,GAA0B,QAAQ,KAAK;AAAA,QAC7C,aAAgC,WAAW;AAAA,QAC3C,UAAgC,QAAQ,IAAI;AAAA,QAC5C,cAAgC;AAAA,MACpC;AAAA,MACA,CAAC,cAAc,CAAC,UAAU,iBAAiB,EAAE,GAAI;AAAA,MACjD,SAAU;AAAA,QACN,OAAQ;AAAA,MACZ;AAAA;AAAA,MAEA,WAAY;AAAA,QACR,OAAY;AAAA,QACZ,WAAY;AAAA,MAChB;AAAA,MACA,UAAW;AAAA,QACP,cAAe,QAAQ,gBAAgB;AAAA;AAAA,UAEnC,eAAgB;AAAA,UAChB,KAAQ;AAAA,UACR,OAAQ;AAAA,YACJ,GAAG,aAAa,UAAU,SAAS,QAAQ;AAAA,YAC3C,UAAW,MAAM,KAAK,OAAO;AAAA,YAC7B,QAAW,IAAI,KAAK,OAAO;AAAA,UAC/B;AAAA,QACJ;AAAA,QACA,OAAQ,QAAQ;AAAA,UACZ,KAAM;AAAA,UACN,KAAM,KAAK;AAAA,UACX;AAAA,QACJ;AAAA,QACA,iBAAmB,WAAW,YAAa;AAAA,UACvC,KAAQ;AAAA,UACR,OAAQ;AAAA,YACJ,UAAuB,MAAM,KAAK,QAAQ;AAAA,YAC1C,QAAuB,IAAI,KAAK,QAAQ;AAAA,YACxC,sBAAuB;AAAA,YACvB,CAAC,QAAQ,GAAc;AAAA,UAC3B;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA,EAEA,sBAAsB,WAAW;AAC7B,UACI,KAAS,MACT,SAAS,MAAM,sBAAsB,SAAS;AAGlD,QAAI,CAAC,OAAO,MAAM;AACd,aAAO,OAAO,GAAG,QAAQ,GAAG;AAAA,IAChC;AACA,WAAO;AAAA,EACX;AAAA,EACA,SAAS;AAhbb,QAAAA;AAkbQ,KAAAA,MAAA,KAAK,UAAL,gBAAAA,IAAY;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,IAAI,aAAa;AACb,WAAO,KAAK,SAAS,CAAC,KAAK,IAAI;AAAA,EACnC;AAAA,EACA,WAAW,GAAG;AAtclB,QAAAA;AAucQ,UAAM,WAAW,CAAC;AAClB,KAAAA,MAAA,KAAK,SAAL,gBAAAA,IAAW;AAAA,EACf;AAAA;AAAA,EAEA,IAAI,eAAe;AACf,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,WAAW,MAAM;AACb,WAAQ,QAAQ,OAAQ,KAAK;AAAA,EACjC;AAAA,EACA,iBAAiB,YAAY;AACzB,QAAI,eAAe,mBAAmB;AAClC,aAAO,KAAK,eAAe,KAAK,OAAO;AAAA,IAC3C;AACA,WAAO;AAAA,EACX;AAAA,EACA,WAAW,MAAM,SAAS;AACtB,UACI,KAAK,MACL,EAAE,SAAU,WAAW,IAAI;AAC/B,QAAI,MAAM;AACN,UAAI,KAAK,UAAU;AACf,aAAK,aAAa;AAClB,aAAK,QAAQ;AACb,aAAK,cAAc,GAAG;AAAA,MAC1B,OACK;AAID,YAAI,OAAO,SAAS,YAAY,CAAC,eAAe,KAAK,SAAO,OAAO,IAAI,GAAG;AACtE,iBAAO;AAAA,YACH,WAAY;AAAA,UAChB;AAAA,QACJ;AACA,eAAO,OAAO,YAAY,SAAS,OAAO,aAAa,MAAM;AAAA,UACzD,OAAc;AAAA,UACd,aAAc,GAAG;AAAA,UACjB;AAAA,QACJ,GAAG,GAAG,cAAc,IAAI,IAAI,MAAM,EAAE;AAAA,MACxC;AAIA,WAAK,MAAM,mBAAmB;AAC9B,SAAG,gBAAgB,iBAAiB;AAIpC,WAAK,IAAI;AAAA,QACL,MAAa;AAAA,QACb,YAAa;AAAA,QACb,MAAa;AAAA,QACb,MAAa;AAAA,QACb,SAAa;AAAA,MACjB,CAAC;AAAA,IACL,OACK;AACD,yCAAS;AAAA,IACb;AACA,WAAO;AAAA,EACX;AAAA,EACA,iBAAiB,EAAE,OAAO,GAAG;AAOzB,WAAO,KAAK,QAAQ,kBAAkB;AAAA,MAClC,MAAO;AAAA,IACX,CAAC;AAAA,EACL;AAAA,EACA,aAAa;AACT,SAAK,YAAY,aAAa,iBAAiB,IAAI;AAAA,EACvD;AAAA,EACA,aAAa;AACT,SAAK,YAAY,aAAa,iBAAiB,KAAK;AAGpD,SAAK,OAAO,KAAK;AAAA,EACrB;AAAA,EACA,WAAW,MAAM;AAGb,SAAK,aAAa,QAAQ,IAAI;AAAA,EAClC;AAAA,EACA,cAAc,SAAS;AA9hB3B,QAAAA,KAAA;AA+hBQ,UAAM,KAAK;AACX,QAAI,CAAC,GAAG,cAAc,GAAG,eAAe;AACpC;AAAA,IACJ;AACA,UAAM,EAAE,KAAK,IAAI;AACjB,QAAI,SAAS;AACT,gBAAU,gBAAgB,GAAG,aAAa,qBAAqB,GAAG,WAAW,KAAK,WAAS;AACvF,YAAI,UAAU,GAAG,SAAS;AACtB,iBAAO,QAAQ,MAAM,EAAE,EAAE,UAAU;AAAA,QACvC;AAAA,MACJ,CAAC;AAAA,IACL;AACA,QAAI,MAAM;AACN,WAAK,QAAQ;AACb,WAAK,aAAa,GAAG;AACrB,UAAI,CAAC,KAAK,cAAc,UAAU;AAC9B,aAAK,WAAW,GAAG;AAAA,MACvB;AAIA,WAAK,MAAM,aAAYA,MAAA,KAAK,eAAL,OAAAA,MAAmB;AAC1C,WAAK,MAAM,YAAY,UAAK,cAAL,YAAkB;AACzC,WAAK,UAAU,SAAS,MAAM,EAAE;AAAA,IACpC;AAWA,OAAG,QAAQ,UAAU,EAAE,SAAS,YAAa,GAAG,cAAc,CAAC;AAAA,EACnE;AAAA;AAAA;AAAA,EAGA,oBAAoB,OAAO;AAtkB/B,QAAAA;AAykBQ,UAAIA,MAAA,KAAK,UAAL,gBAAAA,IAAY,kBAAiB,KAAK,SAAS;AAC3C,YAAM,eAAe;AAAA,IACzB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAgB,OAAO;AACnB,UACI,KAAe,MACf,eAAe,EAAE,MAAM;AAE3B,QAAI,GAAG,UAAU;AACb;AAAA,IACJ;AACA,OAAG,gBAAgB;AACnB,QAAI,GAAG,YAAY;AAEf,UAAI,GAAG,eAAe,GAAG,WAAW,CAAC,GAAG,sBAAsB;AAC1D;AAAA,MACJ;AACA,UAAI,CAAC,GAAG,eAAe,CAAC,GAAG,SAAS;AAChC,WAAG,OAAO,CAAC,GAAG,OAAO;AAAA,MACzB;AAGA,UAAI,GAAG,aAAa;AAChB;AAAA,MACJ;AAAA,IACJ;AAOA,OAAG,QAAQ,SAAS,YAAY;AAQhC,QAAI,CAAC,GAAG,aAAa;AACjB,SAAG,QAAQ,UAAU,YAAY;AAAA,IACrC;AAEA,QAAI,CAAC,GAAG,MAAM;AAEV,YAAM,eAAe;AACrB,YAAM,gBAAgB;AAAA,IAC1B;AACA,OAAG,gBAAgB;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,UAAU,CAAC,KAAK,SAAS;AAa5B,QAAI,KAAK,QAAQ,gBAAgB,EAAE,SAAS,YAAa,KAAK,cAAc,CAAC,MAAM,OAAO;AACtF,WAAK,UAAU;AAAA,IACnB;AAAA,EACJ;AAAA;AAEJ;AAAA;AA7fI,cAFiB,QAEV,SAAQ;AACf,cAHiB,QAGV,QAAO;AA8flB,OAAO,UAAU;AACjB,OAAO,SAAS;;;ACppBhB,IACI,gBAAgB,EAAE,MAAO,UAAU;AADvC,IAEI,eAAgB,kBAAgB,aAAa,QAAQ,MAAM,SAAS;AAFxE,IAGI,YAAgB,OAAK,EAAE;AAH3B,IAII,cAAgB,SAAO,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,aAAa,IAAI;AAJ7D,IAKI,gBAAgB;AAAA;AAAA,EAEZ,QAAS;AAAA;AAAA,EAET,OAAQ;AACZ;AAVJ,IAWI,oBAAoB;AAAA,EAChB,GAAG;AAAA;AAAA,EAEH,MAAO;AACX;AAfJ,IAgBI,aAAa,CAAC;AAAA,EACV,KAAiB;AAAA,EACjB,gBAAiB;AAAA,EACjB,UAAiB;AAAA,EACjB,SAAiB;AAAA,EACjB,YAAiB;AAAA,EACjB,KAAiB;AAAA,EACjB,UAAiB;AAAA,EACjB,KAAiB;AAAA,EACjB,YAAiB;AAAA,EACjB,UAAiB;AACrB,GAAG;AAAA,EACC,KAAiB;AAAA,EACjB,gBAAiB;AAAA,EACjB,UAAiB;AAAA,EACjB,SAAiB;AAAA,EACjB,YAAiB;AAAA,EACjB,KAAiB;AAAA,EACjB,UAAiB;AAAA,EACjB,KAAiB;AAAA,EACjB,YAAiB;AAAA,EACjB,UAAiB;AACrB,CAAC;AAtCL,IAuCI,gBAAgB;AAAA,EACZ,OAAqB;AAAA,EACrB,WAAqB;AAAA,EACrB,SAAqB;AAAA,EACrB,oBAAqB;AACzB;AA5CJ,IA6CI,mBAAmB;AAAA,EACf,MAAU;AAAA,EACV,SAAU;AACd;AAkCJ,IAAqB,WAArB,MAAqB,iBAAgB,UAAU,MAAM,gBAAQ,EAAE;AAAA,EAG3D,WAAW,YAAY;AACnB,WAAO;AAAA,MACH,wBAAyB;AAAA,QACrB,MAAoB;AAAA,QACpB,mBAAoB;AAAA,MACxB;AAAA;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,WAAW,eAAe;AACtB,WAAO;AAAA,MACH,aAAc;AAAA,MACd,MAAO;AAAA,MACP,QAAS;AAAA,QACL,MAAO;AAAA,MACX;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,MAoFA,UAAW;AAAA;AAAA;AAAA,QAGP,SAAU,CAAC,QAAQ,SAAS;AAAA,QAC5B,OAAU;AAAA,UACN,MAAO;AAAA,QACX;AAAA,MACJ;AAAA,MACA,cAAe;AAAA,QACX,oBAAqB;AAAA,UACjB,MAAY;AAAA,UACZ,QAAY;AAAA,UACZ,MAAY;AAAA,UACZ,UAAY;AAAA,UACZ,WAAY;AAAA,UACZ,YAAa;AAAA,YACT,qBAAsB;AAAA,UAC1B;AAAA,QACJ;AAAA,QACA,mBAAoB;AAAA,UAChB,SAAU;AAAA,UACV,QAAU;AAAA,UACV,YAAa;AAAA,YACT,sBAAuB;AAAA,YACvB,qBAAuB;AAAA,YACvB,UAAuB;AAAA,UAC3B;AAAA,QACJ;AAAA,QACA,qBAAsB;AAAA,UAClB,OAAU;AAAA,UACV,SAAU;AAAA,UACV,QAAU;AAAA,UACV,YAAa;AAAA,YACT,qBAAsB;AAAA,YACtB,qBAAsB;AAAA,YACtB,UAAsB;AAAA,UAC1B;AAAA,QACJ;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWZ,sBAAuB;AAAA,IAC3B;AAAA,EACJ;AAAA,EACA,WAAW,sBAAsB;AAC7B,WAAO;AAAA,MACH,YAAa;AAAA,MACb,YAAa;AAAA,IACjB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,gBAAgB,cAAc;AAEjC,UAAM,MAAM,aAAa,OAAO,QAAM,GAAG,iBAAiB,MAAM;AAChE,QAAI,QAAQ,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AACvC,QAAI,KAAK,CAAC,GAAG,MAAM,YAAY,CAAC,IAAI,YAAY,CAAC,CAAC;AAClD,WAAO;AAAA,EACX;AAAA,EACA,UAAU;AACN,UACI,KAAK,MACL,EAAE,WAAW,KAAK,IAAI,IACtB,qBAAqB,GAAG,YAAY,aAAa,GACjD,uBAAuB,GAAG,cAAc,aAAa;AACzD,WAAO;AAAA,MACH,OAAQ;AAAA,QACJ,CAAC,UAAU,IAAI,EAAE,GAAQ;AAAA,QACzB,CAAC,KAAK,IAAI,UAAU,GAAK;AAAA,QACzB,CAAC,KAAK,UAAU,GAAG,EAAE,GAAI;AAAA,MAC7B;AAAA,MACA,UAAW;AAAA,QACP,GAAG;AAAA,QACH,gBAAiB;AAAA,UACb,OAAQ;AAAA,YACJ,gBAAsB;AAAA,YACtB,qBAAsB;AAAA,UAC1B;AAAA,QACJ;AAAA,QACA,GAAG;AAAA,MACP;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,IAAI,YAAY;AACZ,WAAO,WAAW,KAAK,OAAO,aAAa,IAAI,CAAC;AAAA,EACpD;AAAA,EACA,IAAI,iBAAiB;AACjB,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,qBAAqB;AA9S7B,QAAAC;AA+SQ,YAAOA,MAAA,KAAK,UAAL,gBAAAA,IAAY;AAAA,EACvB;AAAA,EACA,IAAI,eAAe;AACf,UAAM,EAAE,SAAS,IAAI;AACrB,WAAQ,OAAO,aAAa,WAAY,WAAW,qCAAU;AAAA,EACjE;AAAA,EACA,WAAW,MAAM;AArTrB,QAAAA;AAsTQ,UAAM,WAAW,IAAI;AACrB,SAAK,qBAAqB,IAAI;AAC9B,KAAAA,MAAA,KAAK,uBAAL,gBAAAA,IAAA,WAA0B,KAAK;AAAA,EACnC;AAAA,EACA,cAAc,MAAM;AAChB,UAAM,cAAc,IAAI;AACxB,SAAK,uBAAuB;AAAA,EAChC;AAAA,EACA,qBAAqB,MAAM;AAGvB,mBAAe,MAAM,MAAM,kBAAkB,KAAK,wBAAwB,IAAI;AAG9E,QAAI,KAAK,aAAa;AAClB,WAAK,WAAW,OAAK,KAAK,qBAAqB,CAAC,CAAC;AAAA,IACrD;AAAA,EACJ;AAAA,EACA,gBAAgB,EAAE,WAAW,GAAG;AAxUpC,QAAAA;AAyUQ,KAAAA,MAAA,MAAM,oBAAN,gBAAAA,IAAA,WAAwB,GAAG;AAE3B,QAAI,YAAY;AACZ,WAAK,UAAU,UAAU;AAAA,IAC7B;AAAA,EACJ;AAAA,EACA,WAAW,MAAM;AA/UrB,QAAAA;AAgVQ,UACI,KAAK,MACL,EAAE,OAAO,IAAI,IACb,EAAE,SAAS,IAAI;AACnB,WAAO,WAAW,cAAc,IAAI,EAAE,CAAC;AACvC,QAAI,CAAC,GAAG,cAAc;AAClB,UAAI,aAAa,OAAO,UAAU;AAC9B,WAAG,eAAe,GAAG,QAAQ;AAAA,MACjC;AACA,iBAAW,QAAQ,GAAG,YAAY;AAC9B,SAAAA,MAAA,KAAK,uBAAL,gBAAAA,IAAA,WAA0B;AAAA,MAC9B;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,eAAe,UAAU,aAAa;AA9V1C,QAAAA,KAAA;AA+VQ,UACI,KAA8C,MAC9C,EAAE,WAAW,gBAAgB,aAAa,IAAI,IAC9C,EAAE,QAAQ,IAAoC,WAC9C,gBAA8CA,MAAA,GAAG,uBAAH,gBAAAA,IAAuB,OACrE,gBAA8C,CAAC;AACnD,QAAI,cAAc;AACd,UAAI,UAAU;AAEV,qDAAc;AAAA,MAClB,OACK;AAED,qBAAa,WAAW,kBAAgB;AACpC,uBAAa,oBAAoB,eAAe;AAAA,QACpD,CAAC;AAAA,MACL;AAAA,IACJ;AACA,QAAI,gBAAgB,QAAQ;AACxB,oBAAc,qBAAqB;AAAA,IACvC,WACS,gBAAgB,UAAU;AAC/B,oBAAc,sBAAsB,cAAc,oBAAoB;AAAA,IAC1E;AACA,QAAI,iBAAiB,QAAQ;AAEzB,eAAG,eAAH,mBAAe;AAEf,qBAAe,MAAM,WACjB,eAAe,MAAM,YACjB,eAAe,MAAM,YAAY;AACzC,oBAAc,qBAAqB;AAAA,QAC/B,KAAM;AAAA,UACF,CAAC,KAAK,OAAO,OAAO,GAAI;AAAA,QAC5B;AAAA,MACJ;AAAA,IACJ,WACS,iBAAiB,UAAU;AAChC,YAAM,SAAW,OAAO,aAAa,aAAa,qCAAU,WAAW;AAEvE,SAAG,aAAa;AAAA,QACZ,CAAC,UAAU,QAAQ,GAAI;AAAA,QACvB,SAAuB;AAAA,QACvB,mBAAuB;AAAA,UACnB,QAAU;AAAA,UACV,SAAU;AAAA,QACd;AAAA,MACJ;AACA,oBAAc,sBAAsB;AAAA,QAChC;AAAA,QACA,cAAe;AAAA,QACf,KAAe;AAAA,UACX,CAAC,KAAK,OAAO,iBAAiB,GAAI;AAAA,QACtC;AAAA,MACJ;AACA,oBAAc,oBAAoB;AAAA,QAC9B;AAAA,QACA,cAAe;AAAA,QACf,KAAe;AAAA,UACX,CAAC,KAAK,OAAO,eAAe,GAAI;AAAA,QACpC;AAAA,MACJ;AAAA,IACJ;AACA,OAAG,QAAQ;AACX,QAAI,cAAc;AAEd,qBAAe,UAAU,IAAI,YAAY;AAEzC,SAAG,gBAAgB;AACnB,SAAG,uBAAuB;AAAA,IAC9B,OACK;AACD,qBAAe,UAAU,OAAO,YAAY;AAC5C,SAAG,gBAAgB;AAAA,IACvB;AAAA,EACJ;AAAA,EACA,kBAAkB;AACd,SAAK,kBAAkB;AAAA,EAC3B;AAAA,EACA,qBAAqB;AACjB,SAAK,WAAW,KAAK,UAAU,GAAG,KAAK;AAAA,EAC3C;AAAA,EACA,mBAAmB;AACf,SAAK,WAAW,KAAK,UAAU,GAAG,KAAK;AAAA,EAC3C;AAAA;AAAA,EAEA,mBAAmB;AACf,UAAM,iBAAiB,GAAG,SAAS;AAEnC,QAAI,KAAK,WAAW;AAChB,WAAK,uBAAuB;AAAA,IAChC;AAAA,EACJ;AAAA,EACA,yBAAyB;AACrB,UACI,KAAK,MACL,EAAE,cAAc,gBAAgB,WAAAC,WAAU,IAAI,IAC9C,EAAE,gBAAgB,UAAU,SAAS,IAAI,GAAG,WAC5C,EAAE,oBAAoB,qBAAqB,kBAAkB,IAAI,GAAG,OACpE,MAAM,GAAG,OAAO,GAAG,OAAO,YAC1B,eAAgB,iBAAiB,QACjC,gBAAgB,MAAM,KAAK;AAAA,MACvB,eAAe,cAAc;AAAA,OAE3B,CAAC,uBAAuB,oBAAoB,SAAU,IAAI,oBAAoB,UAAU,OAAO,EAAE,QAAQ,MACzG,CAAC,qBAAqB,kBAAkB,SAAU,IAAI,kBAAkB,UAAU,OAAO,EAAE,QAAQ;AAAA,IACzG,GACA,iBAAiB,MAAM;AACnB,UAAI,aAAa,WAAW,GAAG;AAC3B,eAAO;AAAA,MACX;AAGA,YAAM,OAAO,aAAa,aAAa,SAAS,CAAC,EAAE,UAAU,cAAc;AAI3E,aAAO,KAAK,MAAM,MAAM,eAAe,cAAc,IAAI,KAAK,OAAO,KAAK,QAAQ,CAAC;AAAA,IAEvF;AACJ,QAAI,gBAAgB,aAAa,UAAU,cAAc,IAAI,UAAU,YAAY,aAAa,UAC5F,cAAc,eAAe;AAEjC,QAAI,CAACA,cAAa,CAAC,gBAAgB,GAAG,MAAM,WAAW,GAAG;AACtD;AAAA,IACJ;AAEA,OAAG,2BAA2B;AAE9B,6DAAoB;AASpB,OAAG,WAAW,CAAC,MAAM,YAAY;AAC7B,mBAAa,KAAK;AAGlB,qBAAe,KAAK;AAIpB,qBAAe,aAAa,gBAAgB,aAAa;AACzD,UAAI,KAAK,UAAU;AAEf,gBAAQ,OAAO;AAAA,MACnB,OACK;AACD,gBAAQ,OAAO,CAAC;AAChB,YAAI,KAAK,WAAW;AAEhB,cAAI,KAAK,kBAAkB;AAGvB,iBAAK,SAAS,KAAK,mBAAmB;AAAA,UAC1C;AACA,cAAI,KAAK,kBAAkB;AAGvB,iBAAK,WAAW,KAAK,mBAAmB;AAAA,UAC5C;AACA,cAAI,KAAK,WAAW;AAChB,2BAAe,gBAAgB,cAAc,CAAC,IAAI,KAAK,IAAI;AAC3D,6BAAiB,iBAAiB,eAAe,CAAC,IAAI,KAAK,IAAI;AAAA,UACnE;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,QAAI,cAAc;AACd,uBAAiB,cAAc;AAC/B,oBAAc,eAAe;AAAA,IACjC;AACA,QAAI,gBAAgB,cAAc,gBAAgB;AAC9C,UAAI,cAAc;AA6Bd,eAAO,cAAc,mBAAmB,KAAK,2CAAa,QAAQ;AAC9D,qBAAW;AAGX,aAAG,mBAAmB;AACtB,aAAG,WAAW;AACd,wBAAc,eAAe;AAC7B,sBAAY;AAEZ,WAAC,aAAa,WAAW,CAAC,IAAI,KAAK,CAAC,IAAI,QAAQ,CAAC;AAAA,QACrD;AACA,YAAI,cAAc,gBAAgB;AAE9B,6BAAmB,KAAK;AACxB,2BAAiB,cAAc;AAG/B,yBAAe,SAAQ,gBAAgB,YAAY;AACnD,eAAK,YAAY,cAAc;AAC3B,gBAAI,cAAc,gBAAgB;AAC9B,mBAAK,SAAS,CAAC;AACf,iBAAG,wBAAwB,GAAG;AAG9B,iBAAG,mBAAmB;AACtB,iBAAG,SAAS;AACZ,2BAAa,OAAO,aAAa,QAAQ,EAAE,GAAG,CAAC;AAI/C,eAAC,kBAAkB,gBAAgB,CAAC,IAAI,KAAK,QAAQ;AACrD,4BAAc,eAAe;AAAA,YACjC;AAAA,UACJ;AACA,cAAI,eAAe;AAEf,0BAAc,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,MAAM,cAAc,CAAC,IAAI,IAAI,CAAC,CAAC;AAIvF,mBAAO,qCAAU,QAAQ;AACrB,eAAC,IAAI,QAAQ,IAAI,SAAS,IAAI;AAG9B,kBAAI,cAAc,YAAY,kBAAkB,CAAC,GAAG,kBAAkB;AAClE,+BAAe;AACf,mBAAG,WAAW,GAAG,mBAAmB;AAAA,cACxC;AAAA,YACJ;AACA,eAAG,uBAAuB,aAAa;AAAA,UAC3C,OACK;AACD,+BAAmB,KAAK;AAAA,UAC5B;AAAA,QACJ;AAAA,MACJ,OACK;AACD,0BAAkB,KAAK;AACvB,4BAAoB,KAAK;AACzB,WAAG,kBAAkB;AAAA,MACzB;AAAA,IACJ,WACS,CAAC,cAAc;AACpB,6DAAmB;AACnB,iEAAqB;AAAA,IACzB;AACA,OAAG,2BAA2B;AAAA,EAClC;AAAA,EACA,uBAAuB,eAAe;AAjnB1C,QAAAD;AAknBQ,UACI,KAAK,MACL,EAAE,WAAW,mBAAmB,IAAI,IACpC,OAAO;AAAA,MACH,KAAW;AAAA,MACX,UAAW;AAAA,MACX,OAAW,CAAC;AAAA,MACZ,OAAW;AAAA,QACP,OAAW,UAAU,aAAa,cAAc;AAAA,QAChD,UAAW;AAAA,MACf;AAAA,IACJ;AAIJ,OAAG,UAAU,MAAM,cAAc,OAAO,UAAQ,GAAG,mBAAmB,IAAI,CAAC,CAAC;AAC5E,SAAIA,MAAA,mBAAmB,UAAnB,gBAAAA,IAA0B,QAAQ;AAClC,YACI,eAAe,mBAAmB,MAClC;AAAA,QACI;AAAA,QACA;AAAA,MACJ,IAAI,YAAY,MAAM,KAAK,OAAO,aAAa,OAAO,CAAC;AAC3D,mBAAa,OAAO,QAAQ;AAC5B,UAAI,aAAa,MAAM,QAAQ;AAE3B,iBAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AACxC,uBAAa,OAAO,MAAM,CAAC,GAAG,CAAC;AAAA,QACnC;AAAA,MACJ,OACK;AACD,qBAAa,IAAI,KAAK;AAAA,MAC1B;AAAA,IACJ,OACK;AACD,yBAAmB,OAAO;AAAA,IAC9B;AAAA,EACJ;AAAA,EACA,oBAAoB;AAChB,UACI,KAAgB,MAChB,EAAE,WAAW,WAAW,IAAI,IAC5B,EAAE,qBAAqB,kBAAkB,IAAI,GAAG,OAChD,YAAe,WAAW,UAAU,GAAG,GACvC,eAAe,WAAW,UAAU,GAAG;AAC3C,wBAAoB,WAAW,CAAC;AAEhC,sBAAkB,WAAW,KAAK,IAAI,KAAK,KAAK,SAAS,CAAC,KAAK,KAAK,IAAI,YAAY;AAAA,EACxF;AAAA,EACA,mBAAmB,MAAM;AACrB,UAAM,EAAE,QAAAE,QAAO,IAAI,KAAK;AACxB,WAAO,QAAQA,UAETA,QAAO,KAAK,MAAM,IAAI,IAGtB,UAAU,qBAAqB,KAAK,OAAO,CAAC;AAAA,EACtD;AAAA,EACA,UAAU,MAAM,kBAAkB;AAC9B,UAAM,YAAY,KAAK,aAAa,oBAAoB;AACxD,eAAW,QAAQ,kBAAkB;AACjC,YAAM,eAAe,KAAK,mBAAmB,WAAW,YAAY;AACpE,WAAK,MAAM,KAAK,YAAY;AAAA,IAChC;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,uBAAuB,YAAY,EAAE,MAAM,MAAM,GAAG;AAChD,UACI,OAAoB,MACpB,UAAoB,KAAK,GAAG,SAAS,GACrC,WAAoB,QAAQ,UAAU,UAAU,GAChD,EAAE,aAAa,IAAI;AAEvB,QAAI,CAAC,aAAY,mCAAS,6BAA6B,SAAS,YAAY,UAAU,KAAK,kBAAmB;AAC1G;AAAA,IACJ;AAGA,QAAI,gBAAgB,CAAC,iBAAiB,IAAI,GAAG;AACzC,mBAAa,IAAI,IAAI;AAAA,IACzB;AAEA,SAAI,mCAAS,cAAa,KAAK,QAAQ,sBAAsB;AACzD,UAAI,EAAE,KAAK,eAAe,SAAS,YAAY,KAAK,kBAAiB,6CAAc,kBAAiB;AAChG,gBAAQ,uBAAuB;AAAA,MACnC;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,aAAa,QAAQ;AACjB,QAAI,WAAW,MAAM;AACjB,eAAS;AAAA,QACL,MAAO;AAAA,QACP,KAAO;AAAA,MACX;AAAA,IACJ,WACS,WAAW,KAAK;AACrB,eAAS;AAAA,QACL,MAAO;AAAA,QACP,KAAO;AAAA,MACX;AAAA,IACJ,WACS,OAAO,WAAW,UAAU;AACjC,eAAS;AAAA,QACL,MAAO;AAAA,QACP,KAAO;AAAA,QACP,MAAO;AAAA,MACX;AAAA,IACJ;AACA,UAAM,SAAS,MAAM,aAAa,MAAM;AACxC,QAAI,KAAK,WAAW;AAChB,aAAO,QAAQ,UAAU,IAAI,KAAK,SAAS;AAAA,IAC/C;AACA,WAAO;AAAA,EACX;AACJ;AAvoBI,cADiB,UACV,SAAQ;AACf,cAFiB,UAEV,QAAO;AAFlB,IAAqB,UAArB;AA0oBA,QAAQ,UAAU;AAClB,QAAQ,SAAS;;;AChtBjB,IACI,aAAkB,OAAK,CAAC,EAAE,UAAU,SAAS,cAAc,KAAK,UAAU,YAAY,CAAC,IAAI,UAAU,WAAW,gBAAgB,UAAU,WAAW;AADzJ,IAEIC,cAAkB,CAAC;AAFvB,IAGIC,gBAAkB,CAAC;AAHvB,IAII,aAAkB,CAACD,aAAYA,WAAU;AAJ7C,IAKI,iBAAiB,CAAC,QAAQ,SAAS,UAAU;AACzC,QAAM,EAAE,SAAS,IAAI;AACrB,SAAO,OAAO;AACd,SAAO;AAAA,IACH,GAAG;AAAA,IACH,OAAQ;AAAA,MACJ,GAAG;AAAA,MACH,CAAC,KAAK,WAAW,MAAM,GAAG,KAAK,GAAI;AAAA,MACnC,gBAAmC;AAAA,MACnC,oBAAmC,CAAC;AAAA,IACxC;AAAA,EACJ;AACJ;AAjBJ,IAkBI,WAAW,CAAC,OAAO,aAAa,WAAW,UAAU;AACjD,QAAM,OAAO;AAAA,IACT;AAAA,IACA,UAAW,QAAQ,CAAC,KAAK,IAAI,CAAC;AAAA,EAClC;AACA,MAAI,aAAa;AACb,SAAK,MAAM;AAAA,EACf;AACA,SAAO;AACX;AA3BJ,IA4BI,SAAS,CAAC,YAAY,QAAQ;AAC1B,MAAI,yCAAY,WAAW;AACvB,6CAAY,UAAU,IAAI;AAAA,EAC9B,WACS,yCAAY,OAAO;AACxB,QAAI,OAAO,WAAW,UAAU,UAAU;AACtC,iBAAW,QAAQ,EAAE,CAAC,WAAW,KAAK,GAAI,EAAE;AAAA,IAChD;AACA,eAAW,MAAM,GAAG,IAAI;AAAA,EAC5B;AACJ;AAtCJ,IAuCI,aAAa;AAAA,EACT,MAAS;AAAA,EACT,QAAS;AAAA,EACT,QAAS;AACb;AA3CJ,IA4CI,gBAAgB;AAAA;AAAA,EAEZ,KAAS,CAAC,MAAM,IAAI;AAAA,EACpB,QAAS,CAAC,MAAM,KAAK;AAAA,EACrB,MAAS,CAAC,OAAO,IAAI;AAAA,EACrB,OAAS,CAAC,OAAO,KAAK;AAC1B;AAlDJ,IAmDI,aAAa;AAAA,EACT,QAAe;AAAA,EACf,cAAe;AACnB;AAiCJ,IAAqB,SAArB,MAAqB,eAAc,UAAU,MAAM,eAAO,gBAAQ,EAAE;AAAA,EAIhE,WAAW,eAAe;AACtB,WAAO;AAAA,MACH,uBAAwB,CAAC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOhC,WAAY;AAAA,QACR,OAAU;AAAA,QACV,SAAU;AAAA,QACV,SAAU;AAAA,MACd;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,MA8BA,aAAc;AAAA,QACV,OAAU;AAAA,QACV,SAAU;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkBA,SAAU;AAAA,QACN,SAAU;AAAA,UACN,OAAQ;AAAA,QACZ;AAAA,QACA,OAAQ;AAAA,MACZ;AAAA,MACA,SAAc;AAAA,MACd,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASd,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBZ,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUR,QAAS;AAAA,MACT,UAAW,CAAC,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcvB,eAAgB;AAAA,QACZ,KAAM;AAAA,UACF,MAAO;AAAA,UACP,MAAO;AAAA,QACX;AAAA,QACA,MAAO;AAAA,UACH,MAAS;AAAA,UACT,QAAS;AAAA,QACb;AAAA,QACA,MAAO;AAAA,UACH,QAAS;AAAA,QACb;AAAA,MACJ;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,MAgCA,QAAS;AAAA,QACL,OAAU;AAAA,QACV,SAAU;AAAA,MACd;AAAA,MACA,cAAe;AAAA,QACX,OAAQ;AAAA,UACJ,QAAS;AAAA,QACb;AAAA,QACA,UAAW;AAAA,UACP,QAAS;AAAA,QACb;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcA,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQT,UAAW;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,MAoDX,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeP,MAAO;AAAA,MACP,MAAO;AAAA,IACX;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,cAAc,SAAS,YAAY;AAC/B,UAAM,SAAS,MAAM,cAAc,SAAS,UAAU;AACtD,QAAI,KAAK,cAAc;AACnB,gBAAU,cAAc,KAAK,aAAa;AAAA,QACtC,oBAAqB,KAAK,aAAa;AAAA,MAC3C,CAAC;AAAA,IACL;AACA,WAAO;AAAA,EACX;AAAA,EACA,aAAa,QAAQ;AACjB,QAAI,QAAQ;AACR,UAAI,OAAO,SAAS,SAAS;AACzB,eAAO,OAAO;AAAA,MAClB,WACS,OAAO,SAAS,OAAO;AAC5B,eAAO,OAAO;AAAA,MAClB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,UAAU;AACN,UACI,KAAK,MACL,EAAE,aAAa,WAAW,UAAU,UAAU,MAAM,IAAI,IACxD,SAAS,GAAG,cAAc,GAC1B,QAAO,iCAAQ,MAAM,oBAAkB,iCAAQ,MAAM;AACzD,QAAI,OAAO,GAAG,YAAY,GACtB,MAAO;AACX,QAAI,aAAa;AACb,OAAC,KAAK,IAAI,IAAI,YAAY,cAAc,KAAK,IAAI;AAAA,IACrD;AACA,WAAO;AAAA,MACH,UAAa,YAAY,cAAc,SAAU,YAAa,IAAI;AAAA,MAClE,OAAQ;AAAA,QACJ,CAAC,uBAAuB,2CAAa,IAAI,EAAE,GAAQ;AAAA,QACnD,CAAC,oBAAoB,2CAAa,WAAW,EAAE,GAAI;AAAA,QACnD,CAAC,KAAK,OAAO,MAAM,GAAG,KAAK,GAAwB;AAAA,QACnD,uBAAmD;AAAA,QACnD,sBAAmD;AAAA,QACnD,qBAAmD,QAAQ,IAAI;AAAA,QAC/D,4BAAmD;AAAA,MACvD;AAAA,MACA,UAAW;AAAA,QACP,cAAe;AAAA,UACX,eAAgB;AAAA,UAChB,UAAgB;AAAA,UAChB,OAAgB;AAAA,YACZ,gBAAiB;AAAA,UACrB;AAAA,QACJ;AAAA;AAAA;AAAA;AAAA,QAIA,eAAgB;AAAA,QAChB,CAAC,GAAG,GAAI;AAAA,QACR,iBAAkB;AAAA,UACd,eAAgB;AAAA,UAChB,UAAgB;AAAA,UAChB,OAAgB;AAAA,YACZ,gBAAqB;AAAA,YACrB,oBAAqB;AAAA,UACzB;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,cAAc;AApdlB,QAAAE,KAAA;AAqdQ,UACI,KAAK,MACL,EAAE,SAAS,YAAY,aAAa,QAAQ,YAAY,IAAI,IAC5D,SAAS,aAAa,OAAO,GAAG,QAAQ,CAAC,GAAG,MAAM,CAAC,cAAc,uBAAG,IAAI,CAAC,EAAE,KAAK,GAAG,cAAc,GACjG,kBAAkB;AAAA,MACd,KAAS;AAAA,MACT,OAAS;AAAA,MACT,QAAS;AAAA,MACT,MAAS;AAAA,IACb;AACJ,QAAI,KAAK,QAAQ,MAAM,GAAG,MAAM,UAAU;AAC1C,QAAI,QAAQ;AACR,aAAO,OAAO,QAAQ;AACtB,aAAO,QAAQ;AAAA,QACX;AAAA,QACA,SAAU;AAAA,UACN,KAAY;AAAA,UACZ,WAAY;AAAA,UACZ,MAAa,OAAO,WAAW,WAAY,SAAS,OAAO;AAAA,UAC3D,OAAY;AAAA,YACR,GAAG;AAAA,YACH,CAAC,UAAU,IAAI,EAAE,GAAS;AAAA,YAC1B,CAAC,GAAG,OAAO,OAAO,EAAE,EAAE,GAAI;AAAA,UAC9B;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL;AACA,QAAI,SAAS;AACT,UAAI,CAAC,WAAW,OAAO,WAAW,GAAG;AACjC,eAAO;AAAA,MACX;AACA,iBAAW,IAAI,IAAI,IAAI,aAAa,WAAW,IAAI,CAAC,EAAE,OAAO,OAAO;AAAA,IACxE;AA2BA,SAAK,IAAI,OAAO,QAAQ,MAAM,KAAgB;AAC1C,YAAM,OAAO,CAAC;AACd,OAAC,UAAU,MAAM,IAAI,cAAc,IAAI,IAAI;AAC3C,UAAI,CAAC,MAAM;AACP,eAAO,SAAS,YAAY,aAAa,QAAQ;AAAA,MACrD,WACS,KAAK,aAAa,UAAU;AACjC,eAAO,SAAS,eAAe,MAAM,WAAW,GAAG,IAAI,QAAQ;AAAA,MACnE;AACA,WAAK,SAAS,SAAS,YAAY,MAAM,EAAE,IAAI,OAAO;AACtD,sBAAgB,IAAI,IAAI,IAAI;AAAA,IAChC;AAEA,WAAO,gBAAgB,KAAK,aAAa;AACzC,WAAO,gBAAgB,OAAO,aAAa;AAC3C,WAAO,gBAAgB,QAAQ,aAAa;AAC5C,WAAO,gBAAgB,MAAM,aAAa;AAC1C,UAAM,OAAO,eAAe,QAAQ,SAAS,YAAY,WAAW,GAAG,aAAa,IAAI;AACxF,SAAK,MAAM,IAAGA,MAAA,GAAG,WAAH,gBAAAA,IAAW,YAAY,QAAQ,IAAI,SAAQ,QAAG,WAAH,mBAAW,YAAY;AAChF,SAAK,MAAM,mBAAmB,IAAI;AAClC,SAAK,MAAM,KAAK,GAAG,OAAO,YAAY,CAAC,YAAY,IAAI;AACvD,WAAO;AAAA,EACX;AAAA,EACA,IAAI,YAAY;AAEZ,QAAI,KAAK,WAAW,OAAO;AACvB,aAAO;AAAA,IACX;AACA,UACI,EAAE,QAAQ,OAAO,OAAO,OAAO,IAAI,MACnC,kBAAmC,KAAK,eAAe,OAAO,OAAO,SAAS,CAAC,CAAC,EAAE,KAAK,UAAQ,CAAC,KAAK,MAAM;AAI/G,WAAO,UAAW,EAAC,iCAAQ,0BAAyB,SAAS;AAAA,EACjE;AAAA,EACA,IAAI,cAAc;AACd,WAAO;AAAA,EACX;AAAA,EACA,cAAc,OAAO;AAvjBzB,QAAAA;AAwjBQ,UAAM,KAAK;AAEX,QAAI,CAAC,GAAG,aAAa,CAAC,OAAO;AACzB;AAAA,IACJ;AACA,UACI,SAAkB,GAAG,UAAU,CAAC,GAChC,OAAkB,OAAO,QAAQ,OACjC,CAAC,QAAQ,KAAK,IAAI,GAAG,iBAAiB,EAAE,IAAK,WAAW,KAAK,CAAC,GAC9D,UAAkB,GAAG,MAAM,WAC3B,QAAkB,GAAG,aAAa,MAAM,GACxC,MAAkB,IAAI,aAAa;AAAA,MAC/B,CAAC,UAAU,IAAI,EAAE,GAAI;AAAA,MACrB,GAAG,GAAG;AAAA,IACV,GAAG,OAAO,GAAG;AACjB,QAAI,GAAG;AACP,SAAK,IAAI,QAAQ,QAAQ,MAAK,GAAG,IAAI,QAAQ,QAAQ,EAAE,GAAG;AACtD,aAAO,QAAQ,CAAC,EAAE;AAClB,UAAI,SAAS,QAAQ;AACjB,YAAI,KAAK,KAAK,YAAY,CAAC,SAAS,IAAI;AAAA,MAC5C;AAAA,IACJ;AACA,UAAM,eAAe;AAAA,MACjB,KAAW;AAAA,MACX,OAAW;AAAA,MACX,UAAW;AAAA,QACP,GAAG;AAAA,QACH;AAAA,QACA,GAAG;AAAA,MACP;AAAA,IACJ;AACA,aAAOA,MAAA,GAAG,gBAAH,gBAAAA,IAAgB,cAAc,kBAAiB;AAAA,EAC1D;AAAA,EACA,aAAa,QAAQ;AAzlBzB,QAAAA;AA0lBQ,UACI,QAAe,OAAO,WAAW,WAAY,SAAU,KAAK,SAAS,OAAO,OAC5E,cAAc;AAAA,MACV,WAAY;AAAA,MACZ,IAAY,GAAG,KAAK,EAAE;AAAA,MACtB,MAAY,wBAAS;AAAA,MACrB,OAAY;AAAA,QACR,CAAC,WAAW,OAAO,cAAc,OAAO,EAAE,GAAI;AAAA,QAC9C,kBAA8C;AAAA,QAC9C,GAAG,KAAK;AAAA,MACZ;AAAA,IACJ;AACJ,QAAI,aAAa,SAAS,KAAK,GAAG;AAC9B,aAAO,YAAY;AACnB,mBAAa,MAAM,aAAa,KAAK;AAAA,IACzC;AACA,aAAOA,MAAA,KAAK,gBAAL,gBAAAA,IAAkB,aAAa,iBAAgB;AAAA,EAC1D;AAAA;AAAA,EAEA,cAAc;AAAA,EAAC;AAAA,EACf,iBAAiB;AA9mBrB,QAAAA;AA+mBQ,UAAM,eAAe;AACrB,UACI,KAAK,MACL,EAAE,cAAc,IAAI;AACxB,KAAAA,MAAA,GAAG,yBAAH,gBAAAA,IAAA;AACA,OAAG,uBAAuB,iBAAiB,YAAY,GAAG;AAAA,MACtD,SAAU;AAAA;AAAA,MAEV,OAAU,QAAG;AAvnBzB,YAAAA;AAunB4B,gBAAAA,MAAA,GAAG,YAAH,gBAAAA,IAAA,SAAa,oBAAoB,EAAE,OAAQ,GAAG;AAAA;AAAA,IAClE,CAAC;AAAA,EACL;AAAA,EACA,mBAAmB,MAAM;AA1nB7B,QAAAA;AA2nBQ,KAAAA,MAAA,KAAK,gBAAL,gBAAAA,IAAkB,mBAAmB;AAAA,EACzC;AAAA,EACA,kBAAkB;AA7nBtB,QAAAA;AA8nBQ,UAAM,gBAAgB,GAAG,SAAS;AAClC,KAAAA,MAAA,KAAK,gBAAL,gBAAAA,IAAkB,aAAa;AAAA,EACnC;AAAA,EACA,iBAAiB,EAAE,IAAI,MAAM,KAAAC,KAAI,IAAIF,eAAa;AAjoBtD,QAAAC,KAAA;AAkoBQ,UACI,KAAK,MACL,YAAY,OAAO,WACnB,EAAE,UAAU,IAAI,IAChB,WAAW,GAAG,YAAY,EAAE,KAAAC,KAAI,CAAC,GACjC,aAAa,GAAG,cAAc,EAAE,KAAAA,KAAI,CAAC,GACrC,SAAS,aAAa;AAAA,MAAO,GAAG;AAAA,MAC5B,CAAC,GAAG,MAAM,CAAC,WAAW,uBAAG,IAAI,KAAK,EAAE,eAAe,EAAE,WAAW,KAAAA,KAAI,CAAC;AAAA,IAAC;AAC9E,QAAI,MAAM,YACN,OAAO,QAAQ;AACnB,QAAI,OAAO,SAAS,SAAS,SAAS,WAAW,QAAQ;AAErD,YAAM;AAAA;AAAA;AAAA,QAGF,SAAS;AAAA,UACL,GAAG;AAAA,UACH,GAAG,OAAO,OAAO,OAAK,EAAE,SAAS,YAAY,EAAE,KAAK,GAAG,cAAc;AAAA,QACzE;AAAA,QACA,QAAQ;AAAA,UACJ,GAAG,OAAO,OAAO,OAAK,EAAE,SAAS,QAAQ,EAAE,KAAK,GAAG,qBAAqB;AAAA,UACxE,GAAG;AAAA,QACP;AAAA,MACJ;AACA,WAAK,IAAI,GAAG,IAAI,OAAO,QAAQ,EAAE,GAAG;AAChC,kBAAQ,MAAAD,MAAA,OAAO,CAAC,GAAE,uBAAV,wBAAAA,KAA+B;AACvC,YAAI,WAAW;AACX,iBAAO,CAAC,IAAI,OAAO,CAAC,EAAE;AAAA,QAC1B;AAAA,MACJ;AACA,WAAK,IAAI,GAAG,IAAI,MAAM,QAAQ,EAAE,GAAG;AAC/B,kBAAQ,iBAAM,CAAC,GAAE,uBAAT,4BAA8B;AACtC,YAAI,WAAW;AACX,gBAAM,CAAC,IAAI,MAAM,CAAC,EAAE;AAAA,QACxB;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,WAAW,YAAY;AACvB,SAAK,cAAc;AAAA,EACvB;AAAA,EACA,IAAI,aAAa;AACb,UACI,KAAc,MACd,EAAE,QAAQ,IAAI,IACd,SAAc,aAAa,MAAM;AAAA,MAC7B,WAAY;AAAA,MACZ,WAAY;AAAA,QACR,GAAG,GAAG,uBAAuB,QAAO,UAAU;AAAA,QAC9C,gBAAmB;AAAA,QACnB,kBAAmB,GAAG,eAAe,GAAG;AAAA,MAC5C;AAAA,IACJ,GAAG,GAAG,WAAW;AACrB,QAAI,SAAS;AACT,aAAO,MAAM;AAAA,IACjB;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA,EAGA,cAAc,KAAK;AACf,WAAO,aAAa,KAAK,GAAG;AAAA,EAChC;AAAA,EACA,WAAW,KAAK;AACZ,SAAK,UAAU,QAAQ;AACvB,SAAK,SAAS;AAAA,MACV,MAAO;AAAA,IACX;AACA,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EACA,WAAW,KAAK;AACZ,SAAK,UAAU,QAAQ;AACvB,SAAK,SAAS;AAAA,MACV,MAAO;AAAA,IACX;AACA,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA;AAAA,EAEA,IAAI,aAAa;AAjtBrB,QAAAA;AAktBQ,UACI,KAAS,MACT,SAAS,aAAa,OAAO,GAAG,QAAQ,CAAC,GAAG,MAAM,CAAC,cAAc,uBAAG,IAAI,CAAC,EAAE,KAAK,GAAG,cAAc,GACjG,CAAC,QAAQ,KAAK,IAAI,GAAG,iBAAiB,GACtC,CAAC,SAAS,MAAM,MAAIA,MAAA,GAAG,gBAAH,gBAAAA,IAAgB,uBAAsB;AAC9D,WAAO;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG,OAAO,OAAO,OAAK,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;AAAA;AAAA,MAC9C,GAAI,GAAG,UAAUF;AAAA,MACjB,GAAG,OAAO,OAAO,OAAK,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ;AAAA,IAC7D;AAAA,EACJ;AAAA,EACA,aAAa,QAAQ,WAAW;AAC5B,UACI,KAAU,MACV,UAAU,GAAG,YAAY,GAAG,UAAU,IAAI,cAAc;AAAA,MACpD,YAAa;AAAA,MACb,SAAa;AAAA,MACb,WAAa;AAAA;AAAA,MACb,OAAa;AAAA,MACb,QAAQ,UAAU;AAzuBlC,YAAAE;AA0uBoB,cAAM,EAAE,KAAK,IAAI;AACjB,YAAI,CAAC,WAAW,IAAI,KAAK,CAAC,cAAc,IAAI,GAAG;AAC3C,gBAAM,IAAI;AAAA,YACN,uBAAuB,IAAI;AAAA,UAA6D;AAAA,QAChG;AACA,uBAAe,MAAM,UAAU,kBAAkB,CAAC,KAAK,EAAE,KAAK,MAAM;AAChE,cAAI,WAAW,IAAI,GAAG;AAClB,eAAG,eAAe;AAAA,cACd,MAAQ;AAAA,cACR,OAAQ,QAAQ;AAAA,YACpB,CAAC;AAAA,UACL;AAAA,QACJ,CAAC;AACD,iBAAS,YAAY;AACrB,WAAG,WAAW,QAAQ;AACtB,iBAAS,SAAS;AAClB,SAAAA,MAAA,SAAS,WAAT,gBAAAA,IAAiB;AACjB,YAAI,SAAS,UAAU;AACnB,aAAG,WAAW;AAAA,QAClB;AAAA,MACJ;AAAA,MACA,MAAM,QAAQ,MAAM;AAChB,iBAAS,aAAa,MAAM,aAAa,MAAM,GAAG,cAAc,GAAG,CAAC,GAAG,GAAG,cAAc,IAAI,GAAG,MAAM;AACrG,eAAO,SAAS;AAChB,eAAO,MAAS;AAChB,eAAO;AAAA,MACX;AAAA,MACA,UAAU,QAAQ;AACd,YAAI,MAAM,QAAQ,MAAM,GAAG;AACvB,mBAAS;AAAA,YACL,OAAQ;AAAA,UACZ;AAAA,QACJ;AACA,eAAO,UAAU;AAAA,MACrB;AAAA,IACJ,CAAC;AACL,YAAQ,OAAO,MAAM;AACrB,QAAI,CAAC,WAAW;AAIZ,aAAO,QAAQ;AAAA,IACnB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,aAAa;AA9xBrB,QAAAA;AA+xBQ,YAAOA,MAAA,KAAK,gBAAL,gBAAAA,IAAkB;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,sBAAsB;AAxyB9B,QAAAA;AAyyBQ,YAAOA,MAAA,KAAK,gBAAL,gBAAAA,IAAkB;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,YAAY;AAjzBpB,QAAAA;AAkzBQ,YAAOA,MAAA,KAAK,gBAAL,gBAAAA,IAAkB;AAAA,EAC7B;AAAA,EACA,gBAAgB,OAAO;AACnB,UACI,KAAK,MACL,EAAE,YAAY,IAAI;AACtB,OAAG,UAAU,MAAM;AACnB,YAAQ,QAAQ,KAAK;AACrB,QAAI,CAAC,eAAe,GAAG,oBAAoB,CAAC,GAAG,WAAW;AACtD,aAAO;AAAA,IACX;AACA,+CAAa,SAAS;AAAA,MAClB,WAAY;AAAA,MACZ,WAAY;AAAA,IAChB;AAAA,EACJ;AAAA,EACA,kBAAkB,aAAa,KAAK;AAChC,UAAM,KAAK;AACX,OAAG,UAAU,OAAO;AACpB,QAAI,aAAa;AACb,UAAI,gBAAgB,MAAM;AACtB,sBAAc,CAAC;AAAA,MACnB,WACS,OAAO,gBAAgB,UAAU;AACtC,sBAAc;AAAA,UACV,CAAC,cAAc,WAAW,IAAI,cAAc,MAAM,GAAI;AAAA,QAC1D;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,eAAe,YAAY,KAAK,aAAa;AAAA,MAChD,OAAW;AAAA,MACX,UAAW;AAAA,QACP,OAAQ;AAAA,MACZ;AAAA,MACA,UAAU;AACN,YAAI,GAAG,WAAW;AACd,cAAI,SAAS;AAAA,YACT,WAAY;AAAA,YACZ,WAAY;AAAA,UAChB,CAAC;AACD,aAAG,aAAa;AAAA,QACpB;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,kBAAkB,aAAa;AAC3B,UACI,KAAK,MACL,QAAQ,2CAAa;AACzB,OAAG,QAAQ;AAAA,MACP,WAAa,+BAAO,aAAY;AAAA,MAChC,aAAa,+BAAO,eAAc;AAAA,IACtC;AACA,QAAI,eAAe,GAAG,aAAa,GAAG,WAAW;AAC7C,SAAG,aAAa;AAAA,IACpB;AACA,QAAI,GAAG,cAAc,GAAG;AACpB,SAAG,YAAY;AAAA,IACnB;AAAA,EACJ;AAAA,EACA,UAAU,WAAW,SAAS;AA92BlC,QAAAA;AA+2BQ,QAAI,YAAY,QAAQ,YAAY,QAAW;AAG3C,UAAI,YAAY,OAAO;AACnB,kBAAU,YAAY,CAAC,UAAU;AAAA,MACrC,WACS,OAAO,YAAY,UAAU;AAClC,kBAAU,YAAY;AAAA,UAClB,UAAW;AAAA,QACf;AAAA,MACJ,WACS,YAAY,MAAM;AACvB,kBAAU,YAAY;AAAA,MAC1B,WACS,YAAY,MAAM;AAAA,MAE3B,WAES,eAAe,SAAS;AAC7B,qBAAa,MAAM,WAAW,OAAO;AAAA,MACzC,OACK;AACD,kBAAU,YAAY;AAAA,MAC1B;AAAA,IACJ;AACA,YAAOA,MAAA,KAAK,gBAAL,gBAAAA,IAAkB,SAAS;AAAA,EACtC;AAAA,EACA,SAAS,SAAS;AACd,WAAO,KAAK,UAAU,EAAE,WAAY,KAAK,GAAG,OAAO;AAAA,EACvD;AAAA,EACA,OAAO,SAAS;AACZ,WAAO,KAAK,UAAU,EAAE,WAAY,MAAM,GAAG,OAAO;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAgB,SAAS;AACrB,WAAO,KAAK,YAAY,KAAK,OAAO,OAAO,IAAI,KAAK,SAAS,OAAO;AAAA,EACxE;AAAA;AAAA;AAAA,EAGA,IAAI,qBAAqB;AA35B7B,QAAAA,KAAA;AA45BQ,YAAO,gBAAK,wBAAL,aAA4BA,MAAA,KAAK,cAAc,WAAnB,gBAAAA,IAA2B,SAAvD,YAA+D;AAAA,EAC1E;AAAA,EACA,IAAI,mBAAmB,GAAG;AACtB,SAAK,sBAAsB,uBAAG;AAAA,EAClC;AAAA,EACA,aAAa,QAAQ;AACjB,QAAI,CAAC,KAAK,kBAAkB;AACxB,WAAK,qBAAqB,iCAAQ;AAAA,IACtC;AAAA,EACJ;AAAA,EACA,gBAAgB,WAAW;AAt6B/B,QAAAA;AAu6BQ,UAAM,KAAK;AACX,OAAG,QAAQ,UAAU,YAAY,QAAQ,QAAQ,EAAE,iBAAiB;AACpE,OAAG,qBAAoBA,MAAA,GAAG,sBAAH,gBAAAA,IAAA;AACvB,QAAI,WAAW;AACX,SAAG,oBAAoB,YAAY,GAAG;AAAA,QAClC,SAAW,GAAG;AAAA,QACd,SAAW;AAAA,QACX,UAAW;AAAA,QACX,SAAW;AAAA,MACf,CAAC;AAED,UAAI,CAAC,GAAG,YAAY;AAChB,WAAG,aAAa,KAAK,gBAAgB,GAAG,SAAS,UAAU,WAAW,cAAc,UAAU;AAAA,MAClG;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,gBAAgB,MAAM,YAAYE,SAAQ;AACtC,WAAO,SAAS,iBAAiB,MAAM,YAAYA,OAAM;AAAA,EAC7D;AAAA,EACA,eAAe,GAAG;AACd,UAAM,KAAa,MACf,aAAa,GAAG;AAGpB,QAAI,EAAE,WAAW,GAAG,iBAAiB;AACjC,iBAAW,cAAc,GAAG;AAC5B,iBAAW,SAAS;AAAA,IACxB,WAES,EAAE,WAAW,GAAG,cAAc;AACnC,iBAAW,cAAc,GAAG;AAC5B,iBAAW,aAAa;AAAA,IAC5B,OAEK;AACD;AAAA,IACJ;AACA,OAAG,sBAAsB,MAAM,WAAW,YAAY,MAAM,CAAC;AAAA,EACjE;AAAA,EACA,IAAI,eAAe;AAGf,WAAO,KAAK,aAAa,MAAM,gBAAgB,KAAK;AAAA,EACxD;AAAA,EACA,IAAI,iBAAiB;AACjB,WAAO,KAAK,WAAW,KAAK;AAAA,EAChC;AAAA,EACA,IAAI,kBAAkB;AAt9B1B,QAAAF;AAu9BQ,UACI,KAAa,MACb,SAAa,MAAM;AACvB,QAAI,GAAG,WAAW;AACd,aAAO,KAAK,sBAAsB,mBAAiBA,MAAA,GAAG,WAAH,gBAAAA,IAAW,SAAQ,KAAK,EAAE;AAAA,IACjF;AACA,QAAI,GAAG,MAAM;AACT,aAAO,KAAK,yBAAyB;AAAA,IACzC;AACA,QAAI,GAAG,MAAM;AACT,aAAO,KAAK,4BAA4B;AAAA,IAC5C;AACA,WAAO;AAAA,EACX;AACJ;AAAA;AAp3BI,cAFiB,QAEV,SAAQ;AACf,cAHiB,QAGV,QAAO;AAHlB,IAAqB,QAArB;AAw3BA,MAAM,UAAU;AAChB,MAAM,SAAS;;;AC18Bf,IAAqB,SAArB,MAAqB,eAAc,MAAM;AAAA,EAIrC,WAAW,eAAe;AACtB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOH,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYX,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMZ,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA,MAKd,YAAa;AAAA,MACb,eAAgB;AAAA,MAChB,UAAW;AAAA,MACX,QAAW;AAAA,MACX,UAAW;AAAA;AAAA,MACX,eAAgB;AAAA,QACZ,SAAU;AAAA,UACN,MAAW;AAAA,UACX,IAAW;AAAA,UACX,UAAW;AAAA,UACX,OAAW;AAAA,QACf;AAAA,MACJ;AAAA,MACA,eAAgB;AAAA,QACZ,SAAU;AAAA,UACN,MAAW;AAAA,UACX,IAAW;AAAA,UACX,UAAW;AAAA,UACX,OAAW;AAAA,QACf;AAAA,MACJ;AAAA,MACA,eAAgB;AAAA,QACZ,MAAO;AAAA,UACH,QAAS;AAAA,YACL,SAAU;AAAA,UACd;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,YAAa;AAAA,QACT,eAAgB;AAAA,QAChB,eAAgB;AAAA,MACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOd,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOZ,gBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASjB,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMX,aAAc;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,MA4Bd,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYR,WAAY;AAAA,MACZ,OAAQ;AAAA,QACJ,OAAQ;AAAA,UACJ,KAAY;AAAA,UACZ,SAAY;AAAA,UACZ,QAAY;AAAA,UACZ,WAAY;AAAA,UACZ,QAAY;AAAA;AAAA,QAChB;AAAA,QACA,UAAW;AAAA,UACP,KAAU;AAAA,UACV,SAAU;AAAA,UACV,QAAU;AAAA,UACV,QAAU;AAAA;AAAA,QACd;AAAA,MACJ;AAAA,MACA,wBAAyB;AAAA,MACzB,MAAO;AAAA,IACX;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,eAAe;AACX,UACI,KAAiB,MACjB,EAAE,WAAW,IAAI;AACrB,OAAG,aAAgB;AACnB,OAAG,gBAAgB,GAAG;AACtB,QAAI,cAAc,GAAG,aAAa;AAE9B,UAAI,CAAC,GAAG,cAAc,UAAU;AAC5B,WAAG,WAAW;AAAA,MAClB;AACA,kBAAY,GAAG;AAAA,QACX,SAAU;AAAA,QACV,OAAU;AAAA,QACV,SAAU;AAAA,MACd,CAAC;AAAA,IACL;AACA,UAAM,aAAa;AAEnB,QAAI,GAAG,aAAa,CAAC,cAAc,UAAU,UAAU,UAAU,IAAI;AACjE,UAAI,GAAG,aAAa,MAAM;AACtB,WAAG,KAAK;AAAA,MACZ,OACK;AACD,WAAG,WAAW,MAAM,GAAG,KAAK,GAAG,GAAG,QAAQ;AAAA,MAC9C;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,gBAAgB,EAAE,WAAW,GAAG;AAhOpC,QAAAG;AAiOQ,KAAAA,MAAA,MAAM,oBAAN,gBAAAA,IAAA,WAAwB,GAAG;AAC3B,UAAM,KAAK;AAEX,QAAI,cAAc,GAAG,eAAe;AAChC,kBAAY,GAAG;AAAA,QACX,SAAW,GAAG;AAAA,QACd,UAAW,GAAG;AAAA,QACd,SAAW;AAAA,MACf,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EACA,YAAY;AACR,SAAK,cAAc;AACnB,UAAM,UAAU;AAAA,EACpB;AAAA;AAAA,EAEA,UAAU;AACN,UAAM,EAAE,eAAe,YAAY,IAAI;AACvC,WAAO;AAAA,MACH,OAAQ;AAAA;AAAA;AAAA,QAGJ,gBAAiB,QAAQ,eAAe,aAAa;AAAA,MACzD;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ;AAlQZ,QAAAA,KAAA;AAmQQ,UAAM,KAAK;AAQX,QACK,CAAC,GAAG,WAAW,GAAG,QAAQ,aAAa,MAAM;AAAA,IAE7C,GAAG,WAAW,GAAG,gBAAgB,WACpC;AAIE,SAAG,SAAS,GAAG,gBAAgB,aAAa,GAAG,YAAY;AAC3D,SAAG,OAAO;AAKV,UAAI,GAAG,iBAAiB,GAAG,wBAAwB;AAC/C,WAAG,WAAW,MAAM,GAAG,QAAQ,UAAU,IAAI,kBAAkB,GAAG,CAAC;AAAA,MACvE;AAEA,YAAM,WAAW,GAAG,MAAM,YAAUA,MAAA,GAAG,MAAM,KAAK,UAAQ,KAAK,QAAQ,MAAnC,gBAAAA,IAAsC;AAC1E,UAAI,UAAU;AACV,uBAAS,2BAAT;AACA,iBAAS,KAAK;AAAA,MAClB;AACA,aAAO,GAAG,GAAG,WAAW,EAAE;AAAA,IAC9B;AAAA,EACJ;AAAA,EACA,kBAAkB;AACd,SAAK,YAAY,CAAC,KAAK;AAAA,EAC3B;AAAA,EACA,gBAAgB,OAAO;AACnB,cAAU,cAAc,KAAK,SAAS,CAAC,aAAa,GAAG,KAAK;AAAA,EAChE;AAAA;AAAA;AAAA,EAGA,kBAAkB,OAAO;AACrB,UAAM,KAAK;AAEX,QAAI,MAAM,QAAQ,UAAU;AACxB,YAAM,yBAAyB;AAC/B,UAAI,GAAG,YAAY,GAAG,YAAY;AAC9B,WAAG,MAAM,IAAI;AAAA,MACjB,WACS,GAAG,aAAa;AACrB,YAAI,GAAG,UAAU;AACb,aAAG,YAAY,aAAa;AAAA,QAChC,OACK;AACD,aAAG,SAAS;AAAA,QAChB;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,oBAAoB,EAAE,MAAM,GAAG;AAC3B,UACI,KAAa,MACb,EAAE,MAAM,IAAK,IACb,EAAE,OAAO,IAAI;AAGjB,QAAI,MAAM,SAAS,eAAc,+BAAO,aAAY,MAAM,UAAU,MAAM,MAAM,QAAQ,SAAS,MAAM,GAAG;AACtG,YAAM,eAAe;AACrB,aAAO;AAAA,IACX;AACA,QAAI,GAAG,SAAS,WAAW,OAAM,WAAW;AACxC,YAAM,eAAe;AACrB,UAAI,GAAG,MAAM,gBAAgB;AACzB,WAAG,MAAM;AAAA,MACb,WACS,CAAC,GAAG,eAAe;AACxB,WAAG,MAAM;AAAA,MACb;AAAA,IACJ,WAES,CAAC,GAAG,KAAK,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,eAAe;AAC5D,SAAG,MAAM;AAAA,IACb;AAAA,EACJ;AAAA,EACA,IAAI,aAAa;AACb,WAAO,UAAU,UAAU,OAAM,SAAS,KAAK,KAAK,QAAQ,2BAA2B,OAAM;AAAA,EACjG;AAAA,EACA,UAAU,GAAG;AACT,UAAM,WAAW,UAAU,iBAAiB,IAAI;AAChD,UAAM,UAAU,CAAC;AAIjB,QAAI,UAAU,iBAAiB,IAAI,MAAM,YAAY,EAAE,WAAW,KAAK,SAAS;AAC5E,WAAK,MAAM;AAAA,IACf;AAAA,EACJ;AAAA,EACA,WAAW,GAAG;AAIV,UAAM,uBAAuB,WAAW,kBAAkB,WAAW,eAAe,SAAS,SAAS,gBAAgB,eAAe;AACrI,QAAI,CAAC,wBAAwB,CAAC,KAAK,SAAS,KAAK,WAAW;AACxD,WAAK,MAAM;AAAA,IACf;AACA,UAAM,WAAW,CAAC;AAAA,EACtB;AAAA,EACA,SAAS;AA/Wb,QAAAA;AAgXQ,UAAM,KAAK;AACX,QAAI,GAAG,aAAa,GAAG,OAAO;AAC1B,SAAG,6BAA6B;AAAA,IACpC;AACA,QAAI,GAAG,gBAAgB;AACnB,SAAG,MAAM;AAAA,IACb;AACA,KAAAA,MAAA,MAAM,WAAN,gBAAAA,IAAA;AAEA,OAAG,cAAc;AAAA,EACrB;AAAA,EACA,+BAA+B;AAC3B,QAAI,CAAC,KAAK,kBAAkB;AACxB,WAAK,mBAAmB,qBAAa,IAAI;AAAA,QACrC,WAAY;AAAA,QACZ,SAAY;AAAA,MAChB,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EACA,YAAY,OAAO;AAGf,QAAI,OAAO;AACP,WAAK,WAAW;AAAA,IACpB;AAAA,EACJ;AAAA,EACA,gBAAgB;AACZ,UACI,KAAK,MACL;AAAA,MACI;AAAA,MACA;AAAA,IACJ,IAAK;AAET,YAAQ,aAAa,cAAc,QAAQ,KAAK,CAAC;AAIjD,QAAI,SAAS,GAAG,WAAW;AAGvB,UAAI,OAAO,GAAG,OAAO,YAAY,OAAO,GAAG,OAAO,UAAU;AACxD,WAAG,WAAW;AACd,WAAG,SAAS;AAAA,MAChB;AACA,SAAG,UAAU,UAAU,OAAO,gBAAgB;AAC9C,SAAG,UAAU,UAAU,OAAO,uBAAuB,QAAQ,MAAM,WAAW,CAAC;AAC/E,cAAQ,UAAU,IAAI,SAAS;AAAA,IACnC,WACS,GAAG,WAAW;AACnB,cAAQ,UAAU,OAAO,SAAS;AAClC,YACI,kBAAkB,GAAG,UAAU,iBAAiB,UAAU,GAC1D,WAAkB,gBAAgB,SAAS,OAAM,YAAY,gBAAgB,gBAAgB,SAAS,CAAC,GAAG,OAAO,IAAI;AAEzH,UAAI,UAAU;AACV,iBAAS,cAAc;AAAA,MAC3B,OACK;AACD,eAAM,UAAU,UAAU,IAAI,gBAAgB;AAAA,MAClD;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,SAAS;AA/ab,QAAAA,KAAA;AAgbQ,UAAM,KAAK;AACX,KAAAA,MAAA,GAAG,qBAAH,gBAAAA,IAAA;AACA,OAAG,mBAAmB;AACtB,gBAAM,WAAN;AAEA,OAAG,cAAc;AAAA,EACrB;AAAA,EACA,sBAAsB;AAClB,SAAK,KAAK;AAAA,EACd;AAAA,EACA,mBAAmB;AACf,QAAI,KAAK,aAAa;AAClB,WAAK,gBAAgB;AAAA,IACzB;AAAA,EACJ;AAAA;AAAA,EAEA,eAAe,UAAU;AACrB,SAAK,MAAM,MAAM,SAAS,CAAC;AAAA,EAC/B;AAAA,EACA,kBAAkB,aAAa;AAC3B,SAAK,MAAM,SAAS,SAAS,CAAC;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,YAAY;AACZ,UAAM,EAAE,UAAU,IAAI;AACtB,QAAI,UAAU,uBAAuB,KAAK,SAAS;AAC/C,WAAK,UAAU,aAAa,WAAW,KAAK,OAAO;AAAA,IACvD;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,YAAY;AACnB,QAAI,CAAC,KAAK,YAAY;AAClB,WAAK,aAAa,UAAU,cAAc;AAAA,QACtC,WAAY;AAAA,MAChB,CAAC;AAED,kBAAY,GAAG;AAAA,QACX,SAAU,KAAK;AAAA,QACf,OAAU,OAAK,EAAE,eAAe;AAAA,MACpC,CAAC;AAAA,IACL;AACA,WAAO,KAAK;AAAA,EAChB;AACJ;AAAA;AAncI,cAFiB,QAEV,SAAQ;AACf,cAHiB,QAGV,QAAO;AAHlB,IAAqB,QAArB;AAucA,MAAM,UAAU;AAChB,MAAM,SAAS;;;AC/df,IACIC,SAAQ;AADZ,IAEIC,OAAQ;AAeZ,IAAqB,WAArB,cAAsC,OAAO;AAAA,EAIzC,WAAW,eAAe;AACtB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOH,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMV,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAiBZ,aAAc;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,MAiFd,MAAO;AAAA,QACH,OAAQ;AAAA,QACR,SAAU,CAAC,QAAQ,SAAS;AAAA,MAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAaP,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA,MAKd,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKP,QAAS;AAAA,MACT,uBAAwB,CAAC,MAAM;AAAA,MAC/B,MAAO;AAAA,MACP,gBAAiB;AAAA,IACrB;AAAA,EACJ;AAAA,EACA,cAAc,SAAS,YAAY;AAC/B,UAAM,SAAS,MAAM,cAAc,SAAS,UAAU;AACtD,QAAI,OAAO,KAAK,YAAY,WAAW;AACnC,WAAK,OAAO;AAAA,IAChB;AACA,SAAK,eAAe,KAAK,UAAU,SAAS;AAC5C,WAAO;AAAA,EACX;AAAA,EACA,UAAU;AA7Ld,QAAAC;AA8LQ,UACI,KAAK,MACL,EAAE,SAAS,MAAM,SAAS,WAAW,QAAQ,MAAM,YAAY,IAAI,IACnE,cAAc,OAAO,YAAY,WACjC,OAAO,GAAG,SAAS,cAAc,cAAc,KAC/C,WAAW,UAAU,cAAc,WAAW,EAAE,IAChD,mBAAmB,OAAO,SAAS;AACvC,WAAO;AAAA,MACH,KAAW,OAAO,MAAM;AAAA,MACxB,UAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,OAAQ;AAAA,QACJ,iBAAkB;AAAA,QAClB,aAAkB;AAAA;AAAA,QAElB,eAAkB,eAAaA,MAAA,GAAG,QAAH,gBAAAA,IAAS;AAAA,MAC5C;AAAA,MACA,SAAU;AAAA,QACN,OAAQ,GAAG;AAAA,MACf;AAAA;AAAA,MAEA,CAAC,cAAc,iBAAiB,EAAE,GAAI;AAAA;AAAA,MAEtC,CAAC,UAAU,kBAAkB,EAAE,GAAI;AAAA,MACnC,UAAW;AAAA,QACP,aAAc,QAAQ;AAAA;AAAA,UAElB,eAAgB;AAAA,UAChB,KAAQ;AAAA,UACR,OAAQ;AAAA,YACJ,QAAoBD,KAAI,KAAK,IAAI;AAAA,YACjC,UAAoBD,OAAM,KAAK,IAAI;AAAA,YACnC,mBAAoB;AAAA,YACpB,CAAC,GAAG,QAAQ,SAAS,GAAM,YAAY;AAAA,YACvC,CAAC,GAAG,QAAQ,WAAW,GAAI,YAAY;AAAA,YACvC,GAAG,aAAa,UAAU,MAAM,QAAQ;AAAA,UAC5C;AAAA,QACJ;AAAA,QACA,aAAc;AAAA,UACV,KAAQ;AAAA,UACR,MAAQ,mBAAmB,OAAO;AAAA,UAClC,OAAQ;AAAA,YACJ,eAA0B;AAAA,YAC1B,yBAA0B;AAAA,UAC9B;AAAA,UACA,UAAW,mBAAmB,CAAC,IAAI,IAAI;AAAA,QAC3C;AAAA,QACA,aAAc,WAAW;AAAA;AAAA,UAErB,eAAgB;AAAA,UAChB,KAAQ;AAAA,UACR,OAAQ;AAAA,YACJ,aAAoB;AAAA,YACpB,mBAAoB;AAAA,UACxB;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,OAAO;AACZ,UACI,OAAY,MACZ,OAAY,KAAK,QACjB,YAAY,EAAE,MAAM,MAAM,SAAU,KAAK,SAAS,SAAU,MAAM,UAAW,MAAM;AACvF,QAAI,OAAO,KAAK,YAAY,WAAW;AACnC,YAAM,kBAAkB,CAAC,KAAK;AAG9B,UAAI,CAAC,KAAK,eAAe,iBAAiB;AACtC,aAAK,UAAU,CAAC,KAAK;AAAA,MACzB;AAAA,IACJ,WAES,KAAK,QAAQ,MAAM,KAAK;AAC7B,WAAK,QAAQ,MAAM;AAAA,IACvB;AAIA,SAAK,QAAQ,cAAc,SAAS;AAmBpC,SAAK,QAAQ,QAAQ,SAAS;AAE9B,QAAI,KAAK,eAAe,MAAM;AAC1B,WAAK,SAAS,MAAM;AAEpB,UAAI,SAAS,CAAC,KAAK,MAAM;AACrB,cAAM,eAAe;AAAA,MACzB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,IAAI,eAAe;AACf,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,iBAAiB;AACjB,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,cAAc;AACd,UAAM,EAAE,aAAa,IAAI;AAKzB,WAAO,gBAAgB,KAAK,cAAc,iBAAiB,SAAS,QAAQ,aAAa;AAAA,EAC7F;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,UAAU,MAAM;AAAA,EAChC;AAAA,EACA,IAAI,aAAa;AAEb,UAAM,EAAE,MAAM,IAAI;AAClB,WAAO,QAAQ,CAAC,KAAK,IAAI,CAAC;AAAA,EAC9B;AAAA,EACA,IAAI,OAAO;AACP,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,KAAK,MAAM;AACX,SAAK,OAAO;AAAA,EAChB;AAAA,EACA,UAAU,GAAG;AACT,UAAM,UAAU,CAAC;AACjB,QAAI,CAAC,KAAK,YAAY,KAAK,MAAM;AAG7B,WAAK,MAAM,YAAY,GAAG;AAAA,IAC9B;AAAA,EACJ;AAAA,EACA,WAAW,GAAG;AACV,SAAK,aAAa,UAAU;AAC5B,UAAM,WAAW,CAAC;AAGlB,QAAI,KAAK,OAAO;AACZ,WAAK,KAAK,aAAa,KAAK,KAAK,WAAW,MAAM,KAAK,UAAU,GAAG,KAAK,cAAc;AAAA,IAC3F;AAAA,EACJ;AAAA,EACA,SAAS,UAAU;AACf,UAAM,EAAE,MAAM,OAAO,IAAI;AACzB,QAAI,CAAC,KAAK,YAAY,MAAM;AACxB,WAAK,iBAAiB;AACtB,aAAO,SAAS,OAAO,YAAY,KAAK,SAAS,IAAI,IAAI,KAAK,KAAK;AAAA,IACvE;AAAA,EACJ;AAAA,EACA,YAAY,OAAO;AACf,UAAM,YAAY,KAAK;AACvB,SAAK,YAAY,aAAa,iBAAiB,IAAI;AAAA,EACvD;AAAA,EACA,YAAY;AACR,QAAI,KAAK,MAAM,UAAU;AACrB,WAAK,KAAK,MAAM;AAAA,IACpB;AAAA,EACJ;AAAA,EACA,YAAY,QAAQ;AAChB,UAAM,YAAY,MAAM;AACxB,SAAK,YAAY,aAAa,iBAAiB,KAAK;AAAA,EACxD;AAAA,EACA,kBAAkB,aAAa;AAC3B,QAAI,eAAe,OAAO,KAAK,YAAY,WAAW;AAClD,WAAK,UAAU;AAAA,IACnB;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,SAAS,KAAK;AACxB,QAAI,KAAK,iBAAiB,OAAO,QAAQ,WAAW;AAChD,aAAO,QAAQ,OAAO;AAAA,IAC1B;AAAA,EACJ;AAAA,EACA,cAAc,SAAS;AACnB,UAAM,KAAK;AACX,QAAI,CAAC,GAAG,eAAe;AACnB,UAAI,GAAG,aAAa;AAChB,WAAG,0BAA0B;AAAA,MACjC;AACA,SAAG,QAAQ,aAAa,gBAAgB,OAAO;AAW/C,SAAG,QAAQ,UAAU;AAAA,QACjB,MAAU,GAAG;AAAA,QACb,MAAU;AAAA,QACV,SAAU,GAAG;AAAA,QACb,SAAU;AAAA,QACV;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EACA,wBAAwB;AACpB,UACI,KAAK,MACL,EAAE,SAAS,aAAa,QAAQ,IAAI,IACpC,SAAS,CAAC;AACd,QAAI,WAAW,aAAa;AACxB,gBAAU,gBAAgB,GAAG,aAAa,eAAe,WAAW,KAAK,kBAAgB;AACrF,YAAI,iBAAiB,SAAS;AAC1B,gBAAM,mBAAmB,OAAO,YAAY,YAAY;AACxD,8BAAoB,OAAO,KAAK,gBAAgB;AAAA,QACpD;AAAA,MACJ,CAAC;AAAA,IACL;AACA,WAAO;AAAA,EACX;AAAA,EACA,4BAA4B;AACxB,QAAI,KAAK,WAAW,KAAK,aAAa;AAClC,WAAK,sBAAsB,EAAE,QAAQ,YAAU,OAAO,UAAU,KAAK;AAAA,IACzE;AAAA,EACJ;AAAA,EACA,IAAI,cAAc;AACd,UAAM,SAAU,OAAO,KAAK,YAAY,YAAa,KAAK,eAAgB,KAAK,iBAAiB;AAChG,WAAO,UAAU,CAAC,KAAK;AAAA,EAC3B;AAAA,EACA,WAAW,QAAQ,cAAc;AAC7B,UACI,KAAK,MACL,EAAE,aAAa,aAAa,IAAI,GAAG;AAIvC,QAAI,UAAU,OAAO,WAAW,YAAY,EAAE,WAAW,WAAW,EAAE,aAAa,WAAW,EAAE,UAAU,SAAS;AAC/G,eAAS;AAAA,QACL,WAAY;AAAA,MAChB;AAAA,IACJ;AACA,WAAO,KAAK,YAAY,cAAc,QAAQ;AAAA,MAC1C,OAAW;AAAA,MACX,UAAW;AAAA,QACP,MAAa;AAAA,QACb,OAAa;AAAA,QACb,QAAa;AAAA,QACb,WAAa;AAAA,QACb,UAAa;AAAA,QACb,KAAa;AAAA;AAAA,QACb,YAAa,GAAG;AAAA,QAChB,OAAa;AAAA,QACb,WAAa,GAAG;AAAA,QAChB;AAAA,QACA;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;AAAA;AAvbI,cAFiB,UAEV,SAAQ;AACf,cAHiB,UAGV,QAAO;AAwblB,SAAS,UAAU;AACnB,SAAS,SAAS;;;AC/clB,IAAM,YAAY;AAAA,EACd,SAAa;AAAA,EACb,WAAa;AAAA,EACb,YAAa;AAAA,EACb,WAAa;AAAA,EACb,OAAa;AAAA,EACb,QAAa;AACjB;AA4FA,IAAqB,OAArB,cAAkC,MAAM;AAAA,EAYpC,WAAW,eAAe;AACtB,WAAO;AAAA,MACH,QAAS;AAAA,MACT,WAAY;AAAA,MACZ,OAAQ;AAAA,QACJ,OAAQ;AAAA,MACZ;AAAA,MACA,cAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMf,cAAe;AAAA;AAAA;AAAA,MAGf,YAAa;AAAA,MACb,aAAc;AAAA,MACd,OAAQ;AAAA;AAAA,QAEJ,OAAQ;AAAA,MACZ;AAAA,MACA,MAAO;AAAA,MACP,aAAc;AAAA,IAClB;AAAA,EACJ;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,EA4BA,UAAU,QAAQ;AACd,QAAI,MAAM,QAAQ,MAAM,GAAG;AACvB,eAAS;AAAA,QACL,WAAY;AAAA,MAChB;AAAA,IACJ;AACA,UAAM,UAAU,MAAM;AACtB,gBAAY,GAAG;AAAA,MACX,SAAa,KAAK;AAAA,MAClB,OAAa;AAAA,MACb,WAAa;AAAA,MACb,YAAa;AAAA,MACb,YAAa;AAAA,MACb,SAAa;AAAA,IACjB,CAAC;AAAA,EACL;AAAA,EACA,YAAY;AAGR,UACI,EAAE,OAAAG,QAAO,QAAQ,IAAI,MACrB,aAAqBA,OAAM,KAAK,UAAQ,KAAK,UAAU,MAAM,CAAC;AAGlE,QAAI,YAAY;AACZ,cAAQ,UAAU,IAAI,qBAAqB;AAAA,IAC/C;AAEA,UAAM,UAAUA,OAAM,KAAK,UAAQ,KAAK,IAAI;AAC5C,QAAI,SAAS;AACT,cAAQ,UAAU,IAAI,kBAAkB;AAAA,IAC5C;AACA,UAAM,UAAU,GAAG,SAAS;AAAA,EAChC;AAAA,EACA,aAAa,MAAM;AACf,QAAI,OAAO,SAAS,UAAU;AAC1B,aAAO;AAAA,QACH,MAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO,MAAM,aAAa,IAAI;AAAA,EAClC;AAAA,EACA,IAAI,eAAe;AAnNvB,QAAAC;AAoNQ,UACI,KAAc,MACd,kBAAiBA,MAAA,GAAG,eAAH,gBAAAA,IAAe,QAAQ,SAAS,UAAU,iBAAiB,GAAG,UAAU,IACzF,cAAc,GAAG,MAAM,CAAC;AAC5B,QAAI,kBAAkB,UAAU,iBAAiB,EAAE,uBAAuB,WAAW;AACjF,aAAO,MAAM;AAAA,IACjB;AACA,WAAO,GAAG;AAAA,EACd;AAAA;AAAA,EAEA,oBAAoB,EAAE,MAAM,GAAG;AAE3B,QAAI,CAAC,KAAK,cAAc,CAAC,KAAK,WAAW,KAAK,MAAM,MAAM,GAAG;AACzD,aAAO,MAAM,oBAAoB,GAAG,SAAS;AAAA,IACjD;AAAA,EACJ;AAAA;AAAA,EAEA,KAAK,SAAS;AArOlB,QAAAA,KAAA;AAsOQ,UAAM,KAAK;AAGX,UAAM,KAAK,OAAO;AAClB,QAAI,CAAC,GAAG,WAAW;AAEf,aAAAA,MAAA,GAAG,mBAAH,gBAAAA,IAAmB,SAAnB,wBAAAA,KAA0B;AAC1B,UAAI,GAAG,YAAY;AACf,WAAG,WAAW,iBAAiB;AAAA,MACnC;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,OAAO;AACH,UAAM,SAAS,MAAM,KAAK,GAAG,SAAS;AACtC,UAAM,EAAE,WAAW,IAAI;AACvB,QAAI,KAAK,aAAa,YAAY;AAC9B,iBAAW,iBAAiB;AAAA,IAChC;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,OAAO;AAChB,UAAM,WAAW,MAAM,OAAO,QAAQ,aAAa;AACnD,QAAI,UAAU;AACV,WAAK,eAAe,UAAU,KAAK;AAAA,IACvC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,OAAO;AA3QvB,QAAAA;AA4QQ,QAAI,KAAK,iBAAiB,OAAO;AAC7B,YACI,mBAAkBA,MAAA,MAAM,kBAAN,gBAAAA,IAAqB,QAAQ,cAC/C,gBAAkB,MAAM,OAAO,QAAQ,WAAW,GAClD,WAAkB,OAAO,YAAY,aAAa;AAEtD,UAAI,CAAC,UAAU,gBAAgB,iBAAiB,kBAAkB,mBAAmB,SAAS,WAAW,MAAM;AAC3G,aAAK,WAAW;AAAA,UACZ,IAAoB;AAAA,UACpB,OAAoB;AAAA,UACpB,MAAoB,CAAC,QAAQ;AAAA,UAC7B,mBAAoB;AAAA,QACxB,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,gBAAgB,UAAU;AACtB,aAAS,MAAM;AAAA,EACnB;AAAA,EACA,eAAe;AAEX,SAAK,aAAa,KAAK,UAAU;AAAA,EACrC;AAAA;AAAA,EAEA,aAAa,OAAO;AApSxB,QAAAA,KAAA;AAqSQ,UACI,KAAoB,MACpB,EAAE,cAAc,IAAI,OACpB,iBAAoB,iBAAiB,GAAG,KAAK,aAAa;AAC9D,QAAI,YAAY,yBAAyB,eAAe,OAAO,YAAY,aAAa,GACpF,iBAAiB,CAAC;AACtB,QAAI,WAAW;AACX,aAAO,UAAU,UAAU;AACvB,oBAAY,UAAU;AAAA,MAC1B;AAIA,wBAAkB,CAAC,UAAU,YAAY,UAAU,SAAS,CAAC,MAAM,MAAM,CAAC;AAAA,IAC9E;AACA,QAAI,CAAC,kBAAkB,gBAAgB;AAEnC,aAAAA,MAAA,GAAG,mBAAH,gBAAAA,IAAmB,SAAnB,wBAAAA;AAEA,UAAI,GAAG,QAAQ,SAAS,UAAU,iBAAiB,EAAE,CAAC,KAAK,UAAU,iBAAiB,EAAE,EAAE,QAAQ,aAAa,GAAG;AAC9G,WAAG,aAAa,MAAM;AAAA,MAC1B;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,OAAO;AACrB,UACI,eAAe,OAAO,YAAY,KAAK,GACvC,eAAe,gBAAgB,iBAAiB,QAAQ,EAAE,wBAAwB;AACtF,QAAI,MAAM,QAAQ,UAAU;AAExB,OAAC,eAAe,OAAO,KAAK,UAAU,MAAM;AAC5C;AAAA,IACJ;AACA,UAAM,kBAAkB,KAAK;AAE7B,QAAI,cAAc;AACd;AAAA,IACJ;AACA,QAAI,UAAU,MAAM,GAAG,GAAG;AACtB,YAAM,eAAe;AAAA,IACzB;AACA,UACI,KAAK,KAAK,SACV,SAAS,UAAU,iBAAiB,EAAE;AAC1C,SAAK,aAAa,WAAW,MAAM,GAAG,SAAS,MAAM,IAAI,SAAS,MAAM,MAAM,KAAK,KAAK;AAAA,EAC5F;AAAA,EACA,aAAa,QAAQ,KAAK,OAAO;AAC7B,UACI,KAAiB,MACjB,EAAE,WAAW,IAAI,IACjB,OAAiB,UAAU,GAAG,QAAQ,MAAM,GAC5C,eAAiB,GAAG,MAAM,cAAc,cACxC,cAAiB,GAAG,MAAM,eAAe;AAC7C,QAAI;AACJ,YAAQ,KAAK;AAAA,MACT,KAAK;AACD,mBAAW,cAAc,WAAW,SAAS,GAAG;AAChD,mBAAW,aAAa;AACxB,qBAAa,WAAW;AACxB;AAAA,MACJ,KAAK;AACD,mBAAW,cAAc,WAAW,SAAS,GAAG;AAChD,mBAAW,SAAS;AACpB,qBAAa,WAAW;AACxB;AAAA,MACJ,KAAK;AACD,YAAI,UAAU,CAAC,OAAO,UAAU,SAAS,YAAY,GAAG;AACpD,cAAI,6BAAM,MAAM;AACZ,eAAG,YAAY,QAAQ,IAAI;AAAA,UAC/B,OACK;AACD,eAAG,eAAe,QAAQ,KAAK;AAAA,UACnC;AAAA,QACJ;AACA;AAAA,MACJ,KAAK;AACD,YAAI,WAAU,6BAAM,SAAQ,CAAC,OAAO,UAAU,SAAS,YAAY,GAAG;AAElE,gBAAM,aAAa,GAAG,YAAY,QAAQ,IAAI;AAG9C,mDAAY;AAAA,QAChB,OACK;AACD,qBAAW,cAAc,WAAW,SAAS,GAAG;AAChD,qBAAW,SAAS;AACpB,uBAAa,WAAW;AAAA,QAC5B;AACA;AAAA,MACJ,KAAK;AACD,YAAI,GAAG,WAAW;AACd,aAAG,KAAK;AAAA,QACZ,WACS,CAAC,QAAQ;AACd,qBAAW,cAAc,WAAW,SAAS,GAAG;AAChD,qBAAW,SAAS;AACpB,uBAAa,WAAW;AAAA,QAC5B;AACA;AAAA,MACJ,KAAK;AACD,YAAI,UAAU,CAAC,OAAO,UAAU,SAAS,YAAY,GAAG;AACpD,aAAG,eAAe,QAAQ,KAAK;AAAA,QACnC;AACA;AAAA,IACR;AAEA,QAAI,YAAY;AAEZ,UAAI,eAAe,GAAG,SAAS;AAC3B,WAAG,aAAa,GAAG,iBAAiB,WAAW,KAAK;AAAA,MACxD,WAES,eAAe,QAAQ;AAC5B,WAAG,aAAa,GAAG,cAAc,aAAa,KAAK;AAAA,MACvD,OACK;AACD,mBAAW,MAAM;AAAA,MACrB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,QAAQ,MAAM;AAEV,QAAI,QAAQ,MAAM;AAEd,UAAI,OAAO,SAAS,UAAU;AAC1B,eAAO,KAAK,MAAM,IAAI;AAAA,MAC1B;AAEA,UAAI,KAAK,aAAa,QAAQ,cAAc;AACxC,eAAO,OAAO,YAAY,MAAM,YAAY,KAAK,cAAc;AAAA,MACnE;AAEA,aAAO,KAAK,MAAM,KAAK,OAAK,EAAE,MAAM,IAAI;AAAA,IAC5C;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAe,iBAAiB,OAAO;AACnC,UAAM,OAAO,KAAK,QAAQ,eAAe;AAIzC,QAAI,QAAQ,CAAC,KAAK,UAAU;AACxB,WAAK,SAAS,KAAK;AAAA,IACvB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,YAAY;AAvcpB,QAAAA;AAwcQ,WAAO,WAASA,MAAA,KAAK,UAAL,gBAAAA,IAAY;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,SAAS,MAAM;AAhd/B,QAAAA;AAidQ,UACI,KAAK,MACL,UAAU,KAAK;AACnB,QAAI,SAAS;AACT,UAAI,CAAC,QAAQ,WAAW;AACpB,cAAM,QAAQ,EAAE,MAAM,QAAQ;AAC9B,YAAI,GAAG,QAAQ,iBAAiB,KAAK,MAAM,OAAO;AAC9C;AAAA,QACJ;AACA,cAAIA,MAAA,KAAK,oBAAL,gBAAAA,IAAA,WAAuB,YAAW,OAAO;AACzC;AAAA,QACJ;AACA,gBAAQ,KAAK;AAIb,YAAI,QAAQ,aAAa,CAAC,QAAQ,QAAQ;AACtC,aAAG,iBAAiB;AAAA,QACxB;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,gBAAgB,SAAS;AACzB,UACI,KAAK,MACL,eAAe,GAAG;AACtB,QAAI,cAAc;AACd,YACI,WAAe,GAAG,QAAQ,YAAY,GACtC,eAAe,qCAAU;AAC7B,mDAAc;AACd,mBAAa,UAAU,OAAO,UAAU;AAAA,IAC5C;AACA,OAAG,mBAAmB;AAEtB,QAAI,SAAS;AACT,YAAM,UAAU,UAAU,YAAY,OAAO;AAC7C,cAAQ,UAAU,IAAI,UAAU;AAChC,SAAG,WAAW,eAAe,SAAS;AAAA,QAClC,SAAU,CAAC;AAAA,QACX,OAAU;AAAA,MACd,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EACA,IAAI,kBAAkB;AAClB,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,cAAc;AACV,UAAM,aAAa,KAAK;AACxB,eAAW,cAAc,KAAK;AAC9B,eAAW,SAAS;AAIpB,SAAK,sBAAsB,MAAM,WAAW,YAAY,MAAM,CAAC;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,aAAa;AArhBrB,QAAAA;AAshBQ,UAAM,SAAS,KAAK;AACpB,WAAO,WAAW,OAAO,SAAS,UAASA,MAAA,OAAO,OAAP,gBAAAA,IAAA,aAAY;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,WAAW;AACX,QAAI,OAAO;AACX,WAAO,KAAK,sBAAsB,KAAK,aAAa;AAChD,aAAO,KAAK;AAAA,IAChB;AACA,WAAO;AAAA,EACX;AAAA;AAEJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AApbI,cAViB,MAUV,SAAQ;AACf,cAXiB,MAWV,QAAO;AAqblB,KAAK,UAAU;AACf,KAAK,SAAS;;;AC7hBd,IAAI;AAgCJ,IAAqB,kBAArB,cAA6C,eAAe;AAAA,EACxD,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,WAAW,eAAe;AACtB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOH,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUP,MAAO;AAAA,QACH,SAAU,CAAC,QAAQ,SAAS;AAAA,QAC5B,OAAU;AAAA,UACN,MAAc;AAAA,UACd,UAAc;AAAA,UACd,aAAc;AAAA,UACd,OAAc;AAAA,YACV,eAAgB;AAAA,UACpB;AAAA,UACA,cAAe;AAAA,UACf,aAAe;AAAA,QACnB;AAAA,MACJ;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,MAuCA,OAAQ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOT,cAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMf,sBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKvB,QAAS;AAAA,QACL,KAAe,EAAE,SAAU,wBAAwB,QAAS,IAAI;AAAA,QAChE,cAAe;AAAA,MACnB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,WAAW,eAAe;AACtB,WAAO;AAAA,MACH,QAAS,CAAC,iBAAiB;AAAA,MAC3B,OAAS;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,aAAa,MAAM;AA5JvB,QAAAC;AA6JQ,UAAM,UAAU,GAAG,IAAI;AACvB,QAAI,GAACA,MAAA,KAAK,SAAL,gBAAAA,IAAW,SAAQ;AACpB,YAAM,IAAI,MAAM,4DAA4D;AAAA,IAChF;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,qBAAqB,OAAO;AACxB,SAAK,eAAe,KAAK;AAAA,EAC7B;AAAA,EACA,eAAe,OAAO;AAClB,SAAK,eAAe,KAAK;AAAA,EAC7B;AAAA,EACA,kBAAkB,OAAO;AACrB,SAAK,eAAe,KAAK;AAAA,EAC7B;AAAA,EACA,eAAe,OAAO;AAElB,QAAI,CAAC,MAAM,WAAW,KAAK,iBAAiB,MAAM,MAAM;AAEpD,UAAI,MAAM,YAAY,QAAQ,CAAC,cAAc,OAAO;AAChD,cAAM,eAAe;AACrB;AAAA,MACJ;AACA,YAAM,gBAAgB;AAEtB,UAAI,qBAAqB;AACrB,cAAM,EAAE,OAAO,IAAI;AAGnB,gBAAQ,YAAY,SAAS,IAAI,WAAW,MAAM,MAAM,KAAK,CAAC;AAC9D,eAAO,iBAAiB,OAAO;AAAA,UAC3B,QAAU,EAAE,OAAQ,OAAO;AAAA,UAC3B,SAAU,EAAE,OAAQ,cAAc,QAAQ;AAAA,UAC1C,SAAU,EAAE,OAAQ,cAAc,QAAQ;AAAA,QAC9C,CAAC;AACD,cAAM,iBAAiB,WAAW;AAC9B,wBAAc,eAAe;AAE7B,wBAAc,UAAU;AAAA,QAC5B;AAAA,MACJ;AACA,WAAK,wBAAwB,KAAK;AAAA,IACtC,WACS,MAAM,SAAS,WAAW,KAAK,wBAAwB,MAAM,OAAO,QAAQ,KAAK,oBAAoB,GAAG;AAC7G,WAAK,wBAAwB,OAAO,EAAE,OAAQ,OAAO,QAAS,MAAM,OAAO,CAAC;AAAA,IAChF;AAAA,EACJ;AAAA,EACA,qBAAqB,OAAO;AAExB,QAAI,CAAC,UAAU,WAAW,MAAM,MAAM,GAAG;AACrC,YAAM,EAAE,OAAO,IAAI;AACnB,UAAI,QAAQ;AACR,8BAAsB;AACtB,kBAAU,kBAAkB,QAAQ,KAAK,YAAY;AACrD,cAAM,UAAU;AAChB,cAAM,eAAe;AACrB,cAAM,yBAAyB;AAC/B,8BAAsB;AAEtB,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA,EAGA,wBAAwB,UAAU,WAAW;AACzC,UAAM,KAAK;AACX,QAAI,GAAG,UAAU;AACb;AAAA,IACJ;AACA,UAAM,OAAO,GAAG,iBAAiB,QAAQ;AACzC,QAAI,CAAC,SAAS,WAAW,CAAC,SAAS,oBAAoB,QAAQ,GAAG,eAAe,IAAI,GAAG;AAEpF,UAAI,SAAS,SAAS,iBAAiB,cAAc,YAAY,SAAS,WAAW,CAAC,SAAS,SAAS;AACpG,oBAAY,GAAG;AAAA,UACX,SAAU,SAAS;AAAA,UACnB,SAAU;AAAA,UACV,MAAU;AAAA,UACV,SAAU;AAAA,UACV,MAAM,GAAG;AACL,cAAE,eAAe;AACjB,cAAE,yBAAyB;AAAA,UAC/B;AAAA,QACJ,CAAC;AAAA,MACL;AACA,WAAK,WAAW;AAChB,SAAG,gBAAgB,MAAM,SAAS;AAAA,IACtC;AAAA,EACJ;AAAA,EACA,iBAAiB,OAAO;AACpB,WAAO;AAAA,MACH,SAAgB;AAAA,MAChB;AAAA,MACA,eAAgB,KAAK,0BAA0B,KAAK;AAAA,IACxD;AAAA,EACJ;AAAA,EACA,0BAA0B,OAAO;AAC7B,WAAO,MAAM;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,gBAAgB,OAAO,WAAW;AA1R5C,QAAAA,KAAA;AA2RQ,UACI,KAAmB,MACnB,aAAmB,UAAU,WAAW,KAAK,GAC7C,cAAmB,aAAa,GAAG,iBAAiB,KAAK,IAAI,OAC7D,WAAmB,aAAa,QAAQ,YAAY;AAGxD,KAAAA,MAAA,GAAG,UAAH,gBAAAA,IAAU;AACV,QAAI,GAAG,UAAU;AACb;AAAA,IACJ;AAQA,OAAG,cAAc;AACjB,UACI;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAY,IACZ,WAAY,UAAU,SAAS,YAAY,aAAa,EAAE;AAC9D,YAAQ,OAAO,aAAa;AAAA,MACxB,QAAY,qCAAU,WAAU,CAAC,SAAS,UAAU,GAAG,SAAS,UAAU,CAAC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAAA,MACtG,MAAY;AAAA,MACZ,OAAY,CAAC;AAAA,MACb,WAAY,OAAO;AAAA,IACvB,CAAC;AAED,OAAG,gCAAgC,WAAW;AAE9C,YAAQ,MAAM,YAAY,OAAO,GAAG,SAAS;AAG7C,OAAG,oBAAoB,WAAW;AAElC,SAAK,CAAC,gBAAgB,MAAM,GAAG,SAAS,cAAc,QAAQ,CAAC,WAAW,CAAC,MAAM,UAAU,GAAG,mBAAmB,WAAW,GAAG;AAC3H,SAAG,sBAAsB,WAAW;AAEpC,UAAI,GAAG,sBAAsB,WAAW,MAAM,OAAO;AACjD,cACI,EAAE,KAAK,IAAY,IACnB,EAAE,aAAa,IAAI,MACnB,EAAE,OAAAC,OAAM,IAAW;AAEvB,YAAI,SAAS,OAAO,QAAQ,GAAG,IAAI,kBAAkB,WAAW;AAChE,YAAI,aAAa,UAAU,MAAM,GAAG;AAEhC,mBAAS,UAAU;AACnB,mBAAS,MAAM;AAAA,QACnB;AACA,YAAI,WAAW,OAAO;AAIlB,cAAI,cAAc;AACd,iBAAK,OAAO,YAAY;AACxB,wBAAY,QAAQ,YAAY,EAAE,QAAQ,OAAK,EAAE,QAAQ,CAAC;AAAA,UAC9D;AACA,eAAK,eAAe,KAAK,IAAI,GAAI,MAAM,QAAQA,MAAK,IAAIA,SAAQ,KAAK,mBAAmBA,MAAK,CAAE;AAC/F,eAAK,OAAO,aAAa;AAAA,YACrB,QAAS,YAAY;AAAA,YACrB,OAAS;AAAA,UACb,CAAC;AAED,mBAAG,sBAAH;AACA,aAAG,oBAAoB,YAAY,GAAG;AAAA,YAClC,SAAY,OAAO;AAAA,YACnB,WAAY,MAAM,KAAK,KAAK;AAAA,YAC5B,SAAY;AAAA,YACZ,MAAY;AAAA,UAChB,CAAC;AAKD,cAAI,UAAU;AACV,qBAAS,eAAe;AAExB,qBAAS,UAAU;AAAA,UACvB;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,YAAY;AACZ,QAAI,CAAC,KAAK,YAAY;AAClB,YACI,KAAiB,MACjB,EAAE,WAAW,IAAI,IACjB,YAAkB,GAAG,aAAa,QAAQ,OAAO,CAAC,GAAG,GAAG,KAAK;AAEjE,iBAAW,OAAO,WAAW;AACzB,cAAM,OAAO,UAAU,GAAG;AAC1B,YAAI,MAAM;AAGN,cAAI,cAAe,OAAO,YAAa;AACnC,sBAAU,GAAG,IAAI,OAAO,SAAS,WAAW,QAAQ,MAAM,QAAQ,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,IAAI,WAAW,GAAG;AAAA,UACpH,WACS,SAAS,MAAM;AACpB,mBAAO,UAAU,GAAG;AAAA,UACxB;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,SAAS;AAtZ7B,QAAAD;AAuZQ,KAAAA,MAAA,KAAK,SAAL,gBAAAA,IAAW,KAAK;AAAA,EACpB;AAAA,EACA,gCAAgC,aAAa;AAzZjD,QAAAA,KAAA;AA2ZQ,WAAAA,MAAA,KAAK,QAAO,WAAW,aAAa,WAAW,KAAK,IAAI,CAAC,YAAzD,wBAAAA,KAAmE;AAAA,EACvE;AAAA,EACA,mBAAmB,aAAa;AAK5B,WAAO,OAAO,OAAO,YAAY,KAAK,EAAE,KAAK,UAAQ,QAAQ,CAAC,KAAK,MAAM;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,iBAAiB;AACb,WAAO;AAAA,EACX;AAAA,EACA,sBAAsB,aAAa;AAAA,EAAC;AAAA,EACpC,sBAAsB,aAAa;AAAA,EAAC;AAAA,EACpC,oBAAoB,aAAa;AA9arC,QAAAA;AA+aQ,KAAAA,MAAA,YAAY,UAAZ,gBAAAA,IAAmB;AAAA,EACvB;AAAA;AAAA;AAAA,EAGA,mBAAmB,cAAc;AAC7B,WAAO,gBAAgB,KAAK,OAAO;AAAA,EACvC;AAAA,EACA,WAAW,MAAM,SAAS;AACtB,UACI,KAAK,MACL;AAAA,MACI;AAAA,MACA;AAAA,IACJ,IAAI;AACR,QAAI,MAAM;AACN,aAAO,KAAK,YAAY,SAAS,OAAO,KAAK,aAAa;AAAA,QACtD,OAAc;AAAA,QACd,aAAc,OAAO;AAAA,QACrB,OAAO,WAAW;AACd,iBAAO,QAAQ,GAAG,IAAI,YAAY,SAAS;AAAA,QAC/C;AAAA,QACA,SAAS,WAAW;AAChB,iBAAO,QAAQ,GAAG,IAAI,kBAAkB,SAAS;AAAA,QACrD;AAAA,QACA,YAAY;AACR,aAAG,OAAO;AAAA,QACd;AAAA;AAAA,QAEA,aAAa,WAAW;AACpB,iBAAO,OAAO,WAAW,GAAG,WAAW;AAAA,QAC3C;AAAA,QACA,OAAO,EAAE,QAASE,MAAK,GAAG;AACtB,aAAG,YAAY,OAAOA;AACtB,iBAAO,QAAQ,GAAG,IAAI,YAAY,GAAG,WAAW;AAAA,QACpD;AAAA,MACJ,GAAG,IAAI,IAAI,MAAM,EAAE;AAAA,IACvB,WACS,mCAAS,UAAU;AACxB,cAAQ,QAAQ;AAAA,IACpB;AAAA,EACJ;AAAA;AAEJ;AACA,gBAAgB,SAAS;;;AC7czB,IAAO,8BAAQ,YAAU,MAAM,6BAA6B,UAAU,MAAM;AAAA,EACxE,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,oBAAoB;AAChB,UAAM,KAAK;AAEX,QAAI,CAAC,GAAG,MAAM;AACV,SAAG,OAAO;AAAA,IACd;AACA,QAAI,GAAG,SAAS,eAAe,CAAC,GAAG,YAAY;AAC3C,YAAM,IAAI,MAAM,6CAA6C;AAAA,IACjE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,kBAAkB,OAAO;AACrB,UAAM,KAAK;AAEX,QAAI,CAAC,GAAG,kBAAkB,CAAC,MAAM,OAAO,QAAQ,GAAG,cAAc,GAAG;AAEhE,YAAM,UAAU,UAAU,YAAY,MAAM,QAAQ,GAAG,YAAY,GAAG,YAAY;AAClF,UAAI,SAAS;AACT,cAAM,MAAM,QAAQ,sBAAsB;AAC1C,WAAG,UAAU;AAAA,UACT;AAAA,UACA,OAAmB;AAAA,UACnB,QAAmB;AAAA,UACnB,SAAmB,MAAM,QAAQ,IAAI;AAAA,UACrC,SAAmB,MAAM,QAAQ,IAAI;AAAA,UACrC,kBAAmB;AAAA,YACf,QAAS,QAAQ;AAAA,YACjB,MAAS,QAAQ;AAAA,YACjB,MAAS,QAAQ;AAAA,UACrB;AAAA,QACJ;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA,EACA,mBAAmB,OAAO;AAjE9B,QAAAC;AAkEQ,UACI,KAA8B,MAC9B,EAAE,SAAS,eAAe,IAAI,IAC9B,EAAE,SAAU,YAAY,IAAM,SAC9B,aAA8B,YAAY,UAAU,IAAI,GACxD,gBAA8B,iDAAgB,QAAQ,QAAQ;AAElE,eAAW,UAAU,IAAI,GAAG,cAAc,GAAG,WAAW;AAExD,MAAC,iDAAgB,cAAa,UAAU,eAAe,WAAW,GAAG,YAAY,UAAU;AAC3F,YAAQ,YAAY;AAEpB,YAAQ,WAAW;AACnB,gBAAY,UAAU,IAAI,GAAG,kBAAkB;AAE/C,SAAIA,MAAA,+CAAe,kBAAf,gBAAAA,IAA8B,QAAQ,kBAAkB;AACxD,iBAAW,MAAM,SAAS,eAAe,qBAAqB;AAAA,IAClE;AAAA,EACJ;AAAA,EACA,uBAAuB,OAAO;AAC1B,UACI,KAAuC,MACvC,EAAE,QAAQ,IAA6B,IACvC,EAAE,SAAU,aAAa,UAAU,IAAI,SACvC,MAAuC,YAAY,sBAAsB;AAE7E,QAAI,GAAG,sBAAsB;AACzB,gBAAU,MAAM,QAAS,IAAI,QAAQ;AACrC,gBAAU,MAAM,SAAS,IAAI,SAAS;AACtC,gBAAU,eAAe,QAAQ,WAAW,IAAI,MAAM,IAAI,GAAG;AAAA,IACjE,OACK;AACD,YAAM,WAAW,UAAU,sBAAsB;AACjD,aAAO,OAAO,SAAS;AAAA,QACnB,SAAU,SAAS,QAAQ;AAAA,QAC3B,SAAU,SAAS,SAAS;AAAA,MAChC,CAAC;AACD,gBAAU,eAAe,WAAW,MAAM,SAAS,MAAM,OAAO;AAAA,IACpE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,oBAAoB,OAAO;AA/G/B,QAAAA;AAgHQ,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAClB,QAAI,CAAC,QAAQ,WAAW,CAAC,QAAQ,eAAe;AAC5C;AAAA,IACJ;AACA,UACI,mBAAmB,UAAU,YAAY,QAAQ,eAAe,GAAG,YAAY,YAAY,GAC3F,iBAAmBA,MAAA,QAAQ,aAAR,gBAAAA,IAAkB,SAAS,UAAU,iBAAiB,QAAQ,QAAQ;AAC7F,QAAI,oBAAoB,UAAU,aAAa,QAAQ,SAAS,gBAAgB,GAAG;AAE/E;AAAA,IACJ;AAIA,QAAI,eAAe;AACf,2BAAa,mBAAmB;AAAA,IACpC;AACA,QAAI,oBAAoB,QAAQ,OAAO;AACnC,SAAG,WAAW,kBAAkB,KAAK;AAAA,IACzC,OACK;AAED,SAAG,eAAe;AAAA,IACtB;AACA,QAAI,eAAe;AACf,2BAAa,kBAAkB;AAAA,IACnC;AACA,UAAM,eAAe;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAoB,OAAO;AACvB,UACI,KAAc,MACd,EAAE,QAAQ,IAAI,IAEd,EAAE,UAAU,WAAW,OAAO,WAAW,cAAc,iBAAiB,IAAI;AAChF,QAAI,UAAU;AAEV,cAAQ,QAAQ,QAAQ,UAAU,aAAa,GAAG,8BAA8B,MAAM,OAAO,QAAQ,GAAG,0BAA0B;AAAA,OAEzH,aAAa,gBAAgB,iBAAiB,WAAW,UAAU;AAC5E,cAAQ,WAAW,CAACC,SAAQ,QAAQ,UAAU;AAE1C,YAAI,CAACA,UAAS,GAAG,SAAS;AACtB,aAAG,eAAe;AAAA,QACtB;AACA,iBAAS,UAAU,OAAO,GAAG,kBAAkB;AAC/C,kBAAU,OAAO;AACjB,WAAG,MAAM;AAAA,MACb;AAGA,cAAQ,QAAQ;AAChB,SAAG,QAAQ,QAAQ,EAAE,SAAS,MAAM,CAAC;AACrC,UAAI,CAAC,QAAQ,OAAO;AAEhB,gBAAQ,SAAS;AAAA,MACrB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,mBAAmB,UAAU,OAAO,QAAQ,MAAM,SAAS,OAAO;AAC9D,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAClB,QAAI,QAAQ,UAAU;AAClB,cAAQ,SAAS,UAAU,OAAO,GAAG,kBAAkB;AACvD,cAAQ,UAAU,OAAO;AACzB,SAAG,eAAe;AAAA,IACtB;AACA,QAAI,CAAC,QAAQ;AACT,SAAG,QAAQ,UAAU,SAAS,SAAS,EAAE,SAAS,MAAM,CAAC;AAAA,IAC7D;AACA,OAAG,MAAM;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,qBAAqB,OAAO;AACxB,UACI,KAAc,MACd,EAAE,QAAQ,IAAI,IACd,QAAc,QAAQ;AAC1B,QAAI,OAAO,MAAM,QAAQ,QAAQ,SAC7B,OAAO,MAAM,QAAQ,QAAQ;AACjC,QAAI,OAAO,GAAG,SAAS,UAAU;AAC7B,aAAO,KAAK,IAAI,GAAG,MAAM,IAAI;AAAA,IACjC;AACA,QAAI,OAAO,GAAG,SAAS,UAAU;AAC7B,aAAO,KAAK,IAAI,GAAG,OAAO,MAAM,aAAa,IAAI;AAAA,IACrD;AACA,QAAI,OAAO,GAAG,SAAS,UAAU;AAC7B,aAAO,KAAK,IAAI,GAAG,MAAM,IAAI;AAAA,IACjC;AACA,QAAI,OAAO,GAAG,SAAS,UAAU;AAC7B,aAAO,KAAK,IAAI,GAAG,OAAQ,MAAM,cAAc,IAAI;AAAA,IACvD;AACA,QAAI,GAAG,OAAO;AACV,gBAAU,cAAc,OAAO,IAAI;AAAA,IACvC,WACS,GAAG,OAAO;AACf,gBAAU,cAAc,OAAO,IAAI;AAAA,IACvC,OACK;AACD,gBAAU,eAAe,OAAO,MAAM,IAAI;AAAA,IAC9C;AACA,QAAI;AACJ,QAAI,MAAM,SAAS,aAAa;AAC5B,YAAM,QAAQ,MAAM,eAAe,CAAC;AACpC,sBAAgB,UAAU,iBAAiB,MAAM,SAAS,MAAM,OAAO;AAAA,IAC3E,OACK;AACD,sBAAgB,MAAM;AAAA,IAC1B;AACA,YAAQ,gBAAgB;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,eAAe,OAAO;AAC7B,UACI,EAAE,QAAQ,IAAI,MACd,cAAc,QAAQ,UACtB,SAAc,cAAc;AAChC,QAAI,kBAAkB,aAAa;AAE/B,YAAM,UAAU,UAAU,KAAK,aAAa,EAAE,OAAO;AACrD,UAAK,KAAK,SAAS,MAAM,QAAQ,WAAa,CAAC,KAAK,SAAS,MAAM,QAAQ,SAAU;AAEjF,eAAO,aAAa,aAAa,aAAa;AAC9C,gBAAQ,eAAe;AAAA,MAC3B,OACK;AAED,YAAI,cAAc,oBAAoB;AAElC,cAAI,cAAc,uBAAuB,aAAa;AAClD,oBAAQ,eAAe,cAAc;AACrC,mBAAO,aAAa,aAAa,cAAc,kBAAkB;AAAA,UACrE,WACS,CAAC,QAAQ,gBAAgB,YAAY,cAAc,qBAAqB,aAAa;AAE1F,oBAAQ,eAAe,cAAc;AAAA,UACzC;AAAA,QACJ,OACK;AACD,iBAAO,YAAY,WAAW;AAC9B,kBAAQ,eAAe;AAAA,QAC3B;AAAA,MACJ;AACA,cAAQ,YAAY;AAAA,IACxB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB;AACb,UACI,EAAE,QAAQ,IAAS,MACnB,EAAE,SAAS,IAAQ,SACnB,EAAE,QAAQ,KAAK,IAAI,QAAQ;AAE/B,QAAI,MAAM;AACN,YAAM,SAAS,KAAK,oBAAoB,YAAa,CAAC,QAAQ,aAAa,OAAO;AAClF,UAAI,CAAC,QAAQ;AACT,eAAO,aAAa,UAAU,IAAI;AAAA,MACtC;AAAA,IACJ,OACK;AACD,aAAO,YAAY,QAAQ;AAAA,IAC/B;AAEA,YAAQ,YAAY;AAAA,EACxB;AAAA;AAEJ;;;AC5SA,IAAM,WAAW,EAAE,aAAc,GAAG,aAAc,EAAE;AAOpD,IAAO,8BAAQ,YAAU,MAAM,4BAA4B,kBAAU,UAAU,IAAI,EAAE;AAAA,EACjF,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA,EACA,WAAW,eAAe;AACtB,WAAO;AAAA,MACH,aAAc;AAAA;AAAA;AAAA,MAGd,qBAAsB;AAAA,IAC1B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,oBAAoB;AAChB,UAAM,KAAK;AACX,QAAI,CAAC,GAAG,sBAAsB,GAAG,gBAAgB;AAC7C,SAAG,qBAAqB,aAAW,QAAQ,QAAQ,GAAG,cAAc;AAAA,IACxE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,kBAAkB,OAAO;AACrB,UAAM,UAAU,KAAK,UAAU,KAAK;AACpC,QAAI,SAAS;AACT,WAAK,UAAU;AAAA,QACX,OAAQ;AAAA,QACR;AAAA,QACA,YAAe,MAAM;AAAA,QACrB,YAAe,MAAM;AAAA,QACrB,cAAe,MAAM;AAAA,QACrB,cAAe,MAAM;AAAA,MACzB;AACA,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA,EACA,UAAU,OAAO;AACb,WAAO,MAAM,OAAO,QAAQ,KAAK,cAAc;AAAA,EACnD;AAAA,EACA,KAAK,SAAS;AACV,QAAI,KAAK,gBAAgB,YAAY;AAEjC,aAAO,WAAW,QAAQ,MAAM,MAAM,EAAE;AAAA,IAC5C,OACK;AACD,aAAO,UAAU,cAAc,OAAO;AAAA,IAC1C;AAAA,EACJ;AAAA,EACA,KAAK,SAAS;AACV,QAAI,KAAK,gBAAgB,YAAY;AACjC,aAAO,WAAW,QAAQ,MAAM,KAAK,EAAE;AAAA,IAC3C,OACK;AACD,aAAO,UAAU,cAAc,OAAO;AAAA,IAC1C;AAAA,EACJ;AAAA,EACA,MAAM,SAAS;AACX,QAAI,KAAK,gBAAgB,YAAY;AACjC,aAAO,CAAC,QAAQ,YAAY,QAAQ,SAAS;AAAA,IACjD,OACK;AACD,aAAO,UAAU,eAAe,OAAO;AAAA,IAC3C;AAAA,EACJ;AAAA,EACA,MAAM,SAAS,GAAG,GAAG;AACjB,QAAI,KAAK,qBAAqB;AAC1B;AAAA,IACJ;AACA,QAAI,KAAK,gBAAgB,YAAY;AACjC,cAAQ,MAAM,OAAO,IAAI;AACzB,cAAQ,MAAM,MAAO,IAAI;AAAA,IAC7B,OACK;AACD,gBAAU,eAAe,SAAS,GAAG,CAAC;AAAA,IAC1C;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,mBAAmB,OAAO;AACtB,UACI,KAA2C,MAC3C,EAAE,SAAS,cAAc,cAAc,IAAI,IAE3C,aAA2C,GAAG,aAAa,GAAG,cAAe,GAAG,eAAe,SAAS;AAC5G,QAAI,UAAU,QAAQ,aAAa,QAAQ;AAC3C,UACI,UAAgB,SAChB,gBAAgB,QAAQ;AAC5B,QAAI,GAAG,aAAa;AAChB,YACI,iBAA4C,gBAAgB,QAAQ,cAAc,aAAa,IAAI,SACnG,EAAE,OAAO,QAAQ,GAAI,QAAQ,GAAI,OAAO,IAAI,UAAU,KAAK,gBAAgB,UAAU,MAAM,UAAU,CAAC;AAC1G,gBAAU,GAAG,YAAY,OAAO;AAChC,UAAI,IAAI,QAAQ,IAAI;AAEpB,UAAI,GAAG,sBAAsB;AACzB,gBAAQ,MAAM,QAAS,GAAG,KAAK;AAC/B,gBAAQ,MAAM,SAAS,GAAG,MAAM;AAAA,MACpC;AACA,cAAQ,UAAU,IAAI,GAAG,cAAc,GAAG,WAAW;AAErD,cAAQ,UAAU,OAAO,WAAW,cAAc,WAAW;AAC7D,iBAAW,YAAY,OAAO;AAC9B,UAAI,CAAC,GAAG,wBAAwB,eAAe;AAC3C,cAEI,YAAuC,QAAQ,sBAAsB,GACrE,EAAE,GAAI,aAAa,GAAI,YAAY,IAAI,WAAW,sBAAsB,GACxE,SAAuC,MAAM,UAAU,aAEvD,SAAuC,MAAM,UAAU,eAAe,eAAe,SAAS,OAAO,SAAS,KAAK,sBAAsB,EAAE,IAAI;AACnJ,YAAI,SAAU,UAAU,QAAQ;AAChC,YAAI,SAAU,UAAU,SAAS;AAEjC,gBAAQ,aAAa,MAAM;AAC3B,gBAAQ,aAAa,MAAM;AAAA,MAC/B;AACA,SAAG,MAAM,SAAS,GAAG,CAAC;AACtB,cAAQ,UAAU,IAAI,iBAAiB;AACvC,UAAI,GAAG,qBAAqB;AACxB,gBAAQ,UAAU,IAAI,UAAU;AAAA,MACpC;AAAA,IACJ;AACA,YAAQ,UAAU,IAAI,GAAG,WAAW;AACpC,WAAO,OAAO,SAAS;AAAA;AAAA,MAEnB;AAAA;AAAA,MAEA;AAAA;AAAA,MAEA;AAAA;AAAA,MAEA,oBAAqB,QAAQ;AAAA;AAAA,MAE7B,eAAgB,GAAG,KAAK,OAAO;AAAA,MAC/B,eAAgB,GAAG,KAAK,OAAO;AAAA,MAC/B,UAAgB,UAAU,WAAW,SAAS,cAAc,YAAY;AAAA,MACxE,UAAgB,UAAU,WAAW,SAAS,cAAc,YAAY;AAAA,MACxE,SAAU;AAAA,MACV,SAAU;AAAA,MACV,uCAAwC,CAAC,GAAG,eAAe,eAAe;AAAA,IAC9E,CAAC;AACD,QAAI,YAAY;AACZ,cAAQ,gBAAgB,QAAQ;AAChC,UAAI,eAAe,QAAQ,eAAe;AACtC,mBAAW,YAAY,OAAO;AAAA,MAClC;AACA,SAAG,qBAAqB,KAAK;AAAA,IACjC;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,yBAAyB;AACrB,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAClB,QAAI,EAAE,gBAAgB,IAAI;AAE1B,QAAI,GAAG,cAAc;AACjB,cAAQ,QAAQ,UAAU,IAAI,eAAe,sBAAsB;AAAA,IACvE;AACA,SAAI,mDAAiB,UAAS,GAAG;AAC7B,cAAQ,oBAAuB,CAAC;AAChC,cAAQ,uBAAuB,CAAC;AAChC,YAAM,EAAE,cAAc,IAAI;AAC1B,UAAI,CAAC,eAAe,aAAa,IAAI,CAAC,QAAQ,eAAe,QAAQ,aAAa;AAElF,cAAQ,0BAA0B;AAElC,wBAAkC,QAAQ,kBAAkB,gBAAgB,IAAI,CAAC,WAAW,MAAM;AAC9F,cACI,uBAA0B,gBAAgB,UAAU,cAAc,aAAa,IAAI,WACnF,EAAE,GAAG,GAAG,OAAO,OAAO,IAAI,UAAU,KAAK,sBAAsB,GAAG,UAAU,GAC5E,uBAA0B,GAAG,cAAc,GAAG,YAAY,SAAS,IAAI;AAC3E,6BAAqB,UAAU,IAAI,GAAG,WAAW;AAEjD,6BAAqB,UAAU,OAAO,WAAW,cAAc,WAAW;AAC1E,YAAI,GAAG,aAAa;AAEhB,aAAG,MAAM,sBAAsB,GAAG,CAAC;AACnC,aAAG,WAAW,YAAY,oBAAoB;AAC9C,+BAAqB,UAAU,IAAI,GAAG,YAAY;AAElD,cAAI,GAAG,sBAAsB;AACzB,iCAAqB,MAAM,QAAS,GAAG,KAAK;AAC5C,iCAAqB,MAAM,SAAS,GAAG,MAAM;AAAA,UACjD;AACA,cAAI,GAAG,qBAAqB;AACxB,sBAAU,UAAU,IAAI,UAAU;AAAA,UACtC;AACA,oBAAU,UAAU,IAAI,iBAAiB;AAAA,QAC7C;AACA,gBAAQ,kBAAkB,CAAC,IAAI,QAAQ,qBAAqB,CAAC,IAAI,GAAG,MAAM,oBAAoB;AAC9F,YAAI,GAAG,cAAc;AACjB,+BAAqB,UAAU,IAAI,4BAA4B,sBAAsB;AAErF,2BAAiB,GAAG;AACpB,2BAAiB,GAAG;AACpB,aAAG,MAAM,sBAAsB,eAAe,aAAa;AAC3D,kBAAQ,qBAAqB,CAAC,IAAM,CAAC,eAAe,aAAa;AACjE,+BAAqB,MAAM,SAAS,MAAM;AAAA,QAC9C;AACA,eAAO;AAAA,MACX,CAAC;AAED,UAAI,GAAG,gBAAgB,mBAAmB,gBAAgB,SAAS,GAAG;AAElE,oBAAY,gBAAgB;AAAA,UACxB,SAAW,gBAAgB,CAAC;AAAA,UAC5B,UAAW;AAAA,UACX,UAAU;AACN,4BAAgB,QAAQ,QAAM,GAAG,UAAU,OAAO,0BAA0B,CAAC;AAAA,UACjF;AAAA,UACA,SAAU;AAAA,UACV,MAAU;AAAA,QACd,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,iBAAiB,SAAS,GAAG,GAAG;AAC5B,UACI,KAA+B,MAC/B,EAAE,WAAW,WAAW,IAAO,IAC/B,EAAE,aAAa,YAAY,IAAI,eAAe,SAAS,OAAO,aAAa;AAE/E,QAAI,cAAc,WAAW;AACzB,UAAI,IAAI,GAAG;AACP,YAAI;AAAA,MACR;AACA,UAAI,IAAI,QAAQ,cAAc,WAAW,aAAa;AAClD,YAAI,WAAW,cAAc,QAAQ;AAAA,MACzC;AACA,UAAI,IAAI,GAAG;AACP,YAAI;AAAA,MACR;AACA,UAAI,IAAI,QAAQ,eAAe,WAAW,cAAc;AACpD,YAAI,WAAW,eAAe,QAAQ;AAAA,MAC1C;AAAA,IACJ;AAEA,QAAI,OAAO,GAAG,SAAS,UAAU;AAC7B,UAAI,KAAK,IAAI,GAAG,OAAO,aAAa,CAAC;AAAA,IACzC;AACA,QAAI,OAAO,GAAG,SAAS,UAAU;AAC7B,UAAI,KAAK,IAAI,GAAG,OAAO,aAAa,CAAC;AAAA,IACzC;AAEA,QAAI,OAAO,GAAG,SAAS,UAAU;AAC7B,UAAI,KAAK,IAAI,GAAG,OAAO,aAAa,CAAC;AAAA,IACzC;AACA,QAAI,OAAO,GAAG,SAAS,UAAU;AAC7B,UAAI,KAAK,IAAI,GAAG,OAAO,aAAa,CAAC;AAAA,IACzC;AACA,WAAO,EAAE,cAAe,GAAG,cAAe,EAAE;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,qBAAqB,OAAO,qBAAqB;AAC7C,UACI,KAA4C,MAC5C,EAAE,OAAO,OAAO,QAAQ,IAAoB,IAC5C,UAA4C,QAAQ,aAAa,QAAQ,SACzE,EAAE,iBAAiB,qBAAqB,IAAI;AAIhD,QAAI,QAAQ,yCAAyC,qBAAqB;AACtE,cAAQ,UAAU,oBAAoB,sBAAsB,OAAO;AACnE,cAAQ,UAAU,oBAAoB,qBAAqB,OAAO;AAAA,IACtE;AACA,YAAQ,QAAU,MAAM;AACxB,YAAQ,QAAU,MAAM;AACxB,YAAQ,UAAU,MAAM;AACxB,YAAQ,UAAU,MAAM;AACxB,QACI,OAAO,QAAQ,gBAAgB,MAAM,QAAQ,QAAQ,aAAa,QAAQ,SAC1E,OAAO,QAAQ,gBAAgB,MAAM,QAAQ,QAAQ,aAAa,QAAQ;AAE9E,QAAI,GAAG,iBAAiB;AACpB,YAAM,UAAU,GAAG,gBAAgB,EAAE,SAAS,MAAM,KAAK,CAAC;AAC1D,aAAO,QAAQ;AACf,aAAO,QAAQ;AAAA,IACnB;AAEA,UAAM,EAAE,cAAc,aAAa,IAAI,GAAG,iBAAiB,SAAS,MAAM,IAAI;AAC9E,QAAI,QAAQ,WAAW,iBAAiB,QAAQ,iBAAiB,MAAM;AACnE,SAAG,MAAM,SAAS,QAAQ,SAAY,cAAc,QAAQ,SAAY,YAAY;AAAA,IACxF;AACA,QAAI,iBAAiB;AACjB,YACI,SAAS,QAAQ,IAAI,eAAe,QAAQ,eAC5C,SAAS,QAAQ,IAAI,eAAe,QAAQ;AAChD,sBAAgB,QAAQ,CAAC,GAAG,MAAM;AAC9B,cAAM,CAAC,GAAG,CAAC,IAAI,qBAAqB,CAAC;AACrC,WAAG,MAAM,GAAG,IAAI,QAAQ,IAAI,MAAM;AAAA,MACtC,CAAC;AAAA,IACL;AACA,YAAQ,OAAO;AACf,YAAQ,OAAO;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,oBAAoB,OAAO;AAC7B,UACI,KAAsB,MACtB,UAAsB,GAAG,SACzB,EAAE,OAAO,IAAa,OACtB,WAAsB,CAAC,GAAG,SAAS,KAAK,MAAM,QAAQ,IAAI,MAAM,KAAK,MAAM,QAAQ,aAAa,GAChG,WAAsB,CAAC,GAAG,SAAS,KAAK,MAAM,QAAQ,IAAI,MAAM,KAAK,MAAM,QAAQ,aAAa,GAChG,UAAsB,QAAQ,aAAa,QAAQ,SACnD,EAAE,gBAAgB,IAAI;AAC1B,QAAI,CAAC,GAAG,0BAA0B,YAAY,UAAU;AACpD,UAAI,QAAQ,UAAU,OAAO;AACzB,cAAM,GAAG,mBAAmB,MAAM,KAAK;AAAA,MAC3C,OACM;AACF,cAAM,aAAa,CAAC,GAAG,oBAAoB,UAAU,KAAK,GAAG,cAAc,GAAG,YAAY;AAC1F,YAAI,eAAgB,OAAO,GAAG,SAAS,YAAY,GAAG,SAAS,QAAS,MAAM,QAAQ,WAAW,QAC5F,OAAO,GAAG,SAAS,YAAY,GAAG,SAAS,QAAS,MAAM,QAAQ,WAAW,SAC7E,OAAO,GAAG,SAAS,YAAY,GAAG,SAAS,QAAS,MAAM,QAAQ,WAAW,OAC7E,OAAO,GAAG,SAAS,YAAY,GAAG,SAAS,QAAS,MAAM,QAAQ,WAAW,SAAW;AAEzF,gBAAM,GAAG,mBAAmB,MAAM,KAAK;AAAA,QAC3C,OACK;AACD,kBAAQ,WAAW,OAAM,QAAQ,QAAQ,UAAU;AAE/C,gBAAI,QAAQ,WAAW;AACnB,sBAAQ,KAAK,+CAA+C;AAC5D;AAAA,YACJ;AACA,oBAAQ,YAAY;AAEpB,gBAAI,CAAC,SAAS,GAAG,SAAS;AAEtB,oBAAM,GAAG,mBAAmB,MAAM,MAAM,IAAI;AAAA,YAChD;AACA,gBAAI,CAAC,GAAG,aAAa;AACjB,iBAAG,QAAQ,iBAAiB,EAAE,SAAS,OAAO,OAAO,CAAC;AACtD,iBAAG,MAAM;AAAA,YACb;AACA,gBAAI,CAAC,GAAG,eAAe,QAAQ,kBAAkB,QAAQ,eAAe;AAEpE,eAAC,SAAS,GAAI,mBAAmB,CAAC,CAAE,EAAE,QAAQ,QAAM,GAAG,MAAM,YAAY,EAAE;AAAA,YAC/E;AAAA,UACJ;AAGA,kBAAQ,QAAQ;AAChB,gBAAM,GAAG,QAAQ,QAAQ,EAAE,SAAS,OAAO,OAAO,CAAC;AACnD,cAAI,CAAC,QAAQ,OAAO;AAEhB,kBAAM,QAAQ,SAAS;AAAA,UAC3B;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,OACK;AAED,SAAG,mBAAmB,OAAO,KAAK;AAAA,IACtC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,mBAAmB,UAAU,OAAO,QAAQ,MAAM,SAAS,OAAO;AA5Z5E,QAAAC,KAAA;AA6ZQ,UACI,KAAkD,MAClD;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAkD,IAClD,EAAE,iBAAiB,mBAAmB,QAAQ,IAAI,SAClD,UAAkD,QAAQ,aAAa,QAAQ;AACnF,YAAQ,QAAQ;AAChB,KAAAA,MAAA,GAAG,kBAAH,gBAAAA,IAAkB;AAClB,QAAI,QAAQ,SAAS;AACjB,cAAQ,KAAK,2CAA2C;AACxD;AAAA,IACJ;AACA,QAAI,EAAE,eAAe,cAAc,IAAI;AACvC,UAAM,aAAa,kBAAkB,GAAG,KAAK,OAAO,KAC5C,kBAAkB,GAAG,KAAK,OAAO;AACzC,QAAI,WAAW,QAAQ,SAAS;AAE5B,UAAI,CAAC,eAAe,cAAc,eAAe,QAAQ,eAAe;AACpE,gBAAQ,cAAc,aAAa,SAAS,QAAQ,kBAAkB;AAAA,MAC1E;AAGA,UAAI,aAAa;AACb,YAAI,eAAe;AACf,gBACI,YAAY,QAAQ,cAAc,aAAa,KAAK,SACpD,EAAE,GAAG,EAAE,IAAK,UAAU,KAAK,SAAS;AACxC,0BAAgB;AAChB,0BAAgB;AAAA,QACpB;AAAA,MACJ;AAEA,cAAQ,UAAU,IAAI,YAAY;AAElC,SAAG,MAAM,SAAS,eAAe,aAAa;AAE9C,yDAAiB,QAAQ,CAACC,UAAS,MAAM;AACrC,QAAAA,SAAQ,UAAU,OAAO,WAAW;AACpC,QAAAA,SAAQ,UAAU,IAAI,YAAY;AAClC,WAAG,MAAMA,UAAS,kBAAkB,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;AAAA,MACtE;AACA,UAAI,CAAC,QAAQ;AACT,WAAG,QAAQ,UAAU,SAAS,SAAS,EAAE,SAAS,MAAM,CAAC;AAAA,MAC7D;AAEA,UAAI,QAAQ,eAAe,CAAC,GAAG,gBAAgB,YAAY;AACvD,cAAM,YAAY,qBAAqB;AAAA,UACnC;AAAA,UACA,UAAe,UAAU,8BAA8B,SAAS,WAAW,IAAI,cAAc;AAAA,UAC7F,SAAe;AAAA,UACf,MAAe;AAAA,UACf,cAAe;AAAA,QACnB,CAAC;AAAA,MACL;AACA,UAAI,CAAC,GAAG,aAAa;AAEjB,WAAG,QAAQ,kBAAkB,EAAE,SAAS,MAAM,CAAC;AAAA,MACnD;AAAA,IACJ;AACA,SAAI,QAAG,YAAH,mBAAY,SAAS;AACrB,SAAG,MAAM;AAAA,IACb;AAAA,EACJ;AAAA;AAAA,EAEA,UAAU;AACN,UACI,KAAwD,MACxD,EAAE,SAAS,aAAa,aAAa,aAAa,IAAM,IACxD,UAAwD,QAAQ,aAAa,QAAQ,SACrF,EAAE,iBAAiB,yBAAyB,QAAQ,IAAI,SACxD,sBAAwD,gBAAgB,GAAG,wBAAwB,CAAC,QAAQ,QAC5G,qBAAwD,CAAC,aAAa,cAAc,cAAc,eAAe,sBAAsB;AAC3I,YAAQ,UAAU,OAAO,GAAG,kBAAkB;AAC9C,QAAI,qBAAqB;AACrB,cAAQ,OAAO;AAAA,IACnB;AACA,uDAAiB,QAAQ,CAAAA,aAAW;AAChC,UAAI,qBAAqB;AACrB,QAAAA,SAAQ,OAAO;AAAA,MACnB,OACK;AACD,QAAAA,SAAQ,UAAU,OAAO,GAAG,kBAAkB;AAAA,MAClD;AAAA,IACJ;AAEA,YAAQ,UAAU,OAAO,mBAAmB,UAAU;AACtD,uEAAyB,QAAQ,CAAAA,aAAWA,SAAQ,UAAU,OAAO,YAAY,iBAAiB;AAAA,EACtG;AAAA;AAEJ;;;AChfA,IAAM,uBAAuB;AAAA,EACzB,MAAa;AAAA,EACb,IAAa;AAAA,EACb,UAAa;AAAA,EACb,YAAa;AAAA,EACb,WAAa;AAAA,EACb,UAAa;AAAA,EACb,SAAa;AACjB;AAiNA,IAAqB,aAArB,cAAwC,KAAK,MAAM,gBAAQ,6BAAqB,2BAAmB,EAAE;AAAA;AAAA,EAEjG,WAAW,gBAAgB;AACvB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOH,cAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMf,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOb,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOd,oBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMrB,eAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhB,cAAe,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,MAKxB,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMb,cAAe;AAAA,MACf,kBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMnB,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA,MAKZ,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKP,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKP,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKP,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUP,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQP,oBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKrB,gBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKjB,oBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKrB,eAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhB,eAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhB,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMd,sBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMvB,qBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMtB,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA,MAKb,gBAAiB;AAAA,MACjB,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMb,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMR,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMR,iBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKlB,eAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhB,iBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMlB,eAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhB,sBAAuB;AAAA,MACvB,sBAAuB;AAAA,MACvB,wBAAyB;AAAA;AAAA,MAEzB,kBAAmB;AAAA;AAAA,MAEnB,gBAAmB;AAAA,MACnB,0BAA6B;AAAA,MAC7B,4BAA6B;AAAA,MAC7B,YAAa;AAAA,QACT,oBAAuB;AAAA,QACvB,sBAAuB;AAAA,QACvB,iBAAuB;AAAA,MAC3B;AAAA,MACA,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQZ,aAAc;AAAA,IAClB;AAAA,EACJ;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,EA6EA,UAAU,QAAQ;AACd,UAAM,KAAK;AACX,UAAM,UAAU,MAAM;AACtB,OAAG,cAAc;AACjB,QAAI,GAAG,iBAAiB;AACpB,SAAG,kBAAkB;AAAA,IACzB,OACK;AACD,SAAG,kBAAkB;AAAA,IACzB;AACA,OAAG,gCAAgC,GAAG,8BAA8B,KAAK,EAAE;AAAA,EAC/E;AAAA,EACA,YAAY;AACR,SAAK,MAAM,IAAI;AACf,UAAM,UAAU;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB;AACZ,UACI,KAAqB,MACrB,EAAE,aAAa,IAAM,IACrB,qBAAqB;AAAA,MACjB,SAAc;AAAA,MACd,aAAc;AAAA,MACd,SAAc;AAAA,IAClB;AACJ,OAAG,2BAA2B,GAAG,2BAA2B,YAAY;AAExE,gBAAY,GAAG,kBAAkB;AAAA,EACrC;AAAA;AAAA;AAAA,EAGA,2BAA2B,SAAS;AAChC,UAAM,OAAO,QAAQ,YAAY;AACjC,QAAI,SAAS,KAAK;AAElB,QAAI,KAAK,aAAa,KAAK,0BAA0B,KAAK,SAAS,UAAU;AACzE,eAAS,QAAQ,QAAQ,UAAU,KAAK;AAAA,IAC5C;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,QAAQ;AAnjBhB,QAAAC;AAojBQ,WAAO,SAAQA,MAAA,KAAK,cAAL,gBAAAA,IAAgB,GAAG;AAAA,EACtC;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,EAiCA,cAAc,OAAO;AACjB,UAAM,KAAK;AACX;AAAA;AAAA,MAEI,MAAM,WAAW;AAAA;AAAA;AAAA,MAIjB,GAAG;AAAA,MACL;AACE;AAAA,IACJ;AAEA,QAAI,GAAG,sBAAsB,CAAC,GAAG,mBAAmB,MAAM,QAAQ,KAAK,GAAG;AACtE;AAAA,IACJ;AACA,OAAG,aAAa;AAChB,UAAM,UAAU,GAAG,kBAAkB,GAAG,kBAAkB,KAAK,IAAI,GAAG,kBAAkB,KAAK;AAC7F,QAAI,SAAS;AACT,SAAG,eAAe,YAAY,GAAG;AAAA,QAC7B,SAAU;AAAA,QACV,MAAU,GAAG;AAAA,QACb,SAAU;AAAA,MACd,CAAC;AACD,YAAM,gBAAgB;AAAA,QAClB,SAAU,GAAG;AAAA,QACb,SAAU;AAAA,QACV,SAAU;AAAA,QACV,SAAU,qBAAqB;AAAA,MACnC;AACA,UAAI,MAAM,gBAAgB,SAAS;AAC/B,WAAG,kBAAkB,GAAG,WAAW,MAAM,GAAG,kBAAkB,MAAM,GAAG,iBAAiB,iBAAiB;AACzG,sBAAc,YAAY;AAAA,UACtB,SAAU,qBAAqB;AAAA,UAC/B,SAAU;AAAA;AAAA,QACd;AAGA,sBAAc,WAAW,cAAc,YAAY,qBAAqB;AAAA,MAC5E,OACK;AACD,sBAAc,cAAc,qBAAqB;AACjD,sBAAc,YAAY,qBAAqB;AAAA,MACnD;AAEA,SAAG,wBAAwB,YAAY,GAAG,aAAa;AACvD,UAAI,GAAG,cAAc,GAAG,eAAe,GAAG,gBAAgB,GAAG,aAAa,SAAS,GAAG,UAAU,GAAG;AAC/F,cACI,MAAM,UAAU,KAAK,GAAG,YAAY,GAAG,YAAY;AACvD,WAAG,OAAO,IAAI;AACd,WAAG,OAAO,IAAI;AACd,WAAG,OAAO,IAAI;AACd,WAAG,OAAO,IAAI;AAAA,MAClB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,MAAM,aAAa,OAAO;AA9oB9B,QAAAA,KAAA;AAgpBQ,QAAI,MAAM,iBAAiB;AACvB;AAAA,IACJ;AACA,UACI,KAAiB,MACjB,EAAE,QAAQ,IAAO,IACjB,WAAiB,YAAY,mBAAmB,GAAG,YAAY,KAAK,GACpE,iBAAiB,GAAG,mBAAmB,WAAW,GAAG;AACzD,QAAI,gBAAgB;AAChB,SAAG,MAAM,IAAI;AACb;AAAA,IACJ;AACA,QACI,CAAC,GAAG,oBAAmB,mCAAS,aAAY,QAAQ,WAAW,YAAY,GAAG;AAAA,MAE9EA,MAAA,MAAM,WAAN,gBAAAA,IAAc,cAAa,KAAK,cAClC;AACE,UAAI,CAAC,QAAQ,SAAS;AAClB,YAAI,GAAG,QAAQ,mBAAmB,EAAE,SAAS,MAAM,CAAC,MAAM,OAAO;AAC7D,iBAAO,GAAG,MAAM;AAAA,QACpB;AACA,YAAI,GAAG,iBAAiB;AACpB,aAAG,mBAAmB,KAAK;AAAA,QAC/B,OACK;AACD,aAAG,mBAAmB,KAAK;AAAA,QAC/B;AACA,gBAAQ,UAAU;AAElB,iBAAG,kBAAH,mBAAkB,gBAAgB,aAAa,MAAM;AAAA,UACjD,aAAc;AAAA,YACV;AAAA,cACI,SAAU,GAAG,cAAc,GAAG;AAAA,YAClC;AAAA,UACJ;AAAA,UACA,UAAW,GAAG;AAAA,QAClB,GAAG,GAAG,gBAAgB;AAEtB,gBAAQ,cAAc,UAAU,oBAAoB,MAAM,MAAM;AAChE,gBAAQ,YAAY,UAAU,IAAI,qBAAqB;AACvD,YAAI,GAAG,sBAAsB,GAAG,eAAe;AAC3C,oBAAU,eAAe,GAAG,YAAY,EAAE,iBAAiB,GAAG,kBAAkB,EAAE;AAAA,YAC9E,QAAM,GAAG,UAAU,IAAI,GAAG,aAAa;AAAA,UAC3C;AAAA,QACJ;AAGA,cAAM,SAAS,GAAG,QAAQ,aAAa,EAAE,SAAS,MAAM,CAAC;AAEzD,YAAI,aAAa,UAAU,MAAM,GAAG;AAChC,gBAAM;AAAA,QACV;AACA,gBAAQ,gBAAgB;AACxB,YAAI,GAAG,iBAAiB;AACpB,aAAG,uBAAuB,KAAK;AAAA,QACnC,OACK;AACD,aAAG,uBAAuB,KAAK;AAAA,QACnC;AAGA,WAAG,QAAQ,kBAAkB,EAAE,SAAS,MAAM,CAAC;AAAA,MACnD;AAIA,UAAI,QAAQ,eAAe;AAEvB,YAAI,GAAG,mBAAmB;AAEtB,aAAG,OAAO,KAAK;AACf,aAAG,OAAO,GAAG,iBAAiB;AAC9B,iBAAO,GAAG;AAAA,QACd,OACK;AACD,aAAG,OAAO,KAAK;AAAA,QACnB;AAAA,MACJ,OACK;AAED,WAAG,oBAAoB;AAAA,MAC3B;AAEA,UAAI,MAAM,SAAS,aAAa;AAC5B,cAAM,eAAe;AACrB,cAAM,yBAAyB;AAAA,MACnC;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,8BAA8B,QAAQ;AAzuB1C,QAAAA;AA0uBQ,UAAM,EAAE,mBAAmB,IAAI;AAC/B,UAAIA,MAAA,KAAK,YAAL,gBAAAA,IAAc,YAAW,oBAAoB;AAE7C,yBAAmB,WAAW;AAC9B,WAAK,OAAO,oBAAoB,MAAM;AAAA,IAC1C;AAAA,EACJ;AAAA,EACA,YAAY,OAAO;AACf,SAAK,aAAa,KAAK;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,OAAO;AACf,SAAK,aAAa,KAAK;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,OAAO,qBAAqB;AAC/B,UACI,KAAuB,MACvB,EAAE,QAAQ,IAAa,IACvB,uBAAuB,SAAS,oBAAoB,SAAS;AAIjE,QAAI,SAAS,GAAG,wBAAwB,KAAK;AAG7C,QAAI,MAAM,SAAS,aAAa;AAC5B,YAAM,QAAQ,MAAM,eAAe,CAAC;AACpC,eAAS,UAAU,iBAAiB,MAAM,UAAU,qBAAqB,YAAY,MAAM,UAAU,qBAAqB,SAAS;AAAA,IACvI;AACA,YAAQ,SAAS;AACjB,QAAI,kBAAkB,GAAG,oBAAoB,CAAC,GAAG,cAAc,GAAG,WAAW,SAAS,MAAM,MAAM;AAClG,QAAI,mBAAmB,GAAG,oBAAoB;AAC1C,wBAAkB,mBAAmB,QAAQ,iCAAQ,QAAQ,GAAG,mBAAmB;AAAA,IACvF;AAEA,QAAI,GAAG,iBAAiB;AACpB,SAAG,qBAAqB,OAAO,mBAAmB;AAAA,IACtD,OACK;AAKD,SAAG,qBAAqB,OAAO,mBAAmB;AAAA,IACtD;AACA,YAAQ,QAAQ;AAEhB,OAAG,QAAQ,QAAQ,EAAE,SAAS,MAAM,CAAC;AAGrC,QAAI,GAAG,iBAAiB;AACpB,SAAG,oBAAoB,OAAO,mBAAmB;AAAA,IACrD;AACA,YAAQ,QAAQ,QAAQ,SAAS;AACjC,eAAW,WAAW,GAAG,iBAAiB;AACtC,cAAQ,UAAU,OAAO,GAAG,YAAY,CAAC,QAAQ,KAAK;AAAA,IAC1D;AACA,QAAI,OAAO;AACP,SAAG,qBAAqB;AAAA,IAC5B;AAAA,EACJ;AAAA,EACA,IAAI,kBAAkB;AAlzB1B,QAAAA;AAmzBQ,UAAM,EAAE,QAAQ,IAAI;AACpB,WAAO,CAAC,QAAQ,aAAa,QAAQ,SAAS,IAAIA,MAAA,QAAQ,oBAAR,OAAAA,MAA2B,CAAC,CAAE;AAAA,EACpF;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAM,SAAS,OAAO;AA1zBhC,QAAAA,KAAA;AA2zBQ,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAClB,WAAAA,MAAA,GAAG,kBAAH,gBAAAA,IAAkB,mBAAlB,wBAAAA;AACA,OAAG,gBAAgB;AACnB,SAAI,mCAAS,YAAW,CAAC,QAAQ,SAAS;AAEtC,cAAQ,QAAQ,sBAAsB;AAEtC,cAAQ,QAAQ;AAChB,UAAI,GAAG,iBAAiB;AACpB,WAAG,mBAAmB,QAAW,QAAW,MAAM;AAAA,MACtD,OACK;AACD,WAAG,mBAAmB,QAAW,QAAW,MAAM;AAAA,MACtD;AACA,cAAQ,UAAU;AAAA,IACtB,OACK;AACD,SAAG,MAAM,IAAI;AAAA,IACjB;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,kBAAkB;AAn1BtB,QAAAA,KAAA;AAo1BQ,KAAAA,MAAA,KAAK,0BAAL,gBAAAA,IAAA;AACA,eAAK,iBAAL;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,MAAM,QAAQ;AACV,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAClB,QAAI,mCAAS,SAAS;AAClB,iBAAW,WAAW,GAAG,iBAAiB;AACtC,gBAAQ,UAAU,OAAO,GAAG,UAAU;AAAA,MAC1C;AACA,cAAQ,YAAY,UAAU,OAAO,qBAAqB;AAC1D,UAAI,GAAG,iBAAiB;AACpB,gBAAQ,UAAU,OAAO;AAAA,MAC7B,OACK;AACD,WAAG,QAAQ;AAAA,MACf;AACA,UAAI,GAAG,sBAAsB,GAAG,eAAe;AAC3C,kBAAU,eAAe,GAAG,YAAY,EAAE,iBAAiB,GAAG,kBAAkB,EAAE;AAAA,UAC9E,QAAM,GAAG,UAAU,OAAO,GAAG,aAAa;AAAA,QAC9C;AAAA,MACJ;AAAA,IACJ;AACA,OAAG,gBAAgB;AAOnB,QAAI,CAAC,QAAQ;AACT,SAAG,QAAQ,OAAO;AAAA,IACtB;AACA,OAAG,UAAU,GAAG,qBAAqB;AAAA,EACzC;AAAA,EACA,WAAW,OAAO;AACd,SAAK,UAAU,KAAK;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAgB,OAAO;AACnB,UAAM,gBAAgB;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,OAAO;AA34BrB,QAAAA;AA44BQ,UACI,KAAc,MACd,EAAE,QAAQ,IAAI;AAClB,OAAG,gBAAgB;AACnB,QAAI,SAAS;AACT,OAAAA,MAAA,GAAG,kBAAH,gBAAAA,IAAkB;AAClB,UAAI,QAAQ,SAAS;AACjB,YAAI,QAAQ,eAAe;AAGvB,gBAAM,gBAAgB;AACtB,kBAAQ,aAAa;AACrB,cAAI,GAAG,iBAAiB;AACpB,eAAG,oBAAoB,KAAK;AAAA,UAChC,OACK;AACD,eAAG,oBAAoB,KAAK;AAAA,UAChC;AAGA,sBAAY,GAAG;AAAA,YACX,SAAU;AAAA,YACV,SAAU;AAAA,YACV,OAAU,qBAAqB;AAAA,YAC/B,SAAU;AAAA,YACV,SAAU,GAAG;AAAA;AAAA,YACb,MAAU;AAAA,UACd,CAAC;AAAA,QACL,OAGK;AACD,aAAG,IAAI;AAAA,YACH,OAAO;AACH,iBAAG,UAAU,KAAK;AAAA,YACtB;AAAA,YACA,MAAO;AAAA,UACX,CAAC;AAAA,QACL;AAAA,MACJ,OACK;AACD,WAAG,MAAM,IAAI;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,OAAO;AA97BrB,QAAAA;AA+7BQ,UAAIA,MAAA,KAAK,YAAL,gBAAAA,IAAc,YAAW,MAAM,QAAQ,UAAU;AAGjD,YAAM,yBAAyB;AAC/B,WAAK,MAAM;AAAA,IACf;AAAA,EACJ;AAAA,EACA,eAAe;AAIX,QAAI,KAAK,WAAW,CAAC,KAAK,QAAQ,YAAY;AAC1C,WAAK,MAAM;AAAA,IACf;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,SAAS;AACjB,QAAI,KAAK,eAAe;AACpB,gBAAU,QAAQ,cAAc,KAAK,aAAa,KAAK;AAAA,IAC3D;AACA,UAAM,QAAQ,QAAQ,UAAU,IAAI;AACpC,UAAM,gBAAgB,IAAI;AAC1B,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,IAAI,kBAAkB;AAClB,WAAO,KAAK,SAAS;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,eAAe,eAAe,YAAY,EAAE,OAAQ,MAAM,GAAG;AAC/D,UACI,EAAE,SAAS,gBAAgB,IAAI,MAC/B,EAAE,QAAQ,IAAqB,SAC/B,aAA+B,cAAc,cAAc,gBAAgB,UAAU,KAAK,aAAa;AAC3G,oBAAgB,QAAQ,QAAM;AAC1B,SAAG,UAAU,IAAI,yBAAyB;AAC1C,gBAAU,QAAQ,IAAI,YAAY,SAAS;AAAA,IAC/C,CAAC;AACD,UAAM,YAAY,qBAAqB;AAAA,MACnC;AAAA,MACA,UAAW;AAAA,MACX,SAAW;AAAA,MACX,MAAW;AAAA,IACf,CAAC;AACD,oBAAgB,QAAQ,QAAM,GAAG,UAAU,OAAO,yBAAyB,CAAC;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,aAAa;AA9/BrB,QAAAA;AA+/BQ,WAAO,SAAQA,MAAA,KAAK,YAAL,gBAAAA,IAAc,OAAO;AAAA,EACxC;AAAA;AAAA,EAEA,wBAAwB,OAAO;AAC3B,WAAO,CAAC,MAAM,WAAW,MAAM,SAAS,UAAU,iBAAiB,MAAM,SAAS,MAAM,OAAO;AAAA,EACnG;AAAA;AAEJ;AACA,WAAW,SAAS;;;AChgCpB,IAAM,oBAAoB;AAAA,EACtB,MAAa;AAAA,EACb,MAAa;AAAA,EACb,IAAa;AAAA,EACb,UAAa;AAAA,EACb,YAAa;AAAA,IACT,SAAU;AAAA;AAAA;AAAA,IAGV,SAAU;AAAA,EACd;AAAA,EACA,WAAY;AAAA,EACZ,UAAY;AAAA,EACZ,SAAY;AAChB;AAiCA,IAAqB,eAArB,cAA0C,eAAO,IAAI,EAAE;AAAA;AAAA,EAEnD,WAAW,gBAAgB;AACvB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMH,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMd,eAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhB,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQb,mBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQpB,eAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhB,iBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMlB,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMX,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMX,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMZ,WAAY;AAAA;AAAA,MAEZ,cAAe,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,MAKxB,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASX,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMd,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASb,oBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMrB,gBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMjB,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMb,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMd,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMZ,cAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMf,gBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKjB,yBAA0B;AAAA,MAC1B,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMb,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMP,YAAa;AAAA;AAAA;AAAA,MAGb,2BAA4B;AAAA;AAAA;AAAA,MAG5B,eAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhB,WAAY;AAAA,MACZ,sBAAuB;AAAA,MACvB,WAAY;AAAA,IAChB;AAAA,EACJ;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,EAsCA,UAAU,QAAQ;AACd,UAAM,KAAK;AACX,UAAM,UAAU,MAAM;AAEtB,QAAI,CAAC,GAAG,kBAAkB,CAAC,cAAc,mBAAmB;AACxD,SAAG,aAAa,GAAG;AAAA,IACvB;AACA,OAAG,4BAA4B,GAAG,6BAA6B,IAAI,GAAG;AACtE,OAAG,cAAc;AACjB,OAAG,WAAW;AAAA,EAClB;AAAA,EACA,YAAY;AACR,SAAK,MAAM,IAAI;AACf,UAAM,UAAU;AAAA,EACpB;AAAA,EACA,0BAA0B,MAAM;AAC5B,QAAI,MAAM;AACN,WAAK,gBAAgB;AAAA,IACzB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa;AACT,UAAM,KAAK;AACX,QAAI,CAAC,GAAG,sBAAsB,GAAG,gBAAgB;AAC7C,SAAG,qBAAqB,aAAW,QAAQ,QAAQ,GAAG,cAAc;AAAA,IACxE;AACA,QAAI,GAAG,MAAM;AACT,YAAM,EAAE,MAAM,SAAS,MAAM,IAAI,GAAG;AACpC,SAAG,aAAa;AAChB,YAAM,eAAe,GAAG,6BAA6B,OAAO,SAAS,IAAI;AAEzE,SAAG,UAAU;AAAA,QACT;AAAA,QACA;AAAA,QACA,OAAgB;AAAA,QAChB,OAAgB;AAAA,QAChB,eAAgB,UAAU,cAAc,OAAO,KAAK,QAAQ;AAAA;AAAA,QAC5D,eAAgB,UAAU,cAAc,OAAO,KAAK,QAAQ;AAAA;AAAA,QAC5D,MAAgB,UAAU,cAAc,OAAO,KAAK,QAAQ;AAAA;AAAA,QAC5D,MAAgB,UAAU,cAAc,OAAO,KAAK,QAAQ;AAAA;AAAA,QAC5D,cAAgB,QAAQ;AAAA,QACxB,eAAgB,QAAQ;AAAA,QACxB;AAAA,QACA,QAAgB,MAAM,UAAU,aAAa,IAAI,GAAG;AAAA,QACpD,QAAgB,MAAM,UAAU,aAAa,IAAI,GAAG;AAAA,QACpD,UAAgB,MAAG;AApTnC,cAAAC;AAoTsC,kBAAAA,MAAA,GAAG,UAAH,gBAAAA,IAAA;AAAA;AAAA,MAC1B;AACA,cAAQ,UAAU,IAAI,GAAG,WAAW;AACpC,SAAG,oBAAoB,GAAG,OAAO;AAAA,IACrC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB;AACZ,UACI,KAAqB,MACrB,qBAAqB;AAAA,MACjB,SAAa,GAAG;AAAA,MAChB,WAAa,kBAAkB;AAAA,MAC/B,YAAa,kBAAkB;AAAA,MAC/B,SAAa;AAAA,IACjB;AACJ,QAAI,CAAC,GAAG,kBAAkB,cAAc,mBAAmB;AACvD,yBAAmB,YAAY;AAAA,QAC3B,SAAU,kBAAkB;AAAA;AAAA;AAAA,QAG5B,UAAW,GAAG;AAAA,MAClB;AAEA,yBAAmB,aAAa;AAAA,QAC5B,SAAW;AAAA,QACX,UAAW,GAAG;AAAA,QACd,SAAW;AAAA,MACf;AAAA,IACJ;AAEA,gBAAY,GAAG,kBAAkB;AAAA,EACrC;AAAA,EACA,IAAI,QAAQ;AAxVhB,QAAAA;AAyVQ,WAAO,SAAQA,MAAA,KAAK,cAAL,gBAAAA,IAAgB,GAAG;AAAA,EACtC;AAAA;AAAA;AAAA,EAGA,IAAI,aAAa;AACb,QAAI,KAAK,UAAU;AACf,aAAO,KAAK,SAAS;AAAA,IACzB;AACA,WAAO,KAAK,aAAa;AAAA,EAC7B;AAAA,EACA,IAAI,YAAY;AACZ,QAAI,KAAK,UAAU;AACf,aAAO,KAAK,SAAS;AAAA,IACzB;AACA,WAAO,KAAK,aAAa;AAAA,EAC7B;AAAA;AAAA;AAAA,EAGA,oBAAoB,SAAS;AA3WjC,QAAAA;AA4WQ,UAAM,gBAAgB;AAAA,MAClB,SAAU;AAAA,MACV,SAAU,kBAAkB;AAAA,MAC5B,SAAU;AAAA,IACd;AACA,QAAI,SAAS;AACT,oBAAc,YAAY,kBAAkB;AAG5C,oBAAc,WAAW,cAAc,YAAY,kBAAkB;AAAA,IACzE,OACK;AACD,oBAAc,YAAY,kBAAkB;AAC5C,oBAAc,UAAY,kBAAkB;AAAA,IAChD;AAEA,SAAK,sBAAsB,YAAY,GAAG,aAAa;AACvD,KAAAA,MAAA,KAAK,8BAAL,gBAAAA,IAAA,WAAiC,KAAK;AAAA,EAC1C;AAAA;AAAA;AAAA,EAGA,sBAAsB;AAAA,EAAC;AAAA,EACvB,QAAQ;AAlYZ,QAAAA;AAmYQ,KAAAA,MAAA,KAAK,wBAAL,gBAAAA,IAAA;AACA,SAAK,UAAU;AACf,SAAK,QAAQ,OAAO;AAAA,EACxB;AAAA,EACA,UAAU,SAAS,OAAO;AACtB,WAAO,CAAC,KAAK,sBAAsB,KAAK,mBAAmB,SAAS,KAAK;AAAA,EAC7E;AAAA,EACA,cAAc,SAAS,OAAO;AAC1B,UAAM,KAAK;AACX,OAAG,aAAa;AAChB,QAAI,GAAG,UAAU,MAAM,QAAQ,KAAK,KAAK,GAAG,iBAAiB,SAAS,KAAK,GAAG;AAE1E,YAAM,yBAAyB;AAC/B,UAAI,MAAM,SAAS,cAAc;AAC7B,cAAM,eAAe;AAAA,MACzB;AACA,SAAG,oBAAoB,OAAO;AAAA,IAClC;AAAA,EACJ;AAAA,EACA,aAAa,OAAO;AAEhB,QAAI,MAAM,QAAQ,SAAS,GAAG;AAC1B;AAAA,IACJ;AACA,SAAK,cAAc,MAAM,KAAK;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,OAAO;AAEf,QAAI,MAAM,WAAW,GAAG;AACpB;AAAA,IACJ;AACA,SAAK,cAAc,OAAO,KAAK;AAAA,EACnC;AAAA,EACA,aAAa,SAAS,OAAO;AAzajC,QAAAA;AA0aQ,UACI,KAAyB,MACzB,EAAE,SAAS,UAAU,IAAI;AAC7B,SAAI,mCAAS,aAAY,QAAQ,WAAW,YAAY,mBAAmB,GAAG,YAAY,KAAK,KAAK,GAAG,gBAAgB;AACnH,UAAI,CAAC,QAAQ,SAAS;AAClB,SAAAA,MAAA,GAAG,kBAAH,gBAAAA,IAAkB,gBAAgB,aAAa,MAAM;AAAA,UACjD,aAAc;AAAA,YACV;AAAA,cACI,SAAU,GAAG,cAAc,GAAG;AAAA,cAC9B;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAW,YAAO;AAtbtC,gBAAAA;AAsbyC,qBAAAA,MAAA,GAAG,YAAH,gBAAAA,IAAY,YAAW,GAAG,sBAAsB,GAAG,OAAO,GAAG,oBAAoB,MAAM;AAAA;AAAA,QAChH,GAAG,GAAG,gBAAgB;AACtB,WAAG,QAAQ,eAAe,EAAE,SAAS,MAAM,CAAC;AAC5C,gBAAQ,UAAU;AAAA,MACtB;AACA,SAAG,OAAO,KAAK;AAAA,IACnB,WAKS,CAAC,WAAW,CAAC,GAAG,gBAAgB;AACrC,SAAG,mBAAmB,KAAK;AAAA,IAC/B;AAAA,EACJ;AAAA,EACA,YAAY,OAAO;AACf,SAAK,aAAa,MAAM,KAAK;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,OAAO;AACf,SAAK,aAAa,OAAO,KAAK;AAAA,EAClC;AAAA,EACA,YAAY,SAAS,OAAO;AAjdhC,QAAAA,KAAA;AAkdQ,UACI,KAAU,MACV,UAAU,GAAG;AACjB,KAAAA,MAAA,GAAG,wBAAH,gBAAAA,IAAA;AACA,QAAI,SAAS;AACT,eAAG,kBAAH,mBAAkB;AAClB,UAAI,QAAQ,SAAS;AAGjB,oBAAY,GAAG;AAAA,UACX,SAAU;AAAA,UACV,SAAU;AAAA,UACV,OAAU,kBAAkB;AAAA,UAC5B,SAAU,GAAG;AAAA;AAAA,UACb,SAAU;AAAA,UACV,MAAU;AAAA,QACd,CAAC;AAAA,MACL;AACA,SAAG,aAAa,KAAK;AAAA,IACzB,OACK;AACD,eAAG,UAAH;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,WAAW,OAAO;AACd,SAAK,YAAY,MAAM,KAAK;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,OAAO;AACb,SAAK,YAAY,OAAO,KAAK;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAgB,OAAO;AACnB,UAAM,gBAAgB;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,OAAO;AACb,QAAI,MAAM,QAAQ,UAAU;AACxB,WAAK,MAAM;AAAA,IACf;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,OAAO;AACV,UACI,KAAkB,MAClB,UAAkB,GAAG,SACrB,EAAE,QAAQ,IAAQ,SAClB,kBAAkB,UAAU,KAAK,GAAG,YAAY;AAEpD,YAAQ,WAAW,KAAK,IAAI,KAAK,IAAI,MAAM,UAAU,QAAQ,aAAa,GAAG,gBAAgB,KAAK,GAAG,gBAAgB,CAAC,IAAI,GAAG;AAC7H,YAAQ,WAAW,KAAK,IAAI,KAAK,IAAI,MAAM,UAAU,QAAQ,aAAa,GAAG,gBAAgB,MAAM,GAAG,gBAAgB,CAAC,IAAI,GAAG;AAC9H,YAAQ,UAAU,IAAI,GAAG,WAAW;AACpC,QAAI,OAAO;AACP,UAAI,GAAG,aAAa,KAAK,GAAG;AACxB,WAAG,QAAQ,YAAY,EAAE,SAAS,MAAM,CAAC;AACzC,gBAAQ,UAAU,OAAO,GAAG,YAAY,QAAQ,UAAU,KAAK;AAAA,MACnE;AACA,SAAG,qBAAqB;AAAA,IAC5B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,SAAS,OAAO;AApiB1B,QAAAA,KAAA;AAqiBQ,UAAM,KAAK;AACX,WAAAA,MAAA,GAAG,kBAAH,gBAAAA,IAAkB,mBAAlB,wBAAAA;AACA,QAAI,GAAG,SAAS;AACZ,SAAG,YAAY,MAAM,MAAM;AAAA,IAC/B,WACS,CAAC,GAAG,aAAa;AACtB,SAAG,MAAM;AAAA,IACb;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,iBAAiB,SAAS,OAAO;AArjBrC,QAAAA;AAsjBQ,UAAM,KAAK;AACX,QAAI,GAAG,eAAe,CAAC,GAAG,YAAY,MAAM,QAAQ,KAAK,GAAG;AACxD,aAAO;AAAA,IACX;AACA,UACI,iBAAiB,GAAG,gBACpB,aAAiB,MAAM,SAAS,eAAe,MAAM,eAAe,CAAC,IAAI,OACzE,UAAiB,WAAW,SAC5B,UAAiB,WAAW;AAEhC,QAAI,UAAU,GAAG,iBAAiB,MAAM,OAAO,QAAQ,GAAG,cAAc,IAAI,MAAM;AAClF,QAAI,SAAS;AACT,UAAI;AAGJ,UAAI,gBAAgB;AAChB,YAAI,MAAM,OAAO,QAAQ,cAAc,GAAG;AACtC,cAAI,GAAG,cAAc,cAAc;AAC/B,gBAAI,MAAM,QAAQ,UAAU,SAAS,OAAO,IAAI,QAAQ,cAAc,GAAG;AACrE,qBAAO,GAAG,QAAQ,UAAU;AAAA,YAChC,OACK;AACD,qBAAO,GAAG,QAAQ,SAAS;AAAA,YAC/B;AAAA,UACJ,OACK;AACD,gBAAI,MAAM,QAAQ,UAAU,SAAS,OAAO,IAAI,QAAQ,eAAe,GAAG;AACtE,qBAAO;AAAA,YACX,OACK;AACD,qBAAO;AAAA,YACX;AAAA,UACJ;AAAA,QACJ,OACK;AACD,iBAAO;AAAA,QACX;AAAA,MACJ,OAGK;AACD,YAAI,GAAG,cAAc,cAAc;AAC/B,cAAI,GAAG,eAAe,OAAO,OAAO,GAAG;AACnC,mBAAO,GAAG,QAAQ,UAAU;AAAA,UAChC,WACS,GAAG,gBAAgB,OAAO,OAAO,GAAG;AACzC,mBAAO,GAAG,QAAQ,SAAS;AAAA,UAC/B;AAAA,QACJ,OACK;AACD,cAAI,GAAG,cAAc,OAAO,OAAO,GAAG;AAClC,mBAAO;AAAA,UACX,WACS,GAAG,iBAAiB,OAAO,OAAO,GAAG;AAC1C,mBAAO;AAAA,UACX;AAAA,QACJ;AACA,YAAI,CAAC,MAAM;AACP,aAAG,UAAU;AAEb,iBAAO;AAAA,QACX;AAAA,MACJ;AAIA,UAAI,MAAM,SAAS,cAAc;AAC7B,cAAM,eAAe;AAAA,MACzB;AACA,YACI,eAAiB,GAAG,6BAA6B,YAAY,SAAS,IAAI,GAC1E,kBAAiBA,MAAA,GAAG,wBAAH,gBAAAA,IAAA,SAAyB,EAAE,SAAS,KAAK;AAE9D,UAAI,gBAAgB;AAChB,kBAAU,eAAe;AACzB,eAAU,eAAe;AAAA,MAC7B;AACA,UAAI,GAAG,QAAQ,qBAAqB,EAAE,SAAS,MAAM,CAAC,MAAM,OAAO;AAE/D,WAAG,UAAU;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA,OAAgB;AAAA,UAChB,OAAgB;AAAA,UAChB,WAAgB,GAAG;AAAA,UACnB,eAAgB,UAAU,cAAc,OAAO,KAAK,QAAQ;AAAA;AAAA,UAC5D,eAAgB,UAAU,cAAc,OAAO,KAAK,QAAQ;AAAA;AAAA,UAC5D,MAAgB,UAAU,cAAc,OAAO,KAAK,QAAQ;AAAA;AAAA,UAC5D,MAAgB,UAAU,cAAc,OAAO,KAAK,QAAQ;AAAA;AAAA,UAC5D,cAAgB,QAAQ;AAAA,UACxB,eAAgB,QAAQ;AAAA,UACxB;AAAA,UACA,QAAgB,UAAU,aAAa,IAAI,GAAG;AAAA,UAC9C,QAAgB,UAAU,aAAa,IAAI,GAAG;AAAA,UAC9C,UAAgB,MAAG;AArpBvC,gBAAAA;AAqpB0C,oBAAAA,MAAA,GAAG,UAAH,gBAAAA,IAAA;AAAA;AAAA,QAC1B;AACA,gBAAQ,UAAU,IAAI,GAAG,WAAW;AACpC,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,6BAA6B,OAAO,SAAS,MAAM;AAC/C,UAAM,SAAS,UAAU,KAAK,OAAO;AACrC,QAAI,IAAI,GACJ,IAAI;AACR,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,YAAI,OAAO,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,MAAM;AACvD;AAAA,MACJ,KAAK;AACD,YAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,SAAS,MAAM;AACvD;AAAA,MACJ,KAAK;AACD,YAAI,OAAO,IAAI,MAAM;AACrB;AAAA,MACJ,KAAK;AACD,YAAI,OAAO,IAAI,OAAO,SAAS,MAAM;AACrC;AAAA,IACR;AACA,WAAO,EAAE,GAAG,EAAE;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,mBAAmB,OAAO;AACtB,UACI,KAAS,MACT,SAAS,GAAG,iBAAiB,MAAM,OAAO,QAAQ,GAAG,cAAc,IAAI,MAAM;AAEjF,QAAI,WAAW,CAAC,GAAG,eAAe,GAAG,YAAY,MAAM,QAAQ,KAAK,IAAI;AACpE,SAAG,iBAAiB,GAAG,0BAA0B,MAAM,OAAO,QAAQ,GAAG,uBAAuB,IAAI,MAAM;AAC1G,UAAI,GAAG,gBAAgB;AACnB,YAAI;AACJ,YAAI,GAAG,cAAc,cAAc;AAC/B,iBAAO,GAAG,eAAe,OAAO,MAAM,KAAK,GAAG,gBAAgB,OAAO,MAAM;AAAA,QAC/E,OACK;AACD,iBAAO,GAAG,cAAc,OAAO,MAAM,KAAK,GAAG,iBAAiB,OAAO,MAAM;AAAA,QAC/E;AACA,YAAI,MAAM;AACN,aAAG,gBAAgB;AAAA,QACvB,OACK;AACD,aAAG,kBAAkB;AAAA,QACzB;AAAA,MACJ;AAAA,IACJ,WACS,GAAG,gBAAgB;AACxB,SAAG,kBAAkB;AAAA,IACzB;AAAA,EACJ;AAAA,EACA,mBAAmB,OAAO;AACtB,UAAM,KAAK;AACX,OAAG,iBAAiB,GAAG,0BAA0B,MAAM,OAAO,QAAQ,GAAG,uBAAuB,IAAI,MAAM;AAC1G,QAAI,GAAG,gBAAgB;AACnB,SAAG,kBAAkB;AAAA,IACzB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,OAAO;AAChB,UACI,KAAK,MACL;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAK;AACT,QAAI;AAEJ,QAAI,iBAAiB;AACjB,UAAI,GAAG,cAAc,cAAc;AAC/B,gBAAQ,OAAO,QAAQ,WAAW,QAAQ,SAAS,UAAU;AAAA,MACjE,OACK;AACD,gBAAQ,OAAO,QAAQ,WAAW,QAAQ,SAAS,WAAW;AAAA,MAClE;AAAA,IACJ;AACA,UACI;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAY,SACZ,EAAE,MAAM,IAAI,SAEZ,SAAY,QAAQ,WAAW,QAAQ,QACvC,SAAY,QAAQ,WAAW,QAAQ,QACvC,WAAY,UAAU,kBAAkB,SAAS,UAAU,KAAK,GAAG,UACnE,WAAY,UAAU,kBAAkB,SAAS,UAAU,KAAK,GAAG,UACnE,YAAY,UAAU,kBAAkB,SAAS,WAAW,KAAK,GAAG,WACpE,YAAY,UAAU,kBAAkB,SAAS,WAAW,KAAK,GAAG,WAEpE,OAAa,SAAS,WAAW,CAAC,GAAG,SAAU,SAAS,WAAW,IAAI,IAEvE,WAAY,eAAe,SAAS,MACpC,YAAY,gBAAgB,SAAS;AACzC,QACI,QAAS,KAAK,IAAI,UAAU,QAAQ,GACpC,SAAS,KAAK,IAAI,WAAW,SAAS;AAC1C,QAAI,WAAW,GAAG;AACd,cAAQ,KAAK,IAAI,OAAO,QAAQ;AAAA,IACpC;AACA,QAAI,YAAY,GAAG;AACf,eAAS,KAAK,IAAI,QAAQ,SAAS;AAAA,IACvC;AAEA,QAAI,MAAM,MAAM;AACZ,YAAM,OAAO;AAAA,IACjB;AACA,QAAI,GAAG,cAAc,gBAAgB,iBAAiB,OAAO;AACzD,UAAI,CAAC,qBAAqB;AACtB,cAAM,QAAQ,KAAK,IAAI,KAAK,IAAI;AAAA,MACpC;AACA,cAAQ,WAAW;AAEnB,UAAI,SAAS,UAAU,QAAQ,GAAG;AAC9B,cAAM,OAAO,KAAK,IAAI,KAAK,IAAI,gBAAgB,eAAe,GAAG,UAAU,gBAAgB,MAAM,GAAG,CAAC;AACrG,YAAI,CAAC,eAAe;AAChB,oBAAU,cAAc,SAAS,KAAK,MAAM,IAAI,CAAC;AAAA,QACrD;AACA,gBAAQ,OAAO;AAAA,MACnB,WAGS,SAAS,WAAW,mBAAmB,CAAC,eAAe;AAC5D,kBAAU,cAAc,SAAS,aAAa;AAAA,MAClD;AACA,gBAAU;AAAA,IACd,WACS,GAAG,cAAc,cAAc,kBAAkB,WAAW;AACjE,UAAI,CAAC,qBAAqB;AACtB,cAAM,SAAS,KAAK,IAAI,MAAM,IAAI;AAAA,MACtC;AACA,cAAQ,YAAY;AAEpB,UAAI,SAAS,SAAS,SAAS,GAAG;AAC9B,gBAAQ,OAAO,KAAK,IAAI,KAAK,IAAI,gBAAgB,gBAAgB,GAAG,WAAW,gBAAgB,MAAM,GAAG,CAAC;AACzG,YAAI,CAAC,eAAe;AAChB,oBAAU,cAAc,SAAS,QAAQ,IAAI;AAAA,QACjD;AAAA,MACJ,WAGS,SAAS,YAAY,mBAAmB,CAAC,eAAe;AAC7D,kBAAU,cAAc,SAAS,aAAa;AAAA,MAClD;AACA,gBAAU;AAAA,IACd;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAa,OAAO;AAn0BxB,QAAAA;AAo0BQ,UACI,KAAc,MACd,UAAc,GAAG,SACjB,cAAc,EAAE,SAAS,MAAM;AACnC,YAAQ,QAAQ,UAAU,OAAO,GAAG,WAAW;AAC/C,QAAI,QAAQ,SAAS;AACjB,UAAI,UAAU;AACd,UAAI,GAAG,cAAc,cAAc;AAC/B,kBAAU,QAAQ,YAAY,QAAQ,aAAa,QAAQ;AAAA,MAC/D,OACK;AACD,kBAAU,QAAQ,aAAa,QAAQ,cAAc,QAAQ;AAAA,MACjE;AACA,SAAG,QAAQ,UAAU,WAAW,UAAU,WAAW;AACrD,UAAI,CAAC,QAAQ,OAAO;AAChB,gBAAQ,SAAS;AAAA,MACrB;AAAA,IACJ,OACK;AACD,OAAAA,MAAA,GAAG,UAAH,gBAAAA,IAAA;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,QAAQ,MAAM,SAAS,OAAO;AACtC,UACI,KAAU,MACV,UAAU,GAAG;AACjB,YAAQ,QAAQ,UAAU,OAAO,GAAG,WAAW;AAC/C,QAAI,GAAG,cAAc,cAAc;AAE/B,UAAI,QAAQ,SAAS,UAAW,QAAQ,mBAAmB,CAAC,QAAQ,eAAgB;AAChF,kBAAU,cAAc,QAAQ,SAAS,QAAQ,aAAa;AAAA,MAClE;AACA,cAAQ,QAAQ,MAAM,QAAQ,QAAQ,eAAe;AAAA,IACzD,OACK;AACD,gBAAU,cAAc,QAAQ,SAAS,QAAQ,aAAa;AAC9D,cAAQ,QAAQ,MAAM,SAAS,QAAQ,gBAAgB;AAAA,IAC3D;AACA,KAAC,UAAU,GAAG,QAAQ,UAAU,EAAE,SAAS,MAAM,CAAC;AAClD,QAAI,CAAC,GAAG,aAAa;AACjB,SAAG,MAAM;AAAA,IACb;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA,kBAAkB;AACd,UACI,KAAS,MACT,SAAS,GAAG,iBAAiB,GAAG,eAAe,QAAQ,GAAG,cAAc,IAAI,GAAG;AAEnF,OAAG,eAAe,UAAU,IAAI,iBAAiB;AACjD,WAAO,UAAU,IAAI,sBAAsB;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB;AAChB,UACI,KAAS,MACT,SAAS,GAAG,iBAAiB,GAAG,eAAe,QAAQ,GAAG,cAAc,IAAI,GAAG;AACnF,cAAU,OAAO,UAAU,OAAO,sBAAsB;AACxD,OAAG,eAAe,UAAU,OAAO,iBAAiB;AACpD,OAAG,iBAAiB;AAAA,EACxB;AAAA,EACA,cAAc,OAAO,QAAQ;AACzB,WAAO,KAAK,gBAAgB,OAAO,MAAM,KAAK,KAAK,cAAc,OAAO,MAAM;AAAA,EAClF;AAAA,EACA,gBAAgB,OAAO,QAAQ;AAC3B,WAAO,KAAK,cAAc,eAAe,KAAK,eAAe,OAAO,MAAM,IAAI,KAAK,cAAc,OAAO,MAAM;AAAA,EAClH;AAAA,EACA,cAAc,OAAO,QAAQ;AACzB,WAAO,KAAK,cAAc,eAAe,KAAK,gBAAgB,OAAO,MAAM,IAAI,KAAK,iBAAiB,OAAO,MAAM;AAAA,EACtH;AAAA,EACA,qBAAqB,UAAU,aAAa;AACxC,UACI,cAAiB,WAAW,IAAI,GAChC,EAAE,WAAW,IAAI;AAErB,QAAI,KAAK,qBAAqB,aAAa,cAAc,cAAc,KAAK,eAAe;AACvF,aAAO,KAAK,IAAI,KAAK,OAAO,cAAc,KAAK,iBAAiB,WAAW,GAAG,CAAC;AAAA,IACnF;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,eAAe,OAAO,QAAQ;AAC1B,UACI,KAAkB,MAClB,EAAE,YAAY,IAAI;AACtB,QAAI,GAAG,cAAc,GAAG,UAAU,QAAQ,KAAK,MAAM,eAAe,GAAG,6BAA6B,GAAG,oBAAoB;AACvH,YAAM,aAAa,UAAU,KAAK,MAAM;AACxC,iBAAW,QAAQ,GAAG,qBAAqB,GAAG,aAAa,WAAW;AACtE,aAAO,WAAW,QAAQ,KAAK,WAAW,SAAS,YAAY,aAAa,KAAK,CAAC;AAAA,IACtF;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBAAgB,OAAO,QAAQ;AAC3B,UACI,KAAkB,MAClB,EAAE,YAAY,IAAI;AACtB,QAAI,GAAG,eAAe,GAAG,UAAU,QAAQ,KAAK,MAAM,eAAe,GAAG,6BAA6B,GAAG,oBAAoB;AACxH,YAAM,cAAc,UAAU,KAAK,MAAM;AACzC,kBAAY,IAAI,YAAY,QAAQ,GAAG,qBAAqB,GAAG,YAAY,WAAW;AACtF,aAAO,YAAY,QAAQ,KAAK,YAAY,SAAS,YAAY,aAAa,KAAK,CAAC;AAAA,IACxF;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,OAAO,QAAQ;AACzB,UACI,KAAmB,MACnB,EAAE,aAAa,IAAI;AACvB,QAAI,GAAG,aAAa,GAAG,UAAU,QAAQ,KAAK,MAAM,gBAAgB,GAAG,6BAA6B,GAAG,oBAAoB;AACvH,YAAM,YAAY,UAAU,KAAK,MAAM;AACvC,gBAAU,SAAS,GAAG,qBAAqB,GAAG,cAAc,YAAY;AACxE,aAAO,UAAU,SAAS,KAAK,UAAU,SAAS,YAAY,aAAa,KAAK,CAAC;AAAA,IACrF;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,iBAAiB,OAAO,QAAQ;AAC5B,UACI,KAAmB,MACnB,EAAE,aAAa,IAAI;AACvB,QAAI,GAAG,gBAAgB,GAAG,UAAU,QAAQ,KAAK,MAAM,gBAAgB,GAAG,6BAA6B,GAAG,oBAAoB;AAC1H,YAAM,eAAe,UAAU,KAAK,MAAM;AAC1C,mBAAa,IAAI,aAAa,SAAS,GAAG,qBAAqB,GAAG,cAAc,YAAY;AAC5F,aAAO,aAAa,SAAS,KAAK,aAAa,SAAS,YAAY,aAAa,KAAK,CAAC;AAAA,IAC3F;AACA,WAAO;AAAA,EACX;AAAA;AAEJ;AA5xBI,cAzKiB,cAyKV,gBAAe;AAAA;AAAA;AAAA,EAGlB,qBAAsB;AAC1B;AAyxBJ,aAAa,SAAS;;;ACz/BtB,IACI,aAAa;AADjB,IAEI,eAAe;AAUnB,IAAqB,iBAArB,MAAqB,gBAAe;AAAA;AAAA;AAAA;AAAA;AAAA,EAKhC,OAAO,IAAI,YAAY,QAAQ;AAC3B,QAAI,QAAS,GACT,SAAS,OAAO,IAAI,CAAC,KAAK,MAAM;AAC5B,UAAI,MAAM,QAAQ,CAAC;AACnB,UAAI,MAAM,QAAQ,GAAG,GAAG;AACpB,eAAO,IAAI,OAAO,CAAC,KAAK,SAAS,QAAQ,OAAO,SAAS,WAAW,KAAK,KAAK,IAAI,QAAQ,MAAM,EAAE;AAAA,MACtG,OACK;AACD,YAAI,QAAQ,QAAW;AACnB,gBAAM;AAAA,QACV;AACA,eAAO,OAAO,QAAQ,WAAW,IAAI,KAAK,IAAI;AAAA,MAClD;AACA;AACA,aAAO;AAAA,IACX,CAAC,EAAE,KAAK,EAAE;AACd,QAAI,SAAS,QAAQ,QAAQ;AACzB,gBAAU,QAAQ,QAAQ,SAAS,CAAC;AAAA,IACxC;AAIA,WAAO,OAAO,QAAQ,YAAY,IAAI,EAAE,QAAQ,cAAc,GAAG,EAAE,KAAK;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,QAAQ,YAAY,QAAQ;AAC/B,QAAI,QAAS,GACT,SAAS,OAAO,IAAI,CAAC,KAAK,MAAM;AAC5B,UAAI,MAAM,QAAQ,CAAC;AACnB,UAAI,MAAM,QAAQ,GAAG,GAAG;AACpB,eAAO,IAAI,OAAO,CAAC,KAAK,SAAS,QAAQ,OAAO,SAAS,WAAW,KAAK,KAAK,IAAI,QAAQ,MAAM,EAAE;AAAA,MACtG,OACK;AACD,YAAI,QAAQ,QAAW;AACnB,gBAAM;AAAA,QACV;AACA,eAAO,OAAO,QAAQ,WAAW,IAAI,KAAK,IAAI;AAAA,MAClD;AACA;AACA,aAAO;AAAA,IACX,CAAC,EAAE,KAAK,EAAE;AACd,QAAI,SAAS,QAAQ,QAAQ;AACzB,gBAAU,QAAQ,QAAQ,SAAS,CAAC;AAAA,IACxC;AAGA,WAAO,OAAO,QAAQ,YAAY,IAAI,EAAE,KAAK;AAAA,EACjD;AAAA,EACA,OAAO,OAAO,OAAO;AACjB,WAAO,YAAY,MAAM;AACrB,aAAO,gBAAe,IAAI,GAAG,IAAI,EAAE,OAAO,KAAK;AAAA,IACnD;AAAA,EACJ;AAAA,EACA,OAAO,KAAK,OAAO;AAAA,EACnB;AACJ;AACA,eAAe,SAAS;;;AC3ExB,IAAM,qBAAN,cAAiC,MAAM;AAAA,EACnC,YAAY,UAAU,MAAM;AACxB,UAAM;AACN,SAAK,WAAW;AAChB,SAAK,OAAO;AAAA,EAChB;AACJ;AAEA,IAAM,eAAN,MAAmB;AAAA,EACf,YAAY,UAAU,UAAU;AAC5B,SAAK,WAAW;AAChB,SAAK,WAAW;AAChB,SAAK,UAAU,gBAAgB,QAAQ;AAAA,EAC3C;AAAA;AAAA,EAEA,IAAI,cAAc;AACd,QAAI,CAAC,KAAK,cAAc;AACpB,WAAK,eAAe,IAAI,KAAK,GAAG,KAAK,OAAO;AAAA,IAChD;AACA,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA,EAEA,IAAI,aAAa;AACb,QAAI,CAAC,KAAK,aAAa;AACnB,WAAK,cAAc,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,OAAO,CAAC,EAAE,QAAQ;AAAA,IACnE;AACA,WAAO,KAAK;AAAA,EAChB;AACJ;AAEA,IACI,qBAAqB,CAACC,OAAM,aAAa;AACrC,QAAM,eAAeA,MAAK,eAAe,SAAS,EAAE,SAAS,CAAC;AAC9D,SAAO,IAAI,aAAa,cAAc,QAAQ;AAClD;AAJJ,IAMI,eAAe,CAAC,OAAO,aAAa;AAChC,QAAM,EAAE,YAAY,SAAS,IAAK,mBAAmB,IAAI,KAAK,KAAK,GAAG,QAAQ;AAC9E,SAAO,EAAE,SAAU,QAAQ,cAAc,KAAO,YAAa,YAAY,UAAW,SAAS;AACjG;AATJ,IAWI,kBAAkB,gBAAc;AAC5B,QAAM,SAAS,WAAW,MAAM,QAAQ,EAAE,IAAI,OAAK,IAAI,CAAC;AACxD,SAAO,CAAC,KAAK;AACb,SAAO;AACX;AAfJ,IAgBI,MAAQ;AAhBZ,IAiBI,OAAQ;AAjBZ,IAkBI,MAAQ;AAlBZ,IAmBI,QAAQ;AAnBZ,IAwBI,kBAAkB,CAAC,UAAU,SAAS;AAClC,QAAM,SAAS,gBAAgB,IAAI,UAAU,IAAI;AACjD,MAAI,QAAQ;AACR,WAAO;AAAA,EACX;AACA,QACI,UAAiB,IAAI,mBAAmB,UAAU,IAAI,GAEtD,gBAAiB,IAAI,KAAK,KAAK,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE,QAAQ;AAC5D,MAAI,QAAiB,eACjB,OAAiB,OACjB,aAAiB,GACjB,iBAAiB,CAAC,GAClB,gBAAiB,MACjB,YAAY,UAAU,QAAS;AAQnC,SAAO,CAAC,MAAM;AAEV,KAAC,EAAE,QAAQ,YAAY,SAAS,IAAI,aAAa,OAAO,QAAQ;AAGhE,QAAI,iBAAiB,MAAM;AACvB,sBAAgB;AAChB,cAAQ,KAAK,EAAE,OAAO,CAAC;AAAA,IAC3B,WAES,OAAO,KAAK,WAAW,eAAe;AAE3C,aAAO,SAAS,QAAQ,MAAM;AAAA,IAClC,WAES,OAAO,KAAK,WAAW,eAAe;AAE3C,UAAI,SAAS,KAAK;AACd,eAAO;AAAA,MACX,OAEK;AAED,YAAI,QAAQ,WAAW,GAAG;AACtB,kBAAQ,KAAK,cAAc;AAC3B,0BAAgB,eAAe;AAAA,QAEnC,OAEK;AACD,kBAAQ,CAAC,EAAE,aAAa,eAAe;AACvC,kBAAQ,CAAC,EAAE,kBAAkB,eAAe;AAE5C,iBAAO;AAAA,QACX;AAEA,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,qBAAiB,EAAE,QAAQ,iBAAkB,UAAU,YAAa,WAAW;AAE/E,QAAI,SAAS,OAAO;AAChB,cAAQ;AACR,eAAS,aAAa;AACtB,oBAAc;AAAA,IAClB;AACA,aAAS;AAET,QAAI,aAAa,IAAI;AACjB,aAAO;AAAA,IACX;AAAA,EACJ;AAEA,kBAAgB,IAAI,OAAO;AAC3B,SAAO;AACX;AAtGJ,IAuGI,kBAAkB;AAAA,EACd,QAAS,CAAC;AAAA,EACV,IAAI,UAAU,MAAM;AA5I5B,QAAAC;AA6IY,YAAOA,MAAA,KAAK,OAAO,QAAQ,MAApB,gBAAAA,IAAwB;AAAA,EACnC;AAAA,EACA,IAAI,YAAY;AACZ,UACI,EAAE,SAAS,IAAI,YACf,EAAE,OAAO,IAAI;AACjB,QAAI,CAAC,OAAO,QAAQ,GAAG;AACnB,aAAO,QAAQ,IAAI,CAAC;AAAA,IACxB;AACA,WAAO,QAAQ,EAAE,WAAW,IAAI,IAAI;AAAA,EACxC;AACJ;AAKJ,IAAqB,iBAArB,MAAoC;AAAA,EAChC,WAAW,QAAQ;AACf,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,OAAO,WAAWD,OAAM,UAAU;AAC9B,QAAI,OAAO,aAAa,UAAU;AAC9B,aAAO,KAAK,YAAYA,OAAM,QAAQ;AAAA,IAC1C;AACA,UAAM,SAAS,mBAAmBA,OAAM,QAAQ;AAChD,QAAI,OAAO,QAAQ,CAAC,MAAM,OAAO,YAAY,SAAS,GAAG;AACrD,cAAQ,KAAK,iEAAiE;AAAA,IAClF;AACA,WAAO,OAAO;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,OAAO,aAAaA,OAAM,UAAU;AAChC,QAAI,OAAO,aAAa,UAAU;AAC9B,aAAO,KAAK,cAAcA,OAAM,QAAQ;AAAA,IAC5C;AACA,UACI,UAAc,KAAK,YAAYA,KAAI,GACnC,cAAc,gBAAgB,UAAUA,MAAK,eAAe,CAAC;AACjE,QAAI,YAAY,YAAY,CAAC,EAAE;AAC/B,QAAI,YAAY,WAAW,GAAG;AAC1B,YAAM,WAAW,KAAK,IAAI,GAAG,OAAO;AACpC,UAAI,YAAY,YAAY,CAAC,EAAE,cAAc,WAAW,YAAY,CAAC,EAAE,YAAY;AAC/E,oBAAY,YAAY,CAAC,EAAE;AAAA,MAC/B;AAAA,IACJ;AAEA,YAAQ,CAAC,KAAK;AACd,WAAO,IAAI,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,OAAO,YAAYA,OAAM,WAAW;AAChC,UAAM,SAASA,MAAK,kBAAkB,IAAI;AAC1C,WAAO,IAAI,KAAKA,MAAK,QAAQ,IAAI,SAAS,KAAK,GAAI;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,OAAO,cAAcA,OAAM,WAAW;AAClC,UAAM,SAAS,CAACA,MAAK,kBAAkB,IAAI;AAC3C,WAAO,IAAI,KAAKA,MAAK,QAAQ,IAAI,SAAS,KAAK,GAAI;AAAA,EACvD;AAAA;AAAA;AAAA,EAGA,OAAO,YAAYA,OAAM;AACrB,WAAO,CAACA,MAAK,YAAY,GAAGA,MAAK,SAAS,GAAGA,MAAK,QAAQ,GAAGA,MAAK,SAAS,GAAGA,MAAK,WAAW,GAAGA,MAAK,WAAW,GAAGA,MAAK,gBAAgB,CAAC;AAAA,EAC9I;AACJ;AACA,eAAe,kBAAkB;AACjC,eAAe,SAAS;;;ACnOxB,IAAqB,SAArB,MAAqB,eAAc,OAAO;AAAA,EAGtC,WAAW,eAAe;AACtB,WAAO;AAAA,MACH,YAAa;AAAA,QACT,gBAAiB;AAAA,QACjB,SAAiB;AAAA,MACrB;AAAA,MACA,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMX,SAAU;AAAA,MACV,aAAc;AAAA;AAAA,MAEd,gBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMjB,cAAe;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,MA6Bf,OAAQ;AAAA,MACR,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUb,MAAO;AAAA,IACX;AAAA,EACJ;AAAA,EAOA,WAAW,MAAM;AACb,QAAI,QAAQ,SAAS,QAAQ,UAAU;AACnC,cAAQ;AAAA,IACZ,WACS,SAAS,WAAW,QAAQ,OAAO;AACxC,aAAO,YAAY;AAAA,IACvB;AACA,WAAO;AAAA,EACX;AAAA,EACA,UAAU;AACN,UAAM,EAAE,UAAU,OAAO,MAAM,cAAc,OAAO,SAAS,KAAK,IAAI;AACtE,WAAO;AAAA,MACH,QAAS,YAAY,KAAK;AAAA,MAC1B,OAAS;AAAA,QACL,GAAG,aAAa,UAAU,OAAO,QAAQ;AAAA,QACzC,CAAC,UAAU,IAAI,EAAE,GAAI;AAAA,QACrB,gBAAqB;AAAA;AAAA,MACzB;AAAA,MACA;AAAA,MACA,OAAQ;AAAA,QACJ,GAAG,UAAU,WAAW,KAAK;AAAA,QAC7B,UAAW,KAAK,MAAM,GAAG,EAAE,CAAC;AAAA,MAChC;AAAA,MACA,UAAW;AAAA,QACP,iBAAkB,gBAAgB;AAAA,UAC9B,OAAQ,sBAAsB,UAAU,GAAI;AAAA,UAC5C,OAAQ;AAAA,YACJ,oBAAqB;AAAA,UACzB;AAAA,QACJ;AAAA,MACJ;AAAA;AAAA,MAEA,WAAY;AAAA,QACR,OAAQ;AAAA,MACZ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,YAAY;AACR,SAAK,QAAQ;AACb,UAAM,UAAU;AAAA,EACpB;AAAA,EACA,aAAa,MAAM;AACf,UAAM,EAAE,YAAY,QAAQ,IAAI;AAChC,WAAO,SAAS,QAAQ,MAAM,IAAI,GAAG,EAAE,IAAI,QAAQ,eAAe;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,OAAO;AAhLjB,QAAAE,KAAA;AAiLQ,UAAM,MAAM,KAAK,GAAG,SAAS;AAC7B,UACI,KAAK,MACL,EAAE,SAAS,KAAK,IAAI,IACpB,SAAS,OAAM,OAAO,IAAI,GAC1B,IAAS,KAAK,MAAM,GAAG,EAAE,CAAC;AAC9B,QAAI,CAAC,OAAO,SAAS,EAAE,GAAG;AACtB,cAAQ,MAAM,CAAC,MAAK,MAAAA,MAAA,OAAO,CAAC,MAAR,gBAAAA,IAAW,aAAa,OAAxB,YAA8B,GAAG,cAAc;AACnE,aAAO,QAAQ,EAAE;AACjB,cAAQ,sBAAsB;AAC9B,cAAQ,UAAU,OAAO,cAAc;AACvC,UAAI,GAAG,UAAU,GAAG;AAChB,WAAG,cAAc,GAAG,WAAW,QAAQ,GAAG,OAAO;AAAA,MACrD;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,OAAO;AACT,UAAM,KAAK;AACX,OAAG,QAAQ;AACX,OAAG,QAAQ,UAAU,IAAI,cAAc;AACvC,QAAI,GAAG,eAAe,CAAC,GAAG,cAAc;AACpC,SAAG,eAAe,GAAG,WAAW,WAAW,GAAG,cAAc;AAAA,IAChE;AAAA,EACJ;AAAA,EACA,UAAU;AACN,UAAM,SAAS,OAAM,OAAO,KAAK,IAAI;AACrC,QAAI,OAAO,SAAS,IAAI,GAAG;AACvB,aAAO,OAAO,OAAO,QAAQ,IAAI,GAAG,CAAC;AAAA,IACzC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,UAAU;AACb,WAAO,KAAK,OAAM,MAAM,EAAE,QAAQ,OAAK,OAAM,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,WAAS,MAAM,KAAK,CAAC,CAAC;AAAA,EAC3G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,OAAO,KAAK,QAAQ;AAChB,UAAM,QAAQ,OAAM,IAAI;AAAA,MACpB,aAAc;AAAA,MACd,aAAc,SAAS;AAAA,IAC3B,GAAI,OAAO,WAAW,WAAY,EAAE,MAAO,OAAO,IAAI,MAAM;AAC5D,UAAM,KAAK;AACX,WAAO;AAAA,EACX;AACJ;AAvLI,cADiB,QACV,SAAQ;AACf,cAFiB,QAEV,QAAO;AAiEd,cAnEiB,QAmEV,UAAS;AAAA,EACZ,aAAiB,CAAC;AAAA,EAClB,WAAiB,CAAC;AAAA,EAClB,gBAAiB,CAAC;AAAA,EAClB,cAAiB,CAAC;AACtB;AAxEJ,IAAqB,QAArB;AA0LA,MAAM,UAAU;AAChB,MAAM,SAAS;;;ACvOf,IAAqB,eAArB,MAAkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ9B,OAAO,QAAQ,IAAI;AACf,WAAO,OAAO,QAAQ,EAAE;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,YAAY,SAAS,MAAM,OAAO;AACrC,WAAO,OAAO,YAAY,SAAS,MAAM,KAAK;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,OAAO,aAAa,SAAS,CAAC,GAAG;AAC7B,WAAO,OAAO,WAAW,SAAS,OAAO,OAAO,MAAM;AAAA,EAC1D;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,EAmCA,OAAO,OAAO,QAAQ,QAAQ;AAC1B,aAAS,MAAM,QAAQ,MAAM,KAAK,UAAU,CAAC,MAAM;AACnD,QAAI,kBAAkB,eAAe,OAAO,WAAW,UAAU;AAC7D,eAAS;AAAA,QACL,UAAW;AAAA,MACf;AAAA,IACJ;AAEA,QAAI,OAAO,aAAa;AACpB,YAAM,SAAS,OAAO,OAAO,gBAAgB,WAAW,SAAS,eAAe,OAAO,WAAW,IAAI,OAAO;AAC7G,UAAI,OAAO,YAAY;AACnB,eAAO,eAAe,OAAO;AAAA,MACjC,OACK;AACD,eAAO,WAAW;AAAA,MACtB;AAAA,IACJ;AACA,WAAO,OAAO,IAAI,UAAQ,OAAO,OAAO,aAAa,OAAO,CAAC,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,EACxF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,OAAO,UAAU,SAAS,QAAQ;AAC9B,WAAO,OAAO,OAAO,aAAa,OAAO;AAAA,MACrC,YAAa;AAAA,IACjB,GAAG,OAAO,WAAW,WAAW;AAAA,MAC5B,MAAO;AAAA,IACX,IAAI,MAAM,GAAG,OAAO;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,OAAO,gBAAgB,SAAS,QAAQ;AACpC,UAAM,KAAK;AACX,QAAI,GAAG,oBAAoB;AACvB,SAAG,mBAAmB,QAAQ;AAAA,IAClC;AACA,QAAI,mBAAmB,aAAa;AAChC,aAAO,aAAa;AAAA,IACxB,OACK;AACD,aAAO,aAAa,SAAS;AAC7B,UAAI,MAAM,QAAQ,OAAO,GAAG;AACxB,kBAAU,IAAI,MAAM,GAAG,OAAO;AAAA,MAClC;AACA,UAAI,mBAAmB,OAAO;AAC1B,eAAO,QAAQ;AAAA,UACX,UAAW;AAAA,QACf;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,oBAAoB,EAAE,SAAU,GAAG,qBAAqB,KAAK;AACpE,WAAO,GAAG,qBAAqB,OAAO,OAAO,QAAQ,MAAM;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAO,cAAc,SAAS,cAAc;AACxC,WAAO,OAAO,cAAc,SAAS,YAAY;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,mBAAmB,SAAS;AAC/B,WAAO,OAAO,YAAY,SAAS,EAAE,mBAAmB,OAAO;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,uBAAuB,SAAS;AACnC,WAAO,OAAO,YAAY,SAAS,EAAE,uBAAuB,OAAO;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,KAAK,SAAS,MAAM,WAAW;AAClC,QAAI,SAAS;AAET,UAAI,mBAAmB,aAAa;AAChC,kBAAU;AAAA,UACN,QAAS;AAAA,UACT,MAAS;AAAA,QACb;AAAA,MACJ;AACA,aAAO,KAAK,KAAK,SAAS,QAAQ,MAAM;AAAA,IAC5C;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,OAAO,SAAS,QAAQ,MAAM;AACjC,QAAI,QAAQ,MAAM;AACd,UAAI,OAAO;AACP,gBAAQ,KAAK,MAAM;AAAA,MACvB,OACK;AACD,gBAAQ,KAAK,KAAK;AAAA,MACtB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,MAAM,KAAK;AACd,WAAO,MAAM,KAAK,GAAG;AAAA,EACzB;AAAA;AAEJ;AACA,aAAa,SAAS;;;AC3PtB,IAAqB,YAArB,MAA+B;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,EA8D3B,OAAO,kBAAkB,KAAK,UAAU,CAAC,GAAG;AAExC,YAAQ,SAAS,SAAS;AAAA,MACtB,UAAsB;AAAA,MACtB,aAAsB;AAAA,MACtB,eAAsB;AAAA,MACtB,qBAAsB;AAAA,IAC1B,CAAC;AACD,UAAM,EAAE,UAAU,aAAa,eAAe,oBAAoB,IAAI;AACtE,QAAI,EAAE,MAAM,IAAI;AAChB,YAAQ,QAAQ,WAAW,KAAK,MAAM;AACtC,UAAM,SAAS,gBAAgB,4DAA4D;AAC3F,UAAM,YAAY,CAAC,MAAM;AACrB,YAAM,WAAW,CAAC;AAClB,iBAAW,OAAO,GAAG;AACjB,cAAM,OAAO,EAAE,GAAG;AAClB,YAAI,MAAM,QAAQ,IAAI,GAAG;AACrB,cAAI,qBAAqB;AACrB,qBAAS,KAAK,IAAI,GAAG,GAAG;AAAA,UAC5B;AACA,qBAAW,WAAW,MAAM;AACxB,gBAAI,YAAY,QAAQ;AACpB,uBAAS,KAAK,IAAI,WAAW,GAAG;AAAA,YACpC,OACK;AACD,uBAAS,KAAK,IAAI,GAAG,GAAG;AAAA,YAC5B;AACA,qBAAS,KAAK,UAAU,OAAO,CAAC;AAChC,gBAAI,YAAY,QAAQ;AACpB,uBAAS,KAAK,KAAK,WAAW,GAAG;AAAA,YACrC,OACK;AACD,uBAAS,KAAK,KAAK,GAAG,GAAG;AAAA,YAC7B;AAAA,UACJ;AACA,cAAI,qBAAqB;AACrB,qBAAS,KAAK,KAAK,GAAG,GAAG;AAAA,UAC7B;AAAA,QACJ,WACS,QAAQ,SAAS,IAAI,GAAG;AAC7B,mBAAS,KAAK,IAAI,GAAG,IAAI,UAAU,IAAI,CAAC,KAAK,GAAG,GAAG;AAAA,QACvD,OACK;AACD,cAAI,QAAQ,MAAM;AACd,qBAAS,KAAK,IAAI,GAAG,IAAI;AAAA,UAC7B,OACK;AACD,qBAAS,KAAK,IAAI,GAAG,IAAI,aAAa,WAAW,IAAI,CAAC,KAAK,GAAG,GAAG;AAAA,UACrE;AAAA,QACJ;AAAA,MACJ;AACA,aAAO,SAAS,KAAK,EAAE;AAAA,IAC3B;AACA,WAAO,GAAG,MAAM,IAAI,QAAQ,GAAG,KAAK,IAAI,UAAU,GAAG,CAAC,KAAK,QAAQ;AAAA,EACvE;AACJ;AACA,UAAU,SAAS;;;ACxHnB,IAAqB,kBAArB,MAAqC;AAAA,EACjC,cAAc;AACV,SAAK,YAAY,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI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", "names": ["defaultValue", "_a", "success", "bryntum", "document", "string", "_a", "hasOwnProperty", "defaultValue", "_a", "_a", "hasOwnProperty", "toString", "equal", "fn", "_a", "oldValue", "newValue", "_a", "defineProperty", "configuringSymbol", "instancePropertiesSymbol", "emptyObject", "fn", "delay", "mixin", "proto", "defaultValue", "detacher", "filter", "map", "items", "fn", "hasOwnProperty", "fn", "alt", "args", "_a", "hasOwnProperty", "_a", "alt", "delay", "name", "fn", "detacher", "result", "locale", "_a", "locale", "escape", "emptyObject", "_a", "locale", "clsName", "success", "toString", "DATE_TYPE", "date", "locale", "day", "format", "emptyFn", "month", "format", "fn", "month", "date", "dateString", "parser", "_a", "day", "unit", "amount", "min", "toString", "DATE_TYPE", "tempDate", "locale", "hasOwn", "split", "proto", "map", "defaultValue", "emptyArray", "emptyArray", "round", "zone", "s1", "s2", "fn", "detacher", "alt", "delay", "spec", "_a", "wrappedFn", "now", "defaultValue", "whiteSpaceRe", "emptyObject", "DH", "DH", "_a", "document", "el", "fn", "_b", "emptyObject", "elementOrConfig", "round", "cls", "doc", "whiteSpaceRe", "EventHelper", "_a", "Widget", "_a", "assign", "fn", "_a", "defineProperty", "performance", "bryntum", "map", "emptyArray", "emptyFn", "emptyObject", "fn", "_a", "string", "delay", "_a", "_a", "value", "stores", "_a", "fn", "i", "beforeRecord", "_a", "defineProperty", "registry", "getOwnPropertyDescriptor", "_a", "_a", "_a", "record", "defineProperty", "hasOwn", "_a", "defaultValue", "field", "value", "isEqual", "fn", "stores", "hasOwn", "format", "digitsRe", "locale", "min", "format", "_a", "date", "now", "filter", "idCounts", "items", "emptyArray", "_a", "map", "fn", "items", "filter", "item", "items", "fn", "_a", "added", "_a", "changes", "filter", "fn", "_a", "_a", "isVisible", "emptyArray", "result", "ascending", "prototype", "records", "_a", "min", "sum", "distinct", "fn", "ascending", "_a", "fn", "_a", "filter", "_a", "_a", "emptyArray", "_a", "event", "success", "length", "p", "map", "i", "fn", "_a", "STM_PROP", "_a", "context", "index", "defaultTraverseOptions", "fixTraverseOptions", "_a", "items", "fn", "immediatePromise", "date", "_a", "delay", "isArray", "success", "Model", "throwAbstractMethodCall", "_a", "PARENT_MODEL_PROP", "CHILD_MODELS_PROP", "CONTEXT_PROP", "STORE_PROP", "MODEL_LIST_PROP", "INSERT_INDEX_PROP", "CONTEXT_PROP", "STORE_PROP", "MODEL_LIST_PROP", "CONTEXT_PROP", "STORE_PROP", "fn", "_a", "arraySlice", "emptyArray", "emptyObject", "htmlRe", "getPrototypeOf", "toString", "isObject", "_a", "equal", "cls", "ns", "fn", "_a", "immediatePromise", "_a", "fn", "element", "fn", "defineProperty", "el", "delay", "_a", "_a", "actions", "preventDefault", "_a", "hasOwn", "defineProperty", "string", "alignSpecRe", "w", "_a", "prototype", "proto", "alt", "result", "_b", "e", "isArray", "fn", "filter", "Mask", "_a", "items", "map", "_a", "emptyObject", "isArray", "items", "_a", "_a", "delay", "fn", "items", "_a", "_a", "_a", "autoAlign", "emptyObject", "idSeed", "_a", "headerDock", "_a", "instance", "defaults", "emptyArray", "emptyObject", "_a", "alt", "_a", "_a", "_a", "_a", "isVisible", "filter", "emptyArray", "emptyObject", "_a", "alt", "filter", "_a", "bIcon", "bFa", "_a", "items", "_a", "_a", "items", "menu", "_a", "valid", "_a", "element", "_a", "_a", "date", "_a", "_a", "_a", "_a", "filter", "_a", "detacher", "_a", "event", "detacher", "_a", "_a", "_a", "_a", "delay", "_a", "defineProperty", "hasOwn", "_a", "date", "date", "month", "fn", "day", "fn", "cont", "parsers", "_a", "element", "detacher", "immediatePromise", "_a", "currentOverElement", "empty", "map", "_a", "_a", "_a", "emptyArray", "_a", "empty", "stopEvent", "_a", "_a", "items", "navigator", "_a", "delay", "fn", "items", "isObject", "oldValue", "navigator", "isVisible", "items", "_a", "_a", "date", "month", "isVisible", "day", "_a", "_a", "_a", "emptyArray", "_a", "date", "month", "picker", "min", "date", "_a", "format", "_a", "pm", "hour", "format", "min", "min", "_a", "_a", "_a", "round", "_a", "record", "_a", "date", "valueFields", "filter", "operators", "filter", "_a", "_a", "_a", "dockIsHorz", "_a", "delay", "min", "_a", "_a", "_a", "items", "_a", "_a", "items", "_a", "_a", "detacher", "_a", "_a", "_a", "length", "fn", "ns", "_a", "_a", "alt", "_a", "filter", "_a", "fn", "_a", "_a", "_b", "actions", "format", "min", "_a", "fn", "_a", "_a", "_a", "min", "format", "_a", "_a", "isCollapsed", "_a", "string", "forType", "features", "_a", "items", "_a", "record", "items", "_a", "group", "_a", "button", "subItem", "items", "_a", "column", "_a", "items", "_a", "_a", "_a", "_a", "filter", "_a", "isArray", "filter", "items", "_a", "filter", "items", "_a", "fn", "ascending", "items", "column", "sum", "items", "_a", "_a", "items", "map", "actions", "_a", "filter", "subGrid", "_a", "actions", "_a", "items", "actions", "_a", "height", "fn", "_b", "_a", "_a", "actions", "_a", "items", "emptyArray", "_a", "items", "column", "_a", "config", "split", "subGrid", "items", "fn", "_a", "immediatePromise", "_a", "record", "_a", "fn", "items", "fn", "items", "_a", "fn", "_a", "splitterWidth", "id", "range", "detacher", "pagesExtractor", "detacher", "pagesExtractor", "pagesExtractor", "_a", "detacher", "_a", "doc", "html", "resolve", "reject", "_a", "zipcelx", "fn", "_a", "hasFlex", "_a", "fn", "xAxis", "_a", "_a", "eventProps", "_a", "_a", "_a", "_a", "fn", "items", "detacher", "delay", "_a", "immediatePromise", "defaultScrollOptions", "scrollPromise", "_a", "_a", "fn", "items", "subGrid", "fn", "emptyString", "locale", "_a", "En_default", "storeListenerName", "defaultScrollOptions", "emptyArray", "_a", "column", "oldParent", "rows", "items", "scrollPromise", "fn", "_a", "_a", "min", "string", "_a", "date", "_a", "date", "locale", "days", "date", "En_default", "preset", "_a", "fn", "date", "increment", "day", "_a", "date", "min", "tempDate", "_a", "date", "_a", "date", "format", "date", "_a", "split", "milliseconds", "_a", "now", "_a", "_a", "defaultScrollOptions", "_a", "setTimeSpanOptions", "date", "_a", "Header", "_a", "Header", "_a", "emptyObject", "_a", "fn", "maintainVisibleStart", "isArray", "hour", "day", "date", "date", "_a", "map", "mixin", "self", "base", "mixinState", "Base", "AbstractPartOfProjectGenericMixin", "CorePartOfProjectGenericMixin", "_a", "AbstractPartOfProjectStoreMixin", "superProto", "eventName", "param", "_a", "AbstractPartOfProjectModelMixin", "_a", "CorePartOfProjectModelMixin", "_a", "CoreResourceMixin", "_a", "CorePartOfProjectStoreMixin", "dataAddRemoveActions", "AbstractResourceStoreMixin", "_a", "CoreResourceStoreMixin", "_a", "EngineMixin", "_a", "fn", "resource", "resourceId", "returnTrue", "_a", "filter", "date", "i", "length", "indexName", "emptyArray", "MILLIS_PER_DAY", "date", "_a", "proto", "_a", "emptyArray", "day", "days", "date", "endDate", "day", "month", "fn", "fn", "delay", "fn", "days", "date", "fn", "days", "day", "occurrenceDate", "fn", "days", "day", "occurrenceDate", "format", "fn", "date", "_a", "days", "date", "emptyArray", "_a", "_a", "fn", "CoreEventMixin", "_a", "_a", "CoreHasAssignmentsMixin", "_a", "CoreHasDependenciesMixin", "SchedulerCoreEvent", "EngineMixin", "dataAddRemoveActions", "AbstractEventStoreMixin", "_a", "CoreEventStoreMixin", "_a", "EngineMixin", "_a", "CoreAssignmentMixin", "_a", "EngineMixin", "_a", "fn", "format", "AbstractAssignmentStoreMixin", "CoreAssignmentStoreMixin", "_a", "EngineMixin", "_a", "stores", "CoreDependencyMixin", "_a", "EngineMixin", "event", "result", "fn", "AbstractDependencyStoreMixin", "emptySet", "CoreDependencyStoreMixin", "EngineMixin", "_a", "fn", "stores", "store", "record", "phantomIdField", "_a", "_a", "_a", "stores", "_a", "_a", "_a", "stores", "_a", "date", "later", "min", "month", "constraint", "i", "fn", "now", "split", "expr", "items", "every", "str", "t", "hour", "CalendarIntervalMixin", "base", "CalendarIntervalStore", "TimeUnit", "ProjectConstraintResolution", "ConstraintType", "SchedulingMode", "DependencyValidationResult", "DependencyType", "DependenciesCalendar", "ProjectType", "Direction", "ConstraintIntervalSide", "date", "EdgeInclusion", "CalendarIteratorResult", "_a", "IndexPosition", "date", "_a", "date", "startDate", "UnspecifiedTimeIntervalModel", "_a", "date", "day", "CoreCalendarMixin", "AbstractCalendarManagerStoreMixin", "_a", "CoreCalendarManagerStoreMixin", "AbstractProjectMixin", "DelayableWrapper", "SchedulerCoreProjectMixin", "_a", "fn", "stores", "EngineMixin", "_a", "_a", "format", "formats", "_a", "_a", "resourceRecord", "_a", "e1", "e2", "_a", "fn", "_a", "eventStyle", "eventColor", "_a", "e1", "e2", "defaultScrollOptions", "_a", "scrollPromise", "copyProperties", "_a", "_a", "args", "assignments", "preventDefault", "emptyObject", "navigator", "_a", "_a", "_a", "_a", "_a", "date", "releaseEventActions", "renderEventActions", "chronoFields", "emptyObject", "_a", "record", "cacheKey", "_a", "_a", "_a", "_a", "_a", "_a", "day", "days", "fn", "month", "date", "_a", "record", "_a", "date", "_a", "_a", "_b", "_a", "DH", "date", "_a", "items", "_a", "_a", "_a", "items", "emptyObject", "_a", "_a", "valid", "_a", "i", "side", "box", "distance", "xDiff", "yDiff", "line", "_a", "_a", "eventNameMap", "emptyObject", "_a", "_a", "_a", "actions", "_a", "date", "detacher", "items", "resourceRecord", "_a", "_a", "isWorkingTime", "_a", "navigator", "_a", "days", "day", "day", "items", "items", "_a", "_a", "_a", "eventRecord", "context", "items", "items", "filter", "_a", "items", "_a", "_a", "GroupSummary", "_a", "_a", "_a", "items", "_a", "RowReorder", "RowResize", "_a", "_a", "date", "items", "date", "isWorkingTime", "_a", "startScrollOptions", "endScrollOptions", "Split", "_a", "date", "items", "_a", "Summary", "items", "_a", "items", "_a", "immediatePromise", "detacher", "date", "id", "el", "_a", "left", "MultiPageExporter", "html", "MultiPageVerticalExporter", "html", "items", "SinglePageExporter", "html", "PdfExport", "SinglePageExporter", "MultiPageExporter", "MultiPageVerticalExporter", "Print", "PdfExport", "Print", "ExcelExporter", "_a", "emptyFn", "fn", "_a", "data", "_a", "fn", "_a", "isArray", "_a", "_a", "_a", "date", "_a", "uniqueOnly", "_a", "date", "_a", "TimeRangeModel", "TimeRangeStore", "TimeRangeModel", "ProjectModel", "TimeRangeModel", "TimeRangeStore", "CrudManager", "_a", "ProjectModel", "TimeRangeModel", "CrudManager", "_a", "format", "_a", "_a", "date", "days", "newEndDate", "day1", "el", "view", "EventEditor", "EventEdit", "_a", "hasEventStore", "EventMenu", "items", "_a", "hasEventStore", "EventTooltip", "_a", "_a", "_a", "pagesExtractor", "emptyArray", "Print", "_a", "ScheduleMenu", "date", "items", "DayZone", "items", "TimeRanges", "_a", "date", "_a", "items", "date", "items", "EMPTY", "item", "_a", "TimeRangeModel", "CrudManager", "ProjectModel", "hasEventStore", "_a", "emptyString", "_a", "locale", "En_default", "immediatePromise", "emptyObject", "eventNameMap", "_a", "items", "fn", "navigator", "month", "result", "date", "filter", "date", "sortEvent", "key", "_a", "isVisible", "lastEvent", "_a", "date", "items", "emptyFn", "eventNameMap", "_a", "date", "now", "day", "_a", "date", "month", "emptyObject", "format", "s1", "date", "_a", "day", "_a", "date", "_a", "date", "items", "_a", "date", "length", "_b", "_a", "date", "MILLIS_PER_HOUR", "preventDefault", "emptyArray", "_a", "date", "day", "items", "filter", "now", "scrollBarWidth", "_a", "date", "day", "date", "_a", "day", "key", "_a", "expandGestures", "date", "_a", "month", "result", "_a", "result", "fn", "items", "scrollBarWidth", "length", "date", "r", "_a", "date", "_a", "month", "date", "_a", "month", "date", "day", "children", "EventNavigation_default", "navigator", "_a", "EventSelection_default", "_a", "byWeight", "isFocusedCalendarMixin", "emptyArray", "_a", "EventNavigation_default", "EventSelection_default", "items", "date", "now", "fn", "result"] }